<?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>71661</bug_id>
          
          <creation_ts>2011-11-07 04:10:50 -0800</creation_ts>
          <short_desc>Image onload callback fires when image loading disabled.</short_desc>
          <delta_ts>2012-10-08 16:10:51 -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>Page Loading</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>95478</dup_id>
          
          <bug_file_loc>http://www.ksasq.com/imgload.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ben Murdoch">benm</reporter>
          <assigned_to name="Ben Murdoch">benm</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>japhet</cc>
    
    <cc>koivisto</cc>
    
    <cc>mnaganov</cc>
    
    <cc>steveblock</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>497057</commentid>
    <comment_count>0</comment_count>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2011-11-07 04:10:50 -0800</bug_when>
    <thetext>Image onload callbacks are fired even when image loading is disabled with WebCore::Settings::setLoadImagesAutomatically(false).

See http://www.ksasq.com/imgload.html. With images disabled (with Safari I&apos;m using the &apos;Disable Images&apos; option under the &apos;Develop&apos; menu), click the show button. Notice that the &apos;loaded&apos; alert is displayed, and the div gets filled out with the loaded images offsetHeight (of 0). If you then enable image loads, the image will be loaded and displayed automatically, but no onload callback will be fired. Testing in other browsers (FF, IE) shows that when image loading is disabled, no onload callbacks are made (i.e. on the test page, no alert is displayed and the div content remains &apos;???&apos;).

Note that this does not reproduce in Chrome which as far as I understand uses it&apos;s own mechanism for blocking image loading. It&apos;s behavior is as expected - no callbacks fired until you click the button with image loading enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497157</commentid>
    <comment_count>1</comment_count>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2011-11-07 07:12:28 -0800</bug_when>
    <thetext>Having trouble getting this to reproduce under the test runner for a layout test. In the meantime, the simple code change I have to fix it is attached, any feedback on the approach would be appreciated. (This patch fixes the manual test case and seems to make webkit behave more like other browsers. It&apos;s just the automated test I&apos;m having difficulty with).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497158</commentid>
    <comment_count>2</comment_count>
      <attachid>113864</attachid>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2011-11-07 07:12:48 -0800</bug_when>
    <thetext>Created attachment 113864
Code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497287</commentid>
    <comment_count>3</comment_count>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2011-11-07 10:39:51 -0800</bug_when>
    <thetext>Ah, the layout test controller method to disable image loading ends up being asynchronous inside Settings::setLoadsImagesAutomatically. That explains why I wasn&apos;t able to get it to reproduce under the test harness. I&apos;ll send a complete patch with test, changelog, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>497926</commentid>
    <comment_count>4</comment_count>
      <attachid>114034</attachid>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2011-11-08 03:59:36 -0800</bug_when>
    <thetext>Created attachment 114034
Patch and layout test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500621</commentid>
    <comment_count>5</comment_count>
      <attachid>114034</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-11-11 03:18:19 -0800</bug_when>
    <thetext>Comment on attachment 114034
Patch and layout test

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

&gt; Source/WebCore/ChangeLog:12
&gt; +        Fix this by failing the cached image load if the resource is not in the cache. This behaviour

Does this fix both of the above problems? Maybe make this more clear.

&gt; Source/WebCore/loader/cache/CachedResourceLoader.cpp:398
&gt; +       return 0;

If image loading is disabled and there is a cache entry for this image, but the revalidation logic below determines that we need to reload it, will the image load fail? Is this desired behaviour, or should disabling image loads mean that we should accept any cached images without revalidation? Will the bug(s) you&apos;re trying to fix occur in this case?

&gt; LayoutTests/fast/images/blocked-images-onload.html:3
&gt; +    &lt;title&gt;Test that onload is fired after image loads unblocked (bug 71661)&lt;/title&gt;

It looks like you&apos;re not testing this, but the reverse? In the WebCore ChangeLog, you suggest that your fix addresses both cases. If so, should we test for both?

&gt; LayoutTests/fast/images/blocked-images-onload.html:6
&gt; +        if (window.layoutTestController) {

I think it&apos;s usual to write something to the page if a test which depends upon the LTC for correct operation is run without it being present.

&gt; LayoutTests/fast/images/blocked-images-onload.html:29
&gt; +            // that the cal to layoutTestController.disableImageLoading() above has taken effect.

s/cal/call</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500667</commentid>
    <comment_count>6</comment_count>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2011-11-11 04:32:45 -0800</bug_when>
    <thetext>Thanks for taking a look Steve! Updated patch is on the way.

(In reply to comment #5)
&gt; (From update of attachment 114034 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=114034&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:12
&gt; &gt; +        Fix this by failing the cached image load if the resource is not in the cache. This behaviour
&gt; 
&gt; Does this fix both of the above problems? Maybe make this more clear.

The patch prevents the onload callback from firing in the case that the image is not cached and image loading is disabled. I will clarify the changelog.

&gt; 
&gt; &gt; Source/WebCore/loader/cache/CachedResourceLoader.cpp:398
&gt; &gt; +       return 0;
&gt; 
&gt; If image loading is disabled and there is a cache entry for this image, but the revalidation logic below determines that we need to reload it, will the image load fail? Is this desired behaviour, or should disabling image loads mean that we should accept any cached images without revalidation? Will the bug(s) you&apos;re trying to fix occur in this case?
&gt; 

Hopefully I didn&apos;t change this behavior. I only intend to prevent uncached images from triggering onload callbacks when image loads are disabled.

&gt; &gt; LayoutTests/fast/images/blocked-images-onload.html:3
&gt; &gt; +    &lt;title&gt;Test that onload is fired after image loads unblocked (bug 71661)&lt;/title&gt;
&gt; 
&gt; It looks like you&apos;re not testing this, but the reverse? In the WebCore ChangeLog, you suggest that your fix addresses both cases. If so, should we test for both?

I will clarify the text in the test. I only intend to test that an onload callback is not fired when image loading is disabled. It doesn&apos;t seem possible to unblock image loads with the current DRT/layoutTestController infrastructure.

&gt; &gt; LayoutTests/fast/images/blocked-images-onload.html:6
&gt; &gt; +        if (window.layoutTestController) {
&gt; 
&gt; I think it&apos;s usual to write something to the page if a test which depends upon the LTC for correct operation is run without it being present.
&gt; 

Will do.

&gt; &gt; LayoutTests/fast/images/blocked-images-onload.html:29
&gt; &gt; +            // that the cal to layoutTestController.disableImageLoading() above has taken effect.
&gt; 
&gt; s/cal/call

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500717</commentid>
    <comment_count>7</comment_count>
      <attachid>114687</attachid>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2011-11-11 06:03:32 -0800</bug_when>
    <thetext>Created attachment 114687
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500988</commentid>
    <comment_count>8</comment_count>
      <attachid>114687</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-11-11 11:57:35 -0800</bug_when>
    <thetext>Comment on attachment 114687
Patch

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

This looks good to me, but I&apos;m not too familiar with this code. Alexey, can you take a look?

&gt; Source/WebCore/ChangeLog:10
&gt; +        if image loads were subssequently re-enabled, we would not get an onload callback at that

s/subssequently/subsequently

&gt; Source/WebCore/ChangeLog:15
&gt; +        enabled or disabled. We should not fire the callback when loading is disabled. (Note that we

&apos;... is disabled and no cached image is found.&apos;

&gt; LayoutTests/fast/images/blocked-images-onload.html:3
&gt; +    &lt;title&gt;Test that no onload callback is fired when image loads are disabled. (bug 71661)&lt;/title&gt;

&apos; ... are disabled and no cached image is found.&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501017</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-11-11 12:54:27 -0800</bug_when>
    <thetext>One non-obvious thing works now is that images all load when you change the preference back to on in Safari. This patch looks like it would break this (CachedResourceLoader::setAutoLoadImages iterates CachedImage objects still in need of loading).

I don&apos;t know if this is an intentional behavior, or just an artifact of initial implementation. But we shouldn&apos;t change it unless we can agree that the new behavior is at least no worse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>501018</commentid>
    <comment_count>10</comment_count>
      <attachid>114687</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-11-11 12:57:19 -0800</bug_when>
    <thetext>Comment on attachment 114687
Patch

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

&gt; Source/WebCore/ChangeLog:22
&gt; +        Test: fast/images/blocked-images-onload.html

The test could use a better name - nothing blocks the image. Something like load-event-with-disabled-autoload.html would be better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507617</commentid>
    <comment_count>11</comment_count>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2011-11-22 08:16:04 -0800</bug_when>
    <thetext>Thanks for looking at this Alexey. you were right there was a regression with re-enabling the automatic loads. I have a new patch that should address this and the other comments you and Steve had.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507624</commentid>
    <comment_count>12</comment_count>
      <attachid>116232</attachid>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2011-11-22 08:25:25 -0800</bug_when>
    <thetext>Created attachment 116232
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507626</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-11-22 08:30:01 -0800</bug_when>
    <thetext>Attachment 116232 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/fast...&quot; exit_code: 1

Source/WebCore/loader/cache/CachedImage.cpp:123:  One line control clauses should not use braces.  [whitespace/braces] [4]
LayoutTests/ChangeLog:13:  Line contains tab character.  [whitespace/tab] [5]
Total errors found: 2 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507628</commentid>
    <comment_count>14</comment_count>
      <attachid>116233</attachid>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2011-11-22 08:37:36 -0800</bug_when>
    <thetext>Created attachment 116233
Patch -style fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507634</commentid>
    <comment_count>15</comment_count>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2011-11-22 09:03:36 -0800</bug_when>
    <thetext>Just noticed a problem with the patch thanks to the cr-linux bot. will send a new one :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>507669</commentid>
    <comment_count>16</comment_count>
      <attachid>116241</attachid>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2011-11-22 10:28:12 -0800</bug_when>
    <thetext>Created attachment 116241
Fix crash in last patch :)

Needed to null check the return of CachedResourceLoader::requestResource.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508689</commentid>
    <comment_count>17</comment_count>
      <attachid>116241</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2011-11-24 02:44:05 -0800</bug_when>
    <thetext>Comment on attachment 116241
Fix crash in last patch :)

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

&gt; Source/WebCore/loader/cache/CachedResourceLoader.cpp:487
&gt; +    bool shouldLoadNow = true;

is this easier to follow ...

bool shouldNotLoadNow = type == CachedResource::ImageResource &amp;&amp; !autoLoadImages() &amp;&amp; !inCache;

&gt; LayoutTests/fast/images/load-event-with-disabled-autoload.html:3
&gt; +    &lt;title&gt;Test that no onload callback is fired when image loads are disabled and no cached image is found. (bug 71661)&lt;/title&gt;

I guess it&apos;s too hard to modify LTC to allow image loading to be re-enabled so we can test that we then get an onload callback?

&gt; LayoutTests/fast/images/load-event-with-disabled-autoload.html:31
&gt; +            window.setTimeout(function() { document.getElementById(&apos;img&apos;).src = &quot;resources/blocked-images-onload.jpg&quot;; }, 0);

Wrong file name. I&apos;m surprised the test still passes?! Also, is there a generic image we can re-use, rather than adding a new one?

&gt; LayoutTests/fast/images/load-event-with-disabled-autoload.html:34
&gt; +            window.setTimeout(function() { passed(); }, 1000);

Can we be sure that the image isn&apos;t cached? Similarly, can we test the case where the image is cached?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508784</commentid>
    <comment_count>18</comment_count>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2011-11-24 07:52:13 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 116241 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=116241&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/cache/CachedResourceLoader.cpp:487
&gt; &gt; +    bool shouldLoadNow = true;
&gt; 
&gt; is this easier to follow ...
&gt; 
&gt; bool shouldNotLoadNow = type == CachedResource::ImageResource &amp;&amp; !autoLoadImages() &amp;&amp; !inCache;
&gt; 

It means you get a double negative in the if (!shouldNotLoadNow) a few lines later, but I guess it&apos;s fine.

&gt; &gt; LayoutTests/fast/images/load-event-with-disabled-autoload.html:3
&gt; &gt; +    &lt;title&gt;Test that no onload callback is fired when image loads are disabled and no cached image is found. (bug 71661)&lt;/title&gt;
&gt; 
&gt; I guess it&apos;s too hard to modify LTC to allow image loading to be re-enabled so we can test that we then get an onload callback?
&gt; 

I guess it&apos;s technically not that hard, but it&apos;s a lot of work to update all the different versions of DRT and ensure they work correctly, I&apos;m not sure it&apos;s worth the effort...

&gt; &gt; LayoutTests/fast/images/load-event-with-disabled-autoload.html:31
&gt; &gt; +            window.setTimeout(function() { document.getElementById(&apos;img&apos;).src = &quot;resources/blocked-images-onload.jpg&quot;; }, 0);
&gt; 
&gt; Wrong file name. I&apos;m surprised the test still passes?! Also, is there a generic image we can re-use, rather than adding a new one?

Good spot - I guess the test still passes because in that case we won&apos;t get an onload callback because nothing was loaded... but for the wrong reason. Fixed. The images seemed to named after the tests that they are used in, and I wanted a new filename to ensure it couldn&apos;t be stored in a cache anywhere.
&gt; 
&gt; &gt; LayoutTests/fast/images/load-event-with-disabled-autoload.html:34
&gt; &gt; +            window.setTimeout(function() { passed(); }, 1000);
&gt; 
&gt; Can we be sure that the image isn&apos;t cached? Similarly, can we test the case where the image is cached?

I added a random query string to the filename, I think that should ensure it&apos;s not cached. I added a test in the case that the image is cached we get the callback, but WebKit&apos;s behavior in this case is correct currently so it&apos;s more a documentation of expected behavior rather than a regression that this patch fixes (i.e. the new test passes with or without my patch).

Thanks for the review, will upload a new patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508830</commentid>
    <comment_count>19</comment_count>
      <attachid>116521</attachid>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2011-11-24 10:12:18 -0800</bug_when>
    <thetext>Created attachment 116521
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>508866</commentid>
    <comment_count>20</comment_count>
      <attachid>116521</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-11-24 12:33:56 -0800</bug_when>
    <thetext>Comment on attachment 116521
Patch.

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

Behavior described in ChangeLog sounds just right. It would be easier for me to review if m_autoLoad had a more descriptive name.

&gt; Source/WebCore/loader/cache/CachedImage.h:116
&gt; +    bool m_autoLoad;

What does this member variable mean? 
- &quot;Autoload was enabled when object was created&quot;
- &quot;Autoload was enabled when making a decision whether to start loading&quot;
- &quot;Was loaded because of enabled autoload&quot;
- &quot;Started loading because autoload got enabled&quot;
- &quot;Did not try loading yet, so it&apos;s appropriate to start loading when autoload gets re-enabled&quot;

ChangeLog says &quot;whether [the resource] should be autoloaded&quot;, but which of the above options (if any) corresponds to that?

Even looking at this patch, I cannot easily tell what it is, and it will be nearly impossible to understand when looking at resulting ToT code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509066</commentid>
    <comment_count>21</comment_count>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2011-11-25 03:11:16 -0800</bug_when>
    <thetext>Thanks for the review Alexey, apologies for the confusion, please let me clarify:

&gt; &gt; Source/WebCore/loader/cache/CachedImage.h:116
&gt; &gt; +    bool m_autoLoad;
&gt; 
&gt; What does this member variable mean? 
&gt; - &quot;Autoload was enabled when object was created&quot;
&gt; - &quot;Autoload was enabled when making a decision whether to start loading&quot;
&gt; - &quot;Was loaded because of enabled autoload&quot;
&gt; - &quot;Started loading because autoload got enabled&quot;
&gt; - &quot;Did not try loading yet, so it&apos;s appropriate to start loading when autoload gets re-enabled&quot;

It is used to indicate if the WebCore::Settings object is preventing us from loading the image. It&apos;s set when we first request the image and then updated when CachedResourceLoader::setAutoLoadImages gets executed (i.e. the setting is re-enabled). So probably closest to your second point. Agree a better name would make this clearer, how about m_autoLoadPrevented? Or even m_autoLoadPreventedBySettings to be even more explicit?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509225</commentid>
    <comment_count>22</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-11-25 11:23:23 -0800</bug_when>
    <thetext>From this description, something like m_autoLoadWasPreventedBySettings or even m_loadWasPreventedBySettings sounds appropriate. I don&apos;t immediately see if this fully matches code changes, in particular this line doesn&apos;t simply set it to a value from settings:

resource-&gt;setAutoLoad(autoLoadImages() || (!resource-&gt;stillNeedsLoad() &amp;&amp; resource-&gt;inCache()));

It will likely be easier to see in a patch that incorporates the more specific name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509896</commentid>
    <comment_count>23</comment_count>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2011-11-28 09:48:58 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; From this description, something like m_autoLoadWasPreventedBySettings or even m_loadWasPreventedBySettings sounds appropriate. I don&apos;t immediately see if this fully matches code changes, in particular this line doesn&apos;t simply set it to a value from settings:
&gt; 
&gt; resource-&gt;setAutoLoad(autoLoadImages() || (!resource-&gt;stillNeedsLoad() &amp;&amp; resource-&gt;inCache()));

That is to ensure that we obey the semantics expressed in the documentation for the setting - that cached images should still be loaded even if autoloading images is turned off. I think I should be able to move the cache check into CachedImage where we check the new flag, then the flag will purely express the value from WebCore::Settings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>509929</commentid>
    <comment_count>24</comment_count>
      <attachid>116779</attachid>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2011-11-28 10:25:31 -0800</bug_when>
    <thetext>Created attachment 116779
Patch.

I reversed the logic, hopefully it&apos;s still clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510252</commentid>
    <comment_count>25</comment_count>
      <attachid>116779</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-11-28 15:11:24 -0800</bug_when>
    <thetext>Comment on attachment 116779
Patch.

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

Thank you very much, the patch now appears clear enough for me to be able to review.

I have a number of comments that I expect would make you change the patch, so marking r-. Please feel free to mark for review again if you disagree with suggestions and implications from the questions.

&gt; Source/WebCore/loader/cache/CachedImage.cpp:61
&gt; +    , m_autoLoadPreventedBySettings(false)

I still think that &quot;was&quot; should be somewhere there for proper English grammar. &quot;If auto load _was_ prevented by settings&quot;.

&gt; Source/WebCore/loader/cache/CachedImage.cpp:121
&gt; +    // If this image load is blocked, pretend we are loading now
&gt; +    // so that we don&apos;t fire an onload event from CachedResource::didAddClient.

This is extremely subtle. Could CachedResource::didAddClient() call back into CachedImage instead, asking if it&apos;s appropriate to fire the event? Specifically, can it simply check if there is image data available, and skip firing the event if not?

That way, you would not need m_autoLoadPreventedBySettings at all.

&gt; Source/WebCore/loader/cache/CachedImage.h:97
&gt; +    void setAutoLoadPreventedBySettings(bool b) { m_autoLoadPreventedBySettings = b; }

Please use a real variable name instead of &quot;b&quot;. Something like &quot;prevented&quot; would work.

&gt; Source/WebCore/loader/cache/CachedResourceLoader.cpp:486
&gt; +    bool shouldNotLoadNow = type == CachedResource::ImageResource &amp;&amp; !autoLoadImages() &amp;&amp; !inCache;

Safari preference is &quot;Display images when the page opens&quot;.  Why does it matter whether the resource is in cache or not?

It&apos;s a pre-existing mismatch between wording in the UI and implementation, so you shouldn&apos;t be concerned about it. I&apos;m just making this comment for posterity.

However, I&apos;m surprised that you had to add the !inCache check. Why wasn&apos;t is needed before?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510674</commentid>
    <comment_count>26</comment_count>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2011-11-29 04:09:05 -0800</bug_when>
    <thetext>Thanks Alexey, I think I will spin a new patch. Responses to your comments below:

&gt; &gt; Source/WebCore/loader/cache/CachedImage.cpp:61
&gt; &gt; +    , m_autoLoadPreventedBySettings(false)
&gt; 
&gt; I still think that &quot;was&quot; should be somewhere there for proper English grammar. &quot;If auto load _was_ prevented by settings&quot;.
&gt; 

OK, fair enough. I will add it.

&gt; &gt; Source/WebCore/loader/cache/CachedImage.cpp:121
&gt; &gt; +    // If this image load is blocked, pretend we are loading now
&gt; &gt; +    // so that we don&apos;t fire an onload event from CachedResource::didAddClient.
&gt; 
&gt; This is extremely subtle. Could CachedResource::didAddClient() call back into CachedImage instead, asking if it&apos;s appropriate to fire the event? Specifically, can it simply check if there is image data available, and skip firing the event if not?
&gt; 
&gt; That way, you would not need m_autoLoadPreventedBySettings at all.
&gt; 

That&apos;s an interesting idea, I&apos;ll investigate.

&gt; &gt; Source/WebCore/loader/cache/CachedImage.h:97
&gt; &gt; +    void setAutoLoadPreventedBySettings(bool b) { m_autoLoadPreventedBySettings = b; }
&gt; 
&gt; Please use a real variable name instead of &quot;b&quot;. Something like &quot;prevented&quot; would work.
&gt; 
&gt; &gt; Source/WebCore/loader/cache/CachedResourceLoader.cpp:486
&gt; &gt; +    bool shouldNotLoadNow = type == CachedResource::ImageResource &amp;&amp; !autoLoadImages() &amp;&amp; !inCache;
&gt; 
&gt; Safari preference is &quot;Display images when the page opens&quot;.  Why does it matter whether the resource is in cache or not?

I was going by the documentation in WebCore/page/Settings.h which states:

// Unlike areImagesEnabled, this only suppresses the network load of
// the image URL.  A cached image will still be rendered if requested.

&gt; 
&gt; It&apos;s a pre-existing mismatch between wording in the UI and implementation, so you shouldn&apos;t be concerned about it. I&apos;m just making this comment for posterity.
&gt; 
&gt; However, I&apos;m surprised that you had to add the !inCache check. Why wasn&apos;t is needed before?

I think that&apos;s an existing bug where the implementation doesn&apos;t match the documentation in the header file. I could remove the cache check and the patch should still fix the original problem (but wouldn&apos;t load a cached image, naturally), but it would be good to update the header file in that case. I don&apos;t mind either way. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510816</commentid>
    <comment_count>27</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-11-29 09:00:08 -0800</bug_when>
    <thetext>&gt; What do you think?

Let&apos;s limit this patch to fixing unload, and keep user observable behavior intact.

What I was asking about is that there was no explicit check for inCache in CachedResourceLoader::loadResource() before, but it was still loading resources from cache. So, it&apos;s unclear to me why an explicit check had to be added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510902</commentid>
    <comment_count>28</comment_count>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2011-11-29 10:42:42 -0800</bug_when>
    <thetext>(In reply to comment #27)
&gt; &gt; What do you think?
&gt; 
&gt; Let&apos;s limit this patch to fixing unload, and keep user observable behavior intact.
&gt; 
&gt; What I was asking about is that there was no explicit check for inCache in CachedResourceLoader::loadResource() before, but it was still loading resources from cache. So, it&apos;s unclear to me why an explicit check had to be added.

Ah, sorry - I thought you were referring to the other cache check. It seems that the one you were asking about is actually a relic from an old patch, and not needed.

So just to clarify - I will remove that one, but keep the cache check when determining whether to fire the onload event - to stick to the documentation in Settings.h and maintain existing behavior.

In my next patch I&apos;ve changed it so that it&apos;s not necessary to toggle the setLoading flag to prevent the onload event being fired, I think it&apos;s neater. My personal preference is to keep the m_autoLoadWasPreventedBySettings flag as that makes it very explicit about the reasoning behind preventing the event being sent. I&apos;m not sure if there are (or how many there may be now or in the future) overloaded meanings of an image not having image data available.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>510919</commentid>
    <comment_count>29</comment_count>
      <attachid>117000</attachid>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2011-11-29 11:06:37 -0800</bug_when>
    <thetext>Created attachment 117000
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511091</commentid>
    <comment_count>30</comment_count>
      <attachid>117000</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2011-11-29 13:58:38 -0800</bug_when>
    <thetext>Comment on attachment 117000
Patch

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

&gt; Source/WebCore/loader/cache/CachedImage.h:86
&gt; +    bool stillNeedsLoad() const { return (!errorOccurred() &amp;&amp; status() == Unknown &amp;&amp; !isLoading()) || (m_autoLoadWasPreventedBySettings &amp;&amp; !inCache()); }

I think that it&apos;s misleading to say that an image still needs load when settings say that we aren&apos;t loading any images.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>511721</commentid>
    <comment_count>31</comment_count>
    <who name="Ben Murdoch">benm</who>
    <bug_when>2011-11-30 07:09:35 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 117000 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=117000&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/loader/cache/CachedImage.h:86
&gt; &gt; +    bool stillNeedsLoad() const { return (!errorOccurred() &amp;&amp; status() == Unknown &amp;&amp; !isLoading()) || (m_autoLoadWasPreventedBySettings &amp;&amp; !inCache()); }
&gt; 
&gt; I think that it&apos;s misleading to say that an image still needs load when settings say that we aren&apos;t loading any images.

I can see where you are coming from, but I don&apos;t fully agree. My thinking was simply that if an image hasn&apos;t yet been loaded (for whatever reason), then it should be considered as still needing loading. The user may toggle the setting for loading images at any time, at which point the image may become eligible for loading again. Perhaps s/Was/Is would be appropriate in the variable name, as we do update it in real time as the user makes changes to the setting.

Having said that, I&apos;m happy to create a new function to capture this if you do not agree and would prefer that(can you suggest a name? isLoadingPrevented()?). It has to be on the CachedResource (unless inside CahedResource::didAddClient() I check if this is an image and then downcast to CachedImage, but that seems a little ugly). Adding this function is what I looked to do yesterday but it felt to me the stillNeedsLoad() captured what I wanted, so I used that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>567618</commentid>
    <comment_count>32</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2012-02-29 07:42:40 -0800</bug_when>
    <thetext>Are there any updates on this issue? This affects embedded scenarios and we would like this bug to be fixed.

If the problem is only with the &apos;stillNeedsLoad&apos; name, how about reversing its condition and renaming to &apos;loadingAttemptHasBeenMade&apos;?

bool loadingAttemptHasBeenMade() const { 
  return (errorOccurred() || status() != Unknown || isLoading() || inCache()) &amp;&amp;
         !m_autoLoadWasPreventedBySettings;
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736697</commentid>
    <comment_count>33</comment_count>
    <who name="Mikhail Naganov">mnaganov</who>
    <bug_when>2012-10-08 08:28:08 -0700</bug_when>
    <thetext>The issue was resolved in https://bugs.webkit.org/show_bug.cgi?id=95478

*** This bug has been marked as a duplicate of bug 95478 ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>737166</commentid>
    <comment_count>34</comment_count>
      <attachid>117000</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-10-08 16:10:51 -0700</bug_when>
    <thetext>Comment on attachment 117000
Patch

Cleared review? from attachment 117000 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>113864</attachid>
            <date>2011-11-07 07:12:48 -0800</date>
            <delta_ts>2011-11-08 03:59:36 -0800</delta_ts>
            <desc>Code</desc>
            <filename>71661.txt</filename>
            <type>text/plain</type>
            <size>774</size>
            <attacher name="Ben Murdoch">benm</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gOTk0MDQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTIsNiAr
MzkyLDExIEBAIENhY2hlZFJlc291cmNlKiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmUKICAgICAv
LyBTZWUgaWYgd2UgY2FuIHVzZSBhbiBleGlzdGluZyByZXNvdXJjZSBmcm9tIHRoZSBjYWNoZS4K
ICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBtZW1vcnlDYWNoZSgpLT5yZXNvdXJjZUZv
clVSTCh1cmwpOwogCisgICAgLy8gSWYgdGhlIHJlcXVlc3Qgd2FzIGZvciBhbiBpbWFnZSBidXQg
dGhlcmUgd2FzIG5vIGNhY2hlZCByZXNvdXJjZQorICAgIC8vIGFuZCB3ZSBhcmUgc2V0IHRvIG5v
dCBsb2FkIGZyb20gdGhlIG5ldHdvcmssIGJhaWwgb3V0IG5vdy4KKyAgICBpZiAoIXJlc291cmNl
ICYmIHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UgJiYgIWF1dG9Mb2FkSW1h
Z2VzKCkpCisgICAgICAgcmV0dXJuIDA7CisKICAgICBpZiAocmVxdWVzdC51cmwoKSAhPSB1cmwp
CiAgICAgICAgIHJlcXVlc3Quc2V0VVJMKHVybCk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114034</attachid>
            <date>2011-11-08 03:59:36 -0800</date>
            <delta_ts>2011-11-11 06:03:32 -0800</delta_ts>
            <desc>Patch and layout test</desc>
            <filename>71661.txt</filename>
            <type>text/plain</type>
            <size>5063</size>
            <attacher name="Ben Murdoch">benm</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5NTQwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTEtMTEtMDggIEJlbiBNdXJk
b2NoICA8YmVubUBnb29nbGUuY29tPgorCisgICAgICAgIEltYWdlIG9ubG9hZCBjYWxsYmFjayBm
aXJlcyB3aGVuIGltYWdlIGxvYWRpbmcgZGlzYWJsZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTY2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV2hlbiBpbWFnZSBsb2FkaW5nIGlzIGRp
c2FibGVkIHdpdGggdGhlIFdlYkNvcmU6OlNldHRpbmdzOjpzZXRJbWFnZXNMb2FkZWRBdXRvbWF0
aWNhbGx5CisgICAgICAgIEFQSSwgb25sb2FkIGNhbGxiYWNrcyB3ZXJlIGJlaW5nIGZpcmVkIGRl
c3BpdGUgdGhlIGltYWdlIG5vdCBiZWluZyBsb2FkZWQuIElmIGltYWdlIGxvYWRpbmcKKyAgICAg
ICAgd2FzIHN1YnNlcXVlbnRseSByZS1lbmFibGVkLCB0aGVuIHdlIHdvdWxkIG5vdCBnZXQgYSBj
YWxsYmFjayBhdCB0aGF0IHRpbWUuCisgICAgICAgIAorICAgICAgICBGaXggdGhpcyBieSBmYWls
aW5nIHRoZSBjYWNoZWQgaW1hZ2UgbG9hZCBpZiB0aGUgcmVzb3VyY2UgaXMgbm90IGluIHRoZSBj
YWNoZS4gVGhpcyBiZWhhdmlvdXIKKyAgICAgICAgc2VlbXMgdG8gbWF0Y2ggdGhhdCBvZiBvdGhl
ciBicm93c2Vycy4KKworICAgICAgICBUZXN0OiBmYXN0L2ltYWdlcy9ibG9ja2VkLWltYWdlcy1v
bmxvYWQuaHRtbAorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0UmVz
b3VyY2UpOiBGYWlsIGltYWdlIHJlc291cmNlIHJlcXVlc3RzIGlmIHRoZSBpbWFnZQorICAgICAg
ICAgICAgaXMgbm90IGluIHRoZSBjYWNoZSBhbmQgaW1hZ2UgbG9hZGluZyBpcyBkaXNhYmxlZC4K
KwogMjAxMS0xMS0wOCAgTmlrb2xhcyBaaW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4K
IAogICAgICAgICBTd2l0Y2ggU1ZHSW1hZ2UgY2FjaGUgdG8gc3RvcmUgSW1hZ2VCdWZmZXJzIGlu
c3RlYWQgb2Ygd2hvbGUgU1ZHSW1hZ2VzLCBpbmNsdWRpbmcgYSBET00vUmVuZGVyIHRyZWUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
TG9hZGVyLmNwcAkocmV2aXNpb24gOTk1NDApCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2Fj
aGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTIsNiArMzky
LDExIEBAIENhY2hlZFJlc291cmNlKiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6cmUKICAgICAvLyBT
ZWUgaWYgd2UgY2FuIHVzZSBhbiBleGlzdGluZyByZXNvdXJjZSBmcm9tIHRoZSBjYWNoZS4KICAg
ICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBtZW1vcnlDYWNoZSgpLT5yZXNvdXJjZUZvclVS
TCh1cmwpOwogCisgICAgLy8gSWYgdGhlIHJlcXVlc3Qgd2FzIGZvciBhbiBpbWFnZSBidXQgdGhl
cmUgd2FzIG5vIGNhY2hlZCByZXNvdXJjZQorICAgIC8vIGFuZCB3ZSBhcmUgc2V0IHRvIG5vdCBs
b2FkIGZyb20gdGhlIG5ldHdvcmssIGJhaWwgb3V0IG5vdy4KKyAgICBpZiAoIXJlc291cmNlICYm
IHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UgJiYgIWF1dG9Mb2FkSW1hZ2Vz
KCkpCisgICAgICAgcmV0dXJuIDA7CisKICAgICBpZiAocmVxdWVzdC51cmwoKSAhPSB1cmwpCiAg
ICAgICAgIHJlcXVlc3Quc2V0VVJMKHVybCk7CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5NTQwKQor
KysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTYgQEAK
KzIwMTEtMTEtMDggIEJlbiBNdXJkb2NoICA8YmVubUBnb29nbGUuY29tPgorCisgICAgICAgIElt
YWdlIG9ubG9hZCBjYWxsYmFjayBmaXJlcyB3aGVuIGltYWdlIGxvYWRpbmcgZGlzYWJsZWQuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTY2MQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgQWRk
IGEgbGF5b3V0IHRlc3QgdG8gY292ZXIgYnVnIDcxNjYxLiBFbnN1cmUgdGhhdCB3aGlsZSBpbWFn
ZSBsb2FkaW5nCisgICAgICAgIGlzIGRpc2FibGVkLCB3ZSBkbyBub3QgZmlyZSBhbiBvbmxvYWQg
Y2FsbGJhY2sgZm9yIGltYWdlcy4KKworICAgICAgICAqIGZhc3QvaW1hZ2VzL2Jsb2NrZWQtaW1h
Z2VzLW9ubG9hZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaW1hZ2VzL2Js
b2NrZWQtaW1hZ2VzLW9ubG9hZC5odG1sOiBBZGRlZC4KKwogMjAxMS0xMS0wOCAgTmlrb2xhcyBa
aW1tZXJtYW5uICA8bnppbW1lcm1hbm5AcmltLmNvbT4KIAogICAgICAgICBTd2l0Y2ggU1ZHSW1h
Z2UgY2FjaGUgdG8gc3RvcmUgSW1hZ2VCdWZmZXJzIGluc3RlYWQgb2Ygd2hvbGUgU1ZHSW1hZ2Vz
LCBpbmNsdWRpbmcgYSBET00vUmVuZGVyIHRyZWUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaW1h
Z2VzL2Jsb2NrZWQtaW1hZ2VzLW9ubG9hZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9pbWFnZXMvYmxvY2tlZC1pbWFnZXMtb25sb2FkLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2Jsb2NrZWQtaW1hZ2VzLW9u
bG9hZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMiBAQAorUEFTUworCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9ibG9ja2VkLWltYWdlcy1vbmxvYWQuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9ibG9ja2VkLWltYWdlcy1vbmxv
YWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2Jsb2NrZWQt
aW1hZ2VzLW9ubG9hZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACis8aHRtbD4K
KzxoZWFkPgorICAgIDx0aXRsZT5UZXN0IHRoYXQgb25sb2FkIGlzIGZpcmVkIGFmdGVyIGltYWdl
IGxvYWRzIHVuYmxvY2tlZCAoYnVnIDcxNjYxKTwvdGl0bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICA8IS0tCisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmRpc2FibGVJbWFnZUxv
YWRpbmcoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUo
KTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGltZ0xvYWRlZChlKSB7CisgICAgICAg
ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVyVGV4dCA9ICdGQUlM
OiBpbWFnZSBvbmxvYWQgZmlyZWQhJzsKKyAgICAgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gcGFzc2VkKCkgeworICAgICAgICAgICAg
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5lclRleHQgKz0gJ1BBU1MnOwor
ICAgICAgICAgICAgZmluaXNoVGVzdCgpOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0
VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gbG9hZGVkKCkgeworICAg
ICAgICAgICAgLy8gVXBkYXRlIHRoZSBzcmMgb2YgdGhlIGltYWdlIGVsZW1lbnQgdG8gdHJ5IGFu
ZCB0cmlnZ2VyIGFuIG9ubG9hZCBjYWxsYmFjay4gTmVlZHMgdG8gYmUgYXN5bmMgdG8gZW5zdXJl
CisgICAgICAgICAgICAvLyB0aGF0IHRoZSBjYWwgdG8gbGF5b3V0VGVzdENvbnRyb2xsZXIuZGlz
YWJsZUltYWdlTG9hZGluZygpIGFib3ZlIGhhcyB0YWtlbiBlZmZlY3QuCisgICAgICAgICAgICB3
aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2lt
ZycpLnNyYyA9ICJyZXNvdXJjZXMvYmxvY2tlZC1pbWFnZXMtb25sb2FkLmpwZyI7IH0sIDApOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBnZXQgYW4gb25sb2FkIGFm
dGVyIDFzLCBjb25zaWRlciB0aGUgdGVzdCBwYXNzZWQuCisgICAgICAgICAgICB3aW5kb3cuc2V0
VGltZW91dChmdW5jdGlvbigpIHsgcGFzc2VkKCk7IH0sIDEwMDApOworICAgICAgICB9CisKKyAg
ICAgICAgLy8gLS0+CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImxvYWRl
ZCgpIj4KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKyAgICA8aW1nIHNyYz0iIiBpZD0i
aW1nIiBvbmxvYWQ9ImltZ0xvYWRlZCgpIiAvPgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>114687</attachid>
            <date>2011-11-11 06:03:32 -0800</date>
            <delta_ts>2011-11-22 08:25:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>71661.txt</filename>
            <type>text/plain</type>
            <size>7065</size>
            <attacher name="Ben Murdoch">benm</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk5OTM4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzAgQEAKKzIwMTEtMTEtMTEgIEJlbiBNdXJk
b2NoICA8YmVubUBnb29nbGUuY29tPgorCisgICAgICAgIEltYWdlIG9ubG9hZCBjYWxsYmFjayBm
aXJlcyB3aGVuIGltYWdlIGxvYWRpbmcgZGlzYWJsZWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTY2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV2hlbiBpbWFnZSBsb2FkaW5nIGlzIGRp
c2FibGVkIHdpdGggdGhlIFdlYkNvcmU6OlNldHRpbmdzOjpzZXRJbWFnZXNMb2FkZWRBdXRvbWF0
aWNhbGx5CisgICAgICAgIEFQSSwgb25sb2FkIGNhbGxiYWNrcyB3ZXJlIGJlaW5nIGZpcmVkIGRl
c3BpdGUgaW1hZ2VzIG5vdCBiZWluZyBsb2FkZWQuIEJlY2F1c2Ugb2YgdGhpcywKKyAgICAgICAg
aWYgaW1hZ2UgbG9hZHMgd2VyZSBzdWJzc2VxdWVudGx5IHJlLWVuYWJsZWQsIHdlIHdvdWxkIG5v
dCBnZXQgYW4gb25sb2FkIGNhbGxiYWNrIGF0IHRoYXQKKyAgICAgICAgdGltZSAoYXMgb25lIGhh
ZCBhbHJlYWR5IGJlZW4gbWFkZSkuCisgICAgICAgIAorICAgICAgICBBZnRlciBleGFtaW5pbmcg
dGhlIGJlaGF2aW9yIG9mIG90aGVyIGJyb3dzZXJzIGluIHRoaXMgY2lyY3Vtc3RhbmNlLCB0aGUg
YnVnIGFwcGVyYXMgdG8gYmUgdGhhdAorICAgICAgICB3ZSBmaXJlIGFuIG9ubG9hZCBjYWxsYmFj
ayB3aGVuIGFuIGltYWdlIGlzIHJlcXVlc3RlZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaW1hZ2Ug
bG9hZGluZyBpcworICAgICAgICBlbmFibGVkIG9yIGRpc2FibGVkLiBXZSBzaG91bGQgbm90IGZp
cmUgdGhlIGNhbGxiYWNrIHdoZW4gbG9hZGluZyBpcyBkaXNhYmxlZC4gKE5vdGUgdGhhdCB3ZQor
ICAgICAgICB3b3VsZG4ndCBhY3R1YWxseSBsb2FkIHRoZSBpbWFnZSBpZiBsb2FkaW5nIHdhcyBk
aXNhYmxlZCwgdGhhdCBmdW5jdGlvbmFsaXR5IGlzIHdvcmtpbmcgYXMKKyAgICAgICAgZXhwZWN0
ZWQuCisgICAgICAgIAorICAgICAgICBGaXggdGhpcyBpc3N1ZSBieSBmYWlsaW5nIHRoZSBjYWNo
ZWQgaW1hZ2UgbG9hZCBpZiB0aGUgcmVzb3VyY2UgaXMgbm90IGluIHRoZSBjYWNoZSB3aGVuIGlt
YWdlCisgICAgICAgIGxvYWRpbmcgaXMgZGlzYWJsZWQuIFRoaXMgYmVoYXZpb3VyIHNlZW1zIHRv
IG1hdGNoIHRoYXQgb2Ygb3RoZXIgYnJvd3NlcnMuCisKKyAgICAgICAgVGVzdDogZmFzdC9pbWFn
ZXMvYmxvY2tlZC1pbWFnZXMtb25sb2FkLmh0bWwKKworICAgICAgICAqIGxvYWRlci9jYWNoZS9D
YWNoZWRSZXNvdXJjZUxvYWRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRSZXNvdXJj
ZUxvYWRlcjo6cmVxdWVzdFJlc291cmNlKTogRmFpbCBpbWFnZSByZXNvdXJjZSByZXF1ZXN0cyBp
ZiB0aGUgaW1hZ2UKKyAgICAgICAgICAgIGlzIG5vdCBpbiB0aGUgY2FjaGUgYW5kIGltYWdlIGxv
YWRpbmcgaXMgZGlzYWJsZWQuCisKIDIwMTEtMTEtMTEgIE5pa29sYXMgWmltbWVybWFubiAgPG56
aW1tZXJtYW5uQHJpbS5jb20+CiAKICAgICAgICAgWm9vbWluZyBpbiBTVkdzIGluIDxvYmplY3Q+
IGlzIGZsYWtleQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291
cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUv
Q2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiA5OTkzOCkKKysrIFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM5Miw2ICszOTIsMTEgQEAgQ2FjaGVkUmVzb3VyY2UqIENhY2hlZFJlc291cmNlTG9hZGVy
OjpyZQogICAgIC8vIFNlZSBpZiB3ZSBjYW4gdXNlIGFuIGV4aXN0aW5nIHJlc291cmNlIGZyb20g
dGhlIGNhY2hlLgogICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IG1lbW9yeUNhY2hlKCkt
PnJlc291cmNlRm9yVVJMKHVybCk7CiAKKyAgICAvLyBJZiB0aGUgcmVxdWVzdCB3YXMgZm9yIGFu
IGltYWdlIGJ1dCB0aGVyZSB3YXMgbm8gY2FjaGVkIHJlc291cmNlCisgICAgLy8gYW5kIHdlIGFy
ZSBzZXQgdG8gbm90IGxvYWQgZnJvbSB0aGUgbmV0d29yaywgYmFpbCBvdXQgbm93LgorICAgIGlm
ICghcmVzb3VyY2UgJiYgdHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSAmJiAh
YXV0b0xvYWRJbWFnZXMoKSkKKyAgICAgICByZXR1cm4gMDsKKwogICAgIGlmIChyZXF1ZXN0LnVy
bCgpICE9IHVybCkKICAgICAgICAgcmVxdWVzdC5zZXRVUkwodXJsKTsKIApJbmRleDogTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2
aXNpb24gOTk5MzgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNiBAQAorMjAxMS0xMS0xMSBCZW4gTXVyZG9jaCAgPGJlbm1AZ29vZ2xlLmNvbT4K
KworICAgICAgICBJbWFnZSBvbmxvYWQgY2FsbGJhY2sgZmlyZXMgd2hlbiBpbWFnZSBsb2FkaW5n
IGRpc2FibGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzE2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAg
CisgICAgICAgIEFkZCBhIGxheW91dCB0ZXN0IHRvIGNvdmVyIGJ1ZyA3MTY2MS4gRW5zdXJlIHRo
YXQgd2hpbGUgaW1hZ2UgbG9hZGluZworICAgICAgICBpcyBkaXNhYmxlZCwgd2UgZG8gbm90IGZp
cmUgYW4gb25sb2FkIGNhbGxiYWNrIGZvciBpbWFnZXMuCisKKyAgICAgICAgKiBmYXN0L2ltYWdl
cy9ibG9ja2VkLWltYWdlcy1vbmxvYWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2ltYWdlcy9ibG9ja2VkLWltYWdlcy1vbmxvYWQuaHRtbDogQWRkZWQuCisKIDIwMTEtMTEt
MTEgIFRvbnkgR2VudGlsY29yZSAgPHRvbnlnQGNocm9taXVtLm9yZz4KIAogICAgICAgICBGaXhp
bmcgbWVkaWEvdmlkZW8tZnJhbWUtYWNjdXJhdGUtc2Vlay5odG1sIGV4cGVjdGF0aW9uIGFmdGVy
IHI5OTg4Ny4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2Jsb2NrZWQtaW1hZ2VzLW9u
bG9hZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMv
YmxvY2tlZC1pbWFnZXMtb25sb2FkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvaW1hZ2VzL2Jsb2NrZWQtaW1hZ2VzLW9ubG9hZC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMiBAQAorUEFTUworCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2ltYWdlcy9ibG9ja2VkLWltYWdlcy1vbmxvYWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2ltYWdlcy9ibG9ja2VkLWltYWdlcy1vbmxvYWQuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2Jsb2NrZWQtaW1hZ2VzLW9ubG9hZC5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5U
ZXN0IHRoYXQgbm8gb25sb2FkIGNhbGxiYWNrIGlzIGZpcmVkIHdoZW4gaW1hZ2UgbG9hZHMgYXJl
IGRpc2FibGVkLiAoYnVnIDcxNjYxKTwvdGl0bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2ph
dmFzY3JpcHQiPgorICAgICAgICA8IS0tCisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmRpc2FibGVJbWFnZUxvYWRpbmco
KTsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBkb2N1bWVudC53cml0ZSgnVGhpcyB0ZXN0IG11c3Qg
YmUgcnVuIGluc2lkZSBEdW1wUmVuZGVyVHJlZS4nKTsKKyAgICAgICAgCisgICAgICAgIGZ1bmN0
aW9uIGltZ0xvYWRlZChlKSB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
Y29uc29sZScpLmlubmVyVGV4dCArPSAnRkFJTDogaW1hZ2Ugb25sb2FkIGZpcmVkISc7CisgICAg
ICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZ1bmN0
aW9uIHBhc3NlZCgpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25z
b2xlJykuaW5uZXJUZXh0ICs9ICdQQVNTJzsKKyAgICAgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7Cisg
ICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIGxvYWRlZCgpIHsKKyAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgc3JjIG9m
IHRoZSBpbWFnZSBlbGVtZW50IHRvIHRyeSBhbmQgdHJpZ2dlciBhbiBvbmxvYWQgY2FsbGJhY2su
IE5lZWRzIHRvIGJlIGFzeW5jIHRvIGVuc3VyZQorICAgICAgICAgICAgLy8gdGhhdCB0aGUgY2Fs
bCB0byBsYXlvdXRUZXN0Q29udHJvbGxlci5kaXNhYmxlSW1hZ2VMb2FkaW5nKCkgYWJvdmUgaGFz
IHRha2VuIGVmZmVjdC4KKyAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkg
eyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nJykuc3JjID0gInJlc291cmNlcy9ibG9ja2Vk
LWltYWdlcy1vbmxvYWQuanBnIjsgfSwgMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IElmIHdlIGRvbid0IGdldCBhbiBvbmxvYWQgYWZ0ZXIgMXMsIGNvbnNpZGVyIHRoZSB0ZXN0IHBh
c3NlZC4KKyAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBwYXNzZWQo
KTsgfSwgMTAwMCk7CisgICAgICAgIH0KKworICAgICAgICAvLyAtLT4KKyAgICA8L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibG9hZGVkKCkiPgorICAgIDxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgorICAgIDxpbWcgc3JjPSIiIGlkPSJpbWciIG9ubG9hZD0iaW1nTG9hZGVkKCkiIC8+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9yZXNvdXJj
ZXMvYmxvY2tlZC1pbWFnZXMtb25sb2FkLmpwZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBm
aWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24v
b2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2ltYWdl
cy9yZXNvdXJjZXMvYmxvY2tlZC1pbWFnZXMtb25sb2FkLmpwZwpfX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBz
dm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKLzlqLzRBQVFTa1pK
UmdBQkFRRUFZQUJnQUFELzRRQ0FSWGhwWmdBQVRVMEFLZ0FBQUFnQUJRRVNBQU1BQUFBQkFBRUFB
QUVhQUFVQQpBQUFCQUFBQVNnRWJBQVVBQUFBQkFBQUFVZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFB
QUFCQUFBQVdnQUFBQUFBQUFCZ0FBQUFBUUFBCkFHQUFBQUFCQUFLZ0FnQUVBQUFBQVFBQUFCQ2dB
d0FFQUFBQUFRQUFBQkFBQUFBQS85c0FRd0FDQVFFQ0FRRUNBZ0VDQWdJQ0FnTUYKQXdNREF3TUdC
QVFEQlFjR0J3Y0hCZ1lHQndnTENRY0lDZ2dHQmdrTkNRb0xDd3dNREFjSkRRNE5EQTRMREF3TC85
c0FRd0VDQWdJRApBZ01GQXdNRkN3Z0dDQXNMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3
c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMCkN3c0wvOEFBRVFnQUVBQVFBd0VpQUFJUkFR
TVJBZi9FQUI4QUFBRUZBUUVCQVFFQkFBQUFBQUFBQUFBQkFnTUVCUVlIQ0FrS0MvL0UKQUxVUUFB
SUJBd01DQkFNRkJRUUVBQUFCZlFFQ0F3QUVFUVVTSVRGQkJoTlJZUWNpY1JReWdaR2hDQ05Dc2NF
VlV0SHdKRE5pY29JSgpDaFlYR0JrYUpTWW5LQ2txTkRVMk56ZzVPa05FUlVaSFNFbEtVMVJWVmxk
WVdWcGpaR1ZtWjJocGFuTjBkWFozZUhsNmc0U0Zob2VJCmlZcVNrNVNWbHBlWW1acWlvNlNscHFl
b3FhcXlzN1MxdHJlNHVickN3OFRGeHNmSXljclMwOVRWMXRmWTJkcmg0dVBrNWVibjZPbnEKOGZM
ejlQWDI5L2o1K3YvRUFCOEJBQU1CQVFFQkFRRUJBUUVBQUFBQUFBQUJBZ01FQlFZSENBa0tDLy9F
QUxVUkFBSUJBZ1FFQXdRSApCUVFFQUFFQ2R3QUJBZ01SQkFVaE1RWVNRVkVIWVhFVElqS0JDQlJD
a2FHeHdRa2pNMUx3RldKeTBRb1dKRFRoSmZFWEdCa2FKaWNvCktTbzFOamM0T1RwRFJFVkdSMGhK
U2xOVVZWWlhXRmxhWTJSbFptZG9hV3B6ZEhWMmQzaDVlb0tEaElXR2g0aUppcEtUbEpXV2w1aVoK
bXFLanBLV21wNmlwcXJLenRMVzJ0N2k1dXNMRHhNWEd4OGpKeXRMVDFOWFcxOWpaMnVMajVPWG01
K2pwNnZMejlQWDI5L2o1K3YvYQpBQXdEQVFBQ0VRTVJBRDhBOTBvb29yK0t6L0Q4LzlrPQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116232</attachid>
            <date>2011-11-22 08:25:25 -0800</date>
            <delta_ts>2011-11-22 08:37:36 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>71661-1.txt</filename>
            <type>text/plain</type>
            <size>11019</size>
            <attacher name="Ben Murdoch">benm</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTAwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDExLTExLTIyICBCZW4gTXVy
ZG9jaCAgPGJlbm1AZ29vZ2xlLmNvbT4KKworICAgICAgICBJbWFnZSBvbmxvYWQgY2FsbGJhY2sg
ZmlyZXMgd2hlbiBpbWFnZSBsb2FkaW5nIGRpc2FibGVkLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdoZW4gaW1hZ2UgbG9hZGluZyBpcyBk
aXNhYmxlZCB3aXRoIHRoZSBXZWJDb3JlOjpTZXR0aW5nczo6c2V0SW1hZ2VzTG9hZGVkQXV0b21h
dGljYWxseQorICAgICAgICBBUEksIG9ubG9hZCBjYWxsYmFja3Mgd2VyZSBiZWluZyBmaXJlZCBk
ZXNwaXRlIGltYWdlcyBub3QgYmVpbmcgbG9hZGVkLiBCZWNhdXNlIG9mIHRoaXMsCisgICAgICAg
IGlmIGltYWdlIGxvYWRzIHdlcmUgc3Vic3NlcXVlbnRseSByZS1lbmFibGVkLCB3ZSB3b3VsZCBu
b3QgZ2V0IGFuIG9ubG9hZCBjYWxsYmFjayBhdCB0aGF0CisgICAgICAgIHRpbWUgKGFzIG9uZSBo
YWQgYWxyZWFkeSBiZWVuIG1hZGUpLgorCisgICAgICAgIEFmdGVyIGV4YW1pbmluZyB0aGUgYmVo
YXZpb3Igb2Ygb3RoZXIgYnJvd3NlcnMgaW4gdGhpcyBjaXJjdW1zdGFuY2UsIHRoZSBidWcgYXBw
ZXJhcyB0byBiZSB0aGF0CisgICAgICAgIHdlIGZpcmUgYW4gb25sb2FkIGNhbGxiYWNrIHdoZW4g
YW4gaW1hZ2UgaXMgcmVxdWVzdGVkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpbWFnZSBsb2FkaW5n
IGlzCisgICAgICAgIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFdlIHNob3VsZCBub3QgZmlyZSB0aGUg
Y2FsbGJhY2sgd2hlbiBsb2FkaW5nIGlzIGRpc2FibGVkLiAoTm90ZSB0aGF0IHdlCisgICAgICAg
IHdvdWxkbid0IGFjdHVhbGx5IGxvYWQgdGhlIGltYWdlIGlmIGxvYWRpbmcgd2FzIGRpc2FibGVk
LCB0aGF0IGZ1bmN0aW9uYWxpdHkgaXMgd29ya2luZyBhcworICAgICAgICBleHBlY3RlZC4pCisK
KyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwOiBQcmV0ZW5kIHRoZSBpbWFn
ZSBpcyBiZWluZyBsb2FkZWQgaWYgYXV0b21hdGljIGltYWdlIGxvYWRpbmcgaXMKKyAgICAgICAg
ICAgIGRpc2FibGVkIHRvIGF2b2lkIGFuIG9ubG9hZCBjYWxsYmFjayBiZWluZyB0cmlnZ2VyZWQg
YnkgdGhlIHN1cGVyY2xhc3MuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmg6
IEFkZCBhIGZsYWcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBpbWFnZSBzaG91bGQgYmUgYXV0b2xvYWRl
ZC4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RJbWFnZSk6IFNldCBh
IGZsYWcgb24gdGhlIHJlc291cmNlIHRvIGlkZW50aWZ5IHdoZXRoZXIKKyAgICAgICAgICAgIGl0
IHNob3VsZCBiZSBhdXRvbG9hZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VM
b2FkZXI6OmxvYWRSZXNvdXJjZSk6IERvIG5vdCBhdHRlbXB0IHRvIGxvYWQgYW4gaW1hZ2UgcmVz
b3VyY2UgaWYgYXV0b21hdGljCisgICAgICAgICAgICBsb2FkcyBhcmUgZGlzYWJsZWQgYW5kIHRo
ZSBpbWFnZSBpcyB1bmNhY2hlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9h
ZGVyOjpzZXRBdXRvTG9hZEltYWdlcyk6IFVwZGF0ZSB0aGUgYXV0b2xvYWQgZmxhZyB3aGVuIGlt
YWdlIGxvYWRzIGFyZQorICAgICAgICAgICAgZW5hYmxlZCBhZ2Fpbi4KKwogMjAxMS0xMS0yMiAg
U2hpbnlhIEthd2FuYWthICA8c2hpbnlha0Bnb29nbGUuY29tPgogCiAgICAgICAgIFNwZWxsY2hl
Y2sgc2hvdWxkIGJlIGFibGUgdG8gcnVuIGFzeW5jaHJvbm91c2x5LgpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiAxMDEwMDMpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01OCw2ICs1OCw3IEBAIENhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShjb25zdCBSZXNv
dXJjZVIKICAgICAsIG1faW1hZ2UoMCkKICAgICAsIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVy
KHRoaXMsICZDYWNoZWRJbWFnZTo6ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyRmlyZWQpCiAgICAg
LCBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2UodHJ1ZSkKKyAgICAsIG1fYXV0b0xvYWQodHJ1ZSkK
IHsKICAgICBzZXRTdGF0dXMoVW5rbm93bik7CiB9CkBAIC02Nyw2ICs2OCw3IEBAIENhY2hlZElt
YWdlOjpDYWNoZWRJbWFnZShJbWFnZSogaW1hZ2UpCiAgICAgLCBtX2ltYWdlKGltYWdlKQogICAg
ICwgbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXIodGhpcywgJkNhY2hlZEltYWdlOjpkZWNvZGVk
RGF0YURlbGV0aW9uVGltZXJGaXJlZCkKICAgICAsIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSh0
cnVlKQorICAgICwgbV9hdXRvTG9hZCh0cnVlKQogewogICAgIHNldFN0YXR1cyhDYWNoZWQpOwog
ICAgIHNldExvYWRpbmcoZmFsc2UpOwpAQCAtMTEzLDcgKzExNSwxOCBAQCB2b2lkIENhY2hlZElt
YWdlOjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVzCiAgICAgaWYgKG1faW1hZ2UgJiYgIW1faW1hZ2Ut
PmlzTnVsbCgpKQogICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZUNsaWVudCo+KGMpLT5p
bWFnZUNoYW5nZWQodGhpcyk7CiAKKyAgICAvLyBJZiB0aGlzIGltYWdlIGxvYWQgaXMgYmxvY2tl
ZCwgcHJldGVuZCB3ZSBhcmUgbG9hZGluZyBub3cKKyAgICAvLyBzbyB0aGF0IHdlIGRvbid0IGZp
cmUgYW4gb25sb2FkIGV2ZW50IGZyb20gQ2FjaGVkUmVzb3VyY2U6OmRpZEFkZENsaWVudC4KKyAg
ICBib29sIGxvYWRpbmcgPSBpc0xvYWRpbmcoKTsKKyAgICBpZiAoIW1fYXV0b0xvYWQgJiYgIWxv
YWRpbmcpIHsKKyAgICAgICAgc2V0TG9hZGluZyh0cnVlKTsKKyAgICB9CisKICAgICBDYWNoZWRS
ZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KGMpOworCisgICAgLy8gUmVzdG9yZSB0aGUgbG9hZGluZyBm
bGFnIGlmIHdlIG1vZGlmaWVkIGl0IGFib3ZlLgorICAgIGlmICghbV9hdXRvTG9hZCAmJiAhbG9h
ZGluZykKKyAgICAgICAgc2V0TG9hZGluZyhmYWxzZSk7CiB9CiAKIHZvaWQgQ2FjaGVkSW1hZ2U6
OmFsbENsaWVudHNSZW1vdmVkKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9D
YWNoZWRJbWFnZS5oCShyZXZpc2lvbiAxMDEwMDMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIv
Y2FjaGUvQ2FjaGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNiArOTQsOCBAQCBwdWJs
aWM6CiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdlKik7CiAg
ICAgdmlydHVhbCB2b2lkIGNoYW5nZWRJblJlY3QoY29uc3QgSW1hZ2UqLCBjb25zdCBJbnRSZWN0
Jik7CiAKKyAgICB2b2lkIHNldEF1dG9Mb2FkKGJvb2wgYikgeyBtX2F1dG9Mb2FkID0gYjsgfQor
ICAgIAogcHJpdmF0ZToKICAgICBJbWFnZSogbG9va3VwT3JDcmVhdGVJbWFnZUZvclJlbmRlcmVy
KGNvbnN0IFJlbmRlck9iamVjdCopOwogCkBAIC0xMTEsNiArMTEzLDcgQEAgcHJpdmF0ZToKICNl
bmRpZgogICAgIFRpbWVyPENhY2hlZEltYWdlPiBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lcjsK
ICAgICBib29sIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZTsKKyAgICBib29sIG1fYXV0b0xvYWQ7
CiB9OwogCiBjbGFzcyBDYWNoZWRJbWFnZUNsaWVudCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNs
aWVudCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VM
b2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRSZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDEwMTAwMykKKysrIFNvdXJjZS9XZWJDb3Jl
L2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1OCw2ICsxNTgsNyBAQCBDYWNoZWRJbWFnZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVl
CiAgICAgICAgIH0KICAgICB9CiAgICAgQ2FjaGVkSW1hZ2UqIHJlc291cmNlID0gc3RhdGljX2Nh
c3Q8Q2FjaGVkSW1hZ2UqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVz
b3VyY2UsIHJlcXVlc3QsIFN0cmluZygpLCBkZWZhdWx0Q2FjaGVkUmVzb3VyY2VPcHRpb25zKCkp
KTsKKyAgICByZXNvdXJjZS0+c2V0QXV0b0xvYWQoYXV0b0xvYWRJbWFnZXMoKSB8fCAoIXJlc291
cmNlLT5zdGlsbE5lZWRzTG9hZCgpICYmIHJlc291cmNlLT5pbkNhY2hlKCkpKTsKICAgICBpZiAo
YXV0b0xvYWRJbWFnZXMoKSAmJiByZXNvdXJjZSAmJiByZXNvdXJjZS0+c3RpbGxOZWVkc0xvYWQo
KSkKICAgICAgICAgcmVzb3VyY2UtPmxvYWQodGhpcywgZGVmYXVsdENhY2hlZFJlc291cmNlT3B0
aW9ucygpKTsKICAgICByZXR1cm4gcmVzb3VyY2U7CkBAIC00ODEsNiArNDgyLDEwIEBAIENhY2hl
ZFJlc291cmNlKiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6bG8KICAgICBDYWNoZWRSZXNvdXJjZSog
cmVzb3VyY2UgPSBjcmVhdGVSZXNvdXJjZSh0eXBlLCByZXF1ZXN0LCBjaGFyc2V0KTsKICAgICAK
ICAgICBib29sIGluQ2FjaGUgPSBtZW1vcnlDYWNoZSgpLT5hZGQocmVzb3VyY2UpOworICAgIGJv
b2wgc2hvdWxkTG9hZE5vdyA9IHRydWU7CisKKyAgICBpZiAoIWluQ2FjaGUgJiYgdHlwZSA9PSBD
YWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSAmJiAhYXV0b0xvYWRJbWFnZXMoKSkKKyAgICAg
ICAgc2hvdWxkTG9hZE5vdyA9IGZhbHNlOwogICAgIAogICAgIC8vIFByZXRlbmQgdGhlIHJlc291
cmNlIGlzIGluIHRoZSBjYWNoZSwgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIGRlbGV0ZWQgZHVy
aW5nIHRoZSBsb2FkKCkgY2FsbC4KICAgICAvLyBGSVhNRTogQ2FjaGVkUmVzb3VyY2Ugc2hvdWxk
IGp1c3QgdXNlIG5vcm1hbCByZWZjb3VudGluZyBpbnN0ZWFkLgpAQCAtNDg4LDcgKzQ5Myw4IEBA
IENhY2hlZFJlc291cmNlKiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6bG8KICAgICAgICAgcmVzb3Vy
Y2UtPnNldEluQ2FjaGUodHJ1ZSk7CiAgICAgCiAgICAgcmVzb3VyY2UtPnNldExvYWRQcmlvcml0
eShwcmlvcml0eSk7Ci0gICAgcmVzb3VyY2UtPmxvYWQodGhpcywgb3B0aW9ucyk7CisgICAgaWYg
KHNob3VsZExvYWROb3cpCisgICAgICAgIHJlc291cmNlLT5sb2FkKHRoaXMsIG9wdGlvbnMpOwog
ICAgIAogICAgIGlmICghaW5DYWNoZSkgewogICAgICAgICByZXNvdXJjZS0+c2V0T3duaW5nQ2Fj
aGVkUmVzb3VyY2VMb2FkZXIodGhpcyk7CkBAIC02MjksOCArNjM1LDEwIEBAIHZvaWQgQ2FjaGVk
UmVzb3VyY2VMb2FkZXI6OnNldEF1dG9Mb2FkSW0KICAgICAgICAgaWYgKHJlc291cmNlLT50eXBl
KCkgPT0gQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UpIHsKICAgICAgICAgICAgIENhY2hl
ZEltYWdlKiBpbWFnZSA9IGNvbnN0X2Nhc3Q8Q2FjaGVkSW1hZ2UqPihzdGF0aWNfY2FzdDxjb25z
dCBDYWNoZWRJbWFnZSo+KHJlc291cmNlKSk7CiAKLSAgICAgICAgICAgIGlmIChpbWFnZS0+c3Rp
bGxOZWVkc0xvYWQoKSkKKyAgICAgICAgICAgIGlmIChpbWFnZS0+c3RpbGxOZWVkc0xvYWQoKSkg
eworICAgICAgICAgICAgICAgIGltYWdlLT5zZXRBdXRvTG9hZCh0cnVlKTsKICAgICAgICAgICAg
ICAgICBpbWFnZS0+bG9hZCh0aGlzLCBkZWZhdWx0Q2FjaGVkUmVzb3VyY2VPcHRpb25zKCkpOwor
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTAx
MDAzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTcgQEAKKzIwMTEtMTEtMjIgQmVuIE11cmRvY2ggIDxiZW5tQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgSW1hZ2Ugb25sb2FkIGNhbGxiYWNrIGZpcmVzIHdoZW4gaW1hZ2UgbG9hZGluZyBkaXNhYmxl
ZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNjYx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAg
ICBBZGQgYSBsYXlvdXQgdGVzdCB0byBjb3ZlciBidWcgNzE2NjEuIEVuc3VyZSB0aGF0IHdoaWxl
IGltYWdlIGxvYWRpbmcKKyAgICAgICAgaXMgZGlzYWJsZWQsIHdlIGRvIG5vdCBmaXJlIGFuIG9u
bG9hZCBjYWxsYmFjayBmb3IgaW1hZ2VzLgorCisgICAgICAgICogZmFzdC9pbWFnZXMvbG9hZC1l
dmVudC13aXRoLWRpc2FibGVkLWF1dG9sb2FkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9pbWFnZXMvbG9hZC1ldmVudC13aXRoLWRpc2FibGVkLWF1dG9sb2FkLmh0bWw6IEFk
ZGVkLgorCQkqIGZhc3QvaW1hZ2VzL3Jlc291cmNlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQt
YXV0b2xvYWQuanBnOiBBZGRlZC4KKwogMjAxMS0xMS0yMiAgU2hpbnlhIEthd2FuYWthICA8c2hp
bnlha0Bnb29nbGUuY29tPgogCiAgICAgICAgIFNwZWxsY2hlY2sgc2hvdWxkIGJlIGFibGUgdG8g
cnVuIGFzeW5jaHJvbm91c2x5CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9sb2FkLWV2
ZW50LXdpdGgtZGlzYWJsZWQtYXV0b2xvYWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9hZC1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9sb2Fk
LWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0b2xvYWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDIgQEAKK1BBU1MKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvbG9h
ZC1ldmVudC13aXRoLWRpc2FibGVkLWF1dG9sb2FkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9pbWFnZXMvbG9hZC1ldmVudC13aXRoLWRpc2FibGVkLWF1dG9sb2FkLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9sb2FkLWV2ZW50LXdpdGgt
ZGlzYWJsZWQtYXV0b2xvYWQuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorPGh0
bWw+Cis8aGVhZD4KKyAgICA8dGl0bGU+VGVzdCB0aGF0IG5vIG9ubG9hZCBjYWxsYmFjayBpcyBm
aXJlZCB3aGVuIGltYWdlIGxvYWRzIGFyZSBkaXNhYmxlZCBhbmQgbm8gY2FjaGVkIGltYWdlIGlz
IGZvdW5kLiAoYnVnIDcxNjYxKTwvdGl0bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFz
Y3JpcHQiPgorICAgICAgICA8IS0tCisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRy
b2xsZXIpIHsKKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsK
KyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLmRpc2FibGVJbWFnZUxvYWRpbmcoKTsK
KyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBkb2N1bWVudC53cml0ZSgnVGhpcyB0ZXN0IG11c3QgYmUg
cnVuIGluc2lkZSBEdW1wUmVuZGVyVHJlZS4nKTsKKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9u
IGltZ0xvYWRlZChlKSB7CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29u
c29sZScpLmlubmVyVGV4dCArPSAnRkFJTDogaW1hZ2Ugb25sb2FkIGZpcmVkISc7CisgICAgICAg
ICAgICBmaW5pc2hUZXN0KCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9u
IHBhc3NlZCgpIHsKKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xl
JykuaW5uZXJUZXh0ICs9ICdQQVNTJzsKKyAgICAgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAg
ICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAg
IGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAg
IGZ1bmN0aW9uIGxvYWRlZCgpIHsKKyAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgc3JjIG9mIHRo
ZSBpbWFnZSBlbGVtZW50IHRvIHRyeSBhbmQgdHJpZ2dlciBhbiBvbmxvYWQgY2FsbGJhY2suIE5l
ZWRzIHRvIGJlIGFzeW5jIHRvIGVuc3VyZQorICAgICAgICAgICAgLy8gdGhhdCB0aGUgY2FsbCB0
byBsYXlvdXRUZXN0Q29udHJvbGxlci5kaXNhYmxlSW1hZ2VMb2FkaW5nKCkgYWJvdmUgaGFzIHRh
a2VuIGVmZmVjdC4KKyAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaW1nJykuc3JjID0gInJlc291cmNlcy9ibG9ja2VkLWlt
YWdlcy1vbmxvYWQuanBnIjsgfSwgMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElm
IHdlIGRvbid0IGdldCBhbiBvbmxvYWQgYWZ0ZXIgMXMsIGNvbnNpZGVyIHRoZSB0ZXN0IHBhc3Nl
ZC4KKyAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBwYXNzZWQoKTsg
fSwgMTAwMCk7CisgICAgICAgIH0KKworICAgICAgICAvLyAtLT4KKyAgICA8L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5IG9ubG9hZD0ibG9hZGVkKCkiPgorICAgIDxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorICAgIDxpbWcgc3JjPSIiIGlkPSJpbWciIG9ubG9hZD0iaW1nTG9hZGVkKCkiIC8+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9yZXNvdXJjZXMv
bG9hZC1ldmVudC13aXRoLWRpc2FibGVkLWF1dG9sb2FkLmpwZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBk
aXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gYXBw
bGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9m
YXN0L2ltYWdlcy9yZXNvdXJjZXMvbG9hZC1ldmVudC13aXRoLWRpc2FibGVkLWF1dG9sb2FkLmpw
ZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQt
c3RyZWFtCgoKLzlqLzRBQVFTa1pKUmdBQkFRRUFZQUJnQUFELzRRQ0FSWGhwWmdBQVRVMEFLZ0FB
QUFnQUJRRVNBQU1BQUFBQkFBRUFBQUVhQUFVQQpBQUFCQUFBQVNnRWJBQVVBQUFBQkFBQUFVZ0Vv
QUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVdnQUFBQUFBQUFCZ0FBQUFBUUFBCkFHQUFBQUFC
QUFLZ0FnQUVBQUFBQVFBQUFCQ2dBd0FFQUFBQUFRQUFBQkFBQUFBQS85c0FRd0FDQVFFQ0FRRUNB
Z0VDQWdJQ0FnTUYKQXdNREF3TUdCQVFEQlFjR0J3Y0hCZ1lHQndnTENRY0lDZ2dHQmdrTkNRb0xD
d3dNREFjSkRRNE5EQTRMREF3TC85c0FRd0VDQWdJRApBZ01GQXdNRkN3Z0dDQXNMQ3dzTEN3c0xD
d3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMCkN3c0wv
OEFBRVFnQUVBQVFBd0VpQUFJUkFRTVJBZi9FQUI4QUFBRUZBUUVCQVFFQkFBQUFBQUFBQUFBQkFn
TUVCUVlIQ0FrS0MvL0UKQUxVUUFBSUJBd01DQkFNRkJRUUVBQUFCZlFFQ0F3QUVFUVVTSVRGQkJo
TlJZUWNpY1JReWdaR2hDQ05Dc2NFVlV0SHdKRE5pY29JSgpDaFlYR0JrYUpTWW5LQ2txTkRVMk56
ZzVPa05FUlVaSFNFbEtVMVJWVmxkWVdWcGpaR1ZtWjJocGFuTjBkWFozZUhsNmc0U0Zob2VJCmlZ
cVNrNVNWbHBlWW1acWlvNlNscHFlb3FhcXlzN1MxdHJlNHVickN3OFRGeHNmSXljclMwOVRWMXRm
WTJkcmg0dVBrNWVibjZPbnEKOGZMejlQWDI5L2o1K3YvRUFCOEJBQU1CQVFFQkFRRUJBUUVBQUFB
QUFBQUJBZ01FQlFZSENBa0tDLy9FQUxVUkFBSUJBZ1FFQXdRSApCUVFFQUFFQ2R3QUJBZ01SQkFV
aE1RWVNRVkVIWVhFVElqS0JDQlJDa2FHeHdRa2pNMUx3RldKeTBRb1dKRFRoSmZFWEdCa2FKaWNv
CktTbzFOamM0T1RwRFJFVkdSMGhKU2xOVVZWWlhXRmxhWTJSbFptZG9hV3B6ZEhWMmQzaDVlb0tE
aElXR2g0aUppcEtUbEpXV2w1aVoKbXFLanBLV21wNmlwcXJLenRMVzJ0N2k1dXNMRHhNWEd4OGpK
eXRMVDFOWFcxOWpaMnVMajVPWG01K2pwNnZMejlQWDI5L2o1K3YvYQpBQXdEQVFBQ0VRTVJBRDhB
OTBvb29yK0t6L0Q4LzlrPQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116233</attachid>
            <date>2011-11-22 08:37:36 -0800</date>
            <delta_ts>2011-11-22 10:28:12 -0800</delta_ts>
            <desc>Patch -style fixed.</desc>
            <filename>71661-1.txt</filename>
            <type>text/plain</type>
            <size>11008</size>
            <attacher name="Ben Murdoch">benm</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTAwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDExLTExLTIyICBCZW4gTXVy
ZG9jaCAgPGJlbm1AZ29vZ2xlLmNvbT4KKworICAgICAgICBJbWFnZSBvbmxvYWQgY2FsbGJhY2sg
ZmlyZXMgd2hlbiBpbWFnZSBsb2FkaW5nIGRpc2FibGVkLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdoZW4gaW1hZ2UgbG9hZGluZyBpcyBk
aXNhYmxlZCB3aXRoIHRoZSBXZWJDb3JlOjpTZXR0aW5nczo6c2V0SW1hZ2VzTG9hZGVkQXV0b21h
dGljYWxseQorICAgICAgICBBUEksIG9ubG9hZCBjYWxsYmFja3Mgd2VyZSBiZWluZyBmaXJlZCBk
ZXNwaXRlIGltYWdlcyBub3QgYmVpbmcgbG9hZGVkLiBCZWNhdXNlIG9mIHRoaXMsCisgICAgICAg
IGlmIGltYWdlIGxvYWRzIHdlcmUgc3Vic3NlcXVlbnRseSByZS1lbmFibGVkLCB3ZSB3b3VsZCBu
b3QgZ2V0IGFuIG9ubG9hZCBjYWxsYmFjayBhdCB0aGF0CisgICAgICAgIHRpbWUgKGFzIG9uZSBo
YWQgYWxyZWFkeSBiZWVuIG1hZGUpLgorCisgICAgICAgIEFmdGVyIGV4YW1pbmluZyB0aGUgYmVo
YXZpb3Igb2Ygb3RoZXIgYnJvd3NlcnMgaW4gdGhpcyBjaXJjdW1zdGFuY2UsIHRoZSBidWcgYXBw
ZXJhcyB0byBiZSB0aGF0CisgICAgICAgIHdlIGZpcmUgYW4gb25sb2FkIGNhbGxiYWNrIHdoZW4g
YW4gaW1hZ2UgaXMgcmVxdWVzdGVkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpbWFnZSBsb2FkaW5n
IGlzCisgICAgICAgIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFdlIHNob3VsZCBub3QgZmlyZSB0aGUg
Y2FsbGJhY2sgd2hlbiBsb2FkaW5nIGlzIGRpc2FibGVkLiAoTm90ZSB0aGF0IHdlCisgICAgICAg
IHdvdWxkbid0IGFjdHVhbGx5IGxvYWQgdGhlIGltYWdlIGlmIGxvYWRpbmcgd2FzIGRpc2FibGVk
LCB0aGF0IGZ1bmN0aW9uYWxpdHkgaXMgd29ya2luZyBhcworICAgICAgICBleHBlY3RlZC4pCisK
KyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwOiBQcmV0ZW5kIHRoZSBpbWFn
ZSBpcyBiZWluZyBsb2FkZWQgaWYgYXV0b21hdGljIGltYWdlIGxvYWRpbmcgaXMKKyAgICAgICAg
ICAgIGRpc2FibGVkIHRvIGF2b2lkIGFuIG9ubG9hZCBjYWxsYmFjayBiZWluZyB0cmlnZ2VyZWQg
YnkgdGhlIHN1cGVyY2xhc3MuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmg6
IEFkZCBhIGZsYWcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBpbWFnZSBzaG91bGQgYmUgYXV0b2xvYWRl
ZC4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RJbWFnZSk6IFNldCBh
IGZsYWcgb24gdGhlIHJlc291cmNlIHRvIGlkZW50aWZ5IHdoZXRoZXIKKyAgICAgICAgICAgIGl0
IHNob3VsZCBiZSBhdXRvbG9hZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VM
b2FkZXI6OmxvYWRSZXNvdXJjZSk6IERvIG5vdCBhdHRlbXB0IHRvIGxvYWQgYW4gaW1hZ2UgcmVz
b3VyY2UgaWYgYXV0b21hdGljCisgICAgICAgICAgICBsb2FkcyBhcmUgZGlzYWJsZWQgYW5kIHRo
ZSBpbWFnZSBpcyB1bmNhY2hlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9h
ZGVyOjpzZXRBdXRvTG9hZEltYWdlcyk6IFVwZGF0ZSB0aGUgYXV0b2xvYWQgZmxhZyB3aGVuIGlt
YWdlIGxvYWRzIGFyZQorICAgICAgICAgICAgZW5hYmxlZCBhZ2Fpbi4KKwogMjAxMS0xMS0yMiAg
U2hpbnlhIEthd2FuYWthICA8c2hpbnlha0Bnb29nbGUuY29tPgogCiAgICAgICAgIFNwZWxsY2hl
Y2sgc2hvdWxkIGJlIGFibGUgdG8gcnVuIGFzeW5jaHJvbm91c2x5LgpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiAxMDEwMDMpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01OCw2ICs1OCw3IEBAIENhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShjb25zdCBSZXNv
dXJjZVIKICAgICAsIG1faW1hZ2UoMCkKICAgICAsIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVy
KHRoaXMsICZDYWNoZWRJbWFnZTo6ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyRmlyZWQpCiAgICAg
LCBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2UodHJ1ZSkKKyAgICAsIG1fYXV0b0xvYWQodHJ1ZSkK
IHsKICAgICBzZXRTdGF0dXMoVW5rbm93bik7CiB9CkBAIC02Nyw2ICs2OCw3IEBAIENhY2hlZElt
YWdlOjpDYWNoZWRJbWFnZShJbWFnZSogaW1hZ2UpCiAgICAgLCBtX2ltYWdlKGltYWdlKQogICAg
ICwgbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXIodGhpcywgJkNhY2hlZEltYWdlOjpkZWNvZGVk
RGF0YURlbGV0aW9uVGltZXJGaXJlZCkKICAgICAsIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSh0
cnVlKQorICAgICwgbV9hdXRvTG9hZCh0cnVlKQogewogICAgIHNldFN0YXR1cyhDYWNoZWQpOwog
ICAgIHNldExvYWRpbmcoZmFsc2UpOwpAQCAtMTEzLDcgKzExNSwxNyBAQCB2b2lkIENhY2hlZElt
YWdlOjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVzCiAgICAgaWYgKG1faW1hZ2UgJiYgIW1faW1hZ2Ut
PmlzTnVsbCgpKQogICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZUNsaWVudCo+KGMpLT5p
bWFnZUNoYW5nZWQodGhpcyk7CiAKKyAgICAvLyBJZiB0aGlzIGltYWdlIGxvYWQgaXMgYmxvY2tl
ZCwgcHJldGVuZCB3ZSBhcmUgbG9hZGluZyBub3cKKyAgICAvLyBzbyB0aGF0IHdlIGRvbid0IGZp
cmUgYW4gb25sb2FkIGV2ZW50IGZyb20gQ2FjaGVkUmVzb3VyY2U6OmRpZEFkZENsaWVudC4KKyAg
ICBib29sIGxvYWRpbmcgPSBpc0xvYWRpbmcoKTsKKyAgICBpZiAoIW1fYXV0b0xvYWQgJiYgIWxv
YWRpbmcpCisgICAgICAgIHNldExvYWRpbmcodHJ1ZSk7CisKICAgICBDYWNoZWRSZXNvdXJjZTo6
ZGlkQWRkQ2xpZW50KGMpOworCisgICAgLy8gUmVzdG9yZSB0aGUgbG9hZGluZyBmbGFnIGlmIHdl
IG1vZGlmaWVkIGl0IGFib3ZlLgorICAgIGlmICghbV9hdXRvTG9hZCAmJiAhbG9hZGluZykKKyAg
ICAgICAgc2V0TG9hZGluZyhmYWxzZSk7CiB9CiAKIHZvaWQgQ2FjaGVkSW1hZ2U6OmFsbENsaWVu
dHNSZW1vdmVkKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFn
ZS5oCShyZXZpc2lvbiAxMDEwMDMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNiArOTQsOCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdlKik7CiAgICAgdmlydHVh
bCB2b2lkIGNoYW5nZWRJblJlY3QoY29uc3QgSW1hZ2UqLCBjb25zdCBJbnRSZWN0Jik7CiAKKyAg
ICB2b2lkIHNldEF1dG9Mb2FkKGJvb2wgYikgeyBtX2F1dG9Mb2FkID0gYjsgfQorICAgIAogcHJp
dmF0ZToKICAgICBJbWFnZSogbG9va3VwT3JDcmVhdGVJbWFnZUZvclJlbmRlcmVyKGNvbnN0IFJl
bmRlck9iamVjdCopOwogCkBAIC0xMTEsNiArMTEzLDcgQEAgcHJpdmF0ZToKICNlbmRpZgogICAg
IFRpbWVyPENhY2hlZEltYWdlPiBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lcjsKICAgICBib29s
IG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZTsKKyAgICBib29sIG1fYXV0b0xvYWQ7CiB9OwogCiBj
bGFzcyBDYWNoZWRJbWFnZUNsaWVudCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZUxvYWRlci5jcHAJKHJldmlzaW9uIDEwMTAwMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw2ICsx
NTgsNyBAQCBDYWNoZWRJbWFnZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlCiAgICAgICAg
IH0KICAgICB9CiAgICAgQ2FjaGVkSW1hZ2UqIHJlc291cmNlID0gc3RhdGljX2Nhc3Q8Q2FjaGVk
SW1hZ2UqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UsIHJl
cXVlc3QsIFN0cmluZygpLCBkZWZhdWx0Q2FjaGVkUmVzb3VyY2VPcHRpb25zKCkpKTsKKyAgICBy
ZXNvdXJjZS0+c2V0QXV0b0xvYWQoYXV0b0xvYWRJbWFnZXMoKSB8fCAoIXJlc291cmNlLT5zdGls
bE5lZWRzTG9hZCgpICYmIHJlc291cmNlLT5pbkNhY2hlKCkpKTsKICAgICBpZiAoYXV0b0xvYWRJ
bWFnZXMoKSAmJiByZXNvdXJjZSAmJiByZXNvdXJjZS0+c3RpbGxOZWVkc0xvYWQoKSkKICAgICAg
ICAgcmVzb3VyY2UtPmxvYWQodGhpcywgZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpKTsK
ICAgICByZXR1cm4gcmVzb3VyY2U7CkBAIC00ODEsNiArNDgyLDEwIEBAIENhY2hlZFJlc291cmNl
KiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6bG8KICAgICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2Ug
PSBjcmVhdGVSZXNvdXJjZSh0eXBlLCByZXF1ZXN0LCBjaGFyc2V0KTsKICAgICAKICAgICBib29s
IGluQ2FjaGUgPSBtZW1vcnlDYWNoZSgpLT5hZGQocmVzb3VyY2UpOworICAgIGJvb2wgc2hvdWxk
TG9hZE5vdyA9IHRydWU7CisKKyAgICBpZiAoIWluQ2FjaGUgJiYgdHlwZSA9PSBDYWNoZWRSZXNv
dXJjZTo6SW1hZ2VSZXNvdXJjZSAmJiAhYXV0b0xvYWRJbWFnZXMoKSkKKyAgICAgICAgc2hvdWxk
TG9hZE5vdyA9IGZhbHNlOwogICAgIAogICAgIC8vIFByZXRlbmQgdGhlIHJlc291cmNlIGlzIGlu
IHRoZSBjYWNoZSwgdG8gcHJldmVudCBpdCBmcm9tIGJlaW5nIGRlbGV0ZWQgZHVyaW5nIHRoZSBs
b2FkKCkgY2FsbC4KICAgICAvLyBGSVhNRTogQ2FjaGVkUmVzb3VyY2Ugc2hvdWxkIGp1c3QgdXNl
IG5vcm1hbCByZWZjb3VudGluZyBpbnN0ZWFkLgpAQCAtNDg4LDcgKzQ5Myw4IEBAIENhY2hlZFJl
c291cmNlKiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6bG8KICAgICAgICAgcmVzb3VyY2UtPnNldElu
Q2FjaGUodHJ1ZSk7CiAgICAgCiAgICAgcmVzb3VyY2UtPnNldExvYWRQcmlvcml0eShwcmlvcml0
eSk7Ci0gICAgcmVzb3VyY2UtPmxvYWQodGhpcywgb3B0aW9ucyk7CisgICAgaWYgKHNob3VsZExv
YWROb3cpCisgICAgICAgIHJlc291cmNlLT5sb2FkKHRoaXMsIG9wdGlvbnMpOwogICAgIAogICAg
IGlmICghaW5DYWNoZSkgewogICAgICAgICByZXNvdXJjZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3Vy
Y2VMb2FkZXIodGhpcyk7CkBAIC02MjksOCArNjM1LDEwIEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VM
b2FkZXI6OnNldEF1dG9Mb2FkSW0KICAgICAgICAgaWYgKHJlc291cmNlLT50eXBlKCkgPT0gQ2Fj
aGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UpIHsKICAgICAgICAgICAgIENhY2hlZEltYWdlKiBp
bWFnZSA9IGNvbnN0X2Nhc3Q8Q2FjaGVkSW1hZ2UqPihzdGF0aWNfY2FzdDxjb25zdCBDYWNoZWRJ
bWFnZSo+KHJlc291cmNlKSk7CiAKLSAgICAgICAgICAgIGlmIChpbWFnZS0+c3RpbGxOZWVkc0xv
YWQoKSkKKyAgICAgICAgICAgIGlmIChpbWFnZS0+c3RpbGxOZWVkc0xvYWQoKSkgeworICAgICAg
ICAgICAgICAgIGltYWdlLT5zZXRBdXRvTG9hZCh0cnVlKTsKICAgICAgICAgICAgICAgICBpbWFn
ZS0+bG9hZCh0aGlzLCBkZWZhdWx0Q2FjaGVkUmVzb3VyY2VPcHRpb25zKCkpOworICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQogfQpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTAxMDAzKQorKysg
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcgQEAKKzIw
MTEtMTEtMjIgQmVuIE11cmRvY2ggIDxiZW5tQGdvb2dsZS5jb20+CisKKyAgICAgICAgSW1hZ2Ug
b25sb2FkIGNhbGxiYWNrIGZpcmVzIHdoZW4gaW1hZ2UgbG9hZGluZyBkaXNhYmxlZC4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNjYxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGEgbGF5b3V0IHRl
c3QgdG8gY292ZXIgYnVnIDcxNjYxLiBFbnN1cmUgdGhhdCB3aGlsZSBpbWFnZSBsb2FkaW5nCisg
ICAgICAgIGlzIGRpc2FibGVkLCB3ZSBkbyBub3QgZmlyZSBhbiBvbmxvYWQgY2FsbGJhY2sgZm9y
IGltYWdlcy4KKworICAgICAgICAqIGZhc3QvaW1hZ2VzL2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxl
ZC1hdXRvbG9hZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvaW1hZ2VzL2xv
YWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9hZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2ltYWdlcy9yZXNvdXJjZXMvbG9hZC1ldmVudC13aXRoLWRpc2FibGVkLWF1dG9sb2FkLmpw
ZzogQWRkZWQuCisKIDIwMTEtMTEtMjIgIFNoaW55YSBLYXdhbmFrYSAgPHNoaW55YWtAZ29vZ2xl
LmNvbT4KIAogICAgICAgICBTcGVsbGNoZWNrIHNob3VsZCBiZSBhYmxlIHRvIHJ1biBhc3luY2hy
b25vdXNseQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvbG9hZC1ldmVudC13aXRoLWRp
c2FibGVkLWF1dG9sb2FkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2ltYWdlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0b2xvYWQtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvbG9hZC1ldmVudC13aXRo
LWRpc2FibGVkLWF1dG9sb2FkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
IEBACitQQVNTCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2xvYWQtZXZlbnQtd2l0
aC1kaXNhYmxlZC1hdXRvbG9hZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
aW1hZ2VzL2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9hZC5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvbG9hZC1ldmVudC13aXRoLWRpc2FibGVkLWF1
dG9sb2FkLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKzxodG1sPgorPGhlYWQ+
CisgICAgPHRpdGxlPlRlc3QgdGhhdCBubyBvbmxvYWQgY2FsbGJhY2sgaXMgZmlyZWQgd2hlbiBp
bWFnZSBsb2FkcyBhcmUgZGlzYWJsZWQgYW5kIG5vIGNhY2hlZCBpbWFnZSBpcyBmb3VuZC4gKGJ1
ZyA3MTY2MSk8L3RpdGxlPgorICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKyAg
ICAgICAgPCEtLQorICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
ICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5kaXNhYmxlSW1hZ2VMb2FkaW5nKCk7CisgICAgICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgZG9jdW1lbnQud3JpdGUoJ1RoaXMgdGVzdCBtdXN0IGJlIHJ1biBpbnNpZGUg
RHVtcFJlbmRlclRyZWUuJyk7CisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiBpbWdMb2FkZWQo
ZSkgeworICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5l
clRleHQgKz0gJ0ZBSUw6IGltYWdlIG9ubG9hZCBmaXJlZCEnOworICAgICAgICAgICAgZmluaXNo
VGVzdCgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiBwYXNzZWQoKSB7
CisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVyVGV4
dCArPSAnUEFTUyc7CisgICAgICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgeworICAgICAgICAgICAgaWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgICAgICBsYXlvdXRUZXN0
Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBs
b2FkZWQoKSB7CisgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHNyYyBvZiB0aGUgaW1hZ2UgZWxl
bWVudCB0byB0cnkgYW5kIHRyaWdnZXIgYW4gb25sb2FkIGNhbGxiYWNrLiBOZWVkcyB0byBiZSBh
c3luYyB0byBlbnN1cmUKKyAgICAgICAgICAgIC8vIHRoYXQgdGhlIGNhbGwgdG8gbGF5b3V0VGVz
dENvbnRyb2xsZXIuZGlzYWJsZUltYWdlTG9hZGluZygpIGFib3ZlIGhhcyB0YWtlbiBlZmZlY3Qu
CisgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2ltZycpLnNyYyA9ICJyZXNvdXJjZXMvYmxvY2tlZC1pbWFnZXMtb25sb2Fk
LmpwZyI7IH0sIDApOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiB3ZSBkb24ndCBn
ZXQgYW4gb25sb2FkIGFmdGVyIDFzLCBjb25zaWRlciB0aGUgdGVzdCBwYXNzZWQuCisgICAgICAg
ICAgICB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgcGFzc2VkKCk7IH0sIDEwMDApOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gLS0+CisgICAgPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eSBvbmxvYWQ9ImxvYWRlZCgpIj4KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKyAgICA8
aW1nIHNyYz0iIiBpZD0iaW1nIiBvbmxvYWQ9ImltZ0xvYWRlZCgpIiAvPgorPC9ib2R5PgorPC9o
dG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcmVzb3VyY2VzL2xvYWQtZXZlbnQt
d2l0aC1kaXNhYmxlZC1hdXRvbG9hZC5qcGcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmls
ZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4Kc3ZuOm1pbWUtdHlwZSA9IGFwcGxpY2F0aW9uL29j
dGV0LXN0cmVhbQoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMv
cmVzb3VyY2VzL2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9hZC5qcGcKX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
XwpBZGRlZDogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbQoKCi85
ai80QUFRU2taSlJnQUJBUUVBWUFCZ0FBRC80UUNBUlhocFpnQUFUVTBBS2dBQUFBZ0FCUUVTQUFN
QUFBQUJBQUVBQUFFYUFBVUEKQUFBQkFBQUFTZ0ViQUFVQUFBQUJBQUFBVWdFb0FBTUFBQUFCQUFJ
QUFJZHBBQVFBQUFBQkFBQUFXZ0FBQUFBQUFBQmdBQUFBQVFBQQpBR0FBQUFBQkFBS2dBZ0FFQUFB
QUFRQUFBQkNnQXdBRUFBQUFBUUFBQUJBQUFBQUEvOXNBUXdBQ0FRRUNBUUVDQWdFQ0FnSUNBZ01G
CkF3TURBd01HQkFRREJRY0dCd2NIQmdZR0J3Z0xDUWNJQ2dnR0Jna05DUW9MQ3d3TURBY0pEUTRO
REE0TERBd0wvOXNBUXdFQ0FnSUQKQWdNRkF3TUZDd2dHQ0FzTEN3c0xDd3NMQ3dzTEN3c0xDd3NM
Q3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTApDd3NMLzhBQUVRZ0FFQUFR
QXdFaUFBSVJBUU1SQWYvRUFCOEFBQUVGQVFFQkFRRUJBQUFBQUFBQUFBQUJBZ01FQlFZSENBa0tD
Ly9FCkFMVVFBQUlCQXdNQ0JBTUZCUVFFQUFBQmZRRUNBd0FFRVFVU0lURkJCaE5SWVFjaWNSUXln
WkdoQ0NOQ3NjRVZVdEh3SkROaWNvSUoKQ2hZWEdCa2FKU1luS0NrcU5EVTJOemc1T2tORVJVWkhT
RWxLVTFSVlZsZFlXVnBqWkdWbVoyaHBhbk4wZFhaM2VIbDZnNFNGaG9lSQppWXFTazVTVmxwZVlt
WnFpbzZTbHBxZW9xYXF5czdTMXRyZTR1YnJDdzhURnhzZkl5Y3JTMDlUVjF0ZlkyZHJoNHVQazVl
Ym42T25xCjhmTHo5UFgyOS9qNSt2L0VBQjhCQUFNQkFRRUJBUUVCQVFFQUFBQUFBQUFCQWdNRUJR
WUhDQWtLQy8vRUFMVVJBQUlCQWdRRUF3UUgKQlFRRUFBRUNkd0FCQWdNUkJBVWhNUVlTUVZFSFlY
RVRJaktCQ0JSQ2thR3h3UWtqTTFMd0ZXSnkwUW9XSkRUaEpmRVhHQmthSmljbwpLU28xTmpjNE9U
cERSRVZHUjBoSlNsTlVWVlpYV0ZsYVkyUmxabWRvYVdwemRIVjJkM2g1ZW9LRGhJV0doNGlKaXBL
VGxKV1dsNWlaCm1xS2pwS1dtcDZpcHFyS3p0TFcydDdpNXVzTER4TVhHeDhqSnl0TFQxTlhXMTlq
WjJ1TGo1T1htNStqcDZ2THo5UFgyOS9qNSt2L2EKQUF3REFRQUNFUU1SQUQ4QTkwb29vcitLei9E
OC85az0KCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116241</attachid>
            <date>2011-11-22 10:28:12 -0800</date>
            <delta_ts>2011-11-24 10:12:18 -0800</delta_ts>
            <desc>Fix crash in last patch :)</desc>
            <filename>71661-1.txt</filename>
            <type>text/plain</type>
            <size>11174</size>
            <attacher name="Ben Murdoch">benm</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTAwMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMyIEBACisyMDExLTExLTIyICBCZW4gTXVy
ZG9jaCAgPGJlbm1AZ29vZ2xlLmNvbT4KKworICAgICAgICBJbWFnZSBvbmxvYWQgY2FsbGJhY2sg
ZmlyZXMgd2hlbiBpbWFnZSBsb2FkaW5nIGRpc2FibGVkLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdoZW4gaW1hZ2UgbG9hZGluZyBpcyBk
aXNhYmxlZCB3aXRoIHRoZSBXZWJDb3JlOjpTZXR0aW5nczo6c2V0SW1hZ2VzTG9hZGVkQXV0b21h
dGljYWxseQorICAgICAgICBBUEksIG9ubG9hZCBjYWxsYmFja3Mgd2VyZSBiZWluZyBmaXJlZCBk
ZXNwaXRlIGltYWdlcyBub3QgYmVpbmcgbG9hZGVkLiBCZWNhdXNlIG9mIHRoaXMsCisgICAgICAg
IGlmIGltYWdlIGxvYWRzIHdlcmUgc3Vic3NlcXVlbnRseSByZS1lbmFibGVkLCB3ZSB3b3VsZCBu
b3QgZ2V0IGFuIG9ubG9hZCBjYWxsYmFjayBhdCB0aGF0CisgICAgICAgIHRpbWUgKGFzIG9uZSBo
YWQgYWxyZWFkeSBiZWVuIG1hZGUpLgorCisgICAgICAgIEFmdGVyIGV4YW1pbmluZyB0aGUgYmVo
YXZpb3Igb2Ygb3RoZXIgYnJvd3NlcnMgaW4gdGhpcyBjaXJjdW1zdGFuY2UsIHRoZSBidWcgYXBw
ZXJhcyB0byBiZSB0aGF0CisgICAgICAgIHdlIGZpcmUgYW4gb25sb2FkIGNhbGxiYWNrIHdoZW4g
YW4gaW1hZ2UgaXMgcmVxdWVzdGVkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpbWFnZSBsb2FkaW5n
IGlzCisgICAgICAgIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFdlIHNob3VsZCBub3QgZmlyZSB0aGUg
Y2FsbGJhY2sgd2hlbiBsb2FkaW5nIGlzIGRpc2FibGVkLiAoTm90ZSB0aGF0IHdlCisgICAgICAg
IHdvdWxkbid0IGFjdHVhbGx5IGxvYWQgdGhlIGltYWdlIGlmIGxvYWRpbmcgd2FzIGRpc2FibGVk
LCB0aGF0IGZ1bmN0aW9uYWxpdHkgaXMgd29ya2luZyBhcworICAgICAgICBleHBlY3RlZC4pCisK
KyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwOiBQcmV0ZW5kIHRoZSBpbWFn
ZSBpcyBiZWluZyBsb2FkZWQgaWYgYXV0b21hdGljIGltYWdlIGxvYWRpbmcgaXMKKyAgICAgICAg
ICAgIGRpc2FibGVkIHRvIGF2b2lkIGFuIG9ubG9hZCBjYWxsYmFjayBiZWluZyB0cmlnZ2VyZWQg
YnkgdGhlIHN1cGVyY2xhc3MuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmg6
IEFkZCBhIGZsYWcgdG8gZGV0ZXJtaW5lIGlmIHRoZSBpbWFnZSBzaG91bGQgYmUgYXV0b2xvYWRl
ZC4KKyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlc3RJbWFnZSk6IFNldCBh
IGZsYWcgb24gdGhlIHJlc291cmNlIHRvIGlkZW50aWZ5IHdoZXRoZXIKKyAgICAgICAgICAgIGl0
IHNob3VsZCBiZSBhdXRvbG9hZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FjaGVkUmVzb3VyY2VM
b2FkZXI6OmxvYWRSZXNvdXJjZSk6IERvIG5vdCBhdHRlbXB0IHRvIGxvYWQgYW4gaW1hZ2UgcmVz
b3VyY2UgaWYgYXV0b21hdGljCisgICAgICAgICAgICBsb2FkcyBhcmUgZGlzYWJsZWQgYW5kIHRo
ZSBpbWFnZSBpcyB1bmNhY2hlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9h
ZGVyOjpzZXRBdXRvTG9hZEltYWdlcyk6IFVwZGF0ZSB0aGUgYXV0b2xvYWQgZmxhZyB3aGVuIGlt
YWdlIGxvYWRzIGFyZQorICAgICAgICAgICAgZW5hYmxlZCBhZ2Fpbi4KKwogMjAxMS0xMS0yMiAg
U2hpbnlhIEthd2FuYWthICA8c2hpbnlha0Bnb29nbGUuY29tPgogCiAgICAgICAgIFNwZWxsY2hl
Y2sgc2hvdWxkIGJlIGFibGUgdG8gcnVuIGFzeW5jaHJvbm91c2x5LgpJbmRleDogU291cmNlL1dl
YkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCShyZXZpc2lvbiAxMDEwMDMpCisr
KyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01OCw2ICs1OCw3IEBAIENhY2hlZEltYWdlOjpDYWNoZWRJbWFnZShjb25zdCBSZXNv
dXJjZVIKICAgICAsIG1faW1hZ2UoMCkKICAgICAsIG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVy
KHRoaXMsICZDYWNoZWRJbWFnZTo6ZGVjb2RlZERhdGFEZWxldGlvblRpbWVyRmlyZWQpCiAgICAg
LCBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2UodHJ1ZSkKKyAgICAsIG1fYXV0b0xvYWQodHJ1ZSkK
IHsKICAgICBzZXRTdGF0dXMoVW5rbm93bik7CiB9CkBAIC02Nyw2ICs2OCw3IEBAIENhY2hlZElt
YWdlOjpDYWNoZWRJbWFnZShJbWFnZSogaW1hZ2UpCiAgICAgLCBtX2ltYWdlKGltYWdlKQogICAg
ICwgbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXIodGhpcywgJkNhY2hlZEltYWdlOjpkZWNvZGVk
RGF0YURlbGV0aW9uVGltZXJGaXJlZCkKICAgICAsIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSh0
cnVlKQorICAgICwgbV9hdXRvTG9hZCh0cnVlKQogewogICAgIHNldFN0YXR1cyhDYWNoZWQpOwog
ICAgIHNldExvYWRpbmcoZmFsc2UpOwpAQCAtMTEzLDcgKzExNSwxNyBAQCB2b2lkIENhY2hlZElt
YWdlOjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVzCiAgICAgaWYgKG1faW1hZ2UgJiYgIW1faW1hZ2Ut
PmlzTnVsbCgpKQogICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZUNsaWVudCo+KGMpLT5p
bWFnZUNoYW5nZWQodGhpcyk7CiAKKyAgICAvLyBJZiB0aGlzIGltYWdlIGxvYWQgaXMgYmxvY2tl
ZCwgcHJldGVuZCB3ZSBhcmUgbG9hZGluZyBub3cKKyAgICAvLyBzbyB0aGF0IHdlIGRvbid0IGZp
cmUgYW4gb25sb2FkIGV2ZW50IGZyb20gQ2FjaGVkUmVzb3VyY2U6OmRpZEFkZENsaWVudC4KKyAg
ICBib29sIGxvYWRpbmcgPSBpc0xvYWRpbmcoKTsKKyAgICBpZiAoIW1fYXV0b0xvYWQgJiYgIWxv
YWRpbmcpCisgICAgICAgIHNldExvYWRpbmcodHJ1ZSk7CisKICAgICBDYWNoZWRSZXNvdXJjZTo6
ZGlkQWRkQ2xpZW50KGMpOworCisgICAgLy8gUmVzdG9yZSB0aGUgbG9hZGluZyBmbGFnIGlmIHdl
IG1vZGlmaWVkIGl0IGFib3ZlLgorICAgIGlmICghbV9hdXRvTG9hZCAmJiAhbG9hZGluZykKKyAg
ICAgICAgc2V0TG9hZGluZyhmYWxzZSk7CiB9CiAKIHZvaWQgQ2FjaGVkSW1hZ2U6OmFsbENsaWVu
dHNSZW1vdmVkKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFn
ZS5oCShyZXZpc2lvbiAxMDEwMDMpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNiArOTQsOCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdlKik7CiAgICAgdmlydHVh
bCB2b2lkIGNoYW5nZWRJblJlY3QoY29uc3QgSW1hZ2UqLCBjb25zdCBJbnRSZWN0Jik7CiAKKyAg
ICB2b2lkIHNldEF1dG9Mb2FkKGJvb2wgYikgeyBtX2F1dG9Mb2FkID0gYjsgfQorICAgIAogcHJp
dmF0ZToKICAgICBJbWFnZSogbG9va3VwT3JDcmVhdGVJbWFnZUZvclJlbmRlcmVyKGNvbnN0IFJl
bmRlck9iamVjdCopOwogCkBAIC0xMTEsNiArMTEzLDcgQEAgcHJpdmF0ZToKICNlbmRpZgogICAg
IFRpbWVyPENhY2hlZEltYWdlPiBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lcjsKICAgICBib29s
IG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZTsKKyAgICBib29sIG1fYXV0b0xvYWQ7CiB9OwogCiBj
bGFzcyBDYWNoZWRJbWFnZUNsaWVudCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZUxvYWRlci5jcHAJKHJldmlzaW9uIDEwMTAwMykKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw4ICsx
NTgsMTEgQEAgQ2FjaGVkSW1hZ2UqIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZQogICAgICAg
ICB9CiAgICAgfQogICAgIENhY2hlZEltYWdlKiByZXNvdXJjZSA9IHN0YXRpY19jYXN0PENhY2hl
ZEltYWdlKj4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlLCBy
ZXF1ZXN0LCBTdHJpbmcoKSwgZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpKSk7Ci0gICAg
aWYgKGF1dG9Mb2FkSW1hZ2VzKCkgJiYgcmVzb3VyY2UgJiYgcmVzb3VyY2UtPnN0aWxsTmVlZHNM
b2FkKCkpCi0gICAgICAgIHJlc291cmNlLT5sb2FkKHRoaXMsIGRlZmF1bHRDYWNoZWRSZXNvdXJj
ZU9wdGlvbnMoKSk7CisgICAgaWYgKHJlc291cmNlKSB7CisgICAgICAgIHJlc291cmNlLT5zZXRB
dXRvTG9hZChhdXRvTG9hZEltYWdlcygpIHx8ICghcmVzb3VyY2UtPnN0aWxsTmVlZHNMb2FkKCkg
JiYgcmVzb3VyY2UtPmluQ2FjaGUoKSkpOworICAgICAgICBpZiAoYXV0b0xvYWRJbWFnZXMoKSAm
JiByZXNvdXJjZS0+c3RpbGxOZWVkc0xvYWQoKSkKKyAgICAgICAgICAgIHJlc291cmNlLT5sb2Fk
KHRoaXMsIGRlZmF1bHRDYWNoZWRSZXNvdXJjZU9wdGlvbnMoKSk7CisgICAgfQogICAgIHJldHVy
biByZXNvdXJjZTsKIH0KIApAQCAtNDgxLDYgKzQ4NCwxMCBAQCBDYWNoZWRSZXNvdXJjZSogQ2Fj
aGVkUmVzb3VyY2VMb2FkZXI6OmxvCiAgICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gY3Jl
YXRlUmVzb3VyY2UodHlwZSwgcmVxdWVzdCwgY2hhcnNldCk7CiAgICAgCiAgICAgYm9vbCBpbkNh
Y2hlID0gbWVtb3J5Q2FjaGUoKS0+YWRkKHJlc291cmNlKTsKKyAgICBib29sIHNob3VsZExvYWRO
b3cgPSB0cnVlOworCisgICAgaWYgKCFpbkNhY2hlICYmIHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6
OkltYWdlUmVzb3VyY2UgJiYgIWF1dG9Mb2FkSW1hZ2VzKCkpCisgICAgICAgIHNob3VsZExvYWRO
b3cgPSBmYWxzZTsKICAgICAKICAgICAvLyBQcmV0ZW5kIHRoZSByZXNvdXJjZSBpcyBpbiB0aGUg
Y2FjaGUsIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyBkZWxldGVkIGR1cmluZyB0aGUgbG9hZCgp
IGNhbGwuCiAgICAgLy8gRklYTUU6IENhY2hlZFJlc291cmNlIHNob3VsZCBqdXN0IHVzZSBub3Jt
YWwgcmVmY291bnRpbmcgaW5zdGVhZC4KQEAgLTQ4OCw3ICs0OTUsOCBAQCBDYWNoZWRSZXNvdXJj
ZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmxvCiAgICAgICAgIHJlc291cmNlLT5zZXRJbkNhY2hl
KHRydWUpOwogICAgIAogICAgIHJlc291cmNlLT5zZXRMb2FkUHJpb3JpdHkocHJpb3JpdHkpOwot
ICAgIHJlc291cmNlLT5sb2FkKHRoaXMsIG9wdGlvbnMpOworICAgIGlmIChzaG91bGRMb2FkTm93
KQorICAgICAgICByZXNvdXJjZS0+bG9hZCh0aGlzLCBvcHRpb25zKTsKICAgICAKICAgICBpZiAo
IWluQ2FjaGUpIHsKICAgICAgICAgcmVzb3VyY2UtPnNldE93bmluZ0NhY2hlZFJlc291cmNlTG9h
ZGVyKHRoaXMpOwpAQCAtNjI5LDggKzYzNywxMCBAQCB2b2lkIENhY2hlZFJlc291cmNlTG9hZGVy
OjpzZXRBdXRvTG9hZEltCiAgICAgICAgIGlmIChyZXNvdXJjZS0+dHlwZSgpID09IENhY2hlZFJl
c291cmNlOjpJbWFnZVJlc291cmNlKSB7CiAgICAgICAgICAgICBDYWNoZWRJbWFnZSogaW1hZ2Ug
PSBjb25zdF9jYXN0PENhY2hlZEltYWdlKj4oc3RhdGljX2Nhc3Q8Y29uc3QgQ2FjaGVkSW1hZ2Uq
PihyZXNvdXJjZSkpOwogCi0gICAgICAgICAgICBpZiAoaW1hZ2UtPnN0aWxsTmVlZHNMb2FkKCkp
CisgICAgICAgICAgICBpZiAoaW1hZ2UtPnN0aWxsTmVlZHNMb2FkKCkpIHsKKyAgICAgICAgICAg
ICAgICBpbWFnZS0+c2V0QXV0b0xvYWQodHJ1ZSk7CiAgICAgICAgICAgICAgICAgaW1hZ2UtPmxv
YWQodGhpcywgZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpKTsKKyAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTAwMykKKysrIExheW91
dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDExLTEx
LTIyIEJlbiBNdXJkb2NoICA8YmVubUBnb29nbGUuY29tPgorCisgICAgICAgIEltYWdlIG9ubG9h
ZCBjYWxsYmFjayBmaXJlcyB3aGVuIGltYWdlIGxvYWRpbmcgZGlzYWJsZWQuCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTY2MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIGxheW91dCB0ZXN0IHRv
IGNvdmVyIGJ1ZyA3MTY2MS4gRW5zdXJlIHRoYXQgd2hpbGUgaW1hZ2UgbG9hZGluZworICAgICAg
ICBpcyBkaXNhYmxlZCwgd2UgZG8gbm90IGZpcmUgYW4gb25sb2FkIGNhbGxiYWNrIGZvciBpbWFn
ZXMuCisKKyAgICAgICAgKiBmYXN0L2ltYWdlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0
b2xvYWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ltYWdlcy9sb2FkLWV2
ZW50LXdpdGgtZGlzYWJsZWQtYXV0b2xvYWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9p
bWFnZXMvcmVzb3VyY2VzL2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9hZC5qcGc6IEFk
ZGVkLgorCiAyMDExLTExLTIyICBTaGlueWEgS2F3YW5ha2EgIDxzaGlueWFrQGdvb2dsZS5jb20+
CiAKICAgICAgICAgU3BlbGxjaGVjayBzaG91bGQgYmUgYWJsZSB0byBydW4gYXN5bmNocm9ub3Vz
bHkKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxl
ZC1hdXRvbG9hZC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9p
bWFnZXMvbG9hZC1ldmVudC13aXRoLWRpc2FibGVkLWF1dG9sb2FkLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2xvYWQtZXZlbnQtd2l0aC1kaXNh
YmxlZC1hdXRvbG9hZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMiBAQAor
UEFTUworCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9sb2FkLWV2ZW50LXdpdGgtZGlz
YWJsZWQtYXV0b2xvYWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ltYWdl
cy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0b2xvYWQuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9h
ZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACis8aHRtbD4KKzxoZWFkPgorICAg
IDx0aXRsZT5UZXN0IHRoYXQgbm8gb25sb2FkIGNhbGxiYWNrIGlzIGZpcmVkIHdoZW4gaW1hZ2Ug
bG9hZHMgYXJlIGRpc2FibGVkIGFuZCBubyBjYWNoZWQgaW1hZ2UgaXMgZm91bmQuIChidWcgNzE2
NjEpPC90aXRsZT4KKyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAg
IDwhLS0KKyAgICAgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZGlzYWJsZUltYWdlTG9hZGluZygpOworICAgICAgICAgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIGRvY3VtZW50LndyaXRlKCdUaGlzIHRlc3QgbXVzdCBiZSBydW4gaW5zaWRlIER1bXBS
ZW5kZXJUcmVlLicpOworICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gaW1nTG9hZGVkKGUpIHsK
KyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuaW5uZXJUZXh0
ICs9ICdGQUlMOiBpbWFnZSBvbmxvYWQgZmlyZWQhJzsKKyAgICAgICAgICAgIGZpbmlzaFRlc3Qo
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gcGFzc2VkKCkgeworICAg
ICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5lclRleHQgKz0g
J1BBU1MnOworICAgICAgICAgICAgZmluaXNoVGVzdCgpOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICAgICAgICAgIGlmICh3aW5k
b3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZSgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gbG9hZGVk
KCkgeworICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBzcmMgb2YgdGhlIGltYWdlIGVsZW1lbnQg
dG8gdHJ5IGFuZCB0cmlnZ2VyIGFuIG9ubG9hZCBjYWxsYmFjay4gTmVlZHMgdG8gYmUgYXN5bmMg
dG8gZW5zdXJlCisgICAgICAgICAgICAvLyB0aGF0IHRoZSBjYWxsIHRvIGxheW91dFRlc3RDb250
cm9sbGVyLmRpc2FibGVJbWFnZUxvYWRpbmcoKSBhYm92ZSBoYXMgdGFrZW4gZWZmZWN0LgorICAg
ICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCdpbWcnKS5zcmMgPSAicmVzb3VyY2VzL2Jsb2NrZWQtaW1hZ2VzLW9ubG9hZC5qcGci
OyB9LCAwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZ2V0IGFu
IG9ubG9hZCBhZnRlciAxcywgY29uc2lkZXIgdGhlIHRlc3QgcGFzc2VkLgorICAgICAgICAgICAg
d2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHBhc3NlZCgpOyB9LCAxMDAwKTsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIC0tPgorICAgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHkgb25s
b2FkPSJsb2FkZWQoKSI+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisgICAgPGltZyBz
cmM9IiIgaWQ9ImltZyIgb25sb2FkPSJpbWdMb2FkZWQoKSIgLz4KKzwvYm9keT4KKzwvaHRtbD4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL3Jlc291cmNlcy9sb2FkLWV2ZW50LXdpdGgt
ZGlzYWJsZWQtYXV0b2xvYWQuanBnCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFy
a2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL3Jlc291
cmNlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0b2xvYWQuanBnCl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRk
ZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0KCgovOWovNEFB
UVNrWkpSZ0FCQVFFQVlBQmdBQUQvNFFDQVJYaHBaZ0FBVFUwQUtnQUFBQWdBQlFFU0FBTUFBQUFC
QUFFQUFBRWFBQVVBCkFBQUJBQUFBU2dFYkFBVUFBQUFCQUFBQVVnRW9BQU1BQUFBQkFBSUFBSWRw
QUFRQUFBQUJBQUFBV2dBQUFBQUFBQUJnQUFBQUFRQUEKQUdBQUFBQUJBQUtnQWdBRUFBQUFBUUFB
QUJDZ0F3QUVBQUFBQVFBQUFCQUFBQUFBLzlzQVF3QUNBUUVDQVFFQ0FnRUNBZ0lDQWdNRgpBd01E
QXdNR0JBUURCUWNHQndjSEJnWUdCd2dMQ1FjSUNnZ0dCZ2tOQ1FvTEN3d01EQWNKRFE0TkRBNExE
QXdMLzlzQVF3RUNBZ0lECkFnTUZBd01GQ3dnR0NBc0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xD
d3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0wKQ3dzTC84QUFFUWdBRUFBUUF3RWlB
QUlSQVFNUkFmL0VBQjhBQUFFRkFRRUJBUUVCQUFBQUFBQUFBQUFCQWdNRUJRWUhDQWtLQy8vRQpB
TFVRQUFJQkF3TUNCQU1GQlFRRUFBQUJmUUVDQXdBRUVRVVNJVEZCQmhOUllRY2ljUlF5Z1pHaEND
TkNzY0VWVXRId0pETmljb0lKCkNoWVhHQmthSlNZbktDa3FORFUyTnpnNU9rTkVSVVpIU0VsS1Ux
UlZWbGRZV1ZwalpHVm1aMmhwYW5OMGRYWjNlSGw2ZzRTRmhvZUkKaVlxU2s1U1ZscGVZbVpxaW82
U2xwcWVvcWFxeXM3UzF0cmU0dWJyQ3c4VEZ4c2ZJeWNyUzA5VFYxdGZZMmRyaDR1UGs1ZWJuNk9u
cQo4Zkx6OVBYMjkvajUrdi9FQUI4QkFBTUJBUUVCQVFFQkFRRUFBQUFBQUFBQkFnTUVCUVlIQ0Fr
S0MvL0VBTFVSQUFJQkFnUUVBd1FICkJRUUVBQUVDZHdBQkFnTVJCQVVoTVFZU1FWRUhZWEVUSWpL
QkNCUkNrYUd4d1Frak0xTHdGV0p5MFFvV0pEVGhKZkVYR0JrYUppY28KS1NvMU5qYzRPVHBEUkVW
R1IwaEpTbE5VVlZaWFdGbGFZMlJsWm1kb2FXcHpkSFYyZDNoNWVvS0RoSVdHaDRpSmlwS1RsSldX
bDVpWgptcUtqcEtXbXA2aXBxckt6dExXMnQ3aTV1c0xEeE1YR3g4akp5dExUMU5YVzE5aloydUxq
NU9YbTUranA2dkx6OVBYMjkvajUrdi9hCkFBd0RBUUFDRVFNUkFEOEE5MG9vb3IrS3ovRDgvOWs9
Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116521</attachid>
            <date>2011-11-24 10:12:18 -0800</date>
            <delta_ts>2011-11-28 10:25:31 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>71661-2.txt</filename>
            <type>text/plain</type>
            <size>14267</size>
            <attacher name="Ben Murdoch">benm</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTEzNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDExLTExLTIyICBCZW4gTXVy
ZG9jaCAgPGJlbm1AZ29vZ2xlLmNvbT4KKworICAgICAgICBJbWFnZSBvbmxvYWQgY2FsbGJhY2sg
ZmlyZXMgd2hlbiBpbWFnZSBsb2FkaW5nIGRpc2FibGVkLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdoZW4gaW1hZ2UgbG9hZGluZyBpcyBk
aXNhYmxlZCB3aXRoIHRoZSBXZWJDb3JlOjpTZXR0aW5nczo6c2V0SW1hZ2VzTG9hZGVkQXV0b21h
dGljYWxseQorICAgICAgICBBUEksIG9ubG9hZCBjYWxsYmFja3Mgd2VyZSBiZWluZyBmaXJlZCBk
ZXNwaXRlIGltYWdlcyBub3QgYmVpbmcgbG9hZGVkLiBCZWNhdXNlIG9mIHRoaXMsCisgICAgICAg
IGlmIGltYWdlIGxvYWRzIHdlcmUgc3Vic2VxdWVudGx5IHJlLWVuYWJsZWQsIHdlIHdvdWxkIG5v
dCBnZXQgYW4gb25sb2FkIGNhbGxiYWNrIGF0IHRoYXQKKyAgICAgICAgdGltZSAoYXMgb25lIGhh
ZCBhbHJlYWR5IGJlZW4gbWFkZSkuCisKKyAgICAgICAgQWZ0ZXIgZXhhbWluaW5nIHRoZSBiZWhh
dmlvciBvZiBvdGhlciBicm93c2VycyBpbiB0aGlzIGNpcmN1bXN0YW5jZSwgdGhlIGJ1ZyBhcHBl
YXJzIHRvIGJlIHRoYXQKKyAgICAgICAgd2UgZmlyZSBhbiBvbmxvYWQgY2FsbGJhY2sgd2hlbiBh
biBpbWFnZSBpcyByZXF1ZXN0ZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGltYWdlIGxvYWRpbmcg
aXMKKyAgICAgICAgZW5hYmxlZCBvciBkaXNhYmxlZC4gV2Ugc2hvdWxkIG5vdCBmaXJlIHRoZSBj
YWxsYmFjayB3aGVuIGxvYWRpbmcgaXMgZGlzYWJsZWQuIChOb3RlIHRoYXQgd2UKKyAgICAgICAg
d291bGRuJ3QgYWN0dWFsbHkgbG9hZCB0aGUgaW1hZ2UgaWYgbG9hZGluZyB3YXMgZGlzYWJsZWQs
IHRoYXQgZnVuY3Rpb25hbGl0eSBpcyB3b3JraW5nIGFzCisgICAgICAgIGV4cGVjdGVkLikKKwor
ICAgICAgICBUZXN0czogZmFzdC9pbWFnZXMvbG9hZC1ldmVudC13aXRoLWRpc2FibGVkLWF1dG9s
b2FkLWNhY2hlZC5odG1sCisgICAgICAgICAgICAgICBmYXN0L2ltYWdlcy9sb2FkLWV2ZW50LXdp
dGgtZGlzYWJsZWQtYXV0b2xvYWQuaHRtbAorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hl
ZEltYWdlLmNwcDogUHJldGVuZCB0aGUgaW1hZ2UgaXMgYmVpbmcgbG9hZGVkIGlmIGF1dG9tYXRp
YyBpbWFnZSBsb2FkaW5nIGlzCisgICAgICAgICAgICBkaXNhYmxlZCB0byBhdm9pZCBhbiBvbmxv
YWQgY2FsbGJhY2sgYmVpbmcgdHJpZ2dlcmVkIGJ5IHRoZSBzdXBlcmNsYXNzLgorICAgICAgICAq
IGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oOiBBZGQgYSBmbGFnIHRvIGRldGVybWluZSBpZiB0
aGUgaW1hZ2Ugc2hvdWxkIGJlIGF1dG9sb2FkZWQuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNl
TG9hZGVyOjpyZXF1ZXN0SW1hZ2UpOiBTZXQgYSBmbGFnIG9uIHRoZSByZXNvdXJjZSB0byBpZGVu
dGlmeSB3aGV0aGVyCisgICAgICAgICAgICBpdCBzaG91bGQgYmUgYXV0b2xvYWRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpsb2FkUmVzb3VyY2UpOiBEbyBub3Qg
YXR0ZW1wdCB0byBsb2FkIGFuIGltYWdlIHJlc291cmNlIGlmIGF1dG9tYXRpYworICAgICAgICAg
ICAgbG9hZHMgYXJlIGRpc2FibGVkIGFuZCB0aGUgaW1hZ2UgaXMgdW5jYWNoZWQuCisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2V0QXV0b0xvYWRJbWFnZXMpOiBVcGRh
dGUgdGhlIGF1dG9sb2FkIGZsYWcgd2hlbiBpbWFnZSBsb2FkcyBhcmUKKyAgICAgICAgICAgIGVu
YWJsZWQgYWdhaW4uCisKIDIwMTEtMTEtMjQgIFRvciBBcm5lIFZlc3Riw7ggIDx0b3IuYXJuZS52
ZXN0Ym9Abm9raWEuY29tPgogCiAgICAgICAgIFtRdF0gR2V0IHJpZCBvZiB0aGUgYnVpbGREaXJG
b3JTb3VyY2UoKSBmdW5jdGlvbiBpbiB0aGUgYnVpbGQgc3lzdGVtCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAJKHJldmlzaW9uIDEwMTEzMCkKKysr
IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDYgKzU4LDcgQEAgQ2FjaGVkSW1hZ2U6OkNhY2hlZEltYWdlKGNvbnN0IFJlc291
cmNlUgogICAgICwgbV9pbWFnZSgwKQogICAgICwgbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXIo
dGhpcywgJkNhY2hlZEltYWdlOjpkZWNvZGVkRGF0YURlbGV0aW9uVGltZXJGaXJlZCkKICAgICAs
IG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSh0cnVlKQorICAgICwgbV9hdXRvTG9hZCh0cnVlKQog
ewogICAgIHNldFN0YXR1cyhVbmtub3duKTsKIH0KQEAgLTY3LDYgKzY4LDcgQEAgQ2FjaGVkSW1h
Z2U6OkNhY2hlZEltYWdlKEltYWdlKiBpbWFnZSkKICAgICAsIG1faW1hZ2UoaW1hZ2UpCiAgICAg
LCBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lcih0aGlzLCAmQ2FjaGVkSW1hZ2U6OmRlY29kZWRE
YXRhRGVsZXRpb25UaW1lckZpcmVkKQogICAgICwgbV9zaG91bGRQYWludEJyb2tlbkltYWdlKHRy
dWUpCisgICAgLCBtX2F1dG9Mb2FkKHRydWUpCiB7CiAgICAgc2V0U3RhdHVzKENhY2hlZCk7CiAg
ICAgc2V0TG9hZGluZyhmYWxzZSk7CkBAIC0xMTMsNyArMTE1LDE3IEBAIHZvaWQgQ2FjaGVkSW1h
Z2U6OmRpZEFkZENsaWVudChDYWNoZWRSZXMKICAgICBpZiAobV9pbWFnZSAmJiAhbV9pbWFnZS0+
aXNOdWxsKCkpCiAgICAgICAgIHN0YXRpY19jYXN0PENhY2hlZEltYWdlQ2xpZW50Kj4oYyktPmlt
YWdlQ2hhbmdlZCh0aGlzKTsKIAorICAgIC8vIElmIHRoaXMgaW1hZ2UgbG9hZCBpcyBibG9ja2Vk
LCBwcmV0ZW5kIHdlIGFyZSBsb2FkaW5nIG5vdworICAgIC8vIHNvIHRoYXQgd2UgZG9uJ3QgZmly
ZSBhbiBvbmxvYWQgZXZlbnQgZnJvbSBDYWNoZWRSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50LgorICAg
IGJvb2wgbG9hZGluZyA9IGlzTG9hZGluZygpOworICAgIGlmICghbV9hdXRvTG9hZCAmJiAhbG9h
ZGluZykKKyAgICAgICAgc2V0TG9hZGluZyh0cnVlKTsKKwogICAgIENhY2hlZFJlc291cmNlOjpk
aWRBZGRDbGllbnQoYyk7CisKKyAgICAvLyBSZXN0b3JlIHRoZSBsb2FkaW5nIGZsYWcgaWYgd2Ug
bW9kaWZpZWQgaXQgYWJvdmUuCisgICAgaWYgKCFtX2F1dG9Mb2FkICYmICFsb2FkaW5nKQorICAg
ICAgICBzZXRMb2FkaW5nKGZhbHNlKTsKIH0KIAogdm9pZCBDYWNoZWRJbWFnZTo6YWxsQ2xpZW50
c1JlbW92ZWQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdl
LmgJKHJldmlzaW9uIDEwMTEzMCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5NCw4IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHZvaWQgYW5pbWF0aW9uQWR2YW5jZWQoY29uc3QgSW1hZ2UqKTsKICAgICB2aXJ0dWFs
IHZvaWQgY2hhbmdlZEluUmVjdChjb25zdCBJbWFnZSosIGNvbnN0IEludFJlY3QmKTsKIAorICAg
IHZvaWQgc2V0QXV0b0xvYWQoYm9vbCBiKSB7IG1fYXV0b0xvYWQgPSBiOyB9CisgICAgCiBwcml2
YXRlOgogICAgIEltYWdlKiBsb29rdXBPckNyZWF0ZUltYWdlRm9yUmVuZGVyZXIoY29uc3QgUmVu
ZGVyT2JqZWN0Kik7CiAKQEAgLTExMSw2ICsxMTMsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAg
VGltZXI8Q2FjaGVkSW1hZ2U+IG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyOwogICAgIGJvb2wg
bV9zaG91bGRQYWludEJyb2tlbkltYWdlOworICAgIGJvb2wgbV9hdXRvTG9hZDsKIH07CiAKIGNs
YXNzIENhY2hlZEltYWdlQ2xpZW50IDogcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNl
TG9hZGVyLmNwcAkocmV2aXNpb24gMTAxMTMwKQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDggKzE1
OCwxMSBAQCBDYWNoZWRJbWFnZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnJlcXVlCiAgICAgICAg
IH0KICAgICB9CiAgICAgQ2FjaGVkSW1hZ2UqIHJlc291cmNlID0gc3RhdGljX2Nhc3Q8Q2FjaGVk
SW1hZ2UqPihyZXF1ZXN0UmVzb3VyY2UoQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UsIHJl
cXVlc3QsIFN0cmluZygpLCBkZWZhdWx0Q2FjaGVkUmVzb3VyY2VPcHRpb25zKCkpKTsKLSAgICBp
ZiAoYXV0b0xvYWRJbWFnZXMoKSAmJiByZXNvdXJjZSAmJiByZXNvdXJjZS0+c3RpbGxOZWVkc0xv
YWQoKSkKLSAgICAgICAgcmVzb3VyY2UtPmxvYWQodGhpcywgZGVmYXVsdENhY2hlZFJlc291cmNl
T3B0aW9ucygpKTsKKyAgICBpZiAocmVzb3VyY2UpIHsKKyAgICAgICAgcmVzb3VyY2UtPnNldEF1
dG9Mb2FkKGF1dG9Mb2FkSW1hZ2VzKCkgfHwgKCFyZXNvdXJjZS0+c3RpbGxOZWVkc0xvYWQoKSAm
JiByZXNvdXJjZS0+aW5DYWNoZSgpKSk7CisgICAgICAgIGlmIChhdXRvTG9hZEltYWdlcygpICYm
IHJlc291cmNlLT5zdGlsbE5lZWRzTG9hZCgpKQorICAgICAgICAgICAgcmVzb3VyY2UtPmxvYWQo
dGhpcywgZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpKTsKKyAgICB9CiAgICAgcmV0dXJu
IHJlc291cmNlOwogfQogCkBAIC00ODEsNiArNDg0LDcgQEAgQ2FjaGVkUmVzb3VyY2UqIENhY2hl
ZFJlc291cmNlTG9hZGVyOjpsbwogICAgIENhY2hlZFJlc291cmNlKiByZXNvdXJjZSA9IGNyZWF0
ZVJlc291cmNlKHR5cGUsIHJlcXVlc3QsIGNoYXJzZXQpOwogICAgIAogICAgIGJvb2wgaW5DYWNo
ZSA9IG1lbW9yeUNhY2hlKCktPmFkZChyZXNvdXJjZSk7CisgICAgYm9vbCBzaG91bGROb3RMb2Fk
Tm93ID0gdHlwZSA9PSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSAmJiAhYXV0b0xvYWRJ
bWFnZXMoKSAmJiAhaW5DYWNoZTsKICAgICAKICAgICAvLyBQcmV0ZW5kIHRoZSByZXNvdXJjZSBp
cyBpbiB0aGUgY2FjaGUsIHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyBkZWxldGVkIGR1cmluZyB0
aGUgbG9hZCgpIGNhbGwuCiAgICAgLy8gRklYTUU6IENhY2hlZFJlc291cmNlIHNob3VsZCBqdXN0
IHVzZSBub3JtYWwgcmVmY291bnRpbmcgaW5zdGVhZC4KQEAgLTQ4OCw3ICs0OTIsOCBAQCBDYWNo
ZWRSZXNvdXJjZSogQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OmxvCiAgICAgICAgIHJlc291cmNlLT5z
ZXRJbkNhY2hlKHRydWUpOwogICAgIAogICAgIHJlc291cmNlLT5zZXRMb2FkUHJpb3JpdHkocHJp
b3JpdHkpOwotICAgIHJlc291cmNlLT5sb2FkKHRoaXMsIG9wdGlvbnMpOworICAgIGlmICghc2hv
dWxkTm90TG9hZE5vdykKKyAgICAgICAgcmVzb3VyY2UtPmxvYWQodGhpcywgb3B0aW9ucyk7CiAg
ICAgCiAgICAgaWYgKCFpbkNhY2hlKSB7CiAgICAgICAgIHJlc291cmNlLT5zZXRPd25pbmdDYWNo
ZWRSZXNvdXJjZUxvYWRlcih0aGlzKTsKQEAgLTYyOSw4ICs2MzQsMTAgQEAgdm9pZCBDYWNoZWRS
ZXNvdXJjZUxvYWRlcjo6c2V0QXV0b0xvYWRJbQogICAgICAgICBpZiAocmVzb3VyY2UtPnR5cGUo
KSA9PSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSkgewogICAgICAgICAgICAgQ2FjaGVk
SW1hZ2UqIGltYWdlID0gY29uc3RfY2FzdDxDYWNoZWRJbWFnZSo+KHN0YXRpY19jYXN0PGNvbnN0
IENhY2hlZEltYWdlKj4ocmVzb3VyY2UpKTsKIAotICAgICAgICAgICAgaWYgKGltYWdlLT5zdGls
bE5lZWRzTG9hZCgpKQorICAgICAgICAgICAgaWYgKGltYWdlLT5zdGlsbE5lZWRzTG9hZCgpKSB7
CisgICAgICAgICAgICAgICAgaW1hZ2UtPnNldEF1dG9Mb2FkKHRydWUpOwogICAgICAgICAgICAg
ICAgIGltYWdlLT5sb2FkKHRoaXMsIGRlZmF1bHRDYWNoZWRSZXNvdXJjZU9wdGlvbnMoKSk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMDEx
MzgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
NiBAQAorMjAxMS0xMS0yNCAgQmVuIE11cmRvY2ggIDxiZW5tQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgSW1hZ2Ugb25sb2FkIGNhbGxiYWNrIGZpcmVzIHdoZW4gaW1hZ2UgbG9hZGluZyBkaXNhYmxl
ZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNjYx
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBmYXN0
L2ltYWdlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0b2xvYWQtY2FjaGVkLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9pbWFnZXMvbG9hZC1ldmVudC13aXRoLWRpc2Fi
bGVkLWF1dG9sb2FkLWNhY2hlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ltYWdlcy9s
b2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0b2xvYWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2ltYWdlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0b2xvYWQuaHRt
bDogQWRkZWQuCisgICAgICAgICogZmFzdC9pbWFnZXMvcmVzb3VyY2VzL2xvYWQtZXZlbnQtd2l0
aC1kaXNhYmxlZC1hdXRvbG9hZC5qcGc6IEFkZGVkLgorCiAyMDExLTExLTIzICBQYXZlbCBQb2Rp
dmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6
IGFkZCBpbnRlZ3JhdGlvbiB0ZXN0IGZvciBjb21waWxlciBzb3VyY2UgbWFwcy4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9hZC1j
YWNoZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaW1hZ2Vz
L2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9hZC1jYWNoZWQtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvbG9hZC1ldmVudC13aXRoLWRp
c2FibGVkLWF1dG9sb2FkLWNhY2hlZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMiBAQAorUEFTUworCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9sb2FkLWV2ZW50
LXdpdGgtZGlzYWJsZWQtYXV0b2xvYWQtY2FjaGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9pbWFnZXMvbG9hZC1ldmVudC13aXRoLWRpc2FibGVkLWF1dG9sb2FkLWNhY2hl
ZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvbG9hZC1ldmVu
dC13aXRoLWRpc2FibGVkLWF1dG9sb2FkLWNhY2hlZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDU4IEBACis8aHRtbD4NCis8aGVhZD4NCisgICAgPHRpdGxlPlRlc3QgdGhhdCBhbiBvbmxv
YWQgY2FsbGJhY2sgaXMgZmlyZWQgd2hlbiBpbWFnZSBsb2FkcyBhcmUgZGlzYWJsZWQgYW5kIGEg
Y2FjaGVkIGltYWdlIGlzIGZvdW5kLiAoYnVnIDcxNjYxKTwvdGl0bGU+DQorICAgIDxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCisgICAgICAgIDwhLS0NCisgICAgICAgIHZhciBmaWxl
bmFtZSA9ICJyZXNvdXJjZXMvbG9hZC1ldmVudC13aXRoLWRpc2FibGVkLWF1dG9sb2FkLmpwZz8i
K01hdGgucmFuZG9tKCk7DQorICAgICAgICANCisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsNCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNU
ZXh0KCk7DQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgp
Ow0KKyAgICAgICAgfSBlbHNlDQorICAgICAgICAgICAgZG9jdW1lbnQud3JpdGUoJ1RoaXMgdGVz
dCBtdXN0IGJlIHJ1biBpbnNpZGUgRHVtcFJlbmRlclRyZWUuJyk7DQorICAgICAgICANCisgICAg
ICAgIHZhciBmaXJlZCA9IDA7DQorICAgICAgICB2YXIgdGltZW91dElkID0gMDsNCisgICAgICAg
IGZ1bmN0aW9uIGltZ0xvYWRlZChlKSB7DQorICAgICAgICAgICAgIGZpcmVkKys7DQorICAgICAg
ICAgICAgIGlmIChmaXJlZCA9PSAxKSB7DQorICAgICAgICAgICAgICAgIC8vIFRoZSBpbWFnZSBz
aG91bGQgbm93IGJlIGluIHRoZSBjYWNoZS4NCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIuZGlzYWJsZUltYWdlTG9hZGluZygpOw0KKyAgICAgICAgICAgICAgICB3aW5kb3cu
c2V0VGltZW91dChmdW5jdGlvbigpIHsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZycpLnNy
YyA9ICJkYXRhOiI7IH0sIDApOw0KKyAgICAgICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dChm
dW5jdGlvbigpIHsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZycpLnNyYyA9IGZpbGVuYW1l
OyB9LCAwKTsNCisgICAgICAgICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZ2V0IGFuIG9ubG9hZCBh
ZnRlciAxcywgY29uc2lkZXIgdGhlIHRlc3QgZmFpbGVkLiBBIGNhY2hlZCBpbWFnZSBzaG91bGQg
c3RpbGwgbG9hZCB3aXRoIGltYWdlIGxvYWRpbmcgZGlzYWJsZWQuDQorICAgICAgICAgICAgICAg
IHRpbWVvdXRJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBmYWlsZWQoKTsgfSwg
MTAwMCk7DQorICAgICAgICAgICAgfSBlbHNlIGlmIChmaXJlZCA9PSAyKSB7DQorICAgICAgICAg
ICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZW91dElkKTsNCisgICAgICAgICAgICAgICAg
cGFzc2VkKCk7DQorICAgICAgICAgICAgfSBlbHNlDQorICAgICAgICAgICAgICAgIGZhaWxlZCgp
Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgDQorICAgICAgICBmdW5jdGlvbiBwYXNzZWQoKSB7DQor
ICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5lclRleHQg
Kz0gJ1BBU1MnOw0KKyAgICAgICAgICAgIGZpbmlzaFRlc3QoKTsNCisgICAgICAgIH0NCisgICAg
ICAgIA0KKyAgICAgICAgZnVuY3Rpb24gZmFpbGVkKCkgew0KKyAgICAgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuaW5uZXJUZXh0ICs9ICdGQUlMOiBHb3QgJysgZmly
ZWQgKyAnIGxvYWQgZXZlbnRzJzsNCisgICAgICAgICAgICBmaW5pc2hUZXN0KCk7DQorICAgICAg
ICB9DQorICAgICAgICAgICAgDQorICAgICAgICBmdW5jdGlvbiBmaW5pc2hUZXN0KCkgew0KKyAg
ICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpDQorICAgICAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsNCisgICAgICAgIH0NCisNCisg
ICAgICAgIGZ1bmN0aW9uIGxvYWRlZCgpIHsNCisgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZCgnaW1nJykuc3JjID0gZmlsZW5hbWU7DQorICAgICAgICB9DQorDQorICAgICAgICAv
LyAtLT4NCisgICAgPC9zY3JpcHQ+DQorPC9oZWFkPg0KKzxib2R5IG9ubG9hZD0ibG9hZGVkKCki
Pg0KKyAgICA8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4NCisgICAgPGltZyBzcmM9IiIgaWQ9Imlt
ZyIgb25sb2FkPSJpbWdMb2FkZWQoKSIgLz4NCis8L2JvZHk+DQorPC9odG1sPg0KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9hZC1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvbG9hZC1l
dmVudC13aXRoLWRpc2FibGVkLWF1dG9sb2FkLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9h
ZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMiBAQAorUEFTUworCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0b2xv
YWQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9sb2FkLWV2ZW50
LXdpdGgtZGlzYWJsZWQtYXV0b2xvYWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvaW1hZ2VzL2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9hZC5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5UZXN0
IHRoYXQgbm8gb25sb2FkIGNhbGxiYWNrIGlzIGZpcmVkIHdoZW4gaW1hZ2UgbG9hZHMgYXJlIGRp
c2FibGVkIGFuZCBubyBjYWNoZWQgaW1hZ2UgaXMgZm91bmQuIChidWcgNzE2NjEpPC90aXRsZT4K
KyAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CisgICAgICAgIDwhLS0KKyAgICAg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICAgICAgbGF5b3V0
VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZGlzYWJsZUltYWdlTG9hZGluZygpOworICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIud2FpdFVudGlsRG9uZSgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGRvY3Vt
ZW50LndyaXRlKCdUaGlzIHRlc3QgbXVzdCBiZSBydW4gaW5zaWRlIER1bXBSZW5kZXJUcmVlLicp
OworICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gaW1nTG9hZGVkKGUpIHsKKyAgICAgICAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuaW5uZXJUZXh0ICs9ICdGQUlMOiBp
bWFnZSBvbmxvYWQgZmlyZWQhJzsKKyAgICAgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gcGFzc2VkKCkgeworICAgICAgICAgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKS5pbm5lclRleHQgKz0gJ1BBU1MnOworICAg
ICAgICAgICAgZmluaXNoVGVzdCgpOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAgICAgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpCisgICAgICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5
RG9uZSgpOworICAgICAgICB9CisKKyAgICAgICAgZnVuY3Rpb24gbG9hZGVkKCkgeworICAgICAg
ICAgICAgLy8gVXBkYXRlIHRoZSBzcmMgb2YgdGhlIGltYWdlIGVsZW1lbnQgdG8gdHJ5IGFuZCB0
cmlnZ2VyIGFuIG9ubG9hZCBjYWxsYmFjay4gTmVlZHMgdG8gYmUgYXN5bmMgdG8gZW5zdXJlCisg
ICAgICAgICAgICAvLyB0aGF0IHRoZSBjYWxsIHRvIGxheW91dFRlc3RDb250cm9sbGVyLmRpc2Fi
bGVJbWFnZUxvYWRpbmcoKSBhYm92ZSBoYXMgdGFrZW4gZWZmZWN0LgorICAgICAgICAgICAgd2lu
ZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWcn
KS5zcmMgPSAicmVzb3VyY2VzL2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9hZC5qcGc/
IitNYXRoLnJhbmRvbSgpOyB9LCAwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWYg
d2UgZG9uJ3QgZ2V0IGFuIG9ubG9hZCBhZnRlciAxcywgY29uc2lkZXIgdGhlIHRlc3QgcGFzc2Vk
LgorICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IHBhc3NlZCgpOyB9
LCAxMDAwKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIC0tPgorICAgIDwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHkgb25sb2FkPSJsb2FkZWQoKSI+CisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9k
aXY+CisgICAgPGltZyBzcmM9IiIgaWQ9ImltZyIgb25sb2FkPSJpbWdMb2FkZWQoKSIgLz4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL3Jlc291cmNlcy9s
b2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0b2xvYWQuanBnCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRp
c3BsYXk6IGZpbGUgbWFya2VkIGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBs
aWNhdGlvbi9vY3RldC1zdHJlYW0KClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zh
c3QvaW1hZ2VzL3Jlc291cmNlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0b2xvYWQuanBn
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjptaW1lLXR5cGUKICAgKyBhcHBsaWNhdGlvbi9vY3RldC1z
dHJlYW0KCgovOWovNEFBUVNrWkpSZ0FCQVFFQVlBQmdBQUQvNFFDQVJYaHBaZ0FBVFUwQUtnQUFB
QWdBQlFFU0FBTUFBQUFCQUFFQUFBRWFBQVVBCkFBQUJBQUFBU2dFYkFBVUFBQUFCQUFBQVVnRW9B
QU1BQUFBQkFBSUFBSWRwQUFRQUFBQUJBQUFBV2dBQUFBQUFBQUJnQUFBQUFRQUEKQUdBQUFBQUJB
QUtnQWdBRUFBQUFBUUFBQUJDZ0F3QUVBQUFBQVFBQUFCQUFBQUFBLzlzQVF3QUNBUUVDQVFFQ0Fn
RUNBZ0lDQWdNRgpBd01EQXdNR0JBUURCUWNHQndjSEJnWUdCd2dMQ1FjSUNnZ0dCZ2tOQ1FvTEN3
d01EQWNKRFE0TkRBNExEQXdMLzlzQVF3RUNBZ0lECkFnTUZBd01GQ3dnR0NBc0xDd3NMQ3dzTEN3
c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0wKQ3dzTC84
QUFFUWdBRUFBUUF3RWlBQUlSQVFNUkFmL0VBQjhBQUFFRkFRRUJBUUVCQUFBQUFBQUFBQUFCQWdN
RUJRWUhDQWtLQy8vRQpBTFVRQUFJQkF3TUNCQU1GQlFRRUFBQUJmUUVDQXdBRUVRVVNJVEZCQmhO
UllRY2ljUlF5Z1pHaENDTkNzY0VWVXRId0pETmljb0lKCkNoWVhHQmthSlNZbktDa3FORFUyTnpn
NU9rTkVSVVpIU0VsS1UxUlZWbGRZV1ZwalpHVm1aMmhwYW5OMGRYWjNlSGw2ZzRTRmhvZUkKaVlx
U2s1U1ZscGVZbVpxaW82U2xwcWVvcWFxeXM3UzF0cmU0dWJyQ3c4VEZ4c2ZJeWNyUzA5VFYxdGZZ
MmRyaDR1UGs1ZWJuNk9ucQo4Zkx6OVBYMjkvajUrdi9FQUI4QkFBTUJBUUVCQVFFQkFRRUFBQUFB
QUFBQkFnTUVCUVlIQ0FrS0MvL0VBTFVSQUFJQkFnUUVBd1FICkJRUUVBQUVDZHdBQkFnTVJCQVVo
TVFZU1FWRUhZWEVUSWpLQkNCUkNrYUd4d1Frak0xTHdGV0p5MFFvV0pEVGhKZkVYR0JrYUppY28K
S1NvMU5qYzRPVHBEUkVWR1IwaEpTbE5VVlZaWFdGbGFZMlJsWm1kb2FXcHpkSFYyZDNoNWVvS0Ro
SVdHaDRpSmlwS1RsSldXbDVpWgptcUtqcEtXbXA2aXBxckt6dExXMnQ3aTV1c0xEeE1YR3g4akp5
dExUMU5YVzE5aloydUxqNU9YbTUranA2dkx6OVBYMjkvajUrdi9hCkFBd0RBUUFDRVFNUkFEOEE5
MG9vb3IrS3ovRDgvOWs9Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>116779</attachid>
            <date>2011-11-28 10:25:31 -0800</date>
            <delta_ts>2011-11-29 11:06:37 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>71661-2.txt</filename>
            <type>text/plain</type>
            <size>14499</size>
            <attacher name="Ben Murdoch">benm</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTI0NCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDExLTExLTI4ICBCZW4gTXVy
ZG9jaCAgPGJlbm1AZ29vZ2xlLmNvbT4KKworICAgICAgICBJbWFnZSBvbmxvYWQgY2FsbGJhY2sg
ZmlyZXMgd2hlbiBpbWFnZSBsb2FkaW5nIGRpc2FibGVkLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdoZW4gaW1hZ2UgbG9hZGluZyBpcyBk
aXNhYmxlZCB3aXRoIHRoZSBXZWJDb3JlOjpTZXR0aW5nczo6c2V0SW1hZ2VzTG9hZGVkQXV0b21h
dGljYWxseQorICAgICAgICBBUEksIG9ubG9hZCBjYWxsYmFja3Mgd2VyZSBiZWluZyBmaXJlZCBk
ZXNwaXRlIGltYWdlcyBub3QgYmVpbmcgbG9hZGVkLiBCZWNhdXNlIG9mIHRoaXMsCisgICAgICAg
IGlmIGltYWdlIGxvYWRzIHdlcmUgc3Vic2VxdWVudGx5IHJlLWVuYWJsZWQsIHdlIHdvdWxkIG5v
dCBnZXQgYW4gb25sb2FkIGNhbGxiYWNrIGF0IHRoYXQKKyAgICAgICAgdGltZSAoYXMgb25lIGhh
ZCBhbHJlYWR5IGJlZW4gbWFkZSkuCisKKyAgICAgICAgQWZ0ZXIgZXhhbWluaW5nIHRoZSBiZWhh
dmlvciBvZiBvdGhlciBicm93c2VycyBpbiB0aGlzIGNpcmN1bXN0YW5jZSwgdGhlIGJ1ZyBhcHBl
YXJzIHRvIGJlIHRoYXQKKyAgICAgICAgd2UgZmlyZSBhbiBvbmxvYWQgY2FsbGJhY2sgd2hlbiBh
biBpbWFnZSBpcyByZXF1ZXN0ZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGltYWdlIGxvYWRpbmcg
aXMKKyAgICAgICAgZW5hYmxlZCBvciBkaXNhYmxlZC4gV2Ugc2hvdWxkIG5vdCBmaXJlIHRoZSBj
YWxsYmFjayB3aGVuIGxvYWRpbmcgaXMgZGlzYWJsZWQuIChOb3RlIHRoYXQgd2UKKyAgICAgICAg
d291bGRuJ3QgYWN0dWFsbHkgbG9hZCB0aGUgaW1hZ2UgaWYgbG9hZGluZyB3YXMgZGlzYWJsZWQs
IHRoYXQgZnVuY3Rpb25hbGl0eSBpcyB3b3JraW5nIGFzCisgICAgICAgIGV4cGVjdGVkLikKKwor
ICAgICAgICBUZXN0czogZmFzdC9pbWFnZXMvbG9hZC1ldmVudC13aXRoLWRpc2FibGVkLWF1dG9s
b2FkLWNhY2hlZC5odG1sCisgICAgICAgICAgICAgICBmYXN0L2ltYWdlcy9sb2FkLWV2ZW50LXdp
dGgtZGlzYWJsZWQtYXV0b2xvYWQuaHRtbAorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hl
ZEltYWdlLmNwcDogUHJldGVuZCB0aGUgaW1hZ2UgaXMgYmVpbmcgbG9hZGVkIGlmIGF1dG9tYXRp
YyBpbWFnZSBsb2FkaW5nIGlzCisgICAgICAgICAgICBkaXNhYmxlZCB0byBhdm9pZCBhbiBvbmxv
YWQgY2FsbGJhY2sgYmVpbmcgdHJpZ2dlcmVkIGJ5IHRoZSBzdXBlcmNsYXNzLgorICAgICAgICAq
IGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oOiBBZGQgYSBmbGFnIHRvIGRldGVybWluZSBpZiB0
aGUgaW1hZ2Ugc2hvdWxkIGJlIGF1dG9sb2FkZWQuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0Nh
Y2hlZFJlc291cmNlTG9hZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNl
TG9hZGVyOjpyZXF1ZXN0SW1hZ2UpOiBTZXQgYSBmbGFnIG9uIHRoZSByZXNvdXJjZSB0byBpZGVu
dGlmeSB3aGV0aGVyCisgICAgICAgICAgICBpdCBzaG91bGQgYmUgYXV0b2xvYWRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpsb2FkUmVzb3VyY2UpOiBEbyBub3Qg
YXR0ZW1wdCB0byBsb2FkIGFuIGltYWdlIHJlc291cmNlIGlmIGF1dG9tYXRpYworICAgICAgICAg
ICAgbG9hZHMgYXJlIGRpc2FibGVkIGFuZCB0aGUgaW1hZ2UgaXMgdW5jYWNoZWQuCisgICAgICAg
IChXZWJDb3JlOjpDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2V0QXV0b0xvYWRJbWFnZXMpOiBVcGRh
dGUgdGhlIGF1dG9sb2FkIGZsYWcgd2hlbiBpbWFnZSBsb2FkcyBhcmUKKyAgICAgICAgICAgIGVu
YWJsZWQgYWdhaW4uCisKIDIwMTEtMTEtMjggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNp
YUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEZpeCBtYWtlIGRpc3RjaGVjayBp
c3N1ZXMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5j
cHAJKHJldmlzaW9uIDEwMTI0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDYgKzU4LDcgQEAgQ2FjaGVkSW1hZ2U6
OkNhY2hlZEltYWdlKGNvbnN0IFJlc291cmNlUgogICAgICwgbV9pbWFnZSgwKQogICAgICwgbV9k
ZWNvZGVkRGF0YURlbGV0aW9uVGltZXIodGhpcywgJkNhY2hlZEltYWdlOjpkZWNvZGVkRGF0YURl
bGV0aW9uVGltZXJGaXJlZCkKICAgICAsIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSh0cnVlKQor
ICAgICwgbV9hdXRvTG9hZFByZXZlbnRlZEJ5U2V0dGluZ3MoZmFsc2UpCiB7CiAgICAgc2V0U3Rh
dHVzKFVua25vd24pOwogfQpAQCAtNjcsNiArNjgsNyBAQCBDYWNoZWRJbWFnZTo6Q2FjaGVkSW1h
Z2UoSW1hZ2UqIGltYWdlKQogICAgICwgbV9pbWFnZShpbWFnZSkKICAgICAsIG1fZGVjb2RlZERh
dGFEZWxldGlvblRpbWVyKHRoaXMsICZDYWNoZWRJbWFnZTo6ZGVjb2RlZERhdGFEZWxldGlvblRp
bWVyRmlyZWQpCiAgICAgLCBtX3Nob3VsZFBhaW50QnJva2VuSW1hZ2UodHJ1ZSkKKyAgICAsIG1f
YXV0b0xvYWRQcmV2ZW50ZWRCeVNldHRpbmdzKGZhbHNlKQogewogICAgIHNldFN0YXR1cyhDYWNo
ZWQpOwogICAgIHNldExvYWRpbmcoZmFsc2UpOwpAQCAtMTEzLDcgKzExNSwxOSBAQCB2b2lkIENh
Y2hlZEltYWdlOjpkaWRBZGRDbGllbnQoQ2FjaGVkUmVzCiAgICAgaWYgKG1faW1hZ2UgJiYgIW1f
aW1hZ2UtPmlzTnVsbCgpKQogICAgICAgICBzdGF0aWNfY2FzdDxDYWNoZWRJbWFnZUNsaWVudCo+
KGMpLT5pbWFnZUNoYW5nZWQodGhpcyk7CiAKKyAgICAvLyBUaGlzIGltYWdlIGxvYWQgc2hvdWxk
IGJlIGJsb2NrZWQgaWYgdGhlIFNldHRpbmdzIG9iamVjdCBpbmRpY2F0ZXMgc3VjaCBhbmQgdGhl
IGltYWdlIGlzIG5vdCBpbiB0aGUgY2FjaGUuCisgICAgYm9vbCBzaG91bGROb3RMb2FkTm93ID0g
bV9hdXRvTG9hZFByZXZlbnRlZEJ5U2V0dGluZ3MgJiYgIShpbkNhY2hlKCkgJiYgIXN0aWxsTmVl
ZHNMb2FkKCkpOworICAgIC8vIElmIHRoaXMgaW1hZ2UgbG9hZCBpcyBibG9ja2VkLCBwcmV0ZW5k
IHdlIGFyZSBsb2FkaW5nIG5vdworICAgIC8vIHNvIHRoYXQgd2UgZG9uJ3QgZmlyZSBhbiBvbmxv
YWQgZXZlbnQgZnJvbSBDYWNoZWRSZXNvdXJjZTo6ZGlkQWRkQ2xpZW50LgorICAgIGJvb2wgbG9h
ZGluZyA9IGlzTG9hZGluZygpOworICAgIGlmIChzaG91bGROb3RMb2FkTm93ICYmICFsb2FkaW5n
KQorICAgICAgICBzZXRMb2FkaW5nKHRydWUpOworCiAgICAgQ2FjaGVkUmVzb3VyY2U6OmRpZEFk
ZENsaWVudChjKTsKKworICAgIC8vIFJlc3RvcmUgdGhlIGxvYWRpbmcgZmxhZyBpZiB3ZSBtb2Rp
ZmllZCBpdCBhYm92ZS4KKyAgICBpZiAoc2hvdWxkTm90TG9hZE5vdyAmJiAhbG9hZGluZykKKyAg
ICAgICAgc2V0TG9hZGluZyhmYWxzZSk7CiB9CiAKIHZvaWQgQ2FjaGVkSW1hZ2U6OmFsbENsaWVu
dHNSZW1vdmVkKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRJbWFn
ZS5oCShyZXZpc2lvbiAxMDEyNDQpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2Fj
aGVkSW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNiArOTQsOCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCB2b2lkIGFuaW1hdGlvbkFkdmFuY2VkKGNvbnN0IEltYWdlKik7CiAgICAgdmlydHVh
bCB2b2lkIGNoYW5nZWRJblJlY3QoY29uc3QgSW1hZ2UqLCBjb25zdCBJbnRSZWN0Jik7CiAKKyAg
ICB2b2lkIHNldEF1dG9Mb2FkUHJldmVudGVkQnlTZXR0aW5ncyhib29sIGIpIHsgbV9hdXRvTG9h
ZFByZXZlbnRlZEJ5U2V0dGluZ3MgPSBiOyB9CisgICAgCiBwcml2YXRlOgogICAgIEltYWdlKiBs
b29rdXBPckNyZWF0ZUltYWdlRm9yUmVuZGVyZXIoY29uc3QgUmVuZGVyT2JqZWN0Kik7CiAKQEAg
LTExMSw2ICsxMTMsNyBAQCBwcml2YXRlOgogI2VuZGlmCiAgICAgVGltZXI8Q2FjaGVkSW1hZ2U+
IG1fZGVjb2RlZERhdGFEZWxldGlvblRpbWVyOwogICAgIGJvb2wgbV9zaG91bGRQYWludEJyb2tl
bkltYWdlOworICAgIGJvb2wgbV9hdXRvTG9hZFByZXZlbnRlZEJ5U2V0dGluZ3M7CiB9OwogCiBj
bGFzcyBDYWNoZWRJbWFnZUNsaWVudCA6IHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2FkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZUxvYWRlci5jcHAJKHJldmlzaW9uIDEwMTI0NCkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9j
YWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw4ICsx
NTgsMTEgQEAgQ2FjaGVkSW1hZ2UqIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZQogICAgICAg
ICB9CiAgICAgfQogICAgIENhY2hlZEltYWdlKiByZXNvdXJjZSA9IHN0YXRpY19jYXN0PENhY2hl
ZEltYWdlKj4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291cmNlLCBy
ZXF1ZXN0LCBTdHJpbmcoKSwgZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpKSk7Ci0gICAg
aWYgKGF1dG9Mb2FkSW1hZ2VzKCkgJiYgcmVzb3VyY2UgJiYgcmVzb3VyY2UtPnN0aWxsTmVlZHNM
b2FkKCkpCi0gICAgICAgIHJlc291cmNlLT5sb2FkKHRoaXMsIGRlZmF1bHRDYWNoZWRSZXNvdXJj
ZU9wdGlvbnMoKSk7CisgICAgaWYgKHJlc291cmNlKSB7CisgICAgICAgIHJlc291cmNlLT5zZXRB
dXRvTG9hZFByZXZlbnRlZEJ5U2V0dGluZ3MoIWF1dG9Mb2FkSW1hZ2VzKCkpOworICAgICAgICBp
ZiAoYXV0b0xvYWRJbWFnZXMoKSAmJiByZXNvdXJjZS0+c3RpbGxOZWVkc0xvYWQoKSkKKyAgICAg
ICAgICAgIHJlc291cmNlLT5sb2FkKHRoaXMsIGRlZmF1bHRDYWNoZWRSZXNvdXJjZU9wdGlvbnMo
KSk7CisgICAgfQogICAgIHJldHVybiByZXNvdXJjZTsKIH0KIApAQCAtNDgwLDYgKzQ4Myw3IEBA
IENhY2hlZFJlc291cmNlKiBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6bG8KICAgICBDYWNoZWRSZXNv
dXJjZSogcmVzb3VyY2UgPSBjcmVhdGVSZXNvdXJjZSh0eXBlLCByZXF1ZXN0LCBjaGFyc2V0KTsK
ICAgICAKICAgICBib29sIGluQ2FjaGUgPSBtZW1vcnlDYWNoZSgpLT5hZGQocmVzb3VyY2UpOwor
ICAgIGJvb2wgc2hvdWxkTm90TG9hZE5vdyA9IHR5cGUgPT0gQ2FjaGVkUmVzb3VyY2U6OkltYWdl
UmVzb3VyY2UgJiYgIWF1dG9Mb2FkSW1hZ2VzKCkgJiYgIWluQ2FjaGU7CiAgICAgCiAgICAgLy8g
UHJldGVuZCB0aGUgcmVzb3VyY2UgaXMgaW4gdGhlIGNhY2hlLCB0byBwcmV2ZW50IGl0IGZyb20g
YmVpbmcgZGVsZXRlZCBkdXJpbmcgdGhlIGxvYWQoKSBjYWxsLgogICAgIC8vIEZJWE1FOiBDYWNo
ZWRSZXNvdXJjZSBzaG91bGQganVzdCB1c2Ugbm9ybWFsIHJlZmNvdW50aW5nIGluc3RlYWQuCkBA
IC00ODcsNyArNDkxLDggQEAgQ2FjaGVkUmVzb3VyY2UqIENhY2hlZFJlc291cmNlTG9hZGVyOjps
bwogICAgICAgICByZXNvdXJjZS0+c2V0SW5DYWNoZSh0cnVlKTsKICAgICAKICAgICByZXNvdXJj
ZS0+c2V0TG9hZFByaW9yaXR5KHByaW9yaXR5KTsKLSAgICByZXNvdXJjZS0+bG9hZCh0aGlzLCBv
cHRpb25zKTsKKyAgICBpZiAoIXNob3VsZE5vdExvYWROb3cpCisgICAgICAgIHJlc291cmNlLT5s
b2FkKHRoaXMsIG9wdGlvbnMpOwogICAgIAogICAgIGlmICghaW5DYWNoZSkgewogICAgICAgICBy
ZXNvdXJjZS0+c2V0T3duaW5nQ2FjaGVkUmVzb3VyY2VMb2FkZXIodGhpcyk7CkBAIC02MjcsNiAr
NjMyLDcgQEAgdm9pZCBDYWNoZWRSZXNvdXJjZUxvYWRlcjo6c2V0QXV0b0xvYWRJbQogICAgICAg
ICBDYWNoZWRSZXNvdXJjZSogcmVzb3VyY2UgPSBpdC0+c2Vjb25kLmdldCgpOwogICAgICAgICBp
ZiAocmVzb3VyY2UtPnR5cGUoKSA9PSBDYWNoZWRSZXNvdXJjZTo6SW1hZ2VSZXNvdXJjZSkgewog
ICAgICAgICAgICAgQ2FjaGVkSW1hZ2UqIGltYWdlID0gY29uc3RfY2FzdDxDYWNoZWRJbWFnZSo+
KHN0YXRpY19jYXN0PGNvbnN0IENhY2hlZEltYWdlKj4ocmVzb3VyY2UpKTsKKyAgICAgICAgICAg
IGltYWdlLT5zZXRBdXRvTG9hZFByZXZlbnRlZEJ5U2V0dGluZ3MoZmFsc2UpOwogCiAgICAgICAg
ICAgICBpZiAoaW1hZ2UtPnN0aWxsTmVlZHNMb2FkKCkpCiAgICAgICAgICAgICAgICAgaW1hZ2Ut
PmxvYWQodGhpcywgZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpKTsKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDEwMTI0NCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE2IEBACisyMDExLTExLTI4ICBCZW4gTXVyZG9jaCAgPGJlbm1AZ29vZ2xlLmNv
bT4KKworICAgICAgICBJbWFnZSBvbmxvYWQgY2FsbGJhY2sgZmlyZXMgd2hlbiBpbWFnZSBsb2Fk
aW5nIGRpc2FibGVkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzE2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIGZhc3QvaW1hZ2VzL2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9hZC1jYWNo
ZWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ltYWdlcy9sb2FkLWV2ZW50
LXdpdGgtZGlzYWJsZWQtYXV0b2xvYWQtY2FjaGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvaW1hZ2VzL2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9hZC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvaW1hZ2VzL2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1h
dXRvbG9hZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ltYWdlcy9yZXNvdXJjZXMvbG9h
ZC1ldmVudC13aXRoLWRpc2FibGVkLWF1dG9sb2FkLmpwZzogQWRkZWQuCisKIDIwMTEtMTEtMjgg
IEN6ZW5lIFRhbcOhcyAgPHRjemVuZUBpbmYudS1zemVnZWQuaHU+CiAKICAgICAgICAgW1F0XSBV
bnJldmlld2VkIGdhcmRlbmluZy4gQWRkIHBsYXRmb3JtIHNwZWNpZmljIHJlc3VsdHMuCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0b2xv
YWQtY2FjaGVkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2lt
YWdlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0b2xvYWQtY2FjaGVkLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2xvYWQtZXZlbnQtd2l0
aC1kaXNhYmxlZC1hdXRvbG9hZC1jYWNoZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDIgQEAKK1BBU1MKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvbG9hZC1l
dmVudC13aXRoLWRpc2FibGVkLWF1dG9sb2FkLWNhY2hlZC5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9hZC1j
YWNoZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2xvYWQt
ZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9hZC1jYWNoZWQuaHRtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw1OCBAQAorPGh0bWw+DQorPGhlYWQ+DQorICAgIDx0aXRsZT5UZXN0IHRoYXQgYW4g
b25sb2FkIGNhbGxiYWNrIGlzIGZpcmVkIHdoZW4gaW1hZ2UgbG9hZHMgYXJlIGRpc2FibGVkIGFu
ZCBhIGNhY2hlZCBpbWFnZSBpcyBmb3VuZC4gKGJ1ZyA3MTY2MSk8L3RpdGxlPg0KKyAgICA8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQorICAgICAgICA8IS0tDQorICAgICAgICB2YXIg
ZmlsZW5hbWUgPSAicmVzb3VyY2VzL2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9hZC5q
cGc/IitNYXRoLnJhbmRvbSgpOw0KKyAgICAgICAgDQorICAgICAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7DQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVt
cEFzVGV4dCgpOw0KKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERv
bmUoKTsNCisgICAgICAgIH0gZWxzZQ0KKyAgICAgICAgICAgIGRvY3VtZW50LndyaXRlKCdUaGlz
IHRlc3QgbXVzdCBiZSBydW4gaW5zaWRlIER1bXBSZW5kZXJUcmVlLicpOw0KKyAgICAgICAgDQor
ICAgICAgICB2YXIgZmlyZWQgPSAwOw0KKyAgICAgICAgdmFyIHRpbWVvdXRJZCA9IDA7DQorICAg
ICAgICBmdW5jdGlvbiBpbWdMb2FkZWQoZSkgew0KKyAgICAgICAgICAgICBmaXJlZCsrOw0KKyAg
ICAgICAgICAgICBpZiAoZmlyZWQgPT0gMSkgew0KKyAgICAgICAgICAgICAgICAvLyBUaGUgaW1h
Z2Ugc2hvdWxkIG5vdyBiZSBpbiB0aGUgY2FjaGUuDQorICAgICAgICAgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLmRpc2FibGVJbWFnZUxvYWRpbmcoKTsNCisgICAgICAgICAgICAgICAgd2lu
ZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWcn
KS5zcmMgPSAiZGF0YToiOyB9LCAwKTsNCisgICAgICAgICAgICAgICAgd2luZG93LnNldFRpbWVv
dXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWcnKS5zcmMgPSBmaWxl
bmFtZTsgfSwgMCk7DQorICAgICAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IGdldCBhbiBvbmxv
YWQgYWZ0ZXIgMXMsIGNvbnNpZGVyIHRoZSB0ZXN0IGZhaWxlZC4gQSBjYWNoZWQgaW1hZ2Ugc2hv
dWxkIHN0aWxsIGxvYWQgd2l0aCBpbWFnZSBsb2FkaW5nIGRpc2FibGVkLg0KKyAgICAgICAgICAg
ICAgICB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgZmFpbGVkKCk7
IH0sIDEwMDApOw0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlyZWQgPT0gMikgew0KKyAgICAg
ICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7DQorICAgICAgICAgICAg
ICAgIHBhc3NlZCgpOw0KKyAgICAgICAgICAgIH0gZWxzZQ0KKyAgICAgICAgICAgICAgICBmYWls
ZWQoKTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAgZnVuY3Rpb24gcGFzc2VkKCkg
ew0KKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuaW5uZXJU
ZXh0ICs9ICdQQVNTJzsNCisgICAgICAgICAgICBmaW5pc2hUZXN0KCk7DQorICAgICAgICB9DQor
ICAgICAgICANCisgICAgICAgIGZ1bmN0aW9uIGZhaWxlZCgpIHsNCisgICAgICAgICAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVyVGV4dCArPSAnRkFJTDogR290ICcr
IGZpcmVkICsgJyBsb2FkIGV2ZW50cyc7DQorICAgICAgICAgICAgZmluaXNoVGVzdCgpOw0KKyAg
ICAgICAgfQ0KKyAgICAgICAgICAgIA0KKyAgICAgICAgZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsN
CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQ0KKyAgICAgICAg
ICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7DQorICAgICAgICB9DQor
DQorICAgICAgICBmdW5jdGlvbiBsb2FkZWQoKSB7DQorICAgICAgICAgICAgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2ltZycpLnNyYyA9IGZpbGVuYW1lOw0KKyAgICAgICAgfQ0KKw0KKyAgICAg
ICAgLy8gLS0+DQorICAgIDwvc2NyaXB0Pg0KKzwvaGVhZD4NCis8Ym9keSBvbmxvYWQ9ImxvYWRl
ZCgpIj4NCisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+DQorICAgIDxpbWcgc3JjPSIiIGlk
PSJpbWciIG9ubG9hZD0iaW1nTG9hZGVkKCkiIC8+DQorPC9ib2R5Pg0KKzwvaHRtbD4NCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0b2xv
YWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2xv
YWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9hZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0
b2xvYWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK1BBU1MKKwpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvbG9hZC1ldmVudC13aXRoLWRpc2FibGVkLWF1
dG9sb2FkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvbG9hZC1l
dmVudC13aXRoLWRpc2FibGVkLWF1dG9sb2FkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2ltYWdlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0b2xvYWQuaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorPGh0bWw+Cis8aGVhZD4KKyAgICA8dGl0bGU+
VGVzdCB0aGF0IG5vIG9ubG9hZCBjYWxsYmFjayBpcyBmaXJlZCB3aGVuIGltYWdlIGxvYWRzIGFy
ZSBkaXNhYmxlZCBhbmQgbm8gY2FjaGVkIGltYWdlIGlzIGZvdW5kLiAoYnVnIDcxNjYxKTwvdGl0
bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICA8IS0tCisg
ICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmRpc2FibGVJbWFnZUxvYWRpbmcoKTsKKyAgICAgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBk
b2N1bWVudC53cml0ZSgnVGhpcyB0ZXN0IG11c3QgYmUgcnVuIGluc2lkZSBEdW1wUmVuZGVyVHJl
ZS4nKTsKKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIGltZ0xvYWRlZChlKSB7CisgICAgICAg
ICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVyVGV4dCArPSAnRkFJ
TDogaW1hZ2Ugb25sb2FkIGZpcmVkISc7CisgICAgICAgICAgICBmaW5pc2hUZXN0KCk7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIHBhc3NlZCgpIHsKKyAgICAgICAgICAg
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuaW5uZXJUZXh0ICs9ICdQQVNTJzsK
KyAgICAgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgICAgICAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5v
dGlmeURvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGxvYWRlZCgpIHsKKyAg
ICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgc3JjIG9mIHRoZSBpbWFnZSBlbGVtZW50IHRvIHRyeSBh
bmQgdHJpZ2dlciBhbiBvbmxvYWQgY2FsbGJhY2suIE5lZWRzIHRvIGJlIGFzeW5jIHRvIGVuc3Vy
ZQorICAgICAgICAgICAgLy8gdGhhdCB0aGUgY2FsbCB0byBsYXlvdXRUZXN0Q29udHJvbGxlci5k
aXNhYmxlSW1hZ2VMb2FkaW5nKCkgYWJvdmUgaGFzIHRha2VuIGVmZmVjdC4KKyAgICAgICAgICAg
IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
aW1nJykuc3JjID0gInJlc291cmNlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0b2xvYWQu
anBnPyIrTWF0aC5yYW5kb20oKTsgfSwgMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8v
IElmIHdlIGRvbid0IGdldCBhbiBvbmxvYWQgYWZ0ZXIgMXMsIGNvbnNpZGVyIHRoZSB0ZXN0IHBh
c3NlZC4KKyAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBwYXNzZWQo
KTsgfSwgMTAwMCk7CisgICAgICAgIH0KKworICAgICAgICAvLyAtLT4KKyAgICA8L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibG9hZGVkKCkiPgorICAgIDxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgorICAgIDxpbWcgc3JjPSIiIGlkPSJpbWciIG9ubG9hZD0iaW1nTG9hZGVkKCkiIC8+
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9yZXNvdXJj
ZXMvbG9hZC1ldmVudC13aXRoLWRpc2FibGVkLWF1dG9sb2FkLmpwZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5v
dCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0g
YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0
cy9mYXN0L2ltYWdlcy9yZXNvdXJjZXMvbG9hZC1ldmVudC13aXRoLWRpc2FibGVkLWF1dG9sb2Fk
LmpwZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0
ZXQtc3RyZWFtCgoKLzlqLzRBQVFTa1pKUmdBQkFRRUFZQUJnQUFELzRRQ0FSWGhwWmdBQVRVMEFL
Z0FBQUFnQUJRRVNBQU1BQUFBQkFBRUFBQUVhQUFVQQpBQUFCQUFBQVNnRWJBQVVBQUFBQkFBQUFV
Z0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVdnQUFBQUFBQUFCZ0FBQUFBUUFBCkFHQUFB
QUFCQUFLZ0FnQUVBQUFBQVFBQUFCQ2dBd0FFQUFBQUFRQUFBQkFBQUFBQS85c0FRd0FDQVFFQ0FR
RUNBZ0VDQWdJQ0FnTUYKQXdNREF3TUdCQVFEQlFjR0J3Y0hCZ1lHQndnTENRY0lDZ2dHQmdrTkNR
b0xDd3dNREFjSkRRNE5EQTRMREF3TC85c0FRd0VDQWdJRApBZ01GQXdNRkN3Z0dDQXNMQ3dzTEN3
c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMCkN3
c0wvOEFBRVFnQUVBQVFBd0VpQUFJUkFRTVJBZi9FQUI4QUFBRUZBUUVCQVFFQkFBQUFBQUFBQUFB
QkFnTUVCUVlIQ0FrS0MvL0UKQUxVUUFBSUJBd01DQkFNRkJRUUVBQUFCZlFFQ0F3QUVFUVVTSVRG
QkJoTlJZUWNpY1JReWdaR2hDQ05Dc2NFVlV0SHdKRE5pY29JSgpDaFlYR0JrYUpTWW5LQ2txTkRV
Mk56ZzVPa05FUlVaSFNFbEtVMVJWVmxkWVdWcGpaR1ZtWjJocGFuTjBkWFozZUhsNmc0U0Zob2VJ
CmlZcVNrNVNWbHBlWW1acWlvNlNscHFlb3FhcXlzN1MxdHJlNHVickN3OFRGeHNmSXljclMwOVRW
MXRmWTJkcmg0dVBrNWVibjZPbnEKOGZMejlQWDI5L2o1K3YvRUFCOEJBQU1CQVFFQkFRRUJBUUVB
QUFBQUFBQUJBZ01FQlFZSENBa0tDLy9FQUxVUkFBSUJBZ1FFQXdRSApCUVFFQUFFQ2R3QUJBZ01S
QkFVaE1RWVNRVkVIWVhFVElqS0JDQlJDa2FHeHdRa2pNMUx3RldKeTBRb1dKRFRoSmZFWEdCa2FK
aWNvCktTbzFOamM0T1RwRFJFVkdSMGhKU2xOVVZWWlhXRmxhWTJSbFptZG9hV3B6ZEhWMmQzaDVl
b0tEaElXR2g0aUppcEtUbEpXV2w1aVoKbXFLanBLV21wNmlwcXJLenRMVzJ0N2k1dXNMRHhNWEd4
OGpKeXRMVDFOWFcxOWpaMnVMajVPWG01K2pwNnZMejlQWDI5L2o1K3YvYQpBQXdEQVFBQ0VRTVJB
RDhBOTBvb29yK0t6L0Q4LzlrPQoK
</data>
<flag name="review"
          id="116040"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>117000</attachid>
            <date>2011-11-29 11:06:37 -0800</date>
            <delta_ts>2012-10-08 16:10:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>71661-3.txt</filename>
            <type>text/plain</type>
            <size>14391</size>
            <attacher name="Ben Murdoch">benm</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwMTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM3IEBACisyMDExLTExLTI5ICBCZW4gTXVy
ZG9jaCAgPGJlbm1AZ29vZ2xlLmNvbT4KKworICAgICAgICBJbWFnZSBvbmxvYWQgY2FsbGJhY2sg
ZmlyZXMgd2hlbiBpbWFnZSBsb2FkaW5nIGRpc2FibGVkLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE2NjEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdoZW4gaW1hZ2UgbG9hZGluZyBpcyBk
aXNhYmxlZCB3aXRoIHRoZSBXZWJDb3JlOjpTZXR0aW5nczo6c2V0SW1hZ2VzTG9hZGVkQXV0b21h
dGljYWxseQorICAgICAgICBBUEksIG9ubG9hZCBjYWxsYmFja3Mgd2VyZSBiZWluZyBmaXJlZCBk
ZXNwaXRlIGltYWdlcyBub3QgYmVpbmcgbG9hZGVkLiBCZWNhdXNlIG9mIHRoaXMsCisgICAgICAg
IGlmIGltYWdlIGxvYWRzIHdlcmUgc3Vic2VxdWVudGx5IHJlLWVuYWJsZWQsIHdlIHdvdWxkIG5v
dCBnZXQgYW4gb25sb2FkIGNhbGxiYWNrIGF0IHRoYXQKKyAgICAgICAgdGltZSAoYXMgb25lIGhh
ZCBhbHJlYWR5IGJlZW4gbWFkZSkuCisKKyAgICAgICAgQWZ0ZXIgZXhhbWluaW5nIHRoZSBiZWhh
dmlvciBvZiBvdGhlciBicm93c2VycyBpbiB0aGlzIGNpcmN1bXN0YW5jZSwgdGhlIGJ1ZyBhcHBl
YXJzIHRvIGJlIHRoYXQKKyAgICAgICAgd2UgZmlyZSBhbiBvbmxvYWQgY2FsbGJhY2sgd2hlbiBh
biBpbWFnZSBpcyByZXF1ZXN0ZWQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGltYWdlIGxvYWRpbmcg
aXMKKyAgICAgICAgZW5hYmxlZCBvciBkaXNhYmxlZC4gV2Ugc2hvdWxkIG5vdCBmaXJlIHRoZSBj
YWxsYmFjayB3aGVuIGxvYWRpbmcgaXMgZGlzYWJsZWQuIChOb3RlIHRoYXQgd2UKKyAgICAgICAg
d291bGRuJ3QgYWN0dWFsbHkgbG9hZCB0aGUgaW1hZ2UgaWYgbG9hZGluZyB3YXMgZGlzYWJsZWQs
IHRoYXQgZnVuY3Rpb25hbGl0eSBpcyB3b3JraW5nIGFzCisgICAgICAgIGV4cGVjdGVkLikKKwor
ICAgICAgICBUZXN0czogZmFzdC9pbWFnZXMvbG9hZC1ldmVudC13aXRoLWRpc2FibGVkLWF1dG9s
b2FkLWNhY2hlZC5odG1sCisgICAgICAgICAgICAgICBmYXN0L2ltYWdlcy9sb2FkLWV2ZW50LXdp
dGgtZGlzYWJsZWQtYXV0b2xvYWQuaHRtbAorCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hl
ZEltYWdlLmNwcDogQWRkIGEgZmxhZyB0byBkZXRlcm1pbmUgaWYgdGhlIGltYWdlIHNob3VsZCBi
ZSBhdXRvbG9hZGVkLgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRJbWFnZS5oOiBEaXR0
bywgYW5kIHVwZGF0ZSBzdGlsbE5lZWRzTG9hZCgpIGZ1bmN0aW9uIHRvIHVzZSB0aGUgZmxhZy4K
KyAgICAgICAgKiBsb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuY3BwOiAKKyAgICAgICAgKFdl
YkNvcmU6OkNhY2hlZFJlc291cmNlOjpkaWRBZGRDbGllbnQpOiBPbmx5IG1ha2UgdGhlIG5vdGlm
eUZpbmlzaGVkIGNhbGxiYWNrIG9uIHRoZSBjbGllbnQgaWYKKyAgICAgICAgICAgIHdlIGFyZSBu
b3QgbG9hZGluZywgYW5kIGhhdmUgbm8gbW9yZSBsb2FkaW5nIHRvIGRvLgorICAgICAgICAqIGxv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oOiBBZGQgdmlydHVhbCBzdGlsbE5lZWRzTG9hZCBm
dW5jdGlvbiwgY3VycmVudGx5IG9ubHkgb3ZlcnJpZGRlbiBieQorICAgICAgICAgICAgQ2FjaGVk
SW1hZ2UuCisgICAgICAgICogbG9hZGVyL2NhY2hlL0NhY2hlZFJlc291cmNlTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZXN0SW1hZ2UpOiBT
ZXQgYSBmbGFnIG9uIHRoZSByZXNvdXJjZSB0byBpZGVudGlmeSB3aGV0aGVyCisgICAgICAgICAg
ICBpdCBzaG91bGQgYmUgYXV0b2xvYWRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZFJlc291
cmNlTG9hZGVyOjpzZXRBdXRvTG9hZEltYWdlcyk6IFVwZGF0ZSB0aGUgYXV0b2xvYWQgZmxhZyB3
aGVuIGltYWdlIGxvYWRzIGFyZQorICAgICAgICAgICAgZW5hYmxlZCBhZ2Fpbi4KKwogMjAxMS0x
MS0yOCAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGdvb2dsZS5jb20+CiAKICAgICAgICAgV2Vi
IEluc3BlY3RvcjogcHV0IGluc3BlY3RvciBhZ2VudHMgaW50byBhIHZlY3RvciBpbiB0aGUgSW5z
cGVjdG9yQ29udHJvbGxlci4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNo
ZWRJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0Nh
Y2hlZEltYWdlLmNwcAkocmV2aXNpb24gMTAxMzQ1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVy
L2NhY2hlL0NhY2hlZEltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgsNyBAQCBD
YWNoZWRJbWFnZTo6Q2FjaGVkSW1hZ2UoY29uc3QgUmVzb3VyY2VSCiAgICAgLCBtX2ltYWdlKDAp
CiAgICAgLCBtX2RlY29kZWREYXRhRGVsZXRpb25UaW1lcih0aGlzLCAmQ2FjaGVkSW1hZ2U6OmRl
Y29kZWREYXRhRGVsZXRpb25UaW1lckZpcmVkKQogICAgICwgbV9zaG91bGRQYWludEJyb2tlbklt
YWdlKHRydWUpCisgICAgLCBtX2F1dG9Mb2FkV2FzUHJldmVudGVkQnlTZXR0aW5ncyhmYWxzZSkK
IHsKICAgICBzZXRTdGF0dXMoVW5rbm93bik7CiB9CkBAIC02Nyw2ICs2OCw3IEBAIENhY2hlZElt
YWdlOjpDYWNoZWRJbWFnZShJbWFnZSogaW1hZ2UpCiAgICAgLCBtX2ltYWdlKGltYWdlKQogICAg
ICwgbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXIodGhpcywgJkNhY2hlZEltYWdlOjpkZWNvZGVk
RGF0YURlbGV0aW9uVGltZXJGaXJlZCkKICAgICAsIG1fc2hvdWxkUGFpbnRCcm9rZW5JbWFnZSh0
cnVlKQorICAgICwgbV9hdXRvTG9hZFdhc1ByZXZlbnRlZEJ5U2V0dGluZ3MoZmFsc2UpCiB7CiAg
ICAgc2V0U3RhdHVzKENhY2hlZCk7CiAgICAgc2V0TG9hZGluZyhmYWxzZSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkSW1hZ2UuaAkocmV2aXNpb24gMTAxMzQ1KQor
KysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZEltYWdlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTgzLDcgKzgzLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjbGVhcigpOwogICAgIAot
ICAgIGJvb2wgc3RpbGxOZWVkc0xvYWQoKSBjb25zdCB7IHJldHVybiAhZXJyb3JPY2N1cnJlZCgp
ICYmIHN0YXR1cygpID09IFVua25vd24gJiYgIWlzTG9hZGluZygpOyB9CisgICAgYm9vbCBzdGls
bE5lZWRzTG9hZCgpIGNvbnN0IHsgcmV0dXJuICghZXJyb3JPY2N1cnJlZCgpICYmIHN0YXR1cygp
ID09IFVua25vd24gJiYgIWlzTG9hZGluZygpKSB8fCAobV9hdXRvTG9hZFdhc1ByZXZlbnRlZEJ5
U2V0dGluZ3MgJiYgIWluQ2FjaGUoKSk7IH0KICAgICB2b2lkIGxvYWQoKTsKIAogICAgIC8vIElt
YWdlT2JzZXJ2ZXIKQEAgLTk0LDYgKzk0LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBh
bmltYXRpb25BZHZhbmNlZChjb25zdCBJbWFnZSopOwogICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2Vk
SW5SZWN0KGNvbnN0IEltYWdlKiwgY29uc3QgSW50UmVjdCYpOwogCisgICAgdm9pZCBzZXRBdXRv
TG9hZFdhc1ByZXZlbnRlZEJ5U2V0dGluZ3MoYm9vbCBwcmV2ZW50ZWQpIHsgbV9hdXRvTG9hZFdh
c1ByZXZlbnRlZEJ5U2V0dGluZ3MgPSBwcmV2ZW50ZWQ7IH0KKyAgICAKIHByaXZhdGU6CiAgICAg
SW1hZ2UqIGxvb2t1cE9yQ3JlYXRlSW1hZ2VGb3JSZW5kZXJlcihjb25zdCBSZW5kZXJPYmplY3Qq
KTsKIApAQCAtMTExLDYgKzExMyw3IEBAIHByaXZhdGU6CiAjZW5kaWYKICAgICBUaW1lcjxDYWNo
ZWRJbWFnZT4gbV9kZWNvZGVkRGF0YURlbGV0aW9uVGltZXI7CiAgICAgYm9vbCBtX3Nob3VsZFBh
aW50QnJva2VuSW1hZ2U7CisgICAgYm9vbCBtX2F1dG9Mb2FkV2FzUHJldmVudGVkQnlTZXR0aW5n
czsKIH07CiAKIGNsYXNzIENhY2hlZEltYWdlQ2xpZW50IDogcHVibGljIENhY2hlZFJlc291cmNl
Q2xpZW50IHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZFJl
c291cmNlLmNwcAkocmV2aXNpb24gMTAxMzQ1KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2Nh
Y2hlL0NhY2hlZFJlc291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcxLDcgKzM3MSw3IEBA
IHZvaWQgQ2FjaGVkUmVzb3VyY2U6OmFkZENsaWVudChDYWNoZWRSZXMKIAogdm9pZCBDYWNoZWRS
ZXNvdXJjZTo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50KiBjKQogewotICAgIGlm
ICghaXNMb2FkaW5nKCkpCisgICAgaWYgKCFpc0xvYWRpbmcoKSAmJiAhc3RpbGxOZWVkc0xvYWQo
KSkKICAgICAgICAgYy0+bm90aWZ5RmluaXNoZWQodGhpcyk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZS5oCShyZXZpc2lvbiAxMDEzNDUp
CisrKyBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTM5LDYgKzEzOSw3IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgaXNMb2FkaW5n
KCkgY29uc3QgeyByZXR1cm4gbV9sb2FkaW5nOyB9CiAgICAgdm9pZCBzZXRMb2FkaW5nKGJvb2wg
YikgeyBtX2xvYWRpbmcgPSBiOyB9CisgICAgdmlydHVhbCBib29sIHN0aWxsTmVlZHNMb2FkKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0ltYWdlKCkgY29u
c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICBib29sIGlnbm9yZUZvclJlcXVlc3RDb3VudCgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkUmVzb3VyY2VMb2Fk
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRS
ZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDEwMTM0NSkKKysrIFNvdXJjZS9XZWJDb3JlL2xv
YWRlci9jYWNoZS9DYWNoZWRSZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
OCw4ICsxNTgsMTEgQEAgQ2FjaGVkSW1hZ2UqIENhY2hlZFJlc291cmNlTG9hZGVyOjpyZXF1ZQog
ICAgICAgICB9CiAgICAgfQogICAgIENhY2hlZEltYWdlKiByZXNvdXJjZSA9IHN0YXRpY19jYXN0
PENhY2hlZEltYWdlKj4ocmVxdWVzdFJlc291cmNlKENhY2hlZFJlc291cmNlOjpJbWFnZVJlc291
cmNlLCByZXF1ZXN0LCBTdHJpbmcoKSwgZGVmYXVsdENhY2hlZFJlc291cmNlT3B0aW9ucygpKSk7
Ci0gICAgaWYgKGF1dG9Mb2FkSW1hZ2VzKCkgJiYgcmVzb3VyY2UgJiYgcmVzb3VyY2UtPnN0aWxs
TmVlZHNMb2FkKCkpCi0gICAgICAgIHJlc291cmNlLT5sb2FkKHRoaXMsIGRlZmF1bHRDYWNoZWRS
ZXNvdXJjZU9wdGlvbnMoKSk7CisgICAgaWYgKHJlc291cmNlKSB7CisgICAgICAgIHJlc291cmNl
LT5zZXRBdXRvTG9hZFdhc1ByZXZlbnRlZEJ5U2V0dGluZ3MoIWF1dG9Mb2FkSW1hZ2VzKCkpOwor
ICAgICAgICBpZiAoYXV0b0xvYWRJbWFnZXMoKSAmJiByZXNvdXJjZS0+c3RpbGxOZWVkc0xvYWQo
KSkKKyAgICAgICAgICAgIHJlc291cmNlLT5sb2FkKHRoaXMsIGRlZmF1bHRDYWNoZWRSZXNvdXJj
ZU9wdGlvbnMoKSk7CisgICAgfQogICAgIHJldHVybiByZXNvdXJjZTsKIH0KIApAQCAtNjI3LDYg
KzYzMCw3IEBAIHZvaWQgQ2FjaGVkUmVzb3VyY2VMb2FkZXI6OnNldEF1dG9Mb2FkSW0KICAgICAg
ICAgQ2FjaGVkUmVzb3VyY2UqIHJlc291cmNlID0gaXQtPnNlY29uZC5nZXQoKTsKICAgICAgICAg
aWYgKHJlc291cmNlLT50eXBlKCkgPT0gQ2FjaGVkUmVzb3VyY2U6OkltYWdlUmVzb3VyY2UpIHsK
ICAgICAgICAgICAgIENhY2hlZEltYWdlKiBpbWFnZSA9IGNvbnN0X2Nhc3Q8Q2FjaGVkSW1hZ2Uq
PihzdGF0aWNfY2FzdDxjb25zdCBDYWNoZWRJbWFnZSo+KHJlc291cmNlKSk7CisgICAgICAgICAg
ICBpbWFnZS0+c2V0QXV0b0xvYWRXYXNQcmV2ZW50ZWRCeVNldHRpbmdzKGZhbHNlKTsKIAogICAg
ICAgICAgICAgaWYgKGltYWdlLT5zdGlsbE5lZWRzTG9hZCgpKQogICAgICAgICAgICAgICAgIGlt
YWdlLT5sb2FkKHRoaXMsIGRlZmF1bHRDYWNoZWRSZXNvdXJjZU9wdGlvbnMoKSk7CkluZGV4OiBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxMDEzNDUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMS0xMS0yOSAgQmVuIE11cmRvY2ggIDxiZW5tQGdvb2ds
ZS5jb20+CisKKyAgICAgICAgSW1hZ2Ugb25sb2FkIGNhbGxiYWNrIGZpcmVzIHdoZW4gaW1hZ2Ug
bG9hZGluZyBkaXNhYmxlZC4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcxNjYxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBmYXN0L2ltYWdlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0b2xvYWQt
Y2FjaGVkLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9pbWFnZXMvbG9hZC1l
dmVudC13aXRoLWRpc2FibGVkLWF1dG9sb2FkLWNhY2hlZC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2ltYWdlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0b2xvYWQtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2ltYWdlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJs
ZWQtYXV0b2xvYWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9pbWFnZXMvcmVzb3VyY2Vz
L2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9hZC5qcGc6IEFkZGVkLgorCiAyMDExLTEx
LTI5ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgU1ZH
IDxwYXRoPiBEUlQgZHVtcHMgaGF2ZSByb3VuZGluZyBwcm9ibGVtcyBhY3Jvc3MgcGxhdGZvcm1z
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQt
YXV0b2xvYWQtY2FjaGVkLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2ltYWdlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0b2xvYWQtY2FjaGVkLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2xvYWQtZXZl
bnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9hZC1jYWNoZWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDIgQEAKK1BBU1MKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMv
bG9hZC1ldmVudC13aXRoLWRpc2FibGVkLWF1dG9sb2FkLWNhY2hlZC5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRv
bG9hZC1jYWNoZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvaW1hZ2Vz
L2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9hZC1jYWNoZWQuaHRtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1OCBAQAorPGh0bWw+DQorPGhlYWQ+DQorICAgIDx0aXRsZT5UZXN0IHRo
YXQgYW4gb25sb2FkIGNhbGxiYWNrIGlzIGZpcmVkIHdoZW4gaW1hZ2UgbG9hZHMgYXJlIGRpc2Fi
bGVkIGFuZCBhIGNhY2hlZCBpbWFnZSBpcyBmb3VuZC4gKGJ1ZyA3MTY2MSk8L3RpdGxlPg0KKyAg
ICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+DQorICAgICAgICA8IS0tDQorICAgICAg
ICB2YXIgZmlsZW5hbWUgPSAicmVzb3VyY2VzL2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRv
bG9hZC5qcGc/IitNYXRoLnJhbmRvbSgpOw0KKyAgICAgICAgDQorICAgICAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7DQorICAgICAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOw0KKyAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLndhaXRV
bnRpbERvbmUoKTsNCisgICAgICAgIH0gZWxzZQ0KKyAgICAgICAgICAgIGRvY3VtZW50LndyaXRl
KCdUaGlzIHRlc3QgbXVzdCBiZSBydW4gaW5zaWRlIER1bXBSZW5kZXJUcmVlLicpOw0KKyAgICAg
ICAgDQorICAgICAgICB2YXIgZmlyZWQgPSAwOw0KKyAgICAgICAgdmFyIHRpbWVvdXRJZCA9IDA7
DQorICAgICAgICBmdW5jdGlvbiBpbWdMb2FkZWQoZSkgew0KKyAgICAgICAgICAgICBmaXJlZCsr
Ow0KKyAgICAgICAgICAgICBpZiAoZmlyZWQgPT0gMSkgew0KKyAgICAgICAgICAgICAgICAvLyBU
aGUgaW1hZ2Ugc2hvdWxkIG5vdyBiZSBpbiB0aGUgY2FjaGUuDQorICAgICAgICAgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLmRpc2FibGVJbWFnZUxvYWRpbmcoKTsNCisgICAgICAgICAgICAg
ICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdpbWcnKS5zcmMgPSAiZGF0YToiOyB9LCAwKTsNCisgICAgICAgICAgICAgICAgd2luZG93LnNl
dFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbWcnKS5zcmMg
PSBmaWxlbmFtZTsgfSwgMCk7DQorICAgICAgICAgICAgICAgIC8vIElmIHdlIGRvbid0IGdldCBh
biBvbmxvYWQgYWZ0ZXIgMXMsIGNvbnNpZGVyIHRoZSB0ZXN0IGZhaWxlZC4gQSBjYWNoZWQgaW1h
Z2Ugc2hvdWxkIHN0aWxsIGxvYWQgd2l0aCBpbWFnZSBsb2FkaW5nIGRpc2FibGVkLg0KKyAgICAg
ICAgICAgICAgICB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbigpIHsgZmFp
bGVkKCk7IH0sIDEwMDApOw0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoZmlyZWQgPT0gMikgew0K
KyAgICAgICAgICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7DQorICAgICAg
ICAgICAgICAgIHBhc3NlZCgpOw0KKyAgICAgICAgICAgIH0gZWxzZQ0KKyAgICAgICAgICAgICAg
ICBmYWlsZWQoKTsNCisgICAgICAgIH0NCisgICAgICAgIA0KKyAgICAgICAgZnVuY3Rpb24gcGFz
c2VkKCkgew0KKyAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJyku
aW5uZXJUZXh0ICs9ICdQQVNTJzsNCisgICAgICAgICAgICBmaW5pc2hUZXN0KCk7DQorICAgICAg
ICB9DQorICAgICAgICANCisgICAgICAgIGZ1bmN0aW9uIGZhaWxlZCgpIHsNCisgICAgICAgICAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVyVGV4dCArPSAnRkFJTDog
R290ICcrIGZpcmVkICsgJyBsb2FkIGV2ZW50cyc7DQorICAgICAgICAgICAgZmluaXNoVGVzdCgp
Ow0KKyAgICAgICAgfQ0KKyAgICAgICAgICAgIA0KKyAgICAgICAgZnVuY3Rpb24gZmluaXNoVGVz
dCgpIHsNCisgICAgICAgICAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQ0KKyAg
ICAgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7DQorICAgICAg
ICB9DQorDQorICAgICAgICBmdW5jdGlvbiBsb2FkZWQoKSB7DQorICAgICAgICAgICAgZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2ltZycpLnNyYyA9IGZpbGVuYW1lOw0KKyAgICAgICAgfQ0KKw0K
KyAgICAgICAgLy8gLS0+DQorICAgIDwvc2NyaXB0Pg0KKzwvaGVhZD4NCis8Ym9keSBvbmxvYWQ9
ImxvYWRlZCgpIj4NCisgICAgPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+DQorICAgIDxpbWcgc3Jj
PSIiIGlkPSJpbWciIG9ubG9hZD0iaW1nTG9hZGVkKCkiIC8+DQorPC9ib2R5Pg0KKzwvaHRtbD4N
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQt
YXV0b2xvYWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvaW1h
Z2VzL2xvYWQtZXZlbnQtd2l0aC1kaXNhYmxlZC1hdXRvbG9hZC1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJs
ZWQtYXV0b2xvYWQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIgQEAKK1BB
U1MKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvbG9hZC1ldmVudC13aXRoLWRpc2Fi
bGVkLWF1dG9sb2FkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMv
bG9hZC1ldmVudC13aXRoLWRpc2FibGVkLWF1dG9sb2FkLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0b2xvYWQu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorPGh0bWw+Cis8aGVhZD4KKyAgICA8
dGl0bGU+VGVzdCB0aGF0IG5vIG9ubG9hZCBjYWxsYmFjayBpcyBmaXJlZCB3aGVuIGltYWdlIGxv
YWRzIGFyZSBkaXNhYmxlZCBhbmQgbm8gY2FjaGVkIGltYWdlIGlzIGZvdW5kLiAoYnVnIDcxNjYx
KTwvdGl0bGU+CisgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgorICAgICAgICA8
IS0tCisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLmRpc2FibGVJbWFnZUxvYWRpbmcoKTsKKyAgICAgICAgICAgIGxheW91
dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBkb2N1bWVudC53cml0ZSgnVGhpcyB0ZXN0IG11c3QgYmUgcnVuIGluc2lkZSBEdW1wUmVu
ZGVyVHJlZS4nKTsKKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIGltZ0xvYWRlZChlKSB7Cisg
ICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29uc29sZScpLmlubmVyVGV4dCAr
PSAnRkFJTDogaW1hZ2Ugb25sb2FkIGZpcmVkISc7CisgICAgICAgICAgICBmaW5pc2hUZXN0KCk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIHBhc3NlZCgpIHsKKyAgICAg
ICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuaW5uZXJUZXh0ICs9ICdQ
QVNTJzsKKyAgICAgICAgICAgIGZpbmlzaFRlc3QoKTsKKyAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgIGZ1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgICAgICAgICAgICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICAgICAgICAgIGxheW91dFRlc3RDb250cm9s
bGVyLm5vdGlmeURvbmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGxvYWRlZCgp
IHsKKyAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgc3JjIG9mIHRoZSBpbWFnZSBlbGVtZW50IHRv
IHRyeSBhbmQgdHJpZ2dlciBhbiBvbmxvYWQgY2FsbGJhY2suIE5lZWRzIHRvIGJlIGFzeW5jIHRv
IGVuc3VyZQorICAgICAgICAgICAgLy8gdGhhdCB0aGUgY2FsbCB0byBsYXlvdXRUZXN0Q29udHJv
bGxlci5kaXNhYmxlSW1hZ2VMb2FkaW5nKCkgYWJvdmUgaGFzIHRha2VuIGVmZmVjdC4KKyAgICAg
ICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgnaW1nJykuc3JjID0gInJlc291cmNlcy9sb2FkLWV2ZW50LXdpdGgtZGlzYWJsZWQtYXV0
b2xvYWQuanBnPyIrTWF0aC5yYW5kb20oKTsgfSwgMCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIElmIHdlIGRvbid0IGdldCBhbiBvbmxvYWQgYWZ0ZXIgMXMsIGNvbnNpZGVyIHRoZSB0
ZXN0IHBhc3NlZC4KKyAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBw
YXNzZWQoKTsgfSwgMTAwMCk7CisgICAgICAgIH0KKworICAgICAgICAvLyAtLT4KKyAgICA8L3Nj
cmlwdD4KKzwvaGVhZD4KKzxib2R5IG9ubG9hZD0ibG9hZGVkKCkiPgorICAgIDxkaXYgaWQ9ImNv
bnNvbGUiPjwvZGl2PgorICAgIDxpbWcgc3JjPSIiIGlkPSJpbWciIG9ubG9hZD0iaW1nTG9hZGVk
KCkiIC8+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9y
ZXNvdXJjZXMvbG9hZC1ldmVudC13aXRoLWRpc2FibGVkLWF1dG9sb2FkLmpwZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10
eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlv
dXRUZXN0cy9mYXN0L2ltYWdlcy9yZXNvdXJjZXMvbG9hZC1ldmVudC13aXRoLWRpc2FibGVkLWF1
dG9sb2FkLmpwZwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRp
b24vb2N0ZXQtc3RyZWFtCgoKLzlqLzRBQVFTa1pKUmdBQkFRRUFZQUJnQUFELzRRQ0FSWGhwWmdB
QVRVMEFLZ0FBQUFnQUJRRVNBQU1BQUFBQkFBRUFBQUVhQUFVQQpBQUFCQUFBQVNnRWJBQVVBQUFB
QkFBQUFVZ0VvQUFNQUFBQUJBQUlBQUlkcEFBUUFBQUFCQUFBQVdnQUFBQUFBQUFCZ0FBQUFBUUFB
CkFHQUFBQUFCQUFLZ0FnQUVBQUFBQVFBQUFCQ2dBd0FFQUFBQUFRQUFBQkFBQUFBQS85c0FRd0FD
QVFFQ0FRRUNBZ0VDQWdJQ0FnTUYKQXdNREF3TUdCQVFEQlFjR0J3Y0hCZ1lHQndnTENRY0lDZ2dH
QmdrTkNRb0xDd3dNREFjSkRRNE5EQTRMREF3TC85c0FRd0VDQWdJRApBZ01GQXdNRkN3Z0dDQXNM
Q3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dzTEN3c0xD
d3NMCkN3c0wvOEFBRVFnQUVBQVFBd0VpQUFJUkFRTVJBZi9FQUI4QUFBRUZBUUVCQVFFQkFBQUFB
QUFBQUFBQkFnTUVCUVlIQ0FrS0MvL0UKQUxVUUFBSUJBd01DQkFNRkJRUUVBQUFCZlFFQ0F3QUVF
UVVTSVRGQkJoTlJZUWNpY1JReWdaR2hDQ05Dc2NFVlV0SHdKRE5pY29JSgpDaFlYR0JrYUpTWW5L
Q2txTkRVMk56ZzVPa05FUlVaSFNFbEtVMVJWVmxkWVdWcGpaR1ZtWjJocGFuTjBkWFozZUhsNmc0
U0Zob2VJCmlZcVNrNVNWbHBlWW1acWlvNlNscHFlb3FhcXlzN1MxdHJlNHVickN3OFRGeHNmSXlj
clMwOVRWMXRmWTJkcmg0dVBrNWVibjZPbnEKOGZMejlQWDI5L2o1K3YvRUFCOEJBQU1CQVFFQkFR
RUJBUUVBQUFBQUFBQUJBZ01FQlFZSENBa0tDLy9FQUxVUkFBSUJBZ1FFQXdRSApCUVFFQUFFQ2R3
QUJBZ01SQkFVaE1RWVNRVkVIWVhFVElqS0JDQlJDa2FHeHdRa2pNMUx3RldKeTBRb1dKRFRoSmZF
WEdCa2FKaWNvCktTbzFOamM0T1RwRFJFVkdSMGhKU2xOVVZWWlhXRmxhWTJSbFptZG9hV3B6ZEhW
MmQzaDVlb0tEaElXR2g0aUppcEtUbEpXV2w1aVoKbXFLanBLV21wNmlwcXJLenRMVzJ0N2k1dXNM
RHhNWEd4OGpKeXRMVDFOWFcxOWpaMnVMajVPWG01K2pwNnZMejlQWDI5L2o1K3YvYQpBQXdEQVFB
Q0VRTVJBRDhBOTBvb29yK0t6L0Q4LzlrPQoK
</data>

          </attachment>
      

    </bug>

</bugzilla>