<?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>96522</bug_id>
          
          <creation_ts>2012-09-12 08:24:17 -0700</creation_ts>
          <short_desc>[V8] Give isolated shells a lifecycle like that of main shells</short_desc>
          <delta_ts>2012-11-26 00:11:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</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>
          <dependson>96637</dependson>
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Dan Carney">dcarney</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>mkwst</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>718380</commentid>
    <comment_count>0</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-12 08:24:17 -0700</bug_when>
    <thetext>Give isolated shells a lifecycle like that of main shells</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718384</commentid>
    <comment_count>1</comment_count>
      <attachid>163637</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-12 08:27:51 -0700</bug_when>
    <thetext>Created attachment 163637
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718397</commentid>
    <comment_count>2</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-12 08:35:20 -0700</bug_when>
    <thetext>I don&apos;t fully trust this, as the context global object stores a raw pointer to the isolated shell, so a callback coming back after the death of the shell, which happens on ScriptController deletion would segfault.  Is it possible for such a callback to happen?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718546</commentid>
    <comment_count>3</comment_count>
      <attachid>163637</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-12 11:41:41 -0700</bug_when>
    <thetext>Comment on attachment 163637
Patch

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

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:115
&gt; +    for (IsolatedWorldMap::iterator iter = m_isolatedWorlds.begin();
&gt; +         iter != m_isolatedWorlds.end(); ++iter) {
&gt; +        iter-&gt;second-&gt;destroyGlobal();
&gt; +    }

Typically, we&apos;d put the loop condition on one line and drop the { }

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:337
&gt;      OwnPtr&lt;V8DOMWindowShell&gt; isolatedWorldShell = V8DOMWindowShell::create(m_frame, world);
&gt; -    m_isolatedWorlds.set(world-&gt;worldId(), isolatedWorldShell.get());
&gt; +    m_isolatedWorlds.set(world-&gt;worldId(), adoptPtr(isolatedWorldShell.get()));
&gt;      return isolatedWorldShell.leakPtr();

This isn&apos;t quite the right idiom.  What we typically do in these cases is to introduce a local variable to hold a V8DOMWidowShell* like this:

V8DOMWindowShell* result = isolatedWorldShell.get();
m_isolatedWorlds.set(world-&gt;worldId(), isolatedWorldShell.release());
return result;

The reason we do this is because we use calls to leakPtr as a signal that we might have a memory leak.  Keeping the call to leakPtr here will make this show up on our periodic leakPtr audits.

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:360
&gt;      OwnPtr&lt;V8DOMWindowShell&gt; isolatedWorldShell = V8DOMWindowShell::create(m_frame, world);
&gt; -    m_isolatedWorlds.set(world-&gt;worldId(), isolatedWorldShell.get());
&gt; +    m_isolatedWorlds.set(world-&gt;worldId(), adoptPtr(isolatedWorldShell.get()));
&gt;      return isolatedWorldShell.leakPtr();
&gt;  }

Same here.

&gt; Source/WebCore/bindings/v8/ScriptController.cpp:403
&gt; +            V8DOMWindowShell* ownedShell = it-&gt;second.leakPtr();
&gt; +            ASSERT(ownedShell == isolatedWorldShell);
&gt; +            m_isolatedWorlds.remove(it);
&gt; +            ownedShell-&gt;destroyIsolatedShell();

Again, we should avoid calling leakPtr.  The point of OwnPtr is for the C++ type system to help us call new and delete exactly the right number of times.  Calling leakPtr is fighting the type system rather than working with it.

How about:

OwnPtr&lt;V8DOMWindowShell&gt; windowShell = it-&gt;second.release();
m_isolatedWorlds.remove(it);
windowShell-&gt;destroyIsolatedShell();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718551</commentid>
    <comment_count>4</comment_count>
      <attachid>163637</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-12 11:45:45 -0700</bug_when>
    <thetext>Comment on attachment 163637
Patch

I don&apos;t understand how you avoided removing this line in V8DOMWindowShell:

    delete static_cast&lt;V8DOMWindowShell*&gt;(parameter);

It seems like we&apos;re still managing the lifetime of the V8DOMWindowShell via the V8 GC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718568</commentid>
    <comment_count>5</comment_count>
      <attachid>163637</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-12 12:04:33 -0700</bug_when>
    <thetext>Comment on attachment 163637
Patch

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

&gt;&gt; Source/WebCore/bindings/v8/ScriptController.cpp:115
&gt;&gt; +    }
&gt; 
&gt; Typically, we&apos;d put the loop condition on one line and drop the { }

ok

&gt;&gt; Source/WebCore/bindings/v8/ScriptController.cpp:337
&gt;&gt;      return isolatedWorldShell.leakPtr();
&gt; 
&gt; This isn&apos;t quite the right idiom.  What we typically do in these cases is to introduce a local variable to hold a V8DOMWidowShell* like this:
&gt; 
&gt; V8DOMWindowShell* result = isolatedWorldShell.get();
&gt; m_isolatedWorlds.set(world-&gt;worldId(), isolatedWorldShell.release());
&gt; return result;
&gt; 
&gt; The reason we do this is because we use calls to leakPtr as a signal that we might have a memory leak.  Keeping the call to leakPtr here will make this show up on our periodic leakPtr audits.

That makes sense.  Okay, I wasn&apos;t sure what the typical usage was, and I was trying to avoid a local variable for something I already had.

&gt;&gt; Source/WebCore/bindings/v8/ScriptController.cpp:360
&gt;&gt;  }
&gt; 
&gt; Same here.

yep.

&gt;&gt; Source/WebCore/bindings/v8/ScriptController.cpp:403
&gt;&gt; +            ownedShell-&gt;destroyIsolatedShell();
&gt; 
&gt; Again, we should avoid calling leakPtr.  The point of OwnPtr is for the C++ type system to help us call new and delete exactly the right number of times.  Calling leakPtr is fighting the type system rather than working with it.
&gt; 
&gt; How about:
&gt; 
&gt; OwnPtr&lt;V8DOMWindowShell&gt; windowShell = it-&gt;second.release();
&gt; m_isolatedWorlds.remove(it);
&gt; windowShell-&gt;destroyIsolatedShell();

Actually, here, we need to specifically take ownership and leak the pointer as this shell must remain weak.  A strong deletion here is a bad thing because of callbacks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718572</commentid>
    <comment_count>6</comment_count>
      <attachid>163637</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-12 12:08:21 -0700</bug_when>
    <thetext>Comment on attachment 163637
Patch

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

&gt;&gt;&gt; Source/WebCore/bindings/v8/ScriptController.cpp:403
&gt;&gt;&gt; +            ownedShell-&gt;destroyIsolatedShell();
&gt;&gt; 
&gt;&gt; Again, we should avoid calling leakPtr.  The point of OwnPtr is for the C++ type system to help us call new and delete exactly the right number of times.  Calling leakPtr is fighting the type system rather than working with it.
&gt;&gt; 
&gt;&gt; How about:
&gt;&gt; 
&gt;&gt; OwnPtr&lt;V8DOMWindowShell&gt; windowShell = it-&gt;second.release();
&gt;&gt; m_isolatedWorlds.remove(it);
&gt;&gt; windowShell-&gt;destroyIsolatedShell();
&gt; 
&gt; Actually, here, we need to specifically take ownership and leak the pointer as this shell must remain weak.  A strong deletion here is a bad thing because of callbacks.

Why you say callbacks, what do you mean?  If we&apos;re trying to make the lifetime of the isolated window shells the same as the main window shells, that means they need to live as long as the frame lives and not have their lifetime determined by the garbage collector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718578</commentid>
    <comment_count>7</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-12 12:13:51 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 163637 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=163637&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/bindings/v8/ScriptController.cpp:403
&gt; &gt;&gt;&gt; +            ownedShell-&gt;destroyIsolatedShell();
&gt; &gt;&gt; 
&gt; &gt;&gt; Again, we should avoid calling leakPtr.  The point of OwnPtr is for the C++ type system to help us call new and delete exactly the right number of times.  Calling leakPtr is fighting the type system rather than working with it.
&gt; &gt;&gt; 
&gt; &gt;&gt; How about:
&gt; &gt;&gt; 
&gt; &gt;&gt; OwnPtr&lt;V8DOMWindowShell&gt; windowShell = it-&gt;second.release();
&gt; &gt;&gt; m_isolatedWorlds.remove(it);
&gt; &gt;&gt; windowShell-&gt;destroyIsolatedShell();
&gt; &gt; 
&gt; &gt; Actually, here, we need to specifically take ownership and leak the pointer as this shell must remain weak.  A strong deletion here is a bad thing because of callbacks.
&gt; 
&gt; Why you say callbacks, what do you mean?  If we&apos;re trying to make the lifetime of the isolated window shells the same as the main window shells, that means they need to live as long as the frame lives and not have their lifetime determined by the garbage collector.

Just for the single use shells.  The ones that enter evaluateInIsolatedWorld with an uninitializedWorldId or in the test environment with a worldId of 0.  I&apos;m not exactly sure how to get one of them to execute outside of the test environment, but I know that PageGroup keeps a bunch of references to them.  I &apos;m happy to remove all that code and leave the references alive until ScriptController deletion.  It&apos;s just that those particular shell can&apos;t be accessed except from callbacks at that point, so we&apos;re keeping a lot of stuff alive unnecessarily.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718591</commentid>
    <comment_count>8</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-12 12:20:52 -0700</bug_when>
    <thetext>
&gt; Why you say callbacks, what do you mean?  

Sorry, asynchronous javascript callbacks.   The shell needs to stay alive long enough for them not to segfault as a raw pointer to the shell exists in the context&apos;s global object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718600</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-12 12:25:20 -0700</bug_when>
    <thetext>&gt; Sorry, asynchronous javascript callbacks.   The shell needs to stay alive long enough for them not to segfault as a raw pointer to the shell exists in the context&apos;s global object.

Can we clear out their pointer to the WindowShell?  In the main world, we detach the v8::Context from the WindowShell and it continues to function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718607</commentid>
    <comment_count>10</comment_count>
      <attachid>163637</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-12 12:27:06 -0700</bug_when>
    <thetext>Comment on attachment 163637
Patch

By the way, I think we should land this patch and then iterate on this temporary world issue.  If they&apos;re only used in testing, then it is not super important that we&apos;ll keep them alive longer.

It&apos;s important that we don&apos;t have a different code path for testing than in production.  We want our testing to be as close to production as possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718619</commentid>
    <comment_count>11</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-12 12:45:27 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; Sorry, asynchronous javascript callbacks.   The shell needs to stay alive long enough for them not to segfault as a raw pointer to the shell exists in the context&apos;s global object.
&gt; 
&gt; Can we clear out their pointer to the WindowShell?  In the main world, we detach the v8::Context from the WindowShell and it continues to function.

It&apos;s a bit problematic. If it were cleared, the call to V8DOMWindowShell::entered() return null and which indicated that we&apos;re in the mainworld, which is not where the callbacks are suppose to execute.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718620</commentid>
    <comment_count>12</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-12 12:47:52 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 163637 [details])
&gt; By the way, I think we should land this patch and then iterate on this temporary world issue.  If they&apos;re only used in testing, then it is not super important that we&apos;ll keep them alive longer.
&gt; 
&gt; It&apos;s important that we don&apos;t have a different code path for testing than in production.  We want our testing to be as close to production as possible.

There&apos;s definitely used.  But I think you need a particular extension property or maybe a platform app to hit the code path.  I&apos;ve tried a number of variants, but haven&apos;t found one that works.  This code path trigger a canary crash a few weeks ago when I tried to remove IsolatedWorld, so it&apos;s  definitely used.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718647</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-12 13:09:41 -0700</bug_when>
    <thetext>&gt; It&apos;s a bit problematic. If it were cleared, the call to V8DOMWindowShell::entered() return null and which indicated that we&apos;re in the mainworld, which is not where the callbacks are suppose to execute.

Yeah, we probably need to change that design as well.

Ok, let&apos;s keep this for now.  It shouldn&apos;t block the main thing you&apos;re trying to accomplish.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719372</commentid>
    <comment_count>14</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-13 05:34:49 -0700</bug_when>
    <thetext>I was too worried about the raw pointer in the context global object, so I&apos;ve refactored it out in another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720623</commentid>
    <comment_count>15</comment_count>
      <attachid>164116</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-14 05:30:00 -0700</bug_when>
    <thetext>Created attachment 164116
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720675</commentid>
    <comment_count>16</comment_count>
      <attachid>164116</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-14 06:28:24 -0700</bug_when>
    <thetext>Comment on attachment 164116
Patch

Rejecting attachment 164116 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
1 FAILED at 246.
Hunk #2 succeeded at 264 (offset 1 line).
1 out of 3 hunks FAILED -- saving rejects to file Source/WebCore/bindings/v8/V8DOMWindowShell.cpp.rej
patching file Source/WebCore/bindings/v8/V8DOMWindowShell.h
Hunk #1 FAILED at 74.
Hunk #2 FAILED at 104.
2 out of 2 hunks FAILED -- saving rejects to file Source/WebCore/bindings/v8/V8DOMWindowShell.h.rej

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue

Full output: http://queues.webkit.org/results/13839932</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720676</commentid>
    <comment_count>17</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-09-14 06:29:17 -0700</bug_when>
    <thetext>Looks like you need to rebase it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720681</commentid>
    <comment_count>18</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-09-14 06:31:44 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Looks like you need to rebase it.

No, it got applied just after a previous patch got reverted.  I&apos;ll have to resubmit this once that patch goes through again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774535</commentid>
    <comment_count>19</comment_count>
      <attachid>175804</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-11-23 07:13:21 -0800</bug_when>
    <thetext>Created attachment 175804
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774541</commentid>
    <comment_count>20</comment_count>
      <attachid>175804</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-11-23 07:17:23 -0800</bug_when>
    <thetext>Comment on attachment 175804
Patch

LGTM. abarth will want to look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775206</commentid>
    <comment_count>21</comment_count>
      <attachid>175804</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-26 00:11:22 -0800</bug_when>
    <thetext>Comment on attachment 175804
Patch

Clearing flags on attachment: 175804

Committed r135687: &lt;http://trac.webkit.org/changeset/135687&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775207</commentid>
    <comment_count>22</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-26 00:11:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163637</attachid>
            <date>2012-09-12 08:27:51 -0700</date>
            <delta_ts>2012-09-14 05:30:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96522-20120912172724.patch</filename>
            <type>text/plain</type>
            <size>6933</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI4Mjc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGE5Zjg5YmFhNzU0NGFk
ODBlZmQxNjc1MWU4YzI0MzE2YTM2YjA4Zi4uYzU5YzU4YzZiNWM2MmJiN2E4YzcxM2IzOTFlYjky
ZDNjNzgzOGZjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEyLTA5LTEyICBEYW4g
Q2FybmV5ICA8ZGNhcm5leUBnb29nbGUuY29tPgorCisgICAgICAgIEdpdmUgaXNvbGF0ZWQgc2hl
bGxzIGEgbGlmZWN5Y2xlIGxpa2UgdGhhdCBvZiBtYWluIHNoZWxscworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY1MjIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvcmVkIHRoZSBpc29sYXRlZCBz
aGVsbHMgaW4gU2NyaXB0Q29udHJvbGxlcgorICAgICAgICB0byBiZSBjbGVhbmVkIHVwIHRoZSBz
YW1lIHdheSB0aGUgbWFpbiBzaGVsbCBpcy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIGNo
YW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0Q29u
dHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjp+U2NyaXB0
Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVhckZv
ckNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNsZWFyRm9yTmF2
aWdhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjplbnN1cmVJc29s
YXRlZFdvcmxkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpl
eGlzdGluZ1dpbmRvd1NoZWxsSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29u
dHJvbGxlcjo6d2luZG93U2hlbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxl
cjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29u
dHJvbGxlcjo6Y29sbGVjdElzb2xhdGVkQ29udGV4dHMpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L1NjcmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFNjcmlwdENvbnRyb2xsZXIpOgorCiAyMDEy
LTA5LTEyICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4K
IAogICAgICAgICBbRUZMXSBDbGVhbiB1cCB0aGUgUmVuZGVyVGhlbWUgRWRqZSBjYWNoaW5nCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4
IDIxMWJhOTQ3YTE3MjcxZmE2M2QzOTgxN2ZiNjhlYjlkYzA5NGExODQuLjIxMWE1NGExZjI2NjI2
NzdkOTljZGYwNGRjZjJiMjk2ZWU4ZjU3M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCkBAIC0xMDksNiArMTA5LDEwIEBAIFNjcmlwdENv
bnRyb2xsZXI6OlNjcmlwdENvbnRyb2xsZXIoRnJhbWUqIGZyYW1lKQogCiBTY3JpcHRDb250cm9s
bGVyOjp+U2NyaXB0Q29udHJvbGxlcigpCiB7CisgICAgZm9yIChJc29sYXRlZFdvcmxkTWFwOjpp
dGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5iZWdpbigpOworICAgICAgICAgaXRlciAh
PSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgaXRlci0+c2Vjb25k
LT5kZXN0cm95R2xvYmFsKCk7CisgICAgfQogICAgIHdpbmRvd1NoZWxsKCktPmRlc3Ryb3lHbG9i
YWwoKTsKICAgICBjbGVhckZvckNsb3NlKCk7CiB9CkBAIC0xNDIsMjYgKzE0NiwyNiBAQCB2b2lk
IFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyU2NyaXB0T2JqZWN0cygpCiAjZW5kaWYKIH0KIAotdm9p
ZCBTY3JpcHRDb250cm9sbGVyOjpyZXNldElzb2xhdGVkV29ybGRzKCkKK3ZvaWQgU2NyaXB0Q29u
dHJvbGxlcjo6Y2xlYXJGb3JDbG9zZSgpCiB7CiAgICAgZm9yIChJc29sYXRlZFdvcmxkTWFwOjpp
dGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5iZWdpbigpOwogICAgICAgICAgaXRlciAh
PSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgaXRlci0+c2Vjb25k
LT5kZXN0cm95SXNvbGF0ZWRTaGVsbCgpOworICAgICAgICBpdGVyLT5zZWNvbmQtPmNsZWFyRm9y
Q2xvc2UoKTsKKyAgICAgICAgaXRlci0+c2Vjb25kLT5zZXRJc29sYXRlZFdvcmxkU2VjdXJpdHlP
cmlnaW4oMCk7CiAgICAgfQotICAgIG1faXNvbGF0ZWRXb3JsZHMuY2xlYXIoKTsKICAgICBtX2lz
b2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbnMuY2xlYXIoKTsKLX0KLQotdm9pZCBTY3JpcHRDb250
cm9sbGVyOjpjbGVhckZvckNsb3NlKCkKLXsKLSAgICByZXNldElzb2xhdGVkV29ybGRzKCk7CiAg
ICAgVjhHQ0NvbnRyb2xsZXI6OmhpbnRGb3JDb2xsZWN0R2FyYmFnZSgpOwogICAgIHdpbmRvd1No
ZWxsKCktPmNsZWFyRm9yQ2xvc2UoKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVh
ckZvck5hdmlnYXRpb24oKQogewotICAgIHJlc2V0SXNvbGF0ZWRXb3JsZHMoKTsKKyAgICBmb3Ig
KElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmJlZ2lu
KCk7CisgICAgICAgICBpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCk7ICsraXRlcikgewor
ICAgICAgICBpdGVyLT5zZWNvbmQtPmNsZWFyRm9yTmF2aWdhdGlvbigpOworICAgICAgICBpdGVy
LT5zZWNvbmQtPnNldElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbigwKTsKKyAgICB9CisgICAg
bV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmNsZWFyKCk7CiAgICAgVjhHQ0NvbnRyb2xs
ZXI6OmhpbnRGb3JDb2xsZWN0R2FyYmFnZSgpOwogICAgIHdpbmRvd1NoZWxsKCktPmNsZWFyRm9y
TmF2aWdhdGlvbigpOwogfQpAQCAtMzIzLDEzICszMjcsMTMgQEAgVjhET01XaW5kb3dTaGVsbCog
U2NyaXB0Q29udHJvbGxlcjo6ZW5zdXJlSXNvbGF0ZWRXb3JsZENvbnRleHQoaW50IHdvcmxkSWQs
IGludAogICAgICAgICBpZiAoaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKSB7CiAgICAg
ICAgICAgICBBU1NFUlQoaXRlci0+c2Vjb25kLT53b3JsZCgpLT53b3JsZElkKCkgPT0gd29ybGRJ
ZCk7CiAgICAgICAgICAgICBBU1NFUlQoaXRlci0+c2Vjb25kLT53b3JsZCgpLT5leHRlbnNpb25H
cm91cCgpID09IGV4dGVuc2lvbkdyb3VwKTsKLSAgICAgICAgICAgIHJldHVybiBpdGVyLT5zZWNv
bmQ7CisgICAgICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kLmdldCgpOwogICAgICAgICB9CiAg
ICAgfQogCiAgICAgUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gd29ybGQgPSBET01XcmFwcGVyV29y
bGQ6OmVuc3VyZUlzb2xhdGVkV29ybGQod29ybGRJZCwgZXh0ZW5zaW9uR3JvdXApOwogICAgIE93
blB0cjxWOERPTVdpbmRvd1NoZWxsPiBpc29sYXRlZFdvcmxkU2hlbGwgPSBWOERPTVdpbmRvd1No
ZWxsOjpjcmVhdGUobV9mcmFtZSwgd29ybGQpOwotICAgIG1faXNvbGF0ZWRXb3JsZHMuc2V0KHdv
cmxkLT53b3JsZElkKCksIGlzb2xhdGVkV29ybGRTaGVsbC5nZXQoKSk7CisgICAgbV9pc29sYXRl
ZFdvcmxkcy5zZXQod29ybGQtPndvcmxkSWQoKSwgYWRvcHRQdHIoaXNvbGF0ZWRXb3JsZFNoZWxs
LmdldCgpKSk7CiAgICAgcmV0dXJuIGlzb2xhdGVkV29ybGRTaGVsbC5sZWFrUHRyKCk7CiB9CiAK
QEAgLTM0MSw3ICszNDUsNyBAQCBWOERPTVdpbmRvd1NoZWxsKiBTY3JpcHRDb250cm9sbGVyOjpl
eGlzdGluZ1dpbmRvd1NoZWxsSW50ZXJuYWwoRE9NV3JhcHBlcldvcmxkKgogICAgICAgICByZXR1
cm4gbV93aW5kb3dTaGVsbC5nZXQoKTsKIAogICAgIElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9y
IGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmZpbmQod29ybGQtPndvcmxkSWQoKSk7Ci0gICAgcmV0
dXJuIGl0ZXIgPT0gbV9pc29sYXRlZFdvcmxkcy5lbmQoKSA/IDAgOiBpdGVyLT5zZWNvbmQ7Cisg
ICAgcmV0dXJuIGl0ZXIgPT0gbV9pc29sYXRlZFdvcmxkcy5lbmQoKSA/IDAgOiBpdGVyLT5zZWNv
bmQuZ2V0KCk7CiB9CiAKIFY4RE9NV2luZG93U2hlbGwqIFNjcmlwdENvbnRyb2xsZXI6OndpbmRv
d1NoZWxsKERPTVdyYXBwZXJXb3JsZCogd29ybGQpCkBAIC0zNTEsNyArMzU1LDcgQEAgVjhET01X
aW5kb3dTaGVsbCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2hlbGwoRE9NV3JhcHBlcldvcmxk
KiB3b3JsZCkKICAgICAgICAgcmV0dXJuIHNoZWxsOwogCiAgICAgT3duUHRyPFY4RE9NV2luZG93
U2hlbGw+IGlzb2xhdGVkV29ybGRTaGVsbCA9IFY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZShtX2Zy
YW1lLCB3b3JsZCk7Ci0gICAgbV9pc29sYXRlZFdvcmxkcy5zZXQod29ybGQtPndvcmxkSWQoKSwg
aXNvbGF0ZWRXb3JsZFNoZWxsLmdldCgpKTsKKyAgICBtX2lzb2xhdGVkV29ybGRzLnNldCh3b3Js
ZC0+d29ybGRJZCgpLCBhZG9wdFB0cihpc29sYXRlZFdvcmxkU2hlbGwuZ2V0KCkpKTsKICAgICBy
ZXR1cm4gaXNvbGF0ZWRXb3JsZFNoZWxsLmxlYWtQdHIoKTsKIH0KIApAQCAtMzkyLDggKzM5Niwx
MSBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGludCB3
b3JsZElELCBjb25zdCBWZWN0b3I8U2NyaXB0UwogICAgICAgICAvLyBNYXJrIHRlbXBvcmFyeSBz
aGVsbCBmb3Igd2VhayBkZXN0cnVjdGlvbi4KICAgICAgICAgaWYgKHdvcmxkSUQgPT0gRE9NV3Jh
cHBlcldvcmxkOjp1bmluaXRpYWxpemVkV29ybGRJZCkgewogICAgICAgICAgICAgaW50IGFjdHVh
bFdvcmxkSWQgPSBpc29sYXRlZFdvcmxkU2hlbGwtPndvcmxkKCktPndvcmxkSWQoKTsKLSAgICAg
ICAgICAgIG1faXNvbGF0ZWRXb3JsZHMucmVtb3ZlKGFjdHVhbFdvcmxkSWQpOwotICAgICAgICAg
ICAgaXNvbGF0ZWRXb3JsZFNoZWxsLT5kZXN0cm95SXNvbGF0ZWRTaGVsbCgpOworICAgICAgICAg
ICAgSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2lzb2xhdGVkV29ybGRzLmZpbmQo
YWN0dWFsV29ybGRJZCk7CisgICAgICAgICAgICBWOERPTVdpbmRvd1NoZWxsKiBvd25lZFNoZWxs
ID0gaXQtPnNlY29uZC5sZWFrUHRyKCk7CisgICAgICAgICAgICBBU1NFUlQob3duZWRTaGVsbCA9
PSBpc29sYXRlZFdvcmxkU2hlbGwpOworICAgICAgICAgICAgbV9pc29sYXRlZFdvcmxkcy5yZW1v
dmUoaXQpOworICAgICAgICAgICAgb3duZWRTaGVsbC0+ZGVzdHJveUlzb2xhdGVkU2hlbGwoKTsK
ICAgICAgICAgfQogCiAgICAgICAgIHY4UmVzdWx0cyA9IGV2YWx1YXRlSGFuZGxlU2NvcGUuQ2xv
c2UocmVzdWx0QXJyYXkpOwpAQCAtNjY0LDcgKzY3MSw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxl
cjo6Y29sbGVjdElzb2xhdGVkQ29udGV4dHMoVmVjdG9yPHN0ZDo6cGFpcjxTY3JpcHRTdGF0ZSos
IFNlCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIGZvciAoSXNvbGF0
ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2lzb2xhdGVkV29ybGRzLmJlZ2luKCk7IGl0ICE9
IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgVjhET01XaW5kb3dTaGVs
bCogaXNvbGF0ZWRXb3JsZFNoZWxsID0gaXQtPnNlY29uZDsKKyAgICAgICAgVjhET01XaW5kb3dT
aGVsbCogaXNvbGF0ZWRXb3JsZFNoZWxsID0gaXQtPnNlY29uZC5nZXQoKTsKICAgICAgICAgaWYg
KCFpc29sYXRlZFdvcmxkU2hlbGwtPmlzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbigpKQogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29u
dGV4dCA9IGlzb2xhdGVkV29ybGRTaGVsbC0+Y29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IDA0MDIxNTIzOGM1MTQzZmVmODk2
MTA0ZTI1ZDJlMzljNDZiNWZiMTAuLmJiZTQ1NTg3YTc5MGI5NjczY2E0NjQ5OTA2YzRjZjNmYjJj
MWExY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRy
b2xsZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVy
LmgKQEAgLTE4OSwxMSArMTg5LDkgQEAgcHJpdmF0ZToKICAgICAvLyBOb3RlOiBhbHRob3VnaCB0
aGUgcG9pbnRlciBpcyByYXcsIHRoZSBpbnN0YW5jZSBpcyBrZXB0IGFsaXZlIGJ5IGEgc3Ryb25n
CiAgICAgLy8gcmVmZXJlbmNlIHRvIHRoZSB2OCBjb250ZXh0IGl0IGNvbnRhaW5zLCB3aGljaCBp
cyBub3QgbWFkZSB3ZWFrIHVudGlsIHdlCiAgICAgLy8gY2FsbCB3b3JsZC0+ZGVzdHJveUlzb2xh
dGVkU2hlbGwoKS4KLSAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBWOERPTVdpbmRvd1NoZWxsKj4g
SXNvbGF0ZWRXb3JsZE1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBPd25QdHI8VjhET01X
aW5kb3dTaGVsbD4gPiBJc29sYXRlZFdvcmxkTWFwOwogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQs
IFJlZlB0cjxTZWN1cml0eU9yaWdpbj4gPiBJc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5NYXA7
CiAKLSAgICB2b2lkIHJlc2V0SXNvbGF0ZWRXb3JsZHMoKTsKLQogICAgIEZyYW1lKiBtX2ZyYW1l
OwogICAgIGNvbnN0IFN0cmluZyogbV9zb3VyY2VVUkw7CiAK
</data>
<flag name="review"
          id="175154"
          type_id="1"
          status="+"
          setter="abarth"
    />
    <flag name="commit-queue"
          id="175202"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>164116</attachid>
            <date>2012-09-14 05:30:00 -0700</date>
            <delta_ts>2012-11-23 07:13:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>9300</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyMTUyYjk1Li4zZWRlZDc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQg
QEAKKzIwMTItMDktMTQgIERhbiBDYXJuZXkgIDxkY2FybmV5QGdvb2dsZS5jb20+CisKKyAgICAg
ICAgW1Y4XSBHaXZlIGlzb2xhdGVkIHNoZWxscyBhIGxpZmVjeWNsZSBsaWtlIHRoYXQgb2YgbWFp
biBzaGVsbHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTk2NTIyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KKworICAgICAgICBSZWZh
Y3RvcmVkIHRoZSBpc29sYXRlZCBzaGVsbHMgaW4gU2NyaXB0Q29udHJvbGxlcgorICAgICAgICB0
byBiZSBjbGVhbmVkIHVwIHRoZSBzYW1lIHdheSB0aGUgbWFpbiBzaGVsbCBpcy4KKworICAgICAg
ICBObyBuZXcgdGVzdHMuIE5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICog
YmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDb250cm9sbGVyOjp+U2NyaXB0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJDb3JlOjpTY3Jp
cHRDb250cm9sbGVyOjpjbGVhckZvckNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENv
bnRyb2xsZXI6OmNsZWFyRm9yTmF2aWdhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRD
b250cm9sbGVyOjplbnN1cmVJc29sYXRlZFdvcmxkQ29udGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JpcHRDb250cm9sbGVyOjpleGlzdGluZ1dpbmRvd1NoZWxsSW50ZXJuYWwpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2hlbGwpOgorICAgICAgICAoV2Vi
Q29yZTo6U2NyaXB0Q29udHJvbGxlcjo6ZXZhbHVhdGVJbklzb2xhdGVkV29ybGQpOgorICAgICAg
ICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6Y29sbGVjdElzb2xhdGVkQ29udGV4dHMpOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaDoKKyAgICAgICAgKFNjcmlw
dENvbnRyb2xsZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6Y2xlYXJGb3JDbG9zZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpjbGVhckZvck5hdmlnYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6Y2xlYXJEb2N1bWVudFByb3BlcnR5
KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmg6CisgICAgICAgIChX
ZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpJc29sYXRlZENvbnRleHREYXRhOjpJc29sYXRlZENv
bnRleHREYXRhKToKKyAgICAgICAgKFY4RE9NV2luZG93U2hlbGwpOgorCiAyMDEyLTA5LTE0ICBW
c2V2b2xvZCBWbGFzb3YgIDx2c2V2aWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3
ZWQgcjEyODU4MCBmb2xsb3cgdXA6IGZpeGVkIHF0IG1pbmltYWwgY29tcGlsYXRpb24uCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IGFj
YzczMTkuLjBlOTVjY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dENvbnRyb2xsZXIuY3BwCkBAIC0xMDksNiArMTA5LDkgQEAgU2NyaXB0Q29udHJvbGxlcjo6U2Ny
aXB0Q29udHJvbGxlcihGcmFtZSogZnJhbWUpCiAKIFNjcmlwdENvbnRyb2xsZXI6On5TY3JpcHRD
b250cm9sbGVyKCkKIHsKKyAgICBmb3IgKElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIg
PSBtX2lzb2xhdGVkV29ybGRzLmJlZ2luKCk7CisgICAgICAgICAgICBpdGVyICE9IG1faXNvbGF0
ZWRXb3JsZHMuZW5kKCk7ICsraXRlcikKKyAgICAgICAgaXRlci0+c2Vjb25kLT5kZXN0cm95R2xv
YmFsKCk7CiAgICAgd2luZG93U2hlbGwoKS0+ZGVzdHJveUdsb2JhbCgpOwogICAgIGNsZWFyRm9y
Q2xvc2UoKTsKIH0KQEAgLTE0MiwyNyArMTQ1LDIyIEBAIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6
Y2xlYXJTY3JpcHRPYmplY3RzKCkKICNlbmRpZgogfQogCi12b2lkIFNjcmlwdENvbnRyb2xsZXI6
OnJlc2V0SXNvbGF0ZWRXb3JsZHMoKQordm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhckZvckNs
b3NlKCkKIHsKICAgICBmb3IgKElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lz
b2xhdGVkV29ybGRzLmJlZ2luKCk7Ci0gICAgICAgICBpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMu
ZW5kKCk7ICsraXRlcikgewotICAgICAgICBpdGVyLT5zZWNvbmQtPmNsZWFySXNvbGF0ZWRTaGVs
bCgpOwotICAgICAgICBkZWxldGUgaXRlci0+c2Vjb25kOwotICAgIH0KLSAgICBtX2lzb2xhdGVk
V29ybGRzLmNsZWFyKCk7CisgICAgICAgICAgICBpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5k
KCk7ICsraXRlcikKKyAgICAgICAgaXRlci0+c2Vjb25kLT5jbGVhckZvckNsb3NlKCk7CiAgICAg
bV9pc29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmNsZWFyKCk7Ci19Ci0KLXZvaWQgU2NyaXB0
Q29udHJvbGxlcjo6Y2xlYXJGb3JDbG9zZSgpCi17Ci0gICAgcmVzZXRJc29sYXRlZFdvcmxkcygp
OwogICAgIFY4R0NDb250cm9sbGVyOjpoaW50Rm9yQ29sbGVjdEdhcmJhZ2UoKTsKICAgICB3aW5k
b3dTaGVsbCgpLT5jbGVhckZvckNsb3NlKCk7CiB9CiAKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6
Y2xlYXJGb3JOYXZpZ2F0aW9uKCkKIHsKLSAgICByZXNldElzb2xhdGVkV29ybGRzKCk7CisgICAg
Zm9yIChJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5i
ZWdpbigpOworICAgICAgICAgICAgaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpOyArK2l0
ZXIpCisgICAgICAgIGl0ZXItPnNlY29uZC0+Y2xlYXJGb3JOYXZpZ2F0aW9uKCk7CisgICAgbV9p
c29sYXRlZFdvcmxkU2VjdXJpdHlPcmlnaW5zLmNsZWFyKCk7CiAgICAgVjhHQ0NvbnRyb2xsZXI6
OmhpbnRGb3JDb2xsZWN0R2FyYmFnZSgpOwogICAgIHdpbmRvd1NoZWxsKCktPmNsZWFyRm9yTmF2
aWdhdGlvbigpOwogfQpAQCAtMzI0LDE0ICszMjIsMTUgQEAgVjhET01XaW5kb3dTaGVsbCogU2Ny
aXB0Q29udHJvbGxlcjo6ZW5zdXJlSXNvbGF0ZWRXb3JsZENvbnRleHQoaW50IHdvcmxkSWQsIGlu
dAogICAgICAgICBpZiAoaXRlciAhPSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpKSB7CiAgICAgICAg
ICAgICBBU1NFUlQoaXRlci0+c2Vjb25kLT53b3JsZCgpLT53b3JsZElkKCkgPT0gd29ybGRJZCk7
CiAgICAgICAgICAgICBBU1NFUlQoaXRlci0+c2Vjb25kLT53b3JsZCgpLT5leHRlbnNpb25Hcm91
cCgpID09IGV4dGVuc2lvbkdyb3VwKTsKLSAgICAgICAgICAgIHJldHVybiBpdGVyLT5zZWNvbmQ7
CisgICAgICAgICAgICByZXR1cm4gaXRlci0+c2Vjb25kLmdldCgpOwogICAgICAgICB9CiAgICAg
fQogCiAgICAgUmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gd29ybGQgPSBET01XcmFwcGVyV29ybGQ6
OmVuc3VyZUlzb2xhdGVkV29ybGQod29ybGRJZCwgZXh0ZW5zaW9uR3JvdXApOwogICAgIE93blB0
cjxWOERPTVdpbmRvd1NoZWxsPiBpc29sYXRlZFdvcmxkU2hlbGwgPSBWOERPTVdpbmRvd1NoZWxs
OjpjcmVhdGUobV9mcmFtZSwgd29ybGQpOwotICAgIG1faXNvbGF0ZWRXb3JsZHMuc2V0KHdvcmxk
LT53b3JsZElkKCksIGlzb2xhdGVkV29ybGRTaGVsbC5nZXQoKSk7Ci0gICAgcmV0dXJuIGlzb2xh
dGVkV29ybGRTaGVsbC5sZWFrUHRyKCk7CisgICAgVjhET01XaW5kb3dTaGVsbCogcmV0dXJuVmFs
ID0gaXNvbGF0ZWRXb3JsZFNoZWxsLmdldCgpOworICAgIG1faXNvbGF0ZWRXb3JsZHMuc2V0KHdv
cmxkLT53b3JsZElkKCksIGlzb2xhdGVkV29ybGRTaGVsbC5yZWxlYXNlKCkpOworICAgIHJldHVy
biByZXR1cm5WYWw7CiB9CiAKIFY4RE9NV2luZG93U2hlbGwqIFNjcmlwdENvbnRyb2xsZXI6OmV4
aXN0aW5nV2luZG93U2hlbGxJbnRlcm5hbChET01XcmFwcGVyV29ybGQqIHdvcmxkKQpAQCAtMzQy
LDcgKzM0MSw3IEBAIFY4RE9NV2luZG93U2hlbGwqIFNjcmlwdENvbnRyb2xsZXI6OmV4aXN0aW5n
V2luZG93U2hlbGxJbnRlcm5hbChET01XcmFwcGVyV29ybGQqCiAgICAgICAgIHJldHVybiBtX3dp
bmRvd1NoZWxsLmdldCgpOwogCiAgICAgSXNvbGF0ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXRlciA9
IG1faXNvbGF0ZWRXb3JsZHMuZmluZCh3b3JsZC0+d29ybGRJZCgpKTsKLSAgICByZXR1cm4gaXRl
ciA9PSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpID8gMCA6IGl0ZXItPnNlY29uZDsKKyAgICByZXR1
cm4gaXRlciA9PSBtX2lzb2xhdGVkV29ybGRzLmVuZCgpID8gMCA6IGl0ZXItPnNlY29uZC5nZXQo
KTsKIH0KIAogVjhET01XaW5kb3dTaGVsbCogU2NyaXB0Q29udHJvbGxlcjo6d2luZG93U2hlbGwo
RE9NV3JhcHBlcldvcmxkKiB3b3JsZCkKQEAgLTM1Miw4ICszNTEsOSBAQCBWOERPTVdpbmRvd1No
ZWxsKiBTY3JpcHRDb250cm9sbGVyOjp3aW5kb3dTaGVsbChET01XcmFwcGVyV29ybGQqIHdvcmxk
KQogICAgICAgICByZXR1cm4gc2hlbGw7CiAKICAgICBPd25QdHI8VjhET01XaW5kb3dTaGVsbD4g
aXNvbGF0ZWRXb3JsZFNoZWxsID0gVjhET01XaW5kb3dTaGVsbDo6Y3JlYXRlKG1fZnJhbWUsIHdv
cmxkKTsKLSAgICBtX2lzb2xhdGVkV29ybGRzLnNldCh3b3JsZC0+d29ybGRJZCgpLCBpc29sYXRl
ZFdvcmxkU2hlbGwuZ2V0KCkpOwotICAgIHJldHVybiBpc29sYXRlZFdvcmxkU2hlbGwubGVha1B0
cigpOworICAgIFY4RE9NV2luZG93U2hlbGwqIHJldHVyblZhbCA9IGlzb2xhdGVkV29ybGRTaGVs
bC5nZXQoKTsKKyAgICBtX2lzb2xhdGVkV29ybGRzLnNldCh3b3JsZC0+d29ybGRJZCgpLCBpc29s
YXRlZFdvcmxkU2hlbGwucmVsZWFzZSgpKTsKKyAgICByZXR1cm4gcmV0dXJuVmFsOwogfQogCiB2
b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5Jc29sYXRlZFdvcmxkKGludCB3b3JsZElE
LCBjb25zdCBWZWN0b3I8U2NyaXB0U291cmNlQ29kZT4mIHNvdXJjZXMsIGludCBleHRlbnNpb25H
cm91cCwgVmVjdG9yPFNjcmlwdFZhbHVlPiogcmVzdWx0cykKQEAgLTM5MiwxMCArMzkyLDkgQEAg
dm9pZCBTY3JpcHRDb250cm9sbGVyOjpldmFsdWF0ZUluSXNvbGF0ZWRXb3JsZChpbnQgd29ybGRJ
RCwgY29uc3QgVmVjdG9yPFNjcmlwdFMKIAogICAgICAgICAvLyBEZXN0cm95IHRlbXBvcmFyeSB3
b3JsZC4KICAgICAgICAgaWYgKHdvcmxkSUQgPT0gRE9NV3JhcHBlcldvcmxkOjp1bmluaXRpYWxp
emVkV29ybGRJZCkgeworICAgICAgICAgICAgaXNvbGF0ZWRXb3JsZFNoZWxsLT5jbGVhckZvckNs
b3NlKCk7CiAgICAgICAgICAgICBpbnQgYWN0dWFsV29ybGRJZCA9IGlzb2xhdGVkV29ybGRTaGVs
bC0+d29ybGQoKS0+d29ybGRJZCgpOwogICAgICAgICAgICAgbV9pc29sYXRlZFdvcmxkcy5yZW1v
dmUoYWN0dWFsV29ybGRJZCk7Ci0gICAgICAgICAgICBpc29sYXRlZFdvcmxkU2hlbGwtPmNsZWFy
SXNvbGF0ZWRTaGVsbCgpOwotICAgICAgICAgICAgZGVsZXRlIGlzb2xhdGVkV29ybGRTaGVsbDsK
ICAgICAgICAgfQogCiAgICAgICAgIHY4UmVzdWx0cyA9IGV2YWx1YXRlSGFuZGxlU2NvcGUuQ2xv
c2UocmVzdWx0QXJyYXkpOwpAQCAtNjY2LDcgKzY2NSw3IEBAIHZvaWQgU2NyaXB0Q29udHJvbGxl
cjo6Y29sbGVjdElzb2xhdGVkQ29udGV4dHMoVmVjdG9yPHN0ZDo6cGFpcjxTY3JpcHRTdGF0ZSos
IFNlCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIGZvciAoSXNvbGF0
ZWRXb3JsZE1hcDo6aXRlcmF0b3IgaXQgPSBtX2lzb2xhdGVkV29ybGRzLmJlZ2luKCk7IGl0ICE9
IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgVjhET01XaW5kb3dTaGVs
bCogaXNvbGF0ZWRXb3JsZFNoZWxsID0gaXQtPnNlY29uZDsKKyAgICAgICAgVjhET01XaW5kb3dT
aGVsbCogaXNvbGF0ZWRXb3JsZFNoZWxsID0gaXQtPnNlY29uZC5nZXQoKTsKICAgICAgICAgaWYg
KCFpc29sYXRlZFdvcmxkU2hlbGwtPmlzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbigpKQogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IHY4Q29u
dGV4dCA9IGlzb2xhdGVkV29ybGRTaGVsbC0+Y29udGV4dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCmluZGV4IDA0MDIxNTIuLjhjMTkwMDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKQEAgLTE4
NiwxNCArMTg2LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBpbnQgY29udGV4dERlYnVnSWQodjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4pOwogCiBwcml2YXRlOgotICAgIC8vIE5vdGU6IGFsdGhvdWdo
IHRoZSBwb2ludGVyIGlzIHJhdywgdGhlIGluc3RhbmNlIGlzIGtlcHQgYWxpdmUgYnkgYSBzdHJv
bmcKLSAgICAvLyByZWZlcmVuY2UgdG8gdGhlIHY4IGNvbnRleHQgaXQgY29udGFpbnMsIHdoaWNo
IGlzIG5vdCBtYWRlIHdlYWsgdW50aWwgd2UKLSAgICAvLyBjYWxsIHdvcmxkLT5kZXN0cm95SXNv
bGF0ZWRTaGVsbCgpLgotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFY4RE9NV2luZG93U2hlbGwq
PiBJc29sYXRlZFdvcmxkTWFwOworICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIE93blB0cjxWOERP
TVdpbmRvd1NoZWxsPiA+IElzb2xhdGVkV29ybGRNYXA7CiAgICAgdHlwZWRlZiBIYXNoTWFwPGlu
dCwgUmVmUHRyPFNlY3VyaXR5T3JpZ2luPiA+IElzb2xhdGVkV29ybGRTZWN1cml0eU9yaWdpbk1h
cDsKIAotICAgIHZvaWQgcmVzZXRJc29sYXRlZFdvcmxkcygpOwotCiAgICAgRnJhbWUqIG1fZnJh
bWU7CiAgICAgY29uc3QgU3RyaW5nKiBtX3NvdXJjZVVSTDsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAppbmRleCAxNWViNTJmLi4wNGExNzM3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNw
cApAQCAtMjQ2LDEzICsyNDYsMTAgQEAgdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpkZXN0cm95R2xv
YmFsKCkKICAgICBtX2dsb2JhbC5jbGVhcigpOwogfQogCi12b2lkIFY4RE9NV2luZG93U2hlbGw6
OmNsZWFySXNvbGF0ZWRTaGVsbCgpCi17Ci0gICAgZGlzcG9zZUNvbnRleHQoKTsKLX0KLQogdm9p
ZCBWOERPTVdpbmRvd1NoZWxsOjpjbGVhckZvckNsb3NlKCkKIHsKKyAgICBtX2lzb2xhdGVkV29y
bGRTaGVsbFNlY3VyaXR5T3JpZ2luLmNsZWFyKCk7CisKICAgICBpZiAobV9jb250ZXh0LmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNjMsMTIgKzI2MCwxOSBAQCB2b2lkIFY4RE9N
V2luZG93U2hlbGw6OmNsZWFyRm9yQ2xvc2UoKQogCiB2b2lkIFY4RE9NV2luZG93U2hlbGw6OmNs
ZWFyRm9yTmF2aWdhdGlvbigpCiB7CisgICAgbV9pc29sYXRlZFdvcmxkU2hlbGxTZWN1cml0eU9y
aWdpbi5jbGVhcigpOworCiAgICAgaWYgKG1fY29udGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKICAgICBtX2RvY3VtZW50
LmNsZWFyKCk7CiAKKyAgICBpZiAoIW1fd29ybGQtPmlzTWFpbldvcmxkKCkpIHsKKyAgICAgICAg
ZGlzcG9zZUNvbnRleHQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIC8vIEZJWE1F
OiBTaG91bGQgd2UgY3JlYXRlIGEgbmV3IExvY2FsIGhhbmRsZSBoZXJlPwogICAgIHY4OjpDb250
ZXh0OjpTY29wZSBjb250ZXh0U2NvcGUobV9jb250ZXh0LmdldCgpKTsKIApAQCAtNTAzLDggKzUw
Nyw3IEBAIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6dXBkYXRlRG9jdW1lbnRQcm9wZXJ0eSgpCiB2
b2lkIFY4RE9NV2luZG93U2hlbGw6OmNsZWFyRG9jdW1lbnRQcm9wZXJ0eSgpCiB7CiAgICAgQVNT
RVJUKCFtX2NvbnRleHQuaXNFbXB0eSgpKTsKLSAgICBpZiAoIW1fd29ybGQtPmlzTWFpbldvcmxk
KCkpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV93b3JsZC0+aXNNYWluV29ybGQoKSk7
CiAgICAgbV9jb250ZXh0LT5HbG9iYWwoKS0+Rm9yY2VEZWxldGUodjg6OlN0cmluZzo6TmV3KCJk
b2N1bWVudCIpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhET01XaW5kb3dTaGVsbC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5k
b3dTaGVsbC5oCmluZGV4IGFjODIwNjQuLmRmNzE2MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmgKQEAgLTc0LDcgKzc0LDggQEAgcHVibGljOgog
ICAgICAgICAgICAgOiBtX3dvcmxkKHdvcmxkKQogICAgICAgICAgICAgLCBtX3BlckNvbnRleHRE
YXRhKHBlckNvbnRleHREYXRhKQogICAgICAgICAgICAgLCBtX3NlY3VyaXR5T3JpZ2luKHNlY3Vy
aXR5T3JpZ2luKQotICAgICAgICB7IH0KKyAgICAgICAgeworICAgICAgICB9CiAKICAgICAgICAg
UmVmUHRyPERPTVdyYXBwZXJXb3JsZD4gbV93b3JsZDsKICAgICAgICAgT3duUHRyPFY4UGVyQ29u
dGV4dERhdGE+IG1fcGVyQ29udGV4dERhdGE7CkBAIC0xMDQsNyArMTA1LDYgQEAgcHVibGljOgog
CiAgICAgdm9pZCBjbGVhckZvck5hdmlnYXRpb24oKTsKICAgICB2b2lkIGNsZWFyRm9yQ2xvc2Uo
KTsKLSAgICB2b2lkIGNsZWFySXNvbGF0ZWRTaGVsbCgpOwogCiAgICAgdm9pZCBkZXN0cm95R2xv
YmFsKCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175804</attachid>
            <date>2012-11-23 07:13:21 -0800</date>
            <delta_ts>2012-11-26 00:11:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-96522-20121123161104.patch</filename>
            <type>text/plain</type>
            <size>5995</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1NjA0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTM3MjRhZmVjZmY2ZTQ5
YjFjMmU2ZTM5OWFkMzMxNWYxMDViZmJlYy4uMjBmYjBiZjQwYjE0OTY5MzNkYmNlYzA3MjgxMjdi
YmRiNGZmNmJjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTExLTIzICBEYW4g
Q2FybmV5ICA8ZGNhcm5leUBnb29nbGUuY29tPgorCisgICAgICAgIFtWOF0gR2l2ZSBpc29sYXRl
ZCBzaGVsbHMgYSBsaWZlY3ljbGUgbGlrZSB0aGF0IG9mIG1haW4gc2hlbGxzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NjUyMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZmFjdG9yZWQgdGhlIGlzb2xh
dGVkIHNoZWxscyBpbiBTY3JpcHRDb250cm9sbGVyCisgICAgICAgIHRvIGJlIGNsZWFuZWQgdXAg
dGhlIHNhbWUgd2F5IHRoZSBtYWluIHNoZWxsIGlzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4g
Tm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3Jp
cHRDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6On5T
Y3JpcHRDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6OmNs
ZWFyRm9yT3V0T2ZNZW1vcnkpOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6
Y2xlYXJGb3JDbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjbGVh
cldpbmRvd1NoZWxsKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmg6
CisgICAgICAgIChTY3JpcHRDb250cm9sbGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOERP
TVdpbmRvd1NoZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmRl
c3Ryb3lJc29sYXRlZFNoZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6
OmNsZWFyRm9yQ2xvc2UpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwu
aDoKKyAgICAgICAgKFY4RE9NV2luZG93U2hlbGwpOgorCiAyMDEyLTExLTIzICBDaHJpc3RvcGhl
IER1bWV6ICA8Y2hyaXN0b3BoZS5kdW1lekBpbnRlbC5jb20+CiAKICAgICAgICAgW0VGTF1bQUNd
IE1vdXNlIGN1cnNvciBpcyBub3QgdXBkYXRlZCB3aGVuIGFjY2VsZXJhdGVkIGNvbXBvc2l0aW5n
IGlzIGVuYWJsZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJv
bGxlci5jcHAKaW5kZXggZjBhYWUxZmEwNWMyNWQwMzM2NWRlM2FjMDQxNWU0ZjZhYTdlOWRjOS4u
NWFkZjNhMDkwYmNjOWFiOTA2NTc3YTNhYzcwMjZmNjJhMjdlOTRiYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKQEAgLTExMiw4ICsxMTIs
NyBAQCBTY3JpcHRDb250cm9sbGVyOjpTY3JpcHRDb250cm9sbGVyKEZyYW1lKiBmcmFtZSkKIAog
U2NyaXB0Q29udHJvbGxlcjo6flNjcmlwdENvbnRyb2xsZXIoKQogewotICAgIG1fd2luZG93U2hl
bGwtPmRlc3Ryb3lHbG9iYWwoKTsKLSAgICBjbGVhckZvckNsb3NlKCk7CisgICAgY2xlYXJGb3JD
bG9zZSh0cnVlKTsKIH0KIAogdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNjcmlwdE9iamVj
dHMoKQpAQCAtMTQ1LDI3ICsxNDQsMjMgQEAgdm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhclNj
cmlwdE9iamVjdHMoKQogI2VuZGlmCiB9CiAKLXZvaWQgU2NyaXB0Q29udHJvbGxlcjo6cmVzZXQo
KQordm9pZCBTY3JpcHRDb250cm9sbGVyOjpjbGVhckZvck91dE9mTWVtb3J5KCkKIHsKLSAgICBm
b3IgKElzb2xhdGVkV29ybGRNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX2lzb2xhdGVkV29ybGRzLmJl
Z2luKCk7Ci0gICAgICAgICBpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCk7ICsraXRlcikg
ewotICAgICAgICBpdGVyLT52YWx1ZS0+ZGVzdHJveUlzb2xhdGVkU2hlbGwoKTsKLSAgICB9Ci0g
ICAgbV9pc29sYXRlZFdvcmxkcy5jbGVhcigpOwotICAgIFY4R0NDb250cm9sbGVyOjpoaW50Rm9y
Q29sbGVjdEdhcmJhZ2UoKTsKKyAgICBjbGVhckZvckNsb3NlKHRydWUpOwogfQogCi12b2lkIFNj
cmlwdENvbnRyb2xsZXI6OmNsZWFyRm9yT3V0T2ZNZW1vcnkoKQordm9pZCBTY3JpcHRDb250cm9s
bGVyOjpjbGVhckZvckNsb3NlKGJvb2wgZGVzdHJveUdsb2JhbCkKIHsKLSAgICBjbGVhckZvckNs
b3NlKCk7Ci0gICAgbV93aW5kb3dTaGVsbC0+ZGVzdHJveUdsb2JhbCgpOworICAgIG1fd2luZG93
U2hlbGwtPmNsZWFyRm9yQ2xvc2UoZGVzdHJveUdsb2JhbCk7CisgICAgZm9yIChJc29sYXRlZFdv
cmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxkcy5iZWdpbigpOyBpdGVyICE9
IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCk7ICsraXRlcikKKyAgICAgICAgaXRlci0+dmFsdWUtPmNs
ZWFyRm9yQ2xvc2UoZGVzdHJveUdsb2JhbCk7CisgICAgVjhHQ0NvbnRyb2xsZXI6OmhpbnRGb3JD
b2xsZWN0R2FyYmFnZSgpOwogfQogCiB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmNsZWFyRm9yQ2xv
c2UoKQogewogICAgIGRvdWJsZSBzdGFydCA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgcmVzZXQoKTsK
LSAgICBtX3dpbmRvd1NoZWxsLT5jbGVhckZvckNsb3NlKCk7CisgICAgY2xlYXJGb3JDbG9zZShm
YWxzZSk7CiAgICAgSGlzdG9ncmFtU3VwcG9ydDo6aGlzdG9ncmFtQ3VzdG9tQ291bnRzKCJXZWJD
b3JlLlNjcmlwdENvbnRyb2xsZXIuY2xlYXJGb3JDbG9zZSIsIChjdXJyZW50VGltZSgpIC0gc3Rh
cnQpICogMTAwMCwgMCwgMTAwMDAsIDUwKTsKIH0KIApAQCAtNjU1LDEwICs2NTAsMTIgQEAgTlBP
YmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdE9iamVjdEZvclBsdWdpbkVsZW1l
bnQoSFRNTFBsdWdJbkVsZW1lbnQKIHZvaWQgU2NyaXB0Q29udHJvbGxlcjo6Y2xlYXJXaW5kb3dT
aGVsbChET01XaW5kb3cqLCBib29sKQogewogICAgIGRvdWJsZSBzdGFydCA9IGN1cnJlbnRUaW1l
KCk7Ci0gICAgcmVzZXQoKTsKICAgICAvLyBWOCBiaW5kaW5nIGV4cGVjdHMgU2NyaXB0Q29udHJv
bGxlcjo6Y2xlYXJXaW5kb3dTaGVsbCBvbmx5IGJlIGNhbGxlZAogICAgIC8vIHdoZW4gYSBmcmFt
ZSBpcyBsb2FkaW5nIGEgbmV3IHBhZ2UuIFRoaXMgY3JlYXRlcyBhIG5ldyBjb250ZXh0IGZvciB0
aGUgbmV3IHBhZ2UuCiAgICAgbV93aW5kb3dTaGVsbC0+Y2xlYXJGb3JOYXZpZ2F0aW9uKCk7Cisg
ICAgZm9yIChJc29sYXRlZFdvcmxkTWFwOjppdGVyYXRvciBpdGVyID0gbV9pc29sYXRlZFdvcmxk
cy5iZWdpbigpOyBpdGVyICE9IG1faXNvbGF0ZWRXb3JsZHMuZW5kKCk7ICsraXRlcikKKyAgICAg
ICAgaXRlci0+dmFsdWUtPmNsZWFyRm9yTmF2aWdhdGlvbigpOworICAgIFY4R0NDb250cm9sbGVy
OjpoaW50Rm9yQ29sbGVjdEdhcmJhZ2UoKTsKICAgICBIaXN0b2dyYW1TdXBwb3J0OjpoaXN0b2dy
YW1DdXN0b21Db3VudHMoIldlYkNvcmUuU2NyaXB0Q29udHJvbGxlci5jbGVhcldpbmRvd1NoZWxs
IiwgKGN1cnJlbnRUaW1lKCkgLSBzdGFydCkgKiAxMDAwLCAwLCAxMDAwMCwgNTApOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmgKaW5kZXggNjZh
NTczNDM0MTFlYzk5OGJjZmI5M2QzYjg4NTBlNWE5OTRiYTNjMy4uODI4NDUwNTA2ZmVkZGM2OWVm
YWVkNTU1ZTkyNWRjYTcyNWMwZWY0MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0Q29udHJvbGxlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1NjcmlwdENvbnRyb2xsZXIuaApAQCAtMTk1LDcgKzE5NSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6
CiAgICAgdHlwZWRlZiBIYXNoTWFwPGludCwgT3duUHRyPFY4RE9NV2luZG93U2hlbGw+ID4gSXNv
bGF0ZWRXb3JsZE1hcDsKIAotICAgIHZvaWQgcmVzZXQoKTsKKyAgICB2b2lkIGNsZWFyRm9yQ2xv
c2UoYm9vbCBkZXN0cm95R2xvYmFsKTsKIAogICAgIEZyYW1lKiBtX2ZyYW1lOwogICAgIGNvbnN0
IFN0cmluZyogbV9zb3VyY2VVUkw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4
RE9NV2luZG93U2hlbGwuY3BwCmluZGV4IGU2N2ViMmUxZjU5OThhMDE3ZmMyNDlmYzgwYTYwNmYy
NDRlN2IwNDkuLjQyNjg3NDAyNzkwODA3OTkwZmE0M2RkNTNjM2RlOTA2MDBmNjU3YmMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCkBAIC0x
MDIsNyArMTAyLDcgQEAgdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpkZXN0cm95SXNvbGF0ZWRTaGVs
bCgpCiAgICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwogICAgIG1fd29ybGQtPm1ha2VD
b250ZXh0V2VhayhtX2NvbnRleHQuZ2V0KCkpOwogICAgIGRpc3Bvc2VDb250ZXh0KCk7Ci0gICAg
ZGVzdHJveUdsb2JhbCgpOworICAgIG1fZ2xvYmFsLmNsZWFyKCk7CiB9CiAKIHZvaWQgVjhET01X
aW5kb3dTaGVsbDo6ZGlzcG9zZUNvbnRleHQoKQpAQCAtMTIzLDEzICsxMjMsMTEgQEAgdm9pZCBW
OERPTVdpbmRvd1NoZWxsOjpkaXNwb3NlQ29udGV4dCgpCiAgICAgVjhHQ0ZvckNvbnRleHREaXNw
b3NlOjppbnN0YW5jZSgpLm5vdGlmeUNvbnRleHREaXNwb3NlZChpc01haW5GcmFtZSk7CiB9CiAK
LXZvaWQgVjhET01XaW5kb3dTaGVsbDo6ZGVzdHJveUdsb2JhbCgpCit2b2lkIFY4RE9NV2luZG93
U2hlbGw6OmNsZWFyRm9yQ2xvc2UoYm9vbCBkZXN0cm95R2xvYmFsKQogewotICAgIG1fZ2xvYmFs
LmNsZWFyKCk7Ci19CisgICAgaWYgKGRlc3Ryb3lHbG9iYWwpCisgICAgICAgIG1fZ2xvYmFsLmNs
ZWFyKCk7CiAKLXZvaWQgVjhET01XaW5kb3dTaGVsbDo6Y2xlYXJGb3JDbG9zZSgpCi17CiAgICAg
aWYgKG1fY29udGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oCmluZGV4IDVkZWM4ODZmMzFjMTE1
MjY5NDk4MzcyODRhOGFkNzEzMTlmYjc5MmYuLjRmZjllYmVhYThhZTk0NzhlYWFmYzMyNGQ2Yjg1
ZDM3OTBiMGYxYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9N
V2luZG93U2hlbGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRv
d1NoZWxsLmgKQEAgLTc0LDkgKzc0LDcgQEAgcHVibGljOgogICAgIHZvaWQgdXBkYXRlRG9jdW1l
bnRXcmFwcGVyKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcik7CiAKICAgICB2b2lkIGNs
ZWFyRm9yTmF2aWdhdGlvbigpOwotICAgIHZvaWQgY2xlYXJGb3JDbG9zZSgpOwotCi0gICAgdm9p
ZCBkZXN0cm95R2xvYmFsKCk7CisgICAgdm9pZCBjbGVhckZvckNsb3NlKGJvb2wgZGVzdHJveUds
b2JhbCk7CiAKICAgICBET01XcmFwcGVyV29ybGQqIHdvcmxkKCkgeyByZXR1cm4gbV93b3JsZC5n
ZXQoKTsgfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>