<?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>33852</bug_id>
          
          <creation_ts>2010-01-19 11:34:46 -0800</creation_ts>
          <short_desc>Implement HTMLVideoElement support for texImage2D and texSubImage2D</short_desc>
          <delta_ts>2010-08-20 15:45:49 -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>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Marrin">cmarrin</reporter>
          <assigned_to name="Adrienne Walker">enne</assigned_to>
          <cc>abarth</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>dglazkov</cc>
    
    <cc>enne</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>kbr</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>182344</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-01-19 11:34:46 -0800</bug_when>
    <thetext>This will complete these calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264447</commentid>
    <comment_count>1</comment_count>
      <attachid>64358</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-08-13 11:24:11 -0700</bug_when>
    <thetext>Created attachment 64358
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264461</commentid>
    <comment_count>2</comment_count>
      <attachid>64358</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-13 12:20:59 -0700</bug_when>
    <thetext>Comment on attachment 64358
Patch


WebCore/html/canvas/WebGLRenderingContext.cpp:2213
 +      OwnPtr&lt;ImageBuffer&gt; buffer = ImageBuffer::create(size, DeviceRGB);
I don&apos;t think we should be creating and destroying the ImageBuffer on every call. It should be a member variable.

WebCore/html/canvas/WebGLRenderingContext.cpp:2477
 +      OwnPtr&lt;ImageBuffer&gt; buffer = ImageBuffer::create(size, DeviceRGB);

Same here


WebCore/html/canvas/WebGLRenderingContext.cpp:2485
 +                        m_unpackFlipY, m_unpackPremultiplyAlpha, ec);

No need to put this on a separate line

WebCore/html/canvas/WebGLRenderingContext.cpp:2221
 +                     m_unpackFlipY, m_unpackPremultiplyAlpha, ec);

No need to put this on a separate line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264466</commentid>
    <comment_count>3</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-08-13 12:31:37 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 64358 [details])
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:2213
&gt;  +      OwnPtr&lt;ImageBuffer&gt; buffer = ImageBuffer::create(size, DeviceRGB);
&gt; I don&apos;t think we should be creating and destroying the ImageBuffer on every call. It should be a member variable.

ImageBuffer objects can&apos;t be resized, but it is quite reasonable to keep one ImageBuffer around as a member variable and only recreate it when it needed to be resized.  The common case is probably that there&apos;s one video (or all the videos are identically sized).  We&apos;d still need to recreate per-call in some cases, but hopefully not that often.

Is that what you mean, or am I misunderstanding?

&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:2221
&gt;  +                     m_unpackFlipY, m_unpackPremultiplyAlpha, ec);
&gt; 
&gt; No need to put this on a separate line

Can do.  I was just making the code look like the rest of the file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264491</commentid>
    <comment_count>4</comment_count>
      <attachid>64358</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-08-13 13:54:02 -0700</bug_when>
    <thetext>Comment on attachment 64358
Patch

&gt; +    function startVideo() {
&gt; +        // Resize canvas to fit video.
&gt; +        var canvas = document.getElementsByTagName(&apos;canvas&apos;)[0];
&gt; +        // If video has a broken height, pick an arbitrary canvas size.
&gt; +        canvas.width = video.videoWidth &gt; 0 ? video.videoWidth : 32;
&gt; +        canvas.height = video.videoHeight &gt; 0 ? video.videoHeight : 32;

If a video has videoWidth or videoHeight of 0 after the &apos;canplay&apos; event fires, it either has no video track or there is a serious problem in the media engine. In either case, this test should fail instead of ignoring the problem.

&gt; +    IntSize size(video-&gt;videoWidth(), video-&gt;videoHeight());
&gt; +    OwnPtr&lt;ImageBuffer&gt; buffer = ImageBuffer::create(size, DeviceRGB);
&gt; +    if (!buffer) {
&gt; +        m_context-&gt;synthesizeGLError(GraphicsContext3D::OUT_OF_MEMORY);
&gt; +        return;

If the video element is passed before metadata is available or if it has no visual media, videoWidth and videoHeight will be zero. ImageBuffer::create uses fastMalloc to allocate the backing store, which calls CRASH() if malloc() returns 0. Maybe you should do an early return with an INVALID_VALUE error instead?

&gt; +    IntSize size(video-&gt;videoWidth(), video-&gt;videoHeight());
&gt; +    OwnPtr&lt;ImageBuffer&gt; buffer = ImageBuffer::create(size, DeviceRGB);
&gt; +    if (!buffer) {
&gt; +        m_context-&gt;synthesizeGLError(GraphicsContext3D::OUT_OF_MEMORY);
&gt; +        return;

Same here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264506</commentid>
    <comment_count>5</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-13 14:43:28 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #2)
&gt; &gt; (From update of attachment 64358 [details] [details])
&gt; &gt; 
&gt; &gt; WebCore/html/canvas/WebGLRenderingContext.cpp:2213
&gt; &gt;  +      OwnPtr&lt;ImageBuffer&gt; buffer = ImageBuffer::create(size, DeviceRGB);
&gt; &gt; I don&apos;t think we should be creating and destroying the ImageBuffer on every call. It should be a member variable.
&gt; 
&gt; ImageBuffer objects can&apos;t be resized, but it is quite reasonable to keep one ImageBuffer around as a member variable and only recreate it when it needed to be resized.  The common case is probably that there&apos;s one video (or all the videos are identically sized).  We&apos;d still need to recreate per-call in some cases, but hopefully not that often.
&gt; 
&gt; Is that what you mean, or am I misunderstanding?

That&apos;s what I mean. The problem is that this gets called a lot for video (ideally at 30fps) and this allocation will be expensive and will fragment memory. But I see a problem caching it in the GraphicsContext3D. You will get a lot of churn if you, for instance, try to render two videos of different sizes. You will continually recreate the ImageBuffer.

The right solution might be to cache several ImageBuffers using the size as the key. As long as you only cache a few buffers it should not be too expensive. Another option would be to cache the ImageBuffer in the HTMLVideoElement.

Eric, what do you think is the right thing to do here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>264517</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-08-13 15:20:30 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; The right solution might be to cache several ImageBuffers using the size as the key. As long as 
&gt; you only cache a few buffers it should not be too expensive. Another option would be to cache 
&gt; the ImageBuffer in the HTMLVideoElement.
&gt; 
&gt; Eric, what do you think is the right thing to do here?

I would guess that *most* of the time a given canvas element will only have one movie drawn to it at a time, but if it is important to optimize for multiple movies I think keeping a small number of ImageBuffers would be the way to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266296</commentid>
    <comment_count>7</comment_count>
      <attachid>64748</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-08-18 12:06:59 -0700</bug_when>
    <thetext>Created attachment 64748
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266300</commentid>
    <comment_count>8</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-08-18 12:11:07 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Created an attachment (id=64748) [details]
&gt; Patch

I wanted to comment and say that I added an array-based LRU image buffer cache of size 4.  Because the consensus seemed to be that we should just keep a small number of image buffer sizes around, this array approach seemed reasonable for small sizes and much less complex than a full hash table plus doubly linked list implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266332</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-18 13:11:29 -0700</bug_when>
    <thetext>Attachment 64748 did not build on chromium:
Build output: http://queues.webkit.org/results/3761336</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266343</commentid>
    <comment_count>10</comment_count>
      <attachid>64748</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-18 13:35:28 -0700</bug_when>
    <thetext>Comment on attachment 64748
Patch

WebCore/html/canvas/WebGLRenderingContext.cpp:2484
 +      texSubImage2DImpl(target, level, xoffset, yoffset, format, type, buf-&gt;image(), m_unpackFlipY, m_unpackPremultiplyAlpha, ec);


You need to update your patch to take into account Dave Hyatt&apos;s recent change to ImageBuffer where he gets rid of ImageBuffer::image. There is a new way to do this now, but I&apos;m not sure what it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266347</commentid>
    <comment_count>11</comment_count>
      <attachid>64748</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-18 13:39:44 -0700</bug_when>
    <thetext>Comment on attachment 64748
Patch

WebCore/html/canvas/WebGLRenderingContext.cpp:3803
 +  ImageBuffer* WebGLRenderingContext::LRUImageBufferCache::Get(const IntSize&amp; size)


The convention is to start functions with lower case. Better than using get(), imageBuffer() would be a better name, since that&apos;s what you&apos;re returning



WebCore/html/canvas/WebGLRenderingContext.cpp:3812
 +          BubbleToFront(i);


Start function with lower case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266351</commentid>
    <comment_count>12</comment_count>
      <attachid>64748</attachid>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-18 13:44:15 -0700</bug_when>
    <thetext>Comment on attachment 64748
Patch

WebCore/html/canvas/WebGLRenderingContext.cpp:3803
 +  ImageBuffer* WebGLRenderingContext::LRUImageBufferCache::Get(const IntSize&amp; size)


The convention is to start functions with lower case. Better than using get(), imageBuffer() would be a better name, since that&apos;s what you&apos;re returning



WebCore/html/canvas/WebGLRenderingContext.cpp:3812
 +          BubbleToFront(i);


Start function with lower case



WebCore/html/canvas/WebGLRenderingContext.cpp:3827
 +  void WebGLRenderingContext::LRUImageBufferCache::BubbleToFront(int idx)


Here too




WebCore/html/canvas/WebGLRenderingContext.h:427
 +      protected:


Why protected rather than private? Will this ever be subclassed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266354</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-18 13:45:03 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (From update of attachment 64748 [details])
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:3803
&gt;  +  ImageBuffer* WebGLRenderingContext::LRUImageBufferCache::Get(const IntSize&amp; size)
&gt; 
&gt; 
&gt; The convention is to start functions with lower case. Better than using get(), imageBuffer() would be a better name, since that&apos;s what you&apos;re returning
&gt; 
&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:3812
&gt;  +          BubbleToFront(i);
&gt; 
&gt; 
&gt; Start function with lower case

Please ignore these comments, they are duplicates in the following comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266430</commentid>
    <comment_count>14</comment_count>
      <attachid>64783</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-08-18 15:47:55 -0700</bug_when>
    <thetext>Created attachment 64783
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266495</commentid>
    <comment_count>15</comment_count>
      <attachid>64783</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-18 18:25:53 -0700</bug_when>
    <thetext>Comment on attachment 64783
Patch

This looks very good overall. A couple of comments.

LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video.html:64
 +          1.0, 0.0]);
Please look at the current version of tex-image-and-sub-image-2d-with-image.html for a starting point for this test. It uses WebGLTestUtils and in particular setupTexturedQuad which should make this code much more terse.


WebCore/html/canvas/WebGLRenderingContext.cpp:2209
 +      RefPtr&lt;Image&gt; image = buf-&gt;copyImage();
Is there a possibility of sharing this block of code between the texImage2D and texSubImage2D variants? Also, I think it&apos;s worth adding a FIXME about the fact that we&apos;re using copyImage here. At some point this copy is going to be a bottleneck for applications and we&apos;ll want to revisit it. On most platforms we&apos;ll eventually want to turn this into a GPU-to-GPU texture copy when the infrastructure is available.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266823</commentid>
    <comment_count>16</comment_count>
      <attachid>64872</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-08-19 10:52:21 -0700</bug_when>
    <thetext>Created attachment 64872
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266872</commentid>
    <comment_count>17</comment_count>
      <attachid>64872</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-19 11:53:11 -0700</bug_when>
    <thetext>Comment on attachment 64872
Patch

Very nice. r=me. Let me know if you need help getting this patch checked in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266986</commentid>
    <comment_count>18</comment_count>
    <who name="Chris Marrin">cmarrin</who>
    <bug_when>2010-08-19 15:02:14 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 64783 [details])
&gt; This looks very good overall. A couple of comments.
&gt; 
&gt; LayoutTests/fast/canvas/webgl/tex-image-and-sub-image-2d-with-video.html:64
&gt;  +          1.0, 0.0]);
&gt; Please look at the current version of tex-image-and-sub-image-2d-with-image.html for a starting point for this test. It uses WebGLTestUtils and in particular setupTexturedQuad which should make this code much more terse.
&gt; 
&gt; 
&gt; WebCore/html/canvas/WebGLRenderingContext.cpp:2209
&gt;  +      RefPtr&lt;Image&gt; image = buf-&gt;copyImage();
&gt; Is there a possibility of sharing this block of code between the texImage2D and texSubImage2D variants? Also, I think it&apos;s worth adding a FIXME about the fact that we&apos;re using copyImage here. At some point this copy is going to be a bottleneck for applications and we&apos;ll want to revisit it. On most platforms we&apos;ll eventually want to turn this into a GPU-to-GPU texture copy when the infrastructure is available.

Note that I believe ImageBuffer was ALWAYS doing a copyImage before. It&apos;s just that now you only doing when you ask for it.

But I agree that we eventually need a way to get video into the GPU more efficiently. This is especially bad since often the video is alway in backing store on the GPU for use by the HTML compositor. So we are currently pulling it out of the GPU and then pushing it right back in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>266992</commentid>
    <comment_count>19</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-08-19 15:07:40 -0700</bug_when>
    <thetext>(In reply to comment #18)

&gt; But I agree that we eventually need a way to get video into the GPU more efficiently. This is especially bad since often the video is alway in backing store on the GPU for use by the HTML compositor. So we are currently pulling it out of the GPU and then pushing it right back in.

This deserves a new bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267002</commentid>
    <comment_count>20</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-08-19 15:30:59 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Note that I believe ImageBuffer was ALWAYS doing a copyImage before. It&apos;s just that now you only doing when you ask for it.

You&apos;re correct.
 
&gt; But I agree that we eventually need a way to get video into the GPU more efficiently. This is especially bad since often the video is alway in backing store on the GPU for use by the HTML compositor. So we are currently pulling it out of the GPU and then pushing it right back in.

My thought was that an inefficient, but simple and cross-platform approach would make a reasonable first cut for this feature.  It works well enough to smoothly play a 400x300 video at 30fps in a WebGL texture on my machine.

I absolutely agree that texImage2D calls with image, video, and canvas elements should eventually get optimized to avoid the needless readback to the CPU from the GPU.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267013</commentid>
    <comment_count>21</comment_count>
      <attachid>64872</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-08-19 15:54:10 -0700</bug_when>
    <thetext>Comment on attachment 64872
Patch

Rejecting patch 64872 from commit-queue.

Failed to run &quot;[u&apos;/Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Kenneth Russell&apos;, u&apos;--force&apos;]&quot; exit_code: 255
Parsed 8 diffs from patch file(s).
patching file LayoutTests/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
literal is only avaliable with the XS version at /Library/Perl/5.8.8/Compress/Zlib.pm line 9
BEGIN failed--compilation aborted at /Library/Perl/5.8.8/Compress/Zlib.pm line 9.
Compilation failed in require at /Users/eseidel/Projects/CommitQueue/WebKitTools/Scripts/VCSUtils.pm line 1662.

Full output: http://queues.webkit.org/results/3710423</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267016</commentid>
    <comment_count>22</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-19 15:57:13 -0700</bug_when>
    <thetext>GIT binary patch
literal 1578

Sorry svn-apply can&apos;t handle these sorts of patches.  :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267026</commentid>
    <comment_count>23</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-08-19 16:16:01 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; GIT binary patch
&gt; literal 1578
&gt; 
&gt; Sorry svn-apply can&apos;t handle these sorts of patches.  :(

Oops. I didn&apos;t realize that webkit-patch would fail me like that.  I see the bug is already filed, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267028</commentid>
    <comment_count>24</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-08-19 16:18:50 -0700</bug_when>
    <thetext>&gt; Oops. I didn&apos;t realize that webkit-patch would fail me like that.  I see the bug is already filed, though.

Yeah, it&apos;s one of our top trouble spots.  Hopefully one of our illustrious Perl hackers will make svn-apply more awesome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267032</commentid>
    <comment_count>25</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-19 16:24:42 -0700</bug_when>
    <thetext>svn-apply can handle &quot;literal&quot; diffs, just not &quot;delta&quot; diffs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267033</commentid>
    <comment_count>26</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-08-19 16:25:24 -0700</bug_when>
    <thetext>The problem here is that the commit-queue has some broken perl install.  I need to fix it.  For the moment, we&apos;ll have to land this by hand.  I plan to move the cq to Snow Leopard next week. :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267273</commentid>
    <comment_count>27</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2010-08-20 09:43:09 -0700</bug_when>
    <thetext>(In reply to comment #19)

&gt; This deserves a new bug.

Agreed.  Filed here: https://bugs.webkit.org/show_bug.cgi?id=44339</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267442</commentid>
    <comment_count>28</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-08-20 15:12:22 -0700</bug_when>
    <thetext>Committed r65756: &lt;http://trac.webkit.org/changeset/65756&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>267456</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-08-20 15:45:49 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/65756 might have broken Chromium Mac Release</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64358</attachid>
            <date>2010-08-13 11:24:11 -0700</date>
            <delta_ts>2010-08-18 12:06:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33852-20100813112410.patch</filename>
            <type>text/plain</type>
            <size>18580</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2ODJjOTBjNDgyZGY1ZjE2OTc0YzUyYjY3YjI3MzBiYmVkZDFiYTZlLi4zYmUwY2Jk
OTZjNDNlNmI0NThhNDViMjVmMzU3Yjg4YTczMWE5ZDkzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAK
KzIwMTAtMDgtMTMgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgSFRNTFZp
ZGVvRWxlbWVudCBzdXBwb3J0IGZvciB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJECisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzg1MgorCisgICAg
ICAgICogZmFzdC9jYW52YXMvd2ViZ2wvY29udGVudC9xdWFkcmFudHMubXA0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZW50L3F1YWRyYW50cy5vZ3Y6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdp
dGgtdmlkZW8uaHRtbDogQWRkZWQuCisKIDIwMTAtMDgtMTEgIE5hdGUgQ2hhcGluICA8amFwaGV0
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3YuCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZW50L3F1YWRyYW50
cy5tcDQgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZW50L3F1YWRyYW50cy5t
cDQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYmFiNGY4ZDI2NTA0Yzc3OWFmYWJhMmExMTEyNjcxN2U1Y2YxNjhlZQpH
SVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMTU3OAp6Y21hSj5VdVlhZjd+ZX04Nj18YGREVypfI3cw
JnI0dmJURzhOdntXczJ7QVNtTEljYFJITSpKSW5heGdifDdDVkEKemNVU3pBVUA2Z31KX3NvI19R
Q2R7TlA+IUJSanxeQllXcmdCbzJkdztwaDkwdnI3dSRkdGwjWUE4WExycStuTHxACnp8Q3tmZDgl
MHElOVpgPylsJnZkM0VEcnEhWmhnV2hTViZvZVRIZF5gRWxIMDVJQyU1SUZWfWBYbzlrTGUqTE04
Ngp6UXBAIWdQJmN3ZVBFb04zOWtNRWNzRj1CdXJXU2l0eS0rQ2JuUDVXNHkoRkxPbVdEJHJJQW4p
TTJLTktvS1JOKU8Kemd4YTdPMiYxfTM5ZjVNMW1oWG1UOXwmQ2BxRWE/bnR5YX0zTXJpMmFLbj9q
c1IlVFVRO2RAe2NNdUxTd1R0WVVzCnp1eDtwd1FeJnw3TE08PH0lWjZVa04qY2xlX1ViVjt2fDdI
VClwUnxOZH1fRn5oVEA2XlhmS041ST1JNFdhJEBNSgp6MjJRWGJwVmNUYVdrZWwzT3BiI0lZVXNW
bGJ+IVo0MVhtcGlQQ2J2c2ZRcSN1dT59Qm8obDwwSDBoNk8pSyNpUTwKenJSJkpTdWByeyElcHom
ZzJyd0MkcTJ0Njw3fk1HfVRuLSt3a3Q/OXNWPlRwaU47RE1rR0AjOVZFTSF2TyFqMXpYCno4OyZr
R1cmdjJVMDEoSjVoaHZ8eyY7LWtqPlZPJU1RV0Z5IyQ/N2NBVm1PeFo3Xmk4eSlyZURLZmhxLSZr
d2F4Iwp6aGoyISZNX1l4YSZqTWdrWX0wXys2PTQpS2xxUXRqO1dUejM5PUE7fDQ5blBzVkBOJT40
VnlicUUzYC0hNFVDYj8KenN+VmNMTHE5UyF3SElJezFNNFprSEtSdWROaTFrJjZjQ0dgO1ZAajcy
TCF7REZpU1paV2cyZWVYKnhUTmxzKENqCnooJUVtV3xHQmVgd2BfU29gQE9PSjw8biFzeU9ZMXE/
XkVZcmN5OyE0UkRSJlk9UHkzP2dMezQ4LVFQQzdefm1KbAp6JS19K0NoUnhpPmU4V1EqPTNle2Ir
MjVEWXFqd2hFN2VCaTVffGxvJT9PaipLVXp4ZWhzLXVoRlVjR1VLOWU7MFcKel99RHh1QzV0RD03
WENVcGVRU0xGPWFIKz10LU9CajsmPClLTjUoKGl1Knw8Y2ZCRDRhWlJSSSlKTXYlTElgLSt7CnpP
WmB3XzM3U0Y9I05qWHs0NU8hKk42YG9tTmQ/QT1zIVhfT3w0OUQ7KCRzPzVnTFlYSjxgSTw3Pypf
K35RK15tdQp6MHIzMU9tJXklRW5mPloqYEdNeyp1JEBYcWstcyYlaFhMX0F6SGlPKXpmY1BaeDNa
QUxRbn5xbDx6U0t8VE42bU8KejhMbT9xV01pVjc3THIqajxaZztpPjJ3ZFJPTWNnSyl1PlBJYXpY
R1puTUVKa0JSUVh9S2RpRCU4WFVTTD9VY1BQCnpAcHlgMGsjOWowJVJPITdmb0JlKVFUYSVxQXNp
NW9PNiR4cFRyTE1kJENUZVZmOzM7SG91cn1MUFQmVHclNEcyeQp6RThJaHsxSX0hVWgyO1ZNQVFv
e3RpLXVlfClxRjVsZEQjOSVlUT54VDtOPlN0TSpWOzRPcllVUDdOUVBoaTFKYF4Kekx3UkB0X1Fr
P2E/UVdsPHc5MVpjSmJVU2xDI04kP280ZksoKjlrRTFmZDNWfCg1K2QoRnNfJEJocVdebkF7YGBQ
CmluWVFfRGhYZEhhT0tRclJkazUlX0hkSlhXREY+TXlIZXsqJnU3M2RXTCFEZyEKCmxpdGVyYWwg
MApIY21WP2QwMDAwMQoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L2NvbnRlbnQvcXVhZHJhbnRzLm9ndiBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2Nv
bnRlbnQvcXVhZHJhbnRzLm9ndgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xM2Y1NTY4ZWU4YmU3Yzg2ODhhZjU3NmNl
ZDAwYTcwZGNkMzdkNWJhCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCAzOTY2CnpjbWJ1Q2N7RWky
fEhsb29DT2VmWmdIUDclTWQ4RFU4R0FGc3NMXklIN3p8QHlsNl5GbWgpanxxWW02bWlVazhtRQp6
Uzw0NVpHRmhWI3FOTF9LTCtBSlZ7cV9CeF5aUCF9eCRucE9gRiE4Xj4pZDxhX252ZCM3dT88TFNY
ZiM5czMlU3sKemZaMWl8ZSo2UVY5M0FMXl9WcWB4dT54NHduZGNhQHUqZmgrU3BXd0kwe3xBYkJe
RE8pMSFrNTE1d2k7T2x5IUAoCnpgNkN6VXwzYE9YNG9hI3BNbFdHLTklPmktLURTS24mSWhUQ3Jr
YlhWbVdJWXo0THZPXzhBV0BLcGEzN1Z3PH03Qwp6Uz9uMCZGdGFePiFQRT9IPTxEdHRqQiFRIzJL
eEdYMmdxb3M+QlN4dD1vbkRrWCYmJThUMz0+aURHPX4qS3tFeE8KelNwPytMT21QOzcyWFl4UkRq
WX08VFY+fi1AcDh7V1hmTzJhVyR5KiRaeXgzTGlvIzByanNtfksmZ1JeOXYqUWt9CnpNSlV9KGwj
ZX5lNj01S20lMjVjNFpnV3I7O2J3T1JHSitGXzZJaT45MzN7U3BsaztjN1JNUkxaXiVycihoQyUx
Mgp6NG9VU1VGPEtkQmBUVURfdnp4fXk4ZD1HSSFMIyk7JXo8fXFePmpfbGM8TFBHcjh3c3MtdlBA
Q0ZhcSpSQ3NoJXkKenhFU049XzVXNjZAPmRgVDFSV2x4Mj9Bai08Q3ooVGd+NmFTZlNATFdGbn1Q
bGd+NVJQNGhCMUxgX1g+R0xhcVVUCnoocmRfIWA5TjQjU018JlkhKitGJVgjaD1CJkIjY1hwZURv
N1hkfEdRbnl3S0I4NyV7aDRuc19eUk9iVT88RnRwIwp6V1NWQVNWR29XbUtRPURZRX1BQllkVUhD
NmpSdGhLRCp9JU5qPkt2UTl1bTdIKzlTZH45fl9kRVYyYEo0RHt6Mj0KekhVQz15ZncxJl5oSllY
eDZadFVJelJmPnFfb0lLPzJtKDxYQ01HNXpBU2hPck5tUSY1MTE2dmlydSl3VjI/QXJjCnomencx
PDM0fDQkV0hQMk9mcV5xeFRUSigjclRNPXJAJkRAcTg0dGlPQ2NXa2x4KC1+fCRiUUlKRTlNdmpC
WSF8VQp6YTVVT30kWEd4QEt8enBUZW1DRiV0aVhOOERocCRWdGc+Kn0wcFBIRzJaeUlLTHBWSTY7
MUJXdjAwMWJhbj5GU0QKemFldShSQUk3bj4wfmxpcnVtY1hqIU1nN194Yy0yUENGMHRaej87e21L
TzNvNlJVZGEjaGA+djl7VWR6Q3p1JkFTCnpSaEp3JkZKIylAUmc8eSU0X3YzZWlaVCg7e2olJGVx
Oz1MSHM9a35yZyM+VD04TnlIMUN0JEwjQ2ZCZzVyJFo5VAp6cTI4YC1rXlphQjdhP19GM2Z3eWdi
NVBQazgzUj9sdkQlcmg8MGNKT250fGxMRiZFIzVNb0heIUxZc3x5M1gmeUsKekJhM2o7VWVAST9I
Iz98VCRGV21EJGFZTSkkayY/d1J5cEhVPW5jcHR7flQ7Y15+RlFWRE8/QCRea2xPTmZCcSZACnp7
aGFIb0sjYXM7M2h9WTd0PnFrYSRNOzt1SCt2JTJyaypYYVZuUihmTiRfZStRNElDdHQ9NkNxYmwy
WEUyXz8+Rgp6PGhtOThSODxFVHteLTZgQE5MdUEpT3p9OGFyNF5+bW07SlUqazRvWUxRbDxURkU1
RVh1c2dhP2lPZURITn55TmIKejlIVkEqd3V2NyV4dHJyWj9fUEdRI0dTbG42RyNDcCpzZFlXcXZn
an1yclR7I1dfamBySzBedE8+aGh9YThCd0dsCnprdkxMRD1Bbl5DdUZuZ3Y8Qjc+c1lWam9HUUIj
MXhFeCVRNz19JVpRTVhvOXdXZCYoUU9xMEpwNiNfZ25kaD5vdAp6UHJsS3ZZczJ2KnM5WmJ9KnxQ
Yj9WaiolZS1uNi1UJDxjTWttaVBZbV5yMFk4eE42MDkjaFl1PGxab3s0bDJFWWgKejlkd1YjXnJW
e3BuQH1nLTY9WjRqdlhuJGJPVE1rajx5YCtAIVdQbD1IUk1NTFNhP0J2dSE/K1peTkFsZVg+cGp4
Cno2WFN1S0tXZHtnRFpoQ29NWXNRV2JIZXNyO3phTF4rfCYtSUFGRiR2bUJKKFlDKXhfYnIlK0Em
YGUlNGZaWDsjQQp6X2BXUXZQfjRwNk41ZnM0PXhJcjFqQD5Nfitad2BpKF9XS201NCUrPjB7fUQ/
PWZ3NjVMdGJQajRJIUtMKypnMF4KelFMbCVwPT04ZzJQaXJpc21NVXpVajY1NlB5TmtDXlgrQWU3
eXl0VTdGckxDIXprT0F8PTR6MmQpfVQ8Qm1eN0MlCno5SzZQUmVwfF8pKGsxYlFURVkxTVQ+bytD
KU9FS2ttRVImdzUxamBKPFh6KW1mMm4rLWB7P0opP214cz4wKj55Tgp6MStgWiQoKVp2bHAweDI7
cGdxKGp8NlJCRD9abmtmNHFAP01gZkZ6M3ZRV05+RVRqJVQzY31lT1RHIUo3OEJAYDgKem0hOUta
XkBTcEBUODQxMSVDUWdCWElXX0J5UGBVZDtFJk5KS2NyZWF7e3xvd1dVY1NKJXlGI3BKSiR0bWh6
QWgqCnowMWVNRFk5VXA+KDlSQHRoeFI7d1BYMG5Fd08/cD12eUk/NjZoUX1EQHdUcn01cFVsSiRO
Xjh6ciE/Tj1YMWomfAp6RU1vSUxpR3RCVD1lUWpoS35SUnpnbGtIOFFjRDYrUU5hQFY0KXVvNUp6
QXUhV09DQHVvY3lRWDg3P1R1K210NDcKejFTS21XKGdWJnZMRnZAcWtZMWN7bG90NVdCaGxZenF6
YCRqb3ZkPWo8Q0RQMkVSMTB4Pnd9YjtJPiEjU01kYCtlCnpkP0c/WjRMUjIleEBSRWI1JVdtMjwp
dnBxVG9KRSQ1WWpDUGZCLTNwRihmOGJzMDNUXzBGdE1XSSR+SVcrZyhQUwp6c080aXV4eEsmRmdB
PjcjbEJuKH1vKjVzUCF5aD9eZSVMfGw1Nj9jRTxaIVhiQGx3cWAqSEtHKGY4eXYmbDQwKjAKenk9
d2xEblQrZTFmMyZVVl5IVXtUbDRfcUROeSE7ej8xPGVTdGBzamxycWUlbDwmdXEmaHY8WUlHPG1r
e3RhUWZECnpLd212a19fQHliZ2AqcFAqOHZNVmhZeWMlT2N2UndyTyRzdHF1PWB8Tz5nMm0wYjxh
MWZXR3hSSFkoVl9LP0NWbAp6N1pCUVlFeFopfC1QISFpS1BuY19gVXNic2Z8ZXB0JDVyKyZJXl98
fFRTM3RHI1R1TW0xdjhDTC1WPn4taFg/OHsKelV3aHhEKFFoZUBmQF5FcUV1cmd6VGtfWXNsN1M2
bjU4VHklbGg0fD0jQ3w5YnRyMihXTCtIdD9UYXZNNW5GSEZyCnpiSzMtMTBMITxIdkByK3BUSUND
KGxHcmJ+SmFkN0hpV0twP1Q5X08qdFk3UXowPzgqPDVEQ0pkJCoxSzBXNnFjeQp6dFZpUXBRRGdZ
SVJTTCN9e3ZIM15XPXx2eXJCaGhTSiVOa0w+YmE0RSsoYkg9bnA7antVRGpUV2pWYyM0ejNPRHUK
elZCWGtXOXNCRitrdF5lZUg5XmhUcT9jaDI1JDBmWE9OPSUpcGtQTjgyaSUrcT9vPENGXnt3fmdq
ZiNzYkplcitiCnpkKnFVUSZvektkfDcqOSZTTjg8dlI9ZXhlIX1XZ3BINGlfaFlMO05AaUN9SlpO
WiRoanxLQW5XZDV3KT8+cm88ZAp6ZWc9N0c2QXwpVTdvekhGWWQqbDVjLVhLPW9ncHp7Xj9QZF52
cylgTWpBPEpBX2pDdjNKJnMmSj8rVEdqRlB5NEcKemVZbkNVcT9kYE9qe2pPa1NmRWBeMCUjNFNx
dH17VmlEbSFQZSZ4Yj4/V15VSnZEaiRsTikhem1nYUpGfF99XjhkCnoxQGN+cnR9MnpXLUdaaEda
Jlo9NU9NVzs3YnUjfThxdUowcnBKTWFBYjxZbUV3Jip9TWx1SVRPYkEzJHErVH1ScAp6dTtgUFIr
PjYyXldGJTQ/VDI/OS0oYlQ0dVVFK1Zje3NzNG0kXnkyNV9pMmwzKFlOfmBaKzEhUG9wJUg+TGop
O0YKei1FLXg9KiR0IUpaa09vM3B0ZnRWPE1mYWhjdyNKfk43Y357T0w3dypmKyhHbmYkKSRsVkw3
ZUt2YUFwPihkTkgrCnpPSGZnPlNuQz4wVVoyPHk/ZWwzLWN5dFEjKHJoSTROQEF1aHd3I2BEc2pr
MGVPI0lzP1ZKYzktcHh5Pz1IeUVYJAp6QXVyNSRlVWJoelQ2dVBPPGprVDVDQnUoJitNNHMjR2NV
Mkdgek9oYzw/QiM0cD5uJEIxIS1fTC1WVmxKLTFnbFYKem9EV29GeWNFX2EoWUpTZXE8MUp1KVph
a0BWOEZkbytLaThjY1F0RV4/cTZHZm5reXB1b3NnTVdKOHFAczZWPkYrCnprR1REZFVsMVI5em9l
YGJgbXlgOFBzU2N6QnJjUStCdCt4UjltY3QqZCN8aW9lOzxlWl5lXm5SUVZDTmdmeGwqKQp6N2k1
X1VKVVROWmAqd1VmYClnSSZfQjxyPXAyRyZoe2BSYlZmLUhjJXF9aTJnX1V2aTFfVXUqWkZNWC1N
UjRlQzUKeld1a0NnVU1XQ20tVEk5LTdUcEtkSk84bmQoJD13Y157dTR6RHo4Z0l2SEYkSCRIKigz
SWU2O2ZxYlZocj8xdEo4CnpNeDBUeU9aPHpBZUYpVkdYXyRCPSVAfThYRXQ3R1I3VEdUTmNaSFhT
azt1T0JIe1pjRDE/KD53bGZjTUtqcUgwVwp6MUtRWmlRUFl4d3lEd3c1d3R7RSNPal9sbGVOR3Uy
YkFGQGNDWjZMSipseGpSQjY3anVxR2JfVm09c19HeTw9UEYKelJybzZmPWJxV3RpWXFMQUROcmNT
WjhsY2ptVGtJdChgYzlDRzxESHtHMXVfZCMkV2N0ZjN0ZX5kbXdoPktVKW11Cno5KkRXRUxSV21v
dStpeTlqUjNyOSE+PllISFhuZlRgaHl7bFBCKjRNSEpWPn16U0EoYDN6PkZxZFlOXn4kOHFPTQp6
SnQ4Z0tfNHI1WmJFX3A/eWlZal5HJlcxMnN0akRyX0dOaC1qYiF9NDEmc3tqU3hKWFBPdCptR1Ra
JjZaeW1WNGkKejxKJT1BQzMjfE1VeF9XZjh5VDUtNDlXTVlmaSlIUzxAK00rdHhCaHRtbmszSm12
aDZ1aFNyO1MjeVRlKnZnaUhvCnpTJjhXazdkMkE4PjIoPWwkJj1VRj42Uk50QDY2O1ZXZ2BAZWEq
KzduSFBqY01fV0kwSjViTDh5WChNbTxePSV9eQp6RWx9THVZM3JKPUIoSl9lcV9rJXlAeDE/WkZV
blg8ODJuezk/bGRPY3Y2S3RKP21rI2ZTXyFGK3RsUDgqPEx7PUYKem4lJDNQbHtKPEZ0Kk5UQkFw
b1N1eEBVKWFGIW1mPEtDZG0qVEVePXU0Syg9VGF3I2NgPiRoYG5mNEkzYlpZYEVyCnpLSD1kKFBf
UjA9U2BLdERzbFgkN1lFP2BUY2drZjxpTFN+bzg2OVN0XjEzNFdWVEdGYm9maWdGTnYmc2FWbX09
PQp6VEtOJUpKYXlTfjxLQj9CeEEpUmQmcU1iPCEzbFhfYCpMTCVZZjI1QUFlMz5Ve0xhKkx5TGVV
ZEk3Zil0UHtCN1cKekh1dloxPG04bDFhWnkyJSVGcitNJXd1TD44Vy1IQTZibmY3WCM0SUdqfmlp
akpsUTM4am16LVglNUU1PCN1aW5ZCnpAQm9LYV80SEh9Qjc2dUp3PTV8c3w3SiZhYDI1KlVGO25A
eVJwTFBBKkB0aFRxO3x3fE5CTVlnITJNdygzMCYmPwpXKWdTTXk1fW9mYHhJZXZzVTkkLWxjS1Iz
M2x1RjZ+CgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0yZC13aXRoLXZpZGVvLmh0
bWwgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFn
ZS0yZC13aXRoLXZpZGVvLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzNiNjMyZjk0Y2EyNmNjN2Y0M2EwNjM4
MjllNGVhMzljMTkyMzA4MAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtdmlkZW8uaHRtbApAQCAt
MCwwICsxLDIxMSBAQAorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJl
Zj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
Li4vbWVkaWEvbWVkaWEtZmlsZS5qcyI+PC9zY3JpcHQ+CisKKzxzY3JpcHQgaWQ9InZzaGFkZXIi
IHR5cGU9Ingtc2hhZGVyL3gtdmVydGV4Ij4KK2F0dHJpYnV0ZSB2ZWMzIGdfUG9zaXRpb247Cith
dHRyaWJ1dGUgdmVjMiBnX1RleENvb3JkMDsKKwordmFyeWluZyB2ZWMyIHRleENvb3JkOworCit2
b2lkIG1haW4oKQoreworICAgIGdsX1Bvc2l0aW9uID0gdmVjNChnX1Bvc2l0aW9uLngsIGdfUG9z
aXRpb24ueSwgZ19Qb3NpdGlvbi56LCAxLjApOworICAgIHRleENvb3JkID0gZ19UZXhDb29yZDA7
Cit9Cis8L3NjcmlwdD4KKworPHNjcmlwdCBpZD0iZnNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC1m
cmFnbWVudCI+CisjaWZkZWYgR0xfRVMKK3ByZWNpc2lvbiBoaWdocCBmbG9hdDsKKyNlbmRpZgor
dW5pZm9ybSBzYW1wbGVyMkQgdGV4OwordmFyeWluZyB2ZWMyIHRleENvb3JkOworCit2b2lkIG1h
aW4oKQoreworICAgIGdsX0ZyYWdDb2xvciA9IHRleHR1cmUyRCh0ZXgsIHRleENvb3JkKTsKK30K
Kzwvc2NyaXB0PgorCis8c2NyaXB0PgordmFyIGdsID0gbnVsbDsKK3ZhciB0ZXh0dXJlTG9jID0g
bnVsbDsKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsKKworZnVuY3Rpb24gaW5pdCgp
Cit7CisgICAgaWYgKHdpbmRvdy5pbml0Tm9uS2hyb25vc0ZyYW1ld29yaykgeworICAgICAgICB3
aW5kb3cuaW5pdE5vbktocm9ub3NGcmFtZXdvcmsodHJ1ZSk7CisgICAgfQorCisgICAgZGVzY3Jp
cHRpb24oJ1ZlcmlmeSB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJEIGNvZGUgcGF0aHMgdGFr
aW5nIFZpZGVvcycpOworCisgICAgZ2wgPSBpbml0V2ViR0woImV4YW1wbGUiLCAidnNoYWRlciIs
ICJmc2hhZGVyIiwgWyAiZ19Qb3NpdGlvbiIsICJnX1RleENvb3JkMCIgXSwgWyAwLCAwLCAwLCAx
IF0sIDEpOworCisgICAgdGV4dHVyZUxvYyA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihnbC5wcm9n
cmFtLCAidGV4Iik7CisKKyAgICB2YXIgdmVydGljZXMgPSBuZXcgV2ViR0xGbG9hdEFycmF5KFsK
KyAgICAgICAgIDEuMCwgIDEuMCwgMC4wLAorICAgICAgICAtMS4wLCAgMS4wLCAwLjAsCisgICAg
ICAgIC0xLjAsIC0xLjAsIDAuMCwKKyAgICAgICAgIDEuMCwgIDEuMCwgMC4wLAorICAgICAgICAt
MS4wLCAtMS4wLCAwLjAsCisgICAgICAgICAxLjAsIC0xLjAsIDAuMF0pOworICAgIHZhciB0ZXhD
b29yZHMgPSBuZXcgV2ViR0xGbG9hdEFycmF5KFsKKyAgICAgICAgMS4wLCAxLjAsCisgICAgICAg
IDAuMCwgMS4wLAorICAgICAgICAwLjAsIDAuMCwKKyAgICAgICAgMS4wLCAxLjAsCisgICAgICAg
IDAuMCwgMC4wLAorICAgICAgICAxLjAsIDAuMF0pOworICAgIHZhciB0ZXhDb29yZE9mZnNldCA9
IHZlcnRpY2VzLmJ5dGVMZW5ndGg7CisKKyAgICB2YXIgdmJvID0gZ2wuY3JlYXRlQnVmZmVyKCk7
CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHZibyk7CisgICAgZ2wuYnVmZmVy
RGF0YShnbC5BUlJBWV9CVUZGRVIsCisgICAgICAgICAgICAgICAgICB0ZXhDb29yZE9mZnNldCAr
IHRleENvb3Jkcy5ieXRlTGVuZ3RoLAorICAgICAgICAgICAgICAgICAgZ2wuU1RBVElDX0RSQVcp
OworICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCAwLCB2ZXJ0aWNlcyk7Cisg
ICAgZ2wuYnVmZmVyU3ViRGF0YShnbC5BUlJBWV9CVUZGRVIsIHRleENvb3JkT2Zmc2V0LCB0ZXhD
b29yZHMpOworCisgICAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7CisgICAgZ2wudmVy
dGV4QXR0cmliUG9pbnRlcigwLCAzLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOworICAgIGdsLmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KDEpOworICAgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMSwg
MiwgZ2wuRkxPQVQsIGdsLkZBTFNFLCAwLCB0ZXhDb29yZE9mZnNldCk7CisKKyAgICB2YXIgbWVk
aWFGaWxlID0gZmluZE1lZGlhRmlsZSgidmlkZW8iLCAiY29udGVudC9xdWFkcmFudHMiKTsKKyAg
ICBsb2FkVmlkZW8obWVkaWFGaWxlKTsKK30KKworZnVuY3Rpb24gbG9hZFZpZGVvKHNyYykgewor
ICAgIHZhciB0ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICAgIGdsLmJpbmRUZXh0dXJl
KGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpOworICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVS
RV8yRCwgZ2wuVEVYVFVSRV9NSU5fRklMVEVSLCBnbC5ORUFSRVNUKTsKKyAgICBnbC50ZXhQYXJh
bWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7
CisgICAgdmFyIHZpZGVvID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3ZpZGVvJylb
MF07CisKKyAgICBmdW5jdGlvbiBzdGFydFZpZGVvKCkgeworICAgICAgICAvLyBSZXNpemUgY2Fu
dmFzIHRvIGZpdCB2aWRlby4KKyAgICAgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1l
bnRzQnlUYWdOYW1lKCdjYW52YXMnKVswXTsKKyAgICAgICAgLy8gSWYgdmlkZW8gaGFzIGEgYnJv
a2VuIGhlaWdodCwgcGljayBhbiBhcmJpdHJhcnkgY2FudmFzIHNpemUuCisgICAgICAgIGNhbnZh
cy53aWR0aCA9IHZpZGVvLnZpZGVvV2lkdGggPiAwID8gdmlkZW8udmlkZW9XaWR0aCA6IDMyOwor
ICAgICAgICBjYW52YXMuaGVpZ2h0ID0gdmlkZW8udmlkZW9IZWlnaHQgPiAwID8gdmlkZW8udmlk
ZW9IZWlnaHQgOiAzMjsKKworICAgICAgICBydW5UZXN0KHZpZGVvKTsKKyAgICB9OworICAgIHZp
ZGVvLmFkZEV2ZW50TGlzdGVuZXIoImNhbnBsYXkiLCBzdGFydFZpZGVvKTsKKworICAgIHZpZGVv
LnNyYyA9IHNyYzsKKyAgICByZXR1cm4gdGV4dHVyZTsKK30KKworLy8gVGhlc2UgZGVjbGFyYXRp
b25zIG5lZWQgdG8gYmUgZ2xvYmFsIGZvciAic2hvdWxkQmUiIHRvIHNlZSB0aGVtCit2YXIgYnVm
ID0gbnVsbDsKK3ZhciBidWZXaWR0aDsKK3ZhciBidWZIZWlnaHQ7Cit2YXIgcmVkID0gWzI1NSwg
MCwgMF07Cit2YXIgZ3JlZW4gPSBbMCwgMjU1LCAwXTsKK3ZhciBibHVlID0gWzAsIDAsIDI1NV07
Cit2YXIgeWVsbG93ID0gWzI1NSwgMjU1LCAwXTsKK3ZhciBibGFjayA9IFswLCAwLCAwXTsKK3Zh
ciBjbGVhciA9IFsxMjcsIDEyNywgMTI3XTsKK2Z1bmN0aW9uIHBpeGVsQXQoeCwgeSkgeworICAg
IHZhciBpbmRleCA9IHkgKiBidWZXaWR0aCAqIDQgKyB4ICogNDsKKyAgICByZXR1cm4gW2J1Zltp
bmRleF0sIGJ1ZltpbmRleCsxXSwgYnVmW2luZGV4KzJdXTsKK30KKworZnVuY3Rpb24gcnVuT25l
VGVzdCh2aWRlbywgZmxpcFksIHVzZVRleFN1YkltYWdlMkQsIHVsQ29sb3IsIHVyQ29sb3IsIGJs
Q29sb3IsIGJyQ29sb3IsIG94LCBveSwgc2NhbGUpIHsKKyAgICB2YXIgY2FudmFzID0gZG9jdW1l
bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NhbnZhcycpWzBdOworICAgIGdsLnZpZXdwb3J0KDAs
IDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7CisKKyAgICAvLyBDbGVhciB0byBhIG5v
bi13aGl0ZSwgbm9uLWJsYWNrLCBub24tdGVzdGVkIGNvbG9yLgorICAgIGdsLmNsZWFyQ29sb3Io
Y2xlYXJbMF0gLyAyNTUsIGNsZWFyWzFdIC8gMjU1LCBjbGVhclsyXSAvIDI1NSwgMSk7CisgICAg
Z2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9CSVQpOworICAg
IC8vIERpc2FibGUgYW55IHdyaXRlcyB0byB0aGUgYWxwaGEgY2hhbm5lbAorICAgIGdsLmNvbG9y
TWFzaygxLCAxLCAxLCAwKTsKKworICAgIHZhciB0ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgp
OworICAgIC8vIEJpbmQgdGhlIHRleHR1cmUgdG8gdGV4dHVyZSB1bml0IDAKKyAgICBnbC5iaW5k
VGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICAvLyBTZXQgdXAgdGV4dHVyZSBw
YXJhbWV0ZXJzCisgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJF
X01JTl9GSUxURVIsIGdsLk5FQVJFU1QpOworICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVS
RV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5ORUFSRVNUKTsKKyAgICAvLyBTZXQgdXAg
cGl4ZWwgc3RvcmUgcGFyYW1ldGVycworICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19GTElQ
X1lfV0VCR0wsIGZsaXBZKTsKKyAgICBnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQ
TFlfQUxQSEFfV0VCR0wsIGZhbHNlKTsKKyAgICAvLyBVcGxvYWQgdGhlIGltYWdlIGludG8gdGhl
IHRleHR1cmUKKyAgICBpZiAodXNlVGV4U3ViSW1hZ2UyRCkgeworICAgICAgICB2YXIgdGV4V2lk
dGggPSBzY2FsZSAqIGNhbnZhcy53aWR0aDsKKyAgICAgICAgdmFyIHRleEhlaWdodCA9IHNjYWxl
ICogY2FudmFzLmhlaWdodDsKKyAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAw
LCBnbC5SR0JBLCB0ZXhXaWR0aCwgdGV4SGVpZ2h0LCAwLAorICAgICAgICAgICAgICAgICAgICAg
IGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIG51bGwpOworCisgICAgICAgIGdsLnRleFN1Yklt
YWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgb3ggKiB0ZXhXaWR0aCwgb3kgKiB0ZXhIZWlnaHQsIGds
LlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHZpZGVvKTsKKyAgICAgICAgZGVidWcoJ1Rlc3Rpbmcg
VGV4U3ViSW1hZ2UyRCB3aXRoIGZsaXBZPScgKyBmbGlwWSArJywgc2NhbGU9JyArIHNjYWxlICsg
Jywgb3g9JyArIG94ICsgJywgb3k9JyArIG95KTsKKyAgICB9IGVsc2UgeworICAgICAgICBkZWJ1
ZygnVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggZmxpcFk9JyArIGZsaXBZKTsKKyAgICAgICAgZ2wu
dGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05F
RF9CWVRFLCB2aWRlbyk7CisgICAgfQorCisgICAgLy8gUG9pbnQgdGhlIHVuaWZvcm0gc2FtcGxl
ciB0byB0ZXh0dXJlIHVuaXQgMAorICAgIGdsLnVuaWZvcm0xaSh0ZXh0dXJlTG9jLCAwKTsKKyAg
ICAvLyBEcmF3IHRoZSB0cmlhbmdsZXMKKyAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywg
MCwgNik7CisgICAgLy8gUmVhZCBiYWNrIHRoZSByZW5kZXJpbmcgcmVzdWx0cworICAgIGJ1Zldp
ZHRoID0gY2FudmFzLndpZHRoOworICAgIGJ1ZkhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7CisgICAg
YnVmID0gbmV3IFVpbnQ4QXJyYXkoYnVmV2lkdGggKiBidWZIZWlnaHQgKiA0KTsKKyAgICBnbC5y
ZWFkUGl4ZWxzKDAsIDAsIGJ1ZldpZHRoLCBidWZIZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVE
X0JZVEUsIGJ1Zik7CisKKyAgICBzaG91bGRCZSgicGl4ZWxBdCgwLCAwKSIsIHVsQ29sb3IpOwor
ICAgIHNob3VsZEJlKCJwaXhlbEF0KGJ1ZldpZHRoLTEsIDApIiwgdXJDb2xvcik7CisgICAgc2hv
dWxkQmUoInBpeGVsQXQoMCwgYnVmSGVpZ2h0LTEpIiwgYmxDb2xvcik7CisgICAgc2hvdWxkQmUo
InBpeGVsQXQoYnVmV2lkdGgtMSwgYnVmSGVpZ2h0LTEpIiwgYnJDb2xvcik7Cit9CisKK2Z1bmN0
aW9uIHJ1blRlc3QodmlkZW8pCit7CisgICAgLy8gT3JpZ2luYWwgc3F1YXJlIHNob3VsZCBoYXZl
IHJlZCwgZ3JlZW4sIHllbGxvdywgYmx1ZSBxdWFkcmFudHMsCisgICAgLy8gd2l0aCBhIGNyb3Nz
IGluIHRoZSBtaWRkbGU6CisgICAgLy8KKyAgICAvLyBSfEcKKyAgICAvLyAtKy0KKyAgICAvLyBZ
fEIKKworICAgIC8vIHRleEltYWdlMkQgdGhlIHdob2xlIHRleHR1cmUKKyAgICBydW5PbmVUZXN0
KHZpZGVvLCBmYWxzZSwgZmFsc2UsICJyZWQiLCAiZ3JlZW4iLCAieWVsbG93IiwgImJsdWUiKTsK
KyAgICBydW5PbmVUZXN0KHZpZGVvLCB0cnVlLCBmYWxzZSwgInllbGxvdyIsICJibHVlIiwgInJl
ZCIsICJncmVlbiIpOworCisgICAgLy8gdGV4U3ViSW1hZ2UyRCB1cHBlciBsZWZ0CisgICAgcnVu
T25lVGVzdCh2aWRlbywgZmFsc2UsIHRydWUsICJyZWQiLCAiY2xlYXIiLCAiY2xlYXIiLCAiY2xl
YXIiLCAwLCAwLCAyKTsKKyAgICBydW5PbmVUZXN0KHZpZGVvLCB0cnVlLCB0cnVlLCAieWVsbG93
IiwgImNsZWFyIiwgImNsZWFyIiwgImNsZWFyIiwgMCwgMCwgMik7CisKKyAgICAvLyB0ZXhTdWJJ
bWFnZTJEIGxvd2VyIHJpZ2h0CisgICAgcnVuT25lVGVzdCh2aWRlbywgZmFsc2UsIHRydWUsICJj
bGVhciIsICJjbGVhciIsICJjbGVhciIsICJibHVlIiwgMC41LCAwLjUsIDIpOworICAgIHJ1bk9u
ZVRlc3QodmlkZW8sIHRydWUsIHRydWUsICJjbGVhciIsICJjbGVhciIsICJjbGVhciIsICJncmVl
biIsIDAuNSwgMC41LCAyKTsKKworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAg
dmFyIGVwaWxvZ3VlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CisgICAgZXBp
bG9ndWUub25sb2FkID0gZmluaXNoOworICAgIGVwaWxvZ3VlLnNyYyA9ICIuLi8uLi9qcy9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIjsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVw
aWxvZ3VlKTsKK30KKworZnVuY3Rpb24gZmluaXNoKCkgeworICAgIGlmICh3aW5kb3cubm9uS2hy
b25vc0ZyYW1ld29ya05vdGlmeURvbmUpIHsKKyAgICAgICAgd2luZG93Lm5vbktocm9ub3NGcmFt
ZXdvcmtOb3RpZnlEb25lKCk7CisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBv
bmxvYWQ9ImluaXQoKSI+Cis8dmlkZW8gaWQ9InNvdXJjZXZpZGVvIj48L3ZpZGVvPgorPGNhbnZh
cyBpZD0iZXhhbXBsZSI+PC9jYW52YXM+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8
ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjMwZWViMDBlNDRiOTI5
MzI1Y2E4YTE1ZGM4MzMwMDZkMDhkNTA5Zi4uMWNjOTZlZmQ0ZDM2NzBjMTMyZWQ2MGZiOTk0ODJm
MjE2MzM1YTA4MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMC0wOC0xMyAgQWRyaWVubmUgV2Fsa2VyICA8
ZW5uZUBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEltcGxlbWVudCBIVE1MVmlkZW9FbGVtZW50IHN1cHBvcnQgZm9yIHRleEltYWdl
MkQgYW5kIHRleFN1YkltYWdlMkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTMzODUyCisKKyAgICAgICAgVGVzdDogZmFzdC9jYW52YXMvd2ViZ2wvdGV4
LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC12aWRlby5odG1sCisKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdM
UmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCk6CisKIDIwMTAtMDgtMTEgIEtldmluIE9s
bGl2aWVyICA8a2V2aW5vQHRoZW9sbGl2aWVycy5jb20+CiAKICAgICAgICAgW3d4LCBXZWJET01d
IEJ1aWxkIGZpeC4gRml4IGNhbGxiYWNrIHBhcmFtcyBhbmQgV2ViQ29yZTo6U3RyaW5nIC0+IFdU
Rjo6U3RyaW5nIGZpeGVzLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwCmluZGV4IDg5ZTk1MTBmNjNjNzU2OTA5OWE2Y2FlOTM3ZmVmZWY3ZTI0NzFkYzAu
LmQ2YmVmOTIyZmY3M2Q4MGIzYjcyZjExNTA0NDFhNTI0YTg5ZDYwNWQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9XZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM2LDYgKzM2LDcgQEAK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgog
I2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpAQCAtMjIwMywxNiArMjIwNCwyMSBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVk
IGxldmVsLCB1bnNpZ25lZAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQo
dW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQs
IHVuc2lnbmVkIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQgdGhpcyBjYWxsCi0gICAgVU5V
U0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKLSAgICBVTlVTRURf
UEFSQU0oaW50ZXJuYWxmb3JtYXQpOwotICAgIFVOVVNFRF9QQVJBTShmb3JtYXQpOwotICAgIFVO
VVNFRF9QQVJBTSh0eXBlKTsKLSAgICBVTlVTRURfUEFSQU0odmlkZW8pOwotCiAgICAgZWMgPSAw
OwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgaWYgKCF2aWRlbykg
eworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNE
OjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBJbnRTaXplIHNp
emUodmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0KCkpOworICAgIE93blB0
cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplLCBEZXZpY2VS
R0IpOworICAgIGlmICghYnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdM
RXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1PUlkpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIEludFJlY3QgZGVzdFJlY3QoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhl
aWdodCgpKTsKKyAgICB2aWRlby0+cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoYnVmZmVyLT5j
b250ZXh0KCksIGRlc3RSZWN0KTsKKyAgICB0ZXhJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBidWZmZXItPmltYWdlKCksCisgICAgICAgICAg
ICAgICAgICAgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CiB9
CiAKIC8vIE9ic29sZXRlIHRleEltYWdlMkQgZW50cnkgcG9pbnRzIC0tIHRvIGJlIHJlbW92ZWQg
c2hvcnRseS4gKEZJWE1FKQpAQCAtMjQ2MiwxNiArMjQ2OCwyMSBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVkIGxldmVs
LCB1bnNpZwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQodW5zaWdu
ZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgeG9mZnNldCwgdW5zaWduZWQgeW9m
ZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGZvcm1hdCwgdW5zaWduZWQgdHlwZSwgSFRNTFZpZGVvRWxlbWVudCogdmlkZW8sIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewotICAgIC8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCB0aGlzIGNhbGwK
LSAgICBVTlVTRURfUEFSQU0odGFyZ2V0KTsKLSAgICBVTlVTRURfUEFSQU0obGV2ZWwpOwotICAg
IFVOVVNFRF9QQVJBTSh4b2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0oeW9mZnNldCk7Ci0gICAg
VU5VU0VEX1BBUkFNKGZvcm1hdCk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwotICAgIFVOVVNF
RF9QQVJBTSh2aWRlbyk7CiAgICAgZWMgPSAwOwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2Fs
bChmYWxzZSk7CisgICAgaWYgKCF2aWRlbykgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNp
emVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBJbnRTaXplIHNpemUodmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8t
PnZpZGVvSGVpZ2h0KCkpOworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gYnVmZmVyID0gSW1hZ2VC
dWZmZXI6OmNyZWF0ZShzaXplLCBEZXZpY2VSR0IpOworICAgIGlmICghYnVmZmVyKSB7CisgICAg
ICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9P
Rl9NRU1PUlkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEludFJlY3QgZGVzdFJlY3Qo
MCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICB2aWRlby0+cGFpbnRDdXJy
ZW50RnJhbWVJbkNvbnRleHQoYnVmZmVyLT5jb250ZXh0KCksIGRlc3RSZWN0KTsKKyAgICB0ZXhT
dWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCBmb3JtYXQsIHR5
cGUsIGJ1ZmZlci0+aW1hZ2UoKSwKKyAgICAgICAgICAgICAgICAgICAgICBtX3VucGFja0ZsaXBZ
LCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KIAogLy8gT2Jzb2xldGUgdGV4U3Vi
SW1hZ2UyRCBlbnRyeSBwb2ludHMgLS0gdG8gYmUgcmVtb3ZlZCBzaG9ydGx5LiAoRklYTUUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64748</attachid>
            <date>2010-08-18 12:06:59 -0700</date>
            <delta_ts>2010-08-18 15:47:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33852-20100818120658.patch</filename>
            <type>text/plain</type>
            <size>23511</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2ODJjOTBjNDgyZGY1ZjE2OTc0YzUyYjY3YjI3MzBiYmVkZDFiYTZlLi43ZDVlODQx
ZDliMTNiOWE0ZjE5NDcyODc4MWJlNjY4YWEyNWUyNzg5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTAtMDgtMTggIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgSFRNTFZp
ZGVvRWxlbWVudCBzdXBwb3J0IGZvciB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJECisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzg1MgorCisgICAg
ICAgICogZmFzdC9jYW52YXMvd2ViZ2wvY29udGVudC9xdWFkcmFudHMubXA0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZW50L3F1YWRyYW50cy5vZ3Y6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdp
dGgtdmlkZW8tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJn
bC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0yZC13aXRoLXZpZGVvLmh0bWw6IEFkZGVkLgorCiAy
MDEwLTA4LTExICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvY29udGVudC9xdWFkcmFudHMubXA0IGIvTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvY29udGVudC9xdWFkcmFudHMubXA0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJhYjRmOGQyNjUw
NGM3NzlhZmFiYTJhMTExMjY3MTdlNWNmMTY4ZWUKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDE1
NzgKemNtYUo+VXVZYWY3fmV9ODY9fGBkRFcqXyN3MCZyNHZiVEc4TnZ7V3Mye0FTbUxJY2BSSE0q
SkluYXhnYnw3Q1ZBCnpjVVN6QVVANmd9Sl9zbyNfUUNke05QPiFCUmp8XkJZV3JnQm8yZHc7cGg5
MHZyN3UkZHRsI1lBOFhMcnErbkx8QAp6fEN7ZmQ4JTBxJTlaYD8pbCZ2ZDNFRHJxIVpoZ1doU1Ym
b2VUSGReYEVsSDA1SUMlNUlGVn1gWG85a0xlKkxNODYKelFwQCFnUCZjd2VQRW9OMzlrTUVjc0Y9
QnVyV1NpdHktK0NiblA1VzR5KEZMT21XRCRySUFuKU0yS05Lb0tSTilPCnpneGE3TzImMX0zOWY1
TTFtaFhtVDl8JkNgcUVhP250eWF9M01yaTJhS24/anNSJVRVUTtkQHtjTXVMU3dUdFlVcwp6dXg7
cHdRXiZ8N0xNPDx9JVo2VWtOKmNsZV9VYlY7dnw3SFQpcFJ8TmR9X0Z+aFRANl5YZktONUk9STRX
YSRATUoKejIyUVhicFZjVGFXa2VsM09wYiNJWVVzVmxifiFaNDFYbXBpUENidnNmUXEjdXU+fUJv
KGw8MEgwaDZPKUsjaVE8CnpyUiZKU3VgcnshJXB6JmcycndDJHEydDY8N35NR31Ubi0rd2t0Pzlz
Vj5UcGlOO0RNa0dAIzlWRU0hdk8hajF6WAp6ODsma0dXJnYyVTAxKEo1aGh2fHsmOy1raj5WTyVN
UVdGeSMkPzdjQVZtT3haN15pOHkpcmVES2ZocS0ma3dheCMKemhqMiEmTV9ZeGEmak1na1l9MF8r
Nj00KUtscVF0ajtXVHozOT1BO3w0OW5Qc1ZATiU+NFZ5YnFFM2AtITRVQ2I/CnpzflZjTExxOVMh
d0hJSXsxTTRaa0hLUnVkTmkxayY2Y0NHYDtWQGo3Mkwhe0RGaVNaWldnMmVlWCp4VE5scyhDagp6
KCVFbVd8R0JlYHdgX1NvYEBPT0o8PG4hc3lPWTFxP15FWXJjeTshNFJEUiZZPVB5Mz9nTHs0OC1R
UEM3Xn5tSmwKeiUtfStDaFJ4aT5lOFdRKj0zZXtiKzI1RFlxandoRTdlQmk1X3xsbyU/T2oqS1V6
eGVocy11aEZVY0dVSzllOzBXCnpffUR4dUM1dEQ9N1hDVXBlUVNMRj1hSCs9dC1PQmo7JjwpS041
KChpdSp8PGNmQkQ0YVpSUkkpSk12JUxJYC0rewp6T1pgd18zN1NGPSNOalh7NDVPISpONmBvbU5k
P0E9cyFYX098NDlEOygkcz81Z0xZWEo8YEk8Nz8qXyt+UStebXUKejByMzFPbSV5JUVuZj5aKmBH
TXsqdSRAWHFrLXMmJWhYTF9BekhpTyl6ZmNQWngzWkFMUW5+cWw8elNLfFRONm1PCno4TG0/cVdN
aVY3N0xyKmo8Wmc7aT4yd2RST01jZ0spdT5QSWF6WEdabk1FSmtCUlFYfUtkaUQlOFhVU0w/VWNQ
UAp6QHB5YDBrIzlqMCVSTyE3Zm9CZSlRVGElcUFzaTVvTzYkeHBUckxNZCRDVGVWZjszO0hvdXJ9
TFBUJlR3JTRHMnkKekU4SWh7MUl9IVVoMjtWTUFRb3t0aS11ZXwpcUY1bGREIzklZVE+eFQ7Tj5T
dE0qVjs0T3JZVVA3TlFQaGkxSmBeCnpMd1JAdF9Raz9hP1FXbDx3OTFaY0piVVNsQyNOJD9vNGZL
KCo5a0UxZmQzVnwoNStkKEZzXyRCaHFXXm5Be2BgUAppbllRX0RoWGRIYU9LUXJSZGs1JV9IZEpY
V0RGPk15SGV7KiZ1NzNkV0whRGchCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZW50L3F1YWRyYW50cy5vZ3YgYi9M
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZW50L3F1YWRyYW50cy5vZ3YKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTNmNTU2OGVlOGJlN2M4Njg4YWY1NzZjZWQwMGE3MGRjZDM3ZDViYQpHSVQgYmluYXJ5
IHBhdGNoCmxpdGVyYWwgMzk2Ngp6Y21idUNje0VpMnxIbG9vQ09lZlpnSFA3JU1kOERVOEdBRnNz
TF5JSDd6fEB5bDZeRm1oKWp8cVltNm1pVWs4bUUKelM8NDVaR0ZoViNxTkxfS0wrQUpWe3FfQnhe
WlAhfXgkbnBPYEYhOF4+KWQ8YV9udmQjN3U/PExTWGYjOXMzJVN7CnpmWjFpfGUqNlFWOTNBTF5f
VnFgeHU+eDR3bmRjYUB1KmZoK1NwV3dJMHt8QWJCXkRPKTEhazUxNXdpO09seSFAKAp6YDZDelV8
M2BPWDRvYSNwTWxXRy05JT5pLS1EU0tuJkloVENya2JYVm1XSVl6NEx2T184QVdAS3BhMzdWdzx9
N0MKelM/bjAmRnRhXj4hUEU/SD08RHR0akIhUSMyS3hHWDJncW9zPkJTeHQ9b25Ea1gmJiU4VDM9
PmlERz1+Kkt7RXhPCnpTcD8rTE9tUDs3MlhZeFJEall9PFRWPn4tQHA4e1dYZk8yYVckeSokWnl4
M0xpbyMwcmpzbX5LJmdSXjl2KlFrfQp6TUpVfShsI2V+ZTY9NUttJTI1YzRaZ1dyOztid09SR0or
Rl82SWk+OTMze1NwbGs7YzdSTVJMWl4lcnIoaEMlMTIKejRvVVNVRjxLZEJgVFVEX3Z6eH15OGQ9
R0khTCMpOyV6PH1xXj5qX2xjPExQR3I4d3NzLXZQQENGYXEqUkNzaCV5Cnp4RVNOPV81VzY2QD5k
YFQxUldseDI/QWotPEN6KFRnfjZhU2ZTQExXRm59UGxnfjVSUDRoQjFMYF9YPkdMYXFVVAp6KHJk
XyFgOU40I1NNfCZZISorRiVYI2g9QiZCI2NYcGVEbzdYZHxHUW55d0tCODcle2g0bnNfXlJPYlU/
PEZ0cCMKeldTVkFTVkdvV21LUT1EWUV9QUJZZFVIQzZqUnRoS0QqfSVOaj5LdlE5dW03SCs5U2R+
OX5fZEVWMmBKNER7ejI9CnpIVUM9eWZ3MSZeaEpZWHg2WnRVSXpSZj5xX29JSz8ybSg8WENNRzV6
QVNoT3JObVEmNTExNnZpcnUpd1YyP0FyYwp6Jnp3MTwzNHw0JFdIUDJPZnFecXhUVEooI3JUTT1y
QCZEQHE4NHRpT0NjV2tseCgtfnwkYlFJSkU5TXZqQlkhfFUKemE1VU99JFhHeEBLfHpwVGVtQ0Yl
dGlYTjhEaHAkVnRnPip9MHBQSEcyWnlJS0xwVkk2OzFCV3YwMDFiYW4+RlNECnphZXUoUkFJN24+
MH5saXJ1bWNYaiFNZzdfeGMtMlBDRjB0Wno/O3ttS08zbzZSVWRhI2hgPnY5e1VkekN6dSZBUwp6
UmhKdyZGSiMpQFJnPHklNF92M2VpWlQoO3tqJSRlcTs9TEhzPWt+cmcjPlQ9OE55SDFDdCRMI0Nm
Qmc1ciRaOVQKenEyOGAta15aYUI3YT9fRjNmd3lnYjVQUGs4M1I/bHZEJXJoPDBjSk9udHxsTEYm
RSM1TW9IXiFMWXN8eTNYJnlLCnpCYTNqO1VlQEk/SCM/fFQkRldtRCRhWU0pJGsmP3dSeXBIVT1u
Y3B0e35UO2NefkZRVkRPP0AkXmtsT05mQnEmQAp6e2hhSG9LI2FzOzNofVk3dD5xa2EkTTs7dUgr
diUycmsqWGFWblIoZk4kX2UrUTRJQ3R0PTZDcWJsMlhFMl8/PkYKejxobTk4Ujg8RVR7Xi02YEBO
THVBKU96fThhcjRefm1tO0pVKms0b1lMUWw8VEZFNUVYdXNnYT9pT2VESE5+eU5iCno5SFZBKnd1
djcleHRyclo/X1BHUSNHU2xuNkcjQ3Aqc2RZV3F2Z2p9cnJUeyNXX2pgckswXnRPPmhofWE4QndH
bAp6a3ZMTEQ9QW5eQ3VGbmd2PEI3PnNZVmpvR1FCIzF4RXglUTc9fSVaUU1Ybzl3V2QmKFFPcTBK
cDYjX2duZGg+b3QKelBybEt2WXMydipzOVpifSp8UGI/VmoqJWUtbjYtVCQ8Y01rbWlQWW1ecjBZ
OHhONjA5I2hZdTxsWm97NGwyRVloCno5ZHdWI15yVntwbkB9Zy02PVo0anZYbiRiT1RNa2o8eWAr
QCFXUGw9SFJNTUxTYT9CdnUhPytaXk5BbGVYPnBqeAp6NlhTdUtLV2R7Z0RaaENvTVlzUVdiSGVz
cjt6YUxeK3wmLUlBRkYkdm1CSihZQyl4X2JyJStBJmBlJTRmWlg7I0EKel9gV1F2UH40cDZONWZz
ND14SXIxakA+TX4rWndgaShfV0ttNTQlKz4we31EPz1mdzY1THRiUGo0SSFLTCsqZzBeCnpRTGwl
cD09OGcyUGlyaXNtTVV6VWo2NTZQeU5rQ15YK0FlN3l5dFU3RnJMQyF6a09BfD00ejJkKX1UPEJt
XjdDJQp6OUs2UFJlcHxfKShrMWJRVEVZMU1UPm8rQylPRUtrbUVSJnc1MWpgSjxYeiltZjJuKy1g
ez9KKT9teHM+MCo+eU4KejErYFokKCladmxwMHgyO3BncShqfDZSQkQ/Wm5rZjRxQD9NYGZGejN2
UVdOfkVUaiVUM2N9ZU9URyFKNzhCQGA4CnptITlLWl5AU3BAVDg0MTElQ1FnQlhJV19CeVBgVWQ7
RSZOSktjcmVhe3t8b3dXVWNTSiV5RiNwSkokdG1oekFoKgp6MDFlTURZOVVwPig5UkB0aHhSO3dQ
WDBuRXdPP3A9dnlJPzY2aFF9REB3VHJ9NXBVbEokTl44enIhP049WDFqJnwKekVNb0lMaUd0QlQ9
ZVFqaEt+UlJ6Z2xrSDhRY0Q2K1FOYUBWNCl1bzVKekF1IVdPQ0B1b2N5UVg4Nz9UdSttdDQ3Cnox
U0ttVyhnViZ2TEZ2QHFrWTFje2xvdDVXQmhsWXpxemAkam92ZD1qPENEUDJFUjEweD53fWI7ST4h
I1NNZGArZQp6ZD9HP1o0TFIyJXhAUkViNSVXbTI8KXZwcVRvSkUkNVlqQ1BmQi0zcEYoZjhiczAz
VF8wRnRNV0kkfklXK2coUFMKenNPNGl1eHhLJkZnQT43I2xCbih9byo1c1AheWg/XmUlTHxsNTY/
Y0U8WiFYYkBsd3FgKkhLRyhmOHl2Jmw0MCowCnp5PXdsRG5UK2UxZjMmVVZeSFV7VGw0X3FETnkh
O3o/MTxlU3Rgc2pscnFlJWw8JnVxJmh2PFlJRzxta3t0YVFmRAp6S3dtdmtfX0B5YmdgKnBQKjh2
TVZoWXljJU9jdlJ3ck8kc3RxdT1gfE8+ZzJtMGI8YTFmV0d4UkhZKFZfSz9DVmwKejdaQlFZRXha
KXwtUCEhaUtQbmNfYFVzYnNmfGVwdCQ1cismSV5ffHxUUzN0RyNUdU1tMXY4Q0wtVj5+LWhYPzh7
CnpVd2h4RChRaGVAZkBeRXFFdXJnelRrX1lzbDdTNm41OFR5JWxoNHw9I0N8OWJ0cjIoV0wrSHQ/
VGF2TTVuRkhGcgp6YkszLTEwTCE8SHZAcitwVElDQyhsR3JifkphZDdIaVdLcD9UOV9PKnRZN1F6
MD84Kjw1RENKZCQqMUswVzZxY3kKenRWaVFwUURnWUlSU0wjfXt2SDNeVz18dnlyQmhoU0olTmtM
PmJhNEUrKGJIPW5wO2p7VURqVFdqVmMjNHozT0R1CnpWQlhrVzlzQkYra3ReZWVIOV5oVHE/Y2gy
NSQwZlhPTj0lKXBrUE44MmklK3E/bzxDRl57d35namYjc2JKZXIrYgp6ZCpxVVEmb3pLZHw3Kjkm
U044PHZSPWV4ZSF9V2dwSDRpX2hZTDtOQGlDfUpaTlokaGp8S0FuV2Q1dyk/PnJvPGQKemVnPTdH
NkF8KVU3b3pIRllkKmw1Yy1YSz1vZ3B6e14/UGRednMpYE1qQTxKQV9qQ3YzSiZzJko/K1RHakZQ
eTRHCnplWW5DVXE/ZGBPantqT2tTZkVgXjAlIzRTcXR9e1ZpRG0hUGUmeGI+P1deVUp2RGokbE4p
IXptZ2FKRnxffV44ZAp6MUBjfnJ0fTJ6Vy1HWmhHWiZaPTVPTVc7N2J1I304cXVKMHJwSk1hQWI8
WW1FdyYqfU1sdUlUT2JBMyRxK1R9UnAKenU7YFBSKz42Ml5XRiU0P1QyPzktKGJUNHVVRStWY3tz
czRtJF55MjVfaTJsMyhZTn5gWisxIVBvcCVIPkxqKTtGCnotRS14PSokdCFKWmtPbzNwdGZ0VjxN
ZmFoY3cjSn5ON2N+e09MN3cqZisoR25mJCkkbFZMN2VLdmFBcD4oZE5IKwp6T0hmZz5TbkM+MFVa
Mjx5P2VsMy1jeXRRIyhyaEk0TkBBdWh3dyNgRHNqazBlTyNJcz9WSmM5LXB4eT89SHlFWCQKekF1
cjUkZVViaHpUNnVQTzxqa1Q1Q0J1KCYrTTRzI0djVTJHYHpPaGM8P0IjNHA+biRCMSEtX0wtVlZs
Si0xZ2xWCnpvRFdvRnljRV9hKFlKU2VxPDFKdSlaYWtAVjhGZG8rS2k4Y2NRdEVeP3E2R2Zua3lw
dW9zZ01XSjhxQHM2Vj5GKwp6a0dURGRVbDFSOXpvZWBiYG15YDhQc1NjekJyY1ErQnQreFI5bWN0
KmQjfGlvZTs8ZVpeZV5uUlFWQ05nZnhsKikKejdpNV9VSlVUTlpgKndVZmApZ0kmX0I8cj1wMkcm
aHtgUmJWZi1IYyVxfWkyZ19VdmkxX1V1KlpGTVgtTVI0ZUM1CnpXdWtDZ1VNV0NtLVRJOS03VHBL
ZEpPOG5kKCQ9d2Nee3U0ekR6OGdJdkhGJEgkSCooM0llNjtmcWJWaHI/MXRKOAp6TXgwVHlPWjx6
QWVGKVZHWF8kQj0lQH04WEV0N0dSN1RHVE5jWkhYU2s7dU9CSHtaY0QxPyg+d2xmY01LanFIMFcK
ejFLUVppUVBZeHd5RHd3NXd0e0UjT2pfbGxlTkd1MmJBRkBjQ1o2TEoqbHhqUkI2N2p1cUdiX1Zt
PXNfR3k8PVBGCnpScm82Zj1icVd0aVlxTEFETnJjU1o4bGNqbVRrSXQoYGM5Q0c8REh7RzF1X2Qj
JFdjdGYzdGV+ZG13aD5LVSltdQp6OSpEV0VMUldtb3UraXk5alIzcjkhPj5ZSEhYbmZUYGh5e2xQ
Qio0TUhKVj59elNBKGAzej5GcWRZTl5+JDhxT00Kekp0OGdLXzRyNVpiRV9wP3lpWWpeRyZXMTJz
dGpEcl9HTmgtamIhfTQxJnN7alN4SlhQT3QqbUdUWiY2WnltVjRpCno8SiU9QUMzI3xNVXhfV2Y4
eVQ1LTQ5V01ZZmkpSFM8QCtNK3R4Qmh0bW5rM0ptdmg2dWhTcjtTI3lUZSp2Z2lIbwp6UyY4V2s3
ZDJBOD4yKD1sJCY9VUY+NlJOdEA2NjtWV2dgQGVhKis3bkhQamNNX1dJMEo1Ykw4eVgoTW08Xj0l
fXkKekVsfUx1WTNySj1CKEpfZXFfayV5QHgxP1pGVW5YPDgybns5P2xkT2N2Nkt0Sj9tayNmU18h
Rit0bFA4KjxMez1GCnpuJSQzUGx7SjxGdCpOVEJBcG9TdXhAVSlhRiFtZjxLQ2RtKlRFXj11NEso
PVRhdyNjYD4kaGBuZjRJM2JaWWBFcgp6S0g9ZChQX1IwPVNgS3REc2xYJDdZRT9gVGNna2Y8aUxT
fm84NjlTdF4xMzRXVlRHRmJvZmlnRk52JnNhVm19PT0KelRLTiVKSmF5U348S0I/QnhBKVJkJnFN
YjwhM2xYX2AqTEwlWWYyNUFBZTM+VXtMYSpMeUxlVWRJN2YpdFB7QjdXCnpIdXZaMTxtOGwxYVp5
MiUlRnIrTSV3dUw+OFctSEE2Ym5mN1gjNElHan5paWpKbFEzOGptei1YJTVFNTwjdWluWQp6QEJv
S2FfNEhIfUI3NnVKdz01fHN8N0omYWAyNSpVRjtuQHlScExQQSpAdGhUcTt8d3xOQk1ZZyEyTXco
MzAmJj8KVylnU015NX1vZmB4SWV2c1U5JC1sY0tSMzNsdUY2fgoKbGl0ZXJhbCAwCkhjbVY/ZDAw
MDAxCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdl
LWFuZC1zdWItaW1hZ2UtMmQtd2l0aC12aWRlby1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0yZC13aXRoLXZpZGVvLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NDZlMDVlZjZkMzNmM2I5MjQ5N2U1NjJiNWQxYzFiMjMw
ZTQyYmJmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
dGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC12aWRlby1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSwzOSBAQAorIAorVmVyaWZ5IHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgY29kZSBw
YXRocyB0YWtpbmcgVmlkZW9zCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworVGVzdGlu
ZyB0ZXhJbWFnZTJEIHdpdGggZmxpcFk9ZmFsc2UKK1BBU1MgcGl4ZWxBdCgwLCAwKSBpcyByZWQK
K1BBU1MgcGl4ZWxBdChidWZXaWR0aC0xLCAwKSBpcyBncmVlbgorUEFTUyBwaXhlbEF0KDAsIGJ1
ZkhlaWdodC0xKSBpcyB5ZWxsb3cKK1BBU1MgcGl4ZWxBdChidWZXaWR0aC0xLCBidWZIZWlnaHQt
MSkgaXMgYmx1ZQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggZmxpcFk9dHJ1ZQorUEFTUyBwaXhl
bEF0KDAsIDApIGlzIHllbGxvdworUEFTUyBwaXhlbEF0KGJ1ZldpZHRoLTEsIDApIGlzIGJsdWUK
K1BBU1MgcGl4ZWxBdCgwLCBidWZIZWlnaHQtMSkgaXMgcmVkCitQQVNTIHBpeGVsQXQoYnVmV2lk
dGgtMSwgYnVmSGVpZ2h0LTEpIGlzIGdyZWVuCitUZXN0aW5nIFRleFN1YkltYWdlMkQgd2l0aCBm
bGlwWT1mYWxzZSwgc2NhbGU9Miwgb3g9MCwgb3k9MAorUEFTUyBwaXhlbEF0KDAsIDApIGlzIHJl
ZAorUEFTUyBwaXhlbEF0KGJ1ZldpZHRoLTEsIDApIGlzIGNsZWFyCitQQVNTIHBpeGVsQXQoMCwg
YnVmSGVpZ2h0LTEpIGlzIGNsZWFyCitQQVNTIHBpeGVsQXQoYnVmV2lkdGgtMSwgYnVmSGVpZ2h0
LTEpIGlzIGNsZWFyCitUZXN0aW5nIFRleFN1YkltYWdlMkQgd2l0aCBmbGlwWT10cnVlLCBzY2Fs
ZT0yLCBveD0wLCBveT0wCitQQVNTIHBpeGVsQXQoMCwgMCkgaXMgeWVsbG93CitQQVNTIHBpeGVs
QXQoYnVmV2lkdGgtMSwgMCkgaXMgY2xlYXIKK1BBU1MgcGl4ZWxBdCgwLCBidWZIZWlnaHQtMSkg
aXMgY2xlYXIKK1BBU1MgcGl4ZWxBdChidWZXaWR0aC0xLCBidWZIZWlnaHQtMSkgaXMgY2xlYXIK
K1Rlc3RpbmcgVGV4U3ViSW1hZ2UyRCB3aXRoIGZsaXBZPWZhbHNlLCBzY2FsZT0yLCBveD0wLjUs
IG95PTAuNQorUEFTUyBwaXhlbEF0KDAsIDApIGlzIGNsZWFyCitQQVNTIHBpeGVsQXQoYnVmV2lk
dGgtMSwgMCkgaXMgY2xlYXIKK1BBU1MgcGl4ZWxBdCgwLCBidWZIZWlnaHQtMSkgaXMgY2xlYXIK
K1BBU1MgcGl4ZWxBdChidWZXaWR0aC0xLCBidWZIZWlnaHQtMSkgaXMgYmx1ZQorVGVzdGluZyBU
ZXhTdWJJbWFnZTJEIHdpdGggZmxpcFk9dHJ1ZSwgc2NhbGU9Miwgb3g9MC41LCBveT0wLjUKK1BB
U1MgcGl4ZWxBdCgwLCAwKSBpcyBjbGVhcgorUEFTUyBwaXhlbEF0KGJ1ZldpZHRoLTEsIDApIGlz
IGNsZWFyCitQQVNTIHBpeGVsQXQoMCwgYnVmSGVpZ2h0LTEpIGlzIGNsZWFyCitQQVNTIHBpeGVs
QXQoYnVmV2lkdGgtMSwgYnVmSGVpZ2h0LTEpIGlzIGdyZWVuCitQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC12aWRlby5o
dG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1h
Z2UtMmQtd2l0aC12aWRlby5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmNzQxYzVlNzVjMTUyNGIwYjg3MjE2
OTQ3MDI4YzlmMGUxY2JlYjcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0yZC13aXRoLXZpZGVvLmh0bWwKQEAg
LTAsMCArMSwyMTAgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
Ly4uL21lZGlhL21lZGlhLWZpbGUuanMiPjwvc2NyaXB0PgorCis8c2NyaXB0IGlkPSJ2c2hhZGVy
IiB0eXBlPSJ4LXNoYWRlci94LXZlcnRleCI+CithdHRyaWJ1dGUgdmVjMyBnX1Bvc2l0aW9uOwor
YXR0cmlidXRlIHZlYzIgZ19UZXhDb29yZDA7CisKK3ZhcnlpbmcgdmVjMiB0ZXhDb29yZDsKKwor
dm9pZCBtYWluKCkKK3sKKyAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoZ19Qb3NpdGlvbi54LCBnX1Bv
c2l0aW9uLnksIGdfUG9zaXRpb24ueiwgMS4wKTsKKyAgICB0ZXhDb29yZCA9IGdfVGV4Q29vcmQw
OworfQorPC9zY3JpcHQ+CisKKzxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gt
ZnJhZ21lbnQiPgorI2lmZGVmIEdMX0VTCitwcmVjaXNpb24gaGlnaHAgZmxvYXQ7CisjZW5kaWYK
K3VuaWZvcm0gc2FtcGxlcjJEIHRleDsKK3ZhcnlpbmcgdmVjMiB0ZXhDb29yZDsKKwordm9pZCBt
YWluKCkKK3sKKyAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4LCB0ZXhDb29yZCk7Cit9
Cis8L3NjcmlwdD4KKworPHNjcmlwdD4KK3ZhciBnbCA9IG51bGw7Cit2YXIgdGV4dHVyZUxvYyA9
IG51bGw7Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7CisKK2Z1bmN0aW9uIGluaXQo
KQoreworICAgIGlmICh3aW5kb3cuaW5pdE5vbktocm9ub3NGcmFtZXdvcmspIHsKKyAgICAgICAg
d2luZG93LmluaXROb25LaHJvbm9zRnJhbWV3b3JrKHRydWUpOworICAgIH0KKworICAgIGRlc2Ny
aXB0aW9uKCdWZXJpZnkgdGV4SW1hZ2UyRCBhbmQgdGV4U3ViSW1hZ2UyRCBjb2RlIHBhdGhzIHRh
a2luZyBWaWRlb3MnKTsKKworICAgIGdsID0gaW5pdFdlYkdMKCJleGFtcGxlIiwgInZzaGFkZXIi
LCAiZnNoYWRlciIsIFsgImdfUG9zaXRpb24iLCAiZ19UZXhDb29yZDAiIF0sIFsgMCwgMCwgMCwg
MSBdLCAxKTsKKworICAgIHRleHR1cmVMb2MgPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24oZ2wucHJv
Z3JhbSwgInRleCIpOworCisgICAgdmFyIHZlcnRpY2VzID0gbmV3IFdlYkdMRmxvYXRBcnJheShb
CisgICAgICAgICAxLjAsICAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgIDEuMCwgMC4wLAorICAg
ICAgICAtMS4wLCAtMS4wLCAwLjAsCisgICAgICAgICAxLjAsICAxLjAsIDAuMCwKKyAgICAgICAg
LTEuMCwgLTEuMCwgMC4wLAorICAgICAgICAgMS4wLCAtMS4wLCAwLjBdKTsKKyAgICB2YXIgdGV4
Q29vcmRzID0gbmV3IFdlYkdMRmxvYXRBcnJheShbCisgICAgICAgIDEuMCwgMS4wLAorICAgICAg
ICAwLjAsIDEuMCwKKyAgICAgICAgMC4wLCAwLjAsCisgICAgICAgIDEuMCwgMS4wLAorICAgICAg
ICAwLjAsIDAuMCwKKyAgICAgICAgMS4wLCAwLjBdKTsKKyAgICB2YXIgdGV4Q29vcmRPZmZzZXQg
PSB2ZXJ0aWNlcy5ieXRlTGVuZ3RoOworCisgICAgdmFyIHZibyA9IGdsLmNyZWF0ZUJ1ZmZlcigp
OworICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2Ym8pOworICAgIGdsLmJ1ZmZl
ckRhdGEoZ2wuQVJSQVlfQlVGRkVSLAorICAgICAgICAgICAgICAgICAgdGV4Q29vcmRPZmZzZXQg
KyB0ZXhDb29yZHMuYnl0ZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgIGdsLlNUQVRJQ19EUkFX
KTsKKyAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdmVydGljZXMpOwor
ICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0ZXhDb29yZE9mZnNldCwgdGV4
Q29vcmRzKTsKKworICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOworICAgIGdsLnZl
cnRleEF0dHJpYlBvaW50ZXIoMCwgMywgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBnbC5l
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgxKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDEs
IDIsIGdsLkZMT0FULCBnbC5GQUxTRSwgMCwgdGV4Q29vcmRPZmZzZXQpOworCisgICAgdmFyIG1l
ZGlhRmlsZSA9IGZpbmRNZWRpYUZpbGUoInZpZGVvIiwgImNvbnRlbnQvcXVhZHJhbnRzIik7Cisg
ICAgbG9hZFZpZGVvKG1lZGlhRmlsZSk7Cit9CisKK2Z1bmN0aW9uIGxvYWRWaWRlbyhzcmMpIHsK
KyAgICB2YXIgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgICBnbC5iaW5kVGV4dHVy
ZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRV
UkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7CisgICAgZ2wudGV4UGFy
YW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGdsLk5FQVJFU1Qp
OworICAgIHZhciB2aWRlbyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd2aWRlbycp
WzBdOworCisgICAgZnVuY3Rpb24gc3RhcnRWaWRlbygpIHsKKyAgICAgICAgLy8gUmVzaXplIGNh
bnZhcyB0byBmaXQgdmlkZW8uCisgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgnY2FudmFzJylbMF07CisgICAgICAgIGNhbnZhcy53aWR0aCA9IHZpZGVv
LnZpZGVvV2lkdGg7CisgICAgICAgIGNhbnZhcy5oZWlnaHQgPSB2aWRlby52aWRlb0hlaWdodDsK
KworICAgICAgICBydW5UZXN0KHZpZGVvKTsKKyAgICB9OworICAgIHZpZGVvLmFkZEV2ZW50TGlz
dGVuZXIoImNhbnBsYXkiLCBzdGFydFZpZGVvKTsKKworICAgIHZpZGVvLnNyYyA9IHNyYzsKKyAg
ICByZXR1cm4gdGV4dHVyZTsKK30KKworLy8gVGhlc2UgZGVjbGFyYXRpb25zIG5lZWQgdG8gYmUg
Z2xvYmFsIGZvciAic2hvdWxkQmUiIHRvIHNlZSB0aGVtCit2YXIgYnVmID0gbnVsbDsKK3ZhciBi
dWZXaWR0aDsKK3ZhciBidWZIZWlnaHQ7Cit2YXIgcmVkID0gWzI1NSwgMCwgMF07Cit2YXIgZ3Jl
ZW4gPSBbMCwgMjU1LCAwXTsKK3ZhciBibHVlID0gWzAsIDAsIDI1NV07Cit2YXIgeWVsbG93ID0g
WzI1NSwgMjU1LCAwXTsKK3ZhciBibGFjayA9IFswLCAwLCAwXTsKK3ZhciBjbGVhciA9IFsxMjcs
IDEyNywgMTI3XTsKK2Z1bmN0aW9uIHBpeGVsQXQoeCwgeSkgeworICAgIHZhciBpbmRleCA9IHkg
KiBidWZXaWR0aCAqIDQgKyB4ICogNDsKKyAgICByZXR1cm4gW2J1ZltpbmRleF0sIGJ1ZltpbmRl
eCsxXSwgYnVmW2luZGV4KzJdXTsKK30KKworZnVuY3Rpb24gcnVuT25lVGVzdCh2aWRlbywgZmxp
cFksIHVzZVRleFN1YkltYWdlMkQsIHVsQ29sb3IsIHVyQ29sb3IsIGJsQ29sb3IsIGJyQ29sb3Is
IG94LCBveSwgc2NhbGUpIHsKKyAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoJ2NhbnZhcycpWzBdOworICAgIGdsLnZpZXdwb3J0KDAsIDAsIGNhbnZhcy53aWR0
aCwgY2FudmFzLmhlaWdodCk7CisKKyAgICAvLyBDbGVhciB0byBhIG5vbi13aGl0ZSwgbm9uLWJs
YWNrLCBub24tdGVzdGVkIGNvbG9yLgorICAgIGdsLmNsZWFyQ29sb3IoY2xlYXJbMF0gLyAyNTUs
IGNsZWFyWzFdIC8gMjU1LCBjbGVhclsyXSAvIDI1NSwgMSk7CisgICAgZ2wuY2xlYXIoZ2wuQ09M
T1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9CSVQpOworICAgIC8vIERpc2FibGUgYW55
IHdyaXRlcyB0byB0aGUgYWxwaGEgY2hhbm5lbAorICAgIGdsLmNvbG9yTWFzaygxLCAxLCAxLCAw
KTsKKworICAgIHZhciB0ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICAgIC8vIEJpbmQg
dGhlIHRleHR1cmUgdG8gdGV4dHVyZSB1bml0IDAKKyAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhU
VVJFXzJELCB0ZXh0dXJlKTsKKyAgICAvLyBTZXQgdXAgdGV4dHVyZSBwYXJhbWV0ZXJzCisgICAg
Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGds
Lk5FQVJFU1QpOworICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVS
RV9NQUdfRklMVEVSLCBnbC5ORUFSRVNUKTsKKyAgICAvLyBTZXQgdXAgcGl4ZWwgc3RvcmUgcGFy
YW1ldGVycworICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19GTElQX1lfV0VCR0wsIGZsaXBZ
KTsKKyAgICBnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0ws
IGZhbHNlKTsKKyAgICAvLyBVcGxvYWQgdGhlIGltYWdlIGludG8gdGhlIHRleHR1cmUKKyAgICBp
ZiAodXNlVGV4U3ViSW1hZ2UyRCkgeworICAgICAgICB2YXIgdGV4V2lkdGggPSBzY2FsZSAqIGNh
bnZhcy53aWR0aDsKKyAgICAgICAgdmFyIHRleEhlaWdodCA9IHNjYWxlICogY2FudmFzLmhlaWdo
dDsKKyAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCB0ZXhX
aWR0aCwgdGV4SGVpZ2h0LCAwLAorICAgICAgICAgICAgICAgICAgICAgIGdsLlJHQkEsIGdsLlVO
U0lHTkVEX0JZVEUsIG51bGwpOworCisgICAgICAgIGdsLnRleFN1YkltYWdlMkQoZ2wuVEVYVFVS
RV8yRCwgMCwgb3ggKiB0ZXhXaWR0aCwgb3kgKiB0ZXhIZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lH
TkVEX0JZVEUsIHZpZGVvKTsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgVGV4U3ViSW1hZ2UyRCB3
aXRoIGZsaXBZPScgKyBmbGlwWSArJywgc2NhbGU9JyArIHNjYWxlICsgJywgb3g9JyArIG94ICsg
Jywgb3k9JyArIG95KTsKKyAgICB9IGVsc2UgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0ZXhJ
bWFnZTJEIHdpdGggZmxpcFk9JyArIGZsaXBZKTsKKyAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5U
RVhUVVJFXzJELCAwLCBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB2aWRlbyk7
CisgICAgfQorCisgICAgLy8gUG9pbnQgdGhlIHVuaWZvcm0gc2FtcGxlciB0byB0ZXh0dXJlIHVu
aXQgMAorICAgIGdsLnVuaWZvcm0xaSh0ZXh0dXJlTG9jLCAwKTsKKyAgICAvLyBEcmF3IHRoZSB0
cmlhbmdsZXMKKyAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgNik7CisgICAgLy8g
UmVhZCBiYWNrIHRoZSByZW5kZXJpbmcgcmVzdWx0cworICAgIGJ1ZldpZHRoID0gY2FudmFzLndp
ZHRoOworICAgIGJ1ZkhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7CisgICAgYnVmID0gbmV3IFVpbnQ4
QXJyYXkoYnVmV2lkdGggKiBidWZIZWlnaHQgKiA0KTsKKyAgICBnbC5yZWFkUGl4ZWxzKDAsIDAs
IGJ1ZldpZHRoLCBidWZIZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJ1Zik7CisK
KyAgICBzaG91bGRCZSgicGl4ZWxBdCgwLCAwKSIsIHVsQ29sb3IpOworICAgIHNob3VsZEJlKCJw
aXhlbEF0KGJ1ZldpZHRoLTEsIDApIiwgdXJDb2xvcik7CisgICAgc2hvdWxkQmUoInBpeGVsQXQo
MCwgYnVmSGVpZ2h0LTEpIiwgYmxDb2xvcik7CisgICAgc2hvdWxkQmUoInBpeGVsQXQoYnVmV2lk
dGgtMSwgYnVmSGVpZ2h0LTEpIiwgYnJDb2xvcik7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3Qodmlk
ZW8pCit7CisgICAgLy8gT3JpZ2luYWwgc3F1YXJlIHNob3VsZCBoYXZlIHJlZCwgZ3JlZW4sIHll
bGxvdywgYmx1ZSBxdWFkcmFudHMsCisgICAgLy8gd2l0aCBhIGNyb3NzIGluIHRoZSBtaWRkbGU6
CisgICAgLy8KKyAgICAvLyBSfEcKKyAgICAvLyAtKy0KKyAgICAvLyBZfEIKKworICAgIC8vIHRl
eEltYWdlMkQgdGhlIHdob2xlIHRleHR1cmUKKyAgICBydW5PbmVUZXN0KHZpZGVvLCBmYWxzZSwg
ZmFsc2UsICJyZWQiLCAiZ3JlZW4iLCAieWVsbG93IiwgImJsdWUiKTsKKyAgICBydW5PbmVUZXN0
KHZpZGVvLCB0cnVlLCBmYWxzZSwgInllbGxvdyIsICJibHVlIiwgInJlZCIsICJncmVlbiIpOwor
CisgICAgLy8gdGV4U3ViSW1hZ2UyRCB1cHBlciBsZWZ0CisgICAgcnVuT25lVGVzdCh2aWRlbywg
ZmFsc2UsIHRydWUsICJyZWQiLCAiY2xlYXIiLCAiY2xlYXIiLCAiY2xlYXIiLCAwLCAwLCAyKTsK
KyAgICBydW5PbmVUZXN0KHZpZGVvLCB0cnVlLCB0cnVlLCAieWVsbG93IiwgImNsZWFyIiwgImNs
ZWFyIiwgImNsZWFyIiwgMCwgMCwgMik7CisKKyAgICAvLyB0ZXhTdWJJbWFnZTJEIGxvd2VyIHJp
Z2h0CisgICAgcnVuT25lVGVzdCh2aWRlbywgZmFsc2UsIHRydWUsICJjbGVhciIsICJjbGVhciIs
ICJjbGVhciIsICJibHVlIiwgMC41LCAwLjUsIDIpOworICAgIHJ1bk9uZVRlc3QodmlkZW8sIHRy
dWUsIHRydWUsICJjbGVhciIsICJjbGVhciIsICJjbGVhciIsICJncmVlbiIsIDAuNSwgMC41LCAy
KTsKKworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgdmFyIGVwaWxvZ3VlID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CisgICAgZXBpbG9ndWUub25sb2FkID0g
ZmluaXNoOworICAgIGVwaWxvZ3VlLnNyYyA9ICIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIjsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVwaWxvZ3VlKTsKK30KKwor
ZnVuY3Rpb24gZmluaXNoKCkgeworICAgIGlmICh3aW5kb3cubm9uS2hyb25vc0ZyYW1ld29ya05v
dGlmeURvbmUpIHsKKyAgICAgICAgd2luZG93Lm5vbktocm9ub3NGcmFtZXdvcmtOb3RpZnlEb25l
KCk7CisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImluaXQoKSI+
Cis8dmlkZW8gaWQ9InNvdXJjZXZpZGVvIj48L3ZpZGVvPgorPGNhbnZhcyBpZD0iZXhhbXBsZSI+
PC9jYW52YXM+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjMwZWViMDBlNDRiOTI5MzI1Y2E4YTE1ZGM4MzMw
MDZkMDhkNTA5Zi4uYzU5NjYwMDk0NTkzYzc5MWJmNGUzOTVhZDA1Yzc1MTI0YmI4YTM2MiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMSBAQAorMjAxMC0wOC0xOCAgQWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxl
bWVudCBIVE1MVmlkZW9FbGVtZW50IHN1cHBvcnQgZm9yIHRleEltYWdlMkQgYW5kIHRleFN1Yklt
YWdlMkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMz
ODUyCisKKyAgICAgICAgVGVzdDogZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWIt
aW1hZ2UtMmQtd2l0aC12aWRlby5odG1sCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OkxSVUltYWdlQnVmZmVyQ2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFnZUJ1ZmZlckNh
Y2hlOjpHZXQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJ
bWFnZUJ1ZmZlckNhY2hlOjpCdWJibGVUb0Zyb250KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaDoKKwogMjAxMC0wOC0xMSAgS2V2aW4gT2xsaXZpZXIgIDxr
ZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KIAogICAgICAgICBbd3gsIFdlYkRPTV0gQnVpbGQgZml4
LiBGaXggY2FsbGJhY2sgcGFyYW1zIGFuZCBXZWJDb3JlOjpTdHJpbmcgLT4gV1RGOjpTdHJpbmcg
Zml4ZXMuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5jcHAgYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAK
aW5kZXggODllOTUxMGY2M2M3NTY5MDk5YTZjYWU5MzdmZWZlZjdlMjQ3MWRjMC4uNzExMzI2ZjY1
ZjFlMzM4NDBjMDEyMzM2OWVjMWUyYzVjOTE1MzljMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxWaWRlb0VsZW1lbnQuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCkBAIC05OCw2ICs5OSw3IEBAIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6
V2ViR0xSZW5kZXJpbmdDb250ZXh0KEhUTUxDYW52YXNFbGVtZW50KiBwYXNzZWRDYW52YXMsIFBh
CiAgICAgLCBtX25lZWRzVXBkYXRlKHRydWUpCiAgICAgLCBtX21hcmtlZENhbnZhc0RpcnR5KGZh
bHNlKQogICAgICwgbV9hY3RpdmVUZXh0dXJlVW5pdCgwKQorICAgICwgbV92aWRlb0NhY2hlKDQp
CiAgICAgLCBtX3BhY2tBbGlnbm1lbnQoNCkKICAgICAsIG1fdW5wYWNrQWxpZ25tZW50KDQpCiAg
ICAgLCBtX3VucGFja0ZsaXBZKGZhbHNlKQpAQCAtMjIwMywxNiArMjIwNSwyMCBAQCB2b2lkIFdl
YkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4SW1hZ2UyRCh1bnNpZ25lZCB0YXJnZXQsIHVuc2lnbmVk
IGxldmVsLCB1bnNpZ25lZAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQo
dW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQs
IHVuc2lnbmVkIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQgdGhpcyBjYWxsCi0gICAgVU5V
U0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKLSAgICBVTlVTRURf
UEFSQU0oaW50ZXJuYWxmb3JtYXQpOwotICAgIFVOVVNFRF9QQVJBTShmb3JtYXQpOwotICAgIFVO
VVNFRF9QQVJBTSh0eXBlKTsKLSAgICBVTlVTRURfUEFSQU0odmlkZW8pOwotCiAgICAgZWMgPSAw
OwotICAgIGNsZWFudXBBZnRlckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgaWYgKCF2aWRlbyB8
fCAhdmlkZW8tPnZpZGVvV2lkdGgoKSB8fCAhdmlkZW8tPnZpZGVvSGVpZ2h0KCkpIHsKKyAgICAg
ICAgbV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9WQUxVRSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgSW50U2l6ZSBzaXplKHZpZGVv
LT52aWRlb1dpZHRoKCksIHZpZGVvLT52aWRlb0hlaWdodCgpKTsKKyAgICBJbWFnZUJ1ZmZlciog
YnVmID0gbV92aWRlb0NhY2hlLkdldChzaXplKTsKKyAgICBpZiAoIWJ1ZikgeworICAgICAgICBt
X2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVN
T1JZKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBJbnRSZWN0IGRlc3RSZWN0KDAsIDAs
IHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgdmlkZW8tPnBhaW50Q3VycmVudEZy
YW1lSW5Db250ZXh0KGJ1Zi0+Y29udGV4dCgpLCBkZXN0UmVjdCk7CisgICAgdGV4SW1hZ2UyRElt
cGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgYnVmLT5pbWFn
ZSgpLCBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KIAog
Ly8gT2Jzb2xldGUgdGV4SW1hZ2UyRCBlbnRyeSBwb2ludHMgLS0gdG8gYmUgcmVtb3ZlZCBzaG9y
dGx5LiAoRklYTUUpCkBAIC0yNDYyLDE2ICsyNDY4LDIwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVu
c2lnCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCh1bnNpZ25lZCB0
YXJnZXQsIHVuc2lnbmVkIGxldmVsLCB1bnNpZ25lZCB4b2Zmc2V0LCB1bnNpZ25lZCB5b2Zmc2V0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgZm9y
bWF0LCB1bnNpZ25lZCB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8gaW1wbGVtZW50IHRoaXMgY2FsbAotICAg
IFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShsZXZlbCk7Ci0gICAgVU5V
U0VEX1BBUkFNKHhvZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTSh5b2Zmc2V0KTsKLSAgICBVTlVT
RURfUEFSQU0oZm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0odHlwZSk7Ci0gICAgVU5VU0VEX1BB
UkFNKHZpZGVvKTsKICAgICBlYyA9IDA7Ci0gICAgY2xlYW51cEFmdGVyR3JhcGhpY3NDYWxsKGZh
bHNlKTsKKyAgICBpZiAoIXZpZGVvIHx8ICF2aWRlby0+dmlkZW9XaWR0aCgpIHx8ICF2aWRlby0+
dmlkZW9IZWlnaHQoKSkgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBJbnRTaXplIHNpemUodmlkZW8tPnZpZGVvV2lkdGgoKSwgdmlkZW8tPnZpZGVvSGVpZ2h0
KCkpOworICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX3ZpZGVvQ2FjaGUuR2V0KHNpemUpOworICAg
IGlmICghYnVmKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1PUlkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IEludFJlY3QgZGVzdFJlY3QoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAg
ICB2aWRlby0+cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoYnVmLT5jb250ZXh0KCksIGRlc3RS
ZWN0KTsKKyAgICB0ZXhTdWJJbWFnZTJESW1wbCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zm
c2V0LCBmb3JtYXQsIHR5cGUsIGJ1Zi0+aW1hZ2UoKSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQ
cmVtdWx0aXBseUFscGhhLCBlYyk7CiB9CiAKIC8vIE9ic29sZXRlIHRleFN1YkltYWdlMkQgZW50
cnkgcG9pbnRzIC0tIHRvIGJlIHJlbW92ZWQgc2hvcnRseS4gKEZJWE1FKQpAQCAtMzc4NCw2ICsz
Nzk0LDQyIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZXN0b3JlU3RhdGVzQWZ0ZXJW
ZXJ0ZXhBdHRyaWIwU2ltdWxhdGlvbigpCiAgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG9iamVjdE9yWmVybyhtX2JvdW5kQXJyYXlCdWZm
ZXIuZ2V0KCkpKTsKIH0KIAorV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFnZUJ1ZmZlckNh
Y2hlOjpMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0eSkKKyAgICA6IG1fYnVmZmVycyhu
ZXcgT3duUHRyPEltYWdlQnVmZmVyPltjYXBhY2l0eV0pCisgICAgLCBtX2NhcGFjaXR5KGNhcGFj
aXR5KQoreworfQorCitJbWFnZUJ1ZmZlciogV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFn
ZUJ1ZmZlckNhY2hlOjpHZXQoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpbnQgaTsKKyAg
ICBmb3IgKGkgPSAwOyBpIDwgbV9jYXBhY2l0eTsgKytpKSB7CisgICAgICAgIEltYWdlQnVmZmVy
KiBidWYgPSBtX2J1ZmZlcnNbaV0uZ2V0KCk7CisgICAgICAgIGlmICghYnVmKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGlmIChidWYtPnNpemUoKSAhPSBzaXplKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIEJ1YmJsZVRvRnJvbnQoaSk7CisgICAgICAgIHJldHVybiBidWY7
CisgICAgfQorCisgICAgT3duUHRyPEltYWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNy
ZWF0ZShzaXplKTsKKyAgICBpZiAoIXRlbXApCisgICAgICAgIHJldHVybiAwOworICAgIGkgPSBz
dGQ6Om1pbihtX2NhcGFjaXR5IC0gMSwgaSk7CisgICAgbV9idWZmZXJzW2ldID0gdGVtcC5yZWxl
YXNlKCk7CisKKyAgICBJbWFnZUJ1ZmZlciogYnVmID0gbV9idWZmZXJzW2ldLmdldCgpOworICAg
IEJ1YmJsZVRvRnJvbnQoaSk7CisgICAgcmV0dXJuIGJ1ZjsKK30KKwordm9pZCBXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OkJ1YmJsZVRvRnJvbnQoaW50IGlkeCkK
K3sKKyAgICBmb3IgKGludCBpID0gaWR4OyBpID4gMDsgLS1pKQorICAgICAgICBtX2J1ZmZlcnNb
aV0uc3dhcChtX2J1ZmZlcnNbaS0xXSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAog
I2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuaAppbmRleCA2ZmI4Y2U0NDUxMmY1MmIxOGJmYTdhMTcwZjI2ZmNjNmU4
ODdmODBlLi5jMDE1MGMxODgzODRmMDk0ZDJkMmI4ZjkyZDgyYzlkNGE2ZTM4NTdiIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKQEAgLTM1LDYgKzM1LDgg
QEAKICNpbmNsdWRlICJVaW50OEFycmF5LmgiCiAjaW5jbHVkZSAiV2ViR0xHZXRJbmZvLmgiCiAK
KyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBXZWJHTEFjdGl2ZUluZm87CkBAIC00OSw2ICs1MSw3IEBAIGNsYXNzIFdlYkdMVGV4dHVy
ZTsKIGNsYXNzIFdlYkdMVW5pZm9ybUxvY2F0aW9uOwogY2xhc3MgSFRNTEltYWdlRWxlbWVudDsK
IGNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7CitjbGFzcyBJbWFnZUJ1ZmZlcjsKIGNsYXNzIEltYWdl
RGF0YTsKIGNsYXNzIFdlYktpdENTU01hdHJpeDsKIApAQCAtNDE1LDYgKzQxOCwxOSBAQCBwdWJs
aWM6CiAgICAgUmVmUHRyPFdlYkdMVGV4dHVyZT4gbV9ibGFja1RleHR1cmUyRDsKICAgICBSZWZQ
dHI8V2ViR0xUZXh0dXJlPiBtX2JsYWNrVGV4dHVyZUN1YmVNYXA7CiAKKyAgICAvLyBGaXhlZC1z
aXplIGNhY2hlIG9mIHJldXNhYmxlIGltYWdlIGJ1ZmZlcnMgZm9yIHZpZGVvIHRleEltYWdlMkQg
Y2FsbHMuCisgICAgY2xhc3MgTFJVSW1hZ2VCdWZmZXJDYWNoZSB7CisgICAgcHVibGljOgorICAg
ICAgICBMUlVJbWFnZUJ1ZmZlckNhY2hlKGludCBjYXBhY2l0eSk7CisgICAgICAgIC8vIFRoZSBw
b2ludGVyIHJldHVybmVkIGlzIG93bmVkIGJ5IHRoZSBpbWFnZSBidWZmZXIgbWFwLgorICAgICAg
ICBJbWFnZUJ1ZmZlciogR2V0KGNvbnN0IEludFNpemUmIHNpemUpOworICAgIHByb3RlY3RlZDoK
KyAgICAgICAgdm9pZCBCdWJibGVUb0Zyb250KGludCBpZHgpOworICAgICAgICBPd25BcnJheVB0
cjxPd25QdHI8SW1hZ2VCdWZmZXI+ID4gbV9idWZmZXJzOworICAgICAgICBpbnQgbV9jYXBhY2l0
eTsKKyAgICB9OworICAgIExSVUltYWdlQnVmZmVyQ2FjaGUgbV92aWRlb0NhY2hlOworCiAgICAg
aW50IG1fbWF4VGV4dHVyZVNpemU7CiAgICAgaW50IG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplOwog
ICAgIGludCBtX21heFRleHR1cmVMZXZlbDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64783</attachid>
            <date>2010-08-18 15:47:55 -0700</date>
            <delta_ts>2010-08-19 10:52:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33852-20100818154754.patch</filename>
            <type>text/plain</type>
            <size>23664</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmYTBhYjQ1ZDQ2Yzc0MWQxZmZhYzBmNzMzNGRkNDE3MzkwNGUyZThlLi5iYWE4MDJj
ZDg1YWY5MzI1N2ZjNjIxNzc4NmEzZDEwMTNkY2E3MTBjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTAtMDgtMTggIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgSFRNTFZp
ZGVvRWxlbWVudCBzdXBwb3J0IGZvciB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJECisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzg1MgorCisgICAg
ICAgICogZmFzdC9jYW52YXMvd2ViZ2wvY29udGVudC9xdWFkcmFudHMubXA0OiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9jb250ZW50L3F1YWRyYW50cy5vZ3Y6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdp
dGgtdmlkZW8tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJn
bC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0yZC13aXRoLXZpZGVvLmh0bWw6IEFkZGVkLgorCiAy
MDEwLTA4LTE4ICBZdXRhIEtpdGFtdXJhICA8eXV0YWtAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHRlc3QgZXhwZWN0YXRpb24gdXBkYXRlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGVudC9xdWFkcmFudHMubXA0IGIvTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvY29udGVudC9xdWFkcmFudHMubXA0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJh
YjRmOGQyNjUwNGM3NzlhZmFiYTJhMTExMjY3MTdlNWNmMTY4ZWUKR0lUIGJpbmFyeSBwYXRjaAps
aXRlcmFsIDE1NzgKemNtYUo+VXVZYWY3fmV9ODY9fGBkRFcqXyN3MCZyNHZiVEc4TnZ7V3Mye0FT
bUxJY2BSSE0qSkluYXhnYnw3Q1ZBCnpjVVN6QVVANmd9Sl9zbyNfUUNke05QPiFCUmp8XkJZV3Jn
Qm8yZHc7cGg5MHZyN3UkZHRsI1lBOFhMcnErbkx8QAp6fEN7ZmQ4JTBxJTlaYD8pbCZ2ZDNFRHJx
IVpoZ1doU1Ymb2VUSGReYEVsSDA1SUMlNUlGVn1gWG85a0xlKkxNODYKelFwQCFnUCZjd2VQRW9O
MzlrTUVjc0Y9QnVyV1NpdHktK0NiblA1VzR5KEZMT21XRCRySUFuKU0yS05Lb0tSTilPCnpneGE3
TzImMX0zOWY1TTFtaFhtVDl8JkNgcUVhP250eWF9M01yaTJhS24/anNSJVRVUTtkQHtjTXVMU3dU
dFlVcwp6dXg7cHdRXiZ8N0xNPDx9JVo2VWtOKmNsZV9VYlY7dnw3SFQpcFJ8TmR9X0Z+aFRANl5Y
ZktONUk9STRXYSRATUoKejIyUVhicFZjVGFXa2VsM09wYiNJWVVzVmxifiFaNDFYbXBpUENidnNm
UXEjdXU+fUJvKGw8MEgwaDZPKUsjaVE8CnpyUiZKU3VgcnshJXB6JmcycndDJHEydDY8N35NR31U
bi0rd2t0PzlzVj5UcGlOO0RNa0dAIzlWRU0hdk8hajF6WAp6ODsma0dXJnYyVTAxKEo1aGh2fHsm
Oy1raj5WTyVNUVdGeSMkPzdjQVZtT3haN15pOHkpcmVES2ZocS0ma3dheCMKemhqMiEmTV9ZeGEm
ak1na1l9MF8rNj00KUtscVF0ajtXVHozOT1BO3w0OW5Qc1ZATiU+NFZ5YnFFM2AtITRVQ2I/Cnpz
flZjTExxOVMhd0hJSXsxTTRaa0hLUnVkTmkxayY2Y0NHYDtWQGo3Mkwhe0RGaVNaWldnMmVlWCp4
VE5scyhDagp6KCVFbVd8R0JlYHdgX1NvYEBPT0o8PG4hc3lPWTFxP15FWXJjeTshNFJEUiZZPVB5
Mz9nTHs0OC1RUEM3Xn5tSmwKeiUtfStDaFJ4aT5lOFdRKj0zZXtiKzI1RFlxandoRTdlQmk1X3xs
byU/T2oqS1V6eGVocy11aEZVY0dVSzllOzBXCnpffUR4dUM1dEQ9N1hDVXBlUVNMRj1hSCs9dC1P
Qmo7JjwpS041KChpdSp8PGNmQkQ0YVpSUkkpSk12JUxJYC0rewp6T1pgd18zN1NGPSNOalh7NDVP
ISpONmBvbU5kP0E9cyFYX098NDlEOygkcz81Z0xZWEo8YEk8Nz8qXyt+UStebXUKejByMzFPbSV5
JUVuZj5aKmBHTXsqdSRAWHFrLXMmJWhYTF9BekhpTyl6ZmNQWngzWkFMUW5+cWw8elNLfFRONm1P
Cno4TG0/cVdNaVY3N0xyKmo8Wmc7aT4yd2RST01jZ0spdT5QSWF6WEdabk1FSmtCUlFYfUtkaUQl
OFhVU0w/VWNQUAp6QHB5YDBrIzlqMCVSTyE3Zm9CZSlRVGElcUFzaTVvTzYkeHBUckxNZCRDVGVW
ZjszO0hvdXJ9TFBUJlR3JTRHMnkKekU4SWh7MUl9IVVoMjtWTUFRb3t0aS11ZXwpcUY1bGREIzkl
ZVE+eFQ7Tj5TdE0qVjs0T3JZVVA3TlFQaGkxSmBeCnpMd1JAdF9Raz9hP1FXbDx3OTFaY0piVVNs
QyNOJD9vNGZLKCo5a0UxZmQzVnwoNStkKEZzXyRCaHFXXm5Be2BgUAppbllRX0RoWGRIYU9LUXJS
ZGs1JV9IZEpYV0RGPk15SGV7KiZ1NzNkV0whRGchCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZW50L3F1YWRyYW50
cy5vZ3YgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jb250ZW50L3F1YWRyYW50cy5v
Z3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTNmNTU2OGVlOGJlN2M4Njg4YWY1NzZjZWQwMGE3MGRjZDM3ZDViYQpH
SVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMzk2Ngp6Y21idUNje0VpMnxIbG9vQ09lZlpnSFA3JU1k
OERVOEdBRnNzTF5JSDd6fEB5bDZeRm1oKWp8cVltNm1pVWs4bUUKelM8NDVaR0ZoViNxTkxfS0wr
QUpWe3FfQnheWlAhfXgkbnBPYEYhOF4+KWQ8YV9udmQjN3U/PExTWGYjOXMzJVN7CnpmWjFpfGUq
NlFWOTNBTF5fVnFgeHU+eDR3bmRjYUB1KmZoK1NwV3dJMHt8QWJCXkRPKTEhazUxNXdpO09seSFA
KAp6YDZDelV8M2BPWDRvYSNwTWxXRy05JT5pLS1EU0tuJkloVENya2JYVm1XSVl6NEx2T184QVdA
S3BhMzdWdzx9N0MKelM/bjAmRnRhXj4hUEU/SD08RHR0akIhUSMyS3hHWDJncW9zPkJTeHQ9b25E
a1gmJiU4VDM9PmlERz1+Kkt7RXhPCnpTcD8rTE9tUDs3MlhZeFJEall9PFRWPn4tQHA4e1dYZk8y
YVckeSokWnl4M0xpbyMwcmpzbX5LJmdSXjl2KlFrfQp6TUpVfShsI2V+ZTY9NUttJTI1YzRaZ1dy
Oztid09SR0orRl82SWk+OTMze1NwbGs7YzdSTVJMWl4lcnIoaEMlMTIKejRvVVNVRjxLZEJgVFVE
X3Z6eH15OGQ9R0khTCMpOyV6PH1xXj5qX2xjPExQR3I4d3NzLXZQQENGYXEqUkNzaCV5Cnp4RVNO
PV81VzY2QD5kYFQxUldseDI/QWotPEN6KFRnfjZhU2ZTQExXRm59UGxnfjVSUDRoQjFMYF9YPkdM
YXFVVAp6KHJkXyFgOU40I1NNfCZZISorRiVYI2g9QiZCI2NYcGVEbzdYZHxHUW55d0tCODcle2g0
bnNfXlJPYlU/PEZ0cCMKeldTVkFTVkdvV21LUT1EWUV9QUJZZFVIQzZqUnRoS0QqfSVOaj5LdlE5
dW03SCs5U2R+OX5fZEVWMmBKNER7ejI9CnpIVUM9eWZ3MSZeaEpZWHg2WnRVSXpSZj5xX29JSz8y
bSg8WENNRzV6QVNoT3JObVEmNTExNnZpcnUpd1YyP0FyYwp6Jnp3MTwzNHw0JFdIUDJPZnFecXhU
VEooI3JUTT1yQCZEQHE4NHRpT0NjV2tseCgtfnwkYlFJSkU5TXZqQlkhfFUKemE1VU99JFhHeEBL
fHpwVGVtQ0YldGlYTjhEaHAkVnRnPip9MHBQSEcyWnlJS0xwVkk2OzFCV3YwMDFiYW4+RlNECnph
ZXUoUkFJN24+MH5saXJ1bWNYaiFNZzdfeGMtMlBDRjB0Wno/O3ttS08zbzZSVWRhI2hgPnY5e1Vk
ekN6dSZBUwp6UmhKdyZGSiMpQFJnPHklNF92M2VpWlQoO3tqJSRlcTs9TEhzPWt+cmcjPlQ9OE55
SDFDdCRMI0NmQmc1ciRaOVQKenEyOGAta15aYUI3YT9fRjNmd3lnYjVQUGs4M1I/bHZEJXJoPDBj
Sk9udHxsTEYmRSM1TW9IXiFMWXN8eTNYJnlLCnpCYTNqO1VlQEk/SCM/fFQkRldtRCRhWU0pJGsm
P3dSeXBIVT1uY3B0e35UO2NefkZRVkRPP0AkXmtsT05mQnEmQAp6e2hhSG9LI2FzOzNofVk3dD5x
a2EkTTs7dUgrdiUycmsqWGFWblIoZk4kX2UrUTRJQ3R0PTZDcWJsMlhFMl8/PkYKejxobTk4Ujg8
RVR7Xi02YEBOTHVBKU96fThhcjRefm1tO0pVKms0b1lMUWw8VEZFNUVYdXNnYT9pT2VESE5+eU5i
Cno5SFZBKnd1djcleHRyclo/X1BHUSNHU2xuNkcjQ3Aqc2RZV3F2Z2p9cnJUeyNXX2pgckswXnRP
PmhofWE4QndHbAp6a3ZMTEQ9QW5eQ3VGbmd2PEI3PnNZVmpvR1FCIzF4RXglUTc9fSVaUU1Ybzl3
V2QmKFFPcTBKcDYjX2duZGg+b3QKelBybEt2WXMydipzOVpifSp8UGI/VmoqJWUtbjYtVCQ8Y01r
bWlQWW1ecjBZOHhONjA5I2hZdTxsWm97NGwyRVloCno5ZHdWI15yVntwbkB9Zy02PVo0anZYbiRi
T1RNa2o8eWArQCFXUGw9SFJNTUxTYT9CdnUhPytaXk5BbGVYPnBqeAp6NlhTdUtLV2R7Z0RaaENv
TVlzUVdiSGVzcjt6YUxeK3wmLUlBRkYkdm1CSihZQyl4X2JyJStBJmBlJTRmWlg7I0EKel9gV1F2
UH40cDZONWZzND14SXIxakA+TX4rWndgaShfV0ttNTQlKz4we31EPz1mdzY1THRiUGo0SSFLTCsq
ZzBeCnpRTGwlcD09OGcyUGlyaXNtTVV6VWo2NTZQeU5rQ15YK0FlN3l5dFU3RnJMQyF6a09BfD00
ejJkKX1UPEJtXjdDJQp6OUs2UFJlcHxfKShrMWJRVEVZMU1UPm8rQylPRUtrbUVSJnc1MWpgSjxY
eiltZjJuKy1gez9KKT9teHM+MCo+eU4KejErYFokKCladmxwMHgyO3BncShqfDZSQkQ/Wm5rZjRx
QD9NYGZGejN2UVdOfkVUaiVUM2N9ZU9URyFKNzhCQGA4CnptITlLWl5AU3BAVDg0MTElQ1FnQlhJ
V19CeVBgVWQ7RSZOSktjcmVhe3t8b3dXVWNTSiV5RiNwSkokdG1oekFoKgp6MDFlTURZOVVwPig5
UkB0aHhSO3dQWDBuRXdPP3A9dnlJPzY2aFF9REB3VHJ9NXBVbEokTl44enIhP049WDFqJnwKekVN
b0lMaUd0QlQ9ZVFqaEt+UlJ6Z2xrSDhRY0Q2K1FOYUBWNCl1bzVKekF1IVdPQ0B1b2N5UVg4Nz9U
dSttdDQ3CnoxU0ttVyhnViZ2TEZ2QHFrWTFje2xvdDVXQmhsWXpxemAkam92ZD1qPENEUDJFUjEw
eD53fWI7ST4hI1NNZGArZQp6ZD9HP1o0TFIyJXhAUkViNSVXbTI8KXZwcVRvSkUkNVlqQ1BmQi0z
cEYoZjhiczAzVF8wRnRNV0kkfklXK2coUFMKenNPNGl1eHhLJkZnQT43I2xCbih9byo1c1AheWg/
XmUlTHxsNTY/Y0U8WiFYYkBsd3FgKkhLRyhmOHl2Jmw0MCowCnp5PXdsRG5UK2UxZjMmVVZeSFV7
VGw0X3FETnkhO3o/MTxlU3Rgc2pscnFlJWw8JnVxJmh2PFlJRzxta3t0YVFmRAp6S3dtdmtfX0B5
YmdgKnBQKjh2TVZoWXljJU9jdlJ3ck8kc3RxdT1gfE8+ZzJtMGI8YTFmV0d4UkhZKFZfSz9DVmwK
ejdaQlFZRXhaKXwtUCEhaUtQbmNfYFVzYnNmfGVwdCQ1cismSV5ffHxUUzN0RyNUdU1tMXY4Q0wt
Vj5+LWhYPzh7CnpVd2h4RChRaGVAZkBeRXFFdXJnelRrX1lzbDdTNm41OFR5JWxoNHw9I0N8OWJ0
cjIoV0wrSHQ/VGF2TTVuRkhGcgp6YkszLTEwTCE8SHZAcitwVElDQyhsR3JifkphZDdIaVdLcD9U
OV9PKnRZN1F6MD84Kjw1RENKZCQqMUswVzZxY3kKenRWaVFwUURnWUlSU0wjfXt2SDNeVz18dnly
QmhoU0olTmtMPmJhNEUrKGJIPW5wO2p7VURqVFdqVmMjNHozT0R1CnpWQlhrVzlzQkYra3ReZWVI
OV5oVHE/Y2gyNSQwZlhPTj0lKXBrUE44MmklK3E/bzxDRl57d35namYjc2JKZXIrYgp6ZCpxVVEm
b3pLZHw3KjkmU044PHZSPWV4ZSF9V2dwSDRpX2hZTDtOQGlDfUpaTlokaGp8S0FuV2Q1dyk/PnJv
PGQKemVnPTdHNkF8KVU3b3pIRllkKmw1Yy1YSz1vZ3B6e14/UGRednMpYE1qQTxKQV9qQ3YzSiZz
Jko/K1RHakZQeTRHCnplWW5DVXE/ZGBPantqT2tTZkVgXjAlIzRTcXR9e1ZpRG0hUGUmeGI+P1de
VUp2RGokbE4pIXptZ2FKRnxffV44ZAp6MUBjfnJ0fTJ6Vy1HWmhHWiZaPTVPTVc7N2J1I304cXVK
MHJwSk1hQWI8WW1FdyYqfU1sdUlUT2JBMyRxK1R9UnAKenU7YFBSKz42Ml5XRiU0P1QyPzktKGJU
NHVVRStWY3tzczRtJF55MjVfaTJsMyhZTn5gWisxIVBvcCVIPkxqKTtGCnotRS14PSokdCFKWmtP
bzNwdGZ0VjxNZmFoY3cjSn5ON2N+e09MN3cqZisoR25mJCkkbFZMN2VLdmFBcD4oZE5IKwp6T0hm
Zz5TbkM+MFVaMjx5P2VsMy1jeXRRIyhyaEk0TkBBdWh3dyNgRHNqazBlTyNJcz9WSmM5LXB4eT89
SHlFWCQKekF1cjUkZVViaHpUNnVQTzxqa1Q1Q0J1KCYrTTRzI0djVTJHYHpPaGM8P0IjNHA+biRC
MSEtX0wtVlZsSi0xZ2xWCnpvRFdvRnljRV9hKFlKU2VxPDFKdSlaYWtAVjhGZG8rS2k4Y2NRdEVe
P3E2R2Zua3lwdW9zZ01XSjhxQHM2Vj5GKwp6a0dURGRVbDFSOXpvZWBiYG15YDhQc1NjekJyY1Er
QnQreFI5bWN0KmQjfGlvZTs8ZVpeZV5uUlFWQ05nZnhsKikKejdpNV9VSlVUTlpgKndVZmApZ0km
X0I8cj1wMkcmaHtgUmJWZi1IYyVxfWkyZ19VdmkxX1V1KlpGTVgtTVI0ZUM1CnpXdWtDZ1VNV0Nt
LVRJOS03VHBLZEpPOG5kKCQ9d2Nee3U0ekR6OGdJdkhGJEgkSCooM0llNjtmcWJWaHI/MXRKOAp6
TXgwVHlPWjx6QWVGKVZHWF8kQj0lQH04WEV0N0dSN1RHVE5jWkhYU2s7dU9CSHtaY0QxPyg+d2xm
Y01LanFIMFcKejFLUVppUVBZeHd5RHd3NXd0e0UjT2pfbGxlTkd1MmJBRkBjQ1o2TEoqbHhqUkI2
N2p1cUdiX1ZtPXNfR3k8PVBGCnpScm82Zj1icVd0aVlxTEFETnJjU1o4bGNqbVRrSXQoYGM5Q0c8
REh7RzF1X2QjJFdjdGYzdGV+ZG13aD5LVSltdQp6OSpEV0VMUldtb3UraXk5alIzcjkhPj5ZSEhY
bmZUYGh5e2xQQio0TUhKVj59elNBKGAzej5GcWRZTl5+JDhxT00Kekp0OGdLXzRyNVpiRV9wP3lp
WWpeRyZXMTJzdGpEcl9HTmgtamIhfTQxJnN7alN4SlhQT3QqbUdUWiY2WnltVjRpCno8SiU9QUMz
I3xNVXhfV2Y4eVQ1LTQ5V01ZZmkpSFM8QCtNK3R4Qmh0bW5rM0ptdmg2dWhTcjtTI3lUZSp2Z2lI
bwp6UyY4V2s3ZDJBOD4yKD1sJCY9VUY+NlJOdEA2NjtWV2dgQGVhKis3bkhQamNNX1dJMEo1Ykw4
eVgoTW08Xj0lfXkKekVsfUx1WTNySj1CKEpfZXFfayV5QHgxP1pGVW5YPDgybns5P2xkT2N2Nkt0
Sj9tayNmU18hRit0bFA4KjxMez1GCnpuJSQzUGx7SjxGdCpOVEJBcG9TdXhAVSlhRiFtZjxLQ2Rt
KlRFXj11NEsoPVRhdyNjYD4kaGBuZjRJM2JaWWBFcgp6S0g9ZChQX1IwPVNgS3REc2xYJDdZRT9g
VGNna2Y8aUxTfm84NjlTdF4xMzRXVlRHRmJvZmlnRk52JnNhVm19PT0KelRLTiVKSmF5U348S0I/
QnhBKVJkJnFNYjwhM2xYX2AqTEwlWWYyNUFBZTM+VXtMYSpMeUxlVWRJN2YpdFB7QjdXCnpIdXZa
MTxtOGwxYVp5MiUlRnIrTSV3dUw+OFctSEE2Ym5mN1gjNElHan5paWpKbFEzOGptei1YJTVFNTwj
dWluWQp6QEJvS2FfNEhIfUI3NnVKdz01fHN8N0omYWAyNSpVRjtuQHlScExQQSpAdGhUcTt8d3xO
Qk1ZZyEyTXcoMzAmJj8KVylnU015NX1vZmB4SWV2c1U5JC1sY0tSMzNsdUY2fgoKbGl0ZXJhbCAw
CkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
dGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC12aWRlby1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0yZC13aXRo
LXZpZGVvLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YzUwNjM3MzZhODIyMjk1NjJiZjVmNGJi
N2FhNjU2N2U2YzA3ZTExCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC12aWRlby1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwzOCBAQAorCitWZXJpZnkgdGV4SW1hZ2UyRCBhbmQgdGV4U3ViSW1hZ2Uy
RCBjb2RlIHBhdGhzIHRha2luZyBWaWRlb3MKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEg
c2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgor
CitUZXN0aW5nIHRleEltYWdlMkQgd2l0aCBmbGlwWT1mYWxzZQorUEFTUyBwaXhlbEF0KDAsIDAp
IGlzIHJlZAorUEFTUyBwaXhlbEF0KGJ1ZldpZHRoLTEsIDApIGlzIGdyZWVuCitQQVNTIHBpeGVs
QXQoMCwgYnVmSGVpZ2h0LTEpIGlzIHllbGxvdworUEFTUyBwaXhlbEF0KGJ1ZldpZHRoLTEsIGJ1
ZkhlaWdodC0xKSBpcyBibHVlCitUZXN0aW5nIHRleEltYWdlMkQgd2l0aCBmbGlwWT10cnVlCitQ
QVNTIHBpeGVsQXQoMCwgMCkgaXMgeWVsbG93CitQQVNTIHBpeGVsQXQoYnVmV2lkdGgtMSwgMCkg
aXMgYmx1ZQorUEFTUyBwaXhlbEF0KDAsIGJ1ZkhlaWdodC0xKSBpcyByZWQKK1BBU1MgcGl4ZWxB
dChidWZXaWR0aC0xLCBidWZIZWlnaHQtMSkgaXMgZ3JlZW4KK1Rlc3RpbmcgVGV4U3ViSW1hZ2Uy
RCB3aXRoIGZsaXBZPWZhbHNlLCBzY2FsZT0yLCBveD0wLCBveT0wCitQQVNTIHBpeGVsQXQoMCwg
MCkgaXMgcmVkCitQQVNTIHBpeGVsQXQoYnVmV2lkdGgtMSwgMCkgaXMgY2xlYXIKK1BBU1MgcGl4
ZWxBdCgwLCBidWZIZWlnaHQtMSkgaXMgY2xlYXIKK1BBU1MgcGl4ZWxBdChidWZXaWR0aC0xLCBi
dWZIZWlnaHQtMSkgaXMgY2xlYXIKK1Rlc3RpbmcgVGV4U3ViSW1hZ2UyRCB3aXRoIGZsaXBZPXRy
dWUsIHNjYWxlPTIsIG94PTAsIG95PTAKK1BBU1MgcGl4ZWxBdCgwLCAwKSBpcyB5ZWxsb3cKK1BB
U1MgcGl4ZWxBdChidWZXaWR0aC0xLCAwKSBpcyBjbGVhcgorUEFTUyBwaXhlbEF0KDAsIGJ1Zkhl
aWdodC0xKSBpcyBjbGVhcgorUEFTUyBwaXhlbEF0KGJ1ZldpZHRoLTEsIGJ1ZkhlaWdodC0xKSBp
cyBjbGVhcgorVGVzdGluZyBUZXhTdWJJbWFnZTJEIHdpdGggZmxpcFk9ZmFsc2UsIHNjYWxlPTIs
IG94PTAuNSwgb3k9MC41CitQQVNTIHBpeGVsQXQoMCwgMCkgaXMgY2xlYXIKK1BBU1MgcGl4ZWxB
dChidWZXaWR0aC0xLCAwKSBpcyBjbGVhcgorUEFTUyBwaXhlbEF0KDAsIGJ1ZkhlaWdodC0xKSBp
cyBjbGVhcgorUEFTUyBwaXhlbEF0KGJ1ZldpZHRoLTEsIGJ1ZkhlaWdodC0xKSBpcyBibHVlCitU
ZXN0aW5nIFRleFN1YkltYWdlMkQgd2l0aCBmbGlwWT10cnVlLCBzY2FsZT0yLCBveD0wLjUsIG95
PTAuNQorUEFTUyBwaXhlbEF0KDAsIDApIGlzIGNsZWFyCitQQVNTIHBpeGVsQXQoYnVmV2lkdGgt
MSwgMCkgaXMgY2xlYXIKK1BBU1MgcGl4ZWxBdCgwLCBidWZIZWlnaHQtMSkgaXMgY2xlYXIKK1BB
U1MgcGl4ZWxBdChidWZXaWR0aC0xLCBidWZIZWlnaHQtMSkgaXMgZ3JlZW4KK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC12
aWRlby5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1z
dWItaW1hZ2UtMmQtd2l0aC12aWRlby5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjAyZjU5Y2IxZmMxYzZkOTEx
YjcxZjQ2MTE4YmQxY2IzYTBiODZhMTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0yZC13aXRoLXZpZGVvLmh0
bWwKQEAgLTAsMCArMSwyMTAgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0eWxlc2hl
ZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlw
dCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uLy4uLy4uL21lZGlhL21lZGlhLWZpbGUuanMiPjwvc2NyaXB0PgorCis8c2NyaXB0IGlkPSJ2
c2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LXZlcnRleCI+CithdHRyaWJ1dGUgdmVjMyBnX1Bvc2l0
aW9uOworYXR0cmlidXRlIHZlYzIgZ19UZXhDb29yZDA7CisKK3ZhcnlpbmcgdmVjMiB0ZXhDb29y
ZDsKKwordm9pZCBtYWluKCkKK3sKKyAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoZ19Qb3NpdGlvbi54
LCBnX1Bvc2l0aW9uLnksIGdfUG9zaXRpb24ueiwgMS4wKTsKKyAgICB0ZXhDb29yZCA9IGdfVGV4
Q29vcmQwOworfQorPC9zY3JpcHQ+CisKKzxzY3JpcHQgaWQ9ImZzaGFkZXIiIHR5cGU9Ingtc2hh
ZGVyL3gtZnJhZ21lbnQiPgorI2lmZGVmIEdMX0VTCitwcmVjaXNpb24gaGlnaHAgZmxvYXQ7Cisj
ZW5kaWYKK3VuaWZvcm0gc2FtcGxlcjJEIHRleDsKK3ZhcnlpbmcgdmVjMiB0ZXhDb29yZDsKKwor
dm9pZCBtYWluKCkKK3sKKyAgICBnbF9GcmFnQ29sb3IgPSB0ZXh0dXJlMkQodGV4LCB0ZXhDb29y
ZCk7Cit9Cis8L3NjcmlwdD4KKworPHNjcmlwdD4KK3ZhciBnbCA9IG51bGw7Cit2YXIgdGV4dHVy
ZUxvYyA9IG51bGw7Cit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gZmFsc2U7CisKK2Z1bmN0aW9u
IGluaXQoKQoreworICAgIGlmICh3aW5kb3cuaW5pdE5vbktocm9ub3NGcmFtZXdvcmspIHsKKyAg
ICAgICAgd2luZG93LmluaXROb25LaHJvbm9zRnJhbWV3b3JrKHRydWUpOworICAgIH0KKworICAg
IGRlc2NyaXB0aW9uKCdWZXJpZnkgdGV4SW1hZ2UyRCBhbmQgdGV4U3ViSW1hZ2UyRCBjb2RlIHBh
dGhzIHRha2luZyBWaWRlb3MnKTsKKworICAgIGdsID0gaW5pdFdlYkdMKCJleGFtcGxlIiwgInZz
aGFkZXIiLCAiZnNoYWRlciIsIFsgImdfUG9zaXRpb24iLCAiZ19UZXhDb29yZDAiIF0sIFsgMCwg
MCwgMCwgMSBdLCAxKTsKKworICAgIHRleHR1cmVMb2MgPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24o
Z2wucHJvZ3JhbSwgInRleCIpOworCisgICAgdmFyIHZlcnRpY2VzID0gbmV3IEZsb2F0MzJBcnJh
eShbCisgICAgICAgICAxLjAsICAxLjAsIDAuMCwKKyAgICAgICAgLTEuMCwgIDEuMCwgMC4wLAor
ICAgICAgICAtMS4wLCAtMS4wLCAwLjAsCisgICAgICAgICAxLjAsICAxLjAsIDAuMCwKKyAgICAg
ICAgLTEuMCwgLTEuMCwgMC4wLAorICAgICAgICAgMS4wLCAtMS4wLCAwLjBdKTsKKyAgICB2YXIg
dGV4Q29vcmRzID0gbmV3IEZsb2F0MzJBcnJheShbCisgICAgICAgIDEuMCwgMS4wLAorICAgICAg
ICAwLjAsIDEuMCwKKyAgICAgICAgMC4wLCAwLjAsCisgICAgICAgIDEuMCwgMS4wLAorICAgICAg
ICAwLjAsIDAuMCwKKyAgICAgICAgMS4wLCAwLjBdKTsKKyAgICB2YXIgdGV4Q29vcmRPZmZzZXQg
PSB2ZXJ0aWNlcy5ieXRlTGVuZ3RoOworCisgICAgdmFyIHZibyA9IGdsLmNyZWF0ZUJ1ZmZlcigp
OworICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2Ym8pOworICAgIGdsLmJ1ZmZl
ckRhdGEoZ2wuQVJSQVlfQlVGRkVSLAorICAgICAgICAgICAgICAgICAgdGV4Q29vcmRPZmZzZXQg
KyB0ZXhDb29yZHMuYnl0ZUxlbmd0aCwKKyAgICAgICAgICAgICAgICAgIGdsLlNUQVRJQ19EUkFX
KTsKKyAgICBnbC5idWZmZXJTdWJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgMCwgdmVydGljZXMpOwor
ICAgIGdsLmJ1ZmZlclN1YkRhdGEoZ2wuQVJSQVlfQlVGRkVSLCB0ZXhDb29yZE9mZnNldCwgdGV4
Q29vcmRzKTsKKworICAgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOworICAgIGdsLnZl
cnRleEF0dHJpYlBvaW50ZXIoMCwgMywgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKyAgICBnbC5l
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgxKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDEs
IDIsIGdsLkZMT0FULCBnbC5GQUxTRSwgMCwgdGV4Q29vcmRPZmZzZXQpOworCisgICAgdmFyIG1l
ZGlhRmlsZSA9IGZpbmRNZWRpYUZpbGUoInZpZGVvIiwgImNvbnRlbnQvcXVhZHJhbnRzIik7Cisg
ICAgbG9hZFZpZGVvKG1lZGlhRmlsZSk7Cit9CisKK2Z1bmN0aW9uIGxvYWRWaWRlbyhzcmMpIHsK
KyAgICB2YXIgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgICBnbC5iaW5kVGV4dHVy
ZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRV
UkVfMkQsIGdsLlRFWFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7CisgICAgZ2wudGV4UGFy
YW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGdsLk5FQVJFU1Qp
OworICAgIHZhciB2aWRlbyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCd2aWRlbycp
WzBdOworCisgICAgZnVuY3Rpb24gc3RhcnRWaWRlbygpIHsKKyAgICAgICAgLy8gUmVzaXplIGNh
bnZhcyB0byBmaXQgdmlkZW8uCisgICAgICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVt
ZW50c0J5VGFnTmFtZSgnY2FudmFzJylbMF07CisgICAgICAgIGNhbnZhcy53aWR0aCA9IHZpZGVv
LnZpZGVvV2lkdGg7CisgICAgICAgIGNhbnZhcy5oZWlnaHQgPSB2aWRlby52aWRlb0hlaWdodDsK
KworICAgICAgICBydW5UZXN0KHZpZGVvKTsKKyAgICB9OworICAgIHZpZGVvLmFkZEV2ZW50TGlz
dGVuZXIoImNhbnBsYXkiLCBzdGFydFZpZGVvKTsKKworICAgIHZpZGVvLnNyYyA9IHNyYzsKKyAg
ICByZXR1cm4gdGV4dHVyZTsKK30KKworLy8gVGhlc2UgZGVjbGFyYXRpb25zIG5lZWQgdG8gYmUg
Z2xvYmFsIGZvciAic2hvdWxkQmUiIHRvIHNlZSB0aGVtCit2YXIgYnVmID0gbnVsbDsKK3ZhciBi
dWZXaWR0aDsKK3ZhciBidWZIZWlnaHQ7Cit2YXIgcmVkID0gWzI1NSwgMCwgMF07Cit2YXIgZ3Jl
ZW4gPSBbMCwgMjU1LCAwXTsKK3ZhciBibHVlID0gWzAsIDAsIDI1NV07Cit2YXIgeWVsbG93ID0g
WzI1NSwgMjU1LCAwXTsKK3ZhciBibGFjayA9IFswLCAwLCAwXTsKK3ZhciBjbGVhciA9IFsxMjcs
IDEyNywgMTI3XTsKK2Z1bmN0aW9uIHBpeGVsQXQoeCwgeSkgeworICAgIHZhciBpbmRleCA9IHkg
KiBidWZXaWR0aCAqIDQgKyB4ICogNDsKKyAgICByZXR1cm4gW2J1ZltpbmRleF0sIGJ1ZltpbmRl
eCsxXSwgYnVmW2luZGV4KzJdXTsKK30KKworZnVuY3Rpb24gcnVuT25lVGVzdCh2aWRlbywgZmxp
cFksIHVzZVRleFN1YkltYWdlMkQsIHVsQ29sb3IsIHVyQ29sb3IsIGJsQ29sb3IsIGJyQ29sb3Is
IG94LCBveSwgc2NhbGUpIHsKKyAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNC
eVRhZ05hbWUoJ2NhbnZhcycpWzBdOworICAgIGdsLnZpZXdwb3J0KDAsIDAsIGNhbnZhcy53aWR0
aCwgY2FudmFzLmhlaWdodCk7CisKKyAgICAvLyBDbGVhciB0byBhIG5vbi13aGl0ZSwgbm9uLWJs
YWNrLCBub24tdGVzdGVkIGNvbG9yLgorICAgIGdsLmNsZWFyQ29sb3IoY2xlYXJbMF0gLyAyNTUs
IGNsZWFyWzFdIC8gMjU1LCBjbGVhclsyXSAvIDI1NSwgMSk7CisgICAgZ2wuY2xlYXIoZ2wuQ09M
T1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9CSVQpOworICAgIC8vIERpc2FibGUgYW55
IHdyaXRlcyB0byB0aGUgYWxwaGEgY2hhbm5lbAorICAgIGdsLmNvbG9yTWFzaygxLCAxLCAxLCAw
KTsKKworICAgIHZhciB0ZXh0dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICAgIC8vIEJpbmQg
dGhlIHRleHR1cmUgdG8gdGV4dHVyZSB1bml0IDAKKyAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhU
VVJFXzJELCB0ZXh0dXJlKTsKKyAgICAvLyBTZXQgdXAgdGV4dHVyZSBwYXJhbWV0ZXJzCisgICAg
Z2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX01JTl9GSUxURVIsIGds
Lk5FQVJFU1QpOworICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVS
RV9NQUdfRklMVEVSLCBnbC5ORUFSRVNUKTsKKyAgICAvLyBTZXQgdXAgcGl4ZWwgc3RvcmUgcGFy
YW1ldGVycworICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19GTElQX1lfV0VCR0wsIGZsaXBZ
KTsKKyAgICBnbC5waXhlbFN0b3JlaShnbC5VTlBBQ0tfUFJFTVVMVElQTFlfQUxQSEFfV0VCR0ws
IGZhbHNlKTsKKyAgICAvLyBVcGxvYWQgdGhlIGltYWdlIGludG8gdGhlIHRleHR1cmUKKyAgICBp
ZiAodXNlVGV4U3ViSW1hZ2UyRCkgeworICAgICAgICB2YXIgdGV4V2lkdGggPSBzY2FsZSAqIGNh
bnZhcy53aWR0aDsKKyAgICAgICAgdmFyIHRleEhlaWdodCA9IHNjYWxlICogY2FudmFzLmhlaWdo
dDsKKyAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCB0ZXhX
aWR0aCwgdGV4SGVpZ2h0LCAwLAorICAgICAgICAgICAgICAgICAgICAgIGdsLlJHQkEsIGdsLlVO
U0lHTkVEX0JZVEUsIG51bGwpOworCisgICAgICAgIGdsLnRleFN1YkltYWdlMkQoZ2wuVEVYVFVS
RV8yRCwgMCwgb3ggKiB0ZXhXaWR0aCwgb3kgKiB0ZXhIZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lH
TkVEX0JZVEUsIHZpZGVvKTsKKyAgICAgICAgZGVidWcoJ1Rlc3RpbmcgVGV4U3ViSW1hZ2UyRCB3
aXRoIGZsaXBZPScgKyBmbGlwWSArJywgc2NhbGU9JyArIHNjYWxlICsgJywgb3g9JyArIG94ICsg
Jywgb3k9JyArIG95KTsKKyAgICB9IGVsc2UgeworICAgICAgICBkZWJ1ZygnVGVzdGluZyB0ZXhJ
bWFnZTJEIHdpdGggZmxpcFk9JyArIGZsaXBZKTsKKyAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5U
RVhUVVJFXzJELCAwLCBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCB2aWRlbyk7
CisgICAgfQorCisgICAgLy8gUG9pbnQgdGhlIHVuaWZvcm0gc2FtcGxlciB0byB0ZXh0dXJlIHVu
aXQgMAorICAgIGdsLnVuaWZvcm0xaSh0ZXh0dXJlTG9jLCAwKTsKKyAgICAvLyBEcmF3IHRoZSB0
cmlhbmdsZXMKKyAgICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgNik7CisgICAgLy8g
UmVhZCBiYWNrIHRoZSByZW5kZXJpbmcgcmVzdWx0cworICAgIGJ1ZldpZHRoID0gY2FudmFzLndp
ZHRoOworICAgIGJ1ZkhlaWdodCA9IGNhbnZhcy5oZWlnaHQ7CisgICAgYnVmID0gbmV3IFVpbnQ4
QXJyYXkoYnVmV2lkdGggKiBidWZIZWlnaHQgKiA0KTsKKyAgICBnbC5yZWFkUGl4ZWxzKDAsIDAs
IGJ1ZldpZHRoLCBidWZIZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJ1Zik7CisK
KyAgICBzaG91bGRCZSgicGl4ZWxBdCgwLCAwKSIsIHVsQ29sb3IpOworICAgIHNob3VsZEJlKCJw
aXhlbEF0KGJ1ZldpZHRoLTEsIDApIiwgdXJDb2xvcik7CisgICAgc2hvdWxkQmUoInBpeGVsQXQo
MCwgYnVmSGVpZ2h0LTEpIiwgYmxDb2xvcik7CisgICAgc2hvdWxkQmUoInBpeGVsQXQoYnVmV2lk
dGgtMSwgYnVmSGVpZ2h0LTEpIiwgYnJDb2xvcik7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3Qodmlk
ZW8pCit7CisgICAgLy8gT3JpZ2luYWwgc3F1YXJlIHNob3VsZCBoYXZlIHJlZCwgZ3JlZW4sIHll
bGxvdywgYmx1ZSBxdWFkcmFudHMsCisgICAgLy8gd2l0aCBhIGNyb3NzIGluIHRoZSBtaWRkbGU6
CisgICAgLy8KKyAgICAvLyBSfEcKKyAgICAvLyAtKy0KKyAgICAvLyBZfEIKKworICAgIC8vIHRl
eEltYWdlMkQgdGhlIHdob2xlIHRleHR1cmUKKyAgICBydW5PbmVUZXN0KHZpZGVvLCBmYWxzZSwg
ZmFsc2UsICJyZWQiLCAiZ3JlZW4iLCAieWVsbG93IiwgImJsdWUiKTsKKyAgICBydW5PbmVUZXN0
KHZpZGVvLCB0cnVlLCBmYWxzZSwgInllbGxvdyIsICJibHVlIiwgInJlZCIsICJncmVlbiIpOwor
CisgICAgLy8gdGV4U3ViSW1hZ2UyRCB1cHBlciBsZWZ0CisgICAgcnVuT25lVGVzdCh2aWRlbywg
ZmFsc2UsIHRydWUsICJyZWQiLCAiY2xlYXIiLCAiY2xlYXIiLCAiY2xlYXIiLCAwLCAwLCAyKTsK
KyAgICBydW5PbmVUZXN0KHZpZGVvLCB0cnVlLCB0cnVlLCAieWVsbG93IiwgImNsZWFyIiwgImNs
ZWFyIiwgImNsZWFyIiwgMCwgMCwgMik7CisKKyAgICAvLyB0ZXhTdWJJbWFnZTJEIGxvd2VyIHJp
Z2h0CisgICAgcnVuT25lVGVzdCh2aWRlbywgZmFsc2UsIHRydWUsICJjbGVhciIsICJjbGVhciIs
ICJjbGVhciIsICJibHVlIiwgMC41LCAwLjUsIDIpOworICAgIHJ1bk9uZVRlc3QodmlkZW8sIHRy
dWUsIHRydWUsICJjbGVhciIsICJjbGVhciIsICJjbGVhciIsICJncmVlbiIsIDAuNSwgMC41LCAy
KTsKKworICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgdmFyIGVwaWxvZ3VlID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CisgICAgZXBpbG9ndWUub25sb2FkID0g
ZmluaXNoOworICAgIGVwaWxvZ3VlLnNyYyA9ICIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1w
b3N0LmpzIjsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVwaWxvZ3VlKTsKK30KKwor
ZnVuY3Rpb24gZmluaXNoKCkgeworICAgIGlmICh3aW5kb3cubm9uS2hyb25vc0ZyYW1ld29ya05v
dGlmeURvbmUpIHsKKyAgICAgICAgd2luZG93Lm5vbktocm9ub3NGcmFtZXdvcmtOb3RpZnlEb25l
KCk7CisgICAgfQorfQorPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keSBvbmxvYWQ9ImluaXQoKSI+
Cis8dmlkZW8gaWQ9InNvdXJjZXZpZGVvIj48L3ZpZGVvPgorPGNhbnZhcyBpZD0iZXhhbXBsZSI+
PC9jYW52YXM+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9n
IGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjFhMjU5ODg5ZmFiODQyMzUyNWY3MGM1OGQ2YzNk
NTg1YzQxMTUxZi4uM2RlMDY5OTNmNzBjYWFlZTFmYWU2ODMzNDkwZjYwY2QwNDE3N2U5NiAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMSBAQAorMjAxMC0wOC0xOCAgQWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxl
bWVudCBIVE1MVmlkZW9FbGVtZW50IHN1cHBvcnQgZm9yIHRleEltYWdlMkQgYW5kIHRleFN1Yklt
YWdlMkQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMz
ODUyCisKKyAgICAgICAgVGVzdDogZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWIt
aW1hZ2UtMmQtd2l0aC12aWRlby5odG1sCisKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250
ZXh0OjpXZWJHTFJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVy
aW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRl
cmluZ0NvbnRleHQ6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OkxSVUltYWdlQnVmZmVyQ2FjaGUpOgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFnZUJ1ZmZlckNh
Y2hlOjppbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmJ1YmJsZVRvRnJvbnQpOgorICAgICAgICAqIGh0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOgorCiAyMDEwLTA4LTE4ICBNYWhlc2ggS3Vs
a2FybmkgIDxtYWhlc2gua3Vsa2FybmlAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFN0ZXZlIEJsb2NrLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwCmluZGV4IDQ0NjU4MzM5MzQ3ZGJkMzliNGE2YzZhODM2ZDU5OWI5ODlkYmVmMjQuLjEz
NDcyMTZkNWJkODZkMzEzMzE3YTkxOGY2OTMzODMxZjc0ZjIwYjQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9XZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgpAQCAtOTgsNiArOTksNyBAQCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OldlYkdMUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2Fu
dmFzLCBQYQogICAgICwgbV9uZWVkc1VwZGF0ZSh0cnVlKQogICAgICwgbV9tYXJrZWRDYW52YXNE
aXJ0eShmYWxzZSkKICAgICAsIG1fYWN0aXZlVGV4dHVyZVVuaXQoMCkKKyAgICAsIG1fdmlkZW9D
YWNoZSg0KQogICAgICwgbV9wYWNrQWxpZ25tZW50KDQpCiAgICAgLCBtX3VucGFja0FsaWdubWVu
dCg0KQogICAgICwgbV91bnBhY2tGbGlwWShmYWxzZSkKQEAgLTIxOTEsMTYgKzIxOTMsMjEgQEAg
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1
bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJ
bWFnZTJEKHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIGludGVybmFs
Zm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
Zm9ybWF0LCB1bnNpZ25lZCB0eXBlLCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbywgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7Ci0gICAgLy8gRklYTUU6IE5lZWQgdG8gaW1wbGVtZW50IHRoaXMgY2FsbAot
ICAgIFVOVVNFRF9QQVJBTSh0YXJnZXQpOwotICAgIFVOVVNFRF9QQVJBTShsZXZlbCk7Ci0gICAg
VU5VU0VEX1BBUkFNKGludGVybmFsZm9ybWF0KTsKLSAgICBVTlVTRURfUEFSQU0oZm9ybWF0KTsK
LSAgICBVTlVTRURfUEFSQU0odHlwZSk7Ci0gICAgVU5VU0VEX1BBUkFNKHZpZGVvKTsKLQogICAg
IGVjID0gMDsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFsc2UpOworICAgIGlmICgh
dmlkZW8gfHwgIXZpZGVvLT52aWRlb1dpZHRoKCkgfHwgIXZpZGVvLT52aWRlb0hlaWdodCgpKSB7
CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIEludFNpemUgc2l6
ZSh2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSk7CisgICAgSW1hZ2VC
dWZmZXIqIGJ1ZiA9IG1fdmlkZW9DYWNoZS5pbWFnZUJ1ZmZlcihzaXplKTsKKyAgICBpZiAoIWJ1
ZikgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpPVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBJbnRSZWN0
IGRlc3RSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisgICAgdmlkZW8t
PnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGJ1Zi0+Y29udGV4dCgpLCBkZXN0UmVjdCk7Cisg
ICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1Zi0+Y29weUltYWdlKCk7CisgICAgdGV4SW1hZ2Uy
REltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlwZSwgaW1hZ2Uu
Z2V0KCksIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwogfQog
CiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyKHVuc2lnbmVkIGxvbmcg
dGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCBwYXJhbWYsIGludCBwYXJhbWksIGJv
b2wgaXNGbG9hdCkKQEAgLTIzNDIsMTYgKzIzNDksMjEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5z
aWcKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKHVuc2lnbmVkIHRh
cmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVkIHlvZmZzZXQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3Jt
YXQsIHVuc2lnbmVkIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQgdGhpcyBjYWxsCi0gICAg
VU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKLSAgICBVTlVT
RURfUEFSQU0oeG9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHlvZmZzZXQpOwotICAgIFVOVVNF
RF9QQVJBTShmb3JtYXQpOwotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICBVTlVTRURfUEFS
QU0odmlkZW8pOwogICAgIGVjID0gMDsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGljc0NhbGwoZmFs
c2UpOworICAgIGlmICghdmlkZW8gfHwgIXZpZGVvLT52aWRlb1dpZHRoKCkgfHwgIXZpZGVvLT52
aWRlb0hlaWdodCgpKSB7CisgICAgICAgIG1fY29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3Jh
cGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUUpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIEludFNpemUgc2l6ZSh2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQo
KSk7CisgICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fdmlkZW9DYWNoZS5pbWFnZUJ1ZmZlcihzaXpl
KTsKKyAgICBpZiAoIWJ1ZikgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBJbnRSZWN0IGRlc3RSZWN0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSk7CisgICAgdmlkZW8tPnBhaW50Q3VycmVudEZyYW1lSW5Db250ZXh0KGJ1Zi0+Y29udGV4dCgp
LCBkZXN0UmVjdCk7CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJ1Zi0+Y29weUltYWdlKCk7
CisgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwg
Zm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgbV91bnBhY2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0
aXBseUFscGhhLCBlYyk7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp1bmlmb3Jt
MWYoY29uc3QgV2ViR0xVbmlmb3JtTG9jYXRpb24qIGxvY2F0aW9uLCBmbG9hdCB4LCBFeGNlcHRp
b25Db2RlJiBlYykKQEAgLTM1NjQsNiArMzU3Niw0MiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6cmVzdG9yZVN0YXRlc0FmdGVyVmVydGV4QXR0cmliMFNpbXVsYXRpb24oKQogICAgIG1f
Y29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBvYmpl
Y3RPclplcm8obV9ib3VuZEFycmF5QnVmZmVyLmdldCgpKSk7CiB9CiAKK1dlYkdMUmVuZGVyaW5n
Q29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6TFJVSW1hZ2VCdWZmZXJDYWNoZShpbnQgY2Fw
YWNpdHkpCisgICAgOiBtX2J1ZmZlcnMobmV3IE93blB0cjxJbWFnZUJ1ZmZlcj5bY2FwYWNpdHld
KQorICAgICwgbV9jYXBhY2l0eShjYXBhY2l0eSkKK3sKK30KKworSW1hZ2VCdWZmZXIqIFdlYkdM
UmVuZGVyaW5nQ29udGV4dDo6TFJVSW1hZ2VCdWZmZXJDYWNoZTo6aW1hZ2VCdWZmZXIoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKK3sKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbV9jYXBh
Y2l0eTsgKytpKSB7CisgICAgICAgIEltYWdlQnVmZmVyKiBidWYgPSBtX2J1ZmZlcnNbaV0uZ2V0
KCk7CisgICAgICAgIGlmICghYnVmKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChi
dWYtPnNpemUoKSAhPSBzaXplKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGJ1YmJs
ZVRvRnJvbnQoaSk7CisgICAgICAgIHJldHVybiBidWY7CisgICAgfQorCisgICAgT3duUHRyPElt
YWdlQnVmZmVyPiB0ZW1wID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShzaXplKTsKKyAgICBpZiAoIXRl
bXApCisgICAgICAgIHJldHVybiAwOworICAgIGkgPSBzdGQ6Om1pbihtX2NhcGFjaXR5IC0gMSwg
aSk7CisgICAgbV9idWZmZXJzW2ldID0gdGVtcC5yZWxlYXNlKCk7CisKKyAgICBJbWFnZUJ1ZmZl
ciogYnVmID0gbV9idWZmZXJzW2ldLmdldCgpOworICAgIGJ1YmJsZVRvRnJvbnQoaSk7CisgICAg
cmV0dXJuIGJ1ZjsKK30KKwordm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OkxSVUltYWdlQnVm
ZmVyQ2FjaGU6OmJ1YmJsZVRvRnJvbnQoaW50IGlkeCkKK3sKKyAgICBmb3IgKGludCBpID0gaWR4
OyBpID4gMDsgLS1pKQorICAgICAgICBtX2J1ZmZlcnNbaV0uc3dhcChtX2J1ZmZlcnNbaS0xXSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5W
QVMpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5oIGIvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAppbmRleCA0
OGZhN2M4NTYyMDQwYzYxZDI0NGJkMjg5NDg5Y2MyZGVkNjA2MjExLi4wMTc0MDFlMTY1M2U0MDcx
N2VkNmI2MDQ3ZjE1NjdjOWFjM2I5YmNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmgKQEAgLTM1LDYgKzM1LDggQEAKICNpbmNsdWRlICJVaW50OEFycmF5
LmgiCiAjaW5jbHVkZSAiV2ViR0xHZXRJbmZvLmgiCiAKKyNpbmNsdWRlIDx3dGYvT3duQXJyYXlQ
dHIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBXZWJHTEFjdGl2ZUluZm87CkBA
IC00OSw2ICs1MSw3IEBAIGNsYXNzIFdlYkdMVGV4dHVyZTsKIGNsYXNzIFdlYkdMVW5pZm9ybUxv
Y2F0aW9uOwogY2xhc3MgSFRNTEltYWdlRWxlbWVudDsKIGNsYXNzIEhUTUxWaWRlb0VsZW1lbnQ7
CitjbGFzcyBJbWFnZUJ1ZmZlcjsKIGNsYXNzIEltYWdlRGF0YTsKIGNsYXNzIFdlYktpdENTU01h
dHJpeDsKIApAQCAtMzg3LDYgKzM5MCwxOSBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPFdlYkdMVGV4
dHVyZT4gbV9ibGFja1RleHR1cmUyRDsKICAgICBSZWZQdHI8V2ViR0xUZXh0dXJlPiBtX2JsYWNr
VGV4dHVyZUN1YmVNYXA7CiAKKyAgICAvLyBGaXhlZC1zaXplIGNhY2hlIG9mIHJldXNhYmxlIGlt
YWdlIGJ1ZmZlcnMgZm9yIHZpZGVvIHRleEltYWdlMkQgY2FsbHMuCisgICAgY2xhc3MgTFJVSW1h
Z2VCdWZmZXJDYWNoZSB7CisgICAgcHVibGljOgorICAgICAgICBMUlVJbWFnZUJ1ZmZlckNhY2hl
KGludCBjYXBhY2l0eSk7CisgICAgICAgIC8vIFRoZSBwb2ludGVyIHJldHVybmVkIGlzIG93bmVk
IGJ5IHRoZSBpbWFnZSBidWZmZXIgbWFwLgorICAgICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZm
ZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBidWJi
bGVUb0Zyb250KGludCBpZHgpOworICAgICAgICBPd25BcnJheVB0cjxPd25QdHI8SW1hZ2VCdWZm
ZXI+ID4gbV9idWZmZXJzOworICAgICAgICBpbnQgbV9jYXBhY2l0eTsKKyAgICB9OworICAgIExS
VUltYWdlQnVmZmVyQ2FjaGUgbV92aWRlb0NhY2hlOworCiAgICAgaW50IG1fbWF4VGV4dHVyZVNp
emU7CiAgICAgaW50IG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplOwogICAgIGludCBtX21heFRleHR1
cmVMZXZlbDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>64872</attachid>
            <date>2010-08-19 10:52:21 -0700</date>
            <delta_ts>2010-08-19 15:54:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33852-20100819105220.patch</filename>
            <type>text/plain</type>
            <size>22305</size>
            <attacher name="Adrienne Walker">enne</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBmYTBhYjQ1ZDQ2Yzc0MWQxZmZhYzBmNzMzNGRkNDE3MzkwNGUyZThlLi4xYzk1ZmZk
NzBmZmEwZTZhMGVlNGIwZjk4NzJiZjMxZWU3NjkyYWRkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAK
KzIwMTAtMDgtMTkgIEFkcmllbm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgSFRNTFZp
ZGVvRWxlbWVudCBzdXBwb3J0IGZvciB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJECisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzg1MgorCisgICAg
ICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3F1YWRyYW50cy5tcDQ6IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9xdWFkcmFudHMub2d2OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0y
ZC13aXRoLXZpZGVvLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMv
d2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC12aWRlby5odG1sOiBBZGRlZC4K
KwogMjAxMC0wOC0xOCAgWXV0YSBLaXRhbXVyYSAgPHl1dGFrQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkLCB0ZXN0IGV4cGVjdGF0aW9uIHVwZGF0ZS4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNlcy9xdWFkcmFudHMubXA0IGIvTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2VzL3F1YWRyYW50cy5tcDQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYmFiNGY4ZDI2NTA0Yzc3OWFmYWJhMmExMTEyNjcxN2U1Y2YxNjhlZQpHSVQgYmluYXJ5
IHBhdGNoCmxpdGVyYWwgMTU3OAp6Y21hSj5VdVlhZjd+ZX04Nj18YGREVypfI3cwJnI0dmJURzhO
dntXczJ7QVNtTEljYFJITSpKSW5heGdifDdDVkEKemNVU3pBVUA2Z31KX3NvI19RQ2R7TlA+IUJS
anxeQllXcmdCbzJkdztwaDkwdnI3dSRkdGwjWUE4WExycStuTHxACnp8Q3tmZDglMHElOVpgPyls
JnZkM0VEcnEhWmhnV2hTViZvZVRIZF5gRWxIMDVJQyU1SUZWfWBYbzlrTGUqTE04Ngp6UXBAIWdQ
JmN3ZVBFb04zOWtNRWNzRj1CdXJXU2l0eS0rQ2JuUDVXNHkoRkxPbVdEJHJJQW4pTTJLTktvS1JO
KU8Kemd4YTdPMiYxfTM5ZjVNMW1oWG1UOXwmQ2BxRWE/bnR5YX0zTXJpMmFLbj9qc1IlVFVRO2RA
e2NNdUxTd1R0WVVzCnp1eDtwd1FeJnw3TE08PH0lWjZVa04qY2xlX1ViVjt2fDdIVClwUnxOZH1f
Rn5oVEA2XlhmS041ST1JNFdhJEBNSgp6MjJRWGJwVmNUYVdrZWwzT3BiI0lZVXNWbGJ+IVo0MVht
cGlQQ2J2c2ZRcSN1dT59Qm8obDwwSDBoNk8pSyNpUTwKenJSJkpTdWByeyElcHomZzJyd0MkcTJ0
Njw3fk1HfVRuLSt3a3Q/OXNWPlRwaU47RE1rR0AjOVZFTSF2TyFqMXpYCno4OyZrR1cmdjJVMDEo
SjVoaHZ8eyY7LWtqPlZPJU1RV0Z5IyQ/N2NBVm1PeFo3Xmk4eSlyZURLZmhxLSZrd2F4Iwp6aGoy
ISZNX1l4YSZqTWdrWX0wXys2PTQpS2xxUXRqO1dUejM5PUE7fDQ5blBzVkBOJT40VnlicUUzYC0h
NFVDYj8KenN+VmNMTHE5UyF3SElJezFNNFprSEtSdWROaTFrJjZjQ0dgO1ZAajcyTCF7REZpU1pa
V2cyZWVYKnhUTmxzKENqCnooJUVtV3xHQmVgd2BfU29gQE9PSjw8biFzeU9ZMXE/XkVZcmN5OyE0
UkRSJlk9UHkzP2dMezQ4LVFQQzdefm1KbAp6JS19K0NoUnhpPmU4V1EqPTNle2IrMjVEWXFqd2hF
N2VCaTVffGxvJT9PaipLVXp4ZWhzLXVoRlVjR1VLOWU7MFcKel99RHh1QzV0RD03WENVcGVRU0xG
PWFIKz10LU9CajsmPClLTjUoKGl1Knw8Y2ZCRDRhWlJSSSlKTXYlTElgLSt7CnpPWmB3XzM3U0Y9
I05qWHs0NU8hKk42YG9tTmQ/QT1zIVhfT3w0OUQ7KCRzPzVnTFlYSjxgSTw3PypfK35RK15tdQp6
MHIzMU9tJXklRW5mPloqYEdNeyp1JEBYcWstcyYlaFhMX0F6SGlPKXpmY1BaeDNaQUxRbn5xbDx6
U0t8VE42bU8KejhMbT9xV01pVjc3THIqajxaZztpPjJ3ZFJPTWNnSyl1PlBJYXpYR1puTUVKa0JS
UVh9S2RpRCU4WFVTTD9VY1BQCnpAcHlgMGsjOWowJVJPITdmb0JlKVFUYSVxQXNpNW9PNiR4cFRy
TE1kJENUZVZmOzM7SG91cn1MUFQmVHclNEcyeQp6RThJaHsxSX0hVWgyO1ZNQVFve3RpLXVlfClx
RjVsZEQjOSVlUT54VDtOPlN0TSpWOzRPcllVUDdOUVBoaTFKYF4Kekx3UkB0X1FrP2E/UVdsPHc5
MVpjSmJVU2xDI04kP280ZksoKjlrRTFmZDNWfCg1K2QoRnNfJEJocVdebkF7YGBQCmluWVFfRGhY
ZEhhT0tRclJkazUlX0hkSlhXREY+TXlIZXsqJnU3M2RXTCFEZyEKCmxpdGVyYWwgMApIY21WP2Qw
MDAwMQoKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3Jlc291cmNl
cy9xdWFkcmFudHMub2d2IGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVzb3VyY2Vz
L3F1YWRyYW50cy5vZ3YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTNmNTU2OGVlOGJlN2M4Njg4YWY1NzZjZWQwMGE3
MGRjZDM3ZDViYQpHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgMzk2Ngp6Y21idUNje0VpMnxIbG9v
Q09lZlpnSFA3JU1kOERVOEdBRnNzTF5JSDd6fEB5bDZeRm1oKWp8cVltNm1pVWs4bUUKelM8NDVa
R0ZoViNxTkxfS0wrQUpWe3FfQnheWlAhfXgkbnBPYEYhOF4+KWQ8YV9udmQjN3U/PExTWGYjOXMz
JVN7CnpmWjFpfGUqNlFWOTNBTF5fVnFgeHU+eDR3bmRjYUB1KmZoK1NwV3dJMHt8QWJCXkRPKTEh
azUxNXdpO09seSFAKAp6YDZDelV8M2BPWDRvYSNwTWxXRy05JT5pLS1EU0tuJkloVENya2JYVm1X
SVl6NEx2T184QVdAS3BhMzdWdzx9N0MKelM/bjAmRnRhXj4hUEU/SD08RHR0akIhUSMyS3hHWDJn
cW9zPkJTeHQ9b25Ea1gmJiU4VDM9PmlERz1+Kkt7RXhPCnpTcD8rTE9tUDs3MlhZeFJEall9PFRW
Pn4tQHA4e1dYZk8yYVckeSokWnl4M0xpbyMwcmpzbX5LJmdSXjl2KlFrfQp6TUpVfShsI2V+ZTY9
NUttJTI1YzRaZ1dyOztid09SR0orRl82SWk+OTMze1NwbGs7YzdSTVJMWl4lcnIoaEMlMTIKejRv
VVNVRjxLZEJgVFVEX3Z6eH15OGQ9R0khTCMpOyV6PH1xXj5qX2xjPExQR3I4d3NzLXZQQENGYXEq
UkNzaCV5Cnp4RVNOPV81VzY2QD5kYFQxUldseDI/QWotPEN6KFRnfjZhU2ZTQExXRm59UGxnfjVS
UDRoQjFMYF9YPkdMYXFVVAp6KHJkXyFgOU40I1NNfCZZISorRiVYI2g9QiZCI2NYcGVEbzdYZHxH
UW55d0tCODcle2g0bnNfXlJPYlU/PEZ0cCMKeldTVkFTVkdvV21LUT1EWUV9QUJZZFVIQzZqUnRo
S0QqfSVOaj5LdlE5dW03SCs5U2R+OX5fZEVWMmBKNER7ejI9CnpIVUM9eWZ3MSZeaEpZWHg2WnRV
SXpSZj5xX29JSz8ybSg8WENNRzV6QVNoT3JObVEmNTExNnZpcnUpd1YyP0FyYwp6Jnp3MTwzNHw0
JFdIUDJPZnFecXhUVEooI3JUTT1yQCZEQHE4NHRpT0NjV2tseCgtfnwkYlFJSkU5TXZqQlkhfFUK
emE1VU99JFhHeEBLfHpwVGVtQ0YldGlYTjhEaHAkVnRnPip9MHBQSEcyWnlJS0xwVkk2OzFCV3Yw
MDFiYW4+RlNECnphZXUoUkFJN24+MH5saXJ1bWNYaiFNZzdfeGMtMlBDRjB0Wno/O3ttS08zbzZS
VWRhI2hgPnY5e1VkekN6dSZBUwp6UmhKdyZGSiMpQFJnPHklNF92M2VpWlQoO3tqJSRlcTs9TEhz
PWt+cmcjPlQ9OE55SDFDdCRMI0NmQmc1ciRaOVQKenEyOGAta15aYUI3YT9fRjNmd3lnYjVQUGs4
M1I/bHZEJXJoPDBjSk9udHxsTEYmRSM1TW9IXiFMWXN8eTNYJnlLCnpCYTNqO1VlQEk/SCM/fFQk
RldtRCRhWU0pJGsmP3dSeXBIVT1uY3B0e35UO2NefkZRVkRPP0AkXmtsT05mQnEmQAp6e2hhSG9L
I2FzOzNofVk3dD5xa2EkTTs7dUgrdiUycmsqWGFWblIoZk4kX2UrUTRJQ3R0PTZDcWJsMlhFMl8/
PkYKejxobTk4Ujg8RVR7Xi02YEBOTHVBKU96fThhcjRefm1tO0pVKms0b1lMUWw8VEZFNUVYdXNn
YT9pT2VESE5+eU5iCno5SFZBKnd1djcleHRyclo/X1BHUSNHU2xuNkcjQ3Aqc2RZV3F2Z2p9cnJU
eyNXX2pgckswXnRPPmhofWE4QndHbAp6a3ZMTEQ9QW5eQ3VGbmd2PEI3PnNZVmpvR1FCIzF4RXgl
UTc9fSVaUU1Ybzl3V2QmKFFPcTBKcDYjX2duZGg+b3QKelBybEt2WXMydipzOVpifSp8UGI/Vmoq
JWUtbjYtVCQ8Y01rbWlQWW1ecjBZOHhONjA5I2hZdTxsWm97NGwyRVloCno5ZHdWI15yVntwbkB9
Zy02PVo0anZYbiRiT1RNa2o8eWArQCFXUGw9SFJNTUxTYT9CdnUhPytaXk5BbGVYPnBqeAp6NlhT
dUtLV2R7Z0RaaENvTVlzUVdiSGVzcjt6YUxeK3wmLUlBRkYkdm1CSihZQyl4X2JyJStBJmBlJTRm
Wlg7I0EKel9gV1F2UH40cDZONWZzND14SXIxakA+TX4rWndgaShfV0ttNTQlKz4we31EPz1mdzY1
THRiUGo0SSFLTCsqZzBeCnpRTGwlcD09OGcyUGlyaXNtTVV6VWo2NTZQeU5rQ15YK0FlN3l5dFU3
RnJMQyF6a09BfD00ejJkKX1UPEJtXjdDJQp6OUs2UFJlcHxfKShrMWJRVEVZMU1UPm8rQylPRUtr
bUVSJnc1MWpgSjxYeiltZjJuKy1gez9KKT9teHM+MCo+eU4KejErYFokKCladmxwMHgyO3BncShq
fDZSQkQ/Wm5rZjRxQD9NYGZGejN2UVdOfkVUaiVUM2N9ZU9URyFKNzhCQGA4CnptITlLWl5AU3BA
VDg0MTElQ1FnQlhJV19CeVBgVWQ7RSZOSktjcmVhe3t8b3dXVWNTSiV5RiNwSkokdG1oekFoKgp6
MDFlTURZOVVwPig5UkB0aHhSO3dQWDBuRXdPP3A9dnlJPzY2aFF9REB3VHJ9NXBVbEokTl44enIh
P049WDFqJnwKekVNb0lMaUd0QlQ9ZVFqaEt+UlJ6Z2xrSDhRY0Q2K1FOYUBWNCl1bzVKekF1IVdP
Q0B1b2N5UVg4Nz9UdSttdDQ3CnoxU0ttVyhnViZ2TEZ2QHFrWTFje2xvdDVXQmhsWXpxemAkam92
ZD1qPENEUDJFUjEweD53fWI7ST4hI1NNZGArZQp6ZD9HP1o0TFIyJXhAUkViNSVXbTI8KXZwcVRv
SkUkNVlqQ1BmQi0zcEYoZjhiczAzVF8wRnRNV0kkfklXK2coUFMKenNPNGl1eHhLJkZnQT43I2xC
bih9byo1c1AheWg/XmUlTHxsNTY/Y0U8WiFYYkBsd3FgKkhLRyhmOHl2Jmw0MCowCnp5PXdsRG5U
K2UxZjMmVVZeSFV7VGw0X3FETnkhO3o/MTxlU3Rgc2pscnFlJWw8JnVxJmh2PFlJRzxta3t0YVFm
RAp6S3dtdmtfX0B5YmdgKnBQKjh2TVZoWXljJU9jdlJ3ck8kc3RxdT1gfE8+ZzJtMGI8YTFmV0d4
UkhZKFZfSz9DVmwKejdaQlFZRXhaKXwtUCEhaUtQbmNfYFVzYnNmfGVwdCQ1cismSV5ffHxUUzN0
RyNUdU1tMXY4Q0wtVj5+LWhYPzh7CnpVd2h4RChRaGVAZkBeRXFFdXJnelRrX1lzbDdTNm41OFR5
JWxoNHw9I0N8OWJ0cjIoV0wrSHQ/VGF2TTVuRkhGcgp6YkszLTEwTCE8SHZAcitwVElDQyhsR3Ji
fkphZDdIaVdLcD9UOV9PKnRZN1F6MD84Kjw1RENKZCQqMUswVzZxY3kKenRWaVFwUURnWUlSU0wj
fXt2SDNeVz18dnlyQmhoU0olTmtMPmJhNEUrKGJIPW5wO2p7VURqVFdqVmMjNHozT0R1CnpWQlhr
VzlzQkYra3ReZWVIOV5oVHE/Y2gyNSQwZlhPTj0lKXBrUE44MmklK3E/bzxDRl57d35namYjc2JK
ZXIrYgp6ZCpxVVEmb3pLZHw3KjkmU044PHZSPWV4ZSF9V2dwSDRpX2hZTDtOQGlDfUpaTlokaGp8
S0FuV2Q1dyk/PnJvPGQKemVnPTdHNkF8KVU3b3pIRllkKmw1Yy1YSz1vZ3B6e14/UGRednMpYE1q
QTxKQV9qQ3YzSiZzJko/K1RHakZQeTRHCnplWW5DVXE/ZGBPantqT2tTZkVgXjAlIzRTcXR9e1Zp
RG0hUGUmeGI+P1deVUp2RGokbE4pIXptZ2FKRnxffV44ZAp6MUBjfnJ0fTJ6Vy1HWmhHWiZaPTVP
TVc7N2J1I304cXVKMHJwSk1hQWI8WW1FdyYqfU1sdUlUT2JBMyRxK1R9UnAKenU7YFBSKz42Ml5X
RiU0P1QyPzktKGJUNHVVRStWY3tzczRtJF55MjVfaTJsMyhZTn5gWisxIVBvcCVIPkxqKTtGCnot
RS14PSokdCFKWmtPbzNwdGZ0VjxNZmFoY3cjSn5ON2N+e09MN3cqZisoR25mJCkkbFZMN2VLdmFB
cD4oZE5IKwp6T0hmZz5TbkM+MFVaMjx5P2VsMy1jeXRRIyhyaEk0TkBBdWh3dyNgRHNqazBlTyNJ
cz9WSmM5LXB4eT89SHlFWCQKekF1cjUkZVViaHpUNnVQTzxqa1Q1Q0J1KCYrTTRzI0djVTJHYHpP
aGM8P0IjNHA+biRCMSEtX0wtVlZsSi0xZ2xWCnpvRFdvRnljRV9hKFlKU2VxPDFKdSlaYWtAVjhG
ZG8rS2k4Y2NRdEVeP3E2R2Zua3lwdW9zZ01XSjhxQHM2Vj5GKwp6a0dURGRVbDFSOXpvZWBiYG15
YDhQc1NjekJyY1ErQnQreFI5bWN0KmQjfGlvZTs8ZVpeZV5uUlFWQ05nZnhsKikKejdpNV9VSlVU
TlpgKndVZmApZ0kmX0I8cj1wMkcmaHtgUmJWZi1IYyVxfWkyZ19VdmkxX1V1KlpGTVgtTVI0ZUM1
CnpXdWtDZ1VNV0NtLVRJOS03VHBLZEpPOG5kKCQ9d2Nee3U0ekR6OGdJdkhGJEgkSCooM0llNjtm
cWJWaHI/MXRKOAp6TXgwVHlPWjx6QWVGKVZHWF8kQj0lQH04WEV0N0dSN1RHVE5jWkhYU2s7dU9C
SHtaY0QxPyg+d2xmY01LanFIMFcKejFLUVppUVBZeHd5RHd3NXd0e0UjT2pfbGxlTkd1MmJBRkBj
Q1o2TEoqbHhqUkI2N2p1cUdiX1ZtPXNfR3k8PVBGCnpScm82Zj1icVd0aVlxTEFETnJjU1o4bGNq
bVRrSXQoYGM5Q0c8REh7RzF1X2QjJFdjdGYzdGV+ZG13aD5LVSltdQp6OSpEV0VMUldtb3UraXk5
alIzcjkhPj5ZSEhYbmZUYGh5e2xQQio0TUhKVj59elNBKGAzej5GcWRZTl5+JDhxT00Kekp0OGdL
XzRyNVpiRV9wP3lpWWpeRyZXMTJzdGpEcl9HTmgtamIhfTQxJnN7alN4SlhQT3QqbUdUWiY2Wnlt
VjRpCno8SiU9QUMzI3xNVXhfV2Y4eVQ1LTQ5V01ZZmkpSFM8QCtNK3R4Qmh0bW5rM0ptdmg2dWhT
cjtTI3lUZSp2Z2lIbwp6UyY4V2s3ZDJBOD4yKD1sJCY9VUY+NlJOdEA2NjtWV2dgQGVhKis3bkhQ
amNNX1dJMEo1Ykw4eVgoTW08Xj0lfXkKekVsfUx1WTNySj1CKEpfZXFfayV5QHgxP1pGVW5YPDgy
bns5P2xkT2N2Nkt0Sj9tayNmU18hRit0bFA4KjxMez1GCnpuJSQzUGx7SjxGdCpOVEJBcG9TdXhA
VSlhRiFtZjxLQ2RtKlRFXj11NEsoPVRhdyNjYD4kaGBuZjRJM2JaWWBFcgp6S0g9ZChQX1IwPVNg
S3REc2xYJDdZRT9gVGNna2Y8aUxTfm84NjlTdF4xMzRXVlRHRmJvZmlnRk52JnNhVm19PT0KelRL
TiVKSmF5U348S0I/QnhBKVJkJnFNYjwhM2xYX2AqTEwlWWYyNUFBZTM+VXtMYSpMeUxlVWRJN2Yp
dFB7QjdXCnpIdXZaMTxtOGwxYVp5MiUlRnIrTSV3dUw+OFctSEE2Ym5mN1gjNElHan5paWpKbFEz
OGptei1YJTVFNTwjdWluWQp6QEJvS2FfNEhIfUI3NnVKdz01fHN8N0omYWAyNSpVRjtuQHlScExQ
QSpAdGhUcTt8d3xOQk1ZZyEyTXcoMzAmJj8KVylnU015NX1vZmB4SWV2c1U5JC1sY0tSMzNsdUY2
fgoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC12aWRlby1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1p
bWFnZS0yZC13aXRoLXZpZGVvLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YmMwOGFjYzIzOTk2
Zjg1ZTdlMDEwNDRhZGQzMDcwZDE3ZjI5ZjA0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC12aWRl
by1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzOSBAQAorIAorVmVyaWZ5IHRleEltYWdlMkQgYW5k
IHRleFN1YkltYWdlMkQgY29kZSBwYXRocyB0YWtpbmcgVmlkZW9zCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGggZmxpcFk9ZmFsc2UKK1BBU1Mg
cGl4ZWxBdCgwLCAwKSBpcyByZWQKK1BBU1MgcGl4ZWxBdChidWZXaWR0aC0xLCAwKSBpcyBncmVl
bgorUEFTUyBwaXhlbEF0KDAsIGJ1ZkhlaWdodC0xKSBpcyB5ZWxsb3cKK1BBU1MgcGl4ZWxBdChi
dWZXaWR0aC0xLCBidWZIZWlnaHQtMSkgaXMgYmx1ZQorVGVzdGluZyB0ZXhJbWFnZTJEIHdpdGgg
ZmxpcFk9dHJ1ZQorUEFTUyBwaXhlbEF0KDAsIDApIGlzIHllbGxvdworUEFTUyBwaXhlbEF0KGJ1
ZldpZHRoLTEsIDApIGlzIGJsdWUKK1BBU1MgcGl4ZWxBdCgwLCBidWZIZWlnaHQtMSkgaXMgcmVk
CitQQVNTIHBpeGVsQXQoYnVmV2lkdGgtMSwgYnVmSGVpZ2h0LTEpIGlzIGdyZWVuCitUZXN0aW5n
IFRleFN1YkltYWdlMkQgd2l0aCBmbGlwWT1mYWxzZSwgc2NhbGU9Miwgb3g9MCwgb3k9MAorUEFT
UyBwaXhlbEF0KDAsIDApIGlzIHJlZAorUEFTUyBwaXhlbEF0KGJ1ZldpZHRoLTEsIDApIGlzIGJs
YWNrCitQQVNTIHBpeGVsQXQoMCwgYnVmSGVpZ2h0LTEpIGlzIGJsYWNrCitQQVNTIHBpeGVsQXQo
YnVmV2lkdGgtMSwgYnVmSGVpZ2h0LTEpIGlzIGJsYWNrCitUZXN0aW5nIFRleFN1YkltYWdlMkQg
d2l0aCBmbGlwWT10cnVlLCBzY2FsZT0yLCBveD0wLCBveT0wCitQQVNTIHBpeGVsQXQoMCwgMCkg
aXMgeWVsbG93CitQQVNTIHBpeGVsQXQoYnVmV2lkdGgtMSwgMCkgaXMgYmxhY2sKK1BBU1MgcGl4
ZWxBdCgwLCBidWZIZWlnaHQtMSkgaXMgYmxhY2sKK1BBU1MgcGl4ZWxBdChidWZXaWR0aC0xLCBi
dWZIZWlnaHQtMSkgaXMgYmxhY2sKK1Rlc3RpbmcgVGV4U3ViSW1hZ2UyRCB3aXRoIGZsaXBZPWZh
bHNlLCBzY2FsZT0yLCBveD0wLjUsIG95PTAuNQorUEFTUyBwaXhlbEF0KDAsIDApIGlzIGJsYWNr
CitQQVNTIHBpeGVsQXQoYnVmV2lkdGgtMSwgMCkgaXMgYmxhY2sKK1BBU1MgcGl4ZWxBdCgwLCBi
dWZIZWlnaHQtMSkgaXMgYmxhY2sKK1BBU1MgcGl4ZWxBdChidWZXaWR0aC0xLCBidWZIZWlnaHQt
MSkgaXMgYmx1ZQorVGVzdGluZyBUZXhTdWJJbWFnZTJEIHdpdGggZmxpcFk9dHJ1ZSwgc2NhbGU9
Miwgb3g9MC41LCBveT0wLjUKK1BBU1MgcGl4ZWxBdCgwLCAwKSBpcyBibGFjaworUEFTUyBwaXhl
bEF0KGJ1ZldpZHRoLTEsIDApIGlzIGJsYWNrCitQQVNTIHBpeGVsQXQoMCwgYnVmSGVpZ2h0LTEp
IGlzIGJsYWNrCitQQVNTIHBpeGVsQXQoYnVmV2lkdGgtMSwgYnVmSGVpZ2h0LTEpIGlzIGdyZWVu
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvdGV4LWltYWdlLWFuZC1zdWIt
aW1hZ2UtMmQtd2l0aC12aWRlby5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
dGV4LWltYWdlLWFuZC1zdWItaW1hZ2UtMmQtd2l0aC12aWRlby5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFl
YWU1ZDQwNDJiZGY3NzdlZDMzMjk2NzFjYTdjMTQwZGZhN2NhOWEKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC90ZXgtaW1hZ2UtYW5kLXN1Yi1pbWFnZS0y
ZC13aXRoLXZpZGVvLmh0bWwKQEAgLTAsMCArMSwxNTQgQEAKKzxodG1sPgorPGhlYWQ+Cis8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJnbC10ZXN0LXV0aWxzLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSIuLi8uLi8uLi9tZWRpYS9tZWRpYS1maWxlLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQ+Cit2YXIgd3R1ID0gV2ViR0xUZXN0VXRpbHM7Cit2YXIgZ2wgPSBudWxsOwordmFyIHRl
eHR1cmVMb2MgPSBudWxsOwordmFyIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IGZhbHNlOworCitmdW5j
dGlvbiBpbml0KCkKK3sKKyAgICBpZiAod2luZG93LmluaXROb25LaHJvbm9zRnJhbWV3b3JrKSB7
CisgICAgICAgIHdpbmRvdy5pbml0Tm9uS2hyb25vc0ZyYW1ld29yayh0cnVlKTsKKyAgICB9CisK
KyAgICBkZXNjcmlwdGlvbignVmVyaWZ5IHRleEltYWdlMkQgYW5kIHRleFN1YkltYWdlMkQgY29k
ZSBwYXRocyB0YWtpbmcgVmlkZW9zJyk7CisKKyAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoImV4YW1wbGUiKTsKKyAgICBnbCA9IHd0dS5jcmVhdGUzRENvbnRleHQoY2Fu
dmFzKTsKKyAgICB2YXIgcHJvZ3JhbSA9IHd0dS5zZXR1cFRleHR1cmVkUXVhZChnbCk7CisKKyAg
ICBnbC5jbGVhckNvbG9yKDAsMCwwLDEpOworICAgIGdsLmNsZWFyRGVwdGgoMSk7CisKKyAgICB0
ZXh0dXJlTG9jID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKGdsLnByb2dyYW0sICJ0ZXgiKTsKKwor
ICAgIHZhciBtZWRpYUZpbGUgPSBmaW5kTWVkaWFGaWxlKCJ2aWRlbyIsICJyZXNvdXJjZXMvcXVh
ZHJhbnRzIik7CisgICAgbG9hZFZpZGVvKG1lZGlhRmlsZSk7Cit9CisKK2Z1bmN0aW9uIGxvYWRW
aWRlbyhzcmMpIHsKKyAgICB2YXIgdmlkZW8gPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFt
ZSgndmlkZW8nKVswXTsKKworICAgIGZ1bmN0aW9uIHN0YXJ0VmlkZW8oKSB7CisgICAgICAgIC8v
IFJlc2l6ZSBjYW52YXMgdG8gZml0IHZpZGVvLgorICAgICAgICB2YXIgY2FudmFzID0gZG9jdW1l
bnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NhbnZhcycpWzBdOworICAgICAgICBjYW52YXMud2lk
dGggPSB2aWRlby52aWRlb1dpZHRoOworICAgICAgICBjYW52YXMuaGVpZ2h0ID0gdmlkZW8udmlk
ZW9IZWlnaHQ7CisKKyAgICAgICAgcnVuVGVzdCh2aWRlbyk7CisgICAgfTsKKyAgICB2aWRlby5h
ZGRFdmVudExpc3RlbmVyKCJjYW5wbGF5Iiwgc3RhcnRWaWRlbyk7CisgICAgdmlkZW8uc3JjID0g
c3JjOworfQorCisvLyBUaGVzZSBkZWNsYXJhdGlvbnMgbmVlZCB0byBiZSBnbG9iYWwgZm9yICJz
aG91bGRCZSIgdG8gc2VlIHRoZW0KK3ZhciBidWYgPSBudWxsOwordmFyIGJ1ZldpZHRoOwordmFy
IGJ1ZkhlaWdodDsKK3ZhciByZWQgPSBbMjU1LCAwLCAwLCAyNTVdOwordmFyIGdyZWVuID0gWzAs
IDI1NSwgMCwgMjU1XTsKK3ZhciBibHVlID0gWzAsIDAsIDI1NSwgMjU1XTsKK3ZhciB5ZWxsb3cg
PSBbMjU1LCAyNTUsIDAsIDI1NV07Cit2YXIgYmxhY2sgPSBbMCwgMCwgMCwgMjU1XTsKK3ZhciBj
bGVhciA9IFsxMjcsIDEyNywgMTI3LCAyNTVdOworZnVuY3Rpb24gcGl4ZWxBdCh4LCB5KSB7Cisg
ICAgdmFyIGluZGV4ID0geSAqIGJ1ZldpZHRoICogNCArIHggKiA0OworICAgIHJldHVybiBbYnVm
W2luZGV4XSwgYnVmW2luZGV4KzFdLCBidWZbaW5kZXgrMl0sIGJ1ZltpbmRleCszXV07Cit9CisK
K2Z1bmN0aW9uIHJ1bk9uZUl0ZXJhdGlvbih2aWRlbywgZmxpcFksIHVzZVRleFN1YkltYWdlMkQs
IHVsQ29sb3IsIHVyQ29sb3IsIGJsQ29sb3IsIGJyQ29sb3IsIG94LCBveSwgc2NhbGUpIHsKKyAg
ICB2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2NhbnZhcycpWzBd
OworICAgIGdsLnZpZXdwb3J0KDAsIDAsIGNhbnZhcy53aWR0aCwgY2FudmFzLmhlaWdodCk7CisK
KyAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJVCk7
CisgICAgLy8gRGlzYWJsZSBhbnkgd3JpdGVzIHRvIHRoZSBhbHBoYSBjaGFubmVsCisgICAgZ2wu
Y29sb3JNYXNrKDEsIDEsIDEsIDApOworCisgICAgdmFyIHRleHR1cmUgPSBnbC5jcmVhdGVUZXh0
dXJlKCk7CisgICAgLy8gQmluZCB0aGUgdGV4dHVyZSB0byB0ZXh0dXJlIHVuaXQgMAorICAgIGds
LmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpOworICAgIC8vIFNldCB1cCB0ZXh0
dXJlIHBhcmFtZXRlcnMKKyAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRF
WFRVUkVfTUlOX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7CisgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5U
RVhUVVJFXzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGdsLk5FQVJFU1QpOworICAgIC8vIFNl
dCB1cCBwaXhlbCBzdG9yZSBwYXJhbWV0ZXJzCisgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuVU5QQUNL
X0ZMSVBfWV9XRUJHTCwgZmxpcFkpOworICAgIGdsLnBpeGVsU3RvcmVpKGdsLlVOUEFDS19QUkVN
VUxUSVBMWV9BTFBIQV9XRUJHTCwgZmFsc2UpOworICAgIC8vIFVwbG9hZCB0aGUgaW1hZ2UgaW50
byB0aGUgdGV4dHVyZQorICAgIGlmICh1c2VUZXhTdWJJbWFnZTJEKSB7CisgICAgICAgIC8vIEZp
bGwgaW5pdGlhbCB0ZXh0dXJlIHdpdGggYmxhY2suCisgICAgICAgIHZhciB0ZXhXaWR0aCA9IHNj
YWxlICogY2FudmFzLndpZHRoOworICAgICAgICB2YXIgdGV4SGVpZ2h0ID0gc2NhbGUgKiBjYW52
YXMuaGVpZ2h0OworICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJH
QkEsIHRleFdpZHRoLCB0ZXhIZWlnaHQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgZ2wuUkdC
QSwgZ2wuVU5TSUdORURfQllURSwgbnVsbCk7CisKKyAgICAgICAgZ2wudGV4U3ViSW1hZ2UyRChn
bC5URVhUVVJFXzJELCAwLCBveCAqIHRleFdpZHRoLCBveSAqIHRleEhlaWdodCwgZ2wuUkdCQSwg
Z2wuVU5TSUdORURfQllURSwgdmlkZW8pOworICAgICAgICBkZWJ1ZygnVGVzdGluZyBUZXhTdWJJ
bWFnZTJEIHdpdGggZmxpcFk9JyArIGZsaXBZICsnLCBzY2FsZT0nICsgc2NhbGUgKyAnLCBveD0n
ICsgb3ggKyAnLCBveT0nICsgb3kpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRlYnVnKCdUZXN0
aW5nIHRleEltYWdlMkQgd2l0aCBmbGlwWT0nICsgZmxpcFkpOworICAgICAgICBnbC50ZXhJbWFn
ZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUs
IHZpZGVvKTsKKyAgICB9CisKKyAgICAvLyBQb2ludCB0aGUgdW5pZm9ybSBzYW1wbGVyIHRvIHRl
eHR1cmUgdW5pdCAwCisgICAgZ2wudW5pZm9ybTFpKHRleHR1cmVMb2MsIDApOworICAgIC8vIERy
YXcgdGhlIHRyaWFuZ2xlcworICAgIHd0dS5kcmF3UXVhZChnbCwgY2xlYXIpOworICAgIC8vIFJl
YWQgYmFjayB0aGUgcmVuZGVyaW5nIHJlc3VsdHMKKyAgICBidWZXaWR0aCA9IGNhbnZhcy53aWR0
aDsKKyAgICBidWZIZWlnaHQgPSBjYW52YXMuaGVpZ2h0OworICAgIGJ1ZiA9IG5ldyBVaW50OEFy
cmF5KGJ1ZldpZHRoICogYnVmSGVpZ2h0ICogNCk7CisgICAgZ2wucmVhZFBpeGVscygwLCAwLCBi
dWZXaWR0aCwgYnVmSGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBidWYpOworCisg
ICAgc2hvdWxkQmUoInBpeGVsQXQoMCwgMCkiLCB1bENvbG9yKTsKKyAgICBzaG91bGRCZSgicGl4
ZWxBdChidWZXaWR0aC0xLCAwKSIsIHVyQ29sb3IpOworICAgIHNob3VsZEJlKCJwaXhlbEF0KDAs
IGJ1ZkhlaWdodC0xKSIsIGJsQ29sb3IpOworICAgIHNob3VsZEJlKCJwaXhlbEF0KGJ1ZldpZHRo
LTEsIGJ1ZkhlaWdodC0xKSIsIGJyQ29sb3IpOworfQorCitmdW5jdGlvbiBydW5UZXN0KHZpZGVv
KQoreworICAgIC8vIE9yaWdpbmFsIHNxdWFyZSBzaG91bGQgaGF2ZSByZWQsIGdyZWVuLCB5ZWxs
b3csIGJsdWUgcXVhZHJhbnRzLAorICAgIC8vIHdpdGggYSBjcm9zcyBpbiB0aGUgbWlkZGxlOgor
ICAgIC8vCisgICAgLy8gUnxHCisgICAgLy8gLSstCisgICAgLy8gWXxCCisKKyAgICAvLyB0ZXhJ
bWFnZTJEIHRoZSB3aG9sZSB0ZXh0dXJlCisgICAgcnVuT25lSXRlcmF0aW9uKHZpZGVvLCBmYWxz
ZSwgZmFsc2UsICJyZWQiLCAiZ3JlZW4iLCAieWVsbG93IiwgImJsdWUiKTsKKyAgICBydW5PbmVJ
dGVyYXRpb24odmlkZW8sIHRydWUsIGZhbHNlLCAieWVsbG93IiwgImJsdWUiLCAicmVkIiwgImdy
ZWVuIik7CisKKyAgICAvLyB0ZXhTdWJJbWFnZTJEIHVwcGVyIGxlZnQKKyAgICBydW5PbmVJdGVy
YXRpb24odmlkZW8sIGZhbHNlLCB0cnVlLCAicmVkIiwgImJsYWNrIiwgImJsYWNrIiwgImJsYWNr
IiwgMCwgMCwgMik7CisgICAgcnVuT25lSXRlcmF0aW9uKHZpZGVvLCB0cnVlLCB0cnVlLCAieWVs
bG93IiwgImJsYWNrIiwgImJsYWNrIiwgImJsYWNrIiwgMCwgMCwgMik7CisKKyAgICAvLyB0ZXhT
dWJJbWFnZTJEIGxvd2VyIHJpZ2h0CisgICAgcnVuT25lSXRlcmF0aW9uKHZpZGVvLCBmYWxzZSwg
dHJ1ZSwgImJsYWNrIiwgImJsYWNrIiwgImJsYWNrIiwgImJsdWUiLCAwLjUsIDAuNSwgMik7Cisg
ICAgcnVuT25lSXRlcmF0aW9uKHZpZGVvLCB0cnVlLCB0cnVlLCAiYmxhY2siLCAiYmxhY2siLCAi
YmxhY2siLCAiZ3JlZW4iLCAwLjUsIDAuNSwgMik7CisKKyAgICBzdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOworICAgIHZhciBlcGlsb2d1ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlw
dCIpOworICAgIGVwaWxvZ3VlLm9ubG9hZCA9IGZpbmlzaDsKKyAgICBlcGlsb2d1ZS5zcmMgPSAi
Li4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI7CisgICAgZG9jdW1lbnQuYm9keS5h
cHBlbmRDaGlsZChlcGlsb2d1ZSk7Cit9CisKK2Z1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICBpZiAo
d2luZG93Lm5vbktocm9ub3NGcmFtZXdvcmtOb3RpZnlEb25lKSB7CisgICAgICAgIHdpbmRvdy5u
b25LaHJvbm9zRnJhbWV3b3JrTm90aWZ5RG9uZSgpOworICAgIH0KK30KKzwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHkgb25sb2FkPSJpbml0KCkiPgorPHZpZGVvIGlkPSJzb3VyY2V2aWRlbyI+PC92
aWRlbz4KKzxjYW52YXMgaWQ9ImV4YW1wbGUiPjwvY2FudmFzPgorPGRpdiBpZD0iZGVzY3JpcHRp
b24iPjwvZGl2PgorPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDIx
YTI1OTg4OWZhYjg0MjM1MjVmNzBjNThkNmMzZDU4NWM0MTE1MWYuLmQzM2I0ZjBhNDZlZGM1MzM5
MzI1NDlkOTc5MmM4MTViZjFhZjNkMTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisr
KyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTAtMDgtMTkgIEFkcmll
bm5lIFdhbGtlciAgPGVubmVAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1lbnQgSFRNTFZpZGVvRWxlbWVudCBzdXBwb3J0
IGZvciB0ZXhJbWFnZTJEIGFuZCB0ZXhTdWJJbWFnZTJECisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzg1MgorCisgICAgICAgIFRlc3Q6IGZhc3QvY2Fu
dmFzL3dlYmdsL3RleC1pbWFnZS1hbmQtc3ViLWltYWdlLTJkLXdpdGgtdmlkZW8uaHRtbAorCisg
ICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlkZW9GcmFtZVRvSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJE
KToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2Uy
RCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OkxSVUltYWdlQnVm
ZmVyQ2FjaGU6OkxSVUltYWdlQnVmZmVyQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjppbWFnZUJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OkxSVUltYWdlQnVmZmVyQ2FjaGU6
OmJ1YmJsZVRvRnJvbnQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5oOgorCiAyMDEwLTA4LTE4ICBNYWhlc2ggS3Vsa2FybmkgIDxtYWhlc2gua3Vsa2FybmlA
bm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEJsb2NrLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwIGIvV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDQ0NjU4MzM5MzQ3
ZGJkMzliNGE2YzZhODM2ZDU5OWI5ODlkYmVmMjQuLjI3MzM5NTMyNzEzZGEzNDEzNmQxZDRmZWZm
ZGEyNzQ3MTE5YWU2NzkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNp
bmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJIVE1MVmlkZW9FbGVtZW50LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgpA
QCAtOTgsNiArOTksNyBAQCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dChIVE1MQ2FudmFzRWxlbWVudCogcGFzc2VkQ2FudmFzLCBQYQogICAgICwgbV9uZWVkc1Vw
ZGF0ZSh0cnVlKQogICAgICwgbV9tYXJrZWRDYW52YXNEaXJ0eShmYWxzZSkKICAgICAsIG1fYWN0
aXZlVGV4dHVyZVVuaXQoMCkKKyAgICAsIG1fdmlkZW9DYWNoZSg0KQogICAgICwgbV9wYWNrQWxp
Z25tZW50KDQpCiAgICAgLCBtX3VucGFja0FsaWdubWVudCg0KQogICAgICwgbV91bnBhY2tGbGlw
WShmYWxzZSkKQEAgLTIxODgsMTkgKzIxOTAsMzIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQK
ICAgICAgICAgICAgICAgICAgICBtX3VucGFja0ZsaXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxw
aGEsIGVjKTsKIH0KIAorUGFzc1JlZlB0cjxJbWFnZT4gV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp2
aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9FbGVtZW50KiB2aWRlbykKK3sKKyAgICBpZiAoIXZp
ZGVvIHx8ICF2aWRlby0+dmlkZW9XaWR0aCgpIHx8ICF2aWRlby0+dmlkZW9IZWlnaHQoKSkgewor
ICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4dDNEOjpJ
TlZBTElEX1ZBTFVFKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEludFNpemUgc2l6
ZSh2aWRlby0+dmlkZW9XaWR0aCgpLCB2aWRlby0+dmlkZW9IZWlnaHQoKSk7CisgICAgSW1hZ2VC
dWZmZXIqIGJ1ZiA9IG1fdmlkZW9DYWNoZS5pbWFnZUJ1ZmZlcihzaXplKTsKKyAgICBpZiAoIWJ1
ZikgeworICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9yKEdyYXBoaWNzQ29udGV4
dDNEOjpPVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIEludFJl
Y3QgZGVzdFJlY3QoMCwgMCwgc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKKyAgICAvLyBG
SVhNRTogVHVybiB0aGlzIGludG8gYSBHUFUtR1BVIHRleHR1cmUgY29weSBpbnN0ZWFkIG9mIENQ
VSByZWFkYmFjay4KKyAgICB2aWRlby0+cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoYnVmLT5j
b250ZXh0KCksIGRlc3RSZWN0KTsKKyAgICByZXR1cm4gYnVmLT5jb3B5SW1hZ2UoKTsKK30KKwog
dm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnRleEltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1
bnNpZ25lZCBsZXZlbCwgdW5zaWduZWQgaW50ZXJuYWxmb3JtYXQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEhU
TUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICAvLyBGSVhN
RTogTmVlZCB0byBpbXBsZW1lbnQgdGhpcyBjYWxsCi0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7
Ci0gICAgVU5VU0VEX1BBUkFNKGxldmVsKTsKLSAgICBVTlVTRURfUEFSQU0oaW50ZXJuYWxmb3Jt
YXQpOwotICAgIFVOVVNFRF9QQVJBTShmb3JtYXQpOwotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsK
LSAgICBVTlVTRURfUEFSQU0odmlkZW8pOwotCiAgICAgZWMgPSAwOwotICAgIGNsZWFudXBBZnRl
ckdyYXBoaWNzQ2FsbChmYWxzZSk7CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IHZpZGVvRnJh
bWVUb0ltYWdlKHZpZGVvKTsKKyAgICBpZiAoIXZpZGVvKQorICAgICAgICByZXR1cm47CisgICAg
dGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwgdHlw
ZSwgaW1hZ2UuZ2V0KCksIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwg
ZWMpOwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4UGFyYW1ldGVyKHVuc2ln
bmVkIGxvbmcgdGFyZ2V0LCB1bnNpZ25lZCBsb25nIHBuYW1lLCBmbG9hdCBwYXJhbWYsIGludCBw
YXJhbWksIGJvb2wgaXNGbG9hdCkKQEAgLTIzNDIsMTYgKzIzNTcsMTEgQEAgdm9pZCBXZWJHTFJl
bmRlcmluZ0NvbnRleHQ6OnRleFN1YkltYWdlMkQodW5zaWduZWQgdGFyZ2V0LCB1bnNpZ25lZCBs
ZXZlbCwgdW5zaWcKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTJEKHVu
c2lnbmVkIHRhcmdldCwgdW5zaWduZWQgbGV2ZWwsIHVuc2lnbmVkIHhvZmZzZXQsIHVuc2lnbmVk
IHlvZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp
Z25lZCBmb3JtYXQsIHVuc2lnbmVkIHR5cGUsIEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKLSAgICAvLyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQgdGhpcyBj
YWxsCi0gICAgVU5VU0VEX1BBUkFNKHRhcmdldCk7Ci0gICAgVU5VU0VEX1BBUkFNKGxldmVsKTsK
LSAgICBVTlVTRURfUEFSQU0oeG9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKHlvZmZzZXQpOwot
ICAgIFVOVVNFRF9QQVJBTShmb3JtYXQpOwotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKLSAgICBV
TlVTRURfUEFSQU0odmlkZW8pOwogICAgIGVjID0gMDsKLSAgICBjbGVhbnVwQWZ0ZXJHcmFwaGlj
c0NhbGwoZmFsc2UpOworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFn
ZSh2aWRlbyk7CisgICAgaWYgKCF2aWRlbykKKyAgICAgICAgcmV0dXJuOworICAgIHRleFN1Yklt
YWdlMkRJbXBsKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZzZXQsIGZvcm1hdCwgdHlwZSwg
aW1hZ2UuZ2V0KCksIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMp
OwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dW5pZm9ybTFmKGNvbnN0IFdlYkdM
VW5pZm9ybUxvY2F0aW9uKiBsb2NhdGlvbiwgZmxvYXQgeCwgRXhjZXB0aW9uQ29kZSYgZWMpCkBA
IC0zNTY0LDYgKzM1NzQsNDIgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnJlc3RvcmVT
dGF0ZXNBZnRlclZlcnRleEF0dHJpYjBTaW11bGF0aW9uKCkKICAgICBtX2NvbnRleHQtPmJpbmRC
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgb2JqZWN0T3JaZXJvKG1fYm91
bmRBcnJheUJ1ZmZlci5nZXQoKSkpOwogfQogCitXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OkxSVUlt
YWdlQnVmZmVyQ2FjaGU6OkxSVUltYWdlQnVmZmVyQ2FjaGUoaW50IGNhcGFjaXR5KQorICAgIDog
bV9idWZmZXJzKG5ldyBPd25QdHI8SW1hZ2VCdWZmZXI+W2NhcGFjaXR5XSkKKyAgICAsIG1fY2Fw
YWNpdHkoY2FwYWNpdHkpCit7Cit9CisKK0ltYWdlQnVmZmVyKiBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKGNvbnN0IEludFNpemUmIHNpemUp
Cit7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IG1fY2FwYWNpdHk7ICsraSkgewor
ICAgICAgICBJbWFnZUJ1ZmZlciogYnVmID0gbV9idWZmZXJzW2ldLmdldCgpOworICAgICAgICBp
ZiAoIWJ1ZikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoYnVmLT5zaXplKCkgIT0g
c2l6ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBidWJibGVUb0Zyb250KGkpOwor
ICAgICAgICByZXR1cm4gYnVmOworICAgIH0KKworICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4gdGVt
cCA9IEltYWdlQnVmZmVyOjpjcmVhdGUoc2l6ZSk7CisgICAgaWYgKCF0ZW1wKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICBpID0gc3RkOjptaW4obV9jYXBhY2l0eSAtIDEsIGkpOworICAgIG1fYnVm
ZmVyc1tpXSA9IHRlbXAucmVsZWFzZSgpOworCisgICAgSW1hZ2VCdWZmZXIqIGJ1ZiA9IG1fYnVm
ZmVyc1tpXS5nZXQoKTsKKyAgICBidWJibGVUb0Zyb250KGkpOworICAgIHJldHVybiBidWY7Cit9
CisKK3ZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpMUlVJbWFnZUJ1ZmZlckNhY2hlOjpidWJi
bGVUb0Zyb250KGludCBpZHgpCit7CisgICAgZm9yIChpbnQgaSA9IGlkeDsgaSA+IDA7IC0taSkK
KyAgICAgICAgbV9idWZmZXJzW2ldLnN3YXAobV9idWZmZXJzW2ktMV0pOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFTkFCTEUoM0RfQ0FOVkFTKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaCBiL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggNDhmYTdjODU2MjA0MGM2
MWQyNDRiZDI4OTQ4OWNjMmRlZDYwNjIxMS4uZjM5YjM3MzBlOWQ1OTc0M2UyNzM1NGI4OTM0ZjFm
OGMzOGY2NTBiMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaAorKysgYi9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5oCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSAiVWludDhBcnJheS5oIgogI2luY2x1ZGUg
IldlYkdMR2V0SW5mby5oIgogCisjaW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CisKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgV2ViR0xBY3RpdmVJbmZvOwpAQCAtNDksNiArNTEsNyBA
QCBjbGFzcyBXZWJHTFRleHR1cmU7CiBjbGFzcyBXZWJHTFVuaWZvcm1Mb2NhdGlvbjsKIGNsYXNz
IEhUTUxJbWFnZUVsZW1lbnQ7CiBjbGFzcyBIVE1MVmlkZW9FbGVtZW50OworY2xhc3MgSW1hZ2VC
dWZmZXI7CiBjbGFzcyBJbWFnZURhdGE7CiBjbGFzcyBXZWJLaXRDU1NNYXRyaXg7CiAKQEAgLTMy
MCw2ICszMjMsOCBAQCBwdWJsaWM6CiAKICAgICBib29sIHZhbGlkYXRlV2ViR0xPYmplY3QoV2Vi
R0xPYmplY3QqIG9iamVjdCk7CiAKKyAgICBQYXNzUmVmUHRyPEltYWdlPiB2aWRlb0ZyYW1lVG9J
bWFnZShIVE1MVmlkZW9FbGVtZW50KiB2aWRlbyk7CisKICAgICBPd25QdHI8R3JhcGhpY3NDb250
ZXh0M0Q+IG1fY29udGV4dDsKICAgICBib29sIG1fbmVlZHNVcGRhdGU7CiAgICAgYm9vbCBtX21h
cmtlZENhbnZhc0RpcnR5OwpAQCAtMzg3LDYgKzM5MiwxOSBAQCBwdWJsaWM6CiAgICAgUmVmUHRy
PFdlYkdMVGV4dHVyZT4gbV9ibGFja1RleHR1cmUyRDsKICAgICBSZWZQdHI8V2ViR0xUZXh0dXJl
PiBtX2JsYWNrVGV4dHVyZUN1YmVNYXA7CiAKKyAgICAvLyBGaXhlZC1zaXplIGNhY2hlIG9mIHJl
dXNhYmxlIGltYWdlIGJ1ZmZlcnMgZm9yIHZpZGVvIHRleEltYWdlMkQgY2FsbHMuCisgICAgY2xh
c3MgTFJVSW1hZ2VCdWZmZXJDYWNoZSB7CisgICAgcHVibGljOgorICAgICAgICBMUlVJbWFnZUJ1
ZmZlckNhY2hlKGludCBjYXBhY2l0eSk7CisgICAgICAgIC8vIFRoZSBwb2ludGVyIHJldHVybmVk
IGlzIG93bmVkIGJ5IHRoZSBpbWFnZSBidWZmZXIgbWFwLgorICAgICAgICBJbWFnZUJ1ZmZlciog
aW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYgc2l6ZSk7CisgICAgcHJpdmF0ZToKKyAgICAgICAg
dm9pZCBidWJibGVUb0Zyb250KGludCBpZHgpOworICAgICAgICBPd25BcnJheVB0cjxPd25QdHI8
SW1hZ2VCdWZmZXI+ID4gbV9idWZmZXJzOworICAgICAgICBpbnQgbV9jYXBhY2l0eTsKKyAgICB9
OworICAgIExSVUltYWdlQnVmZmVyQ2FjaGUgbV92aWRlb0NhY2hlOworCiAgICAgaW50IG1fbWF4
VGV4dHVyZVNpemU7CiAgICAgaW50IG1fbWF4Q3ViZU1hcFRleHR1cmVTaXplOwogICAgIGludCBt
X21heFRleHR1cmVMZXZlbDsK
</data>
<flag name="review"
          id="53519"
          type_id="1"
          status="+"
          setter="kbr"
    />
    <flag name="commit-queue"
          id="53544"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>