<?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>34082</bug_id>
          
          <creation_ts>2010-01-25 04:32:21 -0800</creation_ts>
          <short_desc>[Android] Android Geolocation service should not start if the WebView is paused</short_desc>
          <delta_ts>2011-03-24 04:01:07 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Android</rep_platform>
          <op_sys>Android</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>35313</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>android-webkit-unforking</cc>
    
    <cc>ap</cc>
    
    <cc>atwilson</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>eric</cc>
    
    <cc>feng</cc>
    
    <cc>jorlow</cc>
    
    <cc>joth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>sam</cc>
    
    <cc>sfalken</cc>
    
    <cc>steveblock</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>184239</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-25 04:32:21 -0800</bug_when>
    <thetext>The Android Geolocation service should not start if the WebView is paused. This prevents edge-cases where script initiates the Geolocation service after the page has been put into the background. In this case, we do not start the service. It will be started when the service is resumed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184243</commentid>
    <comment_count>1</comment_count>
      <attachid>47336</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-25 04:41:17 -0800</bug_when>
    <thetext>Created attachment 47336
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>184772</commentid>
    <comment_count>2</comment_count>
      <attachid>47336</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-01-26 14:59:10 -0800</bug_when>
    <thetext>Comment on attachment 47336
Patch

This seems liek the wrong design.  Why wouldnt&apos; WebKit reach down into WebCore and set some sort of pause?

Or ask some sort of client if it should start the location.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186939</commentid>
    <comment_count>3</comment_count>
      <attachid>47927</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-02 05:45:02 -0800</bug_when>
    <thetext>Created attachment 47927
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186940</commentid>
    <comment_count>4</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-02 05:46:09 -0800</bug_when>
    <thetext>The new patch adds suspend/resume methods to Page, which can be called from WebKit. This determines whether the Geolocation object is created in a suspended state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189694</commentid>
    <comment_count>5</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-11 08:26:41 -0800</bug_when>
    <thetext>ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189754</commentid>
    <comment_count>6</comment_count>
      <attachid>47927</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-11 11:25:06 -0800</bug_when>
    <thetext>Comment on attachment 47927
Patch

What does it mean for a page to be suspended?  If it only pertains to Geolocation that seems a bit odd.  There must already be a concept of &quot;suspended&quot; in WebCore?  What does Chromium do when a tab is not foreground?  Are there circumstances in Safari or the iPhone where Geolocation would pause or other per-page things would pause?

You&apos;re also aware that Frames can transfer between pages, right?  iFrames can be moved from one window to another as of recently, so if your code should be robust against the Page* changing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>189755</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-11 11:26:09 -0800</bug_when>
    <thetext>Those weren&apos;t really comments positive or negative about the patch.  Mostly questions that it seems to make sense to ask about this code.  I assume similar questions went through your head when writing it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>190567</commentid>
    <comment_count>8</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-15 15:27:41 -0800</bug_when>
    <thetext>Thanks for the comments Eric

&gt; (From update of attachment 47927 [details])
&gt; What does it mean for a page to be suspended?  If it only pertains to
&gt; Geolocation that seems a bit odd.  There must already be a concept of
&gt; &quot;suspended&quot; in WebCore?
I don&apos;t think there&apos;s currently a concept of page suspension in WebCore. Right now, suspension applies only to Geolocation, though I can imagine that other APIs might require a similar concept in the future, which is why I used generic names for the Page methods. The motivation for suspending Geolocation is to turn off the GPS, which consumes significant power, on mobile devices when the page is not in the foreground. I added the suspend/pause methods in response to your earlier comments - did I misinterpret them?

&gt; Are there circumstances in Safari or the iPhone where Geolocation would pause
&gt; or other per-page things would pause?
I&apos;m not familiar with the iPhone Geolocation code, but I imagine that it too would want to turn off GPS for browser pages not in the foreground. The need is probably less important on desktop platforms.
 
&gt; You&apos;re also aware that Frames can transfer between pages, right?  iFrames can
&gt; be moved from one window to another as of recently, so if your code should be
&gt; robust against the Page* changing.
Thanks for the heads up. I&apos;ll look into this more closely. Perhaps you can look at the general structure of the change while I check this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192636</commentid>
    <comment_count>9</comment_count>
      <attachid>47927</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-22 14:31:38 -0800</bug_when>
    <thetext>Comment on attachment 47927
Patch

Please use an Enum instead of true/false to make callers clearer.
+PassRefPtr&lt;Geolocation&gt; Geolocation::create(Frame* frame, bool suspend)

Wast the page() suspension stuff already added separatedly?
 155         m_geolocation = Geolocation::create(m_frame, m_frame &amp;&amp; m_frame-&gt;page()-&gt;isSuspended());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192924</commentid>
    <comment_count>10</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-23 06:52:10 -0800</bug_when>
    <thetext>&gt; Please use an Enum instead of true/false to make callers clearer.
&gt; +PassRefPtr&lt;Geolocation&gt; Geolocation::create(Frame* frame, bool suspend)
OK, will do

&gt; Wast the page() suspension stuff already added separatedly?
&gt;  155         m_geolocation = Geolocation::create(m_frame, m_frame &amp;&amp;
&gt; m_frame-&gt;page()-&gt;isSuspended());
No, it&apos;s added in this patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>192927</commentid>
    <comment_count>11</comment_count>
      <attachid>49289</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-23 06:58:12 -0800</bug_when>
    <thetext>Created attachment 49289
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193072</commentid>
    <comment_count>12</comment_count>
      <attachid>49289</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-23 12:15:25 -0800</bug_when>
    <thetext>Comment on attachment 49289
Patch

So Page::suspend() and Page::resume() are called by the embedder?  Why doesn&apos;t Page::resume() do anything to already suspended geolocations?

Is Geolocation done entirely in WebCore?  I&apos;m surprised that the embedder can&apos;t control this directly from the embedder&apos;s side of things.  Why is WebCore code required at all.  Can&apos;t the embedder just drop the geolocation requests on the floor when it wants to?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193073</commentid>
    <comment_count>13</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-23 12:15:59 -0800</bug_when>
    <thetext>CCing ddkilzer as he might know who on the apple team (iphone or otherwise) is involved in geolocation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193086</commentid>
    <comment_count>14</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-23 13:04:26 -0800</bug_when>
    <thetext>&gt; So Page::suspend() and Page::resume() are called by the embedder?
Correct

&gt;  Why doesn&apos;t
&gt; Page::resume() do anything to already suspended geolocations?
If we go for this route of adding Page::suspend/resume, it should. Currently in
Android, calling Geolocation::suspend/resume is done from WebKit, but it would
be better to do it from Page::suspend/resume. This is already on my list of
things to fix. I&apos;ve opened Bug 35313 to track this.

&gt; Is Geolocation done entirely in WebCore?
The platform implementations of GeolocationService live in WebCore/platform.

&gt; I&apos;m surprised that the embedder can&apos;t
&gt; control this directly from the embedder&apos;s side of things. Why is WebCore code
&gt; required at all.  Can&apos;t the embedder just drop the geolocation requests on the
&gt; floor when it wants to?
It could. This was my approach in my first patch on this bug, where
GeolocationServiceAndroid used a new PlatformBridge::isWebViewPaused() method
to determine whether the page is suspended. But you suggested, rightly I think,
that it would be neater if WebKit were to &apos;reach down into WebCore and set some
sort of pause&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193489</commentid>
    <comment_count>15</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-24 13:33:22 -0800</bug_when>
    <thetext>Adding joth to CC list, who&apos;s working on Geolocation in Chrome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194004</commentid>
    <comment_count>16</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-02-25 22:46:40 -0800</bug_when>
    <thetext>Out of curiosity, why add the suspend() and resume() methods to Page instead of Document?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194043</commentid>
    <comment_count>17</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-02-26 02:38:27 -0800</bug_when>
    <thetext>&gt; Out of curiosity, why add the suspend() and resume() methods to Page instead of
&gt; Document?
The use case this is trying to solve is to make sure that when a browser window/tab is in the background, all Geolocation objects are suspended. So we want to suspend the entire Page, not just individual Documents.

Is there a particular reason why you suggested adding the methods to Document?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194454</commentid>
    <comment_count>18</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-02-26 21:51:39 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; &gt; Out of curiosity, why add the suspend() and resume() methods to Page instead of
&gt; &gt; Document?
&gt; The use case this is trying to solve is to make sure that when a browser
&gt; window/tab is in the background, all Geolocation objects are suspended. So we
&gt; want to suspend the entire Page, not just individual Documents.
&gt; 
&gt; Is there a particular reason why you suggested adding the methods to Document?

The iPhone port overrides methods that already exist on ScriptExecutionContext to suspend and resume Geolocation services:  suspendActiveDOMObjects(), resumeActiveDOMObjects() and stopActiveDOMObjects().  Document extends ScriptExecutionContext, so this seemed like a natural place for them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195062</commentid>
    <comment_count>19</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-03-02 08:58:25 -0800</bug_when>
    <thetext>&gt; The iPhone port overrides methods that already exist on ScriptExecutionContext
&gt; to suspend and resume Geolocation services:  suspendActiveDOMObjects(),
&gt; resumeActiveDOMObjects() and stopActiveDOMObjects().
Do you mean that the iPhone overloads these methods in Document, or in another class that extends ScriptExecutionContext? These methods on Document are called from several places, so I&apos;m not sure it&apos;s safe to override them.

&gt; Document extends
&gt; ScriptExecutionContext, so this seemed like a natural place for them.
Or did you mean that we should add new suspend and resume methods to Document?

Another option would be to make Geolocation inherit from ActiveDOMObject, so it could be suspended and resumed by the calls to the existing ScriptExecutionContext methods.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195238</commentid>
    <comment_count>20</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2010-03-02 14:29:22 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; &gt; The iPhone port overrides methods that already exist on ScriptExecutionContext
&gt; &gt; to suspend and resume Geolocation services:  suspendActiveDOMObjects(),
&gt; &gt; resumeActiveDOMObjects() and stopActiveDOMObjects().
&gt; Do you mean that the iPhone overloads these methods in Document, or in another
&gt; class that extends ScriptExecutionContext? These methods on Document are called
&gt; from several places, so I&apos;m not sure it&apos;s safe to override them.

Yes, it overloads them, but calls the overridden method on ScriptExecutionContext:: before doing its own work.

&gt; &gt; Document extends
&gt; &gt; ScriptExecutionContext, so this seemed like a natural place for them.
&gt; Or did you mean that we should add new suspend and resume methods to Document?

I don&apos;t have a strong opinion here.  You have to walk the frame tree to find each Document no matter where you do it, so maybe it makes more sense to do it in Page than somewhere in each platform&apos;s WebKit implementation.

&gt; Another option would be to make Geolocation inherit from ActiveDOMObject, so it
&gt; could be suspended and resumed by the calls to the existing
&gt; ScriptExecutionContext methods.

I like this option best (if it makes sense architecturally)!  Then you get the desired behavior for &quot;free&quot; by using existing API.  I am not the right person to ask if it makes sense, though, as I&apos;m not intimately familiar with the concepts involved.  Sam Weinig may have an opinion on this approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>195265</commentid>
    <comment_count>21</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-03-02 15:13:40 -0800</bug_when>
    <thetext>&gt; You have to walk the frame tree to find
&gt; each Document no matter where you do it, so maybe it makes more sense to do it
&gt; in Page than somewhere in each platform&apos;s WebKit implementation.
Exactly, so I think this is the best approach. Eric, would you be happy with this?

&gt; I like this option best (if it makes sense architecturally)!  Then you get the
&gt; desired behavior for &quot;free&quot; by using existing API.  I am not the right person
&gt; to ask if it makes sense, though, as I&apos;m not intimately familiar with the
&gt; concepts involved.  Sam Weinig may have an opinion on this approach.
I&apos;m not familiar with this either. I just came across them when looking at ScriptExecutionContext after your suggestion. I think that additional calls to ScriptExecutionContext::suspendActiveDOMObjects/resumeActiveDOMObjects would be required and I&apos;m not sure whether this is safe for the other objects that implement ActiveDOMObject. Sam, do you know whether this approach would make sense architecturally and if it&apos;s safe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198179</commentid>
    <comment_count>22</comment_count>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-10 09:46:45 -0800</bug_when>
    <thetext>+ 2 active dom object experts

From what I know, ActiveDOMObject is the correct way to implement this.  Can either of you provide some advice?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198326</commentid>
    <comment_count>23</comment_count>
    <who name="Andrew Wilson">atwilson</who>
    <bug_when>2010-03-10 13:58:54 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; From what I know, ActiveDOMObject is the correct way to implement this.  Can
&gt; either of you provide some advice?

Agreed that ActiveDOMObject seems like the right way to go, especially since you get similar useful behavior in other cases that you may not have thought of (iframes going away, workers, back/forward history operations).

So using ActiveDOMObject and suspending the Document objects in the page seems like the right thing to do. Note that some ActiveDOMObjects (like Worker) don&apos;t handle suspend() (they return false from canSuspend()) so you&apos;ll still get some activity from those objects even when their parent Document is supposedly suspend()-ed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198396</commentid>
    <comment_count>24</comment_count>
      <attachid>49289</attachid>
    <who name="Jeremy Orlow">jorlow</who>
    <bug_when>2010-03-10 15:48:36 -0800</bug_when>
    <thetext>Comment on attachment 49289
Patch

r- since this should be re-worked to use ActiveDOMObject

Can any of you offer Steve any specific advice or pointers on how to implement this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198424</commentid>
    <comment_count>25</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-03-10 17:00:46 -0800</bug_when>
    <thetext>&gt; don&apos;t handle suspend() (they return false from canSuspend())

Side note: suspend() can still be called if canSuspend() returns true. One can prevent a document from going into a b/f cache, but a debugger can be attached and try to suspend() any time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>321896</commentid>
    <comment_count>26</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-12-14 04:40:44 -0800</bug_when>
    <thetext>Note that the problem of how to architect the interaction between WebCore and WebKit will be completely avoided once we switch to client-based Geolocation, as the embedder will then have complete control over the Geolocation client.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>372737</commentid>
    <comment_count>27</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-03-24 04:01:07 -0700</bug_when>
    <thetext>Closing this bug as invalid as it won&apos;t be an issue once the switch to client-based Geolocation is complete. See Bug 40373.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47336</attachid>
            <date>2010-01-25 04:41:17 -0800</date>
            <delta_ts>2010-02-02 05:44:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34082-20100125124115.patch</filename>
            <type>text/plain</type>
            <size>3925</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1Mzc5NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjAgQEAKKzIwMTAtMDEtMjUgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IERvIG5vdCBzdGFydCB0aGUgQW5kcm9pZCBHZW9sb2NhdGlvbiBzZXJ2aWNlIGlmIHRoZSBXZWJW
aWV3IGlzIHBhdXNlZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM0MDgyCisKKyAgICAgICAgQWxzbyBtYWtlcyBHZW9sb2NhdGlvblNlcnZpY2VBbmRy
b2lkOjp0aW1lckZpcmVkIHByaXZhdGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCBwbGF0Zm9y
bSBpbXBsZW1lbnRhdGlvbiBvbmx5LgorCisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9HZW9s
b2NhdGlvblNlcnZpY2VBbmRyb2lkLmNwcDogTW9kaWZpZWQuCisgICAgICAgIChXZWJDb3JlOjpH
ZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lkOjpzdGFydFVwZGF0aW5nKTogTW9kaWZpZWQuIERvIG5v
dCBzdGFydCB0aGUgc2VydmljZSBpZiB0aGUgV2ViVmlldyBpcyBwYXVzZWQKKyAgICAgICAgKFdl
YkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUFuZHJvaWQ6OnN0b3BVcGRhdGluZyk6IE1vZGlmaWVk
LiBBZGRlZCBhIGNvbW1lbnQKKyAgICAgICAgKiBwbGF0Zm9ybS9hbmRyb2lkL0dlb2xvY2F0aW9u
U2VydmljZUFuZHJvaWQuaDogTW9kaWZpZWQuIE1hZGUgdGltZXJGaXJlZCBwcml2YXRlCisgICAg
ICAgICogcGxhdGZvcm0vYW5kcm9pZC9QbGF0Zm9ybUJyaWRnZS5oOiBNb2RpZmllZC4gQWRkZWQg
aXNXZWJWaWV3UGF1c2VkCisKIDIwMTAtMDEtMjQgIFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgVGltb3RoeSBIYXRjaGVyLgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0dlb2xvY2F0aW9uU2VydmljZUFuZHJvaWQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9HZW9sb2NhdGlvblNlcnZp
Y2VBbmRyb2lkLmNwcAkocmV2aXNpb24gNTM3OTUpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2FuZHJv
aWQvR2VvbG9jYXRpb25TZXJ2aWNlQW5kcm9pZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKIAogI2luY2x1ZGUgIkdlb2xvY2F0aW9uU2VydmljZUJyaWRnZS5oIgogI2luY2x1
ZGUgIkdlb3Bvc2l0aW9uLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNsdWRl
ICJQb3NpdGlvbkVycm9yLmgiCiAjaW5jbHVkZSAiUG9zaXRpb25PcHRpb25zLmgiCiAKQEAgLTgz
LDggKzg0LDEzIEBAIGJvb2wgR2VvbG9jYXRpb25TZXJ2aWNlQW5kcm9pZDo6c3RhcnRVcGQKICAg
ICBpZiAob3B0aW9ucy0+ZW5hYmxlSGlnaEFjY3VyYWN5KCkpCiAgICAgICAgIG1famF2YUJyaWRn
ZS0+c2V0RW5hYmxlR3BzKHRydWUpOwogCi0gICAgaWYgKCFoYXZlSmF2YUJyaWRnZSkKLSAgICAg
ICAgbV9qYXZhQnJpZGdlLT5zdGFydCgpOworICAgIC8vIFdlIG5lZWQgb25seSBzdGFydCB0aGUg
c2VydmljZSB3aGVuIGl0J3MgZmlyc3QgY3JlYXRlZC4KKyAgICBpZiAoIWhhdmVKYXZhQnJpZGdl
KSB7CisgICAgICAgIC8vIElmIHRoZSBicm93c2VyIGlzIHBhdXNlZCwgZG9uJ3Qgc3RhcnQgdGhl
IHNlcnZpY2UuIEl0IHdpbGwgYmUgc3RhcnRlZAorICAgICAgICAvLyB3aGVuIHdlIGdldCB0aGUg
Y2FsbCB0byByZXN1bWUuCisgICAgICAgIGlmICghUGxhdGZvcm1CcmlkZ2U6OmlzV2ViVmlld1Bh
dXNlZCgpKQorICAgICAgICAgICAgbV9qYXZhQnJpZGdlLT5zdGFydCgpOworICAgIH0KIAogICAg
IHJldHVybiB0cnVlOwogfQpAQCAtOTIsNyArOTgsNyBAQCBib29sIEdlb2xvY2F0aW9uU2Vydmlj
ZUFuZHJvaWQ6OnN0YXJ0VXBkCiB2b2lkIEdlb2xvY2F0aW9uU2VydmljZUFuZHJvaWQ6OnN0b3BV
cGRhdGluZygpCiB7CiAgICAgLy8gQ2FsbGVkIHdoZW4gdGhlIEdlb2xvY2F0aW9uIG9iamVjdCBo
YXMgbm8gd2F0Y2hlcyBvciBvbmUgc2hvdHMgaW4KLSAgICAvLyBwcm9ncmVzcy4KKyAgICAvLyBw
cm9ncmVzcy4gVGhpcyBtYXkgYmUgY2FsbGVkIHJlcGVhdGVkbHkuCiAgICAgbV9qYXZhQnJpZGdl
LmNsZWFyKCk7CiAgICAgLy8gUmVzZXQgbGFzdCBwb3NpdGlvbiBhbmQgZXJyb3IgdG8gbWFrZSBz
dXJlIHRoYXQgd2UgYWx3YXlzIHRyeSB0byBnZXQgYQogICAgIC8vIG5ldyBwb3NpdGlvbiBmcm9t
IHRoZSBzeXN0ZW0gc2VydmljZSB3aGVuIGEgcmVxdWVzdCBpcyBmaXJzdCBtYWRlLgpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0dlb2xvY2F0aW9uU2VydmljZUFuZHJvaWQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvR2VvbG9jYXRpb25TZXJ2aWNlQW5k
cm9pZC5oCShyZXZpc2lvbiA1Mzc5NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9HZW9s
b2NhdGlvblNlcnZpY2VBbmRyb2lkLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDYgQEAg
cHVibGljOgogICAgIC8vIEFuZHJvaWQtc3BlY2lmaWMKICAgICB2b2lkIG5ld1Bvc2l0aW9uQXZh
aWxhYmxlKFBhc3NSZWZQdHI8R2VvcG9zaXRpb24+KTsKICAgICB2b2lkIG5ld0Vycm9yQXZhaWxh
YmxlKFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvcj4pOwotICAgIHZvaWQgdGltZXJGaXJlZChUaW1l
cjxHZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lkPiogdGltZXIpOwogCiBwcml2YXRlOgogICAgIEdl
b2xvY2F0aW9uU2VydmljZUFuZHJvaWQoR2VvbG9jYXRpb25TZXJ2aWNlQ2xpZW50Kik7CkBAIC02
Niw2ICs2NSw4IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgaXNQb3NpdGlvbk1vcmVBY2N1
cmF0ZShHZW9wb3NpdGlvbiogcG9zaXRpb24xLCBHZW9wb3NpdGlvbiogcG9zaXRpb24yKTsKICAg
ICBzdGF0aWMgYm9vbCBpc1Bvc2l0aW9uTW9yZVRpbWVseShHZW9wb3NpdGlvbiogcG9zaXRpb24x
LCBHZW9wb3NpdGlvbiogcG9zaXRpb24yKTsKIAorICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxH
ZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lkPiopOworCiAgICAgVGltZXI8R2VvbG9jYXRpb25TZXJ2
aWNlQW5kcm9pZD4gbV90aW1lcjsKICAgICBSZWZQdHI8R2VvcG9zaXRpb24+IG1fbGFzdFBvc2l0
aW9uOwogICAgIFJlZlB0cjxQb3NpdGlvbkVycm9yPiBtX2xhc3RFcnJvcjsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vYW5kcm9pZC9QbGF0Zm9ybUJyaWRnZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vYW5kcm9pZC9QbGF0Zm9ybUJyaWRnZS5oCShyZXZpc2lvbiA1Mzc5NSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9QbGF0Zm9ybUJyaWRnZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDQsNiArMTA0LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGNvb2tpZXNFbmFi
bGVkKCk7CiAgICAgLy8gUGx1Z2luCiAgICAgc3RhdGljIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRh
YmxlT2JqZWN0KFdpZGdldCopOworCisgICAgLy8gV2hldGhlciB0aGUgV2ViVmlldyBpcyBwYXVz
ZWQuCisgICAgc3RhdGljIGJvb2wgaXNXZWJWaWV3UGF1c2VkKCk7CiB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47927</attachid>
            <date>2010-02-02 05:45:02 -0800</date>
            <delta_ts>2010-02-23 06:58:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34082-20100202134500.patch</filename>
            <type>text/plain</type>
            <size>13769</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDIyOSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTAgQEAKKzIwMTAtMDItMDIgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IERvIG5vdCBzdGFydCB0aGUgR2VvbG9jYXRpb24gc2VydmljZSBpZiB0aGUgcGFnZSBpcyBzdXNw
ZW5kZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0
MDgyCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWRkcyBzdXNwZW5kIGFuZCByZXN1bWUgbWV0aG9k
cyB0byBQYWdlLiBXaGVuIGEgUGFnZSBpcyBzdXNwZW5kZWQsCisgICAgICAgIGFueSBHZW9sb2Nh
dGlvbiBvYmplY3RzIGNyZWF0ZWQgaW4gdGhhdCBQYWdlIGFyZSBjcmVhdGVkIGluIGEgc3VzcGVu
ZGVkIHN0YXRlLgorICAgICAgICBUaGUgR2VvbG9jYXRpb24gb2JqZWN0cyBjYW4gbGF0ZXIgYmUg
cmVzdW1lZC4KKyAgICAgICAgVGhpcyBhbGxvd3MgdGhlIGJyb3dzZXIgdG8gYXZvaWQgdGhlIEdl
b2xvY2F0aW9uIHNlcnZpY2UgYmVpbmcgc3RhcnRlZCB3aGVuLAorICAgICAgICBmb3IgZXhhbXBs
ZSwgdGhlIHBhZ2UgaXMgaW4gdGhlIGJhY2tncm91bmQuCisKKyAgICAgICAgQWxzbyBtYWtlcyBH
ZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lkOjp0aW1lckZpcmVkIHByaXZhdGUuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLgorCisgICAgICAgICogcGFnZS9HZW9sb2NhdGlvbi5jcHA6IE1vZGlmaWVk
LgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OmNyZWF0ZSk6IE1vZGlmaWVkLiBBZGRl
ZCBzdXNwZW5kIHBhcmFtZXRlcgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246Okdlb2xv
Y2F0aW9uKTogTW9kaWZpZWQuIEluaXRpYWxpemUgc3VzcGVuZGVkIHN0YXRlIHRvIGZhbHNlCisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6c3VzcGVuZCk6IE1vZGlmaWVkLiBTZXQgc3Vz
cGVuZGVkIHN0YXRlIHRvIHRydWUKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpyZXN1
bWUpOiBNb2RpZmllZC4gU2V0IHN1c3BlbmRlZCBzdGF0ZSB0byBmYWxzZQorICAgICAgICAoV2Vi
Q29yZTo6R2VvbG9jYXRpb246OnN0YXJ0VXBkYXRpbmcpOiBNb2RpZmllZC4gUGFzcyBzdXNwZW5k
ZWQgc3RhdGUgdG8gc2VydmljZQorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRpb24uaDogTW9kaWZp
ZWQuCisgICAgICAgICogcGFnZS9OYXZpZ2F0b3IuY3BwOiBNb2RpZmllZC4KKyAgICAgICAgKFdl
YkNvcmU6Ok5hdmlnYXRvcjo6Z2VvbG9jYXRpb24pOiBNb2RpZmllZC4gUGFzcyBQYWdlJ3Mgc3Vz
cGVuZGVkIHN0YXRlIHRvIG5ldyBHZW9sb2NhdGlvbiBvYmplY3QKKyAgICAgICAgKiBwYWdlL1Bh
Z2UuY3BwOiBNb2RpZmllZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOiBNb2RpZmll
ZC4gSW5pdGlhbGl6ZSBzdXNwZW5kZWQgc3RhdGUgdG8gZmFsc2UKKyAgICAgICAgKiBwYWdlL1Bh
Z2UuaDogTW9kaWZpZWQuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjppc1N1c3BlbmRlZCk6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c3VzcGVuZCk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6cmVzdW1lKTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vR2VvbG9j
YXRpb25TZXJ2aWNlLmg6IE1vZGlmaWVkLgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25T
ZXJ2aWNlOjpzdGFydFVwZGF0aW5nKTogTW9kaWZpZWQuIEFkZGVkIHN1c3BlbmQgcGFyYW1ldGVy
CisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9HZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lkLmNw
cDogTW9kaWZpZWQuCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lk
OjpzdGFydFVwZGF0aW5nKTogTW9kaWZpZWQuIEFkZGVkIHN1c3BlbmQgcGFyYW1ldGVyCisgICAg
ICAgICogcGxhdGZvcm0vYW5kcm9pZC9HZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lkLmg6IE1vZGlm
aWVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9HZW9sb2NhdGlvblNlcnZpY2VHdGsuY3BwOiBN
b2RpZmllZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUd0azo6c3RhcnRV
cGRhdGluZyk6IE1vZGlmaWVkLiBBZGRlZCBzdXNwZW5kIHBhcmFtZXRlcgorICAgICAgICAqIHBs
YXRmb3JtL2d0ay9HZW9sb2NhdGlvblNlcnZpY2VHdGsuaDogTW9kaWZpZWQuCisgICAgICAgICog
cGxhdGZvcm0vbWFjL0dlb2xvY2F0aW9uU2VydmljZU1hYy5oOiBNb2RpZmllZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvR2VvbG9jYXRpb25TZXJ2aWNlTWFjLm1tOiBNb2RpZmllZC4KKyAgICAg
ICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZU1hYzo6c3RhcnRVcGRhdGluZyk6IE1vZGlm
aWVkLiBBZGRlZCBzdXNwZW5kIHBhcmFtZXRlcgorICAgICAgICAqIHBsYXRmb3JtL21vY2svR2Vv
bG9jYXRpb25TZXJ2aWNlTW9jay5jcHA6IE1vZGlmaWVkLgorICAgICAgICAoV2ViQ29yZTo6R2Vv
bG9jYXRpb25TZXJ2aWNlTW9jazo6c3RhcnRVcGRhdGluZyk6IE1vZGlmaWVkLiBBZGRlZCBzdXNw
ZW5kIHBhcmFtZXRlcgorICAgICAgICAqIHBsYXRmb3JtL21vY2svR2VvbG9jYXRpb25TZXJ2aWNl
TW9jay5oOiBNb2RpZmllZC4KKwogMjAxMC0wMi0wMiAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5o
YXVzbWFubkBub2tpYS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQXJpeWEgSGlkYXlhdC4K
SW5kZXg6IFdlYkNvcmUvcGFnZS9HZW9sb2NhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wYWdlL0dlb2xvY2F0aW9uLmNwcAkocmV2aXNpb24gNTQyMjIpCisrKyBXZWJDb3JlL3BhZ2Uv
R2VvbG9jYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzEsNiArMTcxLDE0IEBAIHZvaWQg
R2VvbG9jYXRpb246OldhdGNoZXJzOjpnZXROb3RpZmllcnMKICAgICBjb3B5VmFsdWVzVG9WZWN0
b3IobV9pZFRvTm90aWZpZXJNYXAsIGNvcHkpOwogfQogCitQYXNzUmVmUHRyPEdlb2xvY2F0aW9u
PiBHZW9sb2NhdGlvbjo6Y3JlYXRlKEZyYW1lKiBmcmFtZSwgYm9vbCBzdXNwZW5kKQoreworICAg
IFJlZlB0cjxHZW9sb2NhdGlvbj4gZ2VvbG9jYXRpb24gPSBhZG9wdFJlZihuZXcgR2VvbG9jYXRp
b24oZnJhbWUpKTsKKyAgICBpZiAoc3VzcGVuZCkKKyAgICAgICAgZ2VvbG9jYXRpb24tPnN1c3Bl
bmQoKTsKKyAgICByZXR1cm4gZ2VvbG9jYXRpb24ucmVsZWFzZSgpOworfQorCiBHZW9sb2NhdGlv
bjo6R2VvbG9jYXRpb24oRnJhbWUqIGZyYW1lKQogICAgIDogbV9mcmFtZShmcmFtZSkKICNpZiAh
RU5BQkxFKENMSUVOVF9CQVNFRF9HRU9MT0NBVElPTikKQEAgLTE3OCw2ICsxODYsNyBAQCBHZW9s
b2NhdGlvbjo6R2VvbG9jYXRpb24oRnJhbWUqIGZyYW1lKQogI2VuZGlmCiAgICAgLCBtX2FsbG93
R2VvbG9jYXRpb24oVW5rbm93bikKICAgICAsIG1fc2hvdWxkQ2xlYXJDYWNoZShmYWxzZSkKKyAg
ICAsIG1faXNTdXNwZW5kZWQoZmFsc2UpCiB7CiAgICAgaWYgKCFtX2ZyYW1lKQogICAgICAgICBy
ZXR1cm47CkBAIC0yOTEsNiArMzAwLDcgQEAgdm9pZCBHZW9sb2NhdGlvbjo6c3VzcGVuZCgpCiAg
ICAgaWYgKGhhc0xpc3RlbmVycygpKQogICAgICAgICBtX3NlcnZpY2UtPnN1c3BlbmQoKTsKICNl
bmRpZgorICAgIG1faXNTdXNwZW5kZWQgPSB0cnVlOwogfQogCiB2b2lkIEdlb2xvY2F0aW9uOjpy
ZXN1bWUoKQpAQCAtMjk5LDYgKzMwOSw3IEBAIHZvaWQgR2VvbG9jYXRpb246OnJlc3VtZSgpCiAg
ICAgaWYgKGhhc0xpc3RlbmVycygpKQogICAgICAgICBtX3NlcnZpY2UtPnJlc3VtZSgpOwogI2Vu
ZGlmCisgICAgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOwogfQogCiB2b2lkIEdlb2xvY2F0aW9uOjpz
ZXRJc0FsbG93ZWQoYm9vbCBhbGxvd2VkKQpAQCAtNTI1LDcgKzUzNiw3IEBAIGJvb2wgR2VvbG9j
YXRpb246OnN0YXJ0VXBkYXRpbmcoR2VvTm90aWYKICAgICBwYWdlLT5nZW9sb2NhdGlvbkNvbnRy
b2xsZXIoKS0+YWRkT2JzZXJ2ZXIodGhpcyk7CiAgICAgcmV0dXJuIHRydWU7CiAjZWxzZQotICAg
IHJldHVybiBtX3NlcnZpY2UtPnN0YXJ0VXBkYXRpbmcobm90aWZpZXItPm1fb3B0aW9ucy5nZXQo
KSk7CisgICAgcmV0dXJuIG1fc2VydmljZS0+c3RhcnRVcGRhdGluZyhub3RpZmllci0+bV9vcHRp
b25zLmdldCgpLCBtX2lzU3VzcGVuZGVkKTsKICNlbmRpZgogfQogCkluZGV4OiBXZWJDb3JlL3Bh
Z2UvR2VvbG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24u
aAkocmV2aXNpb24gNTQyMjIpCisrKyBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBjbGFzcyBHZW9sb2NhdGlvbiA6IHB1YmxpYyBSZWZD
b3VudGVkPEdlCiAjZW5kaWYKIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW9s
b2NhdGlvbj4gY3JlYXRlKEZyYW1lKiBmcmFtZSkgeyByZXR1cm4gYWRvcHRSZWYobmV3IEdlb2xv
Y2F0aW9uKGZyYW1lKSk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxHZW9sb2NhdGlvbj4gY3Jl
YXRlKEZyYW1lKiwgYm9vbCBzdXNwZW5kKTsKIAogICAgIHZpcnR1YWwgfkdlb2xvY2F0aW9uKCk7
CiAKQEAgLTE3Miw2ICsxNzIsOCBAQCBwcml2YXRlOgogICAgICAgICBObwogICAgIH0gbV9hbGxv
d0dlb2xvY2F0aW9uOwogICAgIGJvb2wgbV9zaG91bGRDbGVhckNhY2hlOworCisgICAgYm9vbCBt
X2lzU3VzcGVuZGVkOwogfTsKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdl
YkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9OYXZp
Z2F0b3IuY3BwCShyZXZpc2lvbiA1NDIyMikKKysrIFdlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTIsNyArMTUyLDcgQEAgYm9vbCBOYXZpZ2F0b3I6OmphdmFF
bmFibGVkKCkgY29uc3QKIEdlb2xvY2F0aW9uKiBOYXZpZ2F0b3I6Omdlb2xvY2F0aW9uKCkgY29u
c3QKIHsKICAgICBpZiAoIW1fZ2VvbG9jYXRpb24pCi0gICAgICAgIG1fZ2VvbG9jYXRpb24gPSBH
ZW9sb2NhdGlvbjo6Y3JlYXRlKG1fZnJhbWUpOworICAgICAgICBtX2dlb2xvY2F0aW9uID0gR2Vv
bG9jYXRpb246OmNyZWF0ZShtX2ZyYW1lLCBtX2ZyYW1lICYmIG1fZnJhbWUtPnBhZ2UoKS0+aXNT
dXNwZW5kZWQoKSk7CiAgICAgcmV0dXJuIG1fZ2VvbG9jYXRpb24uZ2V0KCk7CiB9CiAKSW5kZXg6
IFdlYkNvcmUvcGFnZS9QYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5j
cHAJKHJldmlzaW9uIDU0MjIyKQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDUsNiArMTQ1LDcgQEAgUGFnZTo6UGFnZShDaHJvbWVDbGllbnQqIGNocm9tZUNs
aWVudCwgQwogICAgICwgbV9jdXN0b21IVE1MVG9rZW5pemVyVGltZURlbGF5KC0xKQogICAgICwg
bV9jdXN0b21IVE1MVG9rZW5pemVyQ2h1bmtTaXplKC0xKQogICAgICwgbV9jYW5TdGFydFBsdWdp
bnModHJ1ZSkKKyAgICAsIG1faXNTdXNwZW5kZWQoZmFsc2UpCiB7CiAjaWYgIUVOQUJMRShDT05U
RVhUX01FTlVTKQogICAgIFVOVVNFRF9QQVJBTShjb250ZXh0TWVudUNsaWVudCk7CkluZGV4OiBX
ZWJDb3JlL3BhZ2UvUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmgJKHJl
dmlzaW9uIDU0MjIyKQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MjQxLDYgKzI0MSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgRU5BQkxFKElOU1BFQ1RP
UikKICAgICAgICAgSW5zcGVjdG9yVGltZWxpbmVBZ2VudCogaW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dCgpIGNvbnN0OwogI2VuZGlmCisKKyAgICAgICAgYm9vbCBpc1N1c3BlbmRlZCgpIHsgcmV0dXJu
IG1faXNTdXNwZW5kZWQ7IH0KKyAgICAgICAgdm9pZCBzdXNwZW5kKCkgeyBtX2lzU3VzcGVuZGVk
ID0gdHJ1ZTsgfQorICAgICAgICB2b2lkIHJlc3VtZSgpIHsgbV9pc1N1c3BlbmRlZCA9IGZhbHNl
OyB9CiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBpbml0R3JvdXAoKTsKIApAQCAtMzMwLDYg
KzMzNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiBFTkFCTEUoTk9USUZJQ0FUSU9OUykK
ICAgICAgICAgTm90aWZpY2F0aW9uUHJlc2VudGVyKiBtX25vdGlmaWNhdGlvblByZXNlbnRlcjsK
ICNlbmRpZgorICAgICAgICBib29sIG1faXNTdXNwZW5kZWQ7CiAgICAgfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9HZW9sb2NhdGlvblNlcnZpY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0dlb2xvY2F0aW9uU2VydmljZS5oCShy
ZXZpc2lvbiA1NDIyMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vR2VvbG9jYXRpb25TZXJ2aWNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBHZW9s
b2NhdGlvblNlcnZpY2UqIGNyZWF0ZShHZW9sb2NhdGlvblNlcnZpY2VDbGllbnQqKTsKICAgICB2
aXJ0dWFsIH5HZW9sb2NhdGlvblNlcnZpY2UoKSB7IH0KICAgICAKLSAgICB2aXJ0dWFsIGJvb2wg
c3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHZp
cnR1YWwgYm9vbCBzdGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyosIGJvb2wgLyogc3VzcGVu
ZCAqLykgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKCkg
eyB9CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoKSB7IH0KSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vYW5kcm9pZC9HZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lkLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvR2VvbG9jYXRpb25TZXJ2aWNlQW5kcm9pZC5j
cHAJKHJldmlzaW9uIDU0MjIyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0dlb2xvY2F0
aW9uU2VydmljZUFuZHJvaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIEdl
b2xvY2F0aW9uU2VydmljZUFuZHJvaWQ6Okdlb2xvY2F0aW9uU2UKIHsKIH0KIAotYm9vbCBHZW9s
b2NhdGlvblNlcnZpY2VBbmRyb2lkOjpzdGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyogb3B0
aW9ucykKK2Jvb2wgR2VvbG9jYXRpb25TZXJ2aWNlQW5kcm9pZDo6c3RhcnRVcGRhdGluZyhQb3Np
dGlvbk9wdGlvbnMqIG9wdGlvbnMsIGJvb2wgc3VzcGVuZCkKIHsKICAgICAvLyBUaGlzIG1ldGhv
ZCBpcyBjYWxsZWQgZXZlcnkgdGltZSBhIG5ldyB3YXRjaCBvciBvbmUtc2hvdCBwb3NpdGlvbiBy
ZXF1ZXN0CiAgICAgLy8gaXMgc3RhcnRlZC4gSWYgd2UgYWxyZWFkeSBoYXZlIGEgcG9zaXRpb24g
b3IgYW4gZXJyb3IsIGNhbGwgYmFjawpAQCAtODMsOCArODMsMTMgQEAgYm9vbCBHZW9sb2NhdGlv
blNlcnZpY2VBbmRyb2lkOjpzdGFydFVwZAogICAgIGlmIChvcHRpb25zLT5lbmFibGVIaWdoQWNj
dXJhY3koKSkKICAgICAgICAgbV9qYXZhQnJpZGdlLT5zZXRFbmFibGVHcHModHJ1ZSk7CiAKLSAg
ICBpZiAoIWhhdmVKYXZhQnJpZGdlKQotICAgICAgICBtX2phdmFCcmlkZ2UtPnN0YXJ0KCk7Cisg
ICAgLy8gV2UgbmVlZCBvbmx5IHN0YXJ0IHRoZSBzZXJ2aWNlIHdoZW4gaXQncyBmaXJzdCBjcmVh
dGVkLgorICAgIGlmICghaGF2ZUphdmFCcmlkZ2UpIHsKKyAgICAgICAgLy8gSWYgdGhlIGJyb3dz
ZXIgaXMgcGF1c2VkLCBkb24ndCBzdGFydCB0aGUgc2VydmljZS4gSXQgd2lsbCBiZSBzdGFydGVk
CisgICAgICAgIC8vIHdoZW4gd2UgZ2V0IHRoZSBjYWxsIHRvIHJlc3VtZS4KKyAgICAgICAgaWYg
KCFzdXNwZW5kKQorICAgICAgICAgICAgbV9qYXZhQnJpZGdlLT5zdGFydCgpOworICAgIH0KIAog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtOTIsNyArOTcsNyBAQCBib29sIEdlb2xvY2F0aW9uU2Vy
dmljZUFuZHJvaWQ6OnN0YXJ0VXBkCiB2b2lkIEdlb2xvY2F0aW9uU2VydmljZUFuZHJvaWQ6OnN0
b3BVcGRhdGluZygpCiB7CiAgICAgLy8gQ2FsbGVkIHdoZW4gdGhlIEdlb2xvY2F0aW9uIG9iamVj
dCBoYXMgbm8gd2F0Y2hlcyBvciBvbmUgc2hvdHMgaW4KLSAgICAvLyBwcm9ncmVzcy4KKyAgICAv
LyBwcm9ncmVzcy4gVGhpcyBtYXkgYmUgY2FsbGVkIHJlcGVhdGVkbHkuCiAgICAgbV9qYXZhQnJp
ZGdlLmNsZWFyKCk7CiAgICAgLy8gUmVzZXQgbGFzdCBwb3NpdGlvbiBhbmQgZXJyb3IgdG8gbWFr
ZSBzdXJlIHRoYXQgd2UgYWx3YXlzIHRyeSB0byBnZXQgYQogICAgIC8vIG5ldyBwb3NpdGlvbiBm
cm9tIHRoZSBzeXN0ZW0gc2VydmljZSB3aGVuIGEgcmVxdWVzdCBpcyBmaXJzdCBtYWRlLgpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0dlb2xvY2F0aW9uU2VydmljZUFuZHJvaWQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvR2VvbG9jYXRpb25TZXJ2aWNl
QW5kcm9pZC5oCShyZXZpc2lvbiA1NDIyMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9H
ZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lkLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDcgKzQ1LDcg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+R2VvbG9jYXRpb25TZXJ2aWNlQW5kcm9pZCgpIHsg
fTsKIAotICAgIHZpcnR1YWwgYm9vbCBzdGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyopOwor
ICAgIHZpcnR1YWwgYm9vbCBzdGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyosIGJvb2wgc3Vz
cGVuZCk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3BVcGRhdGluZygpOwogCiAgICAgdmlydHVhbCBH
ZW9wb3NpdGlvbiogbGFzdFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UG9zaXRpb24u
Z2V0KCk7IH0KQEAgLTU3LDcgKzU3LDYgQEAgcHVibGljOgogICAgIC8vIEFuZHJvaWQtc3BlY2lm
aWMKICAgICB2b2lkIG5ld1Bvc2l0aW9uQXZhaWxhYmxlKFBhc3NSZWZQdHI8R2VvcG9zaXRpb24+
KTsKICAgICB2b2lkIG5ld0Vycm9yQXZhaWxhYmxlKFBhc3NSZWZQdHI8UG9zaXRpb25FcnJvcj4p
OwotICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxHZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lkPiog
dGltZXIpOwogCiBwcml2YXRlOgogICAgIEdlb2xvY2F0aW9uU2VydmljZUFuZHJvaWQoR2VvbG9j
YXRpb25TZXJ2aWNlQ2xpZW50Kik7CkBAIC02Niw2ICs2NSw4IEBAIHByaXZhdGU6CiAgICAgc3Rh
dGljIGJvb2wgaXNQb3NpdGlvbk1vcmVBY2N1cmF0ZShHZW9wb3NpdGlvbiogcG9zaXRpb24xLCBH
ZW9wb3NpdGlvbiogcG9zaXRpb24yKTsKICAgICBzdGF0aWMgYm9vbCBpc1Bvc2l0aW9uTW9yZVRp
bWVseShHZW9wb3NpdGlvbiogcG9zaXRpb24xLCBHZW9wb3NpdGlvbiogcG9zaXRpb24yKTsKIAor
ICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxHZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lkPiogdGlt
ZXIpOworCiAgICAgVGltZXI8R2VvbG9jYXRpb25TZXJ2aWNlQW5kcm9pZD4gbV90aW1lcjsKICAg
ICBSZWZQdHI8R2VvcG9zaXRpb24+IG1fbGFzdFBvc2l0aW9uOwogICAgIFJlZlB0cjxQb3NpdGlv
bkVycm9yPiBtX2xhc3RFcnJvcjsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0dlb2xvY2F0
aW9uU2VydmljZUd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR2Vv
bG9jYXRpb25TZXJ2aWNlR3RrLmNwcAkocmV2aXNpb24gNTQyMjIpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2d0ay9HZW9sb2NhdGlvblNlcnZpY2VHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3
ICs3Myw3IEBAIEdlb2xvY2F0aW9uU2VydmljZUd0azo6fkdlb2xvY2F0aW9uU2VydmkKIC8vIFRP
RE86IEFsc28gZ2V0IEdlb2NsdWVWZWxvY2l0eSBidXQgdGhlcmUgaXMgbm8gbWFzdGVyIGNsaWVu
dAogLy8gICAgICAgQVBJIGZvciB0aGF0LgogLy8KLWJvb2wgR2VvbG9jYXRpb25TZXJ2aWNlR3Rr
OjpzdGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyogb3B0aW9ucykKK2Jvb2wgR2VvbG9jYXRp
b25TZXJ2aWNlR3RrOjpzdGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyogb3B0aW9ucywgYm9v
bCkKIHsKICAgICBBU1NFUlQoIW1fZ2VvY2x1ZUNsaWVudCk7CiAKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3RrL0dlb2xvY2F0aW9uU2VydmljZUd0ay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3RrL0dlb2xvY2F0aW9uU2VydmljZUd0ay5oCShyZXZpc2lvbiA1NDIyMikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0dlb2xvY2F0aW9uU2VydmljZUd0ay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGlj
IEdlb2xvY2F0aW9uU2VydmljZSogY3JlYXRlKEdlb2xvY2F0aW9uU2VydmljZUNsaWVudCopOwog
ICAgICAgICB+R2VvbG9jYXRpb25TZXJ2aWNlR3RrKCk7CiAKLSAgICAgICAgdmlydHVhbCBib29s
IHN0YXJ0VXBkYXRpbmcoUG9zaXRpb25PcHRpb25zKik7CisgICAgICAgIHZpcnR1YWwgYm9vbCBz
dGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyosIGJvb2wgc3VzcGVuZCk7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoKTsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgc3VzcGVu
ZCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvR2VvbG9jYXRpb25TZXJ2aWNlTWFjLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvR2VvbG9jYXRpb25TZXJ2aWNlTWFj
LmgJKHJldmlzaW9uIDU0MjIyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvR2VvbG9jYXRpb25T
ZXJ2aWNlTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAg
IHN0YXRpYyBHZW9sb2NhdGlvblNlcnZpY2UqIGNyZWF0ZShHZW9sb2NhdGlvblNlcnZpY2VDbGll
bnQqKTsKICAgICB2aXJ0dWFsIH5HZW9sb2NhdGlvblNlcnZpY2VNYWMoKTsKICAgICAKLSAgICB2
aXJ0dWFsIGJvb2wgc3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqKTsKKyAgICB2aXJ0dWFs
IGJvb2wgc3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqLCBib29sIHN1c3BlbmQpOwogICAg
IHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzdXNwZW5k
KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9HZW9sb2NhdGlvblNlcnZpY2VNYWMubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvR2VvbG9jYXRpb25TZXJ2aWNlTWFj
Lm1tCShyZXZpc2lvbiA1NDIyMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0dlb2xvY2F0aW9u
U2VydmljZU1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBHZW9sb2NhdGlv
blNlcnZpY2VNYWM6On5HZW9sb2NhdGlvblNlcnZpCiAgICAgbV9sb2NhdGlvbk1hbmFnZXIuZ2V0
KCkuZGVsZWdhdGUgPSBuaWw7CiB9CiAKLWJvb2wgR2VvbG9jYXRpb25TZXJ2aWNlTWFjOjpzdGFy
dFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyogb3B0aW9ucykKK2Jvb2wgR2VvbG9jYXRpb25TZXJ2
aWNlTWFjOjpzdGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyogb3B0aW9ucywgYm9vbCkKIHsK
ICAgICAjZGVmaW5lIENMTG9jYXRpb25NYW5hZ2VyIGdldENMTG9jYXRpb25NYW5hZ2VyQ2xhc3Mo
KQogICAgIGlmICghbV9sb2NhdGlvbk1hbmFnZXIuZ2V0KCkpIHsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vbW9jay9HZW9sb2NhdGlvblNlcnZpY2VNb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL21vY2svR2VvbG9jYXRpb25TZXJ2aWNlTW9jay5jcHAJKHJldmlzaW9uIDU0
MjIyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0dlb2xvY2F0aW9uU2VydmljZU1vY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIHZvaWQgR2VvbG9jYXRpb25TZXJ2aWNl
TW9jazo6c2V0RXJyb3IoUGEKICAgICBtYWtlR2VvbG9jYXRpb25DYWxsYmFja0Zyb21BbGxJbnN0
YW5jZXMoKTsKIH0KIAotYm9vbCBHZW9sb2NhdGlvblNlcnZpY2VNb2NrOjpzdGFydFVwZGF0aW5n
KFBvc2l0aW9uT3B0aW9ucyopCitib29sIEdlb2xvY2F0aW9uU2VydmljZU1vY2s6OnN0YXJ0VXBk
YXRpbmcoUG9zaXRpb25PcHRpb25zKiwgYm9vbCkKIHsKICAgICBtX2lzQWN0aXZlID0gdHJ1ZTsK
ICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdCgwKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbW9j
ay9HZW9sb2NhdGlvblNlcnZpY2VNb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9tb2NrL0dlb2xvY2F0aW9uU2VydmljZU1vY2suaAkocmV2aXNpb24gNTQyMjIpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL21vY2svR2VvbG9jYXRpb25TZXJ2aWNlTW9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw3ICs0Niw3IEBAIGNsYXNzIEdlb2xvY2F0aW9uU2VydmljZU1vY2sgOiBwdWJsaWMg
R2UKICAgICBHZW9sb2NhdGlvblNlcnZpY2VNb2NrKEdlb2xvY2F0aW9uU2VydmljZUNsaWVudCop
OwogICAgIHZpcnR1YWwgfkdlb2xvY2F0aW9uU2VydmljZU1vY2soKTsKIAotICAgIHZpcnR1YWwg
Ym9vbCBzdGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyopOworICAgIHZpcnR1YWwgYm9vbCBz
dGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyosIGJvb2wgc3VzcGVuZCk7CiAgICAgdmlydHVh
bCB2b2lkIHN0b3BVcGRhdGluZygpOwogCiAgICAgc3RhdGljIHZvaWQgc2V0UG9zaXRpb24oUGFz
c1JlZlB0cjxHZW9wb3NpdGlvbj4gcG9zaXRpb24pOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49289</attachid>
            <date>2010-02-23 06:58:12 -0800</date>
            <delta_ts>2010-06-11 10:02:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34082-20100223145810.patch</filename>
            <type>text/plain</type>
            <size>14365</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTE0NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTAgQEAKKzIwMTAtMDItMDIgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IERvIG5vdCBzdGFydCB0aGUgR2VvbG9jYXRpb24gc2VydmljZSBpZiB0aGUgcGFnZSBpcyBzdXNw
ZW5kZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0
MDgyCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgYWRkcyBzdXNwZW5kIGFuZCByZXN1bWUgbWV0aG9k
cyB0byBQYWdlLiBXaGVuIGEgUGFnZSBpcyBzdXNwZW5kZWQsCisgICAgICAgIGFueSBHZW9sb2Nh
dGlvbiBvYmplY3RzIGNyZWF0ZWQgaW4gdGhhdCBQYWdlIGFyZSBjcmVhdGVkIGluIGEgc3VzcGVu
ZGVkIHN0YXRlLgorICAgICAgICBUaGUgR2VvbG9jYXRpb24gb2JqZWN0cyBjYW4gbGF0ZXIgYmUg
cmVzdW1lZC4KKyAgICAgICAgVGhpcyBhbGxvd3MgdGhlIGJyb3dzZXIgdG8gYXZvaWQgdGhlIEdl
b2xvY2F0aW9uIHNlcnZpY2UgYmVpbmcgc3RhcnRlZCB3aGVuLAorICAgICAgICBmb3IgZXhhbXBs
ZSwgdGhlIHBhZ2UgaXMgaW4gdGhlIGJhY2tncm91bmQuCisKKyAgICAgICAgQWxzbyBtYWtlcyBH
ZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lkOjp0aW1lckZpcmVkIHByaXZhdGUuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLgorCisgICAgICAgICogcGFnZS9HZW9sb2NhdGlvbi5jcHA6IE1vZGlmaWVk
LgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246OmNyZWF0ZSk6IE1vZGlmaWVkLiBBZGRl
ZCBzdXNwZW5kIHBhcmFtZXRlcgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb246Okdlb2xv
Y2F0aW9uKTogTW9kaWZpZWQuIEluaXRpYWxpemUgc3VzcGVuZGVkIHN0YXRlIHRvIGZhbHNlCisg
ICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvbjo6c3VzcGVuZCk6IE1vZGlmaWVkLiBTZXQgc3Vz
cGVuZGVkIHN0YXRlIHRvIHRydWUKKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uOjpyZXN1
bWUpOiBNb2RpZmllZC4gU2V0IHN1c3BlbmRlZCBzdGF0ZSB0byBmYWxzZQorICAgICAgICAoV2Vi
Q29yZTo6R2VvbG9jYXRpb246OnN0YXJ0VXBkYXRpbmcpOiBNb2RpZmllZC4gUGFzcyBzdXNwZW5k
ZWQgc3RhdGUgdG8gc2VydmljZQorICAgICAgICAqIHBhZ2UvR2VvbG9jYXRpb24uaDogTW9kaWZp
ZWQuCisgICAgICAgICogcGFnZS9OYXZpZ2F0b3IuY3BwOiBNb2RpZmllZC4KKyAgICAgICAgKFdl
YkNvcmU6Ok5hdmlnYXRvcjo6Z2VvbG9jYXRpb24pOiBNb2RpZmllZC4gUGFzcyBQYWdlJ3Mgc3Vz
cGVuZGVkIHN0YXRlIHRvIG5ldyBHZW9sb2NhdGlvbiBvYmplY3QKKyAgICAgICAgKiBwYWdlL1Bh
Z2UuY3BwOiBNb2RpZmllZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhZ2U6OlBhZ2UpOiBNb2RpZmll
ZC4gSW5pdGlhbGl6ZSBzdXNwZW5kZWQgc3RhdGUgdG8gZmFsc2UKKyAgICAgICAgKiBwYWdlL1Bh
Z2UuaDogTW9kaWZpZWQuCisgICAgICAgIChXZWJDb3JlOjpQYWdlOjppc1N1c3BlbmRlZCk6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c3VzcGVuZCk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6UGFnZTo6cmVzdW1lKTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vR2VvbG9j
YXRpb25TZXJ2aWNlLmg6IE1vZGlmaWVkLgorICAgICAgICAoV2ViQ29yZTo6R2VvbG9jYXRpb25T
ZXJ2aWNlOjpzdGFydFVwZGF0aW5nKTogTW9kaWZpZWQuIEFkZGVkIHN1c3BlbmQgcGFyYW1ldGVy
CisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9HZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lkLmNw
cDogTW9kaWZpZWQuCisgICAgICAgIChXZWJDb3JlOjpHZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lk
OjpzdGFydFVwZGF0aW5nKTogTW9kaWZpZWQuIEFkZGVkIHN1c3BlbmQgcGFyYW1ldGVyCisgICAg
ICAgICogcGxhdGZvcm0vYW5kcm9pZC9HZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lkLmg6IE1vZGlm
aWVkLgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9HZW9sb2NhdGlvblNlcnZpY2VHdGsuY3BwOiBN
b2RpZmllZC4KKyAgICAgICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZUd0azo6c3RhcnRV
cGRhdGluZyk6IE1vZGlmaWVkLiBBZGRlZCBzdXNwZW5kIHBhcmFtZXRlcgorICAgICAgICAqIHBs
YXRmb3JtL2d0ay9HZW9sb2NhdGlvblNlcnZpY2VHdGsuaDogTW9kaWZpZWQuCisgICAgICAgICog
cGxhdGZvcm0vbWFjL0dlb2xvY2F0aW9uU2VydmljZU1hYy5oOiBNb2RpZmllZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9tYWMvR2VvbG9jYXRpb25TZXJ2aWNlTWFjLm1tOiBNb2RpZmllZC4KKyAgICAg
ICAgKFdlYkNvcmU6Okdlb2xvY2F0aW9uU2VydmljZU1hYzo6c3RhcnRVcGRhdGluZyk6IE1vZGlm
aWVkLiBBZGRlZCBzdXNwZW5kIHBhcmFtZXRlcgorICAgICAgICAqIHBsYXRmb3JtL21vY2svR2Vv
bG9jYXRpb25TZXJ2aWNlTW9jay5jcHA6IE1vZGlmaWVkLgorICAgICAgICAoV2ViQ29yZTo6R2Vv
bG9jYXRpb25TZXJ2aWNlTW9jazo6c3RhcnRVcGRhdGluZyk6IE1vZGlmaWVkLiBBZGRlZCBzdXNw
ZW5kIHBhcmFtZXRlcgorICAgICAgICAqIHBsYXRmb3JtL21vY2svR2VvbG9jYXRpb25TZXJ2aWNl
TW9jay5oOiBNb2RpZmllZC4KKwogMjAxMC0wMi0yMyAgQmVuIE11cmRvY2ggIDxiZW5tQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3Jl
L3BhZ2UvR2VvbG9jYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9HZW9sb2Nh
dGlvbi5jcHAJKHJldmlzaW9uIDU1MTQ2KQorKysgV2ViQ29yZS9wYWdlL0dlb2xvY2F0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcxLDYgKzE3MSwxNCBAQCB2b2lkIEdlb2xvY2F0aW9uOjpX
YXRjaGVyczo6Z2V0Tm90aWZpZXJzCiAgICAgY29weVZhbHVlc1RvVmVjdG9yKG1faWRUb05vdGlm
aWVyTWFwLCBjb3B5KTsKIH0KIAorUGFzc1JlZlB0cjxHZW9sb2NhdGlvbj4gR2VvbG9jYXRpb246
OmNyZWF0ZShGcmFtZSogZnJhbWUsIEdlb2xvY2F0aW9uU2VydmljZTo6U3RhcnRTdGF0ZSBzdGFy
dFN0YXRlKQoreworICAgIFJlZlB0cjxHZW9sb2NhdGlvbj4gZ2VvbG9jYXRpb24gPSBhZG9wdFJl
ZihuZXcgR2VvbG9jYXRpb24oZnJhbWUpKTsKKyAgICBpZiAoc3RhcnRTdGF0ZSA9PSBHZW9sb2Nh
dGlvblNlcnZpY2U6OlN0YXJ0U3VzcGVuZGVkKQorICAgICAgICBnZW9sb2NhdGlvbi0+c3VzcGVu
ZCgpOworICAgIHJldHVybiBnZW9sb2NhdGlvbi5yZWxlYXNlKCk7Cit9CisKIEdlb2xvY2F0aW9u
OjpHZW9sb2NhdGlvbihGcmFtZSogZnJhbWUpCiAgICAgOiBtX2ZyYW1lKGZyYW1lKQogI2lmICFF
TkFCTEUoQ0xJRU5UX0JBU0VEX0dFT0xPQ0FUSU9OKQpAQCAtMTc4LDYgKzE4Niw3IEBAIEdlb2xv
Y2F0aW9uOjpHZW9sb2NhdGlvbihGcmFtZSogZnJhbWUpCiAjZW5kaWYKICAgICAsIG1fYWxsb3dH
ZW9sb2NhdGlvbihVbmtub3duKQogICAgICwgbV9zaG91bGRDbGVhckNhY2hlKGZhbHNlKQorICAg
ICwgbV9pc1N1c3BlbmRlZChmYWxzZSkKIHsKICAgICBpZiAoIW1fZnJhbWUpCiAgICAgICAgIHJl
dHVybjsKQEAgLTI5NSw2ICszMDQsNyBAQCB2b2lkIEdlb2xvY2F0aW9uOjpzdXNwZW5kKCkKICAg
ICBpZiAoaGFzTGlzdGVuZXJzKCkpCiAgICAgICAgIG1fc2VydmljZS0+c3VzcGVuZCgpOwogI2Vu
ZGlmCisgICAgbV9pc1N1c3BlbmRlZCA9IHRydWU7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb246OnJl
c3VtZSgpCkBAIC0zMDMsNiArMzEzLDcgQEAgdm9pZCBHZW9sb2NhdGlvbjo6cmVzdW1lKCkKICAg
ICBpZiAoaGFzTGlzdGVuZXJzKCkpCiAgICAgICAgIG1fc2VydmljZS0+cmVzdW1lKCk7CiAjZW5k
aWYKKyAgICBtX2lzU3VzcGVuZGVkID0gZmFsc2U7CiB9CiAKIHZvaWQgR2VvbG9jYXRpb246OnNl
dElzQWxsb3dlZChib29sIGFsbG93ZWQpCkBAIC01MjksNyArNTQwLDggQEAgYm9vbCBHZW9sb2Nh
dGlvbjo6c3RhcnRVcGRhdGluZyhHZW9Ob3RpZgogICAgIHBhZ2UtPmdlb2xvY2F0aW9uQ29udHJv
bGxlcigpLT5hZGRPYnNlcnZlcih0aGlzKTsKICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCi0gICAg
cmV0dXJuIG1fc2VydmljZS0+c3RhcnRVcGRhdGluZyhub3RpZmllci0+bV9vcHRpb25zLmdldCgp
KTsKKyAgICBHZW9sb2NhdGlvblNlcnZpY2U6OlN0YXJ0U3RhdGUgc3RhcnRTdGF0ZSA9IG1faXNT
dXNwZW5kZWQgPyBHZW9sb2NhdGlvblNlcnZpY2U6OlN0YXJ0U3VzcGVuZGVkIDogR2VvbG9jYXRp
b25TZXJ2aWNlOjpTdGFydFJ1bm5pbmc7CisgICAgcmV0dXJuIG1fc2VydmljZS0+c3RhcnRVcGRh
dGluZyhub3RpZmllci0+bV9vcHRpb25zLmdldCgpLCBzdGFydFN0YXRlKTsKICNlbmRpZgogfQog
CkluZGV4OiBXZWJDb3JlL3BhZ2UvR2VvbG9jYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BhZ2UvR2VvbG9jYXRpb24uaAkocmV2aXNpb24gNTUxNDYpCisrKyBXZWJDb3JlL3BhZ2UvR2Vv
bG9jYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBjbGFzcyBHZW9sb2Nh
dGlvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEdlCiAjZW5kaWYKIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxHZW9sb2NhdGlvbj4gY3JlYXRlKEZyYW1lKiBmcmFtZSkgeyByZXR1cm4g
YWRvcHRSZWYobmV3IEdlb2xvY2F0aW9uKGZyYW1lKSk7IH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxHZW9sb2NhdGlvbj4gY3JlYXRlKEZyYW1lKiwgR2VvbG9jYXRpb25TZXJ2aWNlOjpTdGFydFN0
YXRlKTsKIAogICAgIHZpcnR1YWwgfkdlb2xvY2F0aW9uKCk7CiAKQEAgLTE3NSw2ICsxNzUsOCBA
QCBwcml2YXRlOgogICAgICAgICBObwogICAgIH0gbV9hbGxvd0dlb2xvY2F0aW9uOwogICAgIGJv
b2wgbV9zaG91bGRDbGVhckNhY2hlOworCisgICAgYm9vbCBtX2lzU3VzcGVuZGVkOwogfTsKICAg
ICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGFnZS9OYXZpZ2F0b3Iu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCShyZXZpc2lvbiA1
NTE0NikKKysrIFdlYkNvcmUvcGFnZS9OYXZpZ2F0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTEsOCArMTUxLDEwIEBAIGJvb2wgTmF2aWdhdG9yOjpqYXZhRW5hYmxlZCgpIGNvbnN0CiAKIEdl
b2xvY2F0aW9uKiBOYXZpZ2F0b3I6Omdlb2xvY2F0aW9uKCkgY29uc3QKIHsKLSAgICBpZiAoIW1f
Z2VvbG9jYXRpb24pCi0gICAgICAgIG1fZ2VvbG9jYXRpb24gPSBHZW9sb2NhdGlvbjo6Y3JlYXRl
KG1fZnJhbWUpOworICAgIGlmICghbV9nZW9sb2NhdGlvbikgeworICAgICAgICBHZW9sb2NhdGlv
blNlcnZpY2U6OlN0YXJ0U3RhdGUgc3RhcnRTdGF0ZSA9IG1fZnJhbWUgJiYgbV9mcmFtZS0+cGFn
ZSgpLT5pc1N1c3BlbmRlZCgpID8gR2VvbG9jYXRpb25TZXJ2aWNlOjpTdGFydFN1c3BlbmRlZCA6
IEdlb2xvY2F0aW9uU2VydmljZTo6U3RhcnRSdW5uaW5nOworICAgICAgICBtX2dlb2xvY2F0aW9u
ID0gR2VvbG9jYXRpb246OmNyZWF0ZShtX2ZyYW1lLCBzdGFydFN0YXRlKTsKKyAgICB9CiAgICAg
cmV0dXJuIG1fZ2VvbG9jYXRpb24uZ2V0KCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDU1MTQ2
KQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYsNiArMTQ2
LDcgQEAgUGFnZTo6UGFnZShDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVudCwgQwogICAgICwgbV9j
dXN0b21IVE1MVG9rZW5pemVyVGltZURlbGF5KC0xKQogICAgICwgbV9jdXN0b21IVE1MVG9rZW5p
emVyQ2h1bmtTaXplKC0xKQogICAgICwgbV9jYW5TdGFydE1lZGlhKHRydWUpCisgICAgLCBtX2lz
U3VzcGVuZGVkKGZhbHNlKQogewogI2lmICFFTkFCTEUoQ09OVEVYVF9NRU5VUykKICAgICBVTlVT
RURfUEFSQU0oY29udGV4dE1lbnVDbGllbnQpOwpJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZpc2lvbiA1NTE0NikKKysrIFdl
YkNvcmUvcGFnZS9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0Miw2ICsyNDIsMTAgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgICAgIEluc3BlY3Rv
clRpbWVsaW5lQWdlbnQqIGluc3BlY3RvclRpbWVsaW5lQWdlbnQoKSBjb25zdDsKICNlbmRpZgor
CisgICAgICAgIGJvb2wgaXNTdXNwZW5kZWQoKSB7IHJldHVybiBtX2lzU3VzcGVuZGVkOyB9Cisg
ICAgICAgIHZvaWQgc3VzcGVuZCgpIHsgbV9pc1N1c3BlbmRlZCA9IHRydWU7IH0KKyAgICAgICAg
dm9pZCByZXN1bWUoKSB7IG1faXNTdXNwZW5kZWQgPSBmYWxzZTsgfQogICAgIHByaXZhdGU6CiAg
ICAgICAgIHZvaWQgaW5pdEdyb3VwKCk7CiAKQEAgLTMzMSw2ICszMzUsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAjaWYgRU5BQkxFKE5PVElGSUNBVElPTlMpCiAgICAgICAgIE5vdGlmaWNhdGlv
blByZXNlbnRlciogbV9ub3RpZmljYXRpb25QcmVzZW50ZXI7CiAjZW5kaWYKKyAgICAgICAgYm9v
bCBtX2lzU3VzcGVuZGVkOwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vR2VvbG9jYXRpb25TZXJ2aWNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9HZW9sb2NhdGlvblNlcnZpY2UuaAkocmV2aXNpb24gNTUxNDYpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL0dlb2xvY2F0aW9uU2VydmljZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw3ICs0NywxMyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEdlb2xvY2F0aW9uU2VydmljZSogY3Jl
YXRlKEdlb2xvY2F0aW9uU2VydmljZUNsaWVudCopOwogICAgIHZpcnR1YWwgfkdlb2xvY2F0aW9u
U2VydmljZSgpIHsgfQogCi0gICAgdmlydHVhbCBib29sIHN0YXJ0VXBkYXRpbmcoUG9zaXRpb25P
cHRpb25zKikgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAvLyBEZXNjcmliZXMgd2hldGhlciB0aGUg
R2VvbG9jYXRpb25TZXJ2aWNlIHNob3VsZCBiZSBzdGFydGVkIGluIGEgc3VzcGVuZGVkCisgICAg
Ly8gc3RhdGUuCisgICAgZW51bSBTdGFydFN0YXRlIHsKKyAgICAgICAgU3RhcnRTdXNwZW5kZWQs
CisgICAgICAgIFN0YXJ0UnVubmluZworICAgIH07CisgICAgdmlydHVhbCBib29sIHN0YXJ0VXBk
YXRpbmcoUG9zaXRpb25PcHRpb25zKiwgU3RhcnRTdGF0ZSkgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc3Vz
cGVuZCgpIHsgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0dlb2xvY2F0aW9uU2Vy
dmljZUFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9H
ZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lkLmNwcAkocmV2aXNpb24gNTUxNDYpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2FuZHJvaWQvR2VvbG9jYXRpb25TZXJ2aWNlQW5kcm9pZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTYxLDcgKzYxLDcgQEAgR2VvbG9jYXRpb25TZXJ2aWNlQW5kcm9pZDo6R2VvbG9j
YXRpb25TZQogewogfQogCi1ib29sIEdlb2xvY2F0aW9uU2VydmljZUFuZHJvaWQ6OnN0YXJ0VXBk
YXRpbmcoUG9zaXRpb25PcHRpb25zKiBvcHRpb25zKQorYm9vbCBHZW9sb2NhdGlvblNlcnZpY2VB
bmRyb2lkOjpzdGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyogb3B0aW9ucywgU3RhcnRTdGF0
ZSBzdGFydFN0YXRlKQogewogICAgIC8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCBldmVyeSB0aW1l
IGEgbmV3IHdhdGNoIG9yIG9uZS1zaG90IHBvc2l0aW9uIHJlcXVlc3QKICAgICAvLyBpcyBzdGFy
dGVkLiBJZiB3ZSBhbHJlYWR5IGhhdmUgYSBwb3NpdGlvbiBvciBhbiBlcnJvciwgY2FsbCBiYWNr
CkBAIC04Myw4ICs4MywxMyBAQCBib29sIEdlb2xvY2F0aW9uU2VydmljZUFuZHJvaWQ6OnN0YXJ0
VXBkCiAgICAgaWYgKG9wdGlvbnMtPmVuYWJsZUhpZ2hBY2N1cmFjeSgpKQogICAgICAgICBtX2ph
dmFCcmlkZ2UtPnNldEVuYWJsZUdwcyh0cnVlKTsKIAotICAgIGlmICghaGF2ZUphdmFCcmlkZ2Up
Ci0gICAgICAgIG1famF2YUJyaWRnZS0+c3RhcnQoKTsKKyAgICAvLyBXZSBuZWVkIG9ubHkgc3Rh
cnQgdGhlIHNlcnZpY2Ugd2hlbiBpdCdzIGZpcnN0IGNyZWF0ZWQuCisgICAgaWYgKCFoYXZlSmF2
YUJyaWRnZSkgeworICAgICAgICAvLyBJZiB0aGUgYnJvd3NlciBpcyBwYXVzZWQsIGRvbid0IHN0
YXJ0IHRoZSBzZXJ2aWNlLiBJdCB3aWxsIGJlIHN0YXJ0ZWQKKyAgICAgICAgLy8gd2hlbiB3ZSBn
ZXQgdGhlIGNhbGwgdG8gcmVzdW1lLgorICAgICAgICBpZiAoc3RhcnRTdGF0ZSA9PSBHZW9sb2Nh
dGlvblNlcnZpY2U6OlN0YXJ0UnVubmluZykKKyAgICAgICAgICAgIG1famF2YUJyaWRnZS0+c3Rh
cnQoKTsKKyAgICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTkyLDcgKzk3LDcgQEAgYm9v
bCBHZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lkOjpzdGFydFVwZAogdm9pZCBHZW9sb2NhdGlvblNl
cnZpY2VBbmRyb2lkOjpzdG9wVXBkYXRpbmcoKQogewogICAgIC8vIENhbGxlZCB3aGVuIHRoZSBH
ZW9sb2NhdGlvbiBvYmplY3QgaGFzIG5vIHdhdGNoZXMgb3Igb25lIHNob3RzIGluCi0gICAgLy8g
cHJvZ3Jlc3MuCisgICAgLy8gcHJvZ3Jlc3MuIFRoaXMgbWF5IGJlIGNhbGxlZCByZXBlYXRlZGx5
LgogICAgIG1famF2YUJyaWRnZS5jbGVhcigpOwogICAgIC8vIFJlc2V0IGxhc3QgcG9zaXRpb24g
YW5kIGVycm9yIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIGFsd2F5cyB0cnkgdG8gZ2V0IGEKICAgICAv
LyBuZXcgcG9zaXRpb24gZnJvbSB0aGUgc3lzdGVtIHNlcnZpY2Ugd2hlbiBhIHJlcXVlc3QgaXMg
Zmlyc3QgbWFkZS4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9HZW9sb2NhdGlvblNl
cnZpY2VBbmRyb2lkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL0dl
b2xvY2F0aW9uU2VydmljZUFuZHJvaWQuaAkocmV2aXNpb24gNTUxNDYpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2FuZHJvaWQvR2VvbG9jYXRpb25TZXJ2aWNlQW5kcm9pZC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NSw3ICs0NSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgfkdlb2xvY2F0aW9uU2Vy
dmljZUFuZHJvaWQoKSB7IH07CiAKLSAgICB2aXJ0dWFsIGJvb2wgc3RhcnRVcGRhdGluZyhQb3Np
dGlvbk9wdGlvbnMqKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3RhcnRVcGRhdGluZyhQb3NpdGlvbk9w
dGlvbnMqLCBTdGFydFN0YXRlKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKCk7CiAK
ICAgICB2aXJ0dWFsIEdlb3Bvc2l0aW9uKiBsYXN0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X2xhc3RQb3NpdGlvbi5nZXQoKTsgfQpAQCAtNTcsNyArNTcsNiBAQCBwdWJsaWM6CiAgICAgLy8g
QW5kcm9pZC1zcGVjaWZpYwogICAgIHZvaWQgbmV3UG9zaXRpb25BdmFpbGFibGUoUGFzc1JlZlB0
cjxHZW9wb3NpdGlvbj4pOwogICAgIHZvaWQgbmV3RXJyb3JBdmFpbGFibGUoUGFzc1JlZlB0cjxQ
b3NpdGlvbkVycm9yPik7Ci0gICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEdlb2xvY2F0aW9uU2Vy
dmljZUFuZHJvaWQ+KiB0aW1lcik7CiAKIHByaXZhdGU6CiAgICAgR2VvbG9jYXRpb25TZXJ2aWNl
QW5kcm9pZChHZW9sb2NhdGlvblNlcnZpY2VDbGllbnQqKTsKQEAgLTY2LDYgKzY1LDggQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgYm9vbCBpc1Bvc2l0aW9uTW9yZUFjY3VyYXRlKEdlb3Bvc2l0aW9u
KiBwb3NpdGlvbjEsIEdlb3Bvc2l0aW9uKiBwb3NpdGlvbjIpOwogICAgIHN0YXRpYyBib29sIGlz
UG9zaXRpb25Nb3JlVGltZWx5KEdlb3Bvc2l0aW9uKiBwb3NpdGlvbjEsIEdlb3Bvc2l0aW9uKiBw
b3NpdGlvbjIpOwogCisgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPEdlb2xvY2F0aW9uU2Vydmlj
ZUFuZHJvaWQ+KiB0aW1lcik7CisKICAgICBUaW1lcjxHZW9sb2NhdGlvblNlcnZpY2VBbmRyb2lk
PiBtX3RpbWVyOwogICAgIFJlZlB0cjxHZW9wb3NpdGlvbj4gbV9sYXN0UG9zaXRpb247CiAgICAg
UmVmUHRyPFBvc2l0aW9uRXJyb3I+IG1fbGFzdEVycm9yOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvR2VvbG9jYXRpb25TZXJ2aWNlR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2d0ay9HZW9sb2NhdGlvblNlcnZpY2VHdGsuY3BwCShyZXZpc2lvbiA1NTE0NikKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3RrL0dlb2xvY2F0aW9uU2VydmljZUd0ay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTczLDcgKzczLDcgQEAgR2VvbG9jYXRpb25TZXJ2aWNlR3RrOjp+R2VvbG9jYXRp
b25TZXJ2aQogLy8gVE9ETzogQWxzbyBnZXQgR2VvY2x1ZVZlbG9jaXR5IGJ1dCB0aGVyZSBpcyBu
byBtYXN0ZXIgY2xpZW50CiAvLyAgICAgICBBUEkgZm9yIHRoYXQuCiAvLwotYm9vbCBHZW9sb2Nh
dGlvblNlcnZpY2VHdGs6OnN0YXJ0VXBkYXRpbmcoUG9zaXRpb25PcHRpb25zKiBvcHRpb25zKQor
Ym9vbCBHZW9sb2NhdGlvblNlcnZpY2VHdGs6OnN0YXJ0VXBkYXRpbmcoUG9zaXRpb25PcHRpb25z
KiBvcHRpb25zLCBTdGFydFN0YXRlKQogewogICAgIEFTU0VSVCghbV9nZW9jbHVlQ2xpZW50KTsK
IApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR2VvbG9jYXRpb25TZXJ2aWNlR3RrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR2VvbG9jYXRpb25TZXJ2aWNlR3RrLmgJ
KHJldmlzaW9uIDU1MTQ2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ndGsvR2VvbG9jYXRpb25TZXJ2
aWNlR3RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICBzdGF0aWMgR2VvbG9jYXRpb25TZXJ2aWNlKiBjcmVhdGUoR2VvbG9jYXRp
b25TZXJ2aWNlQ2xpZW50Kik7CiAgICAgICAgIH5HZW9sb2NhdGlvblNlcnZpY2VHdGsoKTsKIAot
ICAgICAgICB2aXJ0dWFsIGJvb2wgc3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqKTsKKyAg
ICAgICAgdmlydHVhbCBib29sIHN0YXJ0VXBkYXRpbmcoUG9zaXRpb25PcHRpb25zKiwgU3RhcnRT
dGF0ZSk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzdG9wVXBkYXRpbmcoKTsKIAogICAgICAgICB2
aXJ0dWFsIHZvaWQgc3VzcGVuZCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvR2VvbG9j
YXRpb25TZXJ2aWNlTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tYWMvR2Vv
bG9jYXRpb25TZXJ2aWNlTWFjLmgJKHJldmlzaW9uIDU1MTQ2KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvR2VvbG9jYXRpb25TZXJ2aWNlTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBHZW9sb2NhdGlvblNlcnZpY2UqIGNyZWF0ZShHZW9s
b2NhdGlvblNlcnZpY2VDbGllbnQqKTsKICAgICB2aXJ0dWFsIH5HZW9sb2NhdGlvblNlcnZpY2VN
YWMoKTsKICAgICAKLSAgICB2aXJ0dWFsIGJvb2wgc3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlv
bnMqKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqLCBT
dGFydFN0YXRlKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKCk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgc3VzcGVuZCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvR2VvbG9jYXRp
b25TZXJ2aWNlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbWFjL0dlb2xv
Y2F0aW9uU2VydmljZU1hYy5tbQkocmV2aXNpb24gNTUxNDYpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L21hYy9HZW9sb2NhdGlvblNlcnZpY2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0
LDcgQEAgR2VvbG9jYXRpb25TZXJ2aWNlTWFjOjp+R2VvbG9jYXRpb25TZXJ2aQogICAgIG1fbG9j
YXRpb25NYW5hZ2VyLmdldCgpLmRlbGVnYXRlID0gbmlsOwogfQogCi1ib29sIEdlb2xvY2F0aW9u
U2VydmljZU1hYzo6c3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqIG9wdGlvbnMpCitib29s
IEdlb2xvY2F0aW9uU2VydmljZU1hYzo6c3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqIG9w
dGlvbnMsIFN0YXJ0U3RhdGUpCiB7CiAgICAgI2RlZmluZSBDTExvY2F0aW9uTWFuYWdlciBnZXRD
TExvY2F0aW9uTWFuYWdlckNsYXNzKCkKICAgICBpZiAoIW1fbG9jYXRpb25NYW5hZ2VyLmdldCgp
KSB7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21vY2svR2VvbG9jYXRpb25TZXJ2aWNlTW9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0dlb2xvY2F0aW9uU2Vydmlj
ZU1vY2suY3BwCShyZXZpc2lvbiA1NTE0NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vbW9jay9HZW9s
b2NhdGlvblNlcnZpY2VNb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCB2
b2lkIEdlb2xvY2F0aW9uU2VydmljZU1vY2s6OnNldEVycm9yKFBhCiAgICAgbWFrZUdlb2xvY2F0
aW9uQ2FsbGJhY2tGcm9tQWxsSW5zdGFuY2VzKCk7CiB9CiAKLWJvb2wgR2VvbG9jYXRpb25TZXJ2
aWNlTW9jazo6c3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMqKQorYm9vbCBHZW9sb2NhdGlv
blNlcnZpY2VNb2NrOjpzdGFydFVwZGF0aW5nKFBvc2l0aW9uT3B0aW9ucyosIFN0YXJ0U3RhdGUp
CiB7CiAgICAgbV9pc0FjdGl2ZSA9IHRydWU7CiAgICAgbV90aW1lci5zdGFydE9uZVNob3QoMCk7
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL21vY2svR2VvbG9jYXRpb25TZXJ2aWNlTW9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vbW9jay9HZW9sb2NhdGlvblNlcnZpY2VNb2Nr
LmgJKHJldmlzaW9uIDU1MTQ2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL0dlb2xvY2F0aW9u
U2VydmljZU1vY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBHZW9s
b2NhdGlvblNlcnZpY2VNb2NrIDogcHVibGljIEdlCiAgICAgR2VvbG9jYXRpb25TZXJ2aWNlTW9j
ayhHZW9sb2NhdGlvblNlcnZpY2VDbGllbnQqKTsKICAgICB2aXJ0dWFsIH5HZW9sb2NhdGlvblNl
cnZpY2VNb2NrKCk7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc3RhcnRVcGRhdGluZyhQb3NpdGlvbk9w
dGlvbnMqKTsKKyAgICB2aXJ0dWFsIGJvb2wgc3RhcnRVcGRhdGluZyhQb3NpdGlvbk9wdGlvbnMq
LCBTdGFydFN0YXRlKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcFVwZGF0aW5nKCk7CiAKICAgICBz
dGF0aWMgdm9pZCBzZXRQb3NpdGlvbihQYXNzUmVmUHRyPEdlb3Bvc2l0aW9uPiBwb3NpdGlvbik7
Cg==
</data>
<flag name="review"
          id="32117"
          type_id="1"
          status="-"
          setter="jorlow"
    />
          </attachment>
      

    </bug>

</bugzilla>