<?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>66398</bug_id>
          
          <creation_ts>2011-08-17 13:03:04 -0700</creation_ts>
          <short_desc>Add MediaPlayer::audioSourceProvider() method for audio stream access by the Web Audio API.</short_desc>
          <delta_ts>2011-08-26 12:29:46 -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>New Bugs</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Rogers">crogers</reporter>
          <assigned_to name="Chris Rogers">crogers</assigned_to>
          <cc>donggwan.kim</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kbr</cc>
    
    <cc>scherkus</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>452482</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-08-17 13:03:04 -0700</bug_when>
    <thetext>add MediaPlayer API for accessing rendered audio stream by the Web Audio API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452498</commentid>
    <comment_count>1</comment_count>
      <attachid>104220</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-08-17 13:14:42 -0700</bug_when>
    <thetext>Created attachment 104220
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452507</commentid>
    <comment_count>2</comment_count>
      <attachid>104220</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-17 13:25:34 -0700</bug_when>
    <thetext>Comment on attachment 104220
Patch

Attachment 104220 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/9424058</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452514</commentid>
    <comment_count>3</comment_count>
      <attachid>104220</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-08-17 13:31:41 -0700</bug_when>
    <thetext>Comment on attachment 104220
Patch

Attachment 104220 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9424063</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452515</commentid>
    <comment_count>4</comment_count>
      <attachid>104223</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-08-17 13:32:13 -0700</bug_when>
    <thetext>Created attachment 104223
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452577</commentid>
    <comment_count>5</comment_count>
      <attachid>104223</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-08-17 14:26:04 -0700</bug_when>
    <thetext>Comment on attachment 104223
Patch

Could you please provide a little background in the bug report, the ChangeLog, or both indicating what this patch is intended to do and how far along toward that goal it gets?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452589</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-08-17 14:31:20 -0700</bug_when>
    <thetext>This is an initial patch which is part of a prototype implementation of MediaElementAudioSourceNode which I have working (in a local build) in the chromium port so far.  It&apos;s nice to be able to process/analyse/visualize streamed audio sources in addition to the memory-resident audio assets which the Web Audio API currently uses.

One thing which still needs to be addressed is the MediaPlayer object lifetime and thread-safety of this code.  Can somebody familiar with MediaPlayer and its relationship with HTMLMediaElement help me with this?  We need to be careful to avoid the MediaPlayer getting deleted while the MediaElementAudioSourceNode is still consuming the audio stream since it&apos;s not running on the main thread.  One naive approach I can think of is to make the MediaPlayer a ThreadSafeRefCounted object, but there may be other approaches...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452592</commentid>
    <comment_count>7</comment_count>
      <attachid>104223</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-08-17 14:32:45 -0700</bug_when>
    <thetext>Comment on attachment 104223
Patch

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

&gt; Source/WebCore/ChangeLog:3
&gt; +        add MediaPlayer API for accessing rendered audio stream by the Web Audio API

This should be a proper sentence.

&gt; Source/WebCore/platform/graphics/MediaPlayer.cpp:883
&gt; +#if PLATFORM(CHROMIUM)
&gt; +    return m_private-&gt;audioSourceProvider();
&gt; +#else
&gt; +    return 0;
&gt; +#endif

The base audioSourceProvider() returns 0, why not always call it when WEB_AUDIO is defined?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452598</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-08-17 14:37:32 -0700</bug_when>
    <thetext>Please see approach 2 in the Web Audio API specification:
https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html#AudioElementIntegration-section

This was recommended by Ian Hickson over approach 1 since it avoids adding a new attribute to HTMLMediaElement.

This patch will only currently affect the chromium port because of the ENABLE(WEB_AUDIO) guards.  For the other ports (including mac port) if WEB_AUDIO is enabled, it will provide an &quot;empty&quot; implementation which renders silence for this node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452604</commentid>
    <comment_count>9</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-08-17 14:40:07 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/MediaPlayer.cpp:883
&gt; &gt; +#if PLATFORM(CHROMIUM)
&gt; &gt; +    return m_private-&gt;audioSourceProvider();
&gt; &gt; +#else
&gt; &gt; +    return 0;
&gt; &gt; +#endif
&gt; 
&gt; The base audioSourceProvider() returns 0, why not always call it when WEB_AUDIO is defined?

Ok, I can do that.  Does that mean I need to add a stub implementation to MediaPlayerPrivateQTKit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452607</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-08-17 14:41:34 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; 
&gt; Ok, I can do that.  Does that mean I need to add a stub implementation to MediaPlayerPrivateQTKit?

No, the base class implementation will return 0 unless overridden.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452617</commentid>
    <comment_count>11</comment_count>
      <attachid>104252</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-08-17 14:46:40 -0700</bug_when>
    <thetext>Created attachment 104252
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452618</commentid>
    <comment_count>12</comment_count>
      <attachid>104223</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-08-17 14:47:44 -0700</bug_when>
    <thetext>Comment on attachment 104223
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:3
&gt;&gt; +        add MediaPlayer API for accessing rendered audio stream by the Web Audio API
&gt; 
&gt; This should be a proper sentence.

Tried to make this more sentence-like.

&gt;&gt; Source/WebCore/platform/graphics/MediaPlayer.cpp:883
&gt;&gt; +#endif
&gt; 
&gt; The base audioSourceProvider() returns 0, why not always call it when WEB_AUDIO is defined?

FIXED</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453848</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-08-19 08:43:24 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; This is an initial patch which is part of a prototype implementation of MediaElementAudioSourceNode which I have working (in a local build) in the chromium port so far.  It&apos;s nice to be able to process/analyse/visualize streamed audio sources in addition to the memory-resident audio assets which the Web Audio API currently uses.
&gt; 
&gt; One thing which still needs to be addressed is the MediaPlayer object lifetime and thread-safety of this code.  Can somebody familiar with MediaPlayer and its relationship with HTMLMediaElement help me with this?  We need to be careful to avoid the MediaPlayer getting deleted while the MediaElementAudioSourceNode is still consuming the audio stream since it&apos;s not running on the main thread.  One naive approach I can think of is to make the MediaPlayer a ThreadSafeRefCounted object, but there may be other approaches...

MediaPlayer *should* be a private to HTMLMediaElement implementation detail. It isn&apos;t completely private, but that should change. I don&apos;t&apos; think there is any need for this new code to have any knowledge of MediaPlayer, all interaction should be with HTMLMediaElement.

I think we can safely assume that it is not thread safe as that hasn&apos;t been a requirement and MediaPlayer is just a thin wrapper between HTMLMediaElement and the platform media engine (MediaPlayerPrivate&lt;platform&gt;).

HTMLMediaElement has a single MediaPlayer instance, but it has to be able to delete it at any time. Instead of using class magic to try to make it thread safe,  I think it may be wiser in the long run to make HTMLMediaElement be responsible for making sure the audio node is aware of when it is allowed to consume samples. Could it work to have API on MediaElementAudioSourceNode so HTMLMediaElement could stop it from consuming any more data. &quot;disconnect&quot; maybe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453849</commentid>
    <comment_count>14</comment_count>
      <attachid>104252</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-08-19 08:46:50 -0700</bug_when>
    <thetext>Comment on attachment 104252
Patch

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

Marking r- for now until we figure out the threading and lifetime management issues.

&gt; Source/WebCore/platform/graphics/MediaPlayer.h:320
&gt; +#if ENABLE(WEB_AUDIO)
&gt; +    AudioSourceProvider* audioSourceProvider();
&gt; +#endif
&gt; +
&gt;  private:

This should be private.

&gt; Source/WebCore/webaudio/MediaElementAudioSourceNode.cpp:63
&gt; +    if (mediaElement() &amp;&amp; mediaElement()-&gt;player())
&gt; +        return mediaElement()-&gt;player()-&gt;audioSourceProvider();
&gt; +

I would rather the audioSourceProvider() function be on HTMLMediaElement so &quot;player()&quot; isn&apos;t necessary here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454096</commentid>
    <comment_count>15</comment_count>
      <attachid>104567</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-08-19 14:36:55 -0700</bug_when>
    <thetext>Created attachment 104567
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454105</commentid>
    <comment_count>16</comment_count>
      <attachid>104252</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-08-19 14:41:46 -0700</bug_when>
    <thetext>Comment on attachment 104252
Patch

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

Hi Eric, thanks for having a look.  I&apos;ve tried to address your comments and had a go at the thread safety issue by adding a lock to HTMLMediaElement

&gt;&gt; Source/WebCore/platform/graphics/MediaPlayer.h:320
&gt;&gt;  private:
&gt; 
&gt; This should be private.

I&apos;m not sure I understand how it can be private, since HTMLMediaElement needs to call audioSourceProvider()

&gt;&gt; Source/WebCore/webaudio/MediaElementAudioSourceNode.cpp:63
&gt;&gt; +
&gt; 
&gt; I would rather the audioSourceProvider() function be on HTMLMediaElement so &quot;player()&quot; isn&apos;t necessary here.

I&apos;ve added an audioSourceProvider() method to HTMLMediaElement (which then internally calls into the player).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454355</commentid>
    <comment_count>17</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-08-20 12:03:01 -0700</bug_when>
    <thetext>Sorry Eric, I just saw this additional comment you made.  Once again, thanks for having a look at this.

(In reply to comment #13)
&gt; 
&gt; MediaPlayer *should* be a private to HTMLMediaElement implementation detail. It isn&apos;t completely private, but that should change. I don&apos;t&apos; think there is any need for this new code to have any knowledge of MediaPlayer, all interaction should be with HTMLMediaElement.

Agreed, the new patch has the web audio code calling the HTMLMediaElement directly.

&gt; 
&gt; I think we can safely assume that it is not thread safe as that hasn&apos;t been a requirement and MediaPlayer is just a thin wrapper between HTMLMediaElement and the platform media engine (MediaPlayerPrivate&lt;platform&gt;).

Yes, I see that the MediaPlayer can be created (and old one destroyed) at several places.  With this last patch, I&apos;ve taken the approach of adding a lock to HTMLMediaElement to protect the web audio code from these unpredictable changes.  The web audio code needs access to this lock during the time it&apos;s accessing the &quot;AudioSourceProvider&quot;.  In this patch, this lock accessor is called &quot;playerLock()&quot;, but we could call it something different which doesn&apos;t have the word &quot;player&quot; in it, for example.

&gt; 
&gt; HTMLMediaElement has a single MediaPlayer instance, but it has to be able to delete it at any time. Instead of using class magic to try to make it thread safe,  I think it may be wiser in the long run to make HTMLMediaElement be responsible for making sure the audio node is aware of when it is allowed to consume samples. Could it work to have API on MediaElementAudioSourceNode so HTMLMediaElement could stop it from consuming any more data. &quot;disconnect&quot; maybe?

It&apos;s possible for the HTMLMediaElement to let the audio node be aware of when it&apos;s safe.  But, since the audio node code is running in another thread, it would be necessary for the HTMLMediaElement to wait until the audio node has received this message before it changes any state.  In other words, if the audio node is in the middle of running some code (in the audio thread) which calls into the MediaPlayer engine, then it&apos;s not sufficient for the HTMLMediaElement to call the audio node (on the main thread) without acknowledging receipt of the message (handed off from the audio thread).  I believe this would be more complex to code and more difficult to understand, so I would recommend a lock approach similar to the one in this latest patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454415</commentid>
    <comment_count>18</comment_count>
      <attachid>104567</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-08-21 12:24:53 -0700</bug_when>
    <thetext>Comment on attachment 104567
Patch

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

&gt; Source/WebCore/webaudio/MediaElementAudioSourceNode.cpp:86
&gt; +    if (!mediaElement()) {
&gt; +        outputBus-&gt;zero();
&gt; +        return;
&gt; +    }
&gt; +    
&gt; +    Mutex&amp; playerLock = mediaElement()-&gt;playerLock();
&gt; +    
&gt; +    if (playerLock.tryLock()) {
&gt; +        AudioSourceProvider* provider = sourceProvider();
&gt; +        if (provider)
&gt; +            provider-&gt;provideInput(outputBus, numberOfFrames);
&gt; +        else
&gt; +            outputBus-&gt;zero();
&gt; +        playerLock.unlock();
&gt; +    } else
&gt; +        outputBus-&gt;zero();

Will the lock keep the MediaPlayer/AudioSourceProvider from being destroyed if the HTMLMediaElement destructor is called during this processing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454416</commentid>
    <comment_count>19</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-08-21 12:25:20 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 104252 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104252&amp;action=review
&gt; 
&gt; Hi Eric, thanks for having a look.  I&apos;ve tried to address your comments and had a go at the thread safety issue by adding a lock to HTMLMediaElement
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/MediaPlayer.h:320
&gt; &gt;&gt;  private:
&gt; &gt; 
&gt; &gt; This should be private.
&gt; 
&gt; I&apos;m not sure I understand how it can be private, since HTMLMediaElement needs to call audioSourceProvider()
&gt; 
Oops!

(In reply to comment #17)
&gt; &gt; 
&gt; &gt; HTMLMediaElement has a single MediaPlayer instance, but it has to be able to delete it at any time. Instead of using class magic to try to make it thread safe,  I think it may be wiser in the long run to make HTMLMediaElement be responsible for making sure the audio node is aware of when it is allowed to consume samples. Could it work to have API on MediaElementAudioSourceNode so HTMLMediaElement could stop it from consuming any more data. &quot;disconnect&quot; maybe?
&gt; 
&gt; It&apos;s possible for the HTMLMediaElement to let the audio node be aware of when it&apos;s safe.  But, since the audio node code is running in another thread, it would be necessary for the HTMLMediaElement to wait until the audio node has received this message before it changes any state.  In other words, if the audio node is in the middle of running some code (in the audio thread) which calls into the MediaPlayer engine, then it&apos;s not sufficient for the HTMLMediaElement to call the audio node (on the main thread) without acknowledging receipt of the message (handed off from the audio thread).  I believe this would be more complex to code and more difficult to understand, so I would recommend a lock approach similar to the one in this latest patch.

I agree that HTMLMediaElement will have to wait for an ack from the audio node before changing any state, but can&apos;t we do that implicitly by putting the lock in MediaElementAudioSourceNode and have the &quot;MediaPlayer is changing&quot; method take the lock, and have the audio node hold the lock during processing? That way disconnect can&apos;t happen during a pull, and the logic is all kept in the audio node which is already thread safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454436</commentid>
    <comment_count>20</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-08-21 18:28:24 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 104567 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104567&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/webaudio/MediaElementAudioSourceNode.cpp:86
&gt; &gt; +    if (!mediaElement()) {
&gt; &gt; +        outputBus-&gt;zero();
&gt; &gt; +        return;
&gt; &gt; +    }
&gt; &gt; +    
&gt; &gt; +    Mutex&amp; playerLock = mediaElement()-&gt;playerLock();
&gt; &gt; +    
&gt; &gt; +    if (playerLock.tryLock()) {
&gt; &gt; +        AudioSourceProvider* provider = sourceProvider();
&gt; &gt; +        if (provider)
&gt; &gt; +            provider-&gt;provideInput(outputBus, numberOfFrames);
&gt; &gt; +        else
&gt; &gt; +            outputBus-&gt;zero();
&gt; &gt; +        playerLock.unlock();
&gt; &gt; +    } else
&gt; &gt; +        outputBus-&gt;zero();
&gt; 
&gt; Will the lock keep the MediaPlayer/AudioSourceProvider from being destroyed if the HTMLMediaElement destructor is called during this processing?

The destructor cannot be called during processing because the MediaElementAudioSourceNode keeps a reference to the HTMLMediaElement, so that part should be fine.  In other words, the HTMLMediaElement will stay alive as long as the MediaElementAudioSourceNode is alive.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454437</commentid>
    <comment_count>21</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-08-21 18:36:36 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #16)
&gt; &gt; (From update of attachment 104252 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104252&amp;action=review
&gt; &gt; 
&gt; &gt; Hi Eric, thanks for having a look.  I&apos;ve tried to address your comments and had a go at the thread safety issue by adding a lock to HTMLMediaElement
&gt; &gt; 
&gt; &gt; &gt;&gt; Source/WebCore/platform/graphics/MediaPlayer.h:320
&gt; &gt; &gt;&gt;  private:
&gt; &gt; &gt; 
&gt; &gt; &gt; This should be private.
&gt; &gt; 
&gt; &gt; I&apos;m not sure I understand how it can be private, since HTMLMediaElement needs to call audioSourceProvider()
&gt; &gt; 
&gt; Oops!
&gt; 
&gt; (In reply to comment #17)
&gt; &gt; &gt; 
&gt; &gt; &gt; HTMLMediaElement has a single MediaPlayer instance, but it has to be able to delete it at any time. Instead of using class magic to try to make it thread safe,  I think it may be wiser in the long run to make HTMLMediaElement be responsible for making sure the audio node is aware of when it is allowed to consume samples. Could it work to have API on MediaElementAudioSourceNode so HTMLMediaElement could stop it from consuming any more data. &quot;disconnect&quot; maybe?
&gt; &gt; 
&gt; &gt; It&apos;s possible for the HTMLMediaElement to let the audio node be aware of when it&apos;s safe.  But, since the audio node code is running in another thread, it would be necessary for the HTMLMediaElement to wait until the audio node has received this message before it changes any state.  In other words, if the audio node is in the middle of running some code (in the audio thread) which calls into the MediaPlayer engine, then it&apos;s not sufficient for the HTMLMediaElement to call the audio node (on the main thread) without acknowledging receipt of the message (handed off from the audio thread).  I believe this would be more complex to code and more difficult to understand, so I would recommend a lock approach similar to the one in this latest patch.
&gt; 
&gt; I agree that HTMLMediaElement will have to wait for an ack from the audio node before changing any state, but can&apos;t we do that implicitly by putting the lock in MediaElementAudioSourceNode and have the &quot;MediaPlayer is changing&quot; method take the lock, and have the audio node hold the lock during processing? That way disconnect can&apos;t happen during a pull, and the logic is all kept in the audio node which is already thread safe.

Yes, I can move the lock so that it&apos;s owned by the MediaElementAudioSourceNode.  I would have to add a setter to HTMLMediaElement so that it knows about the MediaElementAudioSourceNode (so it can get the lock when &quot;MediaPlayer&quot; is changing).  But this is probably a good idea anyway, since we should handle the case where  HTMLMediaElement refuses to have two or more MediaElementAudioSourceNode objects connected to the same &lt;audio&gt; or &lt;video&gt; element.

Tomorrow, I can work on a new patch moving the lock ownership to MediaElementAudioSourceNode and making sure there&apos;s only a single MediaElementAudioSourceNode &quot;attached&quot; to a HTMLMediaElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454977</commentid>
    <comment_count>22</comment_count>
      <attachid>104747</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-08-22 15:08:57 -0700</bug_when>
    <thetext>Created attachment 104747
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454983</commentid>
    <comment_count>23</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-08-22 15:14:09 -0700</bug_when>
    <thetext>Hi Eric, this latest patch moves the lock into the MediaElementAudioSourceNode as you suggest.  AudioContext::createMediaElementSource() now also forbids an HTMLMediaElement from having more than one MediaElementAudioSourceNode attached to it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454995</commentid>
    <comment_count>24</comment_count>
      <attachid>104747</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-08-22 15:20:49 -0700</bug_when>
    <thetext>Comment on attachment 104747
Patch

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

&gt; Source/WebCore/ChangeLog:7
&gt; +        Add MediaPlayer::audioSourceProvider() method for audio stream access by the Web Audio API.
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=66398
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +

Are there existing tests for this feature? If so, you should mention them here. 

If not you should definitely have some, even if it is only possible to run them in your own build.


&gt; Source/WebCore/html/HTMLMediaElement.h:450
&gt; +#if ENABLE(WEB_AUDIO)
&gt; +    MediaElementAudioSourceNode* m_audioSourceNode;
&gt; +#endif

This should have a comment about why this isn&apos;t a ref pointer, about why it is safe, lifetime, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455021</commentid>
    <comment_count>25</comment_count>
      <attachid>104758</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-08-22 15:53:49 -0700</bug_when>
    <thetext>Created attachment 104758
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455026</commentid>
    <comment_count>26</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-08-22 16:00:44 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (From update of attachment 104747 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104747&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:7
&gt; &gt; +        Add MediaPlayer::audioSourceProvider() method for audio stream access by the Web Audio API.
&gt; &gt; +        https://bugs.webkit.org/show_bug.cgi?id=66398
&gt; &gt; +
&gt; &gt; +        Reviewed by NOBODY (OOPS!).
&gt; &gt; +
&gt; 
&gt; Are there existing tests for this feature? If so, you should mention them here. 
&gt; 
&gt; If not you should definitely have some, even if it is only possible to run them in your own build.

Latest patch adds one new test-case to webaudio/mediaelementaudiosourcenode.html

I&apos;m trying to play catch-up with the layout tests on the Web Audio API.  I have about eight or so right now, but plan on adding many others.

I&apos;m happy to get feedback on the existing tests and suggestions for future tests.  By the way, it would be great to chat sometime about support for the &quot;mac&quot; port.  I&apos;ve been able to build and run the &quot;mac&quot; port version in Safari on Lion, although I ran into what I think is a simple sandboxing issue when trying to load the spatialization resources (should be easy to fix I imagine).


&gt; 
&gt; 
&gt; &gt; Source/WebCore/html/HTMLMediaElement.h:450
&gt; &gt; +#if ENABLE(WEB_AUDIO)
&gt; &gt; +    MediaElementAudioSourceNode* m_audioSourceNode;
&gt; &gt; +#endif
&gt; 
&gt; This should have a comment about why this isn&apos;t a ref pointer, about why it is safe, lifetime, etc.

FIXED</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455406</commentid>
    <comment_count>27</comment_count>
    <who name="Andrew Scherkus">scherkus</who>
    <bug_when>2011-08-23 07:59:48 -0700</bug_when>
    <thetext>what&apos;s the lifetime of a MediaElementAudioSourceNode?

is it possible for it to get deleted and detach itself from an HTMLMediaElement?

if so I wonder if it&apos;s possible to have a race between createMediaPlayer() attempting to grab a lock while MediaElementAudioSourceNode&apos;s destructor is calling setAudioSourceNode(0)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455477</commentid>
    <comment_count>28</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-08-23 10:23:59 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; what&apos;s the lifetime of a MediaElementAudioSourceNode?
&gt; 
&gt; is it possible for it to get deleted and detach itself from an HTMLMediaElement?
&gt; 
&gt; if so I wonder if it&apos;s possible to have a race between createMediaPlayer() attempting to grab a lock while MediaElementAudioSourceNode&apos;s destructor is calling setAudioSourceNode(0)

Yes, the MediaElementAudioSourceNode can go away while the HTMLMediaElement still lives, but in this case there should be no race condition since I think HTMLMediaElement&apos;s use of the lock and the destructor both happen on the main thread (not multiple threads).  I can put as ASSERT(isMainThread()) in HTMLMediaElement::createMediaPlayer() and in the destructor to validate that assumption.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455482</commentid>
    <comment_count>29</comment_count>
    <who name="Andrew Scherkus">scherkus</who>
    <bug_when>2011-08-23 10:29:55 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (In reply to comment #27)
&gt; &gt; what&apos;s the lifetime of a MediaElementAudioSourceNode?
&gt; &gt; 
&gt; &gt; is it possible for it to get deleted and detach itself from an HTMLMediaElement?
&gt; &gt; 
&gt; &gt; if so I wonder if it&apos;s possible to have a race between createMediaPlayer() attempting to grab a lock while MediaElementAudioSourceNode&apos;s destructor is calling setAudioSourceNode(0)
&gt; 
&gt; Yes, the MediaElementAudioSourceNode can go away while the HTMLMediaElement still lives, but in this case there should be no race condition since I think HTMLMediaElement&apos;s use of the lock and the destructor both happen on the main thread (not multiple threads).  I can put as ASSERT(isMainThread()) in HTMLMediaElement::createMediaPlayer() and in the destructor to validate that assumption.

Thanks for the explanation! Having not used ASSERT()s before I&apos;ll defer to Eric on best practices.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455587</commentid>
    <comment_count>30</comment_count>
      <attachid>104886</attachid>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-08-23 12:18:07 -0700</bug_when>
    <thetext>Created attachment 104886
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>455597</commentid>
    <comment_count>31</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-08-23 12:22:52 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; (In reply to comment #28)
&gt; &gt; (In reply to comment #27)
&gt; &gt; &gt; what&apos;s the lifetime of a MediaElementAudioSourceNode?
&gt; &gt; &gt; 
&gt; &gt; &gt; is it possible for it to get deleted and detach itself from an HTMLMediaElement?
&gt; &gt; &gt; 
&gt; &gt; &gt; if so I wonder if it&apos;s possible to have a race between createMediaPlayer() attempting to grab a lock while MediaElementAudioSourceNode&apos;s destructor is calling setAudioSourceNode(0)
&gt; &gt; 
&gt; &gt; Yes, the MediaElementAudioSourceNode can go away while the HTMLMediaElement still lives, but in this case there should be no race condition since I think HTMLMediaElement&apos;s use of the lock and the destructor both happen on the main thread (not multiple threads).  I can put as ASSERT(isMainThread()) in HTMLMediaElement::createMediaPlayer() and in the destructor to validate that assumption.
&gt; 
&gt; Thanks for the explanation! Having not used ASSERT()s before I&apos;ll defer to Eric on best practices.

I think your point is still valid.  I don&apos;t think there&apos;s a thread safety problem with the current patch, but it&apos;s best to bullet-proof ourselves against future changes.  So, I&apos;ve uploaded a new patch with a small change where I explicitly am calling ref() in the lock() method with a corresponding deref() in the unlock() method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>456926</commentid>
    <comment_count>32</comment_count>
      <attachid>104886</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-08-25 09:53:16 -0700</bug_when>
    <thetext>Comment on attachment 104886
Patch

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

&gt; Source/WebCore/ChangeLog:36
&gt; +        * html/HTMLMediaElement.cpp:
&gt; +        (WebCore::HTMLMediaElement::HTMLMediaElement):
&gt; +        (WebCore::HTMLMediaElement::prepareForLoad):
&gt; +        (WebCore::HTMLMediaElement::loadNextSourceChild):
&gt; +        (WebCore::HTMLMediaElement::ensureMediaPlayer):
&gt; +        (WebCore::HTMLMediaElement::createMediaPlayer):
&gt; +        (WebCore::HTMLMediaElement::setAudioSourceNode):
&gt; +        (WebCore::HTMLMediaElement::audioSourceProvider):
&gt; +        * html/HTMLMediaElement.h:
&gt; +        (WebCore::HTMLMediaElement::audioSourceNode):
&gt; +        * platform/graphics/MediaPlayer.cpp:
&gt; +        (WebCore::MediaPlayer::audioSourceProvider):
&gt; +        * platform/graphics/MediaPlayer.h:
&gt; +        * platform/graphics/MediaPlayerPrivate.h:
&gt; +        (WebCore::MediaPlayerPrivateInterface::audioSourceProvider):
&gt; +        * webaudio/AudioContext.cpp:
&gt; +        (WebCore::AudioContext::createMediaElementSource):
&gt; +        * webaudio/AudioContext.h:
&gt; +        * webaudio/AudioContext.idl:
&gt; +        * webaudio/MediaElementAudioSourceNode.cpp:
&gt; +        (WebCore::MediaElementAudioSourceNode::MediaElementAudioSourceNode):
&gt; +        (WebCore::MediaElementAudioSourceNode::~MediaElementAudioSourceNode):
&gt; +        (WebCore::MediaElementAudioSourceNode::process):
&gt; +        * webaudio/MediaElementAudioSourceNode.h:
&gt; +        (WebCore::MediaElementAudioSourceNode::lock):
&gt; +        (WebCore::MediaElementAudioSourceNode::unlock):

It would be helpful to have comments here about what changed in each function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>457705</commentid>
    <comment_count>33</comment_count>
    <who name="Chris Rogers">crogers</who>
    <bug_when>2011-08-26 12:29:46 -0700</bug_when>
    <thetext>Committed r93903: &lt;http://trac.webkit.org/changeset/93903&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104220</attachid>
            <date>2011-08-17 13:14:42 -0700</date>
            <delta_ts>2011-08-17 13:32:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66398-20110817131441.patch</filename>
            <type>text/plain</type>
            <size>5800</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMxMzEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkYWU4MjEyMjgyMDNmY2Zj
NWNlZjM2NGY3YjAzM2MzZTQ2MmJhMGQ1Li5jMTc2M2EzNjY0ODJkMGNmYjYxNmUwYzMxNGM4ZGFk
MGFhNGIzYTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDgtMTcgIENocmlz
IFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBhZGQgTWVkaWFQbGF5ZXIg
QVBJIGZvciBhY2Nlc3NpbmcgcmVuZGVyZWQgYXVkaW8gc3RyZWFtIGJ5IHRoZSBXZWIgQXVkaW8g
QVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM5
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyAtIGRvZXMgbm90IGNoYW5nZSBKYXZhU2NyaXB0IEFQSQorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXI6OmF1ZGlvU291cmNlUHJvdmlkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L01lZGlhUGxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQ
cml2YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6
OmF1ZGlvU291cmNlUHJvdmlkZXIpOgorICAgICAgICAqIHdlYmF1ZGlvL01lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVsZW1lbnRBdWRpb1Nv
dXJjZU5vZGU6Ok1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6On5NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpzb3Vy
Y2VQcm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGU6OnByb2Nlc3MpOgorICAgICAgICAqIHdlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZS5oOgorCiAyMDExLTA4LTE2ICBKZWZmcmV5IFBmYXUgIDxqcGZhdUBhcHBsZS5jb20+CiAK
ICAgICAgICAgTmV3IFhNTCBwYXJzZXI6IFJlcGxhY2UgYXNzZXJ0aW9ucyByZWdhcmRpbmcgY2hh
cmFjdGVyIGRhdGEgaW4gdGhlIHByb2xvZyB3aXRoIHByb3BlciBjaGVja3MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAppbmRleCA0ZDUzNWI2
YjVlMGI4NTdmNWYyMTQ1OGIzMmI2MGQ2ZjRmMmQxMjg4Li5mMjc3NjMyZmY0MTk2ZDdlZTU5Y2Ux
MGZjYzBjYjNkYjQxN2YzMmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuY3BwCkBAIC04NzMsNiArODczLDE3IEBAIHZvaWQgTWVkaWFQbGF5
ZXI6OmNoYXJhY3RlcmlzdGljQ2hhbmdlZCgpCiAgICAgICAgIG1fbWVkaWFQbGF5ZXJDbGllbnQt
Pm1lZGlhUGxheWVyQ2hhcmFjdGVyaXN0aWNDaGFuZ2VkKHRoaXMpOwogfQogCisjaWYgRU5BQkxF
KFdFQl9BVURJTykKK0F1ZGlvU291cmNlUHJvdmlkZXIqIE1lZGlhUGxheWVyOjphdWRpb1NvdXJj
ZVByb3ZpZGVyKCkKK3sKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICByZXR1cm4gbV9wcml2
YXRlLT5hdWRpb1NvdXJjZVByb3ZpZGVyKCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlm
Cit9CisjZW5kaWYgLy8gV0VCX0FVRElPCisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAppbmRleCA4MDA3NmNlYjRlZjllZWU0
ZDRiYWQyNDljYTFmOTMyZjY1M2ZkYzA5Li4wMWVhOTA1NGI3Yzk4NTBjNDNjMTU5YjMzNDMxMWFi
Yzg1N2RlMTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmgKQEAgLTQxLDYgKzQxLDEwIEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKKyNpZiBFTkFCTEUoV0VCX0FVRElP
KQorI2luY2x1ZGUgIkF1ZGlvU291cmNlUHJvdmlkZXIuaCIKKyNlbmRpZgorCiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNlbmRp
ZgpAQCAtMzA5LDYgKzMxMywxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFByaXZhdGVCcm93
c2luZ01vZGUoYm9vbCk7CiAKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIEF1ZGlvU291cmNl
UHJvdmlkZXIqIGF1ZGlvU291cmNlUHJvdmlkZXIoKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAg
IE1lZGlhUGxheWVyKE1lZGlhUGxheWVyQ2xpZW50Kik7CiAgICAgdm9pZCBsb2FkV2l0aE5leHRN
ZWRpYUVuZ2luZShNZWRpYVBsYXllckZhY3RvcnkqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKaW5kZXggYjQ0OTBiYzI3
MTI1NjU0ZmYyN2EwZWNiOTM1NDFjMzZiMGViNTAxZS4uMmI4NmIyMWQyM2E4Mzk2YmFkZDhlYjVj
ZTZjNjYzNjUxZWEyMTZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKQEAgLTE0Niw2ICsxNDYsOCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBjbGVhck1lZGlhQ2FjaGVGb3JTaXRlKGNvbnN0IFN0cmluZyYpIHsgfQogCiAg
ICAgdmlydHVhbCB2b2lkIHNldFByaXZhdGVCcm93c2luZ01vZGUoYm9vbCkgeyB9CisKKyAgICB2
aXJ0dWFsIEF1ZGlvU291cmNlUHJvdmlkZXIqIGF1ZGlvU291cmNlUHJvdmlkZXIoKSB7IHJldHVy
biAwOyB9CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVk
aWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcAppbmRleCBkOWZkNmM1ZWU3MWM3YzBkZTBhMzM0
OTIzYmY4ZmFhODZjMTFiYmE0Li5iYmYxN2Q3YjBhYjA4MzE2YWI5ZmJlZTA5OGI1NjVjMjQ3Y2I0
YjBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRp
b1NvdXJjZU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZS5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkF1ZGlv
Q29udGV4dC5oIgogI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgorI2luY2x1ZGUgIk1lZGlh
UGxheWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDYsMTQgKzQ3LDMyIEBAIE1l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKEF1
ZGlvQ29udGV4dCogY29udGV4dCwKICAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9k
ZU91dHB1dCh0aGlzLCAyKSkpOwogICAgIAogICAgIHNldFR5cGUoTm9kZVR5cGVNZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZSk7CisKKyAgICBpbml0aWFsaXplKCk7Cit9CisKK01lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZTo6fk1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSgpCit7CisgICAgdW5p
bml0aWFsaXplKCk7Cit9CisKK0F1ZGlvU291cmNlUHJvdmlkZXIqIE1lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZTo6c291cmNlUHJvdmlkZXIoKQoreworICAgIGlmIChtZWRpYUVsZW1lbnQoKSAm
JiBtZWRpYUVsZW1lbnQoKS0+cGxheWVyKCkpCisgICAgICAgIHJldHVybiBtZWRpYUVsZW1lbnQo
KS0+cGxheWVyKCktPmF1ZGlvU291cmNlUHJvdmlkZXIoKTsKKworICAgIHJldHVybiAwOwogfQog
Ci12b2lkIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6cHJvY2VzcyhzaXplX3QpCit2b2lk
IE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6cHJvY2VzcyhzaXplX3QgbnVtYmVyT2ZGcmFt
ZXMpCiB7CiAgICAgQXVkaW9CdXMqIG91dHB1dEJ1cyA9IG91dHB1dCgwKS0+YnVzKCk7CiAKLSAg
ICAvLyBGSVhNRTogaW1wbGVtZW50IE1lZGlhUGxheWVyIGFic3RyYWN0aW9uIHRvIGdldCBhdWRp
byBzdHJlYW0gZnJvbSA8YXVkaW8+IGFuZCA8dmlkZW8+Ci0gICAgb3V0cHV0QnVzLT56ZXJvKCk7
CisgICAgQXVkaW9Tb3VyY2VQcm92aWRlciogcHJvdmlkZXIgPSBzb3VyY2VQcm92aWRlcigpOwor
ICAgIGlmIChwcm92aWRlcikKKyAgICAgICAgcHJvdmlkZXItPnByb3ZpZGVJbnB1dChvdXRwdXRC
dXMsIG51bWJlck9mRnJhbWVzKTsKKyAgICBlbHNlCisgICAgICAgIG91dHB1dEJ1cy0+emVybygp
OwogfQogCiB2b2lkIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6cmVzZXQoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
LmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUu
aAppbmRleCAzZjhlMDUwOWYxYzEzZjA1Yzk5ZTFiNjdkMjVlMWI3Njc2NmQ3YTA1Li42ZTljMzU3
MmFiMjU1MTdjYmMzY2NhZmE4MTFhNWY2ZGVlZjllOWUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaApAQCAtMzcsNiAr
MzcsOCBAQCBjbGFzcyBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUgOiBwdWJsaWMgQXVkaW9T
b3VyY2VOb2RlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUVsZW1lbnRB
dWRpb1NvdXJjZU5vZGU+IGNyZWF0ZShBdWRpb0NvbnRleHQqLCBIVE1MTWVkaWFFbGVtZW50Kik7
CiAKKyAgICB2aXJ0dWFsIH5NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoKTsKKwogICAgIEhU
TUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCgpIHsgcmV0dXJuIG1fbWVkaWFFbGVtZW50Lmdl
dCgpOyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogCiAgICAgLy8g
QXVkaW9Ob2RlCkBAIC00Niw2ICs0OCw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgTWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlKEF1ZGlvQ29udGV4dCosIEhUTUxNZWRpYUVsZW1lbnQqKTsK
IAorICAgIEF1ZGlvU291cmNlUHJvdmlkZXIqIHNvdXJjZVByb3ZpZGVyKCk7CisKICAgICBSZWZQ
dHI8SFRNTE1lZGlhRWxlbWVudD4gbV9tZWRpYUVsZW1lbnQ7CiB9OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104223</attachid>
            <date>2011-08-17 13:32:13 -0700</date>
            <delta_ts>2011-08-17 14:47:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66398-20110817133212.patch</filename>
            <type>text/plain</type>
            <size>5775</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMxMzEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkYWU4MjEyMjgyMDNmY2Zj
NWNlZjM2NGY3YjAzM2MzZTQ2MmJhMGQ1Li5jOWE1NGY2ODczZDM0NmI5N2Y3NzkxODk3ZmExODJh
YzI1NzI5YWM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDgtMTcgIENocmlz
IFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBhZGQgTWVkaWFQbGF5ZXIg
QVBJIGZvciBhY2Nlc3NpbmcgcmVuZGVyZWQgYXVkaW8gc3RyZWFtIGJ5IHRoZSBXZWIgQXVkaW8g
QVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM5
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXI6OmF1ZGlvU291cmNlUHJvdmlkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L01lZGlhUGxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQ
cml2YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6
OmF1ZGlvU291cmNlUHJvdmlkZXIpOgorICAgICAgICAqIHdlYmF1ZGlvL01lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVsZW1lbnRBdWRpb1Nv
dXJjZU5vZGU6Ok1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6On5NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpzb3Vy
Y2VQcm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGU6OnByb2Nlc3MpOgorICAgICAgICAqIHdlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZS5oOgorCiAyMDExLTA4LTE2ICBKZWZmcmV5IFBmYXUgIDxqcGZhdUBhcHBsZS5jb20+CiAK
ICAgICAgICAgTmV3IFhNTCBwYXJzZXI6IFJlcGxhY2UgYXNzZXJ0aW9ucyByZWdhcmRpbmcgY2hh
cmFjdGVyIGRhdGEgaW4gdGhlIHByb2xvZyB3aXRoIHByb3BlciBjaGVja3MKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAppbmRleCA0ZDUzNWI2
YjVlMGI4NTdmNWYyMTQ1OGIzMmI2MGQ2ZjRmMmQxMjg4Li5mMjc3NjMyZmY0MTk2ZDdlZTU5Y2Ux
MGZjYzBjYjNkYjQxN2YzMmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9NZWRpYVBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXIuY3BwCkBAIC04NzMsNiArODczLDE3IEBAIHZvaWQgTWVkaWFQbGF5
ZXI6OmNoYXJhY3RlcmlzdGljQ2hhbmdlZCgpCiAgICAgICAgIG1fbWVkaWFQbGF5ZXJDbGllbnQt
Pm1lZGlhUGxheWVyQ2hhcmFjdGVyaXN0aWNDaGFuZ2VkKHRoaXMpOwogfQogCisjaWYgRU5BQkxF
KFdFQl9BVURJTykKK0F1ZGlvU291cmNlUHJvdmlkZXIqIE1lZGlhUGxheWVyOjphdWRpb1NvdXJj
ZVByb3ZpZGVyKCkKK3sKKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICByZXR1cm4gbV9wcml2
YXRlLT5hdWRpb1NvdXJjZVByb3ZpZGVyKCk7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlm
Cit9CisjZW5kaWYgLy8gV0VCX0FVRElPCisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAppbmRleCA4MDA3NmNlYjRlZjllZWU0
ZDRiYWQyNDljYTFmOTMyZjY1M2ZkYzA5Li4wMWVhOTA1NGI3Yzk4NTBjNDNjMTU5YjMzNDMxMWFi
Yzg1N2RlMTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
UGxheWVyLmgKQEAgLTQxLDYgKzQxLDEwIEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKKyNpZiBFTkFCTEUoV0VCX0FVRElP
KQorI2luY2x1ZGUgIkF1ZGlvU291cmNlUHJvdmlkZXIuaCIKKyNlbmRpZgorCiAjaWYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNlbmRp
ZgpAQCAtMzA5LDYgKzMxMywxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFByaXZhdGVCcm93
c2luZ01vZGUoYm9vbCk7CiAKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIEF1ZGlvU291cmNl
UHJvdmlkZXIqIGF1ZGlvU291cmNlUHJvdmlkZXIoKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAg
IE1lZGlhUGxheWVyKE1lZGlhUGxheWVyQ2xpZW50Kik7CiAgICAgdm9pZCBsb2FkV2l0aE5leHRN
ZWRpYUVuZ2luZShNZWRpYVBsYXllckZhY3RvcnkqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKaW5kZXggYjQ0OTBiYzI3
MTI1NjU0ZmYyN2EwZWNiOTM1NDFjMzZiMGViNTAxZS4uMDk5ZDNlOWIxNGU2NmI5YTE5MjZkNDk5
MTc0Mjc3MjkzNzQ5OGVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKQEAgLTE0Niw2ICsxNDYsMTAgQEAgcHVibGlj
OgogICAgIHZvaWQgY2xlYXJNZWRpYUNhY2hlRm9yU2l0ZShjb25zdCBTdHJpbmcmKSB7IH0KIAog
ICAgIHZpcnR1YWwgdm9pZCBzZXRQcml2YXRlQnJvd3NpbmdNb2RlKGJvb2wpIHsgfQorCisjaWYg
RU5BQkxFKFdFQl9BVURJTykKKyAgICB2aXJ0dWFsIEF1ZGlvU291cmNlUHJvdmlkZXIqIGF1ZGlv
U291cmNlUHJvdmlkZXIoKSB7IHJldHVybiAwOyB9CisjZW5kaWYKIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUu
Y3BwCmluZGV4IGQ5ZmQ2YzVlZTcxYzdjMGRlMGEzMzQ5MjNiZjhmYWE4NmMxMWJiYTQuLmJiZjE3
ZDdiMGFiMDgzMTZhYjlmYmVlMDk4YjU2NWMyNDdjYjRiMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcApAQCAt
MzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQXVkaW9Db250ZXh0LmgiCiAjaW5jbHVkZSAiQXVk
aW9Ob2RlT3V0cHV0LmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXIuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC00NiwxNCArNDcsMzIgQEAgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
OjpNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoQXVkaW9Db250ZXh0KiBjb250ZXh0LAogICAg
IGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0KHRoaXMsIDIpKSk7CiAgICAg
CiAgICAgc2V0VHlwZShOb2RlVHlwZU1lZGlhRWxlbWVudEF1ZGlvU291cmNlKTsKKworICAgIGlu
aXRpYWxpemUoKTsKK30KKworTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjp+TWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2VOb2RlKCkKK3sKKyAgICB1bmluaXRpYWxpemUoKTsKK30KKworQXVkaW9T
b3VyY2VQcm92aWRlciogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpzb3VyY2VQcm92aWRl
cigpCit7CisgICAgaWYgKG1lZGlhRWxlbWVudCgpICYmIG1lZGlhRWxlbWVudCgpLT5wbGF5ZXIo
KSkKKyAgICAgICAgcmV0dXJuIG1lZGlhRWxlbWVudCgpLT5wbGF5ZXIoKS0+YXVkaW9Tb3VyY2VQ
cm92aWRlcigpOworCisgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgTWVkaWFFbGVtZW50QXVkaW9T
b3VyY2VOb2RlOjpwcm9jZXNzKHNpemVfdCkKK3ZvaWQgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VO
b2RlOjpwcm9jZXNzKHNpemVfdCBudW1iZXJPZkZyYW1lcykKIHsKICAgICBBdWRpb0J1cyogb3V0
cHV0QnVzID0gb3V0cHV0KDApLT5idXMoKTsKIAotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgTWVk
aWFQbGF5ZXIgYWJzdHJhY3Rpb24gdG8gZ2V0IGF1ZGlvIHN0cmVhbSBmcm9tIDxhdWRpbz4gYW5k
IDx2aWRlbz4KLSAgICBvdXRwdXRCdXMtPnplcm8oKTsKKyAgICBBdWRpb1NvdXJjZVByb3ZpZGVy
KiBwcm92aWRlciA9IHNvdXJjZVByb3ZpZGVyKCk7CisgICAgaWYgKHByb3ZpZGVyKQorICAgICAg
ICBwcm92aWRlci0+cHJvdmlkZUlucHV0KG91dHB1dEJ1cywgbnVtYmVyT2ZGcmFtZXMpOworICAg
IGVsc2UKKyAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7CiB9CiAKIHZvaWQgTWVkaWFFbGVtZW50
QXVkaW9Tb3VyY2VOb2RlOjpyZXNldCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJh
dWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oCmluZGV4IDNmOGUwNTA5ZjFjMTNmMDVj
OTllMWI2N2QyNWUxYjc2NzY2ZDdhMDUuLjZlOWMzNTcyYWIyNTUxN2NiYzNjY2FmYTgxMWE1ZjZk
ZWVmOWU5ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxl
bWVudEF1ZGlvU291cmNlTm9kZS5oCkBAIC0zNyw2ICszNyw4IEBAIGNsYXNzIE1lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZSA6IHB1YmxpYyBBdWRpb1NvdXJjZU5vZGUgewogcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gY3JlYXRlKEF1
ZGlvQ29udGV4dCosIEhUTUxNZWRpYUVsZW1lbnQqKTsKIAorICAgIHZpcnR1YWwgfk1lZGlhRWxl
bWVudEF1ZGlvU291cmNlTm9kZSgpOworCiAgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVt
ZW50KCkgeyByZXR1cm4gbV9tZWRpYUVsZW1lbnQuZ2V0KCk7IH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCiAKICAgICAvLyBBdWRpb05vZGUKQEAgLTQ2LDYgKzQ4LDgg
QEAgcHVibGljOgogcHJpdmF0ZToKICAgICBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoQXVk
aW9Db250ZXh0KiwgSFRNTE1lZGlhRWxlbWVudCopOwogCisgICAgQXVkaW9Tb3VyY2VQcm92aWRl
ciogc291cmNlUHJvdmlkZXIoKTsKKwogICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBtX21l
ZGlhRWxlbWVudDsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104252</attachid>
            <date>2011-08-17 14:46:40 -0700</date>
            <delta_ts>2011-08-19 14:41:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66398-20110817144639.patch</filename>
            <type>text/plain</type>
            <size>5736</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMxMzEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkYWU4MjEyMjgyMDNmY2Zj
NWNlZjM2NGY3YjAzM2MzZTQ2MmJhMGQ1Li44ZGNlNDhiNzMzMzBmOTM2OTA2NWY1NWMwY2JmOWE3
MDlmYzI5MjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDgtMTcgIENocmlz
IFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgTWVkaWFQbGF5ZXI6
OmF1ZGlvU291cmNlUHJvdmlkZXIoKSBtZXRob2QgZm9yIGF1ZGlvIHN0cmVhbSBhY2Nlc3MgYnkg
dGhlIFdlYiBBdWRpbyBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NjM5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmF1ZGlvU291cmNlUHJvdmlkZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFQbGF5ZXJQcml2YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclBy
aXZhdGVJbnRlcmZhY2U6OmF1ZGlvU291cmNlUHJvdmlkZXIpOgorICAgICAgICAqIHdlYmF1ZGlv
L01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6Ok1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6On5NZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbGVtZW50QXVkaW9T
b3VyY2VOb2RlOjpzb3VyY2VQcm92aWRlcik6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZU5vZGU6OnByb2Nlc3MpOgorICAgICAgICAqIHdlYmF1ZGlvL01lZGlhRWxl
bWVudEF1ZGlvU291cmNlTm9kZS5oOgorCiAyMDExLTA4LTE2ICBKZWZmcmV5IFBmYXUgIDxqcGZh
dUBhcHBsZS5jb20+CiAKICAgICAgICAgTmV3IFhNTCBwYXJzZXI6IFJlcGxhY2UgYXNzZXJ0aW9u
cyByZWdhcmRpbmcgY2hhcmFjdGVyIGRhdGEgaW4gdGhlIHByb2xvZyB3aXRoIHByb3BlciBjaGVj
a3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNw
cAppbmRleCA0ZDUzNWI2YjVlMGI4NTdmNWYyMTQ1OGIzMmI2MGQ2ZjRmMmQxMjg4Li5lN2ZkMGIz
MmQzMWRlNWJhMjQ4MDQ0ZWUzNTEzMGQ4NTY4YzQzY2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCkBAIC04NzMsNiArODczLDEzIEBA
IHZvaWQgTWVkaWFQbGF5ZXI6OmNoYXJhY3RlcmlzdGljQ2hhbmdlZCgpCiAgICAgICAgIG1fbWVk
aWFQbGF5ZXJDbGllbnQtPm1lZGlhUGxheWVyQ2hhcmFjdGVyaXN0aWNDaGFuZ2VkKHRoaXMpOwog
fQogCisjaWYgRU5BQkxFKFdFQl9BVURJTykKK0F1ZGlvU291cmNlUHJvdmlkZXIqIE1lZGlhUGxh
eWVyOjphdWRpb1NvdXJjZVByb3ZpZGVyKCkKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5hdWRp
b1NvdXJjZVByb3ZpZGVyKCk7Cit9CisjZW5kaWYgLy8gV0VCX0FVRElPCisKIH0KIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXll
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAppbmRl
eCA4MDA3NmNlYjRlZjllZWU0ZDRiYWQyNDljYTFmOTMyZjY1M2ZkYzA5Li4wMWVhOTA1NGI3Yzk4
NTBjNDNjMTU5YjMzNDMxMWFiYzg1N2RlMTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKQEAgLTQxLDYgKzQxLDEwIEBACiAjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKKyNp
ZiBFTkFCTEUoV0VCX0FVRElPKQorI2luY2x1ZGUgIkF1ZGlvU291cmNlUHJvdmlkZXIuaCIKKyNl
bmRpZgorCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkdyYXBo
aWNzTGF5ZXIuaCIKICNlbmRpZgpAQCAtMzA5LDYgKzMxMywxMCBAQCBwdWJsaWM6CiAKICAgICB2
b2lkIHNldFByaXZhdGVCcm93c2luZ01vZGUoYm9vbCk7CiAKKyNpZiBFTkFCTEUoV0VCX0FVRElP
KQorICAgIEF1ZGlvU291cmNlUHJvdmlkZXIqIGF1ZGlvU291cmNlUHJvdmlkZXIoKTsKKyNlbmRp
ZgorCiBwcml2YXRlOgogICAgIE1lZGlhUGxheWVyKE1lZGlhUGxheWVyQ2xpZW50Kik7CiAgICAg
dm9pZCBsb2FkV2l0aE5leHRNZWRpYUVuZ2luZShNZWRpYVBsYXllckZhY3RvcnkqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRl
LmgKaW5kZXggYjQ0OTBiYzI3MTI1NjU0ZmYyN2EwZWNiOTM1NDFjMzZiMGViNTAxZS4uMDk5ZDNl
OWIxNGU2NmI5YTE5MjZkNDk5MTc0Mjc3MjkzNzQ5OGVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKQEAgLTE0Niw2
ICsxNDYsMTAgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJNZWRpYUNhY2hlRm9yU2l0ZShjb25z
dCBTdHJpbmcmKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBzZXRQcml2YXRlQnJvd3NpbmdNb2Rl
KGJvb2wpIHsgfQorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyAgICB2aXJ0dWFsIEF1ZGlvU291
cmNlUHJvdmlkZXIqIGF1ZGlvU291cmNlUHJvdmlkZXIoKSB7IHJldHVybiAwOyB9CisjZW5kaWYK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZU5vZGUuY3BwCmluZGV4IGQ5ZmQ2YzVlZTcxYzdjMGRlMGEzMzQ5MjNiZjhm
YWE4NmMxMWJiYTQuLmJiZjE3ZDdiMGFiMDgzMTZhYjlmYmVlMDk4YjU2NWMyNDdjYjRiMGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9T
b3VyY2VOb2RlLmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQXVkaW9Db250ZXh0
LmgiCiAjaW5jbHVkZSAiQXVkaW9Ob2RlT3V0cHV0LmgiCisjaW5jbHVkZSAiTWVkaWFQbGF5ZXIu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00NiwxNCArNDcsMzIgQEAgTWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2VOb2RlOjpNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoQXVkaW9Db250
ZXh0KiBjb250ZXh0LAogICAgIGFkZE91dHB1dChhZG9wdFB0cihuZXcgQXVkaW9Ob2RlT3V0cHV0
KHRoaXMsIDIpKSk7CiAgICAgCiAgICAgc2V0VHlwZShOb2RlVHlwZU1lZGlhRWxlbWVudEF1ZGlv
U291cmNlKTsKKworICAgIGluaXRpYWxpemUoKTsKK30KKworTWVkaWFFbGVtZW50QXVkaW9Tb3Vy
Y2VOb2RlOjp+TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKCkKK3sKKyAgICB1bmluaXRpYWxp
emUoKTsKK30KKworQXVkaW9Tb3VyY2VQcm92aWRlciogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VO
b2RlOjpzb3VyY2VQcm92aWRlcigpCit7CisgICAgaWYgKG1lZGlhRWxlbWVudCgpICYmIG1lZGlh
RWxlbWVudCgpLT5wbGF5ZXIoKSkKKyAgICAgICAgcmV0dXJuIG1lZGlhRWxlbWVudCgpLT5wbGF5
ZXIoKS0+YXVkaW9Tb3VyY2VQcm92aWRlcigpOworCisgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQg
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpwcm9jZXNzKHNpemVfdCkKK3ZvaWQgTWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpwcm9jZXNzKHNpemVfdCBudW1iZXJPZkZyYW1lcykKIHsK
ICAgICBBdWRpb0J1cyogb3V0cHV0QnVzID0gb3V0cHV0KDApLT5idXMoKTsKIAotICAgIC8vIEZJ
WE1FOiBpbXBsZW1lbnQgTWVkaWFQbGF5ZXIgYWJzdHJhY3Rpb24gdG8gZ2V0IGF1ZGlvIHN0cmVh
bSBmcm9tIDxhdWRpbz4gYW5kIDx2aWRlbz4KLSAgICBvdXRwdXRCdXMtPnplcm8oKTsKKyAgICBB
dWRpb1NvdXJjZVByb3ZpZGVyKiBwcm92aWRlciA9IHNvdXJjZVByb3ZpZGVyKCk7CisgICAgaWYg
KHByb3ZpZGVyKQorICAgICAgICBwcm92aWRlci0+cHJvdmlkZUlucHV0KG91dHB1dEJ1cywgbnVt
YmVyT2ZGcmFtZXMpOworICAgIGVsc2UKKyAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7CiB9CiAK
IHZvaWQgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpyZXNldCgpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oCmluZGV4
IDNmOGUwNTA5ZjFjMTNmMDVjOTllMWI2N2QyNWUxYjc2NzY2ZDdhMDUuLjZlOWMzNTcyYWIyNTUx
N2NiYzNjY2FmYTgxMWE1ZjZkZWVmOWU5ZTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oCkBAIC0zNyw2ICszNyw4IEBA
IGNsYXNzIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSA6IHB1YmxpYyBBdWRpb1NvdXJjZU5v
ZGUgewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhRWxlbWVudEF1ZGlvU291
cmNlTm9kZT4gY3JlYXRlKEF1ZGlvQ29udGV4dCosIEhUTUxNZWRpYUVsZW1lbnQqKTsKIAorICAg
IHZpcnR1YWwgfk1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSgpOworCiAgICAgSFRNTE1lZGlh
RWxlbWVudCogbWVkaWFFbGVtZW50KCkgeyByZXR1cm4gbV9tZWRpYUVsZW1lbnQuZ2V0KCk7IH0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAKICAgICAvLyBBdWRpb05v
ZGUKQEAgLTQ2LDYgKzQ4LDggQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBNZWRpYUVsZW1lbnRB
dWRpb1NvdXJjZU5vZGUoQXVkaW9Db250ZXh0KiwgSFRNTE1lZGlhRWxlbWVudCopOwogCisgICAg
QXVkaW9Tb3VyY2VQcm92aWRlciogc291cmNlUHJvdmlkZXIoKTsKKwogICAgIFJlZlB0cjxIVE1M
TWVkaWFFbGVtZW50PiBtX21lZGlhRWxlbWVudDsKIH07CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104567</attachid>
            <date>2011-08-19 14:36:55 -0700</date>
            <delta_ts>2011-08-22 15:08:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66398-20110819143653.patch</filename>
            <type>text/plain</type>
            <size>9395</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMzMjUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmOWYxNTI3MWE1YTZiMzI5
YTE2OThkMGYwNWI5OTQ4ODU3NmE4ZTc0Li4wZmFlYjFkYjI4MTZlMzAyYzM3NWRhZmI0NGZkMTVk
ODhhNDk2YzI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMDgtMTkgIENocmlz
IFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBhZGQgTWVkaWFQbGF5ZXIg
QVBJIGZvciBhY2Nlc3NpbmcgcmVuZGVyZWQgYXVkaW8gc3RyZWFtIGJ5IHRoZSBXZWIgQXVkaW8g
QVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM5
OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1l
bnQ6OnByZXBhcmVGb3JMb2FkKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6
OmxvYWROZXh0U291cmNlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6ZW5zdXJlTWVkaWFQbGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6Y3JlYXRlTWVkaWFQbGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVu
dDo6YXVkaW9Tb3VyY2VQcm92aWRlcik6CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpwbGF5ZXJMb2NrKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpNZWRpYVBsYXllcjo6YXVkaW9Tb3VyY2VQcm92aWRlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllclByaXZhdGUuaDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0
ZUludGVyZmFjZTo6YXVkaW9Tb3VyY2VQcm92aWRlcik6CisgICAgICAgICogd2ViYXVkaW8vTWVk
aWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRWxl
bWVudEF1ZGlvU291cmNlTm9kZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6fk1lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUVsZW1lbnRBdWRpb1NvdXJj
ZU5vZGU6OnNvdXJjZVByb3ZpZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZTo6cHJvY2Vzcyk6CisgICAgICAgICogd2ViYXVkaW8vTWVkaWFFbGVtZW50
QXVkaW9Tb3VyY2VOb2RlLmg6CisKIDIwMTEtMDgtMTggIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVy
c2NhQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggY2xhbmcgbGliYysrIEMrKzB4IGJ1aWxkCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAppbmRleCAzYjFiOGE3ZjljOTM3
YzM1ZjA4YmQ5ODNkNzU5NWFkOTBmZjY5OTZmLi5kMDg1ZDFjMzllM2Q4ZjFmMzQ0YjgzMWIwZDUx
NDJlYjkzNzIzMGZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAK
QEAgLTUzMCw3ICs1MzAsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnByZXBhcmVGb3JMb2Fk
KCkKICAgICAgICAgc2NoZWR1bGVFdmVudChldmVudE5hbWVzKCkuYWJvcnRFdmVudCk7CiAKICNp
ZiAhRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCi0gICAgbV9wbGF5ZXIgPSBNZWRpYVBs
YXllcjo6Y3JlYXRlKHRoaXMpOworICAgIGNyZWF0ZU1lZGlhUGxheWVyKCk7CiAjZWxzZQogICAg
IGlmIChtX3BsYXllcikKICAgICAgICAgbV9wbGF5ZXItPmNhbmNlbExvYWQoKTsKQEAgLTY3Niw3
ICs2NzYsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmxvYWROZXh0U291cmNlQ2hpbGQoKQog
CiAjaWYgIUVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQogICAgIC8vIFJlY3JlYXRlIHRo
ZSBtZWRpYSBwbGF5ZXIgZm9yIHRoZSBuZXcgdXJsCi0gICAgbV9wbGF5ZXIgPSBNZWRpYVBsYXll
cjo6Y3JlYXRlKHRoaXMpOworICAgIGNyZWF0ZU1lZGlhUGxheWVyKCk7CiAjZW5kaWYKIAogICAg
IG1fbG9hZFN0YXRlID0gTG9hZGluZ0Zyb21Tb3VyY2VFbGVtZW50OwpAQCAtMjQ2MSw3ICsyNDYx
LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBl
dmVudCkKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZW5zdXJlTWVkaWFQbGF5ZXIoKQogewogICAg
IGlmICghbV9wbGF5ZXIpCi0gICAgICAgIG1fcGxheWVyID0gTWVkaWFQbGF5ZXI6OmNyZWF0ZSh0
aGlzKTsKKyAgICAgICAgY3JlYXRlTWVkaWFQbGF5ZXIoKTsKIH0KIAogdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpkZWxpdmVyTm90aWZpY2F0aW9uKE1lZGlhUGxheWVyUHJveHlOb3RpZmljYXRpb25U
eXBlIG5vdGlmaWNhdGlvbikKQEAgLTI4MDEsNiArMjgwMSwyMiBAQCB2b2lkKiBIVE1MTWVkaWFF
bGVtZW50OjpwcmVEaXNwYXRjaEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiAgICAgcmV0dXJu
IDA7CiB9CiAKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6Y3JlYXRlTWVkaWFQbGF5ZXIoKQorewor
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3BsYXllckxvY2spOworICAgIG1fcGxheWVyID0gTWVk
aWFQbGF5ZXI6OmNyZWF0ZSh0aGlzKTsKK30KKworI2lmIEVOQUJMRShXRUJfQVVESU8pCitBdWRp
b1NvdXJjZVByb3ZpZGVyKiBIVE1MTWVkaWFFbGVtZW50OjphdWRpb1NvdXJjZVByb3ZpZGVyKCkK
K3sKKyAgICBpZiAobV9wbGF5ZXIpCisgICAgICAgIHJldHVybiBtX3BsYXllci0+YXVkaW9Tb3Vy
Y2VQcm92aWRlcigpOworCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogfQogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKaW5kZXggYWNlNWIwNmU5NjY2NDVj
NWEwNDhiMGMzNzdlNDllYjI5ZTExMjdhNC4uOGNmNzIyODJjZmU0ZTk0NDZhMWEyMWM4YjAwMDRh
ZjJkNzM1MGZjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKQEAgLTMy
LDYgKzMyLDcgQEAKICNpbmNsdWRlICJBY3RpdmVET01PYmplY3QuaCIKICNpbmNsdWRlICJNZWRp
YUNhblN0YXJ0TGlzdGVuZXIuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1ZGUg
IlRocmVhZGluZy5oIgogCiAjaWYgRU5BQkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCiAjaW5j
bHVkZSAiTWVkaWFQbGF5ZXJQcm94eS5oIgpAQCAtMzksNiArNDAsOSBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorY2xhc3MgQXVkaW9Tb3VyY2VQcm92
aWRlcjsKKyNlbmRpZgogY2xhc3MgRXZlbnQ7CiBjbGFzcyBIVE1MU291cmNlRWxlbWVudDsKIGNs
YXNzIE1lZGlhQ29udHJvbHM7CkBAIC0yMDEsNiArMjA1LDExIEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgaXNQbGF5aW5nKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5aW5nOyB9CiAKKyNpZiBFTkFCTEUo
V0VCX0FVRElPKQorICAgIEF1ZGlvU291cmNlUHJvdmlkZXIqIGF1ZGlvU291cmNlUHJvdmlkZXIo
KTsKKyAgICBNdXRleCYgcGxheWVyTG9jaygpIHsgcmV0dXJuIG1fcGxheWVyTG9jazsgfQorI2Vu
ZGlmCisKIHByb3RlY3RlZDoKICAgICBIVE1MTWVkaWFFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCopOwogICAgIHZpcnR1YWwgfkhUTUxNZWRpYUVsZW1lbnQoKTsKQEAgLTIx
OSw2ICsyMjgsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgdmlydHVhbCBib29sIGlzTWVkaWFFbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiBwcml2YXRlOgorICAgIHZvaWQgY3JlYXRlTWVk
aWFQbGF5ZXIoKTsKKwogICAgIHZpcnR1YWwgdm9pZCBhdHRyaWJ1dGVDaGFuZ2VkKEF0dHJpYnV0
ZSosIGJvb2wgcHJlc2VydmVEZWNscyk7CiAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVk
ZWQoY29uc3QgTm9kZVJlbmRlcmluZ0NvbnRleHQmKTsKICAgICB2aXJ0dWFsIFJlbmRlck9iamVj
dCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOwpAQCAtNDMxLDYg
KzQ0Miw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2xvYWRJbml0aWF0ZWRCeVVzZXJHZXN0dXJl
IDogMTsKICAgICBib29sIG1fY29tcGxldGVseUxvYWRlZCA6IDE7CiAgICAgYm9vbCBtX2hhdmVQ
cmVwYXJlZFRvUGxheSA6IDE7CisKKyAgICBNdXRleCBtX3BsYXllckxvY2s7CiB9OwogCiB9IC8v
bmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9N
ZWRpYVBsYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBs
YXllci5jcHAKaW5kZXggNGQ1MzViNmI1ZTBiODU3ZjVmMjE0NThiMzJiNjBkNmY0ZjJkMTI4OC4u
ZTdmZDBiMzJkMzFkZTViYTI0ODA0NGVlMzUxMzBkODU2OGM0M2NiMSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcApAQCAtODczLDYgKzg3
MywxMyBAQCB2b2lkIE1lZGlhUGxheWVyOjpjaGFyYWN0ZXJpc3RpY0NoYW5nZWQoKQogICAgICAg
ICBtX21lZGlhUGxheWVyQ2xpZW50LT5tZWRpYVBsYXllckNoYXJhY3RlcmlzdGljQ2hhbmdlZCh0
aGlzKTsKIH0KIAorI2lmIEVOQUJMRShXRUJfQVVESU8pCitBdWRpb1NvdXJjZVByb3ZpZGVyKiBN
ZWRpYVBsYXllcjo6YXVkaW9Tb3VyY2VQcm92aWRlcigpCit7CisgICAgcmV0dXJuIG1fcHJpdmF0
ZS0+YXVkaW9Tb3VyY2VQcm92aWRlcigpOworfQorI2VuZGlmIC8vIFdFQl9BVURJTworCiB9CiAK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFQbGF5ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
LmgKaW5kZXggODAwNzZjZWI0ZWY5ZWVlNGQ0YmFkMjQ5Y2ExZjkzMmY2NTNmZGMwOS4uMDFlYTkw
NTRiN2M5ODUwYzQzYzE1OWIzMzQzMTFhYmM4NTdkZTE3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCkBAIC00MSw2ICs0MSwxMCBAQAogI2lu
Y2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5o
PgogCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyNpbmNsdWRlICJBdWRpb1NvdXJjZVByb3ZpZGVy
LmgiCisjZW5kaWYKKwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpbmNsdWRl
ICJHcmFwaGljc0xheWVyLmgiCiAjZW5kaWYKQEAgLTMwOSw2ICszMTMsMTAgQEAgcHVibGljOgog
CiAgICAgdm9pZCBzZXRQcml2YXRlQnJvd3NpbmdNb2RlKGJvb2wpOwogCisjaWYgRU5BQkxFKFdF
Ql9BVURJTykKKyAgICBBdWRpb1NvdXJjZVByb3ZpZGVyKiBhdWRpb1NvdXJjZVByb3ZpZGVyKCk7
CisjZW5kaWYKKwogcHJpdmF0ZToKICAgICBNZWRpYVBsYXllcihNZWRpYVBsYXllckNsaWVudCop
OwogICAgIHZvaWQgbG9hZFdpdGhOZXh0TWVkaWFFbmdpbmUoTWVkaWFQbGF5ZXJGYWN0b3J5Kik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXll
clByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
UHJpdmF0ZS5oCmluZGV4IGI0NDkwYmMyNzEyNTY1NGZmMjdhMGVjYjkzNTQxYzM2YjBlYjUwMWUu
LjA5OWQzZTliMTRlNjZiOWExOTI2ZDQ5OTE3NDI3NzI5Mzc0OThlYzIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oCkBA
IC0xNDYsNiArMTQ2LDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyTWVkaWFDYWNoZUZvclNp
dGUoY29uc3QgU3RyaW5nJikgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJpdmF0ZUJyb3dz
aW5nTW9kZShib29sKSB7IH0KKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgdmlydHVhbCBB
dWRpb1NvdXJjZVByb3ZpZGVyKiBhdWRpb1NvdXJjZVByb3ZpZGVyKCkgeyByZXR1cm4gMDsgfQor
I2VuZGlmCiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVk
aWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcAppbmRleCBkOWZkNmM1ZWU3MWM3YzBkZTBhMzM0
OTIzYmY4ZmFhODZjMTFiYmE0Li45MDYxMjliYWIxNTNhMzAxMmI2M2QwNTk2NzUwMzJjYjBjNmM1
NDNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRp
b1NvdXJjZU5vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZS5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkF1ZGlv
Q29udGV4dC5oIgogI2luY2x1ZGUgIkF1ZGlvTm9kZU91dHB1dC5oIgorI2luY2x1ZGUgIk1lZGlh
UGxheWVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDYsMTQgKzQ3LDQzIEBAIE1l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKEF1
ZGlvQ29udGV4dCogY29udGV4dCwKICAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9k
ZU91dHB1dCh0aGlzLCAyKSkpOwogICAgIAogICAgIHNldFR5cGUoTm9kZVR5cGVNZWRpYUVsZW1l
bnRBdWRpb1NvdXJjZSk7CisKKyAgICBpbml0aWFsaXplKCk7Cit9CisKK01lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZTo6fk1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSgpCit7CisgICAgdW5p
bml0aWFsaXplKCk7Cit9CisKK0F1ZGlvU291cmNlUHJvdmlkZXIqIE1lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZTo6c291cmNlUHJvdmlkZXIoKQoreworICAgIGlmIChtZWRpYUVsZW1lbnQoKSkK
KyAgICAgICAgcmV0dXJuIG1lZGlhRWxlbWVudCgpLT5hdWRpb1NvdXJjZVByb3ZpZGVyKCk7CisK
KyAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OnBy
b2Nlc3Moc2l6ZV90KQordm9pZCBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OnByb2Nlc3Mo
c2l6ZV90IG51bWJlck9mRnJhbWVzKQogewogICAgIEF1ZGlvQnVzKiBvdXRwdXRCdXMgPSBvdXRw
dXQoMCktPmJ1cygpOwogCi0gICAgLy8gRklYTUU6IGltcGxlbWVudCBNZWRpYVBsYXllciBhYnN0
cmFjdGlvbiB0byBnZXQgYXVkaW8gc3RyZWFtIGZyb20gPGF1ZGlvPiBhbmQgPHZpZGVvPgotICAg
IG91dHB1dEJ1cy0+emVybygpOworICAgIGlmICghbWVkaWFFbGVtZW50KCkpIHsKKyAgICAgICAg
b3V0cHV0QnVzLT56ZXJvKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgTXV0
ZXgmIHBsYXllckxvY2sgPSBtZWRpYUVsZW1lbnQoKS0+cGxheWVyTG9jaygpOworICAgIAorICAg
IGlmIChwbGF5ZXJMb2NrLnRyeUxvY2soKSkgeworICAgICAgICBBdWRpb1NvdXJjZVByb3ZpZGVy
KiBwcm92aWRlciA9IHNvdXJjZVByb3ZpZGVyKCk7CisgICAgICAgIGlmIChwcm92aWRlcikKKyAg
ICAgICAgICAgIHByb3ZpZGVyLT5wcm92aWRlSW5wdXQob3V0cHV0QnVzLCBudW1iZXJPZkZyYW1l
cyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dHB1dEJ1cy0+emVybygpOworICAgICAg
ICBwbGF5ZXJMb2NrLnVubG9jaygpOworICAgIH0gZWxzZQorICAgICAgICBvdXRwdXRCdXMtPnpl
cm8oKTsKIH0KIAogdm9pZCBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OnJlc2V0KCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZS5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VO
b2RlLmgKaW5kZXggM2Y4ZTA1MDlmMWMxM2YwNWM5OWUxYjY3ZDI1ZTFiNzY3NjZkN2EwNS4uNmU5
YzM1NzJhYjI1NTE3Y2JjM2NjYWZhODExYTVmNmRlZWY5ZTllMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmgKQEAgLTM3
LDYgKzM3LDggQEAgY2xhc3MgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlIDogcHVibGljIEF1
ZGlvU291cmNlTm9kZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8TWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2VOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiwgSFRNTE1lZGlhRWxlbWVu
dCopOwogCisgICAgdmlydHVhbCB+TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKCk7CisKICAg
ICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQoKSB7IHJldHVybiBtX21lZGlhRWxlbWVu
dC5nZXQoKTsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKIAogICAg
IC8vIEF1ZGlvTm9kZQpAQCAtNDYsNiArNDgsOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIE1l
ZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZShBdWRpb0NvbnRleHQqLCBIVE1MTWVkaWFFbGVtZW50
Kik7CiAKKyAgICBBdWRpb1NvdXJjZVByb3ZpZGVyKiBzb3VyY2VQcm92aWRlcigpOworCiAgICAg
UmVmUHRyPEhUTUxNZWRpYUVsZW1lbnQ+IG1fbWVkaWFFbGVtZW50OwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104747</attachid>
            <date>2011-08-22 15:08:57 -0700</date>
            <delta_ts>2011-08-22 15:53:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66398-20110822150856.patch</filename>
            <type>text/plain</type>
            <size>13856</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM1MjgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3MmVkODNmZTA5MTI1ZDY3
ZGVjODBmM2RiOGJmMGRjNzgzNjllZjFhLi42NGEyNGU1ZTM2ODg3ZWY5YTI4MzM1YWM4OTIxZjUw
OWFjYmFmYjk4IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTEtMDgtMjIgIENocmlz
IFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgTWVkaWFQbGF5ZXI6
OmF1ZGlvU291cmNlUHJvdmlkZXIoKSBtZXRob2QgZm9yIGF1ZGlvIHN0cmVhbSBhY2Nlc3MgYnkg
dGhlIFdlYiBBdWRpbyBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NjM5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OkhUTUxNZWRpYUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6cHJlcGFyZUZvckxvYWQpOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE1lZGlhRWxlbWVudDo6bG9hZE5leHRTb3VyY2VDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50OjplbnN1cmVNZWRpYVBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50OjpjcmVhdGVNZWRpYVBsYXllcik6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTWVkaWFFbGVtZW50OjpzZXRBdWRpb1NvdXJjZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6YXVkaW9Tb3VyY2VQcm92aWRlcik6CisgICAgICAgICogaHRtbC9I
VE1MTWVkaWFFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojph
dWRpb1NvdXJjZU5vZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyOjphdWRpb1NvdXJjZVByb3ZpZGVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlSW50ZXJmYWNlOjphdWRpb1NvdXJjZVByb3ZpZGVyKToKKyAg
ICAgICAgKiB3ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9Db250ZXh0OjpjcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UpOgorICAgICAgICAqIHdlYmF1ZGlv
L0F1ZGlvQ29udGV4dC5oOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGw6Cisg
ICAgICAgICogd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6TWVkaWFFbGVtZW50QXVk
aW9Tb3VyY2VOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZTo6fk1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OnNvdXJjZVByb3ZpZGVyKToKKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6cHJvY2Vzcyk6CisgICAgICAgICog
d2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmg6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjp1bmxvY2spOgorCiAyMDExLTA4LTIyICBUb255
IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIENTUyBwYXJzaW5nIG9m
IC13ZWJraXQtZmxleC1vcmRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
TWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5j
cHAKaW5kZXggMjkzODhiNjZiMjBkZDM3YTYxMGNlOGE2MjNhYmY5NDVlMGQyN2U0Ny4uNWEwNTRk
NDJmZmRkMjFmNjJlYTc5ZDA5MmE3MzJkYTE5Y2Q3NDNhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC04OCw2ICs4OCwxMCBAQAogI2luY2x1ZGUgIkhUTUxU
cmFja0VsZW1lbnQuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyNpbmNsdWRl
ICJNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNzksNiArMTgzLDkgQEAgSFRNTE1l
ZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCogZG9jdW0KICAgICAsIG1fbG9hZEluaXRpYXRlZEJ5VXNlckdlc3R1cmUoZmFs
c2UpCiAgICAgLCBtX2NvbXBsZXRlbHlMb2FkZWQoZmFsc2UpCiAgICAgLCBtX2hhdmVQcmVwYXJl
ZFRvUGxheShmYWxzZSkKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgICwgbV9hdWRpb1NvdXJj
ZU5vZGUoMCkKKyNlbmRpZgogewogICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1lbnQ6OkhU
TUxNZWRpYUVsZW1lbnQiKTsKICAgICBkb2N1bWVudC0+cmVnaXN0ZXJGb3JEb2N1bWVudEFjdGl2
YXRpb25DYWxsYmFja3ModGhpcyk7CkBAIC01MzEsNyArNTM4LDcgQEAgdm9pZCBIVE1MTWVkaWFF
bGVtZW50OjpwcmVwYXJlRm9yTG9hZCgpCiAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZlbnROYW1l
cygpLmFib3J0RXZlbnQpOwogCiAjaWYgIUVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQot
ICAgIG1fcGxheWVyID0gTWVkaWFQbGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBjcmVhdGVNZWRp
YVBsYXllcigpOwogI2Vsc2UKICAgICBpZiAobV9wbGF5ZXIpCiAgICAgICAgIG1fcGxheWVyLT5j
YW5jZWxMb2FkKCk7CkBAIC02NzcsNyArNjg0LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojps
b2FkTmV4dFNvdXJjZUNoaWxkKCkKIAogI2lmICFFTkFCTEUoUExVR0lOX1BST1hZX0ZPUl9WSURF
TykKICAgICAvLyBSZWNyZWF0ZSB0aGUgbWVkaWEgcGxheWVyIGZvciB0aGUgbmV3IHVybAotICAg
IG1fcGxheWVyID0gTWVkaWFQbGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBjcmVhdGVNZWRpYVBs
YXllcigpOwogI2VuZGlmCiAKICAgICBtX2xvYWRTdGF0ZSA9IExvYWRpbmdGcm9tU291cmNlRWxl
bWVudDsKQEAgLTI0NjIsNyArMjQ2OSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmVuc3Vy
ZU1lZGlhUGxheWVyKCkKIHsKICAgICBpZiAoIW1fcGxheWVyKQotICAgICAgICBtX3BsYXllciA9
IE1lZGlhUGxheWVyOjpjcmVhdGUodGhpcyk7CisgICAgICAgIGNyZWF0ZU1lZGlhUGxheWVyKCk7
CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGVsaXZlck5vdGlmaWNhdGlvbihNZWRpYVBs
YXllclByb3h5Tm90aWZpY2F0aW9uVHlwZSBub3RpZmljYXRpb24pCkBAIC0yODAyLDYgKzI4MDks
MzcgQEAgdm9pZCogSFRNTE1lZGlhRWxlbWVudDo6cHJlRGlzcGF0Y2hFdmVudEhhbmRsZXIoRXZl
bnQqIGV2ZW50KQogICAgIHJldHVybiAwOwogfQogCit2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OmNy
ZWF0ZU1lZGlhUGxheWVyKCkKK3sKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIGlmIChtX2F1
ZGlvU291cmNlTm9kZSkKKyAgICAgICAgbV9hdWRpb1NvdXJjZU5vZGUtPmxvY2soKTsKKyNlbmRp
ZgorICAgICAgICAKKyAgICBtX3BsYXllciA9IE1lZGlhUGxheWVyOjpjcmVhdGUodGhpcyk7CisK
KyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIGlmIChtX2F1ZGlvU291cmNlTm9kZSkKKyAgICAg
ICAgbV9hdWRpb1NvdXJjZU5vZGUtPnVubG9jaygpOworI2VuZGlmCit9CisKKyNpZiBFTkFCTEUo
V0VCX0FVRElPKQordm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRBdWRpb1NvdXJjZU5vZGUoTWVk
aWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKiBzb3VyY2VOb2RlKQoreworICAgIEFTU0VSVCghbV9h
dWRpb1NvdXJjZU5vZGUpOworICAgIG1fYXVkaW9Tb3VyY2VOb2RlID0gc291cmNlTm9kZTsKK30K
KworQXVkaW9Tb3VyY2VQcm92aWRlciogSFRNTE1lZGlhRWxlbWVudDo6YXVkaW9Tb3VyY2VQcm92
aWRlcigpCit7CisgICAgaWYgKG1fcGxheWVyKQorICAgICAgICByZXR1cm4gbV9wbGF5ZXItPmF1
ZGlvU291cmNlUHJvdmlkZXIoKTsKKworICAgIHJldHVybiAwOworfQorI2VuZGlmCisKIH0KIAog
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4IGFjZTViMDZl
OTY2NjQ1YzVhMDQ4YjBjMzc3ZTQ5ZWIyOWUxMTI3YTQuLjQ5ZTgyNGI0NjBiYTg1Njg4OTZiMWVk
ZjIwYTU2MjFlMjhhMjVhODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1l
ZGlhRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5o
CkBAIC0zOSw2ICszOSwxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBFTkFCTEUo
V0VCX0FVRElPKQorY2xhc3MgQXVkaW9Tb3VyY2VQcm92aWRlcjsKK2NsYXNzIE1lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZTsKKyNlbmRpZgogY2xhc3MgRXZlbnQ7CiBjbGFzcyBIVE1MU291cmNl
RWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbHM7CkBAIC0yMDEsNiArMjA1LDEzIEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaXNQbGF5aW5nKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5aW5nOyB9CiAK
KyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSog
YXVkaW9Tb3VyY2VOb2RlKCkgeyByZXR1cm4gbV9hdWRpb1NvdXJjZU5vZGU7IH0KKyAgICB2b2lk
IHNldEF1ZGlvU291cmNlTm9kZShNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUqKTsKKworICAg
IEF1ZGlvU291cmNlUHJvdmlkZXIqIGF1ZGlvU291cmNlUHJvdmlkZXIoKTsKKyNlbmRpZgorCiBw
cm90ZWN0ZWQ6CiAgICAgSFRNTE1lZGlhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqKTsKICAgICB2aXJ0dWFsIH5IVE1MTWVkaWFFbGVtZW50KCk7CkBAIC0yMTksNiArMjMw
LDggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhRWxlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KIAogcHJpdmF0ZToKKyAgICB2b2lkIGNyZWF0ZU1lZGlhUGxheWVy
KCk7CisKICAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUqLCBib29s
IHByZXNlcnZlRGVjbHMpOwogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKGNvbnN0
IE5vZGVSZW5kZXJpbmdDb250ZXh0Jik7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0
ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKQEAgLTQzMSw2ICs0NDQsMTAg
QEAgcHJpdmF0ZToKICAgICBib29sIG1fbG9hZEluaXRpYXRlZEJ5VXNlckdlc3R1cmUgOiAxOwog
ICAgIGJvb2wgbV9jb21wbGV0ZWx5TG9hZGVkIDogMTsKICAgICBib29sIG1faGF2ZVByZXBhcmVk
VG9QbGF5IDogMTsKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgTWVkaWFFbGVtZW50QXVk
aW9Tb3VyY2VOb2RlKiBtX2F1ZGlvU291cmNlTm9kZTsKKyNlbmRpZgogfTsKIAogfSAvL25hbWVz
cGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQ
bGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIu
Y3BwCmluZGV4IDRkNTM1YjZiNWUwYjg1N2Y1ZjIxNDU4YjMyYjYwZDZmNGYyZDEyODguLmU3ZmQw
YjMyZDMxZGU1YmEyNDgwNDRlZTM1MTMwZDg1NjhjNDNjYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5jcHAKQEAgLTg3Myw2ICs4NzMsMTMg
QEAgdm9pZCBNZWRpYVBsYXllcjo6Y2hhcmFjdGVyaXN0aWNDaGFuZ2VkKCkKICAgICAgICAgbV9t
ZWRpYVBsYXllckNsaWVudC0+bWVkaWFQbGF5ZXJDaGFyYWN0ZXJpc3RpY0NoYW5nZWQodGhpcyk7
CiB9CiAKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorQXVkaW9Tb3VyY2VQcm92aWRlciogTWVkaWFQ
bGF5ZXI6OmF1ZGlvU291cmNlUHJvdmlkZXIoKQoreworICAgIHJldHVybiBtX3ByaXZhdGUtPmF1
ZGlvU291cmNlUHJvdmlkZXIoKTsKK30KKyNlbmRpZiAvLyBXRUJfQVVESU8KKwogfQogCiAjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oCmlu
ZGV4IDgwMDc2Y2ViNGVmOWVlZTRkNGJhZDI0OWNhMWY5MzJmNjUzZmRjMDkuLjAxZWE5MDU0Yjdj
OTg1MGM0M2MxNTliMzM0MzExYWJjODU3ZGUxN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaApAQCAtNDEsNiArNDEsMTAgQEAKICNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAor
I2lmIEVOQUJMRShXRUJfQVVESU8pCisjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlci5oIgor
I2VuZGlmCisKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiR3Jh
cGhpY3NMYXllci5oIgogI2VuZGlmCkBAIC0zMDksNiArMzEzLDEwIEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgc2V0UHJpdmF0ZUJyb3dzaW5nTW9kZShib29sKTsKIAorI2lmIEVOQUJMRShXRUJfQVVE
SU8pCisgICAgQXVkaW9Tb3VyY2VQcm92aWRlciogYXVkaW9Tb3VyY2VQcm92aWRlcigpOworI2Vu
ZGlmCisKIHByaXZhdGU6CiAgICAgTWVkaWFQbGF5ZXIoTWVkaWFQbGF5ZXJDbGllbnQqKTsKICAg
ICB2b2lkIGxvYWRXaXRoTmV4dE1lZGlhRW5naW5lKE1lZGlhUGxheWVyRmFjdG9yeSopOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2
YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZh
dGUuaAppbmRleCBiNDQ5MGJjMjcxMjU2NTRmZjI3YTBlY2I5MzU0MWMzNmIwZWI1MDFlLi4wOTlk
M2U5YjE0ZTY2YjlhMTkyNmQ0OTkxNzQyNzcyOTM3NDk4ZWMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllclByaXZhdGUuaApAQCAtMTQ2
LDYgKzE0NiwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhck1lZGlhQ2FjaGVGb3JTaXRlKGNv
bnN0IFN0cmluZyYpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHNldFByaXZhdGVCcm93c2luZ01v
ZGUoYm9vbCkgeyB9CisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIHZpcnR1YWwgQXVkaW9T
b3VyY2VQcm92aWRlciogYXVkaW9Tb3VyY2VQcm92aWRlcigpIHsgcmV0dXJuIDA7IH0KKyNlbmRp
ZgogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAKaW5kZXgg
OTQyY2I0MzMwNDUxN2Q1ZmM5MWIwZTA4MTJhMmIyMWYzODlmOTg3NS4uMTMxYTVhZjRjOGY4YjAx
MDEwM2I2MGM4NzE0YWUxNDVlMzYxZmU5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRp
b0NvbnRleHQuY3BwCkBAIC0zMTIsMTIgKzMxMiwyNyBAQCBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVy
U291cmNlTm9kZT4gQXVkaW9Db250ZXh0OjpjcmVhdGVCdWZmZXJTb3VyY2UoKQogICAgIHJldHVy
biBub2RlOwogfQogCi1QYXNzUmVmUHRyPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gQXVk
aW9Db250ZXh0OjpjcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoSFRNTE1lZGlhRWxlbWVudCogbWVk
aWFFbGVtZW50KQorUGFzc1JlZlB0cjxNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+IEF1ZGlv
Q29udGV4dDo6Y3JlYXRlTWVkaWFFbGVtZW50U291cmNlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
RWxlbWVudCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgQVNTRVJUKG1lZGlhRWxlbWVudCk7
CisgICAgaWYgKCFtZWRpYUVsZW1lbnQpIHsKKyAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VS
UjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgICAgICAKICAgICBBU1NFUlQoaXNNYWlu
VGhyZWFkKCkpOwogICAgIGxhenlJbml0aWFsaXplKCk7CisgICAgCisgICAgLy8gRmlyc3QgY2hl
Y2sgaWYgdGhpcyBtZWRpYSBlbGVtZW50IGFscmVhZHkgaGFzIGEgc291cmNlIG5vZGUuCisgICAg
aWYgKG1lZGlhRWxlbWVudC0+YXVkaW9Tb3VyY2VOb2RlKCkpIHsKKyAgICAgICAgZWMgPSBJTlZB
TElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgICAgICAKICAgICBS
ZWZQdHI8TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBub2RlID0gTWVkaWFFbGVtZW50QXVk
aW9Tb3VyY2VOb2RlOjpjcmVhdGUodGhpcywgbWVkaWFFbGVtZW50KTsKIAorICAgIG1lZGlhRWxl
bWVudC0+c2V0QXVkaW9Tb3VyY2VOb2RlKG5vZGUuZ2V0KCkpOworCiAgICAgcmVmTm9kZShub2Rl
LmdldCgpKTsgLy8gY29udGV4dCBrZWVwcyByZWZlcmVuY2UgdW50aWwgbm9kZSBpcyBkaXNjb25u
ZWN0ZWQKICAgICByZXR1cm4gbm9kZTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dl
YmF1ZGlvL0F1ZGlvQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250
ZXh0LmgKaW5kZXggYmRjODA2ZDM3YWMwM2IzOWVmMWM1ZDFhZjdiNzRmMjAwMjZjMDEzMS4uMjNi
MDQ1NmMyNmZiZmE5MzM3YTJlNTBhNTljOGI4OTUyOWI1ZTRjNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2Vi
YXVkaW8vQXVkaW9Db250ZXh0LmgKQEAgLTExMCw3ICsxMTAsNyBAQCBwdWJsaWM6CiAKICAgICAv
LyBUaGUgQXVkaW9Ob2RlIGNyZWF0ZSBtZXRob2RzIGFyZSBjYWxsZWQgb24gdGhlIG1haW4gdGhy
ZWFkIChmcm9tIEphdmFTY3JpcHQpLgogICAgIFBhc3NSZWZQdHI8QXVkaW9CdWZmZXJTb3VyY2VO
b2RlPiBjcmVhdGVCdWZmZXJTb3VyY2UoKTsKLSAgICBQYXNzUmVmUHRyPE1lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZT4gY3JlYXRlTWVkaWFFbGVtZW50U291cmNlKEhUTUxNZWRpYUVsZW1lbnQq
KTsKKyAgICBQYXNzUmVmUHRyPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gY3JlYXRlTWVk
aWFFbGVtZW50U291cmNlKEhUTUxNZWRpYUVsZW1lbnQqLCBFeGNlcHRpb25Db2RlJik7CiAgICAg
UGFzc1JlZlB0cjxBdWRpb0dhaW5Ob2RlPiBjcmVhdGVHYWluTm9kZSgpOwogICAgIFBhc3NSZWZQ
dHI8QmlxdWFkRmlsdGVyTm9kZT4gY3JlYXRlQmlxdWFkRmlsdGVyKCk7CiAgICAgUGFzc1JlZlB0
cjxXYXZlU2hhcGVyTm9kZT4gY3JlYXRlV2F2ZVNoYXBlcigpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL0F1ZGlvQ29udGV4dC5pZGwKaW5kZXggNTE1MzQ5MmExNzZiM2Y4NmI1ZDRjMjkwNWVmYjky
NzYzZjExZThjNS4uYjgwNTcyMTg3MzRmMTFiOGRjNzU0MjAwMmQ2N2RlYzYwYWQ0OThjMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCkBAIC01OSw3ICs1OSw4IEBA
IG1vZHVsZSB3ZWJhdWRpbyB7CiAKICAgICAgICAgLy8gU291cmNlcwogICAgICAgICBBdWRpb0J1
ZmZlclNvdXJjZU5vZGUgY3JlYXRlQnVmZmVyU291cmNlKCk7Ci0gICAgICAgIE1lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZSBjcmVhdGVNZWRpYUVsZW1lbnRTb3VyY2UoaW4gSFRNTE1lZGlhRWxl
bWVudCBtZWRpYUVsZW1lbnQpOworICAgICAgICBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUg
Y3JlYXRlTWVkaWFFbGVtZW50U291cmNlKGluIEhUTUxNZWRpYUVsZW1lbnQgbWVkaWFFbGVtZW50
KQorICAgICAgICAgICAgcmFpc2VzKERPTUV4Y2VwdGlvbik7CiAKICAgICAgICAgLy8gUHJvY2Vz
c2luZyBub2RlcwogICAgICAgICBBdWRpb0dhaW5Ob2RlIGNyZWF0ZUdhaW5Ob2RlKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VO
b2RlLmNwcAppbmRleCBkOWZkNmM1ZWU3MWM3YzBkZTBhMzM0OTIzYmY4ZmFhODZjMTFiYmE0Li5i
Y2Y4NWMxZWEzZmQyYjg4ZTNiNDM1NWZhOTdiNmNiNmJhNWUwN2RmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAK
QEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkF1ZGlvQ29udGV4dC5oIgogI2luY2x1ZGUg
IkF1ZGlvTm9kZU91dHB1dC5oIgorI2luY2x1ZGUgIk1lZGlhUGxheWVyLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNDYsMTQgKzQ3LDM2IEBAIE1lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKEF1ZGlvQ29udGV4dCogY29udGV4dCwK
ICAgICBhZGRPdXRwdXQoYWRvcHRQdHIobmV3IEF1ZGlvTm9kZU91dHB1dCh0aGlzLCAyKSkpOwog
ICAgIAogICAgIHNldFR5cGUoTm9kZVR5cGVNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZSk7CisKKyAg
ICBpbml0aWFsaXplKCk7CiB9CiAKLXZvaWQgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpw
cm9jZXNzKHNpemVfdCkKK01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6fk1lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZSgpCit7CisgICAgbV9tZWRpYUVsZW1lbnQtPnNldEF1ZGlvU291cmNl
Tm9kZSgwKTsKKyAgICB1bmluaXRpYWxpemUoKTsKK30KKwordm9pZCBNZWRpYUVsZW1lbnRBdWRp
b1NvdXJjZU5vZGU6OnByb2Nlc3Moc2l6ZV90IG51bWJlck9mRnJhbWVzKQogewogICAgIEF1ZGlv
QnVzKiBvdXRwdXRCdXMgPSBvdXRwdXQoMCktPmJ1cygpOwogCi0gICAgLy8gRklYTUU6IGltcGxl
bWVudCBNZWRpYVBsYXllciBhYnN0cmFjdGlvbiB0byBnZXQgYXVkaW8gc3RyZWFtIGZyb20gPGF1
ZGlvPiBhbmQgPHZpZGVvPgotICAgIG91dHB1dEJ1cy0+emVybygpOworICAgIGlmICghbWVkaWFF
bGVtZW50KCkpIHsKKyAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgLy8gVXNlIGEgdHJ5TG9jaygpIHRvIGF2b2lkIGNvbnRlbnRpb24g
aW4gdGhlIHJlYWwtdGltZSBhdWRpbyB0aHJlYWQuCisgICAgLy8gSWYgd2UgZmFpbCB0byBhY3F1
aXJlIHRoZSBsb2NrIHRoZW4gdGhlIEhUTUxNZWRpYUVsZW1lbnQgbXVzdCBiZSBpbiB0aGUgbWlk
ZGxlIG9mCisgICAgLy8gcmVjb25maWd1cmluZyBpdHMgcGxheWJhY2sgZW5naW5lLCBzbyB3ZSBv
dXRwdXQgc2lsZW5jZSBpbiB0aGlzIGNhc2UuCisgICAgaWYgKG1fcHJvY2Vzc0xvY2sudHJ5TG9j
aygpKSB7CisgICAgICAgIGlmIChBdWRpb1NvdXJjZVByb3ZpZGVyKiBwcm92aWRlciA9IG1lZGlh
RWxlbWVudCgpLT5hdWRpb1NvdXJjZVByb3ZpZGVyKCkpCisgICAgICAgICAgICBwcm92aWRlci0+
cHJvdmlkZUlucHV0KG91dHB1dEJ1cywgbnVtYmVyT2ZGcmFtZXMpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBvdXRwdXRCdXMtPnplcm8oKTsKKyAgICAgICAgbV9wcm9jZXNzTG9jay51bmxv
Y2soKTsKKyAgICB9IGVsc2UKKyAgICAgICAgb3V0cHV0QnVzLT56ZXJvKCk7CiB9CiAKIHZvaWQg
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpyZXNldCgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oCmluZGV4IDNmOGUw
NTA5ZjFjMTNmMDVjOTllMWI2N2QyNWUxYjc2NzY2ZDdhMDUuLmI5MGNhMGNjNGNkNzI3NzQ4NTRh
ODcxOTY3YzkzZmFhMDQzOGU4ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlv
L01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1
ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5j
bHVkZSAiQXVkaW9Tb3VyY2VOb2RlLmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlhRWxlbWVudC5oIgog
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM3LDE2ICszOCwyMiBAQCBjbGFzcyBNZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGUgOiBwdWJsaWMgQXVkaW9Tb3VyY2VOb2RlIHsKIHB1YmxpYzoK
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+IGNyZWF0
ZShBdWRpb0NvbnRleHQqLCBIVE1MTWVkaWFFbGVtZW50Kik7CiAKKyAgICB2aXJ0dWFsIH5NZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoKTsKKwogICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlh
RWxlbWVudCgpIHsgcmV0dXJuIG1fbWVkaWFFbGVtZW50LmdldCgpOyB9ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAogCiAgICAgLy8gQXVkaW9Ob2RlCiAgICAgdmlydHVh
bCB2b2lkIHByb2Nlc3Moc2l6ZV90IGZyYW1lc1RvUHJvY2Vzcyk7CiAgICAgdmlydHVhbCB2b2lk
IHJlc2V0KCk7CisgICAgCisgICAgdm9pZCBsb2NrKCkgeyBtX3Byb2Nlc3NMb2NrLmxvY2soKTsg
fQorICAgIHZvaWQgdW5sb2NrKCkgeyBtX3Byb2Nlc3NMb2NrLnVubG9jaygpOyB9CiAKIHByaXZh
dGU6CiAgICAgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKEF1ZGlvQ29udGV4dCosIEhUTUxN
ZWRpYUVsZW1lbnQqKTsKIAogICAgIFJlZlB0cjxIVE1MTWVkaWFFbGVtZW50PiBtX21lZGlhRWxl
bWVudDsKKyAgICBNdXRleCBtX3Byb2Nlc3NMb2NrOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104758</attachid>
            <date>2011-08-22 15:53:49 -0700</date>
            <delta_ts>2011-08-23 12:18:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66398-20110822155348.patch</filename>
            <type>text/plain</type>
            <size>16626</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM1MjgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0OWE2ODAyNTg5MTBmZWYzMzMyY2Qy
ZDIzNzJhOWUyNDI0ZGI3MzMzLi5jMTdkZDYwYTE0MDcwNGQyZGM0MmJkN2YwY2E0NDZjMGYzZDJm
MGQ3IDEwMDc1NQotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDgtMjIgIENocmlzIFJvZ2VycyAgPGNy
b2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgTWVkaWFQbGF5ZXI6OmF1ZGlvU291cmNl
UHJvdmlkZXIoKSBtZXRob2QgZm9yIGF1ZGlvIHN0cmVhbSBhY2Nlc3MgYnkgdGhlIFdlYiBBdWRp
byBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
NjM5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d2ViYXVkaW8vbWVkaWFlbGVtZW50YXVkaW9zb3VyY2Vub2RlLWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiB3ZWJhdWRpby9tZWRpYWVsZW1lbnRhdWRpb3NvdXJjZW5vZGUuaHRtbDoKKwogMjAxMS0w
OC0yMiAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBDU1Mg
cGFyc2luZyBvZiAtd2Via2l0LWZsZXgtb3JkZXIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmF1ZGlvL21lZGlhZWxlbWVudGF1ZGlvc291cmNlbm9kZS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9tZWRpYWVsZW1lbnRhdWRpb3NvdXJjZW5vZGUtZXhwZWN0ZWQudHh0Cmlu
ZGV4IGVkNzZiODcwNDE3OWRhZjc1N2QzMmFmYTRlYzM4Y2Q1MDE3ZTU4ZjUuLmVjNDUwYTAwOWIx
NmYyNGFhNjM0YzlmYjI2ZDQzODc3ZGZmMzllMDMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dl
YmF1ZGlvL21lZGlhZWxlbWVudGF1ZGlvc291cmNlbm9kZS1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vbWVkaWFlbGVtZW50YXVkaW9zb3VyY2Vub2RlLWV4cGVjdGVkLnR4
dApAQCAtOCw2ICs4LDcgQEAgUEFTUyBjb25uZWN0KCkgZXhjZXB0aW9uIHRocm93biBmb3IgaWxs
ZWdhbCBkZXN0aW5hdGlvbiBBdWRpb05vZGUuCiBQQVNTIGNvbm5lY3QoKSBleGNlcHRpb24gdGhy
b3duIGZvciBpbGxlZ2FsIG91dHB1dCBpbmRleC4KIFBBU1MgY29ubmVjdCgpIGV4Y2VwdGlvbiB0
aHJvd24gZm9yIGlsbGVnYWwgaW5wdXQgaW5kZXguCiBQQVNTIGF1ZGlvTm9kZS5jb25uZWN0KGNv
bnRleHQuZGVzdGluYXRpb24pIHN1Y2NlZWRlZC4KK1BBU1MgY3JlYXRlTWVkaWFFbGVtZW50U291
cmNlKCkgdGhyZXcgZXJyb3Igd2hlbiBjYWxsZWQgdHdpY2Ugb24gc2FtZSBIVE1MTWVkaWFFbGVt
ZW50LgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9tZWRpYWVsZW1lbnRhdWRpb3NvdXJjZW5v
ZGUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL21lZGlhZWxlbWVudGF1ZGlvc291cmNlbm9k
ZS5odG1sCmluZGV4IDE2MjJiN2VhYmNiZjQ0ZTRlMTM2Y2I4MjU3NTNmYWFjM2RkOWQwYmIuLjI4
ZTI0NmU1YWEwNzY5ZDdhMmEwNzljNjAyNjk4NDFmODI2ZjYxMzQgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3dlYmF1ZGlvL21lZGlhZWxlbWVudGF1ZGlvc291cmNlbm9kZS5odG1sCisrKyBiL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL21lZGlhZWxlbWVudGF1ZGlvc291cmNlbm9kZS5odG1sCkBAIC03
MCw2ICs3MCwxNCBAQCBmdW5jdGlvbiBydW5UZXN0KCkgewogICAgIH0gY2F0Y2goZSkgewogICAg
ICAgICB0ZXN0RmFpbGVkKCJhdWRpb05vZGUuY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKSBm
YWlsZWQuIik7CiAgICAgfQorICAgIAorICAgIC8vIFRyeSBjcmVhdGluZyBhbm90aGVyIE1lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZSB1c2luZyB0aGUgc2FtZSBhdWRpbyBlbGVtZW50LgorICAg
IHRyeSB7CisgICAgICAgIG1lZGlhU291cmNlID0gY29udGV4dC5jcmVhdGVNZWRpYUVsZW1lbnRT
b3VyY2UoYXVkaW9FbGVtZW50KTsKKyAgICAgICAgdGVzdEZhaWxlZCgiY3JlYXRlTWVkaWFFbGVt
ZW50U291cmNlKCkgc2hvdWxkIHRocm93IGlmIGNhbGxlZCB0d2ljZSBvbiBzYW1lIEhUTUxNZWRp
YUVsZW1lbnQuIik7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIHRlc3RQYXNzZWQoImNyZWF0
ZU1lZGlhRWxlbWVudFNvdXJjZSgpIHRocmV3IGVycm9yIHdoZW4gY2FsbGVkIHR3aWNlIG9uIHNh
bWUgSFRNTE1lZGlhRWxlbWVudC4iKTsKKyAgICB9CiAKICAgICBmaW5pc2hKU1Rlc3QoKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3MmVkODNmZTA5MTI1ZDY3ZGVjODBmM2RiOGJmMGRjNzgzNjllZjFhLi4z
MDY1ZDg2YzdmMDViNTRjYmM2ZmMwZWQ4YWI4N2YyOTUxYjM4YWIyIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDAgQEAKKzIwMTEtMDgtMjIgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNv
bT4KKworICAgICAgICBBZGQgTWVkaWFQbGF5ZXI6OmF1ZGlvU291cmNlUHJvdmlkZXIoKSBtZXRo
b2QgZm9yIGF1ZGlvIHN0cmVhbSBhY2Nlc3MgYnkgdGhlIFdlYiBBdWRpbyBBUEkuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM5OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgT25lIG5ldyB0
ZXN0IGFkZGVkIHRvIHdlYmF1ZGlvL21lZGlhZWxlbWVudGF1ZGlvc291cmNlbm9kZS5odG1sIHRv
IGNoZWNrIHRoYXQgQXVkaW9Db250ZXh0LmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZSgpCisgICAg
ICAgIHRocm93cyBhbiBleGNlcHRpb24gaWYgY2FsbGVkIHR3aWNlIG9uIHRoZSBzYW1lIEhUTUxN
ZWRpYUVsZW1lbnQuCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpwcmVwYXJlRm9yTG9hZCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpsb2FkTmV4dFNvdXJjZUNoaWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmVuc3VyZU1lZGlhUGxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZU1lZGlhUGxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNldEF1ZGlvU291cmNlTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjphdWRpb1NvdXJjZVByb3ZpZGVyKToKKyAg
ICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OmF1ZGlvU291cmNlTm9kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmF1ZGlv
U291cmNlUHJvdmlkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6OmF1ZGlvU291cmNl
UHJvdmlkZXIpOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZSk6CisgICAg
ICAgICogd2ViYXVkaW8vQXVkaW9Db250ZXh0Lmg6CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9D
b250ZXh0LmlkbDoKKyAgICAgICAgKiB3ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpN
ZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2VOb2RlOjp+TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6cHJvY2Vzcyk6CisgICAg
ICAgICogd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OmxvY2spOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjp1bmxvY2spOgorCiAyMDExLTA4LTIy
ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIENTUyBwYXJz
aW5nIG9mIC13ZWJraXQtZmxleC1vcmRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKaW5kZXggMjkzODhiNjZiMjBkZDM3YTYxMGNlOGE2MjNhYmY5NDVlMGQyN2U0Ny4u
NWEwNTRkNDJmZmRkMjFmNjJlYTc5ZDA5MmE3MzJkYTE5Y2Q3NDNhMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC04OCw2ICs4OCwxMCBAQAogI2luY2x1ZGUg
IkhUTUxUcmFja0VsZW1lbnQuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyNp
bmNsdWRlICJNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCIKKyNlbmRpZgorCiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNzksNiArMTgzLDkgQEAg
SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCogZG9jdW0KICAgICAsIG1fbG9hZEluaXRpYXRlZEJ5VXNlckdlc3R1
cmUoZmFsc2UpCiAgICAgLCBtX2NvbXBsZXRlbHlMb2FkZWQoZmFsc2UpCiAgICAgLCBtX2hhdmVQ
cmVwYXJlZFRvUGxheShmYWxzZSkKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgICwgbV9hdWRp
b1NvdXJjZU5vZGUoMCkKKyNlbmRpZgogewogICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1l
bnQ6OkhUTUxNZWRpYUVsZW1lbnQiKTsKICAgICBkb2N1bWVudC0+cmVnaXN0ZXJGb3JEb2N1bWVu
dEFjdGl2YXRpb25DYWxsYmFja3ModGhpcyk7CkBAIC01MzEsNyArNTM4LDcgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjpwcmVwYXJlRm9yTG9hZCgpCiAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZl
bnROYW1lcygpLmFib3J0RXZlbnQpOwogCiAjaWYgIUVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJ
REVPKQotICAgIG1fcGxheWVyID0gTWVkaWFQbGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBjcmVh
dGVNZWRpYVBsYXllcigpOwogI2Vsc2UKICAgICBpZiAobV9wbGF5ZXIpCiAgICAgICAgIG1fcGxh
eWVyLT5jYW5jZWxMb2FkKCk7CkBAIC02NzcsNyArNjg0LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50Ojpsb2FkTmV4dFNvdXJjZUNoaWxkKCkKIAogI2lmICFFTkFCTEUoUExVR0lOX1BST1hZX0ZP
Ul9WSURFTykKICAgICAvLyBSZWNyZWF0ZSB0aGUgbWVkaWEgcGxheWVyIGZvciB0aGUgbmV3IHVy
bAotICAgIG1fcGxheWVyID0gTWVkaWFQbGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBjcmVhdGVN
ZWRpYVBsYXllcigpOwogI2VuZGlmCiAKICAgICBtX2xvYWRTdGF0ZSA9IExvYWRpbmdGcm9tU291
cmNlRWxlbWVudDsKQEAgLTI0NjIsNyArMjQ2OSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OmVuc3VyZU1lZGlhUGxheWVyKCkKIHsKICAgICBpZiAoIW1fcGxheWVyKQotICAgICAgICBtX3Bs
YXllciA9IE1lZGlhUGxheWVyOjpjcmVhdGUodGhpcyk7CisgICAgICAgIGNyZWF0ZU1lZGlhUGxh
eWVyKCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGVsaXZlck5vdGlmaWNhdGlvbihN
ZWRpYVBsYXllclByb3h5Tm90aWZpY2F0aW9uVHlwZSBub3RpZmljYXRpb24pCkBAIC0yODAyLDYg
KzI4MDksMzcgQEAgdm9pZCogSFRNTE1lZGlhRWxlbWVudDo6cHJlRGlzcGF0Y2hFdmVudEhhbmRs
ZXIoRXZlbnQqIGV2ZW50KQogICAgIHJldHVybiAwOwogfQogCit2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OmNyZWF0ZU1lZGlhUGxheWVyKCkKK3sKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIGlm
IChtX2F1ZGlvU291cmNlTm9kZSkKKyAgICAgICAgbV9hdWRpb1NvdXJjZU5vZGUtPmxvY2soKTsK
KyNlbmRpZgorICAgICAgICAKKyAgICBtX3BsYXllciA9IE1lZGlhUGxheWVyOjpjcmVhdGUodGhp
cyk7CisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIGlmIChtX2F1ZGlvU291cmNlTm9kZSkK
KyAgICAgICAgbV9hdWRpb1NvdXJjZU5vZGUtPnVubG9jaygpOworI2VuZGlmCit9CisKKyNpZiBF
TkFCTEUoV0VCX0FVRElPKQordm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRBdWRpb1NvdXJjZU5v
ZGUoTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKiBzb3VyY2VOb2RlKQoreworICAgIEFTU0VS
VCghbV9hdWRpb1NvdXJjZU5vZGUpOworICAgIG1fYXVkaW9Tb3VyY2VOb2RlID0gc291cmNlTm9k
ZTsKK30KKworQXVkaW9Tb3VyY2VQcm92aWRlciogSFRNTE1lZGlhRWxlbWVudDo6YXVkaW9Tb3Vy
Y2VQcm92aWRlcigpCit7CisgICAgaWYgKG1fcGxheWVyKQorICAgICAgICByZXR1cm4gbV9wbGF5
ZXItPmF1ZGlvU291cmNlUHJvdmlkZXIoKTsKKworICAgIHJldHVybiAwOworfQorI2VuZGlmCisK
IH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4IGFj
ZTViMDZlOTY2NjQ1YzVhMDQ4YjBjMzc3ZTQ5ZWIyOWUxMTI3YTQuLjE2MDZlZGJhMjcwMzBjNjJm
NTMxMTNjNjBhYjIwNTI1M2NmNDc0YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5oCkBAIC0zOSw2ICszOSwxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBF
TkFCTEUoV0VCX0FVRElPKQorY2xhc3MgQXVkaW9Tb3VyY2VQcm92aWRlcjsKK2NsYXNzIE1lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZTsKKyNlbmRpZgogY2xhc3MgRXZlbnQ7CiBjbGFzcyBIVE1M
U291cmNlRWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbHM7CkBAIC0yMDEsNiArMjA1LDEzIEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgaXNQbGF5aW5nKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5aW5n
OyB9CiAKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIE1lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZSogYXVkaW9Tb3VyY2VOb2RlKCkgeyByZXR1cm4gbV9hdWRpb1NvdXJjZU5vZGU7IH0KKyAg
ICB2b2lkIHNldEF1ZGlvU291cmNlTm9kZShNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUqKTsK
KworICAgIEF1ZGlvU291cmNlUHJvdmlkZXIqIGF1ZGlvU291cmNlUHJvdmlkZXIoKTsKKyNlbmRp
ZgorCiBwcm90ZWN0ZWQ6CiAgICAgSFRNTE1lZGlhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFsIH5IVE1MTWVkaWFFbGVtZW50KCk7CkBAIC0yMTks
NiArMjMwLDggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhRWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogcHJpdmF0ZToKKyAgICB2b2lkIGNyZWF0ZU1lZGlh
UGxheWVyKCk7CisKICAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUq
LCBib29sIHByZXNlcnZlRGVjbHMpOwogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVk
KGNvbnN0IE5vZGVSZW5kZXJpbmdDb250ZXh0Jik7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3Qq
IGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKQEAgLTQzMSw2ICs0
NDQsMTMgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbG9hZEluaXRpYXRlZEJ5VXNlckdlc3R1cmUg
OiAxOwogICAgIGJvb2wgbV9jb21wbGV0ZWx5TG9hZGVkIDogMTsKICAgICBib29sIG1faGF2ZVBy
ZXBhcmVkVG9QbGF5IDogMTsKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgLy8gVGhpcyBp
cyBhIHdlYWsgcmVmZXJlbmNlLCBzaW5jZSBtX2F1ZGlvU291cmNlTm9kZSBob2xkcyBhIHJlZmVy
ZW5jZSB0byB1cy4KKyAgICAvLyBUaGUgdmFsdWUgaXMgc2V0IGp1c3QgYWZ0ZXIgdGhlIE1lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZSBpcyBjcmVhdGVkLgorICAgIC8vIFRoZSB2YWx1ZSBpcyBj
bGVhcmVkIGluIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6fk1lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZSgpLgorICAgIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSogbV9hdWRpb1Nv
dXJjZU5vZGU7CisjZW5kaWYKIH07CiAKIH0gLy9uYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAppbmRleCA0ZDUzNWI2YjVlMGI4
NTdmNWYyMTQ1OGIzMmI2MGQ2ZjRmMmQxMjg4Li5lN2ZkMGIzMmQzMWRlNWJhMjQ4MDQ0ZWUzNTEz
MGQ4NTY4YzQzY2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXIuY3BwCkBAIC04NzMsNiArODczLDEzIEBAIHZvaWQgTWVkaWFQbGF5ZXI6OmNo
YXJhY3RlcmlzdGljQ2hhbmdlZCgpCiAgICAgICAgIG1fbWVkaWFQbGF5ZXJDbGllbnQtPm1lZGlh
UGxheWVyQ2hhcmFjdGVyaXN0aWNDaGFuZ2VkKHRoaXMpOwogfQogCisjaWYgRU5BQkxFKFdFQl9B
VURJTykKK0F1ZGlvU291cmNlUHJvdmlkZXIqIE1lZGlhUGxheWVyOjphdWRpb1NvdXJjZVByb3Zp
ZGVyKCkKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5hdWRpb1NvdXJjZVByb3ZpZGVyKCk7Cit9
CisjZW5kaWYgLy8gV0VCX0FVRElPCisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAppbmRleCA4MDA3NmNlYjRlZjllZWU0ZDRi
YWQyNDljYTFmOTMyZjY1M2ZkYzA5Li4wMWVhOTA1NGI3Yzk4NTBjNDNjMTU5YjMzNDMxMWFiYzg1
N2RlMTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmgKQEAgLTQxLDYgKzQxLDEwIEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQor
I2luY2x1ZGUgIkF1ZGlvU291cmNlUHJvdmlkZXIuaCIKKyNlbmRpZgorCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNlbmRpZgpA
QCAtMzA5LDYgKzMxMywxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFByaXZhdGVCcm93c2lu
Z01vZGUoYm9vbCk7CiAKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIEF1ZGlvU291cmNlUHJv
dmlkZXIqIGF1ZGlvU291cmNlUHJvdmlkZXIoKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIE1l
ZGlhUGxheWVyKE1lZGlhUGxheWVyQ2xpZW50Kik7CiAgICAgdm9pZCBsb2FkV2l0aE5leHRNZWRp
YUVuZ2luZShNZWRpYVBsYXllckZhY3RvcnkqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKaW5kZXggYjQ0OTBiYzI3MTI1
NjU0ZmYyN2EwZWNiOTM1NDFjMzZiMGViNTAxZS4uMDk5ZDNlOWIxNGU2NmI5YTE5MjZkNDk5MTc0
Mjc3MjkzNzQ5OGVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKQEAgLTE0Niw2ICsxNDYsMTAgQEAgcHVibGljOgog
ICAgIHZvaWQgY2xlYXJNZWRpYUNhY2hlRm9yU2l0ZShjb25zdCBTdHJpbmcmKSB7IH0KIAogICAg
IHZpcnR1YWwgdm9pZCBzZXRQcml2YXRlQnJvd3NpbmdNb2RlKGJvb2wpIHsgfQorCisjaWYgRU5B
QkxFKFdFQl9BVURJTykKKyAgICB2aXJ0dWFsIEF1ZGlvU291cmNlUHJvdmlkZXIqIGF1ZGlvU291
cmNlUHJvdmlkZXIoKSB7IHJldHVybiAwOyB9CisjZW5kaWYKIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCmluZGV4IDk0MmNiNDMzMDQ1MTdkNWZjOTFiMGUw
ODEyYTJiMjFmMzg5Zjk4NzUuLjEzMWE1YWY0YzhmOGIwMTAxMDNiNjBjODcxNGFlMTQ1ZTM2MWZl
OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcApAQCAtMzEyLDEy
ICszMTIsMjcgQEAgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlclNvdXJjZU5vZGU+IEF1ZGlvQ29udGV4
dDo6Y3JlYXRlQnVmZmVyU291cmNlKCkKICAgICByZXR1cm4gbm9kZTsKIH0KIAotUGFzc1JlZlB0
cjxNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFF
bGVtZW50U291cmNlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKK1Bhc3NSZWZQdHI8
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhRWxl
bWVudFNvdXJjZShIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogeworICAgIEFTU0VSVChtZWRpYUVsZW1lbnQpOworICAgIGlmICghbWVkaWFFbGVtZW50
KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICAgICAgCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBsYXp5SW5p
dGlhbGl6ZSgpOworICAgIAorICAgIC8vIEZpcnN0IGNoZWNrIGlmIHRoaXMgbWVkaWEgZWxlbWVu
dCBhbHJlYWR5IGhhcyBhIHNvdXJjZSBub2RlLgorICAgIGlmIChtZWRpYUVsZW1lbnQtPmF1ZGlv
U291cmNlTm9kZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICAgICAgCiAgICAgUmVmUHRyPE1lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZT4gbm9kZSA9IE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6Y3JlYXRlKHRo
aXMsIG1lZGlhRWxlbWVudCk7CiAKKyAgICBtZWRpYUVsZW1lbnQtPnNldEF1ZGlvU291cmNlTm9k
ZShub2RlLmdldCgpKTsKKwogICAgIHJlZk5vZGUobm9kZS5nZXQoKSk7IC8vIGNvbnRleHQga2Vl
cHMgcmVmZXJlbmNlIHVudGlsIG5vZGUgaXMgZGlzY29ubmVjdGVkCiAgICAgcmV0dXJuIG5vZGU7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCmluZGV4IGJkYzgwNmQzN2Fj
MDNiMzllZjFjNWQxYWY3Yjc0ZjIwMDI2YzAxMzEuLjIzYjA0NTZjMjZmYmZhOTMzN2EyZTUwYTU5
YzhiODk1MjliNWU0YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCkBA
IC0xMTAsNyArMTEwLDcgQEAgcHVibGljOgogCiAgICAgLy8gVGhlIEF1ZGlvTm9kZSBjcmVhdGUg
bWV0aG9kcyBhcmUgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCAoZnJvbSBKYXZhU2NyaXB0KS4K
ICAgICBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gY3JlYXRlQnVmZmVyU291cmNl
KCk7Ci0gICAgUGFzc1JlZlB0cjxNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+IGNyZWF0ZU1l
ZGlhRWxlbWVudFNvdXJjZShIVE1MTWVkaWFFbGVtZW50Kik7CisgICAgUGFzc1JlZlB0cjxNZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+IGNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZShIVE1MTWVk
aWFFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8QXVkaW9HYWluTm9k
ZT4gY3JlYXRlR2Fpbk5vZGUoKTsKICAgICBQYXNzUmVmUHRyPEJpcXVhZEZpbHRlck5vZGU+IGNy
ZWF0ZUJpcXVhZEZpbHRlcigpOwogICAgIFBhc3NSZWZQdHI8V2F2ZVNoYXBlck5vZGU+IGNyZWF0
ZVdhdmVTaGFwZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
Q29udGV4dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCmlu
ZGV4IDUxNTM0OTJhMTc2YjNmODZiNWQ0YzI5MDVlZmI5Mjc2M2YxMWU4YzUuLmI4MDU3MjE4NzM0
ZjExYjhkYzc1NDIwMDJkNjdkZWM2MGFkNDk4YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9Db250ZXh0LmlkbApAQCAtNTksNyArNTksOCBAQCBtb2R1bGUgd2ViYXVkaW8gewogCiAg
ICAgICAgIC8vIFNvdXJjZXMKICAgICAgICAgQXVkaW9CdWZmZXJTb3VyY2VOb2RlIGNyZWF0ZUJ1
ZmZlclNvdXJjZSgpOwotICAgICAgICBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUgY3JlYXRl
TWVkaWFFbGVtZW50U291cmNlKGluIEhUTUxNZWRpYUVsZW1lbnQgbWVkaWFFbGVtZW50KTsKKyAg
ICAgICAgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlIGNyZWF0ZU1lZGlhRWxlbWVudFNvdXJj
ZShpbiBIVE1MTWVkaWFFbGVtZW50IG1lZGlhRWxlbWVudCkKKyAgICAgICAgICAgIHJhaXNlcyhE
T01FeGNlcHRpb24pOwogCiAgICAgICAgIC8vIFByb2Nlc3Npbmcgbm9kZXMKICAgICAgICAgQXVk
aW9HYWluTm9kZSBjcmVhdGVHYWluTm9kZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAKaW5kZXggZDlmZDZjNWVl
NzFjN2MwZGUwYTMzNDkyM2JmOGZhYTg2YzExYmJhNC4uYmNmODVjMWVhM2ZkMmI4OGUzYjQzNTVm
YTk3YjZjYjZiYTVlMDdkZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVk
aWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNp
bmNsdWRlICJBdWRpb0NvbnRleHQuaCIKICNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKKyNp
bmNsdWRlICJNZWRpYVBsYXllci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ2LDE0
ICs0NywzNiBAQCBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6Ok1lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsCiAgICAgYWRkT3V0cHV0KGFkb3B0UHRy
KG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMikpKTsKICAgICAKICAgICBzZXRUeXBlKE5vZGVU
eXBlTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2UpOworCisgICAgaW5pdGlhbGl6ZSgpOwogfQogCi12
b2lkIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6cHJvY2VzcyhzaXplX3QpCitNZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGU6On5NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUoKQorewor
ICAgIG1fbWVkaWFFbGVtZW50LT5zZXRBdWRpb1NvdXJjZU5vZGUoMCk7CisgICAgdW5pbml0aWFs
aXplKCk7Cit9CisKK3ZvaWQgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpwcm9jZXNzKHNp
emVfdCBudW1iZXJPZkZyYW1lcykKIHsKICAgICBBdWRpb0J1cyogb3V0cHV0QnVzID0gb3V0cHV0
KDApLT5idXMoKTsKIAotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgTWVkaWFQbGF5ZXIgYWJzdHJh
Y3Rpb24gdG8gZ2V0IGF1ZGlvIHN0cmVhbSBmcm9tIDxhdWRpbz4gYW5kIDx2aWRlbz4KLSAgICBv
dXRwdXRCdXMtPnplcm8oKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCgpKSB7CisgICAgICAgIG91
dHB1dEJ1cy0+emVybygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFVz
ZSBhIHRyeUxvY2soKSB0byBhdm9pZCBjb250ZW50aW9uIGluIHRoZSByZWFsLXRpbWUgYXVkaW8g
dGhyZWFkLgorICAgIC8vIElmIHdlIGZhaWwgdG8gYWNxdWlyZSB0aGUgbG9jayB0aGVuIHRoZSBI
VE1MTWVkaWFFbGVtZW50IG11c3QgYmUgaW4gdGhlIG1pZGRsZSBvZgorICAgIC8vIHJlY29uZmln
dXJpbmcgaXRzIHBsYXliYWNrIGVuZ2luZSwgc28gd2Ugb3V0cHV0IHNpbGVuY2UgaW4gdGhpcyBj
YXNlLgorICAgIGlmIChtX3Byb2Nlc3NMb2NrLnRyeUxvY2soKSkgeworICAgICAgICBpZiAoQXVk
aW9Tb3VyY2VQcm92aWRlciogcHJvdmlkZXIgPSBtZWRpYUVsZW1lbnQoKS0+YXVkaW9Tb3VyY2VQ
cm92aWRlcigpKQorICAgICAgICAgICAgcHJvdmlkZXItPnByb3ZpZGVJbnB1dChvdXRwdXRCdXMs
IG51bWJlck9mRnJhbWVzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0cHV0QnVzLT56
ZXJvKCk7CisgICAgICAgIG1fcHJvY2Vzc0xvY2sudW5sb2NrKCk7CisgICAgfSBlbHNlCisgICAg
ICAgIG91dHB1dEJ1cy0+emVybygpOwogfQogCiB2b2lkIE1lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZTo6cmVzZXQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVkaWFF
bGVtZW50QXVkaW9Tb3VyY2VOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGUuaAppbmRleCAzZjhlMDUwOWYxYzEzZjA1Yzk5ZTFiNjdkMjVl
MWI3Njc2NmQ3YTA1Li5iOTBjYTBjYzRjZDcyNzc0ODU0YTg3MTk2N2M5M2ZhYTA0MzhlOGU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJj
ZU5vZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1Nv
dXJjZU5vZGUuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkF1ZGlvU291cmNlTm9kZS5o
IgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC0zNywxNiArMzgsMjIgQEAgY2xhc3MgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlIDog
cHVibGljIEF1ZGlvU291cmNlTm9kZSB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBjcmVhdGUoQXVkaW9Db250ZXh0KiwgSFRNTE1l
ZGlhRWxlbWVudCopOwogCisgICAgdmlydHVhbCB+TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2Rl
KCk7CisKICAgICBIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQoKSB7IHJldHVybiBtX21l
ZGlhRWxlbWVudC5nZXQoKTsgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAKIAogICAgIC8vIEF1ZGlvTm9kZQogICAgIHZpcnR1YWwgdm9pZCBwcm9jZXNzKHNpemVfdCBm
cmFtZXNUb1Byb2Nlc3MpOwogICAgIHZpcnR1YWwgdm9pZCByZXNldCgpOworICAgIAorICAgIHZv
aWQgbG9jaygpIHsgbV9wcm9jZXNzTG9jay5sb2NrKCk7IH0KKyAgICB2b2lkIHVubG9jaygpIHsg
bV9wcm9jZXNzTG9jay51bmxvY2soKTsgfQogCiBwcml2YXRlOgogICAgIE1lZGlhRWxlbWVudEF1
ZGlvU291cmNlTm9kZShBdWRpb0NvbnRleHQqLCBIVE1MTWVkaWFFbGVtZW50Kik7CiAKICAgICBS
ZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gbV9tZWRpYUVsZW1lbnQ7CisgICAgTXV0ZXggbV9wcm9j
ZXNzTG9jazsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104886</attachid>
            <date>2011-08-23 12:18:07 -0700</date>
            <delta_ts>2011-08-25 09:53:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66398-20110823121806.patch</filename>
            <type>text/plain</type>
            <size>16821</size>
            <attacher name="Chris Rogers">crogers</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTM1MjgKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA0OWE2ODAyNTg5MTBmZWYzMzMyY2Qy
ZDIzNzJhOWUyNDI0ZGI3MzMzLi5jMTdkZDYwYTE0MDcwNGQyZGM0MmJkN2YwY2E0NDZjMGYzZDJm
MGQ3IDEwMDc1NQotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMDgtMjIgIENocmlzIFJvZ2VycyAgPGNy
b2dlcnNAZ29vZ2xlLmNvbT4KKworICAgICAgICBBZGQgTWVkaWFQbGF5ZXI6OmF1ZGlvU291cmNl
UHJvdmlkZXIoKSBtZXRob2QgZm9yIGF1ZGlvIHN0cmVhbSBhY2Nlc3MgYnkgdGhlIFdlYiBBdWRp
byBBUEkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
NjM5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
d2ViYXVkaW8vbWVkaWFlbGVtZW50YXVkaW9zb3VyY2Vub2RlLWV4cGVjdGVkLnR4dDoKKyAgICAg
ICAgKiB3ZWJhdWRpby9tZWRpYWVsZW1lbnRhdWRpb3NvdXJjZW5vZGUuaHRtbDoKKwogMjAxMS0w
OC0yMiAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEFkZCBDU1Mg
cGFyc2luZyBvZiAtd2Via2l0LWZsZXgtb3JkZXIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmF1ZGlvL21lZGlhZWxlbWVudGF1ZGlvc291cmNlbm9kZS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy93ZWJhdWRpby9tZWRpYWVsZW1lbnRhdWRpb3NvdXJjZW5vZGUtZXhwZWN0ZWQudHh0Cmlu
ZGV4IGVkNzZiODcwNDE3OWRhZjc1N2QzMmFmYTRlYzM4Y2Q1MDE3ZTU4ZjUuLmVjNDUwYTAwOWIx
NmYyNGFhNjM0YzlmYjI2ZDQzODc3ZGZmMzllMDMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dl
YmF1ZGlvL21lZGlhZWxlbWVudGF1ZGlvc291cmNlbm9kZS1leHBlY3RlZC50eHQKKysrIGIvTGF5
b3V0VGVzdHMvd2ViYXVkaW8vbWVkaWFlbGVtZW50YXVkaW9zb3VyY2Vub2RlLWV4cGVjdGVkLnR4
dApAQCAtOCw2ICs4LDcgQEAgUEFTUyBjb25uZWN0KCkgZXhjZXB0aW9uIHRocm93biBmb3IgaWxs
ZWdhbCBkZXN0aW5hdGlvbiBBdWRpb05vZGUuCiBQQVNTIGNvbm5lY3QoKSBleGNlcHRpb24gdGhy
b3duIGZvciBpbGxlZ2FsIG91dHB1dCBpbmRleC4KIFBBU1MgY29ubmVjdCgpIGV4Y2VwdGlvbiB0
aHJvd24gZm9yIGlsbGVnYWwgaW5wdXQgaW5kZXguCiBQQVNTIGF1ZGlvTm9kZS5jb25uZWN0KGNv
bnRleHQuZGVzdGluYXRpb24pIHN1Y2NlZWRlZC4KK1BBU1MgY3JlYXRlTWVkaWFFbGVtZW50U291
cmNlKCkgdGhyZXcgZXJyb3Igd2hlbiBjYWxsZWQgdHdpY2Ugb24gc2FtZSBIVE1MTWVkaWFFbGVt
ZW50LgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhdWRpby9tZWRpYWVsZW1lbnRhdWRpb3NvdXJjZW5v
ZGUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmF1ZGlvL21lZGlhZWxlbWVudGF1ZGlvc291cmNlbm9k
ZS5odG1sCmluZGV4IDE2MjJiN2VhYmNiZjQ0ZTRlMTM2Y2I4MjU3NTNmYWFjM2RkOWQwYmIuLjI4
ZTI0NmU1YWEwNzY5ZDdhMmEwNzljNjAyNjk4NDFmODI2ZjYxMzQgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3dlYmF1ZGlvL21lZGlhZWxlbWVudGF1ZGlvc291cmNlbm9kZS5odG1sCisrKyBiL0xh
eW91dFRlc3RzL3dlYmF1ZGlvL21lZGlhZWxlbWVudGF1ZGlvc291cmNlbm9kZS5odG1sCkBAIC03
MCw2ICs3MCwxNCBAQCBmdW5jdGlvbiBydW5UZXN0KCkgewogICAgIH0gY2F0Y2goZSkgewogICAg
ICAgICB0ZXN0RmFpbGVkKCJhdWRpb05vZGUuY29ubmVjdChjb250ZXh0LmRlc3RpbmF0aW9uKSBm
YWlsZWQuIik7CiAgICAgfQorICAgIAorICAgIC8vIFRyeSBjcmVhdGluZyBhbm90aGVyIE1lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZSB1c2luZyB0aGUgc2FtZSBhdWRpbyBlbGVtZW50LgorICAg
IHRyeSB7CisgICAgICAgIG1lZGlhU291cmNlID0gY29udGV4dC5jcmVhdGVNZWRpYUVsZW1lbnRT
b3VyY2UoYXVkaW9FbGVtZW50KTsKKyAgICAgICAgdGVzdEZhaWxlZCgiY3JlYXRlTWVkaWFFbGVt
ZW50U291cmNlKCkgc2hvdWxkIHRocm93IGlmIGNhbGxlZCB0d2ljZSBvbiBzYW1lIEhUTUxNZWRp
YUVsZW1lbnQuIik7CisgICAgfSBjYXRjaChlKSB7CisgICAgICAgIHRlc3RQYXNzZWQoImNyZWF0
ZU1lZGlhRWxlbWVudFNvdXJjZSgpIHRocmV3IGVycm9yIHdoZW4gY2FsbGVkIHR3aWNlIG9uIHNh
bWUgSFRNTE1lZGlhRWxlbWVudC4iKTsKKyAgICB9CiAKICAgICBmaW5pc2hKU1Rlc3QoKTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3MmVkODNmZTA5MTI1ZDY3ZGVjODBmM2RiOGJmMGRjNzgzNjllZjFhLi4z
MDY1ZDg2YzdmMDViNTRjYmM2ZmMwZWQ4YWI4N2YyOTUxYjM4YWIyIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsNDAgQEAKKzIwMTEtMDgtMjIgIENocmlzIFJvZ2VycyAgPGNyb2dlcnNAZ29vZ2xlLmNv
bT4KKworICAgICAgICBBZGQgTWVkaWFQbGF5ZXI6OmF1ZGlvU291cmNlUHJvdmlkZXIoKSBtZXRo
b2QgZm9yIGF1ZGlvIHN0cmVhbSBhY2Nlc3MgYnkgdGhlIFdlYiBBdWRpbyBBUEkuCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjM5OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgT25lIG5ldyB0
ZXN0IGFkZGVkIHRvIHdlYmF1ZGlvL21lZGlhZWxlbWVudGF1ZGlvc291cmNlbm9kZS5odG1sIHRv
IGNoZWNrIHRoYXQgQXVkaW9Db250ZXh0LmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZSgpCisgICAg
ICAgIHRocm93cyBhbiBleGNlcHRpb24gaWYgY2FsbGVkIHR3aWNlIG9uIHRoZSBzYW1lIEhUTUxN
ZWRpYUVsZW1lbnQuCisKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjpwcmVwYXJlRm9yTG9hZCk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpsb2FkTmV4dFNvdXJjZUNoaWxkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmVuc3VyZU1lZGlhUGxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmNyZWF0ZU1lZGlhUGxheWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnNldEF1ZGlvU291cmNlTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50OjphdWRpb1NvdXJjZVByb3ZpZGVyKToKKyAg
ICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxN
ZWRpYUVsZW1lbnQ6OmF1ZGlvU291cmNlTm9kZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFQbGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OmF1ZGlv
U291cmNlUHJvdmlkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVy
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVJbnRlcmZhY2U6OmF1ZGlvU291cmNl
UHJvdmlkZXIpOgorICAgICAgICAqIHdlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZSk6CisgICAg
ICAgICogd2ViYXVkaW8vQXVkaW9Db250ZXh0Lmg6CisgICAgICAgICogd2ViYXVkaW8vQXVkaW9D
b250ZXh0LmlkbDoKKyAgICAgICAgKiB3ZWJhdWRpby9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5v
ZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpN
ZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFFbGVt
ZW50QXVkaW9Tb3VyY2VOb2RlOjp+TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6cHJvY2Vzcyk6CisgICAg
ICAgICogd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6OmxvY2spOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjp1bmxvY2spOgorCiAyMDExLTA4LTIy
ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQWRkIENTUyBwYXJz
aW5nIG9mIC13ZWJraXQtZmxleC1vcmRlcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MTWVkaWFFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAKaW5kZXggMjkzODhiNjZiMjBkZDM3YTYxMGNlOGE2MjNhYmY5NDVlMGQyN2U0Ny4u
NWEwNTRkNDJmZmRkMjFmNjJlYTc5ZDA5MmE3MzJkYTE5Y2Q3NDNhMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCkBAIC04OCw2ICs4OCwxMCBAQAogI2luY2x1ZGUg
IkhUTUxUcmFja0VsZW1lbnQuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyNp
bmNsdWRlICJNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCIKKyNlbmRpZgorCiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNzksNiArMTgzLDkgQEAg
SFRNTE1lZGlhRWxlbWVudDo6SFRNTE1lZGlhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCogZG9jdW0KICAgICAsIG1fbG9hZEluaXRpYXRlZEJ5VXNlckdlc3R1
cmUoZmFsc2UpCiAgICAgLCBtX2NvbXBsZXRlbHlMb2FkZWQoZmFsc2UpCiAgICAgLCBtX2hhdmVQ
cmVwYXJlZFRvUGxheShmYWxzZSkKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgICwgbV9hdWRp
b1NvdXJjZU5vZGUoMCkKKyNlbmRpZgogewogICAgIExPRyhNZWRpYSwgIkhUTUxNZWRpYUVsZW1l
bnQ6OkhUTUxNZWRpYUVsZW1lbnQiKTsKICAgICBkb2N1bWVudC0+cmVnaXN0ZXJGb3JEb2N1bWVu
dEFjdGl2YXRpb25DYWxsYmFja3ModGhpcyk7CkBAIC01MzEsNyArNTM4LDcgQEAgdm9pZCBIVE1M
TWVkaWFFbGVtZW50OjpwcmVwYXJlRm9yTG9hZCgpCiAgICAgICAgIHNjaGVkdWxlRXZlbnQoZXZl
bnROYW1lcygpLmFib3J0RXZlbnQpOwogCiAjaWYgIUVOQUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJ
REVPKQotICAgIG1fcGxheWVyID0gTWVkaWFQbGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBjcmVh
dGVNZWRpYVBsYXllcigpOwogI2Vsc2UKICAgICBpZiAobV9wbGF5ZXIpCiAgICAgICAgIG1fcGxh
eWVyLT5jYW5jZWxMb2FkKCk7CkBAIC02NzcsNyArNjg0LDcgQEAgdm9pZCBIVE1MTWVkaWFFbGVt
ZW50Ojpsb2FkTmV4dFNvdXJjZUNoaWxkKCkKIAogI2lmICFFTkFCTEUoUExVR0lOX1BST1hZX0ZP
Ul9WSURFTykKICAgICAvLyBSZWNyZWF0ZSB0aGUgbWVkaWEgcGxheWVyIGZvciB0aGUgbmV3IHVy
bAotICAgIG1fcGxheWVyID0gTWVkaWFQbGF5ZXI6OmNyZWF0ZSh0aGlzKTsKKyAgICBjcmVhdGVN
ZWRpYVBsYXllcigpOwogI2VuZGlmCiAKICAgICBtX2xvYWRTdGF0ZSA9IExvYWRpbmdGcm9tU291
cmNlRWxlbWVudDsKQEAgLTI0NjIsNyArMjQ2OSw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZlbnQpCiB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6
OmVuc3VyZU1lZGlhUGxheWVyKCkKIHsKICAgICBpZiAoIW1fcGxheWVyKQotICAgICAgICBtX3Bs
YXllciA9IE1lZGlhUGxheWVyOjpjcmVhdGUodGhpcyk7CisgICAgICAgIGNyZWF0ZU1lZGlhUGxh
eWVyKCk7CiB9CiAKIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGVsaXZlck5vdGlmaWNhdGlvbihN
ZWRpYVBsYXllclByb3h5Tm90aWZpY2F0aW9uVHlwZSBub3RpZmljYXRpb24pCkBAIC0yODAyLDYg
KzI4MDksMzcgQEAgdm9pZCogSFRNTE1lZGlhRWxlbWVudDo6cHJlRGlzcGF0Y2hFdmVudEhhbmRs
ZXIoRXZlbnQqIGV2ZW50KQogICAgIHJldHVybiAwOwogfQogCit2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6OmNyZWF0ZU1lZGlhUGxheWVyKCkKK3sKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIGlm
IChtX2F1ZGlvU291cmNlTm9kZSkKKyAgICAgICAgbV9hdWRpb1NvdXJjZU5vZGUtPmxvY2soKTsK
KyNlbmRpZgorICAgICAgICAKKyAgICBtX3BsYXllciA9IE1lZGlhUGxheWVyOjpjcmVhdGUodGhp
cyk7CisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIGlmIChtX2F1ZGlvU291cmNlTm9kZSkK
KyAgICAgICAgbV9hdWRpb1NvdXJjZU5vZGUtPnVubG9jaygpOworI2VuZGlmCit9CisKKyNpZiBF
TkFCTEUoV0VCX0FVRElPKQordm9pZCBIVE1MTWVkaWFFbGVtZW50OjpzZXRBdWRpb1NvdXJjZU5v
ZGUoTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlKiBzb3VyY2VOb2RlKQoreworICAgIEFTU0VS
VCghbV9hdWRpb1NvdXJjZU5vZGUpOworICAgIG1fYXVkaW9Tb3VyY2VOb2RlID0gc291cmNlTm9k
ZTsKK30KKworQXVkaW9Tb3VyY2VQcm92aWRlciogSFRNTE1lZGlhRWxlbWVudDo6YXVkaW9Tb3Vy
Y2VQcm92aWRlcigpCit7CisgICAgaWYgKG1fcGxheWVyKQorICAgICAgICByZXR1cm4gbV9wbGF5
ZXItPmF1ZGlvU291cmNlUHJvdmlkZXIoKTsKKworICAgIHJldHVybiAwOworfQorI2VuZGlmCisK
IH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCmluZGV4IGFj
ZTViMDZlOTY2NjQ1YzVhMDQ4YjBjMzc3ZTQ5ZWIyOWUxMTI3YTQuLjE2MDZlZGJhMjcwMzBjNjJm
NTMxMTNjNjBhYjIwNTI1M2NmNDc0YWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1lZGlhRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5oCkBAIC0zOSw2ICszOSwxMCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBF
TkFCTEUoV0VCX0FVRElPKQorY2xhc3MgQXVkaW9Tb3VyY2VQcm92aWRlcjsKK2NsYXNzIE1lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZTsKKyNlbmRpZgogY2xhc3MgRXZlbnQ7CiBjbGFzcyBIVE1M
U291cmNlRWxlbWVudDsKIGNsYXNzIE1lZGlhQ29udHJvbHM7CkBAIC0yMDEsNiArMjA1LDEzIEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgaXNQbGF5aW5nKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5aW5n
OyB9CiAKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIE1lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZSogYXVkaW9Tb3VyY2VOb2RlKCkgeyByZXR1cm4gbV9hdWRpb1NvdXJjZU5vZGU7IH0KKyAg
ICB2b2lkIHNldEF1ZGlvU291cmNlTm9kZShNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUqKTsK
KworICAgIEF1ZGlvU291cmNlUHJvdmlkZXIqIGF1ZGlvU291cmNlUHJvdmlkZXIoKTsKKyNlbmRp
ZgorCiBwcm90ZWN0ZWQ6CiAgICAgSFRNTE1lZGlhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiwgRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFsIH5IVE1MTWVkaWFFbGVtZW50KCk7CkBAIC0yMTks
NiArMjMwLDggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhRWxlbWVudCgp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogcHJpdmF0ZToKKyAgICB2b2lkIGNyZWF0ZU1lZGlh
UGxheWVyKCk7CisKICAgICB2aXJ0dWFsIHZvaWQgYXR0cmlidXRlQ2hhbmdlZChBdHRyaWJ1dGUq
LCBib29sIHByZXNlcnZlRGVjbHMpOwogICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVk
KGNvbnN0IE5vZGVSZW5kZXJpbmdDb250ZXh0Jik7CiAgICAgdmlydHVhbCBSZW5kZXJPYmplY3Qq
IGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKQEAgLTQzMSw2ICs0
NDQsMTMgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbG9hZEluaXRpYXRlZEJ5VXNlckdlc3R1cmUg
OiAxOwogICAgIGJvb2wgbV9jb21wbGV0ZWx5TG9hZGVkIDogMTsKICAgICBib29sIG1faGF2ZVBy
ZXBhcmVkVG9QbGF5IDogMTsKKworI2lmIEVOQUJMRShXRUJfQVVESU8pCisgICAgLy8gVGhpcyBp
cyBhIHdlYWsgcmVmZXJlbmNlLCBzaW5jZSBtX2F1ZGlvU291cmNlTm9kZSBob2xkcyBhIHJlZmVy
ZW5jZSB0byB1cy4KKyAgICAvLyBUaGUgdmFsdWUgaXMgc2V0IGp1c3QgYWZ0ZXIgdGhlIE1lZGlh
RWxlbWVudEF1ZGlvU291cmNlTm9kZSBpcyBjcmVhdGVkLgorICAgIC8vIFRoZSB2YWx1ZSBpcyBj
bGVhcmVkIGluIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6fk1lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZSgpLgorICAgIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZSogbV9hdWRpb1Nv
dXJjZU5vZGU7CisjZW5kaWYKIH07CiAKIH0gLy9uYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyLmNwcAppbmRleCA0ZDUzNWI2YjVlMGI4
NTdmNWYyMTQ1OGIzMmI2MGQ2ZjRmMmQxMjg4Li5lN2ZkMGIzMmQzMWRlNWJhMjQ4MDQ0ZWUzNTEz
MGQ4NTY4YzQzY2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9NZWRpYVBsYXllci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
TWVkaWFQbGF5ZXIuY3BwCkBAIC04NzMsNiArODczLDEzIEBAIHZvaWQgTWVkaWFQbGF5ZXI6OmNo
YXJhY3RlcmlzdGljQ2hhbmdlZCgpCiAgICAgICAgIG1fbWVkaWFQbGF5ZXJDbGllbnQtPm1lZGlh
UGxheWVyQ2hhcmFjdGVyaXN0aWNDaGFuZ2VkKHRoaXMpOwogfQogCisjaWYgRU5BQkxFKFdFQl9B
VURJTykKK0F1ZGlvU291cmNlUHJvdmlkZXIqIE1lZGlhUGxheWVyOjphdWRpb1NvdXJjZVByb3Zp
ZGVyKCkKK3sKKyAgICByZXR1cm4gbV9wcml2YXRlLT5hdWRpb1NvdXJjZVByb3ZpZGVyKCk7Cit9
CisjZW5kaWYgLy8gV0VCX0FVRElPCisKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVBsYXllci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXIuaAppbmRleCA4MDA3NmNlYjRlZjllZWU0ZDRi
YWQyNDljYTFmOTMyZjY1M2ZkYzA5Li4wMWVhOTA1NGI3Yzk4NTBjNDNjMTU5YjMzNDMxMWFiYzg1
N2RlMTdhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVBsYXllci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxh
eWVyLmgKQEAgLTQxLDYgKzQxLDEwIEBACiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQor
I2luY2x1ZGUgIkF1ZGlvU291cmNlUHJvdmlkZXIuaCIKKyNlbmRpZgorCiAjaWYgVVNFKEFDQ0VM
RVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIKICNlbmRpZgpA
QCAtMzA5LDYgKzMxMywxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFByaXZhdGVCcm93c2lu
Z01vZGUoYm9vbCk7CiAKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIEF1ZGlvU291cmNlUHJv
dmlkZXIqIGF1ZGlvU291cmNlUHJvdmlkZXIoKTsKKyNlbmRpZgorCiBwcml2YXRlOgogICAgIE1l
ZGlhUGxheWVyKE1lZGlhUGxheWVyQ2xpZW50Kik7CiAgICAgdm9pZCBsb2FkV2l0aE5leHRNZWRp
YUVuZ2luZShNZWRpYVBsYXllckZhY3RvcnkqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhUGxheWVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKaW5kZXggYjQ0OTBiYzI3MTI1
NjU0ZmYyN2EwZWNiOTM1NDFjMzZiMGViNTAxZS4uMDk5ZDNlOWIxNGU2NmI5YTE5MjZkNDk5MTc0
Mjc3MjkzNzQ5OGVjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvTWVkaWFQbGF5ZXJQcml2YXRlLmgKQEAgLTE0Niw2ICsxNDYsMTAgQEAgcHVibGljOgog
ICAgIHZvaWQgY2xlYXJNZWRpYUNhY2hlRm9yU2l0ZShjb25zdCBTdHJpbmcmKSB7IH0KIAogICAg
IHZpcnR1YWwgdm9pZCBzZXRQcml2YXRlQnJvd3NpbmdNb2RlKGJvb2wpIHsgfQorCisjaWYgRU5B
QkxFKFdFQl9BVURJTykKKyAgICB2aXJ0dWFsIEF1ZGlvU291cmNlUHJvdmlkZXIqIGF1ZGlvU291
cmNlUHJvdmlkZXIoKSB7IHJldHVybiAwOyB9CisjZW5kaWYKIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuY3BwCmluZGV4IDk0MmNiNDMzMDQ1MTdkNWZjOTFiMGUw
ODEyYTJiMjFmMzg5Zjk4NzUuLjEzMWE1YWY0YzhmOGIwMTAxMDNiNjBjODcxNGFlMTQ1ZTM2MWZl
OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vQXVkaW9Db250ZXh0LmNwcApAQCAtMzEyLDEy
ICszMTIsMjcgQEAgUGFzc1JlZlB0cjxBdWRpb0J1ZmZlclNvdXJjZU5vZGU+IEF1ZGlvQ29udGV4
dDo6Y3JlYXRlQnVmZmVyU291cmNlKCkKICAgICByZXR1cm4gbm9kZTsKIH0KIAotUGFzc1JlZlB0
cjxNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+IEF1ZGlvQ29udGV4dDo6Y3JlYXRlTWVkaWFF
bGVtZW50U291cmNlKEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCkKK1Bhc3NSZWZQdHI8
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlPiBBdWRpb0NvbnRleHQ6OmNyZWF0ZU1lZGlhRWxl
bWVudFNvdXJjZShIVE1MTWVkaWFFbGVtZW50KiBtZWRpYUVsZW1lbnQsIEV4Y2VwdGlvbkNvZGUm
IGVjKQogeworICAgIEFTU0VSVChtZWRpYUVsZW1lbnQpOworICAgIGlmICghbWVkaWFFbGVtZW50
KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKyAgICAgICAgCiAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKICAgICBsYXp5SW5p
dGlhbGl6ZSgpOworICAgIAorICAgIC8vIEZpcnN0IGNoZWNrIGlmIHRoaXMgbWVkaWEgZWxlbWVu
dCBhbHJlYWR5IGhhcyBhIHNvdXJjZSBub2RlLgorICAgIGlmIChtZWRpYUVsZW1lbnQtPmF1ZGlv
U291cmNlTm9kZSgpKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICAgICAgCiAgICAgUmVmUHRyPE1lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZT4gbm9kZSA9IE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6Y3JlYXRlKHRo
aXMsIG1lZGlhRWxlbWVudCk7CiAKKyAgICBtZWRpYUVsZW1lbnQtPnNldEF1ZGlvU291cmNlTm9k
ZShub2RlLmdldCgpKTsKKwogICAgIHJlZk5vZGUobm9kZS5nZXQoKSk7IC8vIGNvbnRleHQga2Vl
cHMgcmVmZXJlbmNlIHVudGlsIG5vZGUgaXMgZGlzY29ubmVjdGVkCiAgICAgcmV0dXJuIG5vZGU7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCmluZGV4IGJkYzgwNmQzN2Fj
MDNiMzllZjFjNWQxYWY3Yjc0ZjIwMDI2YzAxMzEuLjIzYjA0NTZjMjZmYmZhOTMzN2EyZTUwYTU5
YzhiODk1MjliNWU0YzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
Q29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5oCkBA
IC0xMTAsNyArMTEwLDcgQEAgcHVibGljOgogCiAgICAgLy8gVGhlIEF1ZGlvTm9kZSBjcmVhdGUg
bWV0aG9kcyBhcmUgY2FsbGVkIG9uIHRoZSBtYWluIHRocmVhZCAoZnJvbSBKYXZhU2NyaXB0KS4K
ICAgICBQYXNzUmVmUHRyPEF1ZGlvQnVmZmVyU291cmNlTm9kZT4gY3JlYXRlQnVmZmVyU291cmNl
KCk7Ci0gICAgUGFzc1JlZlB0cjxNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+IGNyZWF0ZU1l
ZGlhRWxlbWVudFNvdXJjZShIVE1MTWVkaWFFbGVtZW50Kik7CisgICAgUGFzc1JlZlB0cjxNZWRp
YUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU+IGNyZWF0ZU1lZGlhRWxlbWVudFNvdXJjZShIVE1MTWVk
aWFFbGVtZW50KiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8QXVkaW9HYWluTm9k
ZT4gY3JlYXRlR2Fpbk5vZGUoKTsKICAgICBQYXNzUmVmUHRyPEJpcXVhZEZpbHRlck5vZGU+IGNy
ZWF0ZUJpcXVhZEZpbHRlcigpOwogICAgIFBhc3NSZWZQdHI8V2F2ZVNoYXBlck5vZGU+IGNyZWF0
ZVdhdmVTaGFwZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3dlYmF1ZGlvL0F1ZGlv
Q29udGV4dC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRpby9BdWRpb0NvbnRleHQuaWRsCmlu
ZGV4IDUxNTM0OTJhMTc2YjNmODZiNWQ0YzI5MDVlZmI5Mjc2M2YxMWU4YzUuLmI4MDU3MjE4NzM0
ZjExYjhkYzc1NDIwMDJkNjdkZWM2MGFkNDk4YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL0F1ZGlvQ29udGV4dC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
QXVkaW9Db250ZXh0LmlkbApAQCAtNTksNyArNTksOCBAQCBtb2R1bGUgd2ViYXVkaW8gewogCiAg
ICAgICAgIC8vIFNvdXJjZXMKICAgICAgICAgQXVkaW9CdWZmZXJTb3VyY2VOb2RlIGNyZWF0ZUJ1
ZmZlclNvdXJjZSgpOwotICAgICAgICBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUgY3JlYXRl
TWVkaWFFbGVtZW50U291cmNlKGluIEhUTUxNZWRpYUVsZW1lbnQgbWVkaWFFbGVtZW50KTsKKyAg
ICAgICAgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlIGNyZWF0ZU1lZGlhRWxlbWVudFNvdXJj
ZShpbiBIVE1MTWVkaWFFbGVtZW50IG1lZGlhRWxlbWVudCkKKyAgICAgICAgICAgIHJhaXNlcyhE
T01FeGNlcHRpb24pOwogCiAgICAgICAgIC8vIFByb2Nlc3Npbmcgbm9kZXMKICAgICAgICAgQXVk
aW9HYWluTm9kZSBjcmVhdGVHYWluTm9kZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
d2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAKaW5kZXggZDlmZDZjNWVl
NzFjN2MwZGUwYTMzNDkyM2JmOGZhYTg2YzExYmJhNC4uYTFjNzllZjI2ZmFmNGEzZDkxZDg3ZDg5
MTNlZWFlNzg4NDYwZDVlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVk
aWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS93ZWJhdWRp
by9NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNp
bmNsdWRlICJBdWRpb0NvbnRleHQuaCIKICNpbmNsdWRlICJBdWRpb05vZGVPdXRwdXQuaCIKKyNp
bmNsdWRlICJNZWRpYVBsYXllci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQ2LDIw
ICs0Nyw1NCBAQCBNZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6Ok1lZGlhRWxlbWVudEF1ZGlv
U291cmNlTm9kZShBdWRpb0NvbnRleHQqIGNvbnRleHQsCiAgICAgYWRkT3V0cHV0KGFkb3B0UHRy
KG5ldyBBdWRpb05vZGVPdXRwdXQodGhpcywgMikpKTsKICAgICAKICAgICBzZXRUeXBlKE5vZGVU
eXBlTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2UpOworCisgICAgaW5pdGlhbGl6ZSgpOworfQorCitN
ZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGU6On5NZWRpYUVsZW1lbnRBdWRpb1NvdXJjZU5vZGUo
KQoreworICAgIG1fbWVkaWFFbGVtZW50LT5zZXRBdWRpb1NvdXJjZU5vZGUoMCk7CisgICAgdW5p
bml0aWFsaXplKCk7CiB9CiAKLXZvaWQgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpwcm9j
ZXNzKHNpemVfdCkKK3ZvaWQgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjpwcm9jZXNzKHNp
emVfdCBudW1iZXJPZkZyYW1lcykKIHsKICAgICBBdWRpb0J1cyogb3V0cHV0QnVzID0gb3V0cHV0
KDApLT5idXMoKTsKIAotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgTWVkaWFQbGF5ZXIgYWJzdHJh
Y3Rpb24gdG8gZ2V0IGF1ZGlvIHN0cmVhbSBmcm9tIDxhdWRpbz4gYW5kIDx2aWRlbz4KLSAgICBv
dXRwdXRCdXMtPnplcm8oKTsKKyAgICBpZiAoIW1lZGlhRWxlbWVudCgpKSB7CisgICAgICAgIG91
dHB1dEJ1cy0+emVybygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIC8vIFVz
ZSBhIHRyeUxvY2soKSB0byBhdm9pZCBjb250ZW50aW9uIGluIHRoZSByZWFsLXRpbWUgYXVkaW8g
dGhyZWFkLgorICAgIC8vIElmIHdlIGZhaWwgdG8gYWNxdWlyZSB0aGUgbG9jayB0aGVuIHRoZSBI
VE1MTWVkaWFFbGVtZW50IG11c3QgYmUgaW4gdGhlIG1pZGRsZSBvZgorICAgIC8vIHJlY29uZmln
dXJpbmcgaXRzIHBsYXliYWNrIGVuZ2luZSwgc28gd2Ugb3V0cHV0IHNpbGVuY2UgaW4gdGhpcyBj
YXNlLgorICAgIGlmIChtX3Byb2Nlc3NMb2NrLnRyeUxvY2soKSkgeworICAgICAgICBpZiAoQXVk
aW9Tb3VyY2VQcm92aWRlciogcHJvdmlkZXIgPSBtZWRpYUVsZW1lbnQoKS0+YXVkaW9Tb3VyY2VQ
cm92aWRlcigpKQorICAgICAgICAgICAgcHJvdmlkZXItPnByb3ZpZGVJbnB1dChvdXRwdXRCdXMs
IG51bWJlck9mRnJhbWVzKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0cHV0QnVzLT56
ZXJvKCk7CisgICAgICAgIG1fcHJvY2Vzc0xvY2sudW5sb2NrKCk7CisgICAgfSBlbHNlCisgICAg
ICAgIG91dHB1dEJ1cy0+emVybygpOwogfQogCiB2b2lkIE1lZGlhRWxlbWVudEF1ZGlvU291cmNl
Tm9kZTo6cmVzZXQoKQogewogfQogCit2b2lkIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZTo6
bG9jaygpCit7CisgICAgcmVmKCk7CisgICAgbV9wcm9jZXNzTG9jay5sb2NrKCk7Cit9CisKK3Zv
aWQgTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlOjp1bmxvY2soKQoreworICAgIG1fcHJvY2Vz
c0xvY2sudW5sb2NrKCk7CisgICAgZGVyZWYoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3dlYmF1ZGlvL01lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5oIGIvU291cmNlL1dlYkNv
cmUvd2ViYXVkaW8vTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmgKaW5kZXggM2Y4ZTA1MDlm
MWMxM2YwNWM5OWUxYjY3ZDI1ZTFiNzY3NjZkN2EwNS4uN2FkNjljYjJlOWI5NWM0N2ZkYTk2YWNl
NzAxMGQwN2JiYTIzNjFjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8vTWVk
aWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvd2ViYXVkaW8v
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRl
ICJBdWRpb1NvdXJjZU5vZGUuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzcsMTYgKzM4LDIyIEBAIGNsYXNzIE1lZGlhRWxlbWVu
dEF1ZGlvU291cmNlTm9kZSA6IHB1YmxpYyBBdWRpb1NvdXJjZU5vZGUgewogcHVibGljOgogICAg
IHN0YXRpYyBQYXNzUmVmUHRyPE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZT4gY3JlYXRlKEF1
ZGlvQ29udGV4dCosIEhUTUxNZWRpYUVsZW1lbnQqKTsKIAorICAgIHZpcnR1YWwgfk1lZGlhRWxl
bWVudEF1ZGlvU291cmNlTm9kZSgpOworCiAgICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVt
ZW50KCkgeyByZXR1cm4gbV9tZWRpYUVsZW1lbnQuZ2V0KCk7IH0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgCiAKICAgICAvLyBBdWRpb05vZGUKICAgICB2aXJ0dWFsIHZv
aWQgcHJvY2VzcyhzaXplX3QgZnJhbWVzVG9Qcm9jZXNzKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVz
ZXQoKTsKKyAgICAKKyAgICB2b2lkIGxvY2soKTsKKyAgICB2b2lkIHVubG9jaygpOwogCiBwcml2
YXRlOgogICAgIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZShBdWRpb0NvbnRleHQqLCBIVE1M
TWVkaWFFbGVtZW50Kik7CiAKICAgICBSZWZQdHI8SFRNTE1lZGlhRWxlbWVudD4gbV9tZWRpYUVs
ZW1lbnQ7CisgICAgTXV0ZXggbV9wcm9jZXNzTG9jazsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUK
</data>
<flag name="review"
          id="100881"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>