<?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>16954</bug_id>
          
          <creation_ts>2008-01-21 02:24:17 -0800</creation_ts>
          <short_desc>Support putImageData</short_desc>
          <delta_ts>2008-03-01 22:56:48 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Oliver Hunt">oliver</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>alp</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>mjs</cc>
    
    <cc>mrowe</cc>
    
    <cc>oliver</cc>
    
    <cc>tofu.linden</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>67830</commentid>
    <comment_count>0</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-21 02:24:17 -0800</bug_when>
    <thetext>We need to support the putImageData operation on canvas</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67831</commentid>
    <comment_count>1</comment_count>
      <attachid>18574</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-21 02:25:51 -0800</bug_when>
    <thetext>Created attachment 18574
Initial patch

Here&apos;s a first run at the patch, as well as a test case.

Currently it uses an ifdef PLATFORM(CG) in HTMLCanvasContext.cpp, but it should really be turned into a new method on the platform grpahics context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67907</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-01-21 19:30:46 -0800</bug_when>
    <thetext>It might be worth using vImage for the premulitplication if it&apos;s available (and if testing shows it&apos;s actually a speedup in common cases).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67923</commentid>
    <comment_count>3</comment_count>
      <attachid>18574</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-21 23:44:22 -0800</bug_when>
    <thetext>Comment on attachment 18574
Initial patch

Not checking exceptions after each get will cause unexpected behavior.  Since you&apos;ll continue executing javascript even after you have an exception in the exec state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67924</commentid>
    <comment_count>4</comment_count>
      <attachid>18574</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-21 23:46:07 -0800</bug_when>
    <thetext>Comment on attachment 18574
Initial patch

bah! no more #if PLATFORM!  We have to start moving to a platform abstraction, even if this is the first method added to a JSCanvasRenderingContext2DPlatform platform-implemented helper object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67925</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-01-21 23:48:24 -0800</bug_when>
    <thetext>It&apos;s probably worth looking at how the Android fork abstracted out the canvas operations before inventing some new approach ourselves.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67926</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-21 23:49:32 -0800</bug_when>
    <thetext>I also think that we should change all of the [custom] methods in CanvasRenderingContext2D.idl to actually document their args instead of using /* 3 */ etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67931</commentid>
    <comment_count>7</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-01-22 01:31:36 -0800</bug_when>
    <thetext>+ #include &lt;JavaScriptCore/array_instance.h&gt;

should be

#include &lt;kjs/array_instance.h&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>67933</commentid>
    <comment_count>8</comment_count>
      <attachid>18600</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-22 02:26:19 -0800</bug_when>
    <thetext>Created attachment 18600
A much tidier version of the putImageData patch

Still needs (at minimum) stubs for gtk, qt, and wx</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68018</commentid>
    <comment_count>9</comment_count>
      <attachid>18618</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-23 00:47:39 -0800</bug_when>
    <thetext>Created attachment 18618
A hopefully &quot;complete&quot; patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68020</commentid>
    <comment_count>10</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-23 01:54:15 -0800</bug_when>
    <thetext>Have made additional changes
diff --git a/WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp b/WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp
index 07fae93..2ab45e9 100644
--- a/WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp
+++ b/WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp
@@ -265,7 +265,7 @@ JSValue* JSCanvasRenderingContext2D::drawImageFromRect(ExecState* exec, const Li
 JSValue* JSCanvasRenderingContext2D::putImageData(ExecState* exec, const List&amp; args)
 {
     JSValue* value = args[0];
-    if (!value-&gt;isObject() || args.size() != 3)
+    if (args.size() != 3 || !value-&gt;isObject())
         return throwError(exec, TypeError);
 
     int xPos = args[1]-&gt;toInt32(exec);   
@@ -304,7 +304,7 @@ JSValue* JSCanvasRenderingContext2D::putImageData(ExecState* exec, const List&amp; a
     int height;
     
     if (!jsWidth-&gt;getTruncatedInt32(width) || !jsHeight-&gt;getTruncatedInt32(height) || width &lt;= 0 || height &lt;= 0
-        || !data-&gt;isObject() || !static_cast&lt;JSObject *&gt;(data)-&gt;inherits(&amp;ArrayInstance::info))
+        || !data-&gt;isObject() || !static_cast&lt;JSObject*&gt;(data)-&gt;inherits(&amp;ArrayInstance::info))
         return throwError(exec, TypeError);
     
     unsigned bufferSize = width * height;

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68021</commentid>
    <comment_count>11</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-01-23 02:03:32 -0800</bug_when>
    <thetext>+++ b/WebCore/html/CanvasRenderingContext2DGtk.cpp

This should be CanvasRenderingContext2DCairo.cpp

Also, the default license for Cairo stuff in WebKit is generally LGPL (as long as I&apos;m writing it).

Cairo implementation coming up in a jiffy, nice work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68097</commentid>
    <comment_count>12</comment_count>
      <attachid>18618</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-01-24 00:08:04 -0800</bug_when>
    <thetext>Comment on attachment 18618
A hopefully &quot;complete&quot; patch

I think this looks fine.

I would suggest replacing:
// Accursed flipped y axis
with a more useful comment, perhaps:
// CG flips the y-axis, so we unflip it here

 [Custom] void putImageData(/* 3 */);
should have real argument names, even if the other functions in that section don&apos;t. :p

These could be re-written as simpler statements using std:min:
1040    int endX = dest.x() + data.m_width;
1041    if (endX &gt; m_canvas-&gt;width())
1042        endX = m_canvas-&gt;width();

We really should have a test case which demonstrates the &quot;convert any exception to a TypeError exception&quot; behavior.

Otherwise it&apos;s fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>68106</commentid>
    <comment_count>13</comment_count>
      <attachid>18618</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-01-24 02:29:32 -0800</bug_when>
    <thetext>Comment on attachment 18618
A hopefully &quot;complete&quot; patch

*sigh*

Need a way to convert null, numbers, and strings that contain numbers to ints

Note &quot;true&quot; cannot be treat as 1 if we are to match other browsers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71680</commentid>
    <comment_count>14</comment_count>
      <attachid>19312</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-02-23 22:47:10 -0800</bug_when>
    <thetext>Created attachment 19312
First pass at new implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71705</commentid>
    <comment_count>15</comment_count>
      <attachid>19316</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-02-24 01:17:07 -0800</bug_when>
    <thetext>Created attachment 19316
Here we go!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71707</commentid>
    <comment_count>16</comment_count>
      <attachid>19316</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-24 01:35:20 -0800</bug_when>
    <thetext>Comment on attachment 19316
Here we go!

I have a lot of comments, so review- for now.

 29 function dataToArray(data) {

You should put those function braces on new lines.

 43 function pixelShouldBe(ctx, x, y, colour) {

The shouldBe function from the JavaScript testing script can handle comparing arrays and it colors the PASS and FAIL strings too. I wish you would use that.

 351     if (args.size() == 3)

Is size() really the right thing here? We normally try to base things on whether the arguments are defined or not and never actually look at the size. And we normally allow too few or too many parameters.

 350     ExceptionCode ec;

If you&apos;re going to call setDOMException with the result from ec, then you need to initialize the ExceptionCode to 0. The function you&apos;re calling has no obligation to set the code to 0 if the function succeeds.

 1214     if (!buffer || !isfinite(dx) || !isfinite(dy))
 1215         return;

Seems a little strange to check dx and dy to see if they are finite *after* checking the buffer. No big deal either way.

 1221     ec = 0;

No need to set ec to 0. If there was a need to do so, we&apos;d want to do that before the first return. But you should just remove it.

The negative number stuff looks really crazy to me. Is that really the correct logic? Are there test cases that cover all these?

 1243     if (dirtyX + dirtyWidth &gt; data-&gt;width())
 1244         dirtyWidth = data-&gt;width() - dirtyX;

Could this be done more readably with the min function?

What prevents dirtyX from being &gt; data-&gt;width()? Test case?

What prevents dirtyY from being &gt; data-&gt;height()? Test case?

 1250     if (!dirtyRect.width() || !dirtyRect.height())
 1251         return;

There&apos;s an isEmptyFunction you can use for this.

I don&apos;t see any tests for all the different ways you do and don&apos;t get exceptions with this function. I think we need those.

I don&apos;t see any tests for all the special cases for negative numbers. We need those.

 73         void putImageData(ImageData*, const IntPoint&amp; targetPoint, const IntRect&amp; dirtyRect);

I don&apos;t think that &quot;targetPoint&quot; and &quot;dirtyRect&quot; are clear enough. Where exactly does the image go? Is targetPoint the top/left of something?

 167     int destx = targetPoint.x() + dirtyRect.x();

This can overflow, with undefined results. We need to check for that and make sure we get well-defined results.

 171         originx -= destx;

Maybe this can overflow too?

 174     if (originx &gt; dirtyRect.x() + dirtyRect.width())

The value x() + width() is called right(). But of course it can overflow.

 176     int endx = targetPoint.x() + dirtyRect.x() + dirtyRect.width();

This can definitely overflow.

 199     // -originy to handle the accursed flipped y axis

This comment is not followed by any code that contains -originy. Why the comment then? What does the comment mean?

 211                 reinterpret_cast&lt;uint32_t*&gt;(destRows + x * 4)[0] = reinterpret_cast&lt;uint32_t*&gt;(srcRows + x * 4)[0];

Do we have a guarantee that the buffer is suitably aligned? If not, then we need to consider portability to processors that aren&apos;t able to do this operation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71729</commentid>
    <comment_count>17</comment_count>
      <attachid>19321</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-02-24 05:32:59 -0800</bug_when>
    <thetext>Created attachment 19321
Hopefully address everyones concerns</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71792</commentid>
    <comment_count>18</comment_count>
      <attachid>19321</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-02-24 15:00:33 -0800</bug_when>
    <thetext>Comment on attachment 19321
Hopefully address everyones concerns

About to push a better test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71793</commentid>
    <comment_count>19</comment_count>
      <attachid>19329</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-02-24 15:03:22 -0800</bug_when>
    <thetext>Created attachment 19329
Now with betterer testcases!!!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71806</commentid>
    <comment_count>20</comment_count>
      <attachid>19329</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-02-24 17:59:26 -0800</bug_when>
    <thetext>Comment on attachment 19329
Now with betterer testcases!!!

Looks pretty good, but there are still some things I&apos;d like to see fixed.

 351     if (args.size() == 7)

I think this should be &quot;&gt;= 7&quot;. There are no test cases passing &quot;undefined&quot;. You should include those.

 1237     IntRect sourceRect(static_cast&lt;int&gt;(clipRect.x()) + destX, static_cast&lt;int&gt;(clipRect.y()) + destY, 
 1238                        static_cast&lt;int&gt;(clipRect.width()), static_cast&lt;int&gt;(clipRect.height()));

Why exactly does this use casts to int rather than the enclosingIntRect function or ceil or floor?

 1235     int destX = static_cast&lt;int&gt;(dx);
 1236     int destY = static_cast&lt;int&gt;(dy);

The code would come out better if this was an IntSize.

 1237     IntRect sourceRect(static_cast&lt;int&gt;(clipRect.x()) + destX, static_cast&lt;int&gt;(clipRect.y()) + destY, 
 1238                        static_cast&lt;int&gt;(clipRect.width()), static_cast&lt;int&gt;(clipRect.height()));

If destX/Y was an IntSize, this could be an assignment followed by a IntRect::move call.

 1234     clipRect.intersect(IntRect(0, 0, data-&gt;width(), data-&gt;height()));
 1239     sourceRect.intersect(IntRect(0, 0, buffer-&gt;size().width(), buffer-&gt;size().height()));

I think there&apos;s a nicer way to write these using the IntPoint and IntSize version of the constructor. We might even want to add a constructor that takes only an IntSize.

 1243     sourceRect.setX(sourceRect.x() - destX);
 1244     sourceRect.setY(sourceRect.y() - destY);

IntRect has a &quot;move&quot; function for making this kind of change. It could be sourceRect.move(-destOffset).

I don&apos;t think the test cases with negative values for &quot;dirty width&quot; and &quot;dirty height&quot; are good enough. They seem to test only cases that are entirely clipped out; I&apos;m still confused by the meanings of negative numbers for these given the code implementing it and I&apos;d really like to see test cases to clarify what we&apos;re doing is right.

I think we are using &quot;float&quot; way too much in CanvasRenderingContext2D. We should use double instead of float as much as possible, since JavaScript always uses doubles. The conversion to float should be inside the GraphicsContext class. When we get to 64-bit, it&apos;s going to be double even in there.

 161     ASSERT(sourceRect.width() &gt; 0);
 162     ASSERT(sourceRect.height() &gt; 0);

Should be ASSERT(!sourceRect.isEmpty()).

 171     int endx = destPoint.x() + sourceRect.x() + sourceRect.width();

Should use sourceRect.right().

 181     ASSERT(originy &lt;= sourceRect.x() + sourceRect.height());

x + height is obviously wrong. This should use bottom().

 183     int endy = destPoint.y() + sourceRect.y() + sourceRect.height();

This should use bottom().

 190     // -originy to handle the accursed flipped y axis

We still have a comment that says &quot;-originy&quot;, but no code that mentions it. Why is the Y axis flipped? Don&apos;t we always do everything to make it not be flipped?

 202                 reinterpret_cast&lt;uint32_t*&gt;(destRows + x * 4)[0] = reinterpret_cast&lt;uint32_t*&gt;(srcRows + x * 4)[0];

You didn&apos;t respond to my comments about alignment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>71865</commentid>
    <comment_count>21</comment_count>
      <attachid>19344</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-02-25 04:40:39 -0800</bug_when>
    <thetext>Created attachment 19344
now with more tests and logic tidying</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72457</commentid>
    <comment_count>22</comment_count>
      <attachid>19344</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-03-01 15:16:51 -0800</bug_when>
    <thetext>Comment on attachment 19344
now with more tests and logic tidying

The TYPE_MISMATCH_ERR exception can be thrown in the implementation of putImageData instead of in the binding.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>72473</commentid>
    <comment_count>23</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-03-01 22:56:48 -0800</bug_when>
    <thetext>Landed r30700</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18574</attachid>
            <date>2008-01-21 02:25:51 -0800</date>
            <delta_ts>2008-01-22 02:26:19 -0800</delta_ts>
            <desc>Initial patch</desc>
            <filename>putImageData.diff</filename>
            <type>text/plain</type>
            <size>9439</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3B1dC1pbWFnZS1kYXRhLWV4cGVj
dGVkLmNoZWNrc3VtIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvcHV0LWltYWdlLWRhdGEtZXhw
ZWN0ZWQuY2hlY2tzdW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJhZTQ5
NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3B1dC1pbWFnZS1k
YXRhLWV4cGVjdGVkLmNoZWNrc3VtCkBAIC0wLDAgKzEgQEAKKzMwNmU3YzM3Y2M0Y2FkZTJjZTE3
MTg4NWNiNWRlYTM4ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvcHV0LWltYWdlLWRhdGEtZXhwZWN0ZWQucG5nIGIvTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvcHV0LWltYWdlLWRhdGEtZXhwZWN0ZWQucG5nCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmODdjZWUKQmluYXJ5IGZpbGVzIC9kZXYvbnVsbCBh
bmQgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9wdXQtaW1hZ2UtZGF0YS1leHBlY3RlZC5wbmcg
ZGlmZmVyCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9wdXQtaW1hZ2UtZGF0
YS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9wdXQtaW1hZ2UtZGF0YS1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgyY2IxNwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3B1dC1pbWFnZS1kYXRh
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDkgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYw
MAorICBSZW5kZXJWaWV3IGF0ICgwLDApIHNpemUgODAweDYwMAorbGF5ZXIgYXQgKDAsMCkgc2l6
ZSA4MDB4NjAwCisgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAg
ICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc4NHg1ODQKKyAgICAgIFJlbmRlckhU
TUxDYW52YXMge0NBTlZBU30gYXQgKDAsMCkgc2l6ZSAyMDB4MjAwCisgICAgICBSZW5kZXJUZXh0
IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAweDAKKyAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
MCwwKSBzaXplIDB4MAorICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgw
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9wdXQtaW1hZ2UtZGF0YS5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvcHV0LWltYWdlLWRhdGEuaHRtbApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2ZmMmRiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvcHV0LWltYWdlLWRhdGEuaHRtbApAQCAtMCwwICsxLDM0IEBA
Cis8aHRtbD4KKwk8aGVhZD4KKwkJPHRpdGxlPnB1dEltYWdlRGF0YSB0ZXN0PC90aXRsZT4KKwkJ
PHNjcmlwdD4KKwkJCWZ1bmN0aW9uIHRlc3QoKQorCQkgICAgeworCQkJCXZhciBkYXRhID0gW107
CisJCQkJZm9yICh2YXIgeSA9IDA7IHkgPCAyMDA7IHkrKykgeworCQkJCQlmb3IgKHZhciB4ID0g
MDsgeCA8IDIwMDsgeCsrKSB7CisJCQkJCQlkYXRhW3kgKiAyMDAgKiA0ICsgeCAqIDQgKyAwXSA9
IDA7CisJCQkJCQlkYXRhW3kgKiAyMDAgKiA0ICsgeCAqIDQgKyAxXSA9IDEyODsKKwkJCQkJCWRh
dGFbeSAqIDIwMCAqIDQgKyB4ICogNCArIDJdID0gMDsKKwkJCQkJCWRhdGFbeSAqIDIwMCAqIDQg
KyB4ICogNCArIDNdID0gMjU1OworCQkJCQl9CisJCQkJfQorCQkJCXZhciBjYW52YXMgPSBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIikuZ2V0Q29udGV4dCgiMmQiKTsKKwkJICAgICAg
ICBjYW52YXMuZmlsbFN0eWxlID0gInJlZCI7CisJCSAgICAgICAgY2FudmFzLmZpbGxSZWN0KDAs
MjAwLDIwMCwyMDApOworCQkgICAgICAgIAorCQkJCXZhciBvYmplY3QgPSB7fTsKKwkJCQlvYmpl
Y3Qud2lkdGggPSAyMDA7CisJCQkJb2JqZWN0LmhlaWdodCA9IDIwMDsKKwkJCQlvYmplY3QuZGF0
YSA9IGRhdGE7CisJCQkJY2FudmFzLnB1dEltYWdlRGF0YShvYmplY3QsIDAsIDApOworCQkgICAg
fQorCQk8L3NjcmlwdD4KKwk8L2hlYWQ+CisJPGJvZHk+CisJCTxjYW52YXMgaWQ9ImNhbnZhcyIg
d2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiIHN0eWxlPSJ3aWR0aDoyMDBweDtoZWlnaHQ6MjAwcHg7
Ij48L2NhbnZhcz4KKwkJPHNjcmlwdD4KKyAgICAJCXRlc3QoKTsKKwkJPC9zY3JpcHQ+CisJPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAppbmRleCA2ODMyOGY0Li4xYTJiNzE0IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3Vz
dG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQ3VzdG9tLmNwcApAQCAtMjgsMTIgKzI4LDE2IEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgogI2luY2x1ZGUgIkpTQ2FudmFzR3JhZGllbnQu
aCIKICNpbmNsdWRlICJKU0NhbnZhc1BhdHRlcm4uaCIKICNpbmNsdWRlICJKU0hUTUxDYW52YXNF
bGVtZW50LmgiCiAjaW5jbHVkZSAiSlNIVE1MSW1hZ2VFbGVtZW50LmgiCiAjaW5jbHVkZSAia2pz
X2h0bWwuaCIKIAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL2FycmF5X2luc3RhbmNlLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCiB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC0yNTgsNiArMjYyLDY3IEBAIEpTVmFsdWUqIEpTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpkcmF3SW1hZ2VGcm9tUmVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExp
CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7ICAgIAogfQogCitKU1ZhbHVlKiBKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VEYXRhKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlz
dCYgYXJncykKK3sKKyAgICBKU1ZhbHVlKiB2YWx1ZSA9IGFyZ3NbMF07CisgICAgaWYgKCF2YWx1
ZS0+aXNPYmplY3QoKSB8fCBhcmdzLnNpemUoKSAhPSAzKQorICAgICAgICByZXR1cm4gdGhyb3dF
cnJvcihleGVjLCBUeXBlRXJyb3IpOworCisgICAgaW50IHhQb3MgPSBhcmdzWzFdLT50b0ludDMy
KGV4ZWMpOyAgICAgICAgCisgICAgaW50IHlQb3MgPSBhcmdzWzJdLT50b0ludDMyKGV4ZWMpOwor
CisgICAgSlNPYmplY3QqIGltYWdlRGF0YSA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odmFsdWUp
OworICAgIAorICAgIEpTVmFsdWUqIGpzV2lkdGggPSBpbWFnZURhdGEtPmdldChleGVjLCAid2lk
dGgiKTsKKyAgICBKU1ZhbHVlKiBqc0hlaWdodCA9IGltYWdlRGF0YS0+Z2V0KGV4ZWMsICJoZWln
aHQiKTsKKyAgICBKU1ZhbHVlKiBkYXRhID0gaW1hZ2VEYXRhLT5nZXQoZXhlYywgImRhdGEiKTsK
KyAgICAKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgZXhlYy0+Y2xl
YXJFeGNlcHRpb24oKTsKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9y
KTsKKyAgICB9CisgICAgCisgICAgaW50IHdpZHRoOworICAgIGludCBoZWlnaHQ7CisgICAgCisg
ICAgaWYgKCFqc1dpZHRoLT5nZXRUcnVuY2F0ZWRJbnQzMih3aWR0aCkgfHwgIWpzSGVpZ2h0LT5n
ZXRUcnVuY2F0ZWRJbnQzMihoZWlnaHQpIHx8IHdpZHRoIDw9IDAgfHwgaGVpZ2h0IDw9IDAKKyAg
ICAgICAgfHwgIWRhdGEtPmlzT2JqZWN0KCkgfHwgIXN0YXRpY19jYXN0PEpTT2JqZWN0ICo+KGRh
dGEpLT5pbmhlcml0cygmQXJyYXlJbnN0YW5jZTo6aW5mbykpCisgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisgICAgCisgICAgdW5zaWduZWQgYnVmZmVyU2l6ZSA9
IHdpZHRoICogaGVpZ2h0OworICAgIAorICAgIC8vIEJvdW5kYXJ5IGNoZWNraW5nCisgICAgaWYg
KHN0YXRpY19jYXN0PHVuc2lnbmVkPih3aWR0aCkgPj0gYnVmZmVyU2l6ZSB8fCBidWZmZXJTaXpl
ID49IChidWZmZXJTaXplICogNCkpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvcik7CisgCisgICAgYnVmZmVyU2l6ZSAqPSA0OworICAgIAorICAgIEFycmF5SW5zdGFu
Y2UqIGFycmF5ID0gc3RhdGljX2Nhc3Q8QXJyYXlJbnN0YW5jZSo+KGRhdGEpOworICAgIGlmIChh
cnJheS0+Z2V0TGVuZ3RoKCkgIT0gYnVmZmVyU2l6ZSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJy
b3IoZXhlYywgVHlwZUVycm9yKTsKKyAgICAKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gZGF0
YUJ1ZmZlcihidWZmZXJTaXplKTsKKyAgICBpZiAoIWRhdGFCdWZmZXIuZGF0YSgpKQorICAgICAg
ICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgIAorICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBidWZmZXJTaXplOyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSogaXRl
bVZhbHVlID0gYXJyYXktPmdldEl0ZW0oaSk7CisgICAgICAgIGludCBwaXhlbFZhbHVlOworICAg
ICAgICBpZiAoIWl0ZW1WYWx1ZS0+aXNOdW1iZXIoKSB8fCAhaXRlbVZhbHVlLT5nZXRUcnVuY2F0
ZWRJbnQzMihwaXhlbFZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMs
IFR5cGVFcnJvcik7CisgICAgICAgIGlmIChwaXhlbFZhbHVlIDwgMCkKKyAgICAgICAgICAgIHBp
eGVsVmFsdWUgPSAwOworICAgICAgICBlbHNlIGlmIChwaXhlbFZhbHVlID4gMjU1KQorICAgICAg
ICAgICAgcGl4ZWxWYWx1ZSA9IDI1NTsKKworICAgICAgICBkYXRhQnVmZmVyW2ldID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcj4ocGl4ZWxWYWx1ZSk7CisgICAgfQorICAgIAorICAgIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IGltcGwoKTsKKyAgICBjb250ZXh0LT5wdXRJ
bWFnZURhdGEoZGF0YUJ1ZmZlciwgSW50UmVjdCh4UG9zLCB5UG9zLCB3aWR0aCwgaGVpZ2h0KSk7
CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7ICAgIAorfQorICAgIAogSlNWYWx1ZSogSlNDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExp
c3QmIGFyZ3MpCiB7IAogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IGlt
cGwoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
Y3BwIGIvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKaW5kZXggZGM4
NTdlNi4uYTRhNzNjNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAKQEAgLTEwMTMsNiArMTAxMyw3MCBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZHJhd0ltYWdlRnJvbVJlY3QoSFRNTEltYWdlRWxlbWVudCogaW1hZ2UsCiAgICAgYy0+ZHJhd0lt
YWdlKGNhY2hlZEltYWdlLT5pbWFnZSgpLCBkZXN0UmVjdCwgRmxvYXRSZWN0KHN4LCBzeSwgc3cs
IHNoKSwgb3ApOwogfQogCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VE
YXRhKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiYgZGF0YSwgY29uc3QgSW50UmVjdCYgZGVz
dGluYXRpb24pCit7CisgICAgLy8gQ2xpcCB0byBkZXN0aW5hdGlvbgorICAgIGlmIChkZXN0aW5h
dGlvbi54KCkgPiBtX2NhbnZhcy0+d2lkdGgoKSB8fCBkZXN0aW5hdGlvbi55KCkgPiBtX2NhbnZh
cy0+aGVpZ2h0KCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpbnQgc3RhcnRYLCBvcmln
aW5YOworICAgIGlmIChkZXN0aW5hdGlvbi54KCkgPiAwKSB7CisgICAgICAgIHN0YXJ0WCA9IGRl
c3RpbmF0aW9uLngoKTsKKyAgICAgICAgb3JpZ2luWCA9IDA7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgc3RhcnRYID0gMDsKKyAgICAgICAgb3JpZ2luWCA9IC1kZXN0aW5hdGlvbi54KCk7CisgICAg
fQorICAgIAorICAgIGludCBzdGFydFksIG9yaWdpblk7CisgICAgaWYgKGRlc3RpbmF0aW9uLnko
KSA+IDApIHsKKyAgICAgICAgc3RhcnRZID0gZGVzdGluYXRpb24ueSgpOworICAgICAgICBvcmln
aW5ZID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGFydFkgPSAwOworICAgICAgICBvcmln
aW5ZID0gLWRlc3RpbmF0aW9uLnkoKTsKKyAgICB9CisgICAgCisgICAgaW50IGVuZFggPSBkZXN0
aW5hdGlvbi54KCkgKyBkZXN0aW5hdGlvbi53aWR0aCgpOworICAgIGlmIChlbmRYID4gbV9jYW52
YXMtPndpZHRoKCkpCisgICAgICAgIGVuZFggPSBtX2NhbnZhcy0+d2lkdGgoKTsKKyAgICBpbnQg
ZW5kWSA9IGRlc3RpbmF0aW9uLnkoKSArIGRlc3RpbmF0aW9uLmhlaWdodCgpOworICAgIGlmIChl
bmRZID4gbV9jYW52YXMtPmhlaWdodCgpKQorICAgICAgICBlbmRZID0gbV9jYW52YXMtPmhlaWdo
dCgpOworICAgIGludCBibGl0V2lkdGggPSBlbmRYIC0gc3RhcnRYOworICAgIGludCBibGl0SGVp
Z2h0ID0gZW5kWSAtIHN0YXJ0WTsKKyNpZiBQTEFURk9STShDRykKKyAgICBHcmFwaGljc0NvbnRl
eHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOworICAgIGlmICghYykKKyAgICAgICAgcmV0dXJuOwor
ICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihD
R0JpdG1hcENvbnRleHRHZXREYXRhKGMtPnBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgQVNTRVJU
KGJ1ZmZlcik7CisgICAgZm9yIChpbnQgeSA9IHN0YXJ0WTsgeSA8IHN0YXJ0WSArIGJsaXRIZWln
aHQ7ICsreSwgKytvcmlnaW5ZKSB7CisgICAgICAgIGludCBveCA9IG9yaWdpblg7CisgICAgICAg
IC8vIEFjY3Vyc2VkIGZsaXBwZWQgeSBheGlzCisgICAgICAgIHVuc2lnbmVkIGNoYXIqIGRlc3RS
b3cgPSBidWZmZXIgKyAobV9jYW52YXMtPmhlaWdodCgpIC0geSAtIDEpICogbV9jYW52YXMtPndp
ZHRoKCkgKiA0OworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBzcmNSb3cgPSBkYXRhLmRh
dGEoKSArIG9yaWdpblkgKiBkZXN0aW5hdGlvbi53aWR0aCgpICo0OworICAgICAgICBmb3IgKGlu
dCB4ID0gc3RhcnRYOyB4IDwgc3RhcnRYICsgYmxpdFdpZHRoOyArK3gsICsrb3gpIHsKKyAgICAg
ICAgICAgIGludCBhbHBoYSA9IHNyY1Jvd1tveCo0ICsgM107CisgICAgICAgICAgICBkZXN0Um93
W3gqNCswXSA9IHNyY1Jvd1tveCo0ICsgMF0gKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgICAgIGRl
c3RSb3dbeCo0KzFdID0gc3JjUm93W294KjQgKyAxXSAqIGFscGhhIC8gMjU1OworICAgICAgICAg
ICAgZGVzdFJvd1t4KjQrMl0gPSBzcmNSb3dbb3gqNCArIDJdICogYWxwaGEgLyAyNTU7CisgICAg
ICAgICAgICBkZXN0Um93W3gqNCszXSA9IGFscGhhOworICAgICAgICB9CisgICAgfQorI2Vsc2UK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworI2VuZGlmCisgICAgCisgICAgRmxvYXRSZWN0IHJlcGFp
bnRSZWN0KHN0YXJ0WCwgc3RhcnRZLCBibGl0V2lkdGgsIGJsaXRIZWlnaHQpOworICAgIAorICAg
IC8vIENhbid0IHVzZSB3aWxsRHJhdyBhcyBpdCB3aWxsIGFjY291bnQgZm9yIHRoZSBjb250ZXh0
IHRyYW5zZm9ybSB0aGF0IHdlJ3ZlIGNvbXBsZXRlbHkgYnlwYXNzZWQKKyAgICBtX2NhbnZhcy0+
d2lsbERyYXcocmVwYWludFJlY3QpOworICAgIEZsb2F0UmVjdCBjb21wbGV0ZUJvdW5kcygwLCAw
LCBtX2NhbnZhcy0+d2lkdGgoKSwgbV9jYW52YXMtPmhlaWdodCgpKTsKKyAgICBtX2NhbnZhcy0+
d2lsbERyYXcoY29tcGxldGVCb3VuZHMpOworICAgIHJldHVybjsKK30KKwogdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldEFscGhhKGZsb2F0IGFscGhhKQogewogICAgIHNldEdsb2Jh
bEFscGhhKGFscGhhKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuaCBiL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAppbmRl
eCBkMjZiZTRlLi45MDc3NTMzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmgKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5oCkBAIC00NSw2ICs0NSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBHcmFw
aGljc0NvbnRleHQ7CiAgICAgY2xhc3MgSFRNTENhbnZhc0VsZW1lbnQ7CiAgICAgY2xhc3MgSFRN
TEltYWdlRWxlbWVudDsKKyAgICBjbGFzcyBJbnRSZWN0OwogCiAgICAgdHlwZWRlZiBpbnQgRXhj
ZXB0aW9uQ29kZTsKIApAQCAtMTUxLDYgKzE1Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgdm9pZCBkcmF3SW1hZ2VGcm9tUmVjdChIVE1MSW1hZ2VFbGVtZW50KiwgZmxvYXQgc3gs
IGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gsCiAgICAgICAgICAgICBmbG9hdCBkeCwgZmxv
YXQgZHksIGZsb2F0IGR3LCBmbG9hdCBkaCwgY29uc3QgU3RyaW5nJiBjb21wb3NpdGVPcGVyYXRp
b24pOwogCisgICAgICAgIHZvaWQgcHV0SW1hZ2VEYXRhKGNvbnN0IFZlY3Rvcjx1bnNpZ25lZCBj
aGFyPiYsIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgCiAgICAgICAgIHZvaWQgc2V0QWxwaGEo
ZmxvYXQpOwogCiAgICAgICAgIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbnN0IFN0cmlu
ZyYpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5p
ZGwgYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbAppbmRleCBjOWRh
MmMyLi5iOTZlYzlkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmlkbAorKysgYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlk
bApAQCAtOTUsNiArOTUsNyBAQCBtb2R1bGUgaHRtbCB7CiAgICAgICAgIFtDdXN0b21dIHZvaWQg
c3Ryb2tlUmVjdCgvKiA0ICovKTsKICAgICAgICAgW0N1c3RvbV0gdm9pZCBkcmF3SW1hZ2UoLyog
MyAqLyk7CiAgICAgICAgIFtDdXN0b21dIHZvaWQgZHJhd0ltYWdlRnJvbVJlY3QoLyogMTAgKi8p
OworICAgICAgICBbQ3VzdG9tXSB2b2lkIHB1dEltYWdlRGF0YSgvKiAzICovKTsKICAgICAgICAg
W0N1c3RvbV0gdm9pZCBzZXRTaGFkb3coLyogMyAqLyk7CiAgICAgICAgIFtDdXN0b21dIHZvaWQg
Y3JlYXRlUGF0dGVybigvKiAyICovKTsKICAgICAgICAgCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18600</attachid>
            <date>2008-01-22 02:26:19 -0800</date>
            <delta_ts>2008-01-23 00:47:39 -0800</delta_ts>
            <desc>A much tidier version of the putImageData patch</desc>
            <filename>putImageData.diff</filename>
            <type>text/plain</type>
            <size>18913</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4ZDUwZDVhLi45ZjllYjZkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDgtMDEt
MjIgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0Y2FzZSBmb3IgQ2FudmFzLnB1dEltYWdl
RGF0YQorCisgICAgICAgICogZmFzdC9jYW52YXMvcHV0LWltYWdlLWRhdGEtZXhwZWN0ZWQuY2hl
Y2tzdW06IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3B1dC1pbWFnZS1kYXRhLWV4cGVj
dGVkLnBuZzogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvcHV0LWltYWdlLWRhdGEtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy9wdXQtaW1hZ2UtZGF0YS5o
dG1sOiBBZGRlZC4KKwogMjAwOC0wMS0yMiAgTGFycyBLbm9sbCAgPGxhcnNAdHJvbGx0ZWNoLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbi4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3B1dC1pbWFnZS1kYXRhLWV4cGVjdGVkLmNoZWNrc3VtIGIvTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvcHV0LWltYWdlLWRhdGEtZXhwZWN0ZWQuY2hlY2tzdW0KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJhZTQ5NQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvY2FudmFzL3B1dC1pbWFnZS1kYXRhLWV4cGVjdGVkLmNoZWNrc3VtCkBA
IC0wLDAgKzEgQEAKKzMwNmU3YzM3Y2M0Y2FkZTJjZTE3MTg4NWNiNWRlYTM4ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvcHV0
LWltYWdlLWRhdGEtZXhwZWN0ZWQucG5nIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvcHV0LWlt
YWdlLWRhdGEtZXhwZWN0ZWQucG5nCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu
LmJmODdjZWUKQmluYXJ5IGZpbGVzIC9kZXYvbnVsbCBhbmQgYi9MYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy9wdXQtaW1hZ2UtZGF0YS1leHBlY3RlZC5wbmcgZGlmZmVyCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy9wdXQtaW1hZ2UtZGF0YS1leHBlY3RlZC50eHQgYi9MYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy9wdXQtaW1hZ2UtZGF0YS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgyY2IxNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3B1dC1pbWFnZS1kYXRhLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDkgQEAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5kZXJWaWV3IGF0ICgwLDAp
IHNpemUgODAweDYwMAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlckJsb2Nr
IHtIVE1MfSBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAo
OCw4KSBzaXplIDc4NHg1ODQKKyAgICAgIFJlbmRlckhUTUxDYW52YXMge0NBTlZBU30gYXQgKDAs
MCkgc2l6ZSAyMDB4MjAwCisgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAw
eDAKKyAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4MAorICAgICAgUmVu
ZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy9wdXQtaW1hZ2UtZGF0YS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvcHV0LWltYWdlLWRhdGEuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li45Y2ZmMmRiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvcHV0
LWltYWdlLWRhdGEuaHRtbApAQCAtMCwwICsxLDM0IEBACis8aHRtbD4KKwk8aGVhZD4KKwkJPHRp
dGxlPnB1dEltYWdlRGF0YSB0ZXN0PC90aXRsZT4KKwkJPHNjcmlwdD4KKwkJCWZ1bmN0aW9uIHRl
c3QoKQorCQkgICAgeworCQkJCXZhciBkYXRhID0gW107CisJCQkJZm9yICh2YXIgeSA9IDA7IHkg
PCAyMDA7IHkrKykgeworCQkJCQlmb3IgKHZhciB4ID0gMDsgeCA8IDIwMDsgeCsrKSB7CisJCQkJ
CQlkYXRhW3kgKiAyMDAgKiA0ICsgeCAqIDQgKyAwXSA9IDA7CisJCQkJCQlkYXRhW3kgKiAyMDAg
KiA0ICsgeCAqIDQgKyAxXSA9IDEyODsKKwkJCQkJCWRhdGFbeSAqIDIwMCAqIDQgKyB4ICogNCAr
IDJdID0gMDsKKwkJCQkJCWRhdGFbeSAqIDIwMCAqIDQgKyB4ICogNCArIDNdID0gMjU1OworCQkJ
CQl9CisJCQkJfQorCQkJCXZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2Fu
dmFzIikuZ2V0Q29udGV4dCgiMmQiKTsKKwkJICAgICAgICBjYW52YXMuZmlsbFN0eWxlID0gInJl
ZCI7CisJCSAgICAgICAgY2FudmFzLmZpbGxSZWN0KDAsMjAwLDIwMCwyMDApOworCQkgICAgICAg
IAorCQkJCXZhciBvYmplY3QgPSB7fTsKKwkJCQlvYmplY3Qud2lkdGggPSAyMDA7CisJCQkJb2Jq
ZWN0LmhlaWdodCA9IDIwMDsKKwkJCQlvYmplY3QuZGF0YSA9IGRhdGE7CisJCQkJY2FudmFzLnB1
dEltYWdlRGF0YShvYmplY3QsIDAsIDApOworCQkgICAgfQorCQk8L3NjcmlwdD4KKwk8L2hlYWQ+
CisJPGJvZHk+CisJCTxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAi
IHN0eWxlPSJ3aWR0aDoyMDBweDtoZWlnaHQ6MjAwcHg7Ij48L2NhbnZhcz4KKwkJPHNjcmlwdD4K
KyAgICAJCXRlc3QoKTsKKwkJPC9zY3JpcHQ+CisJPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4YzY3ZDM3Li5l
ZWI3YmYzIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDA4LTAxLTIyICBPbGl2ZXIgSHVudCAgPG9saXZlckBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAg
IAorICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjk1NCAt
LSBTdXBwb3J0IGNhbnZhcy5wdXRJbWFnZURhdGEKKyAgICAgICAgCisgICAgICAgIEFkZCBzdXBw
b3J0IGZvciBwdXRJbWFnZURhdGEgdG8gdGhlIENHIGJhY2tlbmRlZCBjYW52YXMuCisKKyAgICAg
ICAgVGVzdDogZmFzdC9jYW52YXMvcHV0LWltYWdlLWRhdGEuaHRtbAorCisgICAgICAgICogV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAgIEFkZCBodG1sL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRENHLmNwcCB0byB0aGUgcHJvamVjdAorCisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdlRGF0YSk6CisgICAg
ICAgICAgUGVyZm9ybSB0aGUgY29udmVyc2lvbiBmcm9tIEpTIGRhdGEgdG8gdW5ib3hlZCBkYXRh
IGZvciBwdXRJbWFnZURhdGEgaW1wbGVtZW50YXRpb24KKworICAgICAgICAqIGh0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgICBQZXJmb3JtZWQgdGhlIGNyb3Nz
IHBsYXRmb3JtIGNsaXBwaW5nIGFuZCBib3VuZHMgbG9naWMgZm9yIHB1dEltYWdlRGF0YQorICAg
ICAgICAgIAorICAgICAgICAqIGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmg6CisgICAg
ICAgIChXZWJDb3JlOjpJbWFnZURhdGE6OkltYWdlRGF0YSk6CisgICAgICAgICAgRGVmaW5lZCBJ
bWFnZURhdGEgdHlwZSBhbmQgZGVjbGFyZSB0aGUgcGxhdGZvcm0gaW1wbGVtZW50YXRpb24gb2Yg
cHV0SW1hZ2VEYXRhCisgICAgICAgICAgCisgICAgICAgICogaHRtbC9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuaWRsOgorICAgICAgICAgIEFkZCBwdXRJbWFnZURhdGEKKyAgICAgICAgICAKKyAg
ICAgICAgKiBodG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRENHLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdlRGF0YSk6Cisg
ICAgICAgICAgUGxhdGZvcm0gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgdGhlIGRhdGEgYmxp
dAorCiAyMDA4LTAxLTIyICBMYXJzIEtub2xsICA8bGFyc0B0cm9sbHRlY2guY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IFNpbW9uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCBlOTNmZWQ1Li5jMGQ2ZTFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTcxOCw2ICsxNzE4LDcgQEAKIAkJQTdDRkIzRDIwQjdF
RDEwQTAwNzBDMzJEIC8qIERyYWdJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTdDRkIzRDAwQjdFRDEwQTAwNzBDMzJEIC8qIERyYWdJbWFnZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3Q0ZC
M0Q1MEI3RUQxMTgwMDcwQzMyRCAvKiBEcmFnSW1hZ2VNYWMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0NGQjNENDBCN0VEMTE4MDA3MEMzMkQgLyog
RHJhZ0ltYWdlTWFjLm1tICovOyB9OwogCQlBN0QzQzUyNDBCNTc2QjRCMDAyQ0E0NTAgLyogUGFz
dGVib2FyZEhlbHBlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTdEM0M1MjMwQjU3NkI0QjAwMkNBNDUwIC8qIFBhc3RlYm9hcmRIZWxwZXIuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlBN0VFRjVGNzBE
NDVEQkVFMDAwMDczNDMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ0cuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdFRUY1RjYwRDQ1REJFRTAw
MDA3MzQzIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRENHLmNwcCAqLzsgfTsKIAkJQTgwOUYx
NDcwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTgwOUYxNDUwQjczNzkzQTAwMkU0
RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5oICovOyB9OwogCQlBODA5RjE0ODBCNzM3OTNC
MDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGllbnRTdG9wLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4MDlGMTQ2MEI3Mzc5M0EwMDJFNEQ3RiAvKiBS
ZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwICovOyB9OwogCQlBODA5RjFBQTBCNzM3RkI2MDAyRTRE
N0YgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODA5RjFBODBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVy
U1ZHSGlkZGVuQ29udGFpbmVyLmggKi87IH07CkBAIC01OTAwLDYgKzU5MDEsNyBAQAogCQlBN0NG
QjNEMDBCN0VEMTBBMDA3MEMzMkQgLyogRHJhZ0ltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBEcmFnSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QTdDRkIzRDQwQjdFRDExODAwNzBDMzJEIC8qIERyYWdJbWFnZU1hYy5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBEcmFnSW1hZ2VNYWMubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCUE3RDNDNTIzMEI1NzZCNEIwMDJDQTQ1MCAvKiBQYXN0ZWJvYXJk
SGVscGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhc3RlYm9hcmRIZWxw
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTdFRUY1RjYwRDQ1REJFRTAwMDA3
MzQzIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRENHLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwOUYxNDUwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRl
clNWR0dyYWRpZW50U3RvcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5k
ZXJTVkdHcmFkaWVudFN0b3AuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwOUYx
NDYwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODA5RjFBODBCNzM3RkI2MDAyRTREN0YgLyog
UmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtOTc0Myw2ICs5NzQ1LDcgQEAKIAkJCQk5M0VFQzFGMjA5QzI4Nzc3MDBDNTE1RDEgLyog
Q2FudmFzUGF0dGVybi5oICovLAogCQkJCTkzMENBQjhGMDlDNDlGMUIwMDIyOUMwNCAvKiBDYW52
YXNQYXR0ZXJuLmlkbCAqLywKIAkJCQk5M0VFQzFFRDA5QzI4Nzc3MDBDNTE1RDEgLyogQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcCAqLywKKwkJCQlBN0VFRjVGNjBENDVEQkVFMDAwMDczNDMg
LyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ0cuY3BwICovLAogCQkJCTkzRUVDMUVFMDlDMjg3
NzcwMEM1MTVEMSAvKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCAqLywKIAkJCQk5MzBDQUFE
NjA5QzQ5NUI2MDAyMjlDMDQgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCAqLywKIAkJ
CQk5M0VFQzI3MDA5QzMyMTg4MDBDNTE1RDEgLyogQ2FudmFzU3R5bGUuY3BwICovLApAQCAtMTU3
ODgsNiArMTU3OTEsNyBAQAogCQkJCUFCRkU3RTEyMEQzMkZBRjYwMDY2RjREMiAvKiBNZWRpYUNv
bnRyb2xFbGVtZW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjM3QzhBNzBEMzQ0RDExMDAx
M0Y3MDcgLyogU1ZHRm9udERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTRFRUZGQzgwRDM0
NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9Db25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlBN0VFRjVGNzBENDVEQkVFMDAwMDczNDMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ0cu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJv
Y2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlND
YW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCmluZGV4IDY4MzI4ZjQuLmIyNzlhOTMg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRDdXN0b20uY3BwCkBAIC0yOCwxMiArMjgsMTYgQEAKICNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFn
ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSlNDYW52YXNHcmFk
aWVudC5oIgogI2luY2x1ZGUgIkpTQ2FudmFzUGF0dGVybi5oIgogI2luY2x1ZGUgIkpTSFRNTENh
bnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJKU0hUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJranNfaHRtbC5oIgogCisjaW5jbHVkZSA8a2pzL2FycmF5X2luc3RhbmNlLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCiB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0yNTgsNiArMjYyLDgwIEBAIEpTVmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpkcmF3SW1hZ2VGcm9tUmVjdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpCiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7ICAgIAogfQogCitKU1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6cHV0SW1hZ2VEYXRhKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJn
cykKK3sKKyAgICBKU1ZhbHVlKiB2YWx1ZSA9IGFyZ3NbMF07CisgICAgaWYgKCF2YWx1ZS0+aXNP
YmplY3QoKSB8fCBhcmdzLnNpemUoKSAhPSAzKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihl
eGVjLCBUeXBlRXJyb3IpOworCisgICAgaW50IHhQb3MgPSBhcmdzWzFdLT50b0ludDMyKGV4ZWMp
OyAgICAgICAgCisgICAgaW50IHlQb3MgPSBhcmdzWzJdLT50b0ludDMyKGV4ZWMpOworCisgICAg
SlNPYmplY3QqIGltYWdlRGF0YSA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odmFsdWUpOworICAg
IAorICAgIEpTVmFsdWUqIGpzV2lkdGggPSBpbWFnZURhdGEtPmdldChleGVjLCAid2lkdGgiKTsK
KyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgZXhlYy0+Y2xlYXJFeGNl
cHRpb24oKTsKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKyAg
ICB9CisgICAgCisgICAgSlNWYWx1ZSoganNIZWlnaHQgPSBpbWFnZURhdGEtPmdldChleGVjLCAi
aGVpZ2h0Iik7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIGV4ZWMt
PmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVF
cnJvcik7CisgICAgfQorICAgIAorICAgIEpTVmFsdWUqIGRhdGEgPSBpbWFnZURhdGEtPmdldChl
eGVjLCAiZGF0YSIpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBl
eGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOworICAgIH0KKyAgICAKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhlaWdodDsK
KyAgICAKKyAgICBpZiAoIWpzV2lkdGgtPmdldFRydW5jYXRlZEludDMyKHdpZHRoKSB8fCAhanNI
ZWlnaHQtPmdldFRydW5jYXRlZEludDMyKGhlaWdodCkgfHwgd2lkdGggPD0gMCB8fCBoZWlnaHQg
PD0gMAorICAgICAgICB8fCAhZGF0YS0+aXNPYmplY3QoKSB8fCAhc3RhdGljX2Nhc3Q8SlNPYmpl
Y3QgKj4oZGF0YSktPmluaGVyaXRzKCZBcnJheUluc3RhbmNlOjppbmZvKSkKKyAgICAgICAgcmV0
dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKyAgICAKKyAgICB1bnNpZ25lZCBidWZm
ZXJTaXplID0gd2lkdGggKiBoZWlnaHQ7CisgICAgCisgICAgLy8gQm91bmRhcnkgY2hlY2tpbmcK
KyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHdpZHRoKSA+PSBidWZmZXJTaXplIHx8IGJ1
ZmZlclNpemUgPj0gKGJ1ZmZlclNpemUgKiA0KSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3Io
ZXhlYywgVHlwZUVycm9yKTsKKyAKKyAgICBidWZmZXJTaXplICo9IDQ7CisgICAgCisgICAgQXJy
YXlJbnN0YW5jZSogYXJyYXkgPSBzdGF0aWNfY2FzdDxBcnJheUluc3RhbmNlKj4oZGF0YSk7Cisg
ICAgaWYgKGFycmF5LT5nZXRMZW5ndGgoKSAhPSBidWZmZXJTaXplKQorICAgICAgICByZXR1cm4g
dGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgIAorICAgIEltYWdlRGF0YSBkYXRhQnVm
ZmVyKHdpZHRoLCBoZWlnaHQpOworICAgIGlmICghZGF0YUJ1ZmZlci5tX2RhdGEuZGF0YSgpKQor
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgIAorICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXJTaXplOyArK2kpIHsKKyAgICAgICAgSlNWYWx1
ZSogaXRlbVZhbHVlID0gYXJyYXktPmdldEl0ZW0oaSk7CisgICAgICAgIGludCBwaXhlbFZhbHVl
OworICAgICAgICBpZiAoIWl0ZW1WYWx1ZS0+aXNOdW1iZXIoKSB8fCAhaXRlbVZhbHVlLT5nZXRU
cnVuY2F0ZWRJbnQzMihwaXhlbFZhbHVlKSkgeworICAgICAgICAgICAgaWYgKCFpdGVtVmFsdWUt
PmlzVW5kZWZpbmVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywg
VHlwZUVycm9yKTsKKyAgICAgICAgICAgIHBpeGVsVmFsdWUgPSAwOworICAgICAgICB9CisgICAg
ICAgIGlmIChwaXhlbFZhbHVlICYgfjB4RkYpIHsKKyAgICAgICAgICAgIGlmIChwaXhlbFZhbHVl
IDwgMCkKKyAgICAgICAgICAgICAgICBwaXhlbFZhbHVlID0gMDsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKHBpeGVsVmFsdWUgPiAyNTUpCisgICAgICAgICAgICAgICAgcGl4ZWxWYWx1ZSA9IDI1NTsK
KyAgICAgICAgfQorICAgICAgICBkYXRhQnVmZmVyLm1fZGF0YVtpXSA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KHBpeGVsVmFsdWUpOworICAgIH0KKyAgICAKKyAgICBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQqIGNvbnRleHQgPSBpbXBsKCk7CisgICAgY29udGV4dC0+cHV0SW1hZ2VEYXRh
KGRhdGFCdWZmZXIsIEludFBvaW50KHhQb3MsIHlQb3MpKTsKKyAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsgICAgCit9CisgICAgCiBKU1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
c2V0U2hhZG93KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJncykKIHsgCiAgICAgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gaW1wbCgpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9XZWJDb3JlL2h0bWwvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCBkYzg1N2U2Li5mNDMzNjIwIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJD
b3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwNyBUcm9sbHRlY2ggQVNBCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBA
YXRva2VyLmNvbT4KICAqCkBAIC0xMDEzLDYgKzEwMTMsNTEgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmRyYXdJbWFnZUZyb21SZWN0KEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLAog
ICAgIGMtPmRyYXdJbWFnZShjYWNoZWRJbWFnZS0+aW1hZ2UoKSwgZGVzdFJlY3QsIEZsb2F0UmVj
dChzeCwgc3ksIHN3LCBzaCksIG9wKTsKIH0KIAordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OnB1dEltYWdlRGF0YShjb25zdCBJbWFnZURhdGEmIGRhdGEsIGNvbnN0IEludFBvaW50JiBk
ZXN0KQoreworICAgIC8vIENsaXAgdG8gZGVzdGluYXRpb24KKyAgICBpZiAoZGVzdC54KCkgPiBt
X2NhbnZhcy0+d2lkdGgoKSB8fCBkZXN0LnkoKSA+IG1fY2FudmFzLT5oZWlnaHQoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIGludCBzdGFydFgsIG9yaWdpblg7CisgICAgaWYgKGRlc3Qu
eCgpID4gMCkgeworICAgICAgICBzdGFydFggPSBkZXN0LngoKTsKKyAgICAgICAgb3JpZ2luWCA9
IDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhcnRYID0gMDsKKyAgICAgICAgb3JpZ2luWCA9
IC1kZXN0LngoKTsKKyAgICB9CisgICAgCisgICAgaW50IHN0YXJ0WSwgb3JpZ2luWTsKKyAgICBp
ZiAoZGVzdC55KCkgPiAwKSB7CisgICAgICAgIHN0YXJ0WSA9IGRlc3QueSgpOworICAgICAgICBv
cmlnaW5ZID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBzdGFydFkgPSAwOworICAgICAgICBv
cmlnaW5ZID0gLWRlc3QueSgpOworICAgIH0KKyAgICAKKyAgICBpbnQgZW5kWCA9IGRlc3QueCgp
ICsgZGF0YS5tX3dpZHRoOworICAgIGlmIChlbmRYID4gbV9jYW52YXMtPndpZHRoKCkpCisgICAg
ICAgIGVuZFggPSBtX2NhbnZhcy0+d2lkdGgoKTsKKyAgICBpbnQgZW5kWSA9IGRlc3QueSgpICsg
ZGF0YS5tX2hlaWdodDsKKyAgICBpZiAoZW5kWSA+IG1fY2FudmFzLT5oZWlnaHQoKSkKKyAgICAg
ICAgZW5kWSA9IG1fY2FudmFzLT5oZWlnaHQoKTsKKyAgICBpbnQgYmxpdFdpZHRoID0gZW5kWCAt
IHN0YXJ0WDsKKyAgICBpbnQgYmxpdEhlaWdodCA9IGVuZFkgLSBzdGFydFk7CisKKyAgICAvLyBE
cmF3IHRoZSBjbGlwCisgICAgSW50UG9pbnQgcmVhbERlc3Qoc3RhcnRYLCBzdGFydFkpOworICAg
IEludFJlY3Qgc3JjUmVjdChvcmlnaW5YLCBvcmlnaW5ZLCBibGl0V2lkdGgsIGJsaXRIZWlnaHQp
OworICAgIHB1dEltYWdlRGF0YShkYXRhLCBzcmNSZWN0LCByZWFsRGVzdCk7CisKKyAgICAvLyBD
YW4ndCB1c2UgdGhpcy0+d2lsbERyYXcgZGlyZWN0bHkgYXMgaXQgd2lsbCBhY2NvdW50IGZvciB0
aGUgY29udGV4dAorICAgIC8vIHRyYW5zZm9ybSB0aGF0IHdlJ3ZlIGNvbXBsZXRlbHkgYnlwYXNz
ZWQKKyAgICBGbG9hdFJlY3QgcmVwYWludFJlY3Qoc3RhcnRYLCBzdGFydFksIGJsaXRXaWR0aCwg
YmxpdEhlaWdodCk7CisgICAgbV9jYW52YXMtPndpbGxEcmF3KHJlcGFpbnRSZWN0KTsKKyAgICBy
ZXR1cm47Cit9CisKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRBbHBoYShmbG9h
dCBhbHBoYSkKIHsKICAgICBzZXRHbG9iYWxBbHBoYShhbHBoYSk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggYi9XZWJDb3JlL2h0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmgKaW5kZXggZDI2YmU0ZS4uYmU1ZDE1ZiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCisrKyBiL1dlYkNvcmUvaHRt
bC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUsOCArNDUsMjUgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKICAgICBjbGFz
cyBIVE1MQ2FudmFzRWxlbWVudDsKICAgICBjbGFzcyBIVE1MSW1hZ2VFbGVtZW50OworICAgIGNs
YXNzIEludFBvaW50OworICAgIGNsYXNzIEludFJlY3Q7CiAKICAgICB0eXBlZGVmIGludCBFeGNl
cHRpb25Db2RlOworICAgIAorICAgIHN0cnVjdCBJbWFnZURhdGEgeworICAgICAgICB1bnNpZ25l
ZCBtX3dpZHRoOworICAgICAgICB1bnNpZ25lZCBtX2hlaWdodDsKKyAgICAgICAgLy8gVW5wcmVt
dWx0aXBsaWVkIGRhdGEgZm9yIDgtYml0IHBlciBjaGFubmVsIFJHQkEKKyAgICAgICAgVmVjdG9y
PHVuc2lnbmVkIGNoYXI+IG1fZGF0YTsKKworICAgICAgICAvLyBCb3VuZHMgY2hlY2tpbmcgc2hv
dWxkIGFscmVhZHkgaGF2ZSBiZWVuIGNvbXBsZXRlZCBiZWZvcmUgYXR0ZW1wdGluZworICAgICAg
ICAvLyB0byBjb25zdHJ1Y3QgdGhlIEltYWdlRGF0YQorICAgICAgICBJbWFnZURhdGEodW5zaWdu
ZWQgdywgdW5zaWduZWQgaCkKKyAgICAgICAgOiBtX3dpZHRoKHcpCisgICAgICAgICwgbV9oZWln
aHQoaCkKKyAgICAgICAgLCBtX2RhdGEodyAqIGggKiA0KQorICAgICAgICB7fQorICAgIH07CiAK
ICAgICBjbGFzcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQgOiBwdWJsaWMgUmVmQ291bnRlZDxD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+IHsKICAgICBwdWJsaWM6CkBAIC0xNTEsNiArMTY4LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGRyYXdJbWFnZUZyb21SZWN0KEhU
TUxJbWFnZUVsZW1lbnQqLCBmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCwK
ICAgICAgICAgICAgIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZHcsIGZsb2F0IGRoLCBjb25z
dCBTdHJpbmcmIGNvbXBvc2l0ZU9wZXJhdGlvbik7CiAKKyAgICAgICAgdm9pZCBwdXRJbWFnZURh
dGEoY29uc3QgSW1hZ2VEYXRhJiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICAgICAgCiAgICAgICAg
IHZvaWQgc2V0QWxwaGEoZmxvYXQpOwogCiAgICAgICAgIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0
aW9uKGNvbnN0IFN0cmluZyYpOwpAQCAtMjAzLDYgKzIyMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICBIVE1MQ2FudmFzRWxlbWVudCogbV9jYW52YXM7CiAgICAgICAgIFZlY3Rv
cjxTdGF0ZSwgMT4gbV9zdGF0ZVN0YWNrOworICAgICAgICB2b2lkIHB1dEltYWdlRGF0YShjb25z
dCBJbWFnZURhdGEmLCBjb25zdCBJbnRSZWN0JiBzb3VyY2UsIGNvbnN0IEludFBvaW50JiBkZXN0
KTsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmlkbCBiL1dlYkNvcmUvaHRtbC9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuaWRsCmluZGV4IGM5ZGEyYzIuLmI5NmVjOWQgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCisrKyBiL1dlYkNvcmUv
aHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCkBAIC05NSw2ICs5NSw3IEBAIG1vZHVs
ZSBodG1sIHsKICAgICAgICAgW0N1c3RvbV0gdm9pZCBzdHJva2VSZWN0KC8qIDQgKi8pOwogICAg
ICAgICBbQ3VzdG9tXSB2b2lkIGRyYXdJbWFnZSgvKiAzICovKTsKICAgICAgICAgW0N1c3RvbV0g
dm9pZCBkcmF3SW1hZ2VGcm9tUmVjdCgvKiAxMCAqLyk7CisgICAgICAgIFtDdXN0b21dIHZvaWQg
cHV0SW1hZ2VEYXRhKC8qIDMgKi8pOwogICAgICAgICBbQ3VzdG9tXSB2b2lkIHNldFNoYWRvdygv
KiAzICovKTsKICAgICAgICAgW0N1c3RvbV0gdm9pZCBjcmVhdGVQYXR0ZXJuKC8qIDIgKi8pOwog
ICAgICAgICAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRDRy5jcHAgYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ0cuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MTczMjYKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ0cuY3BwCkBAIC0wLDAg
KzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5oIgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1
ZGUgIkludFJlY3QuaCIKKworI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6cHV0SW1hZ2VEYXRhKGNvbnN0IEltYWdlRGF0YSYgZGF0YSwgY29uc3QgSW50UmVjdCYgc291
cmNlLCBjb25zdCBJbnRQb2ludCYgZGVzdCkKK3sgCisgICAgR3JhcGhpY3NDb250ZXh0KiBjID0g
ZHJhd2luZ0NvbnRleHQoKTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NF
UlQoQ0dCaXRtYXBDb250ZXh0R2V0Qml0bWFwSW5mbyhjLT5wbGF0Zm9ybUNvbnRleHQoKSkpOwor
ICAgIHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihD
R0JpdG1hcENvbnRleHRHZXREYXRhKGMtPnBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgQVNTRVJU
KGJ1ZmZlcik7CisgICAgZm9yIChpbnQgeSA9IGRlc3QueSgpLCBvcmlnaW5ZID0gc291cmNlLnko
KTsgeSA8IGRlc3QueSgpICsgc291cmNlLmhlaWdodCgpOyArK3ksICsrb3JpZ2luWSkgeworICAg
ICAgICBpbnQgb3ggPSBzb3VyY2UueCgpOworICAgICAgICAvLyBBY2N1cnNlZCBmbGlwcGVkIHkg
YXhpcworICAgICAgICB1bnNpZ25lZCBjaGFyKiBkZXN0Um93ID0gYnVmZmVyICsgKG1fY2FudmFz
LT5oZWlnaHQoKSAtIHkgLSAxKSAqIG1fY2FudmFzLT53aWR0aCgpICogNDsKKyAgICAgICAgY29u
c3QgdW5zaWduZWQgY2hhciogc3JjUm93ID0gZGF0YS5tX2RhdGEuZGF0YSgpICsgb3JpZ2luWSAq
IHNvdXJjZS53aWR0aCgpICo0OworICAgICAgICBmb3IgKGludCB4ID0gZGVzdC54KCk7IHggPCBk
ZXN0LngoKSArIHNvdXJjZS53aWR0aCgpOyArK3gsICsrb3gpIHsKKyAgICAgICAgICAgIGludCBh
bHBoYSA9IHNyY1Jvd1tveCo0ICsgM107CisgICAgICAgICAgICBkZXN0Um93W3gqNCswXSA9IHNy
Y1Jvd1tveCo0ICsgMF0gKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgICAgIGRlc3RSb3dbeCo0KzFd
ID0gc3JjUm93W294KjQgKyAxXSAqIGFscGhhIC8gMjU1OworICAgICAgICAgICAgZGVzdFJvd1t4
KjQrMl0gPSBzcmNSb3dbb3gqNCArIDJdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICBkZXN0
Um93W3gqNCszXSA9IGFscGhhOworICAgICAgICB9CisgICAgfQorfQorCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>18618</attachid>
            <date>2008-01-23 00:47:39 -0800</date>
            <delta_ts>2008-02-23 22:47:10 -0800</delta_ts>
            <desc>A hopefully &quot;complete&quot; patch</desc>
            <filename>putImageData.diff</filename>
            <type>text/plain</type>
            <size>26693</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxYzg3NDQ1Li4zODAyYTY4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDgtMDEt
MjMgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0Y2FzZSBmb3IgQ2FudmFzLnB1dEltYWdl
RGF0YQorCisgICAgICAgICogZmFzdC9jYW52YXMvcHV0LWltYWdlLWRhdGEtZXhwZWN0ZWQuY2hl
Y2tzdW06IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3B1dC1pbWFnZS1kYXRhLWV4cGVj
dGVkLnBuZzogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvcHV0LWltYWdlLWRhdGEtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy9wdXQtaW1hZ2UtZGF0YS5o
dG1sOiBBZGRlZC4KKwogMjAwOC0wMS0yMiAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIGFuZCBBZGFtLgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvcHV0LWltYWdlLWRhdGEtZXhwZWN0ZWQuY2hlY2tz
dW0gYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9wdXQtaW1hZ2UtZGF0YS1leHBlY3RlZC5jaGVj
a3N1bQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmFlNDk1Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvcHV0LWltYWdlLWRhdGEtZXhwZWN0
ZWQuY2hlY2tzdW0KQEAgLTAsMCArMSBAQAorMzA2ZTdjMzdjYzRjYWRlMmNlMTcxODg1Y2I1ZGVh
MzgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy9wdXQtaW1hZ2UtZGF0YS1leHBlY3RlZC5wbmcgYi9MYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy9wdXQtaW1hZ2UtZGF0YS1leHBlY3RlZC5wbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYmY4N2NlZQpCaW5hcnkgZmlsZXMgL2Rldi9udWxsIGFuZCBiL0xheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3B1dC1pbWFnZS1kYXRhLWV4cGVjdGVkLnBuZyBkaWZmZXIKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3B1dC1pbWFnZS1kYXRhLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3B1dC1pbWFnZS1kYXRhLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODJjYjE3Ci0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvcHV0LWltYWdlLWRhdGEtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsOSBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRl
clZpZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAK
KyAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIFJlbmRlckJv
ZHkge0JPRFl9IGF0ICg4LDgpIHNpemUgNzg0eDU4NAorICAgICAgUmVuZGVySFRNTENhbnZhcyB7
Q0FOVkFTfSBhdCAoMCwwKSBzaXplIDIwMHgyMDAKKyAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBh
dCAoMCwwKSBzaXplIDB4MAorICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUg
MHgwCisgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAweDAKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL3B1dC1pbWFnZS1kYXRhLmh0bWwgYi9MYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy9wdXQtaW1hZ2UtZGF0YS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjljZmYyZGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy9wdXQtaW1hZ2UtZGF0YS5odG1sCkBAIC0wLDAgKzEsMzQgQEAKKzxodG1sPgor
CTxoZWFkPgorCQk8dGl0bGU+cHV0SW1hZ2VEYXRhIHRlc3Q8L3RpdGxlPgorCQk8c2NyaXB0Pgor
CQkJZnVuY3Rpb24gdGVzdCgpCisJCSAgICB7CisJCQkJdmFyIGRhdGEgPSBbXTsKKwkJCQlmb3Ig
KHZhciB5ID0gMDsgeSA8IDIwMDsgeSsrKSB7CisJCQkJCWZvciAodmFyIHggPSAwOyB4IDwgMjAw
OyB4KyspIHsKKwkJCQkJCWRhdGFbeSAqIDIwMCAqIDQgKyB4ICogNCArIDBdID0gMDsKKwkJCQkJ
CWRhdGFbeSAqIDIwMCAqIDQgKyB4ICogNCArIDFdID0gMTI4OworCQkJCQkJZGF0YVt5ICogMjAw
ICogNCArIHggKiA0ICsgMl0gPSAwOworCQkJCQkJZGF0YVt5ICogMjAwICogNCArIHggKiA0ICsg
M10gPSAyNTU7CisJCQkJCX0KKwkJCQl9CisJCQkJdmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJjYW52YXMiKS5nZXRDb250ZXh0KCIyZCIpOworCQkgICAgICAgIGNhbnZhcy5m
aWxsU3R5bGUgPSAicmVkIjsKKwkJICAgICAgICBjYW52YXMuZmlsbFJlY3QoMCwyMDAsMjAwLDIw
MCk7CisJCSAgICAgICAgCisJCQkJdmFyIG9iamVjdCA9IHt9OworCQkJCW9iamVjdC53aWR0aCA9
IDIwMDsKKwkJCQlvYmplY3QuaGVpZ2h0ID0gMjAwOworCQkJCW9iamVjdC5kYXRhID0gZGF0YTsK
KwkJCQljYW52YXMucHV0SW1hZ2VEYXRhKG9iamVjdCwgMCwgMCk7CisJCSAgICB9CisJCTwvc2Ny
aXB0PgorCTwvaGVhZD4KKwk8Ym9keT4KKwkJPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iMjAw
IiBoZWlnaHQ9IjIwMCIgc3R5bGU9IndpZHRoOjIwMHB4O2hlaWdodDoyMDBweDsiPjwvY2FudmFz
PgorCQk8c2NyaXB0PgorICAgIAkJdGVzdCgpOworCQk8L3NjcmlwdD4KKwk8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDg0MDcwYTguLmQxYjAzN2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMDgtMDEtMjMgIE9saXZlciBI
dW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKyAgICAgICAgCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2OTU0IC0tIFN1cHBvcnQgY2FudmFzLnB1dEltYWdlRGF0YQorICAgICAgICAKKyAg
ICAgICAgQWRkIHN1cHBvcnQgZm9yIHB1dEltYWdlRGF0YSB0byB0aGUgQ0cgYmFja2VuZGVkIGNh
bnZhcy4KKworICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy9wdXQtaW1hZ2UtZGF0YS5odG1sCisK
KyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICAg
QWRkIGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ0cuY3BwIHRvIHRoZSBwcm9qZWN0CisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1h
Z2VEYXRhKToKKyAgICAgICAgICBQZXJmb3JtIHRoZSBjb252ZXJzaW9uIGZyb20gSlMgZGF0YSB0
byB1bmJveGVkIGRhdGEgZm9yIHB1dEltYWdlRGF0YSBpbXBsZW1lbnRhdGlvbgorCisgICAgICAg
ICogaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAgIFBlcmZv
cm1lZCB0aGUgY3Jvc3MgcGxhdGZvcm0gY2xpcHBpbmcgYW5kIGJvdW5kcyBsb2dpYyBmb3IgcHV0
SW1hZ2VEYXRhCisgICAgICAgICAgCisgICAgICAgICogaHRtbC9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlRGF0YTo6SW1hZ2VEYXRhKToKKyAgICAg
ICAgICBEZWZpbmVkIEltYWdlRGF0YSB0eXBlIGFuZCBkZWNsYXJlIHRoZSBwbGF0Zm9ybSBpbXBs
ZW1lbnRhdGlvbiBvZiBwdXRJbWFnZURhdGEKKyAgICAgICAgICAKKyAgICAgICAgKiBodG1sL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5pZGw6CisgICAgICAgICAgQWRkIHB1dEltYWdlRGF0YQor
ICAgICAgICAgIAorICAgICAgICAqIGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ0cuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0
SW1hZ2VEYXRhKToKKyAgICAgICAgICBQbGF0Zm9ybSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBv
ZiB0aGUgZGF0YSBibGl0CisKKyAgICAgICAgKiBodG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REd0ay5jcHA6IEFkZGVkLgorICAgICAgICAqIGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
UXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFd4
LmNwcDogQWRkZWQuCisgICAgICAgICAgQnVpbGQgc3R1YnMKKworICAgICAgICAqIHdlYmNvcmUt
d3guYmtsOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNvcmUucHJv
OgorICAgICAgICAgIHByb2plY3QgdXBkYXRlcworCiAyMDA4LTAxLTIyICBEYW4gQmVybnN0ZWlu
ICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRlbGUgUGV0ZXJzb24u
CmRpZmYgLS1naXQgYS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbQppbmRleCAxZTg1ZDA0Li5jZjYzNWFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL0dOVW1ha2Vm
aWxlLmFtCisrKyBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KQEAgLTkxMCw2ICs5MTAsNyBAQCB3
ZWJraXRndGtfaGVhZGVycyArPSBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEhl
bHBlci5oCiAKIHdlYmtpdGd0a19zb3VyY2VzICs9IFwKKwlXZWJDb3JlL2h0bWwvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJER3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlw
aFBhZ2VUcmVlTm9kZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhXaWR0
aE1hcC5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBcCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRl
eCAyZDYxNWU5Li5jYWFjZWM5IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBi
L1dlYkNvcmUvV2ViQ29yZS5wcm8KQEAgLTg4NSw2ICs4ODUsNyBAQCBxdC1wb3J0IHsKICAgICAk
JFBXRC9wbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVyLmgKIAogICAgIFNP
VVJDRVMgKz0gXAorICAgIGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEUXQuY3BwIFwKICAg
ICBwYWdlL3F0L0RyYWdDb250cm9sbGVyUXQuY3BwIFwKICAgICBwYWdlL3F0L0V2ZW50SGFuZGxl
clF0LmNwcCBcCiAgICAgcGFnZS9xdC9GcmFtZVF0LmNwcCBcCkBAIC0xMDAwLDYgKzEwMDEsNyBA
QCBndGstcG9ydCB7CiAgICAgICAgIC4uL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvSW5zcGVj
dG9yQ2xpZW50R3RrLmggXAogICAgICAgICAuLi9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L1Bh
c3RlYm9hcmRIZWxwZXJHdGsuaAogICAgIFNPVVJDRVMgKz0gXAorICAgICAgICBodG1sL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyREd0ay5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9T
dHJpbmdUcnVuY2F0b3IuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Q29kZWNJQ1Uu
Y3BwIFwKICAgICAgICAgcGxhdGZvcm0vdGV4dC9UZXh0Qm91bmRhcmllc0lDVS5jcHAgXApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBlOTNmZWQ1Li5jMGQ2
ZTFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTcx
OCw2ICsxNzE4LDcgQEAKIAkJQTdDRkIzRDIwQjdFRDEwQTAwNzBDMzJEIC8qIERyYWdJbWFnZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdDRkIzRDAw
QjdFRDEwQTAwNzBDMzJEIC8qIERyYWdJbWFnZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUE3Q0ZCM0Q1MEI3RUQxMTgwMDcwQzMyRCAvKiBEcmFn
SW1hZ2VNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBBN0NGQjNENDBCN0VEMTE4MDA3MEMzMkQgLyogRHJhZ0ltYWdlTWFjLm1tICovOyB9OwogCQlB
N0QzQzUyNDBCNTc2QjRCMDAyQ0E0NTAgLyogUGFzdGVib2FyZEhlbHBlci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTdEM0M1MjMwQjU3NkI0QjAwMkNB
NDUwIC8qIFBhc3RlYm9hcmRIZWxwZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlBN0VFRjVGNzBENDVEQkVFMDAwMDczNDMgLyogQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTdFRUY1RjYwRDQ1REJFRTAwMDA3MzQzIC8qIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRENHLmNwcCAqLzsgfTsKIAkJQTgwOUYxNDcwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRl
clNWR0dyYWRpZW50U3RvcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQTgwOUYxNDUwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3Rv
cC5oICovOyB9OwogCQlBODA5RjE0ODBCNzM3OTNCMDAyRTREN0YgLyogUmVuZGVyU1ZHR3JhZGll
bnRTdG9wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEE4MDlGMTQ2MEI3Mzc5M0EwMDJFNEQ3RiAvKiBSZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwICov
OyB9OwogCQlBODA5RjFBQTBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFp
bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODA5
RjFBODBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmggKi87IH07
CkBAIC01OTAwLDYgKzU5MDEsNyBAQAogCQlBN0NGQjNEMDBCN0VEMTBBMDA3MEMzMkQgLyogRHJh
Z0ltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEcmFnSW1hZ2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTdDRkIzRDQwQjdFRDExODAwNzBDMzJEIC8q
IERyYWdJbWFnZU1hYy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBEcmFnSW1hZ2VNYWMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3RDNDNTIz
MEI1NzZCNEIwMDJDQTQ1MCAvKiBQYXN0ZWJvYXJkSGVscGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBhc3RlYm9hcmRIZWxwZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTdFRUY1RjYwRDQ1REJFRTAwMDA3MzQzIC8qIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRENHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgw
OUYxNDUwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRlclNWR0dyYWRpZW50U3RvcC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdHcmFkaWVudFN0b3AuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTgwOUYxNDYwQjczNzkzQTAwMkU0RDdGIC8qIFJlbmRl
clNWR0dyYWRpZW50U3RvcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBSZW5kZXJTVkdHcmFkaWVudFN0b3AuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBODA5RjFBODBCNzM3RkI2MDAyRTREN0YgLyogUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR0hpZGRlbkNvbnRhaW5l
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTc0Myw2ICs5NzQ1LDcgQEAKIAkJ
CQk5M0VFQzFGMjA5QzI4Nzc3MDBDNTE1RDEgLyogQ2FudmFzUGF0dGVybi5oICovLAogCQkJCTkz
MENBQjhGMDlDNDlGMUIwMDIyOUMwNCAvKiBDYW52YXNQYXR0ZXJuLmlkbCAqLywKIAkJCQk5M0VF
QzFFRDA5QzI4Nzc3MDBDNTE1RDEgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcCAqLywK
KwkJCQlBN0VFRjVGNjBENDVEQkVFMDAwMDczNDMgLyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
Q0cuY3BwICovLAogCQkJCTkzRUVDMUVFMDlDMjg3NzcwMEM1MTVEMSAvKiBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaCAqLywKIAkJCQk5MzBDQUFENjA5QzQ5NUI2MDAyMjlDMDQgLyogQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmlkbCAqLywKIAkJCQk5M0VFQzI3MDA5QzMyMTg4MDBDNTE1RDEg
LyogQ2FudmFzU3R5bGUuY3BwICovLApAQCAtMTU3ODgsNiArMTU3OTEsNyBAQAogCQkJCUFCRkU3
RTEyMEQzMkZBRjYwMDY2RjREMiAvKiBNZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCMjM3QzhBNzBEMzQ0RDExMDAxM0Y3MDcgLyogU1ZHRm9udERhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTRFRUZGQzgwRDM0NTUwQzAwNDY5QTU4IC8qIEpTQXVkaW9Db25z
dHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQlBN0VFRjVGNzBENDVEQkVFMDAwMDczNDMg
LyogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwog
CQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9t
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0
b20uY3BwCmluZGV4IDY4MzI4ZjQuLjZhZGQ3YTcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUv
YmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCkBAIC0yOCwx
MiArMjgsMTYgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJIVE1MQ2FudmFz
RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJJbnRS
ZWN0LmgiCiAjaW5jbHVkZSAiSlNDYW52YXNHcmFkaWVudC5oIgogI2luY2x1ZGUgIkpTQ2FudmFz
UGF0dGVybi5oIgogI2luY2x1ZGUgIkpTSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJK
U0hUTUxJbWFnZUVsZW1lbnQuaCIKICNpbmNsdWRlICJranNfaHRtbC5oIgogCisjaW5jbHVkZSA8
a2pzL2FycmF5X2luc3RhbmNlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCiB1c2luZyBu
YW1lc3BhY2UgS0pTOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0yNTgsNiArMjYyLDg5IEBA
IEpTVmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2VGcm9tUmVjdChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7ICAgIAog
fQogCitKU1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VEYXRhKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYgYXJncykKK3sKKyAgICBKU1ZhbHVlKiB2YWx1ZSA9
IGFyZ3NbMF07CisgICAgaWYgKCF2YWx1ZS0+aXNPYmplY3QoKSB8fCBhcmdzLnNpemUoKSAhPSAz
KQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworCisgICAgaW50
IHhQb3MgPSBhcmdzWzFdLT50b0ludDMyKGV4ZWMpOyAgIAorICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkgeworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgIH0KKyAgICAKKyAgICBpbnQgeVBv
cyA9IGFyZ3NbMl0tPnRvSW50MzIoZXhlYyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSB7CisgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAgICAgIHJldHVybiB0aHJv
d0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisgICAgfQorCisgICAgSlNPYmplY3QqIGltYWdlRGF0
YSA9IHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4odmFsdWUpOworICAgIAorICAgIEpTVmFsdWUqIGpz
V2lkdGggPSBpbWFnZURhdGEtPmdldChleGVjLCAid2lkdGgiKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpIHsKKyAgICAgICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKyAgICB9CisgICAgCisgICAgSlNW
YWx1ZSoganNIZWlnaHQgPSBpbWFnZURhdGEtPmdldChleGVjLCAiaGVpZ2h0Iik7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7
CisgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CisgICAgfQorICAg
IAorICAgIEpTVmFsdWUqIGRhdGEgPSBpbWFnZURhdGEtPmdldChleGVjLCAiZGF0YSIpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlv
bigpOworICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgIH0K
KyAgICAKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IGhlaWdodDsKKyAgICAKKyAgICBpZiAoIWpz
V2lkdGgtPmdldFRydW5jYXRlZEludDMyKHdpZHRoKSB8fCAhanNIZWlnaHQtPmdldFRydW5jYXRl
ZEludDMyKGhlaWdodCkgfHwgd2lkdGggPD0gMCB8fCBoZWlnaHQgPD0gMAorICAgICAgICB8fCAh
ZGF0YS0+aXNPYmplY3QoKSB8fCAhc3RhdGljX2Nhc3Q8SlNPYmplY3QgKj4oZGF0YSktPmluaGVy
aXRzKCZBcnJheUluc3RhbmNlOjppbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhl
YywgVHlwZUVycm9yKTsKKyAgICAKKyAgICB1bnNpZ25lZCBidWZmZXJTaXplID0gd2lkdGggKiBo
ZWlnaHQ7CisgICAgCisgICAgLy8gQm91bmRhcnkgY2hlY2tpbmcKKyAgICBpZiAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KHdpZHRoKSA+PSBidWZmZXJTaXplIHx8IGJ1ZmZlclNpemUgPj0gKGJ1ZmZl
clNpemUgKiA0KSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsK
KyAKKyAgICBidWZmZXJTaXplICo9IDQ7CisgICAgCisgICAgQXJyYXlJbnN0YW5jZSogYXJyYXkg
PSBzdGF0aWNfY2FzdDxBcnJheUluc3RhbmNlKj4oZGF0YSk7CisgICAgaWYgKGFycmF5LT5nZXRM
ZW5ndGgoKSAhPSBidWZmZXJTaXplKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBU
eXBlRXJyb3IpOworICAgIAorICAgIEltYWdlRGF0YSBkYXRhQnVmZmVyKHdpZHRoLCBoZWlnaHQp
OworICAgIGlmICghZGF0YUJ1ZmZlci5tX2RhdGEuZGF0YSgpKQorICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBidWZmZXJTaXplOyArK2kpIHsKKyAgICAgICAgSlNWYWx1ZSogaXRlbVZhbHVlID0gYXJy
YXktPmdldEl0ZW0oaSk7CisgICAgICAgIGludCBwaXhlbFZhbHVlOworICAgICAgICBpZiAoIWl0
ZW1WYWx1ZS0+aXNOdW1iZXIoKSB8fCAhaXRlbVZhbHVlLT5nZXRUcnVuY2F0ZWRJbnQzMihwaXhl
bFZhbHVlKSkgeworICAgICAgICAgICAgaWYgKCFpdGVtVmFsdWUtPmlzVW5kZWZpbmVkKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yKTsKKyAgICAg
ICAgICAgIHBpeGVsVmFsdWUgPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChwaXhlbFZhbHVl
ICYgfjB4RkYpIHsKKyAgICAgICAgICAgIGlmIChwaXhlbFZhbHVlIDwgMCkKKyAgICAgICAgICAg
ICAgICBwaXhlbFZhbHVlID0gMDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHBpeGVsVmFsdWUgPiAy
NTUpCisgICAgICAgICAgICAgICAgcGl4ZWxWYWx1ZSA9IDI1NTsKKyAgICAgICAgfQorICAgICAg
ICBkYXRhQnVmZmVyLm1fZGF0YVtpXSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KHBpeGVs
VmFsdWUpOworICAgIH0KKyAgICAKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRl
eHQgPSBpbXBsKCk7CisgICAgY29udGV4dC0+cHV0SW1hZ2VEYXRhKGRhdGFCdWZmZXIsIEludFBv
aW50KHhQb3MsIHlQb3MpKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsgICAgCit9CisgICAg
CiBKU1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93KEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgTGlzdCYgYXJncykKIHsgCiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEKiBjb250ZXh0ID0gaW1wbCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAgYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcAppbmRleCBkYzg1N2U2Li5mNDMzNjIwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNB
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHBAYXRva2VyLmNvbT4KICAqCkBA
IC0xMDEzLDYgKzEwMTMsNTEgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJ
bWFnZUZyb21SZWN0KEhUTUxJbWFnZUVsZW1lbnQqIGltYWdlLAogICAgIGMtPmRyYXdJbWFnZShj
YWNoZWRJbWFnZS0+aW1hZ2UoKSwgZGVzdFJlY3QsIEZsb2F0UmVjdChzeCwgc3ksIHN3LCBzaCks
IG9wKTsKIH0KIAordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdlRGF0YShj
b25zdCBJbWFnZURhdGEmIGRhdGEsIGNvbnN0IEludFBvaW50JiBkZXN0KQoreworICAgIC8vIENs
aXAgdG8gZGVzdGluYXRpb24KKyAgICBpZiAoZGVzdC54KCkgPiBtX2NhbnZhcy0+d2lkdGgoKSB8
fCBkZXN0LnkoKSA+IG1fY2FudmFzLT5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIGludCBzdGFydFgsIG9yaWdpblg7CisgICAgaWYgKGRlc3QueCgpID4gMCkgeworICAgICAg
ICBzdGFydFggPSBkZXN0LngoKTsKKyAgICAgICAgb3JpZ2luWCA9IDA7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgc3RhcnRYID0gMDsKKyAgICAgICAgb3JpZ2luWCA9IC1kZXN0LngoKTsKKyAgICB9
CisgICAgCisgICAgaW50IHN0YXJ0WSwgb3JpZ2luWTsKKyAgICBpZiAoZGVzdC55KCkgPiAwKSB7
CisgICAgICAgIHN0YXJ0WSA9IGRlc3QueSgpOworICAgICAgICBvcmlnaW5ZID0gMDsKKyAgICB9
IGVsc2UgeworICAgICAgICBzdGFydFkgPSAwOworICAgICAgICBvcmlnaW5ZID0gLWRlc3QueSgp
OworICAgIH0KKyAgICAKKyAgICBpbnQgZW5kWCA9IGRlc3QueCgpICsgZGF0YS5tX3dpZHRoOwor
ICAgIGlmIChlbmRYID4gbV9jYW52YXMtPndpZHRoKCkpCisgICAgICAgIGVuZFggPSBtX2NhbnZh
cy0+d2lkdGgoKTsKKyAgICBpbnQgZW5kWSA9IGRlc3QueSgpICsgZGF0YS5tX2hlaWdodDsKKyAg
ICBpZiAoZW5kWSA+IG1fY2FudmFzLT5oZWlnaHQoKSkKKyAgICAgICAgZW5kWSA9IG1fY2FudmFz
LT5oZWlnaHQoKTsKKyAgICBpbnQgYmxpdFdpZHRoID0gZW5kWCAtIHN0YXJ0WDsKKyAgICBpbnQg
YmxpdEhlaWdodCA9IGVuZFkgLSBzdGFydFk7CisKKyAgICAvLyBEcmF3IHRoZSBjbGlwCisgICAg
SW50UG9pbnQgcmVhbERlc3Qoc3RhcnRYLCBzdGFydFkpOworICAgIEludFJlY3Qgc3JjUmVjdChv
cmlnaW5YLCBvcmlnaW5ZLCBibGl0V2lkdGgsIGJsaXRIZWlnaHQpOworICAgIHB1dEltYWdlRGF0
YShkYXRhLCBzcmNSZWN0LCByZWFsRGVzdCk7CisKKyAgICAvLyBDYW4ndCB1c2UgdGhpcy0+d2ls
bERyYXcgZGlyZWN0bHkgYXMgaXQgd2lsbCBhY2NvdW50IGZvciB0aGUgY29udGV4dAorICAgIC8v
IHRyYW5zZm9ybSB0aGF0IHdlJ3ZlIGNvbXBsZXRlbHkgYnlwYXNzZWQKKyAgICBGbG9hdFJlY3Qg
cmVwYWludFJlY3Qoc3RhcnRYLCBzdGFydFksIGJsaXRXaWR0aCwgYmxpdEhlaWdodCk7CisgICAg
bV9jYW52YXMtPndpbGxEcmF3KHJlcGFpbnRSZWN0KTsKKyAgICByZXR1cm47Cit9CisKIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRBbHBoYShmbG9hdCBhbHBoYSkKIHsKICAgICBz
ZXRHbG9iYWxBbHBoYShhbHBoYSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmggYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmgKaW5kZXggZDI2YmU0ZS4uYmU1ZDE1ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5oCisrKyBiL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDUsOCArNDUsMjUgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKICAgICBjbGFzcyBIVE1MQ2FudmFzRWxlbWVu
dDsKICAgICBjbGFzcyBIVE1MSW1hZ2VFbGVtZW50OworICAgIGNsYXNzIEludFBvaW50OworICAg
IGNsYXNzIEludFJlY3Q7CiAKICAgICB0eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworICAgIAor
ICAgIHN0cnVjdCBJbWFnZURhdGEgeworICAgICAgICB1bnNpZ25lZCBtX3dpZHRoOworICAgICAg
ICB1bnNpZ25lZCBtX2hlaWdodDsKKyAgICAgICAgLy8gVW5wcmVtdWx0aXBsaWVkIGRhdGEgZm9y
IDgtYml0IHBlciBjaGFubmVsIFJHQkEKKyAgICAgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IG1f
ZGF0YTsKKworICAgICAgICAvLyBCb3VuZHMgY2hlY2tpbmcgc2hvdWxkIGFscmVhZHkgaGF2ZSBi
ZWVuIGNvbXBsZXRlZCBiZWZvcmUgYXR0ZW1wdGluZworICAgICAgICAvLyB0byBjb25zdHJ1Y3Qg
dGhlIEltYWdlRGF0YQorICAgICAgICBJbWFnZURhdGEodW5zaWduZWQgdywgdW5zaWduZWQgaCkK
KyAgICAgICAgOiBtX3dpZHRoKHcpCisgICAgICAgICwgbV9oZWlnaHQoaCkKKyAgICAgICAgLCBt
X2RhdGEodyAqIGggKiA0KQorICAgICAgICB7fQorICAgIH07CiAKICAgICBjbGFzcyBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQgOiBwdWJsaWMgUmVmQ291bnRlZDxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+IHsKICAgICBwdWJsaWM6CkBAIC0xNTEsNiArMTY4LDggQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2b2lkIGRyYXdJbWFnZUZyb21SZWN0KEhUTUxJbWFnZUVsZW1lbnQqLCBm
bG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCwKICAgICAgICAgICAgIGZsb2F0
IGR4LCBmbG9hdCBkeSwgZmxvYXQgZHcsIGZsb2F0IGRoLCBjb25zdCBTdHJpbmcmIGNvbXBvc2l0
ZU9wZXJhdGlvbik7CiAKKyAgICAgICAgdm9pZCBwdXRJbWFnZURhdGEoY29uc3QgSW1hZ2VEYXRh
JiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICAgICAgCiAgICAgICAgIHZvaWQgc2V0QWxwaGEoZmxv
YXQpOwogCiAgICAgICAgIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKGNvbnN0IFN0cmluZyYp
OwpAQCAtMjAzLDYgKzIyMiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBIVE1M
Q2FudmFzRWxlbWVudCogbV9jYW52YXM7CiAgICAgICAgIFZlY3RvcjxTdGF0ZSwgMT4gbV9zdGF0
ZVN0YWNrOworICAgICAgICB2b2lkIHB1dEltYWdlRGF0YShjb25zdCBJbWFnZURhdGEmLCBjb25z
dCBJbnRSZWN0JiBzb3VyY2UsIGNvbnN0IEludFBvaW50JiBkZXN0KTsKICAgICB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmlkbCBiL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
aWRsCmluZGV4IGM5ZGEyYzIuLmI5NmVjOWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuaWRsCisrKyBiL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuaWRsCkBAIC05NSw2ICs5NSw3IEBAIG1vZHVsZSBodG1sIHsKICAgICAgICAg
W0N1c3RvbV0gdm9pZCBzdHJva2VSZWN0KC8qIDQgKi8pOwogICAgICAgICBbQ3VzdG9tXSB2b2lk
IGRyYXdJbWFnZSgvKiAzICovKTsKICAgICAgICAgW0N1c3RvbV0gdm9pZCBkcmF3SW1hZ2VGcm9t
UmVjdCgvKiAxMCAqLyk7CisgICAgICAgIFtDdXN0b21dIHZvaWQgcHV0SW1hZ2VEYXRhKC8qIDMg
Ki8pOwogICAgICAgICBbQ3VzdG9tXSB2b2lkIHNldFNoYWRvdygvKiAzICovKTsKICAgICAgICAg
W0N1c3RvbV0gdm9pZCBjcmVhdGVQYXR0ZXJuKC8qIDIgKi8pOwogICAgICAgICAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDRy5jcHAgYi9XZWJDb3Jl
L2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ0cuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjY4Yzc4MGMKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ0cuY3BwCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5o
IgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTENhbnZhc0Vs
ZW1lbnQuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKwor
I2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VEYXRhKGNv
bnN0IEltYWdlRGF0YSYgZGF0YSwgY29uc3QgSW50UmVjdCYgc291cmNlLCBjb25zdCBJbnRQb2lu
dCYgZGVzdCkKK3sgCisgICAgR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsK
KyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQoQ0dCaXRtYXBDb250ZXh0
R2V0Qml0bWFwSW5mbyhjLT5wbGF0Zm9ybUNvbnRleHQoKSkpOworICAgIHVuc2lnbmVkIGNoYXIq
IGJ1ZmZlciA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihDR0JpdG1hcENvbnRleHRHZXRE
YXRhKGMtPnBsYXRmb3JtQ29udGV4dCgpKSk7CisgICAgQVNTRVJUKGJ1ZmZlcik7CisgICAgZm9y
IChpbnQgeSA9IGRlc3QueSgpLCBvcmlnaW5ZID0gc291cmNlLnkoKTsgeSA8IGRlc3QueSgpICsg
c291cmNlLmhlaWdodCgpOyArK3ksICsrb3JpZ2luWSkgeworICAgICAgICBpbnQgb3ggPSBzb3Vy
Y2UueCgpOworICAgICAgICAvLyBBY2N1cnNlZCBmbGlwcGVkIHkgYXhpcworICAgICAgICB1bnNp
Z25lZCBjaGFyKiBkZXN0Um93ID0gYnVmZmVyICsgKG1fY2FudmFzLT5oZWlnaHQoKSAtIHkgLSAx
KSAqIG1fY2FudmFzLT53aWR0aCgpICogNDsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciog
c3JjUm93ID0gZGF0YS5tX2RhdGEuZGF0YSgpICsgb3JpZ2luWSAqIHNvdXJjZS53aWR0aCgpICo0
OworICAgICAgICBmb3IgKGludCB4ID0gZGVzdC54KCk7IHggPCBkZXN0LngoKSArIHNvdXJjZS53
aWR0aCgpOyArK3gsICsrb3gpIHsKKyAgICAgICAgICAgIGludCBhbHBoYSA9IHNyY1Jvd1tveCAq
IDQgKyAzXTsKKyAgICAgICAgICAgIGRlc3RSb3dbeCAqIDQgKyAwXSA9IHNyY1Jvd1tveCAqIDQg
KyAwXSAqIGFscGhhIC8gMjU1OworICAgICAgICAgICAgZGVzdFJvd1t4ICogNCArIDFdID0gc3Jj
Um93W294ICogNCArIDFdICogYWxwaGEgLyAyNTU7CisgICAgICAgICAgICBkZXN0Um93W3ggKiA0
ICsgMl0gPSBzcmNSb3dbb3ggKiA0ICsgMl0gKiBhbHBoYSAvIDI1NTsKKyAgICAgICAgICAgIGRl
c3RSb3dbeCAqIDQgKyAzXSA9IGFscGhhOworICAgICAgICB9CisgICAgfQorfQorCit9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJER3RrLmNwcCBiL1dl
YkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRHdGsuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNmIwNjQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3Jl
L2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJER3RrLmNwcApAQCAtMCwwICsxLDM3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaCIKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdlRGF0YShjb25z
dCBJbWFnZURhdGEmIGRhdGEsIGNvbnN0IEludFJlY3QmIHNvdXJjZSwgY29uc3QgSW50UG9pbnQm
IGRlc3QpCit7IAorCW5vdEltcGxlbWVudGVkKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRRdC5jcHAgYi9XZWJDb3JlL2h0bWwvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEUXQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLjQzNmIwNjQKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEUXQuY3BwCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIgorCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VEYXRhKGNvbnN0IEltYWdlRGF0YSYgZGF0
YSwgY29uc3QgSW50UmVjdCYgc291cmNlLCBjb25zdCBJbnRQb2ludCYgZGVzdCkKK3sgCisJbm90
SW1wbGVtZW50ZWQoKTsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRFd4LmNwcCBiL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRXeC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM2YjA2NAot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRX
eC5jcHAKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgiCisKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpwdXRJbWFnZURhdGEoY29uc3QgSW1hZ2VEYXRhJiBkYXRhLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2UsIGNvbnN0IEludFBvaW50JiBkZXN0KQoreyAKKwlub3RJbXBsZW1lbnRlZCgpOwor
fQorCit9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dlYmNvcmUtd3guYmtsIGIvV2ViQ29yZS93ZWJj
b3JlLXd4LmJrbAppbmRleCAyZGFjMGZlLi5mOTQwZDE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3dl
YmNvcmUtd3guYmtsCisrKyBiL1dlYkNvcmUvd2ViY29yZS13eC5ia2wKQEAgLTQ5LDYgKzQ5LDgg
QEAgd3hXZWJDb3JlIHBvcnQgQmFrZWZpbGUgcHJvamVjdCBmaWxlLgogICAgICAgICA8c291cmNl
cz4KICAgICAgICAgICAgIGVkaXRpbmcvd3gvRWRpdG9yV3guY3BwCiAKKyAgICAgICAgICAgIGh0
bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEV3guY3BwCisKICAgICAgICAgICAgIHBhZ2Uvd3gv
RHJhZ0NvbnRyb2xsZXJXeC5jcHAKICAgICAgICAgICAgIHBhZ2Uvd3gvRXZlbnRIYW5kbGVyV3gu
Y3BwCiAgICAgICAgICAgIAo=
</data>
<flag name="review"
          id="8141"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19312</attachid>
            <date>2008-02-23 22:47:10 -0800</date>
            <delta_ts>2008-02-24 01:17:07 -0800</delta_ts>
            <desc>First pass at new implementation</desc>
            <filename>putImageData.diff</filename>
            <type>text/plain</type>
            <size>7608</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREN1c3RvbS5jcHAKaW5kZXggNGE2MzkwZi4uYzg0ZDVkYyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAK
QEAgLTI4LDEwICsyOCwxMiBAQAogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkhU
TUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1
ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkpTQ2FudmFzR3JhZGllbnQuaCIKICNpbmNsdWRl
ICJKU0NhbnZhc1BhdHRlcm4uaCIKICNpbmNsdWRlICJKU0hUTUxDYW52YXNFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSlNIVE1MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiSlNJbWFnZURhdGEuaCIK
ICNpbmNsdWRlICJranNfaHRtbC5oIgogCiB1c2luZyBuYW1lc3BhY2UgS0pTOwpAQCAtMzM1LDYg
KzMzNyw0MiBAQCBKU1ZhbHVlKiBKU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y3JlYXRlUGF0
dGVybihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IExpc3QmCiAKIEpTVmFsdWUqIEpTQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpwdXRJbWFnZURhdGEoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0
JiBhcmdzKQogeworICAgIC8vIHB1dEltYWdlRGF0YSBoYXMgdHdvIHZhcmlhbnRzCisgICAgLy8g
cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSwgeCwgeSkKKyAgICAvLyBwdXRJbWFnZURhdGEoSW1hZ2VE
YXRhLCB4LCB5LCBkaXJ0eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwgZGlydHlIZWlnaHQpCisgICAg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gaW1wbCgpOworICAgIAorICAgIElt
YWdlRGF0YSogZGF0YSA9IHRvSW1hZ2VEYXRhKGFyZ3NbMF0pOworICAgIGlmICghZGF0YSkgewor
ICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgVFlQRV9NSVNNQVRDSF9FUlIpOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CisgICAgCisgICAgZmxvYXQgeCA9IGFyZ3NbMV0tPnRvRmxvYXQo
ZXhlYyk7CisgICAgZmxvYXQgeSA9IGFyZ3NbMl0tPnRvRmxvYXQoZXhlYyk7CisgICAgaWYgKCFp
c2Zpbml0ZSh4KSB8fCAhaXNmaW5pdGUoeSkpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4
ZWMsIElOREVYX1NJWkVfRVJSKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAg
ICAgICAKKyAgICBmbG9hdCBkaXJ0eVggPSAwOworICAgIGZsb2F0IGRpcnR5WSA9IDA7CisgICAg
ZmxvYXQgZGlydHlXaWR0aCA9IGRhdGEtPndpZHRoKCk7CisgICAgZmxvYXQgZGlydHlIZWlnaHQg
PSBkYXRhLT5oZWlnaHQoKTsKKyAgICBpZiAoYXJncy5zaXplKCkgPT0gNykgeworICAgICAgICBk
aXJ0eVggPSBhcmdzWzNdLT50b0Zsb2F0KGV4ZWMpOworICAgICAgICBkaXJ0eVkgPSBhcmdzWzRd
LT50b0Zsb2F0KGV4ZWMpOworICAgICAgICBkaXJ0eVdpZHRoID0gYXJnc1s1XS0+dG9GbG9hdChl
eGVjKTsKKyAgICAgICAgZGlydHlIZWlnaHQgPSBhcmdzWzZdLT50b0Zsb2F0KGV4ZWMpOworICAg
IH0KKyAgICBpZiAoIWlzZmluaXRlKGRpcnR5WCkgfHwgIWlzZmluaXRlKGRpcnR5WSkgfHwgIWlz
ZmluaXRlKGRpcnR5V2lkdGgpIHx8ICFpc2Zpbml0ZShkaXJ0eUhlaWdodCkpeworICAgICAgICBz
ZXRET01FeGNlcHRpb24oZXhlYywgSU5ERVhfU0laRV9FUlIpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisgICAgCisgICAgY29udGV4dC0+cHV0SW1hZ2VEYXRhKGRhdGEsIHgsIHksIGRpcnR5
WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7CisgICAgCiAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwIGIvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAKaW5kZXggZGFiMzg3OS4uMWUxNDFiMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAKQEAgLTEyMDIsNCArMTIwMiw0NSBAQCBQYXNzUmVmUHRyPEltYWdlRGF0
YT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpnZXRJbWFnZURhdGEoZmxvYXQgc3gsIGZsb2F0
IHN5LAogICAgIHJldHVybiBidWZmZXItPmdldEltYWdlRGF0YShzY2FsZWRSZWN0KTsKIH0KIAor
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdlRGF0YShJbWFnZURhdGEqIGRh
dGEsIGZsb2F0IGR4LCBmbG9hdCBkeSwgZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIGZsb2F0
IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0KQoreworICAgIEltYWdlQnVmZmVyKiBidWZm
ZXIgPSBtX2NhbnZhcyA/IG1fY2FudmFzLT5idWZmZXIoKSA6IDA7CisgICAgaWYgKCFidWZmZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIGlmIChkaXJ0eVdpZHRoIDwgMCkgeworICAgICAgICBk
aXJ0eVggKz0gZGlydHlXaWR0aDsKKyAgICAgICAgZGlydHlXaWR0aCA9IC1kaXJ0eVdpZHRoOwor
ICAgIH0KKworICAgIGlmIChkaXJ0eUhlaWdodCA8IDApIHsKKyAgICAgICAgZGlydHlZICs9IGRp
cnR5SGVpZ2h0OworICAgICAgICBkaXJ0eUhlaWdodCA9IC1kaXJ0eUhlaWdodDsKKyAgICB9CisK
KyAgICBpZiAoZGlydHlYIDwgMCkgeworICAgICAgICBkaXJ0eVdpZHRoICs9IGRpcnR5WDsKKyAg
ICAgICAgZGlydHlYID0gMDsKKyAgICB9CisgICAgCisgICAgaWYgKGRpcnR5WSA8IDApIHsKKyAg
ICAgICAgZGlydHlIZWlnaHQgKz0gZGlydHlZOworICAgICAgICBkaXJ0eVkgPSAwOworICAgIH0K
KyAgICAKKyAgICBpZiAoZGlydHlYICsgZGlydHlXaWR0aCA+IGRhdGEtPndpZHRoKCkpCisgICAg
ICAgIGRpcnR5V2lkdGggPSBkYXRhLT53aWR0aCgpIC0gZGlydHlYOworICAgIAorICAgIGlmIChk
aXJ0eVkgKyBkaXJ0eUhlaWdodCA+IGRhdGEtPmhlaWdodCgpKQorICAgICAgICBkaXJ0eUhlaWdo
dCA9IGRhdGEtPmhlaWdodCgpIC0gZGlydHlZOworCisgICAgSW50UmVjdCBkaXJ0eVJlY3Qoc3Rh
dGljX2Nhc3Q8aW50PihkaXJ0eVgpLCBzdGF0aWNfY2FzdDxpbnQ+KGRpcnR5WSksIHN0YXRpY19j
YXN0PGludD4oZGlydHlXaWR0aCksIHN0YXRpY19jYXN0PGludD4oZGlydHlIZWlnaHQpKTsKKyAg
ICBpZiAoIWRpcnR5UmVjdC53aWR0aCgpIHx8ICFkaXJ0eVJlY3QuaGVpZ2h0KCkpCisgICAgICAg
IHJldHVybjsKKworICAgIEludFBvaW50IHRhcmdldChzdGF0aWNfY2FzdDxpbnQ+KGR4KSwgc3Rh
dGljX2Nhc3Q8aW50PihkeSkpOworICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKGRhdGEsIHRhcmdl
dCwgZGlydHlSZWN0KTsKKyAgICB3aWxsRHJhdyhkaXJ0eVJlY3QpOworfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmggYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKaW5kZXgg
ZjRjYzkzOC4uNjQyZTUzNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5oCisrKyBiL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQu
aApAQCAtMTY2LDYgKzE2Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgCiAgICAg
ICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBjcmVhdGVJbWFnZURhdGEoZmxvYXQgd2lkdGgsIGZs
b2F0IGhlaWdodCkgY29uc3Q7CiAgICAgICAgIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBnZXRJbWFn
ZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gpIGNvbnN0OworICAg
ICAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEqLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZs
b2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhl
aWdodCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIHJlc2V0KCk7CiAgICAgICAgIHZvaWQgZGV0
YWNoQ2FudmFzKCkgeyBtX2NhbnZhcyA9IDA7IH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuaAppbmRleCA4NjljZDcxLi40NjU3ZmQ5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9JbWFnZUJ1ZmZlci5oCkBAIC00OSw2ICs0OSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKICAgICBjbGFzcyBJbWFnZURhdGE7CisgICAg
Y2xhc3MgSW50UG9pbnQ7CiAgICAgY2xhc3MgSW50UmVjdDsKICAgICBjbGFzcyBSZW5kZXJPYmpl
Y3Q7CiAKQEAgLTY3LDggKzY4LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbGlmIFBMQVRG
T1JNKENBSVJPKQogICAgICAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UoKSBjb25zdDsKICNl
bmRpZgotCisgICAgICAgIAogICAgICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZ2V0SW1hZ2VE
YXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0OworICAgICAgICB2b2lkIHB1dEltYWdlRGF0
YShJbWFnZURhdGEqLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0IEludFJlY3Qm
IGRpcnR5UmVjdCk7CisKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkKiBtX2RhdGE7CiAgICAg
ICAgIEludFNpemUgbV9zaXplOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDRy5jcHAKaW5kZXggZjQ1NmVjNS4uMjkxNWQwOCAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBAIC0xNTYsNCArMTU2LDY0IEBA
IFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKGNvbnN0IElu
dFJlY3QmIHJlY3QpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBJbWFnZUJ1
ZmZlcjo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSogaW1hZ2VEYXRhLCBjb25zdCBJbnRQb2ludCYg
dGFyZ2V0UG9pbnQsIGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBBU1NFUlQoZGly
dHlSZWN0LngoKSA+PSAwKTsKKyAgICBBU1NFUlQoZGlydHlSZWN0LnkoKSA+PSAwKTsKKyAgICBB
U1NFUlQoZGlydHlSZWN0LndpZHRoKCkgPiAwKTsKKyAgICBBU1NFUlQoZGlydHlSZWN0LmhlaWdo
dCgpID4gMCk7CisgICAgCisgICAgaW50IG9yaWdpbnggPSBkaXJ0eVJlY3QueCgpOworICAgIGlu
dCBkZXN0eCA9IHRhcmdldFBvaW50LngoKSArIGRpcnR5UmVjdC54KCk7CisgICAgaWYgKGRlc3R4
ID49IG1fc2l6ZS53aWR0aCgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGRlc3R4IDwgMCkg
eworICAgICAgICBvcmlnaW54IC09IGRlc3R4OworICAgICAgICBkZXN0eCA9IDA7CisgICAgfQor
ICAgIGlmIChvcmlnaW54ID4gZGlydHlSZWN0LngoKSArIGRpcnR5UmVjdC53aWR0aCgpKQorICAg
ICAgICByZXR1cm47ICAgIAorICAgIGludCBlbmR4ID0gdGFyZ2V0UG9pbnQueCgpICsgZGlydHlS
ZWN0LngoKSArIGRpcnR5UmVjdC53aWR0aCgpOworICAgIGlmIChlbmR4ID4gbV9zaXplLndpZHRo
KCkpCisgICAgICAgIGVuZHggPSBtX3NpemUud2lkdGgoKTsKKyAgICBpbnQgbnVtQ29sdW1ucyA9
IGVuZHggLSBkZXN0eDsKKyAgICAKKyAgICBpbnQgb3JpZ2lueSA9IGRpcnR5UmVjdC55KCk7Cisg
ICAgaW50IGRlc3R5ID0gdGFyZ2V0UG9pbnQueSgpICsgZGlydHlSZWN0LnkoKTsKKyAgICBpZiAo
ZGVzdHkgPj0gbV9zaXplLmhlaWdodCgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGRlc3R5
IDwgMCkgeworICAgICAgICBvcmlnaW55IC09IGRlc3R5OworICAgICAgICBkZXN0eSA9IDA7Cisg
ICAgfQorICAgIGlmIChvcmlnaW55ID4gZGlydHlSZWN0LnkoKSArIGRpcnR5UmVjdC5oZWlnaHQo
KSkKKyAgICAgICAgcmV0dXJuOyAgICAKKyAgICBpbnQgZW5keSA9IHRhcmdldFBvaW50LnkoKSAr
IGRpcnR5UmVjdC55KCkgKyBkaXJ0eVJlY3QuaGVpZ2h0KCk7CisgICAgaWYgKGVuZHkgPiBtX3Np
emUuaGVpZ2h0KCkpCisgICAgICAgIGVuZHkgPSBtX3NpemUuaGVpZ2h0KCk7CisgICAgaW50IG51
bVJvd3MgPSBlbmR5IC0gZGVzdHk7CisKKyAgICB1bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQg
KiBpbWFnZURhdGEtPndpZHRoKCk7CisgICAgdW5zaWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAq
IG1fc2l6ZS53aWR0aCgpOworICAgIAorICAgIC8vIC1vcmlnaW55IHRvIGhhbmRsZSB0aGUgYWNj
dXJzZWQgZmxpcHBlZCB5IGF4aXMKKyAgICB1bnNpZ25lZCBjaGFyKiBzcmNSb3dzID0gaW1hZ2VE
YXRhLT5kYXRhKCktPmRhdGEoKS5kYXRhKCkgKyBvcmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBv
cmlnaW54ICogNDsKKyAgICB1bnNpZ25lZCBjaGFyKiBkZXN0Um93cyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG1fZGF0YSkgKyAobV9zaXplLmhlaWdodCgpIC0gZGVzdHkgLSAx
KSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8
IG51bVJvd3M7ICsreSkgeworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7
IHgrKykgeworICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhbHBoYSA9IHNyY1Jvd3NbeCAqIDQg
KyAzXTsKKyAgICAgICAgICAgIGlmIChhbHBoYSAhPSAyNTUpIHsKKyAgICAgICAgICAgICAgICBk
ZXN0Um93c1t4ICogNCArIDBdID0gKHNyY1Jvd3NbMF0gKiBhbHBoYSkgLyAyNTU7CisgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbeCAqIDQgKyAxXSA9IChzcmNSb3dzWzFdICogYWxwaGEpIC8gMjU1
OworICAgICAgICAgICAgICAgIGRlc3RSb3dzW3ggKiA0ICsgMl0gPSAoc3JjUm93c1syXSAqIGFs
cGhhKSAvIDI1NTsKKyAgICAgICAgICAgICAgICBkZXN0Um93c1t4ICogNCArIDNdID0gYWxwaGE7
CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8
dWludDMyX3QqPihkZXN0Um93cyArIHggKiA0KVswXSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMy
X3QqPihzcmNSb3dzICsgeCAqIDQpWzBdOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIGRlc3RSb3dzIC09IGRlc3RCeXRlc1BlclJvdzsKKyAgICAgICAgc3JjUm93cyArPSBzcmNC
eXRlc1BlclJvdzsKKyAgICB9Cit9CisKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19316</attachid>
            <date>2008-02-24 01:17:07 -0800</date>
            <delta_ts>2008-02-24 05:32:59 -0800</delta_ts>
            <desc>Here we go!</desc>
            <filename>putImageData.diff</filename>
            <type>text/plain</type>
            <size>17569</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxMzkxMjNkLi5mMDhiZWRiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDgtMDIt
MjQgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMTY5NTQ6IFN1cHBvcnQgcHV0SW1hZ2VE
YXRhCisKKyAgICAgICAgTmljZSBzaW1wbGUgdGVzdGNhc2UgZm9yIHB1dEltYWdlRGF0YSBjb3Zl
cmluZyB0aGUgZXhjaXRpbmcgCisgICAgICAgIGxpdHRsZSBiaXRzIG9mIGJlaGF2aW91ciBwcmVz
ZW50IGluIHRoZSBjdXJyZW50IHNwZWMuCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy9jYW52YXMt
cHV0SW1hZ2VEYXRhLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMv
Y2FudmFzLXB1dEltYWdlRGF0YS5odG1sOiBBZGRlZC4KKwogMjAwOC0wMi0yMyAgRGFuIEJlcm5z
dGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQu
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtcHV0SW1hZ2VEYXRh
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1wdXRJbWFnZURh
dGEtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NDA2
ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtcHV0
SW1hZ2VEYXRhLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDU4IEBACisxMDAuMDAwMDAwLDEwMC4w
MDAwMDA9PjEwMCwxMDAKKzUwLjAwMDAwMCw1MC4wMDAwMDA9PjUwLDUwCitUaGlzIHRlc3QgZW5z
dXJlcyB0aGF0IHB1dEltYWdlRGF0YSB3b3JrcyBjb3JyZWN0bHksIHRoZSBlbmQgcmVzdWx0IHNo
b3VsZCBiZSBhIDEwMHgxMDBweCBncmVlbiBzcXVhcmUuCisKK1BBU1M6IHBpeGVsIGF0ICgwLDAp
IHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoMjUsMjUpIHdhcyBbMCwxMjgsMCwy
NTVdCitQQVNTOiBwaXhlbCBhdCAoNDksMCkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6IHBpeGVs
IGF0ICgwLDQ5KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDQ5LDQ5KSB3YXMg
WzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDUwLDApIHdhcyBbMCwwLDAsMF0KK1BBU1M6
IHBpeGVsIGF0ICgwLDUwKSB3YXMgWzAsMCwwLDBdCitQQVNTOiBwaXhlbCBhdCAoNTAsNTApIHdh
cyBbMCwwLDAsMF0KK1BBU1M6IHBpeGVsIGF0ICgwLDUwKSB3YXMgWzAsMTI4LDAsMjU1XQorUEFT
UzogcGl4ZWwgYXQgKDI1LDc1KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDQ5
LDUwKSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDAsOTkpIHdhcyBbMCwxMjgs
MCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNDksOTkpIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBw
aXhlbCBhdCAoNTAsNTApIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNzUsNzUp
IHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoOTksOTkpIHdhcyBbMCwxMjgsMCwy
NTVdCitQQVNTOiBwaXhlbCBhdCAoNTAsNDkpIHdhcyBbMCwwLDAsMF0KK1BBU1M6IHBpeGVsIGF0
ICg1MCwwKSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDUwLDUpIHdhcyBbMCwx
MjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNTAsMTUpIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNT
OiBwaXhlbCBhdCAoNTAsMjUpIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNTAs
MzUpIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNTAsNDUpIHdhcyBbMCwxMjgs
MCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNTUsMCkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6IHBp
eGVsIGF0ICg1NSw1KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDU1LDE1KSB3
YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDU1LDI1KSB3YXMgWzAsMTI4LDAsMjU1
XQorUEFTUzogcGl4ZWwgYXQgKDU1LDM1KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwg
YXQgKDU1LDQ1KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDY1LDApIHdhcyBb
MCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNjUsNSkgd2FzIFswLDEyOCwwLDI1NV0KK1BB
U1M6IHBpeGVsIGF0ICg2NSwxNSkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0ICg2
NSwyNSkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0ICg2NSwzNSkgd2FzIFswLDEy
OCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0ICg2NSw0NSkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6
IHBpeGVsIGF0ICg3NSwwKSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDc1LDUp
IHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNzUsMTUpIHdhcyBbMCwxMjgsMCwy
NTVdCitQQVNTOiBwaXhlbCBhdCAoNzUsMjUpIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhl
bCBhdCAoNzUsMzUpIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNzUsNDUpIHdh
cyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoODUsMCkgd2FzIFswLDEyOCwwLDI1NV0K
K1BBU1M6IHBpeGVsIGF0ICg4NSw1KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQg
KDg1LDE1KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDg1LDI1KSB3YXMgWzAs
MTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDg1LDM1KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFT
UzogcGl4ZWwgYXQgKDg1LDQ1KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDk1
LDApIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoOTUsNSkgd2FzIFswLDEyOCww
LDI1NV0KK1BBU1M6IHBpeGVsIGF0ICg5NSwxNSkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6IHBp
eGVsIGF0ICg5NSwyNSkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0ICg5NSwzNSkg
d2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0ICg5NSw0NSkgd2FzIFswLDEyOCwwLDI1
NV0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLXB1dEltYWdl
RGF0YS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLXB1dEltYWdlRGF0YS5o
dG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2MzhmZTgKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtcHV0SW1hZ2VEYXRhLmh0
bWwKQEAgLTAsMCArMSwxMDcgQEAKK1RoaXMgdGVzdCBlbnN1cmVzIHRoYXQgcHV0SW1hZ2VEYXRh
IHdvcmtzIGNvcnJlY3RseSwgdGhlIGVuZCByZXN1bHQgc2hvdWxkIGJlIGEgMTAweDEwMHB4IGdy
ZWVuIHNxdWFyZS48YnIvPgorPGNhbnZhcyBpZD0iY2FudmFzIiB3aWR0aD0iMTAwIiBoZWlnaHQ9
IjEwMCI+PC9jYW52YXM+PGJyLz4KKzxkaXYgaWQ9ImxvZyI+PC9kaXY+Cis8c2NyaXB0PgoraWYg
KHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisKK2Z1bmN0aW9uIGxvZyhtc2cpeworICAgIGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJsb2ciKS5pbm5lckhUTUwgKz0gbXNnICsgIjxici8+IjsKK30KKworZnVuY3Rpb24g
ZmlsbFJlY3QoaW1hZ2VEYXRhLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCByLCBnLCBiLCBhKQorewor
ICAgIHZhciBieXRlc1BlclJvdyA9IGltYWdlRGF0YS53aWR0aCAqIDQ7CisgICAgdmFyIGRhdGEg
PWltYWdlRGF0YS5kYXRhOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHsK
KyAgICAgICAgdmFyIHJvd09yaWdpbiA9ICh5K2kpICogYnl0ZXNQZXJSb3c7CisgICAgICAgIHJv
d09yaWdpbiArPSB4ICogNDsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB3aWR0aDsgaisr
KSB7CisgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSByb3dPcmlnaW4gKyBqICogNDsKKyAgICAg
ICAgICAgIGRhdGFbcG9zaXRpb24gKyAwXSA9IHI7CisgICAgICAgICAgICBkYXRhW3Bvc2l0aW9u
ICsgMV0gPSBnOworICAgICAgICAgICAgZGF0YVtwb3NpdGlvbiArIDJdID0gYjsKKyAgICAgICAg
ICAgIGRhdGFbcG9zaXRpb24gKyAzXSA9IGE7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2Z1bmN0
aW9uIGRhdGFUb0FycmF5KGRhdGEpIHsKKyAgICB2YXIgcmVzdWx0ID0gbmV3IEFycmF5KGRhdGEu
bGVuZ3RoKQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykKKyAgICAg
ICAgcmVzdWx0W2ldID0gZGF0YVtpXTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmdW5jdGlv
biBnZXRQaXhlbChjdHgsIHgsIHkpIHsKKyAgICB2YXIgZGF0YSA9IGN0eC5nZXRJbWFnZURhdGEo
eCx5LDEsMSk7CisgICAgaWYgKCFkYXRhKSAvLyBnZXRJbWFnZURhdGEgZmFpbGVkLCB3aGljaCBz
aG91bGQgbmV2ZXIgaGFwcGVuCisgICAgICAgIHJldHVybiBbLTEsLTEsLTEsLTFdOworICAgIHJl
dHVybiBkYXRhVG9BcnJheShkYXRhLmRhdGEpOworfQorCitmdW5jdGlvbiBwaXhlbFNob3VsZEJl
KGN0eCwgeCwgeSwgY29sb3VyKSB7CisgICAgdmFyIGN0eENvbG91ciA9IGdldFBpeGVsKGN0eCwg
eCwgeSk7CisgICAgdmFyIGNvcnJlY3QgPSB0cnVlOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
NDsgaSsrKQorICAgICAgICBpZiAoY29sb3VyW2ldICE9IGN0eENvbG91cltpXSkgeworICAgICAg
ICAgICAgY29ycmVjdCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICBpZiAoY29ycmVjdCkKKyAgICAgICAgbG9nKCJQQVNTOiBwaXhlbCBhdCAoIitbeCx5XSsiKSB3
YXMgWyIrY29sb3VyKyJdIik7CisgICAgZWxzZQorICAgICAgICBsb2coIkZBSUw6IHBpeGVsIGF0
ICgiK1t4LHldKyIpIHdhcyBbIitjdHhDb2xvdXIrIl0sIGV4cGVjdGVkIFsiK2NvbG91cisiXSIp
OworfQorCit2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwor
dmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKworaWYgKCFjb250ZXh0LmNy
ZWF0ZUltYWdlRGF0YSkKKyAgICBjb250ZXh0LmNyZWF0ZUltYWdlRGF0YSA9IGZ1bmN0aW9uKHcs
aCkgeyAKKyAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SW1hZ2VEYXRhKDAsIDAsIHcsIGgpOworICAg
IH0KK3ZhciBidWZmZXIgPSBjb250ZXh0LmNyZWF0ZUltYWdlRGF0YSgxMDAsMTAwKTsKKy8vIEZp
bGwgdG9wIGxlZnQgY29ybmVyCitmaWxsUmVjdChidWZmZXIsIDAsIDAsIDUwLCA1MCwgMCwgMTI4
LDAsMjU1KTsKK2NvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgMCwgMCk7CitwaXhlbFNob3Vs
ZEJlKGNvbnRleHQsICAwLCAgMCwgWzAsIDEyOCwwLDI1NV0pOworcGl4ZWxTaG91bGRCZShjb250
ZXh0LCAyNSwgMjUsIFswLCAxMjgsMCwyNTVdKTsKK3BpeGVsU2hvdWxkQmUoY29udGV4dCwgNDks
ICAwLCBbMCwgMTI4LDAsMjU1XSk7CitwaXhlbFNob3VsZEJlKGNvbnRleHQsICAwLCA0OSwgWzAs
IDEyOCwwLDI1NV0pOworcGl4ZWxTaG91bGRCZShjb250ZXh0LCA0OSwgNDksIFswLCAxMjgsMCwy
NTVdKTsKK3BpeGVsU2hvdWxkQmUoY29udGV4dCwgNTAsICAwLCBbMCwgMCwgMCwgMF0pOworcGl4
ZWxTaG91bGRCZShjb250ZXh0LCAgMCwgNTAsIFswLCAwLCAwLCAwXSk7CitwaXhlbFNob3VsZEJl
KGNvbnRleHQsIDUwLCA1MCwgWzAsIDAsIDAsIDBdKTsKKworLy8gVGVzdCBwb3NpdGlvbmVkIGRy
YXdpbmcgLS0gbWFrZSBib3R0b20gcmlnaHQgZ3JlZW4KK2NvbnRleHQucHV0SW1hZ2VEYXRhKGJ1
ZmZlciwgMCwgNTApOworcGl4ZWxTaG91bGRCZShjb250ZXh0LCAgMCwgNTAsIFswLCAxMjgsMCwy
NTVdKTsKK3BpeGVsU2hvdWxkQmUoY29udGV4dCwgMjUsIDc1LCBbMCwgMTI4LDAsMjU1XSk7Citw
aXhlbFNob3VsZEJlKGNvbnRleHQsIDQ5LCA1MCwgWzAsIDEyOCwwLDI1NV0pOworcGl4ZWxTaG91
bGRCZShjb250ZXh0LCAgMCwgOTksIFswLCAxMjgsMCwyNTVdKTsKK3BpeGVsU2hvdWxkQmUoY29u
dGV4dCwgNDksIDk5LCBbMCwgMTI4LDAsMjU1XSk7CisKKy8vIFRlc3QgdHJhbnNsYXRpb24gZG9l
c24ndCBlZmZlY3QgcHV0SW1hZ2VEYXRhCitjb250ZXh0LnRyYW5zbGF0ZSg1MCwgLTUwKTsKK2Nv
bnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgNTAsIDUwKTsKK3BpeGVsU2hvdWxkQmUoY29udGV4
dCwgNTAsIDUwLCBbMCwgMTI4LDAsMjU1XSk7CitwaXhlbFNob3VsZEJlKGNvbnRleHQsIDc1LCA3
NSwgWzAsIDEyOCwwLDI1NV0pOworcGl4ZWxTaG91bGRCZShjb250ZXh0LCA5OSwgOTksIFswLCAx
MjgsMCwyNTVdKTsKK3BpeGVsU2hvdWxkQmUoY29udGV4dCwgNTAsIDQ5LCBbMCwgMCwgMCwgMF0p
OworY29udGV4dC50cmFuc2xhdGUoLTUwLCA1MCk7CisKKy8vIFRlc3QgZGlydHkgcmVjdCBoYW5k
bGluZworYnVmZmVyID0gY29udGV4dC5jcmVhdGVJbWFnZURhdGEoNTAsNTApOworZmlsbFJlY3Qo
YnVmZmVyLCAwLCAwLCA1MCwgNTAsIDAsIDEyOCwgMCwgMjU1KTsKK2NvbnRleHQucHV0SW1hZ2VE
YXRhKGJ1ZmZlciwgNTAsIDApOworZmlsbFJlY3QoYnVmZmVyLCAwLCAwLCA1MCwgNTAsIDI1NSwg
MCwgMCwgMjU1KTsKK2NvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgNTAsIDAsIDE1LCAxNSwg
MjAsIDIwKTsKK2NvbnRleHQuZmlsbFN0eWxlPSJyZ2IoMCwxMjgsMCkiOworY29udGV4dC5maWxs
UmVjdCg2NSwgMTUsIDIwLCAyMCk7Cit2YXIgcG9pbnRzID0gWzAsIDUsIDE1LCAyNSwgMzUsIDQ1
XTsKK2ZvciAodmFyIHggPSAwOyB4IDwgcG9pbnRzLmxlbmd0aDsgeCsrKQorICAgIGZvciAodmFy
IHkgPSAwOyB5IDwgcG9pbnRzLmxlbmd0aDsgeSsrKQorICAgICAgICBwaXhlbFNob3VsZEJlKGNv
bnRleHQsIHBvaW50c1t4XSArIDUwLCBwb2ludHNbeV0sIFswLCAxMjgsIDAsIDI1NV0pOworICAg
ICAgICAKKzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3Jl
L0NoYW5nZUxvZwppbmRleCA0YTIzMzA2Li42Mzc5MmQ3IDEwMDY0NAotLS0gYS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDA4LTAy
LTI0ICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDE2OTU0OiBTdXBwb3J0IHB1dEltYWdl
RGF0YQorICAgICAgICAKKyAgICAgICAgSW1wbGVtZW50IHN1cHBvcnQgZm9yIEhUTUw1J3MgcHV0
SW1hZ2VEYXRhIGZvciB0aGUgQ0cgcG9ydC4gIEFsbCBvdGhlciBwb3J0cworICAgICAgICBhcmUg
Y3VycmVudGx5IGp1c3QgdXNpbmcgc3R1YnMgZm9yIHRoZSBmaW5hbCBibGl0LgorCisgICAgICAg
IFRlc3Q6IGZhc3QvY2FudmFzL2NhbnZhcy1wdXRJbWFnZURhdGEuaHRtbAorCisgICAgICAgICog
YmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdlRGF0YSk6Cisg
ICAgICAgICogaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAq
IGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvSW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9J
bWFnZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFn
ZUJ1ZmZlckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURh
dGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgorCiAyMDA4
LTAyLTIzICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBTYW0uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCmluZGV4IDRhNjM5MGYuLjlmOWY3NGMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20u
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRD
dXN0b20uY3BwCkBAIC0yOCwxMCArMjgsMTIgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNp
bmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJKU0NhbnZhc0dyYWRpZW50Lmgi
CiAjaW5jbHVkZSAiSlNDYW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiSlNIVE1MQ2FudmFzRWxl
bWVudC5oIgogI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkpTSW1h
Z2VEYXRhLmgiCiAjaW5jbHVkZSAia2pzX2h0bWwuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEtKUzsK
QEAgLTMzNSw2ICszMzcsMjUgQEAgSlNWYWx1ZSogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OmNyZWF0ZVBhdHRlcm4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JgogCiBKU1ZhbHVlKiBK
U0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VEYXRhKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgTGlzdCYgYXJncykKIHsKKyAgICAvLyBwdXRJbWFnZURhdGEgaGFzIHR3byB2YXJpYW50
cworICAgIC8vIHB1dEltYWdlRGF0YShJbWFnZURhdGEsIHgsIHkpCisgICAgLy8gcHV0SW1hZ2VE
YXRhKEltYWdlRGF0YSwgeCwgeSwgZGlydHlYLCBkaXJ0eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVp
Z2h0KQorICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IGltcGwoKTsKKyAg
ICAKKyAgICBJbWFnZURhdGEqIGRhdGEgPSB0b0ltYWdlRGF0YShhcmdzWzBdKTsKKyAgICBpZiAo
IWRhdGEpIHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJS
KTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIEV4Y2VwdGlvbkNv
ZGUgZWM7CisgICAgaWYgKGFyZ3Muc2l6ZSgpID09IDMpCisgICAgICAgIGNvbnRleHQtPnB1dElt
YWdlRGF0YShkYXRhLCBhcmdzWzFdLT50b0Zsb2F0KGV4ZWMpLCBhcmdzWzJdLT50b0Zsb2F0KGV4
ZWMpLCBlYyk7CisgICAgZWxzZSBpZiAoYXJncy5zaXplKCkgPT0gNykKKyAgICAgICAgY29udGV4
dC0+cHV0SW1hZ2VEYXRhKGRhdGEsIGFyZ3NbMV0tPnRvRmxvYXQoZXhlYyksIGFyZ3NbMl0tPnRv
RmxvYXQoZXhlYyksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1szXS0+dG9G
bG9hdChleGVjKSwgYXJnc1s0XS0+dG9GbG9hdChleGVjKSwgYXJnc1s1XS0+dG9GbG9hdChleGVj
KSwgYXJnc1s2XS0+dG9GbG9hdChleGVjKSwgZWMpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJu
IHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVj
LCBlYyk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIvV2ViQ29yZS9odG1sL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKaW5kZXggZGFiMzg3OS4uYTZlMTA2MiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvV2ViQ29y
ZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKQEAgLTEyMDIsNCArMTIwMiw1NyBA
QCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpnZXRJbWFn
ZURhdGEoZmxvYXQgc3gsIGZsb2F0IHN5LAogICAgIHJldHVybiBidWZmZXItPmdldEltYWdlRGF0
YShzY2FsZWRSZWN0KTsKIH0KIAordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dElt
YWdlRGF0YShJbWFnZURhdGEqIGRhdGEsIGZsb2F0IGR4LCBmbG9hdCBkeSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCit7CisgICAgcHV0SW1hZ2VEYXRhKGRhdGEsIGR4LCBkeSwgMCwgMCwgZGF0YS0+d2lk
dGgoKSwgZGF0YS0+aGVpZ2h0KCksIGVjKTsKK30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OnB1dEltYWdlRGF0YShJbWFnZURhdGEqIGRhdGEsIGZsb2F0IGR4LCBmbG9hdCBkeSwg
ZmxvYXQgZGlydHlYLCBmbG9hdCBkaXJ0eVksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCwgRXhj
ZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSW1hZ2VCdWZmZXIqIGJ1ZmZlciA9IG1fY2FudmFzID8g
bV9jYW52YXMtPmJ1ZmZlcigpIDogMDsKKyAgICBpZiAoIWJ1ZmZlciB8fCAhaXNmaW5pdGUoZHgp
IHx8ICFpc2Zpbml0ZShkeSkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghaXNmaW5pdGUo
ZGlydHlYKSB8fCAhaXNmaW5pdGUoZGlydHlZKSB8fCAhaXNmaW5pdGUoZGlydHlXaWR0aCkgfHwg
IWlzZmluaXRlKGRpcnR5SGVpZ2h0KSl7CisgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgZWMgPSAwOworCisgICAgaWYgKGRpcnR5V2lkdGgg
PCAwKSB7CisgICAgICAgIGRpcnR5WCArPSBkaXJ0eVdpZHRoOworICAgICAgICBkaXJ0eVdpZHRo
ID0gLWRpcnR5V2lkdGg7CisgICAgfQorCisgICAgaWYgKGRpcnR5SGVpZ2h0IDwgMCkgeworICAg
ICAgICBkaXJ0eVkgKz0gZGlydHlIZWlnaHQ7CisgICAgICAgIGRpcnR5SGVpZ2h0ID0gLWRpcnR5
SGVpZ2h0OworICAgIH0KKworICAgIGlmIChkaXJ0eVggPCAwKSB7CisgICAgICAgIGRpcnR5V2lk
dGggKz0gZGlydHlYOworICAgICAgICBkaXJ0eVggPSAwOworICAgIH0KKyAgICAKKyAgICBpZiAo
ZGlydHlZIDwgMCkgeworICAgICAgICBkaXJ0eUhlaWdodCArPSBkaXJ0eVk7CisgICAgICAgIGRp
cnR5WSA9IDA7CisgICAgfQorICAgIAorICAgIGlmIChkaXJ0eVggKyBkaXJ0eVdpZHRoID4gZGF0
YS0+d2lkdGgoKSkKKyAgICAgICAgZGlydHlXaWR0aCA9IGRhdGEtPndpZHRoKCkgLSBkaXJ0eVg7
CisgICAgCisgICAgaWYgKGRpcnR5WSArIGRpcnR5SGVpZ2h0ID4gZGF0YS0+aGVpZ2h0KCkpCisg
ICAgICAgIGRpcnR5SGVpZ2h0ID0gZGF0YS0+aGVpZ2h0KCkgLSBkaXJ0eVk7CisKKyAgICBJbnRS
ZWN0IGRpcnR5UmVjdChzdGF0aWNfY2FzdDxpbnQ+KGRpcnR5WCksIHN0YXRpY19jYXN0PGludD4o
ZGlydHlZKSwgc3RhdGljX2Nhc3Q8aW50PihkaXJ0eVdpZHRoKSwgc3RhdGljX2Nhc3Q8aW50Pihk
aXJ0eUhlaWdodCkpOworICAgIGlmICghZGlydHlSZWN0LndpZHRoKCkgfHwgIWRpcnR5UmVjdC5o
ZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UG9pbnQgdGFyZ2V0KHN0YXRpY19j
YXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxpbnQ+KGR5KSk7CisgICAgYnVmZmVyLT5wdXRJbWFn
ZURhdGEoZGF0YSwgdGFyZ2V0LCBkaXJ0eVJlY3QpOworICAgIHdpbGxEcmF3KGRpcnR5UmVjdCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBiL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuaAppbmRleCBmNGNjOTM4Li41Zjc5ZDUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0
bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5oCkBAIC0xNjYsNiArMTY2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICAKICAgICAgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGNyZWF0ZUltYWdlRGF0
YShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSBjb25zdDsKICAgICAgICAgUGFzc1JlZlB0cjxJ
bWFnZURhdGE+IGdldEltYWdlRGF0YShmbG9hdCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9h
dCBzaCkgY29uc3Q7CisgICAgICAgIHZvaWQgcHV0SW1hZ2VEYXRhKEltYWdlRGF0YSosIGZsb2F0
IGR4LCBmbG9hdCBkeSwgRXhjZXB0aW9uQ29kZSYpOworICAgICAgICB2b2lkIHB1dEltYWdlRGF0
YShJbWFnZURhdGEqLCBmbG9hdCBkeCwgZmxvYXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGly
dHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0eUhlaWdodCwgRXhjZXB0aW9uQ29kZSYp
OwogICAgICAgICAKICAgICAgICAgdm9pZCByZXNldCgpOwogICAgICAgICB2b2lkIGRldGFjaENh
bnZhcygpIHsgbV9jYW52YXMgPSAwOyB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ltYWdlQnVmZmVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmgKaW5kZXggODY5Y2Q3MS4uNDY1N2ZkOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaApAQCAtNDksNiArNDksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiAgICAgY2xhc3MgSW1hZ2VEYXRhOworICAgIGNsYXNz
IEludFBvaW50OwogICAgIGNsYXNzIEludFJlY3Q7CiAgICAgY2xhc3MgUmVuZGVyT2JqZWN0Owog
CkBAIC02Nyw4ICs2OCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZWxpZiBQTEFURk9STShD
QUlSTykKICAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKCkgY29uc3Q7CiAjZW5kaWYK
LQorICAgICAgICAKICAgICAgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShj
b25zdCBJbnRSZWN0JiByZWN0KSBjb25zdDsKKyAgICAgICAgdm9pZCBwdXRJbWFnZURhdGEoSW1h
Z2VEYXRhKiwgY29uc3QgSW50UG9pbnQmIHRhcmdldFBvaW50LCBjb25zdCBJbnRSZWN0JiBkaXJ0
eVJlY3QpOworCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCogbV9kYXRhOwogICAgICAgICBJ
bnRTaXplIG1fc2l6ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCmluZGV4IGQ4ZDZhZDAuLjI2ZGQ0Y2IgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApA
QCAtODAsNCArODAsOSBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldElt
YWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBJ
bWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSosIGNvbnN0IEludFBvaW50JiwgY29u
c3QgSW50UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDRy5jcHAKaW5kZXggZjQ1NmVjNS4u
MjkxNWQwOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1
ZmZlckNHLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVy
Q0cuY3BwCkBAIC0xNTYsNCArMTU2LDY0IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1
ZmZlcjo6Z2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSog
aW1hZ2VEYXRhLCBjb25zdCBJbnRQb2ludCYgdGFyZ2V0UG9pbnQsIGNvbnN0IEludFJlY3QmIGRp
cnR5UmVjdCkKK3sKKyAgICBBU1NFUlQoZGlydHlSZWN0LngoKSA+PSAwKTsKKyAgICBBU1NFUlQo
ZGlydHlSZWN0LnkoKSA+PSAwKTsKKyAgICBBU1NFUlQoZGlydHlSZWN0LndpZHRoKCkgPiAwKTsK
KyAgICBBU1NFUlQoZGlydHlSZWN0LmhlaWdodCgpID4gMCk7CisgICAgCisgICAgaW50IG9yaWdp
bnggPSBkaXJ0eVJlY3QueCgpOworICAgIGludCBkZXN0eCA9IHRhcmdldFBvaW50LngoKSArIGRp
cnR5UmVjdC54KCk7CisgICAgaWYgKGRlc3R4ID49IG1fc2l6ZS53aWR0aCgpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKGRlc3R4IDwgMCkgeworICAgICAgICBvcmlnaW54IC09IGRlc3R4Owor
ICAgICAgICBkZXN0eCA9IDA7CisgICAgfQorICAgIGlmIChvcmlnaW54ID4gZGlydHlSZWN0Lngo
KSArIGRpcnR5UmVjdC53aWR0aCgpKQorICAgICAgICByZXR1cm47ICAgIAorICAgIGludCBlbmR4
ID0gdGFyZ2V0UG9pbnQueCgpICsgZGlydHlSZWN0LngoKSArIGRpcnR5UmVjdC53aWR0aCgpOwor
ICAgIGlmIChlbmR4ID4gbV9zaXplLndpZHRoKCkpCisgICAgICAgIGVuZHggPSBtX3NpemUud2lk
dGgoKTsKKyAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBkZXN0eDsKKyAgICAKKyAgICBpbnQg
b3JpZ2lueSA9IGRpcnR5UmVjdC55KCk7CisgICAgaW50IGRlc3R5ID0gdGFyZ2V0UG9pbnQueSgp
ICsgZGlydHlSZWN0LnkoKTsKKyAgICBpZiAoZGVzdHkgPj0gbV9zaXplLmhlaWdodCgpKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKGRlc3R5IDwgMCkgeworICAgICAgICBvcmlnaW55IC09IGRl
c3R5OworICAgICAgICBkZXN0eSA9IDA7CisgICAgfQorICAgIGlmIChvcmlnaW55ID4gZGlydHlS
ZWN0LnkoKSArIGRpcnR5UmVjdC5oZWlnaHQoKSkKKyAgICAgICAgcmV0dXJuOyAgICAKKyAgICBp
bnQgZW5keSA9IHRhcmdldFBvaW50LnkoKSArIGRpcnR5UmVjdC55KCkgKyBkaXJ0eVJlY3QuaGVp
Z2h0KCk7CisgICAgaWYgKGVuZHkgPiBtX3NpemUuaGVpZ2h0KCkpCisgICAgICAgIGVuZHkgPSBt
X3NpemUuaGVpZ2h0KCk7CisgICAgaW50IG51bVJvd3MgPSBlbmR5IC0gZGVzdHk7CisKKyAgICB1
bnNpZ25lZCBzcmNCeXRlc1BlclJvdyA9IDQgKiBpbWFnZURhdGEtPndpZHRoKCk7CisgICAgdW5z
aWduZWQgZGVzdEJ5dGVzUGVyUm93ID0gNCAqIG1fc2l6ZS53aWR0aCgpOworICAgIAorICAgIC8v
IC1vcmlnaW55IHRvIGhhbmRsZSB0aGUgYWNjdXJzZWQgZmxpcHBlZCB5IGF4aXMKKyAgICB1bnNp
Z25lZCBjaGFyKiBzcmNSb3dzID0gaW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKS5kYXRhKCkgKyBv
cmlnaW55ICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKKyAgICB1bnNpZ25lZCBjaGFy
KiBkZXN0Um93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KG1fZGF0YSkgKyAo
bV9zaXplLmhlaWdodCgpIC0gZGVzdHkgLSAxKSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICog
NDsKKyAgICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgeworICAgICAgICBmb3Ig
KGludCB4ID0gMDsgeCA8IG51bUNvbHVtbnM7IHgrKykgeworICAgICAgICAgICAgdW5zaWduZWQg
Y2hhciBhbHBoYSA9IHNyY1Jvd3NbeCAqIDQgKyAzXTsKKyAgICAgICAgICAgIGlmIChhbHBoYSAh
PSAyNTUpIHsKKyAgICAgICAgICAgICAgICBkZXN0Um93c1t4ICogNCArIDBdID0gKHNyY1Jvd3Nb
MF0gKiBhbHBoYSkgLyAyNTU7CisgICAgICAgICAgICAgICAgZGVzdFJvd3NbeCAqIDQgKyAxXSA9
IChzcmNSb3dzWzFdICogYWxwaGEpIC8gMjU1OworICAgICAgICAgICAgICAgIGRlc3RSb3dzW3gg
KiA0ICsgMl0gPSAoc3JjUm93c1syXSAqIGFscGhhKSAvIDI1NTsKKyAgICAgICAgICAgICAgICBk
ZXN0Um93c1t4ICogNCArIDNdID0gYWxwaGE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihkZXN0Um93cyArIHggKiA0KVsw
XSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDMyX3QqPihzcmNSb3dzICsgeCAqIDQpWzBdOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRlc3RSb3dzIC09IGRlc3RCeXRlc1BlclJv
dzsKKyAgICAgICAgc3JjUm93cyArPSBzcmNCeXRlc1BlclJvdzsKKyAgICB9Cit9CisKIH0KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCmluZGV4IDIx
NzI0MmYuLjJjZGUwNmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
SW1hZ2VCdWZmZXJRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFn
ZUJ1ZmZlclF0LmNwcApAQCAtNzcsNCArNzcsOSBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1h
Z2VCdWZmZXI6OmdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29uc3QKICAgICByZXR1cm4g
MDsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSosIGNvbnN0
IEludFBvaW50JiwgY29uc3QgSW50UmVjdCYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZl
cld4LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAK
aW5kZXggM2U5NmYxZC4uYTBhNWQ5NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3d4L0ltYWdlQnVmZmVyV3guY3BwCkBAIC01Miw0ICs1Miw5IEBAIFBhc3NSZWZQdHI8SW1hZ2VE
YXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmKSBjb25zdAogICAg
IHJldHVybiAwOwogfQogCit2b2lkIEltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEoSW1hZ2VEYXRh
KiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRSZWN0JikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCiB9Cg==
</data>
<flag name="review"
          id="8443"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19321</attachid>
            <date>2008-02-24 05:32:59 -0800</date>
            <delta_ts>2008-02-24 15:00:33 -0800</delta_ts>
            <desc>Hopefully address everyones concerns</desc>
            <filename>putImageData.diff</filename>
            <type>text/plain</type>
            <size>21971</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5YjY1NjA5Li44NzgwYWJlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDgtMDIt
MjQgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMTY5NTQ6IFN1cHBvcnQgcHV0SW1hZ2VE
YXRhCisKKyAgICAgICAgTmljZSBzaW1wbGUgdGVzdGNhc2UgZm9yIHB1dEltYWdlRGF0YSBjb3Zl
cmluZyB0aGUgZXhjaXRpbmcgCisgICAgICAgIGxpdHRsZSBiaXRzIG9mIGJlaGF2aW91ciBwcmVz
ZW50IGluIHRoZSBjdXJyZW50IHNwZWMuCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy9jYW52YXMt
cHV0SW1hZ2VEYXRhLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMv
Y2FudmFzLXB1dEltYWdlRGF0YS5odG1sOiBBZGRlZC4KKwogMjAwOC0wMi0yNCAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtLgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLXB1dEltYWdlRGF0YS1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtcHV0SW1hZ2VEYXRhLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDUxZjRhCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLXB1dEltYWdlRGF0
YS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMDkgQEAKK1RoaXMgdGVzdCBlbnN1cmVzIHRoYXQg
cHV0SW1hZ2VEYXRhIHdvcmtzIGNvcnJlY3RseSwgdGhlIGVuZCByZXN1bHQgc2hvdWxkIGJlIGEg
MTAweDEwMHB4IGdyZWVuIHNxdWFyZS4KKworUEFTUzogcGl4ZWwgYXQgKDAsMCkgd2FzIFswLDEy
OCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0ICgyNSwyNSkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6
IHBpeGVsIGF0ICg0OSwwKSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDAsNDkp
IHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNDksNDkpIHdhcyBbMCwxMjgsMCwy
NTVdCitQQVNTOiBwaXhlbCBhdCAoNTAsMCkgd2FzIFswLDAsMCwwXQorUEFTUzogcGl4ZWwgYXQg
KDAsNTApIHdhcyBbMCwwLDAsMF0KK1BBU1M6IHBpeGVsIGF0ICg1MCw1MCkgd2FzIFswLDAsMCww
XQorUEFTUzogcGl4ZWwgYXQgKDAsNTApIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBh
dCAoMjUsNzUpIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNDksNTApIHdhcyBb
MCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoMCw5OSkgd2FzIFswLDEyOCwwLDI1NV0KK1BB
U1M6IHBpeGVsIGF0ICg0OSw5OSkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0ICg1
MCw1MCkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0ICg3NSw3NSkgd2FzIFswLDEy
OCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0ICg5OSw5OSkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6
IHBpeGVsIGF0ICg1MCw0OSkgd2FzIFswLDAsMCwwXQorUEFTUzogcGl4ZWwgYXQgKDUwLDApIHdh
cyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNTAsNSkgd2FzIFswLDEyOCwwLDI1NV0K
K1BBU1M6IHBpeGVsIGF0ICg1MCwxNSkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0
ICg1MCwyNSkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0ICg1MCwzNSkgd2FzIFsw
LDEyOCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0ICg1MCw0NSkgd2FzIFswLDEyOCwwLDI1NV0KK1BB
U1M6IHBpeGVsIGF0ICg1NSwwKSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDU1
LDUpIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNTUsMTUpIHdhcyBbMCwxMjgs
MCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNTUsMjUpIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBw
aXhlbCBhdCAoNTUsMzUpIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNTUsNDUp
IHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNjUsMCkgd2FzIFswLDEyOCwwLDI1
NV0KK1BBU1M6IHBpeGVsIGF0ICg2NSw1KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwg
YXQgKDY1LDE1KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDY1LDI1KSB3YXMg
WzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDY1LDM1KSB3YXMgWzAsMTI4LDAsMjU1XQor
UEFTUzogcGl4ZWwgYXQgKDY1LDQ1KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQg
KDc1LDApIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNzUsNSkgd2FzIFswLDEy
OCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0ICg3NSwxNSkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6
IHBpeGVsIGF0ICg3NSwyNSkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0ICg3NSwz
NSkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0ICg3NSw0NSkgd2FzIFswLDEyOCww
LDI1NV0KK1BBU1M6IHBpeGVsIGF0ICg4NSwwKSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4
ZWwgYXQgKDg1LDUpIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoODUsMTUpIHdh
cyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoODUsMjUpIHdhcyBbMCwxMjgsMCwyNTVd
CitQQVNTOiBwaXhlbCBhdCAoODUsMzUpIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBh
dCAoODUsNDUpIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoOTUsMCkgd2FzIFsw
LDEyOCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0ICg5NSw1KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFT
UzogcGl4ZWwgYXQgKDk1LDE1KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDk1
LDI1KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDk1LDM1KSB3YXMgWzAsMTI4
LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDk1LDQ1KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzog
cGl4ZWwgYXQgKDAsMjUpIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoOTksMjUp
IHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoMjUsMCkgd2FzIFswLDEyOCwwLDI1
NV0KK1BBU1M6IHBpeGVsIGF0ICgyNSw5OSkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6IHBpeGVs
IGF0ICg1MCwwKSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDUwLDUpIHdhcyBb
MCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNTAsMTUpIHdhcyBbMCwxMjgsMCwyNTVdCitQ
QVNTOiBwaXhlbCBhdCAoNTAsMjUpIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAo
NTAsMzUpIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNTAsNDUpIHdhcyBbMCwx
MjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNTUsMCkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6
IHBpeGVsIGF0ICg1NSw1KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDU1LDE1
KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDU1LDI1KSB3YXMgWzAsMTI4LDAs
MjU1XQorUEFTUzogcGl4ZWwgYXQgKDU1LDM1KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4
ZWwgYXQgKDU1LDQ1KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDY1LDApIHdh
cyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNjUsNSkgd2FzIFswLDEyOCwwLDI1NV0K
K1BBU1M6IHBpeGVsIGF0ICg2NSwxNSkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0
ICg2NSwyNSkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0ICg2NSwzNSkgd2FzIFsw
LDEyOCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0ICg2NSw0NSkgd2FzIFswLDEyOCwwLDI1NV0KK1BB
U1M6IHBpeGVsIGF0ICg3NSwwKSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDc1
LDUpIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNzUsMTUpIHdhcyBbMCwxMjgs
MCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNzUsMjUpIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBw
aXhlbCBhdCAoNzUsMzUpIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoNzUsNDUp
IHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoODUsMCkgd2FzIFswLDEyOCwwLDI1
NV0KK1BBU1M6IHBpeGVsIGF0ICg4NSw1KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwg
YXQgKDg1LDE1KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDg1LDI1KSB3YXMg
WzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQgKDg1LDM1KSB3YXMgWzAsMTI4LDAsMjU1XQor
UEFTUzogcGl4ZWwgYXQgKDg1LDQ1KSB3YXMgWzAsMTI4LDAsMjU1XQorUEFTUzogcGl4ZWwgYXQg
KDk1LDApIHdhcyBbMCwxMjgsMCwyNTVdCitQQVNTOiBwaXhlbCBhdCAoOTUsNSkgd2FzIFswLDEy
OCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0ICg5NSwxNSkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6
IHBpeGVsIGF0ICg5NSwyNSkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0ICg5NSwz
NSkgd2FzIFswLDEyOCwwLDI1NV0KK1BBU1M6IHBpeGVsIGF0ICg5NSw0NSkgd2FzIFswLDEyOCww
LDI1NV0KK1BBU1M6ICdjb250ZXh0LnB1dEltYWdlRGF0YSh7fSwgMCwgMCknIHRocmV3IGFuIGV4
Y2VwdGlvbgorUEFTUzogJ2NvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgTmFOLCAwLCAwLCAw
LCAwLCAwKScgdGhyZXcgYW4gZXhjZXB0aW9uCitQQVNTOiAnY29udGV4dC5wdXRJbWFnZURhdGEo
YnVmZmVyLCAwLCBOYU4sIDAsIDAsIDAsIDApJyB0aHJldyBhbiBleGNlcHRpb24KK1BBU1M6ICdj
b250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDAsIDAsIE5hTiwgMCwgMCwgMCknIHRocmV3IGFu
IGV4Y2VwdGlvbgorUEFTUzogJ2NvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgMCwgMCwgMCwg
TmFOLCAwLCAwKScgdGhyZXcgYW4gZXhjZXB0aW9uCitQQVNTOiAnY29udGV4dC5wdXRJbWFnZURh
dGEoYnVmZmVyLCAwLCAwLCAwLCAwLCBOYU4sIDApJyB0aHJldyBhbiBleGNlcHRpb24KK1BBU1M6
ICdjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDAsIDAsIDAsIDAsIDAsIE5hTiknIHRocmV3
IGFuIGV4Y2VwdGlvbgorUEFTUzogJ2NvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgSW5maW5p
dHksIDAsIDAsIDAsIDAsIDApJyB0aHJldyBhbiBleGNlcHRpb24KK1BBU1M6ICdjb250ZXh0LnB1
dEltYWdlRGF0YShidWZmZXIsIDAsIEluZmluaXR5LCAwLCAwLCAwLCAwKScgdGhyZXcgYW4gZXhj
ZXB0aW9uCitQQVNTOiAnY29udGV4dC5wdXRJbWFnZURhdGEoYnVmZmVyLCAwLCAwLCBJbmZpbml0
eSwgMCwgMCwgMCknIHRocmV3IGFuIGV4Y2VwdGlvbgorUEFTUzogJ2NvbnRleHQucHV0SW1hZ2VE
YXRhKGJ1ZmZlciwgMCwgMCwgMCwgSW5maW5pdHksIDAsIDApJyB0aHJldyBhbiBleGNlcHRpb24K
K1BBU1M6ICdjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDAsIDAsIDAsIDAsIEluZmluaXR5
LCAwKScgdGhyZXcgYW4gZXhjZXB0aW9uCitQQVNTOiAnY29udGV4dC5wdXRJbWFnZURhdGEoYnVm
ZmVyLCAwLCAwLCAwLCAwLCAwLCBJbmZpbml0eSknIHRocmV3IGFuIGV4Y2VwdGlvbgorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtcHV0SW1hZ2VEYXRhLmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtcHV0SW1hZ2VEYXRhLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ0ZjZkYQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1wdXRJbWFnZURhdGEuaHRtbApAQCAtMCww
ICsxLDE1NCBAQAorVGhpcyB0ZXN0IGVuc3VyZXMgdGhhdCBwdXRJbWFnZURhdGEgd29ya3MgY29y
cmVjdGx5LCB0aGUgZW5kIHJlc3VsdCBzaG91bGQgYmUgYSAxMDB4MTAwcHggZ3JlZW4gc3F1YXJl
Ljxici8+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIj48L2Nh
bnZhcz48YnIvPgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxzY3JpcHQ+CitpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQo
KTsKKworZnVuY3Rpb24gbG9nKG1zZyl7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxv
ZyIpLmlubmVySFRNTCArPSBtc2cgKyAiPGJyLz4iOworfQorCitmdW5jdGlvbiBmaWxsUmVjdChp
bWFnZURhdGEsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHIsIGcsIGIsIGEpCit7CisgICAgdmFyIGJ5
dGVzUGVyUm93ID0gaW1hZ2VEYXRhLndpZHRoICogNDsKKyAgICB2YXIgZGF0YSA9aW1hZ2VEYXRh
LmRhdGE7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgeworICAgICAgICB2
YXIgcm93T3JpZ2luID0gKHkraSkgKiBieXRlc1BlclJvdzsKKyAgICAgICAgcm93T3JpZ2luICs9
IHggKiA0OworICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHdpZHRoOyBqKyspIHsKKyAgICAg
ICAgICAgIHZhciBwb3NpdGlvbiA9IHJvd09yaWdpbiArIGogKiA0OworICAgICAgICAgICAgZGF0
YVtwb3NpdGlvbiArIDBdID0gcjsKKyAgICAgICAgICAgIGRhdGFbcG9zaXRpb24gKyAxXSA9IGc7
CisgICAgICAgICAgICBkYXRhW3Bvc2l0aW9uICsgMl0gPSBiOworICAgICAgICAgICAgZGF0YVtw
b3NpdGlvbiArIDNdID0gYTsKKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gZGF0YVRv
QXJyYXkoZGF0YSkgeworICAgIHZhciByZXN1bHQgPSBuZXcgQXJyYXkoZGF0YS5sZW5ndGgpCisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKQorICAgICAgICByZXN1bHRb
aV0gPSBkYXRhW2ldOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2Z1bmN0aW9uIGdldFBpeGVs
KGN0eCwgeCwgeSkgeworICAgIHZhciBkYXRhID0gY3R4LmdldEltYWdlRGF0YSh4LHksMSwxKTsK
KyAgICBpZiAoIWRhdGEpIC8vIGdldEltYWdlRGF0YSBmYWlsZWQsIHdoaWNoIHNob3VsZCBuZXZl
ciBoYXBwZW4KKyAgICAgICAgcmV0dXJuIFstMSwtMSwtMSwtMV07CisgICAgcmV0dXJuIGRhdGFU
b0FycmF5KGRhdGEuZGF0YSk7Cit9CisKK2Z1bmN0aW9uIHBpeGVsU2hvdWxkQmUoY3R4LCB4LCB5
LCBjb2xvdXIpIHsKKyAgICB2YXIgY3R4Q29sb3VyID0gZ2V0UGl4ZWwoY3R4LCB4LCB5KTsKKyAg
ICB2YXIgY29ycmVjdCA9IHRydWU7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyBpKyspCisg
ICAgICAgIGlmIChjb2xvdXJbaV0gIT0gY3R4Q29sb3VyW2ldKSB7CisgICAgICAgICAgICBjb3Jy
ZWN0ID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIGlmIChjb3Jy
ZWN0KQorICAgICAgICBsb2coIlBBU1M6IHBpeGVsIGF0ICgiK1t4LHldKyIpIHdhcyBbIitjb2xv
dXIrIl0iKTsKKyAgICBlbHNlCisgICAgICAgIGxvZygiRkFJTDogcGl4ZWwgYXQgKCIrW3gseV0r
Iikgd2FzIFsiK2N0eENvbG91cisiXSwgZXhwZWN0ZWQgWyIrY29sb3VyKyJdIik7Cit9CisKK2Z1
bmN0aW9uIHNob3VsZFRocm93KGV4cHJlc3Npb24pIHsKKyAgICB2YXIgdGhyZXcgPSBmYWxzZTsK
KyAgICB0cnkgeworICAgICAgICBldmFsKGV4cHJlc3Npb24pOworICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgdGhyZXcgPSB0cnVlOworICAgIH0KKyAgICBpZiAodGhyZXcpIAorICAgICAgICBs
b2coIlBBU1M6ICciK2V4cHJlc3Npb24rIicgdGhyZXcgYW4gZXhjZXB0aW9uIik7CisgICAgZWxz
ZQorICAgICAgICBsb2coIkZBSUw6ICciK2V4cHJlc3Npb24rIicgZmFpbGVkIHRvIHRocm93IGFu
IGV4Y2VwdGlvbiIpOworfQorCit2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImNhbnZhcyIpOwordmFyIGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKworaWYg
KCFjb250ZXh0LmNyZWF0ZUltYWdlRGF0YSkKKyAgICBjb250ZXh0LmNyZWF0ZUltYWdlRGF0YSA9
IGZ1bmN0aW9uKHcsaCkgeyAKKyAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SW1hZ2VEYXRhKDAsIDAs
IHcsIGgpOworICAgIH0KK3ZhciBidWZmZXIgPSBjb250ZXh0LmNyZWF0ZUltYWdlRGF0YSgxMDAs
MTAwKTsKKy8vIEZpbGwgdG9wIGxlZnQgY29ybmVyCitmaWxsUmVjdChidWZmZXIsIDAsIDAsIDUw
LCA1MCwgMCwgMTI4LDAsMjU1KTsKK2NvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgMCwgMCk7
CitwaXhlbFNob3VsZEJlKGNvbnRleHQsICAwLCAgMCwgWzAsIDEyOCwwLDI1NV0pOworcGl4ZWxT
aG91bGRCZShjb250ZXh0LCAyNSwgMjUsIFswLCAxMjgsMCwyNTVdKTsKK3BpeGVsU2hvdWxkQmUo
Y29udGV4dCwgNDksICAwLCBbMCwgMTI4LDAsMjU1XSk7CitwaXhlbFNob3VsZEJlKGNvbnRleHQs
ICAwLCA0OSwgWzAsIDEyOCwwLDI1NV0pOworcGl4ZWxTaG91bGRCZShjb250ZXh0LCA0OSwgNDks
IFswLCAxMjgsMCwyNTVdKTsKK3BpeGVsU2hvdWxkQmUoY29udGV4dCwgNTAsICAwLCBbMCwgMCwg
MCwgMF0pOworcGl4ZWxTaG91bGRCZShjb250ZXh0LCAgMCwgNTAsIFswLCAwLCAwLCAwXSk7Citw
aXhlbFNob3VsZEJlKGNvbnRleHQsIDUwLCA1MCwgWzAsIDAsIDAsIDBdKTsKKworLy8gVGVzdCBw
b3NpdGlvbmVkIGRyYXdpbmcgLS0gbWFrZSBib3R0b20gcmlnaHQgZ3JlZW4KK2NvbnRleHQucHV0
SW1hZ2VEYXRhKGJ1ZmZlciwgMCwgNTApOworcGl4ZWxTaG91bGRCZShjb250ZXh0LCAgMCwgNTAs
IFswLCAxMjgsMCwyNTVdKTsKK3BpeGVsU2hvdWxkQmUoY29udGV4dCwgMjUsIDc1LCBbMCwgMTI4
LDAsMjU1XSk7CitwaXhlbFNob3VsZEJlKGNvbnRleHQsIDQ5LCA1MCwgWzAsIDEyOCwwLDI1NV0p
OworcGl4ZWxTaG91bGRCZShjb250ZXh0LCAgMCwgOTksIFswLCAxMjgsMCwyNTVdKTsKK3BpeGVs
U2hvdWxkQmUoY29udGV4dCwgNDksIDk5LCBbMCwgMTI4LDAsMjU1XSk7CisKKy8vIFRlc3QgdHJh
bnNsYXRpb24gZG9lc24ndCBlZmZlY3QgcHV0SW1hZ2VEYXRhCitjb250ZXh0LnRyYW5zbGF0ZSg1
MCwgLTUwKTsKK2NvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgNTAsIDUwKTsKK3BpeGVsU2hv
dWxkQmUoY29udGV4dCwgNTAsIDUwLCBbMCwgMTI4LDAsMjU1XSk7CitwaXhlbFNob3VsZEJlKGNv
bnRleHQsIDc1LCA3NSwgWzAsIDEyOCwwLDI1NV0pOworcGl4ZWxTaG91bGRCZShjb250ZXh0LCA5
OSwgOTksIFswLCAxMjgsMCwyNTVdKTsKK3BpeGVsU2hvdWxkQmUoY29udGV4dCwgNTAsIDQ5LCBb
MCwgMCwgMCwgMF0pOworY29udGV4dC50cmFuc2xhdGUoLTUwLCA1MCk7CisKKy8vIFRlc3QgZGly
dHkgcmVjdCBoYW5kbGluZworYnVmZmVyID0gY29udGV4dC5jcmVhdGVJbWFnZURhdGEoNTAsNTAp
OworZmlsbFJlY3QoYnVmZmVyLCAwLCAwLCA1MCwgNTAsIDAsIDEyOCwgMCwgMjU1KTsKK2NvbnRl
eHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgNTAsIDApOworZmlsbFJlY3QoYnVmZmVyLCAwLCAwLCA1
MCwgNTAsIDI1NSwgMCwgMCwgMjU1KTsKK2NvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgNTAs
IDAsIDE1LCAxNSwgMjAsIDIwKTsKK2NvbnRleHQuZmlsbFN0eWxlPSJyZ2IoMCwxMjgsMCkiOwor
Y29udGV4dC5maWxsUmVjdCg2NSwgMTUsIDIwLCAyMCk7Cit2YXIgcG9pbnRzID0gWzAsIDUsIDE1
LCAyNSwgMzUsIDQ1XTsKK2ZvciAodmFyIHggPSAwOyB4IDwgcG9pbnRzLmxlbmd0aDsgeCsrKQor
ICAgIGZvciAodmFyIHkgPSAwOyB5IDwgcG9pbnRzLmxlbmd0aDsgeSsrKQorICAgICAgICBwaXhl
bFNob3VsZEJlKGNvbnRleHQsIHBvaW50c1t4XSArIDUwLCBwb2ludHNbeV0sIFswLCAxMjgsIDAs
IDI1NV0pOworCisvLyBUZXN0IGRyYXdpbmcgb3V0c2lkZSB0aGUgY2FudmFzIGJvcmRlcgorZmls
bFJlY3QoYnVmZmVyLCAwLCAwLCA1MCwgNTAsIDI1NSwgMCwgMCwgMjU1KTsKK2NvbnRleHQucHV0
SW1hZ2VEYXRhKGJ1ZmZlciwgLTUwLCAwKTsKK3BpeGVsU2hvdWxkQmUoY29udGV4dCwgMCwgMjUs
IFswLCAxMjgsMCwyNTVdKTsKK2NvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgMTAwLCAwKTsK
K3BpeGVsU2hvdWxkQmUoY29udGV4dCwgOTksIDI1LCBbMCwgMTI4LDAsMjU1XSk7Citjb250ZXh0
LnB1dEltYWdlRGF0YShidWZmZXIsIDAsIC01MCk7CitwaXhlbFNob3VsZEJlKGNvbnRleHQsIDI1
LCAwLCBbMCwgMTI4LDAsMjU1XSk7Citjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDAsIDEw
MCk7CitwaXhlbFNob3VsZEJlKGNvbnRleHQsIDI1LCA5OSwgWzAsIDEyOCwwLDI1NV0pOworCisv
LyB0ZXN0IGRyYXdpbmcgd2l0aCBub24taW50ZXJzZWN0aW5nIGRpcnR5IHJlY3QKK2NvbnRleHQu
cHV0SW1hZ2VEYXRhKGJ1ZmZlciwgNTAsIDAsICA1MCwgMCwgMTAwLCAxMDApOworY29udGV4dC5w
dXRJbWFnZURhdGEoYnVmZmVyLCA1MCwgMCwgLTUwLCAwLCA1MCwgMTAwKTsKK2NvbnRleHQucHV0
SW1hZ2VEYXRhKGJ1ZmZlciwgNTAsIDAsICAwLCA1MCwgMTAwLCAxMDApOworY29udGV4dC5wdXRJ
bWFnZURhdGEoYnVmZmVyLCA1MCwgMCwgIDUwLCAtNTAsIDEwMCwgMTAwKTsKK2ZvciAodmFyIHgg
PSAwOyB4IDwgcG9pbnRzLmxlbmd0aDsgeCsrKQorICAgIGZvciAodmFyIHkgPSAwOyB5IDwgcG9p
bnRzLmxlbmd0aDsgeSsrKQorICAgICAgICBwaXhlbFNob3VsZEJlKGNvbnRleHQsIHBvaW50c1t4
XSArIDUwLCBwb2ludHNbeV0sIFswLCAxMjgsIDAsIDI1NV0pOworCisKK3Nob3VsZFRocm93KCJj
b250ZXh0LnB1dEltYWdlRGF0YSh7fSwgMCwgMCkiKTsKK3Nob3VsZFRocm93KCJjb250ZXh0LnB1
dEltYWdlRGF0YShidWZmZXIsIE5hTiwgMCwgMCwgMCwgMCwgMCkiKTsKK3Nob3VsZFRocm93KCJj
b250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDAsIE5hTiwgMCwgMCwgMCwgMCkiKTsKK3Nob3Vs
ZFRocm93KCJjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDAsIDAsIE5hTiwgMCwgMCwgMCki
KTsKK3Nob3VsZFRocm93KCJjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDAsIDAsIDAsIE5h
TiwgMCwgMCkiKTsKK3Nob3VsZFRocm93KCJjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDAs
IDAsIDAsIDAsIE5hTiwgMCkiKTsKK3Nob3VsZFRocm93KCJjb250ZXh0LnB1dEltYWdlRGF0YShi
dWZmZXIsIDAsIDAsIDAsIDAsIDAsIE5hTikiKTsKK3Nob3VsZFRocm93KCJjb250ZXh0LnB1dElt
YWdlRGF0YShidWZmZXIsIEluZmluaXR5LCAwLCAwLCAwLCAwLCAwKSIpOworc2hvdWxkVGhyb3co
ImNvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgMCwgSW5maW5pdHksIDAsIDAsIDAsIDApIik7
CitzaG91bGRUaHJvdygiY29udGV4dC5wdXRJbWFnZURhdGEoYnVmZmVyLCAwLCAwLCBJbmZpbml0
eSwgMCwgMCwgMCkiKTsKK3Nob3VsZFRocm93KCJjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIs
IDAsIDAsIDAsIEluZmluaXR5LCAwLCAwKSIpOworc2hvdWxkVGhyb3coImNvbnRleHQucHV0SW1h
Z2VEYXRhKGJ1ZmZlciwgMCwgMCwgMCwgMCwgSW5maW5pdHksIDApIik7CitzaG91bGRUaHJvdygi
Y29udGV4dC5wdXRJbWFnZURhdGEoYnVmZmVyLCAwLCAwLCAwLCAwLCAwLCBJbmZpbml0eSkiKTsK
Kzwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5n
ZUxvZwppbmRleCA2OWUzYWQ3Li4zZjc3YmFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDA4LTAyLTI0ICBP
bGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDE2OTU0OiBTdXBwb3J0IHB1dEltYWdlRGF0YQor
ICAgICAgICAKKyAgICAgICAgSW1wbGVtZW50IHN1cHBvcnQgZm9yIEhUTUw1J3MgcHV0SW1hZ2VE
YXRhIGZvciB0aGUgQ0cgcG9ydC4gIEFsbCBvdGhlciBwb3J0cworICAgICAgICBhcmUgY3VycmVu
dGx5IGp1c3QgdXNpbmcgc3R1YnMgZm9yIHRoZSBmaW5hbCBibGl0LgorCisgICAgICAgIFRlc3Q6
IGZhc3QvY2FudmFzL2NhbnZhcy1wdXRJbWFnZURhdGEuaHRtbAorCisgICAgICAgICogYmluZGlu
Z3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAg
ICogaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIGh0bWwv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
SW1hZ2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1
ZmZlckNhaXJvLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZl
ckNHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgorCiAyMDA4LTAyLTI0
ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBT
YW0uCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkRDdXN0b20uY3BwCmluZGV4IDRhNjM5MGYuLjM2NDZkYWIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20u
Y3BwCkBAIC0yOCwxMCArMjgsMTIgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRl
ICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNp
bmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJKU0NhbnZhc0dyYWRpZW50LmgiCiAjaW5j
bHVkZSAiSlNDYW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiSlNIVE1MQ2FudmFzRWxlbWVudC5o
IgogI2luY2x1ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkpTSW1hZ2VEYXRh
LmgiCiAjaW5jbHVkZSAia2pzX2h0bWwuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEtKUzsKQEAgLTMz
NSw2ICszMzcsMjQgQEAgSlNWYWx1ZSogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0
ZVBhdHRlcm4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JgogCiBKU1ZhbHVlKiBKU0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VEYXRhKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
TGlzdCYgYXJncykKIHsKKyAgICAvLyBwdXRJbWFnZURhdGEgaGFzIHR3byB2YXJpYW50cworICAg
IC8vIHB1dEltYWdlRGF0YShJbWFnZURhdGEsIHgsIHkpCisgICAgLy8gcHV0SW1hZ2VEYXRhKElt
YWdlRGF0YSwgeCwgeSwgZGlydHlYLCBkaXJ0eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0KQor
ICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IGltcGwoKTsKKyAgICAKKyAg
ICBJbWFnZURhdGEqIGRhdGEgPSB0b0ltYWdlRGF0YShhcmdzWzBdKTsKKyAgICBpZiAoIWRhdGEp
IHsKKyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgIGlmIChhcmdzLnNpemUoKSA9PSA3KQorICAgICAgICBjb250ZXh0LT5wdXRJbWFn
ZURhdGEoZGF0YSwgYXJnc1sxXS0+dG9GbG9hdChleGVjKSwgYXJnc1syXS0+dG9GbG9hdChleGVj
KSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzNdLT50b0Zsb2F0KGV4ZWMp
LCBhcmdzWzRdLT50b0Zsb2F0KGV4ZWMpLCBhcmdzWzVdLT50b0Zsb2F0KGV4ZWMpLCBhcmdzWzZd
LT50b0Zsb2F0KGV4ZWMpLCBlYyk7CisgICAgZWxzZQorICAgICAgICBjb250ZXh0LT5wdXRJbWFn
ZURhdGEoZGF0YSwgYXJnc1sxXS0+dG9GbG9hdChleGVjKSwgYXJnc1syXS0+dG9GbG9hdChleGVj
KSwgZWMpOworCisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAgYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNw
cAppbmRleCBkYWIzODc5Li4xYjk0Yzk1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcApAQCAtMTIwMiw0ICsxMjAyLDQ5IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRh
PiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmdldEltYWdlRGF0YShmbG9hdCBzeCwgZmxvYXQg
c3ksCiAgICAgcmV0dXJuIGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKHNjYWxlZFJlY3QpOwogfQogCit2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSogZGF0
YSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBwdXRJbWFn
ZURhdGEoZGF0YSwgZHgsIGR5LCAwLCAwLCBkYXRhLT53aWR0aCgpLCBkYXRhLT5oZWlnaHQoKSwg
ZWMpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VEYXRhKElt
YWdlRGF0YSogZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRp
cnR5WSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0
IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAg
ICBpZiAoIWlzZmluaXRlKGR4KSB8fCAhaXNmaW5pdGUoZHkpIHx8ICFpc2Zpbml0ZShkaXJ0eVgp
IHx8IAorICAgICAgICAhaXNmaW5pdGUoZGlydHlZKSB8fCAhaXNmaW5pdGUoZGlydHlXaWR0aCkg
fHwgIWlzZmluaXRlKGRpcnR5SGVpZ2h0KSl7CisgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gbV9j
YW52YXMgPyBtX2NhbnZhcy0+YnVmZmVyKCkgOiAwOworICAgIGlmICghYnVmZmVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoZGlydHlXaWR0aCA8IDApIHsKKyAgICAgICAgZGlydHlYICs9
IGRpcnR5V2lkdGg7CisgICAgICAgIGRpcnR5V2lkdGggPSAtZGlydHlXaWR0aDsKKyAgICB9CisK
KyAgICBpZiAoZGlydHlIZWlnaHQgPCAwKSB7CisgICAgICAgIGRpcnR5WSArPSBkaXJ0eUhlaWdo
dDsKKyAgICAgICAgZGlydHlIZWlnaHQgPSAtZGlydHlIZWlnaHQ7CisgICAgfQorCisgICAgRmxv
YXRSZWN0IGNsaXBSZWN0KGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7
CisgICAgY2xpcFJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgZGF0YS0+d2lkdGgoKSwgZGF0
YS0+aGVpZ2h0KCkpKTsKKyAgICBpbnQgZGVzdFggPSBzdGF0aWNfY2FzdDxpbnQ+KGR4KTsKKyAg
ICBpbnQgZGVzdFkgPSBzdGF0aWNfY2FzdDxpbnQ+KGR5KTsKKyAgICBJbnRSZWN0IHNvdXJjZVJl
Y3Qoc3RhdGljX2Nhc3Q8aW50PihjbGlwUmVjdC54KCkpICsgZGVzdFgsIHN0YXRpY19jYXN0PGlu
dD4oY2xpcFJlY3QueSgpKSArIGRlc3RZLCAKKyAgICAgICAgICAgICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8aW50PihjbGlwUmVjdC53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8aW50PihjbGlwUmVjdC5o
ZWlnaHQoKSkpOworICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgYnVmZmVy
LT5zaXplKCkud2lkdGgoKSwgYnVmZmVyLT5zaXplKCkuaGVpZ2h0KCkpKTsKKyAgICBpZiAoc291
cmNlUmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICB3aWxsRHJhdyhzb3VyY2VS
ZWN0KTsKKyAgICBzb3VyY2VSZWN0LnNldFgoc291cmNlUmVjdC54KCkgLSBkZXN0WCk7CisgICAg
c291cmNlUmVjdC5zZXRZKHNvdXJjZVJlY3QueSgpIC0gZGVzdFkpOworICAgIEludFBvaW50IGRl
c3RQb2ludChkZXN0WCwgZGVzdFkpOworICAgIAorICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKGRh
dGEsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBiL1dl
YkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAppbmRleCBmNGNjOTM4Li41Zjc5
ZDUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgK
KysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCkBAIC0xNjYsNiAr
MTY2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICAgICAgICAgUGFzc1JlZlB0
cjxJbWFnZURhdGE+IGNyZWF0ZUltYWdlRGF0YShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSBj
b25zdDsKICAgICAgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShmbG9hdCBz
eCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3Q7CisgICAgICAgIHZvaWQgcHV0
SW1hZ2VEYXRhKEltYWdlRGF0YSosIGZsb2F0IGR4LCBmbG9hdCBkeSwgRXhjZXB0aW9uQ29kZSYp
OworICAgICAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEqLCBmbG9hdCBkeCwgZmxvYXQg
ZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBk
aXJ0eUhlaWdodCwgRXhjZXB0aW9uQ29kZSYpOwogICAgICAgICAKICAgICAgICAgdm9pZCByZXNl
dCgpOwogICAgICAgICB2b2lkIGRldGFjaENhbnZhcygpIHsgbV9jYW52YXMgPSAwOyB9CmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggODY5Y2Q3MS4uMmFjMmI0ZSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtNDksNiArNDksNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiAgICAg
Y2xhc3MgSW1hZ2VEYXRhOworICAgIGNsYXNzIEludFBvaW50OwogICAgIGNsYXNzIEludFJlY3Q7
CiAgICAgY2xhc3MgUmVuZGVyT2JqZWN0OwogCkBAIC02Nyw4ICs2OCwxMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAjZWxpZiBQTEFURk9STShDQUlSTykKICAgICAgICAgY2Fpcm9fc3VyZmFjZV90
KiBzdXJmYWNlKCkgY29uc3Q7CiAjZW5kaWYKLQorICAgICAgICAKICAgICAgICAgUGFzc1JlZlB0
cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdDsKKyAg
ICAgICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3Qm
IHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpOworCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgdm9pZCogbV9kYXRhOwogICAgICAgICBJbnRTaXplIG1fc2l6ZTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCmlu
ZGV4IGQ4ZDZhZDAuLjM5MmU5ZGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApAQCAtODAsNCArODAsOSBAQCBQYXNzUmVm
UHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0Jikg
Y29uc3QKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRh
KEltYWdlRGF0YSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDRy5jcHAKaW5kZXggZjQ1NmVjNS4uZGRlMDdiMyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBAIC0xNTYsNCArMTU2LDU1
IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKGNvbnN0
IEludFJlY3QmIHJlY3QpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBJbWFn
ZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBz
b3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAgIEFTU0VSVChzb3Vy
Y2VSZWN0LndpZHRoKCkgPiAwKTsKKyAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDAp
OworCisgICAgaW50IG9yaWdpbnggPSBzb3VyY2VSZWN0LngoKTsKKyAgICBpbnQgZGVzdHggPSBk
ZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC54KCk7CisgICAgQVNTRVJUKGRlc3R4ID49IDApOwor
ICAgIEFTU0VSVChkZXN0eCA8IG1fc2l6ZS53aWR0aCgpKTsKKyAgICBBU1NFUlQob3JpZ2lueCA+
PSAwKTsKKyAgICBBU1NFUlQob3JpZ2lueCA8PSBzb3VyY2VSZWN0LnJpZ2h0KCkpOworCisgICAg
aW50IGVuZHggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC54KCkgKyBzb3VyY2VSZWN0Lndp
ZHRoKCk7CisgICAgQVNTRVJUKGVuZHggPD0gbV9zaXplLndpZHRoKCkpOworCisgICAgaW50IG51
bUNvbHVtbnMgPSBlbmR4IC0gZGVzdHg7CisgICAgCisgICAgaW50IG9yaWdpbnkgPSBzb3VyY2VS
ZWN0LnkoKTsKKyAgICBpbnQgZGVzdHkgPSBkZXN0UG9pbnQueSgpICsgc291cmNlUmVjdC55KCk7
CisgICAgQVNTRVJUKGRlc3R5ID49IDApOworICAgIEFTU0VSVChkZXN0eSA8IG1fc2l6ZS5oZWln
aHQoKSk7CisgICAgQVNTRVJUKG9yaWdpbnkgPj0gMCk7CisgICAgQVNTRVJUKG9yaWdpbnkgPD0g
c291cmNlUmVjdC54KCkgKyBzb3VyY2VSZWN0LmhlaWdodCgpKTsKKworICAgIGludCBlbmR5ID0g
ZGVzdFBvaW50LnkoKSArIHNvdXJjZVJlY3QueSgpICsgc291cmNlUmVjdC5oZWlnaHQoKTsKKyAg
ICBBU1NFUlQoZW5keCA8PSBtX3NpemUuaGVpZ2h0KCkpOworICAgIGludCBudW1Sb3dzID0gZW5k
eSAtIGRlc3R5OworCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc291cmNlLT53
aWR0aCgpOworICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiBtX3NpemUud2lkdGgo
KTsKKyAgICAKKyAgICAvLyAtb3JpZ2lueSB0byBoYW5kbGUgdGhlIGFjY3Vyc2VkIGZsaXBwZWQg
eSBheGlzCisgICAgdW5zaWduZWQgY2hhciogc3JjUm93cyA9IHNvdXJjZS0+ZGF0YSgpLT5kYXRh
KCkuZGF0YSgpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7CisgICAg
dW5zaWduZWQgY2hhciogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIq
PihtX2RhdGEpICsgKG1fc2l6ZS5oZWlnaHQoKSAtIGRlc3R5IC0gMSkgKiBkZXN0Qnl0ZXNQZXJS
b3cgKyBkZXN0eCAqIDQ7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsK
KyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBzcmNSb3dzW3ggKiA0ICsgM107CisgICAgICAgICAg
ICBpZiAoYWxwaGEgIT0gMjU1KSB7CisgICAgICAgICAgICAgICAgZGVzdFJvd3NbeCAqIDQgKyAw
XSA9IChzcmNSb3dzWzBdICogYWxwaGEpIC8gMjU1OworICAgICAgICAgICAgICAgIGRlc3RSb3dz
W3ggKiA0ICsgMV0gPSAoc3JjUm93c1sxXSAqIGFscGhhKSAvIDI1NTsKKyAgICAgICAgICAgICAg
ICBkZXN0Um93c1t4ICogNCArIDJdID0gKHNyY1Jvd3NbMl0gKiBhbHBoYSkgLyAyNTU7CisgICAg
ICAgICAgICAgICAgZGVzdFJvd3NbeCAqIDQgKyAzXSA9IGFscGhhOworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJv
d3MgKyB4ICogNClbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oc3JjUm93cyArIHgg
KiA0KVswXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZXN0Um93cyAtPSBk
ZXN0Qnl0ZXNQZXJSb3c7CisgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CisgICAg
fQorfQorCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdl
QnVmZmVyUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0
LmNwcAppbmRleCAyMTcyNDJmLi40NDk2NzdlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAKQEAgLTc3LDQgKzc3LDkgQEAgUGFzc1JlZlB0cjxJ
bWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYpIGNvbnN0
CiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YShJbWFn
ZURhdGEqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d3gvSW1hZ2VCdWZmZXJXeC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdl
QnVmZmVyV3guY3BwCmluZGV4IDNlOTZmMWQuLjBjODMyZWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcApAQCAtNTIsNCArNTIsOSBAQCBQYXNz
UmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0
JikgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VE
YXRhKEltYWdlRGF0YSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19329</attachid>
            <date>2008-02-24 15:03:22 -0800</date>
            <delta_ts>2008-02-25 04:40:39 -0800</delta_ts>
            <desc>Now with betterer testcases!!!</desc>
            <filename>putImageData.diff</filename>
            <type>text/plain</type>
            <size>22367</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5YjY1NjA5Li44NzgwYWJlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDgtMDIt
MjQgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMTY5NTQ6IFN1cHBvcnQgcHV0SW1hZ2VE
YXRhCisKKyAgICAgICAgTmljZSBzaW1wbGUgdGVzdGNhc2UgZm9yIHB1dEltYWdlRGF0YSBjb3Zl
cmluZyB0aGUgZXhjaXRpbmcgCisgICAgICAgIGxpdHRsZSBiaXRzIG9mIGJlaGF2aW91ciBwcmVz
ZW50IGluIHRoZSBjdXJyZW50IHNwZWMuCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy9jYW52YXMt
cHV0SW1hZ2VEYXRhLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMv
Y2FudmFzLXB1dEltYWdlRGF0YS5odG1sOiBBZGRlZC4KKwogMjAwOC0wMi0yNCAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtLgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLXB1dEltYWdlRGF0YS1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtcHV0SW1hZ2VEYXRhLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDFhMjFkCi0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLXB1dEltYWdlRGF0
YS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMTYgQEAKKworVGhpcyB0ZXN0IGVuc3VyZXMgdGhh
dCBwdXRJbWFnZURhdGEgd29ya3MgY29ycmVjdGx5LCB0aGUgZW5kIHJlc3VsdCBzaG91bGQgYmUg
YSAxMDB4MTAwcHggZ3JlZW4gc3F1YXJlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworUEFTUyBnZXRQaXhlbCgwLDApIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoMjUs
MjUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNDksMCkgaXMgWzAsMTI4LDAsMjU1
XQorUEFTUyBnZXRQaXhlbCgwLDQ5KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDQ5
LDQ5KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDUwLDApIGlzIFswLDAsMCwwXQor
UEFTUyBnZXRQaXhlbCgwLDUwKSBpcyBbMCwwLDAsMF0KK1BBU1MgZ2V0UGl4ZWwoNTAsNTApIGlz
IFswLDAsMCwwXQorUEFTUyBnZXRQaXhlbCgwLDUwKSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdl
dFBpeGVsKDI1LDc1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDQ5LDUwKSBpcyBb
MCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDAsOTkpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1Mg
Z2V0UGl4ZWwoNDksOTkpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNTAsNTApIGlz
IFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNzUsNzUpIGlzIFswLDEyOCwwLDI1NV0KK1BB
U1MgZ2V0UGl4ZWwoOTksOTkpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNTAsNDkp
IGlzIFswLDAsMCwwXQorUEFTUyBnZXRQaXhlbCg1MCwwKSBpcyBbMCwxMjgsMCwyNTVdCitQQVNT
IGdldFBpeGVsKDUwLDUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNTAsMTUpIGlz
IFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNTAsMjUpIGlzIFswLDEyOCwwLDI1NV0KK1BB
U1MgZ2V0UGl4ZWwoNTAsMzUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNTAsNDUp
IGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNTUsMCkgaXMgWzAsMTI4LDAsMjU1XQor
UEFTUyBnZXRQaXhlbCg1NSw1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDU1LDE1
KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDU1LDI1KSBpcyBbMCwxMjgsMCwyNTVd
CitQQVNTIGdldFBpeGVsKDU1LDM1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDU1
LDQ1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDY1LDApIGlzIFswLDEyOCwwLDI1
NV0KK1BBU1MgZ2V0UGl4ZWwoNjUsNSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg2
NSwxNSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg2NSwyNSkgaXMgWzAsMTI4LDAs
MjU1XQorUEFTUyBnZXRQaXhlbCg2NSwzNSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhl
bCg2NSw0NSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg3NSwwKSBpcyBbMCwxMjgs
MCwyNTVdCitQQVNTIGdldFBpeGVsKDc1LDUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4
ZWwoNzUsMTUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNzUsMjUpIGlzIFswLDEy
OCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNzUsMzUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0
UGl4ZWwoNzUsNDUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoODUsMCkgaXMgWzAs
MTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg4NSw1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdl
dFBpeGVsKDg1LDE1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDg1LDI1KSBpcyBb
MCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDg1LDM1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNT
IGdldFBpeGVsKDg1LDQ1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDk1LDApIGlz
IFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoOTUsNSkgaXMgWzAsMTI4LDAsMjU1XQorUEFT
UyBnZXRQaXhlbCg5NSwxNSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg5NSwyNSkg
aXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg5NSwzNSkgaXMgWzAsMTI4LDAsMjU1XQor
UEFTUyBnZXRQaXhlbCg5NSw0NSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCgwLDI1
KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDk5LDI1KSBpcyBbMCwxMjgsMCwyNTVd
CitQQVNTIGdldFBpeGVsKDI1LDApIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoMjUs
OTkpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNTAsMCkgaXMgWzAsMTI4LDAsMjU1
XQorUEFTUyBnZXRQaXhlbCg1MCw1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDUw
LDE1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDUwLDI1KSBpcyBbMCwxMjgsMCwy
NTVdCitQQVNTIGdldFBpeGVsKDUwLDM1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVs
KDUwLDQ1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDU1LDApIGlzIFswLDEyOCww
LDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNTUsNSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhl
bCg1NSwxNSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg1NSwyNSkgaXMgWzAsMTI4
LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg1NSwzNSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQ
aXhlbCg1NSw0NSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg2NSwwKSBpcyBbMCwx
MjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDY1LDUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0
UGl4ZWwoNjUsMTUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNjUsMjUpIGlzIFsw
LDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNjUsMzUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1Mg
Z2V0UGl4ZWwoNjUsNDUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNzUsMCkgaXMg
WzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg3NSw1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNT
IGdldFBpeGVsKDc1LDE1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDc1LDI1KSBp
cyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDc1LDM1KSBpcyBbMCwxMjgsMCwyNTVdCitQ
QVNTIGdldFBpeGVsKDc1LDQ1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDg1LDAp
IGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoODUsNSkgaXMgWzAsMTI4LDAsMjU1XQor
UEFTUyBnZXRQaXhlbCg4NSwxNSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg4NSwy
NSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg4NSwzNSkgaXMgWzAsMTI4LDAsMjU1
XQorUEFTUyBnZXRQaXhlbCg4NSw0NSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg5
NSwwKSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDk1LDUpIGlzIFswLDEyOCwwLDI1
NV0KK1BBU1MgZ2V0UGl4ZWwoOTUsMTUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwo
OTUsMjUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoOTUsMzUpIGlzIFswLDEyOCww
LDI1NV0KK1BBU1MgZ2V0UGl4ZWwoOTUsNDUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgY29udGV4
dC5wdXRJbWFnZURhdGEoe30sIDAsIDApIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogVFlQRV9NSVNN
QVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcuCitQQVNTIGNvbnRleHQucHV0SW1hZ2VEYXRhKGJ1
ZmZlciwgTmFOLCAwLCAwLCAwLCAwLCAwKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IElOREVYX1NJ
WkVfRVJSOiBET00gRXhjZXB0aW9uIDEuCitQQVNTIGNvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZl
ciwgMCwgTmFOLCAwLCAwLCAwLCAwKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IElOREVYX1NJWkVf
RVJSOiBET00gRXhjZXB0aW9uIDEuCitQQVNTIGNvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwg
MCwgMCwgTmFOLCAwLCAwLCAwKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IElOREVYX1NJWkVfRVJS
OiBET00gRXhjZXB0aW9uIDEuCitQQVNTIGNvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgMCwg
MCwgMCwgTmFOLCAwLCAwKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IElOREVYX1NJWkVfRVJSOiBE
T00gRXhjZXB0aW9uIDEuCitQQVNTIGNvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgMCwgMCwg
MCwgMCwgTmFOLCAwKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IElOREVYX1NJWkVfRVJSOiBET00g
RXhjZXB0aW9uIDEuCitQQVNTIGNvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgMCwgMCwgMCwg
MCwgMCwgTmFOKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IElOREVYX1NJWkVfRVJSOiBET00gRXhj
ZXB0aW9uIDEuCitQQVNTIGNvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgSW5maW5pdHksIDAs
IDAsIDAsIDAsIDApIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSU5ERVhfU0laRV9FUlI6IERPTSBF
eGNlcHRpb24gMS4KK1BBU1MgY29udGV4dC5wdXRJbWFnZURhdGEoYnVmZmVyLCAwLCBJbmZpbml0
eSwgMCwgMCwgMCwgMCkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJTkRFWF9TSVpFX0VSUjogRE9N
IEV4Y2VwdGlvbiAxLgorUEFTUyBjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDAsIDAsIElu
ZmluaXR5LCAwLCAwLCAwKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IElOREVYX1NJWkVfRVJSOiBE
T00gRXhjZXB0aW9uIDEuCitQQVNTIGNvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgMCwgMCwg
MCwgSW5maW5pdHksIDAsIDApIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSU5ERVhfU0laRV9FUlI6
IERPTSBFeGNlcHRpb24gMS4KK1BBU1MgY29udGV4dC5wdXRJbWFnZURhdGEoYnVmZmVyLCAwLCAw
LCAwLCAwLCBJbmZpbml0eSwgMCkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJTkRFWF9TSVpFX0VS
UjogRE9NIEV4Y2VwdGlvbiAxLgorUEFTUyBjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDAs
IDAsIDAsIDAsIDAsIEluZmluaXR5KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IElOREVYX1NJWkVf
RVJSOiBET00gRXhjZXB0aW9uIDEuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2Fu
dmFzLXB1dEltYWdlRGF0YS5odG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLXB1
dEltYWdlRGF0YS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNmU5
YjIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtcHV0
SW1hZ2VEYXRhLmh0bWwKQEAgLTAsMCArMSw3IEBACis8bGluayByZWw9InN0eWxlc2hlZXQiIGhy
ZWY9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4v
anMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxjYW52YXMgaWQ9ImNhbnZh
cyIgd2lkdGg9IjEwMCIgaGVpZ2h0PSIxMDAiPjwvY2FudmFzPjxici8+Cis8cCBpZD0iZGVzY3Jp
cHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9ImNhbnZh
cy1wdXRJbWFnZURhdGEuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvY2FudmFzLXB1dEltYWdlRGF0YS5qcyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFz
L2NhbnZhcy1wdXRJbWFnZURhdGEuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uNzZmNWJlYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL2Nh
bnZhcy1wdXRJbWFnZURhdGEuanMKQEAgLTAsMCArMSwxMjMgQEAKK2Rlc2NyaXB0aW9uKCJUaGlz
IHRlc3QgZW5zdXJlcyB0aGF0IHB1dEltYWdlRGF0YSB3b3JrcyBjb3JyZWN0bHksIHRoZSBlbmQg
cmVzdWx0IHNob3VsZCBiZSBhIDEwMHgxMDBweCBncmVlbiBzcXVhcmUuIik7CisKK2Z1bmN0aW9u
IGZpbGxSZWN0KGltYWdlRGF0YSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgciwgZywgYiwgYSkKK3sK
KyAgICB2YXIgYnl0ZXNQZXJSb3cgPSBpbWFnZURhdGEud2lkdGggKiA0OworICAgIHZhciBkYXRh
ID1pbWFnZURhdGEuZGF0YTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7
CisgICAgICAgIHZhciByb3dPcmlnaW4gPSAoeStpKSAqIGJ5dGVzUGVyUm93OworICAgICAgICBy
b3dPcmlnaW4gKz0geCAqIDQ7CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd2lkdGg7IGor
KykgeworICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gcm93T3JpZ2luICsgaiAqIDQ7CisgICAg
ICAgICAgICBkYXRhW3Bvc2l0aW9uICsgMF0gPSByOworICAgICAgICAgICAgZGF0YVtwb3NpdGlv
biArIDFdID0gZzsKKyAgICAgICAgICAgIGRhdGFbcG9zaXRpb24gKyAyXSA9IGI7CisgICAgICAg
ICAgICBkYXRhW3Bvc2l0aW9uICsgM10gPSBhOworICAgICAgICB9CisgICAgfQorfQorCitmdW5j
dGlvbiBkYXRhVG9BcnJheShkYXRhKSB7CisgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheShkYXRh
Lmxlbmd0aCkKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspCisgICAg
ICAgIHJlc3VsdFtpXSA9IGRhdGFbaV07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnVuY3Rp
b24gZ2V0UGl4ZWwoeCwgeSkgeworICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEo
eCx5LDEsMSk7CisgICAgaWYgKCFkYXRhKSAvLyBnZXRJbWFnZURhdGEgZmFpbGVkLCB3aGljaCBz
aG91bGQgbmV2ZXIgaGFwcGVuCisgICAgICAgIHJldHVybiBbLTEsLTEsLTEsLTFdOworICAgIHJl
dHVybiBkYXRhVG9BcnJheShkYXRhLmRhdGEpOworfQorCitmdW5jdGlvbiBwaXhlbFNob3VsZEJl
KHgsIHksIGNvbG91cikgeworICAgIHNob3VsZEJlKCJnZXRQaXhlbCgiICsgW3gsIHldICsiKSIs
ICJbIitjb2xvdXIrIl0iKTsKK30KKwordmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJjYW52YXMiKTsKK3ZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CisK
K2lmICghY29udGV4dC5jcmVhdGVJbWFnZURhdGEpCisgICAgY29udGV4dC5jcmVhdGVJbWFnZURh
dGEgPSBmdW5jdGlvbih3LGgpIHsgCisgICAgICAgIHJldHVybiB0aGlzLmdldEltYWdlRGF0YSgw
LCAwLCB3LCBoKTsKKyAgICB9Cit2YXIgYnVmZmVyID0gY29udGV4dC5jcmVhdGVJbWFnZURhdGEo
MTAwLDEwMCk7CisvLyBGaWxsIHRvcCBsZWZ0IGNvcm5lcgorZmlsbFJlY3QoYnVmZmVyLCAwLCAw
LCA1MCwgNTAsIDAsIDEyOCwwLDI1NSk7Citjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDAs
IDApOworcGl4ZWxTaG91bGRCZSggMCwgIDAsIFswLCAxMjgsMCwyNTVdKTsKK3BpeGVsU2hvdWxk
QmUoMjUsIDI1LCBbMCwgMTI4LDAsMjU1XSk7CitwaXhlbFNob3VsZEJlKDQ5LCAgMCwgWzAsIDEy
OCwwLDI1NV0pOworcGl4ZWxTaG91bGRCZSggMCwgNDksIFswLCAxMjgsMCwyNTVdKTsKK3BpeGVs
U2hvdWxkQmUoNDksIDQ5LCBbMCwgMTI4LDAsMjU1XSk7CitwaXhlbFNob3VsZEJlKDUwLCAgMCwg
WzAsIDAsIDAsIDBdKTsKK3BpeGVsU2hvdWxkQmUoIDAsIDUwLCBbMCwgMCwgMCwgMF0pOworcGl4
ZWxTaG91bGRCZSg1MCwgNTAsIFswLCAwLCAwLCAwXSk7CisKKy8vIFRlc3QgcG9zaXRpb25lZCBk
cmF3aW5nIC0tIG1ha2UgYm90dG9tIHJpZ2h0IGdyZWVuCitjb250ZXh0LnB1dEltYWdlRGF0YShi
dWZmZXIsIDAsIDUwKTsKK3BpeGVsU2hvdWxkQmUoIDAsIDUwLCBbMCwgMTI4LDAsMjU1XSk7Citw
aXhlbFNob3VsZEJlKDI1LCA3NSwgWzAsIDEyOCwwLDI1NV0pOworcGl4ZWxTaG91bGRCZSg0OSwg
NTAsIFswLCAxMjgsMCwyNTVdKTsKK3BpeGVsU2hvdWxkQmUoIDAsIDk5LCBbMCwgMTI4LDAsMjU1
XSk7CitwaXhlbFNob3VsZEJlKDQ5LCA5OSwgWzAsIDEyOCwwLDI1NV0pOworCisvLyBUZXN0IHRy
YW5zbGF0aW9uIGRvZXNuJ3QgZWZmZWN0IHB1dEltYWdlRGF0YQorY29udGV4dC50cmFuc2xhdGUo
NTAsIC01MCk7Citjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDUwLCA1MCk7CitwaXhlbFNo
b3VsZEJlKDUwLCA1MCwgWzAsIDEyOCwwLDI1NV0pOworcGl4ZWxTaG91bGRCZSg3NSwgNzUsIFsw
LCAxMjgsMCwyNTVdKTsKK3BpeGVsU2hvdWxkQmUoOTksIDk5LCBbMCwgMTI4LDAsMjU1XSk7Citw
aXhlbFNob3VsZEJlKDUwLCA0OSwgWzAsIDAsIDAsIDBdKTsKK2NvbnRleHQudHJhbnNsYXRlKC01
MCwgNTApOworCisvLyBUZXN0IGRpcnR5IHJlY3QgaGFuZGxpbmcKK2J1ZmZlciA9IGNvbnRleHQu
Y3JlYXRlSW1hZ2VEYXRhKDUwLDUwKTsKK2ZpbGxSZWN0KGJ1ZmZlciwgMCwgMCwgNTAsIDUwLCAw
LCAxMjgsIDAsIDI1NSk7Citjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDUwLCAwKTsKK2Zp
bGxSZWN0KGJ1ZmZlciwgMCwgMCwgNTAsIDUwLCAyNTUsIDAsIDAsIDI1NSk7Citjb250ZXh0LnB1
dEltYWdlRGF0YShidWZmZXIsIDUwLCAwLCAxNSwgMTUsIDIwLCAyMCk7Citjb250ZXh0LmZpbGxT
dHlsZT0icmdiKDAsMTI4LDApIjsKK2NvbnRleHQuZmlsbFJlY3QoNjUsIDE1LCAyMCwgMjApOwor
dmFyIHBvaW50cyA9IFswLCA1LCAxNSwgMjUsIDM1LCA0NV07Citmb3IgKHZhciB4ID0gMDsgeCA8
IHBvaW50cy5sZW5ndGg7IHgrKykKKyAgICBmb3IgKHZhciB5ID0gMDsgeSA8IHBvaW50cy5sZW5n
dGg7IHkrKykKKyAgICAgICAgcGl4ZWxTaG91bGRCZShwb2ludHNbeF0gKyA1MCwgcG9pbnRzW3ld
LCBbMCwgMTI4LCAwLCAyNTVdKTsKKworLy8gVGVzdCBkcmF3aW5nIG91dHNpZGUgdGhlIGNhbnZh
cyBib3JkZXIKK2ZpbGxSZWN0KGJ1ZmZlciwgMCwgMCwgNTAsIDUwLCAyNTUsIDAsIDAsIDI1NSk7
Citjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIC01MCwgMCk7CitwaXhlbFNob3VsZEJlKDAs
IDI1LCBbMCwgMTI4LDAsMjU1XSk7Citjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDEwMCwg
MCk7CitwaXhlbFNob3VsZEJlKDk5LCAyNSwgWzAsIDEyOCwwLDI1NV0pOworY29udGV4dC5wdXRJ
bWFnZURhdGEoYnVmZmVyLCAwLCAtNTApOworcGl4ZWxTaG91bGRCZSgyNSwgMCwgWzAsIDEyOCww
LDI1NV0pOworY29udGV4dC5wdXRJbWFnZURhdGEoYnVmZmVyLCAwLCAxMDApOworcGl4ZWxTaG91
bGRCZSgyNSwgOTksIFswLCAxMjgsMCwyNTVdKTsKKworLy8gdGVzdCBkcmF3aW5nIHdpdGggbm9u
LWludGVyc2VjdGluZyBkaXJ0eSByZWN0Citjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDUw
LCAwLCAgNTAsIDAsIDEwMCwgMTAwKTsKK2NvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgNTAs
IDAsIC01MCwgMCwgNTAsIDEwMCk7Citjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDUwLCAw
LCAgMCwgNTAsIDEwMCwgMTAwKTsKK2NvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgNTAsIDAs
ICA1MCwgLTUwLCAxMDAsIDEwMCk7Citmb3IgKHZhciB4ID0gMDsgeCA8IHBvaW50cy5sZW5ndGg7
IHgrKykKKyAgICBmb3IgKHZhciB5ID0gMDsgeSA8IHBvaW50cy5sZW5ndGg7IHkrKykKKyAgICAg
ICAgcGl4ZWxTaG91bGRCZShwb2ludHNbeF0gKyA1MCwgcG9pbnRzW3ldLCBbMCwgMTI4LCAwLCAy
NTVdKTsKKworCitzaG91bGRUaHJvdygiY29udGV4dC5wdXRJbWFnZURhdGEoe30sIDAsIDApIiwg
IidFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcnIik7CitzaG91bGRU
aHJvdygiY29udGV4dC5wdXRJbWFnZURhdGEoYnVmZmVyLCBOYU4sIDAsIDAsIDAsIDAsIDApIiwg
IidFcnJvcjogSU5ERVhfU0laRV9FUlI6IERPTSBFeGNlcHRpb24gMSciKTsKK3Nob3VsZFRocm93
KCJjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDAsIE5hTiwgMCwgMCwgMCwgMCkiLCAiJ0Vy
cm9yOiBJTkRFWF9TSVpFX0VSUjogRE9NIEV4Y2VwdGlvbiAxJyIpOworc2hvdWxkVGhyb3coImNv
bnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgMCwgMCwgTmFOLCAwLCAwLCAwKSIsICInRXJyb3I6
IElOREVYX1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEnIik7CitzaG91bGRUaHJvdygiY29udGV4
dC5wdXRJbWFnZURhdGEoYnVmZmVyLCAwLCAwLCAwLCBOYU4sIDAsIDApIiwgIidFcnJvcjogSU5E
RVhfU0laRV9FUlI6IERPTSBFeGNlcHRpb24gMSciKTsKK3Nob3VsZFRocm93KCJjb250ZXh0LnB1
dEltYWdlRGF0YShidWZmZXIsIDAsIDAsIDAsIDAsIE5hTiwgMCkiLCAiJ0Vycm9yOiBJTkRFWF9T
SVpFX0VSUjogRE9NIEV4Y2VwdGlvbiAxJyIpOworc2hvdWxkVGhyb3coImNvbnRleHQucHV0SW1h
Z2VEYXRhKGJ1ZmZlciwgMCwgMCwgMCwgMCwgMCwgTmFOKSIsICInRXJyb3I6IElOREVYX1NJWkVf
RVJSOiBET00gRXhjZXB0aW9uIDEnIik7CitzaG91bGRUaHJvdygiY29udGV4dC5wdXRJbWFnZURh
dGEoYnVmZmVyLCBJbmZpbml0eSwgMCwgMCwgMCwgMCwgMCkiLCAiJ0Vycm9yOiBJTkRFWF9TSVpF
X0VSUjogRE9NIEV4Y2VwdGlvbiAxJyIpOworc2hvdWxkVGhyb3coImNvbnRleHQucHV0SW1hZ2VE
YXRhKGJ1ZmZlciwgMCwgSW5maW5pdHksIDAsIDAsIDAsIDApIiwgIidFcnJvcjogSU5ERVhfU0la
RV9FUlI6IERPTSBFeGNlcHRpb24gMSciKTsKK3Nob3VsZFRocm93KCJjb250ZXh0LnB1dEltYWdl
RGF0YShidWZmZXIsIDAsIDAsIEluZmluaXR5LCAwLCAwLCAwKSIsICInRXJyb3I6IElOREVYX1NJ
WkVfRVJSOiBET00gRXhjZXB0aW9uIDEnIik7CitzaG91bGRUaHJvdygiY29udGV4dC5wdXRJbWFn
ZURhdGEoYnVmZmVyLCAwLCAwLCAwLCBJbmZpbml0eSwgMCwgMCkiLCAiJ0Vycm9yOiBJTkRFWF9T
SVpFX0VSUjogRE9NIEV4Y2VwdGlvbiAxJyIpOworc2hvdWxkVGhyb3coImNvbnRleHQucHV0SW1h
Z2VEYXRhKGJ1ZmZlciwgMCwgMCwgMCwgMCwgSW5maW5pdHksIDApIiwgIidFcnJvcjogSU5ERVhf
U0laRV9FUlI6IERPTSBFeGNlcHRpb24gMSciKTsKK3Nob3VsZFRocm93KCJjb250ZXh0LnB1dElt
YWdlRGF0YShidWZmZXIsIDAsIDAsIDAsIDAsIDAsIEluZmluaXR5KSIsICInRXJyb3I6IElOREVY
X1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEnIik7CisKK3ZhciBzdWNjZXNzZnVsbHlQYXJzZWQg
PSB0cnVlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxv
ZwppbmRleCA2OWUzYWQ3Li4zZjc3YmFiIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZwor
KysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDA4LTAyLTI0ICBPbGl2
ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQnVnIDE2OTU0OiBTdXBwb3J0IHB1dEltYWdlRGF0YQorICAg
ICAgICAKKyAgICAgICAgSW1wbGVtZW50IHN1cHBvcnQgZm9yIEhUTUw1J3MgcHV0SW1hZ2VEYXRh
IGZvciB0aGUgQ0cgcG9ydC4gIEFsbCBvdGhlciBwb3J0cworICAgICAgICBhcmUgY3VycmVudGx5
IGp1c3QgdXNpbmcgc3R1YnMgZm9yIHRoZSBmaW5hbCBibGl0LgorCisgICAgICAgIFRlc3Q6IGZh
c3QvY2FudmFzL2NhbnZhcy1wdXRJbWFnZURhdGEuaHRtbAorCisgICAgICAgICogYmluZGluZ3Mv
anMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdlRGF0YSk6CisgICAgICAgICog
aHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwdXRJbWFnZURhdGEpOgorICAgICAgICAqIGh0bWwvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvSW1h
Z2VCdWZmZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZl
ckNhaXJvLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNH
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwOgorCiAyMDA4LTAyLTI0ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTYW0u
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRDdXN0b20uY3BwCmluZGV4IDRhNjM5MGYuLjM2NDZkYWIgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3Bw
CkBAIC0yOCwxMCArMjgsMTIgQEAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJI
VE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNs
dWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRlICJKU0NhbnZhc0dyYWRpZW50LmgiCiAjaW5jbHVk
ZSAiSlNDYW52YXNQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiSlNIVE1MQ2FudmFzRWxlbWVudC5oIgog
I2luY2x1ZGUgIkpTSFRNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIkpTSW1hZ2VEYXRhLmgi
CiAjaW5jbHVkZSAia2pzX2h0bWwuaCIKIAogdXNpbmcgbmFtZXNwYWNlIEtKUzsKQEAgLTMzNSw2
ICszMzcsMjQgQEAgSlNWYWx1ZSogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNyZWF0ZVBh
dHRlcm4oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBMaXN0JgogCiBKU1ZhbHVlKiBKU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VEYXRhKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlz
dCYgYXJncykKIHsKKyAgICAvLyBwdXRJbWFnZURhdGEgaGFzIHR3byB2YXJpYW50cworICAgIC8v
IHB1dEltYWdlRGF0YShJbWFnZURhdGEsIHgsIHkpCisgICAgLy8gcHV0SW1hZ2VEYXRhKEltYWdl
RGF0YSwgeCwgeSwgZGlydHlYLCBkaXJ0eVksIGRpcnR5V2lkdGgsIGRpcnR5SGVpZ2h0KQorICAg
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IGltcGwoKTsKKyAgICAKKyAgICBJ
bWFnZURhdGEqIGRhdGEgPSB0b0ltYWdlRGF0YShhcmdzWzBdKTsKKyAgICBpZiAoIWRhdGEpIHsK
KyAgICAgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIFRZUEVfTUlTTUFUQ0hfRVJSKTsKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgIGlmIChhcmdzLnNpemUoKSA9PSA3KQorICAgICAgICBjb250ZXh0LT5wdXRJbWFnZURh
dGEoZGF0YSwgYXJnc1sxXS0+dG9GbG9hdChleGVjKSwgYXJnc1syXS0+dG9GbG9hdChleGVjKSwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmdzWzNdLT50b0Zsb2F0KGV4ZWMpLCBh
cmdzWzRdLT50b0Zsb2F0KGV4ZWMpLCBhcmdzWzVdLT50b0Zsb2F0KGV4ZWMpLCBhcmdzWzZdLT50
b0Zsb2F0KGV4ZWMpLCBlYyk7CisgICAgZWxzZQorICAgICAgICBjb250ZXh0LT5wdXRJbWFnZURh
dGEoZGF0YSwgYXJnc1sxXS0+dG9GbG9hdChleGVjKSwgYXJnc1syXS0+dG9GbG9hdChleGVjKSwg
ZWMpOworCisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5jcHAgYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApp
bmRleCBkYWIzODc5Li4xYjk0Yzk1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcApAQCAtMTIwMiw0ICsxMjAyLDQ5IEBAIFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmdldEltYWdlRGF0YShmbG9hdCBzeCwgZmxvYXQgc3ks
CiAgICAgcmV0dXJuIGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKHNjYWxlZFJlY3QpOwogfQogCit2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSogZGF0YSwg
ZmxvYXQgZHgsIGZsb2F0IGR5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBwdXRJbWFnZURh
dGEoZGF0YSwgZHgsIGR5LCAwLCAwLCBkYXRhLT53aWR0aCgpLCBkYXRhLT5oZWlnaHQoKSwgZWMp
OworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VEYXRhKEltYWdl
RGF0YSogZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5
WSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0IGRp
cnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBp
ZiAoIWlzZmluaXRlKGR4KSB8fCAhaXNmaW5pdGUoZHkpIHx8ICFpc2Zpbml0ZShkaXJ0eVgpIHx8
IAorICAgICAgICAhaXNmaW5pdGUoZGlydHlZKSB8fCAhaXNmaW5pdGUoZGlydHlXaWR0aCkgfHwg
IWlzZmluaXRlKGRpcnR5SGVpZ2h0KSl7CisgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBJbWFnZUJ1ZmZlciogYnVmZmVyID0gbV9jYW52
YXMgPyBtX2NhbnZhcy0+YnVmZmVyKCkgOiAwOworICAgIGlmICghYnVmZmVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoZGlydHlXaWR0aCA8IDApIHsKKyAgICAgICAgZGlydHlYICs9IGRp
cnR5V2lkdGg7CisgICAgICAgIGRpcnR5V2lkdGggPSAtZGlydHlXaWR0aDsKKyAgICB9CisKKyAg
ICBpZiAoZGlydHlIZWlnaHQgPCAwKSB7CisgICAgICAgIGRpcnR5WSArPSBkaXJ0eUhlaWdodDsK
KyAgICAgICAgZGlydHlIZWlnaHQgPSAtZGlydHlIZWlnaHQ7CisgICAgfQorCisgICAgRmxvYXRS
ZWN0IGNsaXBSZWN0KGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0eUhlaWdodCk7Cisg
ICAgY2xpcFJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgZGF0YS0+d2lkdGgoKSwgZGF0YS0+
aGVpZ2h0KCkpKTsKKyAgICBpbnQgZGVzdFggPSBzdGF0aWNfY2FzdDxpbnQ+KGR4KTsKKyAgICBp
bnQgZGVzdFkgPSBzdGF0aWNfY2FzdDxpbnQ+KGR5KTsKKyAgICBJbnRSZWN0IHNvdXJjZVJlY3Qo
c3RhdGljX2Nhc3Q8aW50PihjbGlwUmVjdC54KCkpICsgZGVzdFgsIHN0YXRpY19jYXN0PGludD4o
Y2xpcFJlY3QueSgpKSArIGRlc3RZLCAKKyAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50PihjbGlwUmVjdC53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8aW50PihjbGlwUmVjdC5oZWln
aHQoKSkpOworICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgYnVmZmVyLT5z
aXplKCkud2lkdGgoKSwgYnVmZmVyLT5zaXplKCkuaGVpZ2h0KCkpKTsKKyAgICBpZiAoc291cmNl
UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICB3aWxsRHJhdyhzb3VyY2VSZWN0
KTsKKyAgICBzb3VyY2VSZWN0LnNldFgoc291cmNlUmVjdC54KCkgLSBkZXN0WCk7CisgICAgc291
cmNlUmVjdC5zZXRZKHNvdXJjZVJlY3QueSgpIC0gZGVzdFkpOworICAgIEludFBvaW50IGRlc3RQ
b2ludChkZXN0WCwgZGVzdFkpOworICAgIAorICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRhKGRhdGEs
IHNvdXJjZVJlY3QsIGRlc3RQb2ludCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBiL1dlYkNv
cmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAppbmRleCBmNGNjOTM4Li41Zjc5ZDUz
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKKysr
IGIvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCkBAIC0xNjYsNiArMTY2
LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICAgICAgICAgUGFzc1JlZlB0cjxJ
bWFnZURhdGE+IGNyZWF0ZUltYWdlRGF0YShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KSBjb25z
dDsKICAgICAgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShmbG9hdCBzeCwg
ZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3Q7CisgICAgICAgIHZvaWQgcHV0SW1h
Z2VEYXRhKEltYWdlRGF0YSosIGZsb2F0IGR4LCBmbG9hdCBkeSwgRXhjZXB0aW9uQ29kZSYpOwor
ICAgICAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEqLCBmbG9hdCBkeCwgZmxvYXQgZHks
IGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9hdCBkaXJ0
eUhlaWdodCwgRXhjZXB0aW9uQ29kZSYpOwogICAgICAgICAKICAgICAgICAgdm9pZCByZXNldCgp
OwogICAgICAgICB2b2lkIGRldGFjaENhbnZhcygpIHsgbV9jYW52YXMgPSAwOyB9CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggODY5Y2Q3MS4uMmFjMmI0ZSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisrKyBiL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtNDksNiArNDksNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiAgICAgY2xh
c3MgSW1hZ2VEYXRhOworICAgIGNsYXNzIEludFBvaW50OwogICAgIGNsYXNzIEludFJlY3Q7CiAg
ICAgY2xhc3MgUmVuZGVyT2JqZWN0OwogCkBAIC02Nyw4ICs2OCwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAjZWxpZiBQTEFURk9STShDQUlSTykKICAgICAgICAgY2Fpcm9fc3VyZmFjZV90KiBz
dXJmYWNlKCkgY29uc3Q7CiAjZW5kaWYKLQorICAgICAgICAKICAgICAgICAgUGFzc1JlZlB0cjxJ
bWFnZURhdGE+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdDsKKyAgICAg
ICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpOworCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgdm9pZCogbV9kYXRhOwogICAgICAgICBJbnRTaXplIG1fc2l6ZTsKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCmluZGV4
IGQ4ZDZhZDAuLjM5MmU5ZGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApAQCAtODAsNCArODAsOSBAQCBQYXNzUmVmUHRy
PEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JikgY29u
c3QKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRhKElt
YWdlRGF0YSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1h
Z2VCdWZmZXJDRy5jcHAKaW5kZXggZjQ1NmVjNS4uZGRlMDdiMyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAorKysgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBAIC0xNTYsNCArMTU2LDU1IEBA
IFBhc3NSZWZQdHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKGNvbnN0IElu
dFJlY3QmIHJlY3QpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBJbWFnZUJ1
ZmZlcjo6cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSogc291cmNlLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQoreworICAgIEFTU0VSVChzb3VyY2VS
ZWN0LndpZHRoKCkgPiAwKTsKKyAgICBBU1NFUlQoc291cmNlUmVjdC5oZWlnaHQoKSA+IDApOwor
CisgICAgaW50IG9yaWdpbnggPSBzb3VyY2VSZWN0LngoKTsKKyAgICBpbnQgZGVzdHggPSBkZXN0
UG9pbnQueCgpICsgc291cmNlUmVjdC54KCk7CisgICAgQVNTRVJUKGRlc3R4ID49IDApOworICAg
IEFTU0VSVChkZXN0eCA8IG1fc2l6ZS53aWR0aCgpKTsKKyAgICBBU1NFUlQob3JpZ2lueCA+PSAw
KTsKKyAgICBBU1NFUlQob3JpZ2lueCA8PSBzb3VyY2VSZWN0LnJpZ2h0KCkpOworCisgICAgaW50
IGVuZHggPSBkZXN0UG9pbnQueCgpICsgc291cmNlUmVjdC54KCkgKyBzb3VyY2VSZWN0LndpZHRo
KCk7CisgICAgQVNTRVJUKGVuZHggPD0gbV9zaXplLndpZHRoKCkpOworCisgICAgaW50IG51bUNv
bHVtbnMgPSBlbmR4IC0gZGVzdHg7CisgICAgCisgICAgaW50IG9yaWdpbnkgPSBzb3VyY2VSZWN0
LnkoKTsKKyAgICBpbnQgZGVzdHkgPSBkZXN0UG9pbnQueSgpICsgc291cmNlUmVjdC55KCk7Cisg
ICAgQVNTRVJUKGRlc3R5ID49IDApOworICAgIEFTU0VSVChkZXN0eSA8IG1fc2l6ZS5oZWlnaHQo
KSk7CisgICAgQVNTRVJUKG9yaWdpbnkgPj0gMCk7CisgICAgQVNTRVJUKG9yaWdpbnkgPD0gc291
cmNlUmVjdC54KCkgKyBzb3VyY2VSZWN0LmhlaWdodCgpKTsKKworICAgIGludCBlbmR5ID0gZGVz
dFBvaW50LnkoKSArIHNvdXJjZVJlY3QueSgpICsgc291cmNlUmVjdC5oZWlnaHQoKTsKKyAgICBB
U1NFUlQoZW5keCA8PSBtX3NpemUuaGVpZ2h0KCkpOworICAgIGludCBudW1Sb3dzID0gZW5keSAt
IGRlc3R5OworCisgICAgdW5zaWduZWQgc3JjQnl0ZXNQZXJSb3cgPSA0ICogc291cmNlLT53aWR0
aCgpOworICAgIHVuc2lnbmVkIGRlc3RCeXRlc1BlclJvdyA9IDQgKiBtX3NpemUud2lkdGgoKTsK
KyAgICAKKyAgICAvLyAtb3JpZ2lueSB0byBoYW5kbGUgdGhlIGFjY3Vyc2VkIGZsaXBwZWQgeSBh
eGlzCisgICAgdW5zaWduZWQgY2hhciogc3JjUm93cyA9IHNvdXJjZS0+ZGF0YSgpLT5kYXRhKCku
ZGF0YSgpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7CisgICAgdW5z
aWduZWQgY2hhciogZGVzdFJvd3MgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPiht
X2RhdGEpICsgKG1fc2l6ZS5oZWlnaHQoKSAtIGRlc3R5IC0gMSkgKiBkZXN0Qnl0ZXNQZXJSb3cg
KyBkZXN0eCAqIDQ7CisgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBudW1Sb3dzOyArK3kpIHsKKyAg
ICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBudW1Db2x1bW5zOyB4KyspIHsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGNoYXIgYWxwaGEgPSBzcmNSb3dzW3ggKiA0ICsgM107CisgICAgICAgICAgICBp
ZiAoYWxwaGEgIT0gMjU1KSB7CisgICAgICAgICAgICAgICAgZGVzdFJvd3NbeCAqIDQgKyAwXSA9
IChzcmNSb3dzWzBdICogYWxwaGEpIC8gMjU1OworICAgICAgICAgICAgICAgIGRlc3RSb3dzW3gg
KiA0ICsgMV0gPSAoc3JjUm93c1sxXSAqIGFscGhhKSAvIDI1NTsKKyAgICAgICAgICAgICAgICBk
ZXN0Um93c1t4ICogNCArIDJdID0gKHNyY1Jvd3NbMl0gKiBhbHBoYSkgLyAyNTU7CisgICAgICAg
ICAgICAgICAgZGVzdFJvd3NbeCAqIDQgKyAzXSA9IGFscGhhOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oZGVzdFJvd3Mg
KyB4ICogNClbMF0gPSByZWludGVycHJldF9jYXN0PHVpbnQzMl90Kj4oc3JjUm93cyArIHggKiA0
KVswXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZXN0Um93cyAtPSBkZXN0
Qnl0ZXNQZXJSb3c7CisgICAgICAgIHNyY1Jvd3MgKz0gc3JjQnl0ZXNQZXJSb3c7CisgICAgfQor
fQorCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlQnVm
ZmVyUXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNw
cAppbmRleCAyMTcyNDJmLi40NDk2NzdlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAKQEAgLTc3LDQgKzc3LDkgQEAgUGFzc1JlZlB0cjxJbWFn
ZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYpIGNvbnN0CiAg
ICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dEltYWdlRGF0YShJbWFnZURh
dGEqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gv
SW1hZ2VCdWZmZXJXeC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVm
ZmVyV3guY3BwCmluZGV4IDNlOTZmMWQuLjBjODMyZWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcApAQCAtNTIsNCArNTIsOSBAQCBQYXNzUmVm
UHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0Jikg
Y29uc3QKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VEYXRh
KEltYWdlRGF0YSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwogfQo=
</data>
<flag name="review"
          id="8450"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19344</attachid>
            <date>2008-02-25 04:40:39 -0800</date>
            <delta_ts>2008-03-01 15:16:51 -0800</delta_ts>
            <desc>now with more tests and logic tidying</desc>
            <filename>putImageData.diff</filename>
            <type>text/plain</type>
            <size>30354</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA5YjY1NjA5Li44NzgwYWJlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDgtMDIt
MjQgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMTY5NTQ6IFN1cHBvcnQgcHV0SW1hZ2VE
YXRhCisKKyAgICAgICAgTmljZSBzaW1wbGUgdGVzdGNhc2UgZm9yIHB1dEltYWdlRGF0YSBjb3Zl
cmluZyB0aGUgZXhjaXRpbmcgCisgICAgICAgIGxpdHRsZSBiaXRzIG9mIGJlaGF2aW91ciBwcmVz
ZW50IGluIHRoZSBjdXJyZW50IHNwZWMuCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy9jYW52YXMt
cHV0SW1hZ2VEYXRhLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMv
Y2FudmFzLXB1dEltYWdlRGF0YS5odG1sOiBBZGRlZC4KKwogMjAwOC0wMi0yNCAgRGFyaW4gQWRs
ZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtLgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLXB1dEltYWdlRGF0YS1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtcHV0SW1hZ2VEYXRhLWV4cGVj
dGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzRiZGQ2Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLXB1dEltYWdlRGF0
YS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxNzAgQEAKKworVGhpcyB0ZXN0IGVuc3VyZXMgdGhh
dCBwdXRJbWFnZURhdGEgd29ya3MgY29ycmVjdGx5LCB0aGUgZW5kIHJlc3VsdCBzaG91bGQgYmUg
YSAxMDB4MTAwcHggZ3JlZW4gc3F1YXJlLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworUEFTUyBnZXRQaXhlbCgwLDApIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoMjUs
MjUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNDksMCkgaXMgWzAsMTI4LDAsMjU1
XQorUEFTUyBnZXRQaXhlbCgwLDQ5KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDQ5
LDQ5KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDUwLDApIGlzIFswLDAsMCwwXQor
UEFTUyBnZXRQaXhlbCgwLDUwKSBpcyBbMCwwLDAsMF0KK1BBU1MgZ2V0UGl4ZWwoNTAsNTApIGlz
IFswLDAsMCwwXQorUEFTUyBnZXRQaXhlbCgwLDUwKSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdl
dFBpeGVsKDI1LDc1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDQ5LDUwKSBpcyBb
MCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDAsOTkpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1Mg
Z2V0UGl4ZWwoNDksOTkpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNTAsNTApIGlz
IFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNzUsNzUpIGlzIFswLDEyOCwwLDI1NV0KK1BB
U1MgZ2V0UGl4ZWwoOTksOTkpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNTAsNDkp
IGlzIFswLDAsMCwwXQorUEFTUyBnZXRQaXhlbCg1MCwwKSBpcyBbMCwxMjgsMCwyNTVdCitQQVNT
IGdldFBpeGVsKDUwLDUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNTAsMTUpIGlz
IFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNTAsMjUpIGlzIFswLDEyOCwwLDI1NV0KK1BB
U1MgZ2V0UGl4ZWwoNTAsMzUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNTAsNDUp
IGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNTUsMCkgaXMgWzAsMTI4LDAsMjU1XQor
UEFTUyBnZXRQaXhlbCg1NSw1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDU1LDE1
KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDU1LDI1KSBpcyBbMCwxMjgsMCwyNTVd
CitQQVNTIGdldFBpeGVsKDU1LDM1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDU1
LDQ1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDY1LDApIGlzIFswLDEyOCwwLDI1
NV0KK1BBU1MgZ2V0UGl4ZWwoNjUsNSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg2
NSwxNSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg2NSwyNSkgaXMgWzAsMTI4LDAs
MjU1XQorUEFTUyBnZXRQaXhlbCg2NSwzNSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhl
bCg2NSw0NSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg3NSwwKSBpcyBbMCwxMjgs
MCwyNTVdCitQQVNTIGdldFBpeGVsKDc1LDUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4
ZWwoNzUsMTUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNzUsMjUpIGlzIFswLDEy
OCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNzUsMzUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0
UGl4ZWwoNzUsNDUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoODUsMCkgaXMgWzAs
MTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg4NSw1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdl
dFBpeGVsKDg1LDE1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDg1LDI1KSBpcyBb
MCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDg1LDM1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNT
IGdldFBpeGVsKDg1LDQ1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDk1LDApIGlz
IFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoOTUsNSkgaXMgWzAsMTI4LDAsMjU1XQorUEFT
UyBnZXRQaXhlbCg5NSwxNSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg5NSwyNSkg
aXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg5NSwzNSkgaXMgWzAsMTI4LDAsMjU1XQor
UEFTUyBnZXRQaXhlbCg5NSw0NSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCgwLDI1
KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDk5LDI1KSBpcyBbMCwxMjgsMCwyNTVd
CitQQVNTIGdldFBpeGVsKDI1LDApIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoMjUs
OTkpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNTAsMCkgaXMgWzAsMTI4LDAsMjU1
XQorUEFTUyBnZXRQaXhlbCg1MCw1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDUw
LDE1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDUwLDI1KSBpcyBbMCwxMjgsMCwy
NTVdCitQQVNTIGdldFBpeGVsKDUwLDM1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVs
KDUwLDQ1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDU1LDApIGlzIFswLDEyOCww
LDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNTUsNSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhl
bCg1NSwxNSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg1NSwyNSkgaXMgWzAsMTI4
LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg1NSwzNSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQ
aXhlbCg1NSw0NSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg2NSwwKSBpcyBbMCwx
MjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDY1LDUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0
UGl4ZWwoNjUsMTUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNjUsMjUpIGlzIFsw
LDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNjUsMzUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1Mg
Z2V0UGl4ZWwoNjUsNDUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNzUsMCkgaXMg
WzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg3NSw1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNT
IGdldFBpeGVsKDc1LDE1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDc1LDI1KSBp
cyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDc1LDM1KSBpcyBbMCwxMjgsMCwyNTVdCitQ
QVNTIGdldFBpeGVsKDc1LDQ1KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDg1LDAp
IGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoODUsNSkgaXMgWzAsMTI4LDAsMjU1XQor
UEFTUyBnZXRQaXhlbCg4NSwxNSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg4NSwy
NSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg4NSwzNSkgaXMgWzAsMTI4LDAsMjU1
XQorUEFTUyBnZXRQaXhlbCg4NSw0NSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg5
NSwwKSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDk1LDUpIGlzIFswLDEyOCwwLDI1
NV0KK1BBU1MgZ2V0UGl4ZWwoOTUsMTUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwo
OTUsMjUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoOTUsMzUpIGlzIFswLDEyOCww
LDI1NV0KK1BBU1MgZ2V0UGl4ZWwoOTUsNDUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4
ZWwoMCwyNSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCgwLDUwKSBpcyBbMCwxMjgs
MCwyNTVdCitQQVNTIGdldFBpeGVsKDAsNzUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4
ZWwoOTksMjUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoOTksNTApIGlzIFswLDEy
OCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoOTksNzUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0
UGl4ZWwoMjUsMCkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg1MCwwKSBpcyBbMCwx
MjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDc1LDApIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0
UGl4ZWwoMjUsOTkpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNTAsOTkpIGlzIFsw
LDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNzUsOTkpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1Mg
Z2V0UGl4ZWwoMCwyNSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCgwLDUwKSBpcyBb
MCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDAsNzUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1Mg
Z2V0UGl4ZWwoMTAsMjUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoMTAsNTApIGlz
IFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoMTAsNzUpIGlzIFswLDEyOCwwLDI1NV0KK1BB
U1MgZ2V0UGl4ZWwoOTksMjUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoOTksNTAp
IGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoOTksNzUpIGlzIFswLDEyOCwwLDI1NV0K
K1BBU1MgZ2V0UGl4ZWwoODksMjUpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoODks
NTApIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoODksNzUpIGlzIFswLDEyOCwwLDI1
NV0KK1BBU1MgZ2V0UGl4ZWwoMjUsMCkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg1
MCwwKSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDc1LDApIGlzIFswLDEyOCwwLDI1
NV0KK1BBU1MgZ2V0UGl4ZWwoMjUsMTApIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwo
NTAsMTApIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNzUsMTApIGlzIFswLDEyOCww
LDI1NV0KK1BBU1MgZ2V0UGl4ZWwoMjUsOTkpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4
ZWwoNTAsOTkpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNzUsOTkpIGlzIFswLDEy
OCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoMjUsODkpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0
UGl4ZWwoNTAsODkpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoNzUsODkpIGlzIFsw
LDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoMTEsMTEpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1Mg
Z2V0UGl4ZWwoMSwxKSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBpeGVsKDEsMSkgaXMgWzAs
MTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCgxMCwxMCkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBn
ZXRQaXhlbCgxLDEpIGlzIFswLDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoMTAsMTApIGlzIFsw
LDEyOCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoMSwxKSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdl
dFBpeGVsKDksOSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCgxLDEpIGlzIFswLDEy
OCwwLDI1NV0KK1BBU1MgZ2V0UGl4ZWwoOSw5KSBpcyBbMCwxMjgsMCwyNTVdCitQQVNTIGdldFBp
eGVsKDEsMSkgaXMgWzAsMTI4LDAsMjU1XQorUEFTUyBnZXRQaXhlbCg5LDkpIGlzIFswLDEyOCww
LDI1NV0KK1BBU1MgY29udGV4dC5wdXRJbWFnZURhdGEoe30sIDAsIDApIHRocmV3IGV4Y2VwdGlv
biBFcnJvcjogVFlQRV9NSVNNQVRDSF9FUlI6IERPTSBFeGNlcHRpb24gMTcuCitQQVNTIGNvbnRl
eHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgTmFOLCAwLCAwLCAwLCAwLCAwKSB0aHJldyBleGNlcHRp
b24gRXJyb3I6IElOREVYX1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEuCitQQVNTIGNvbnRleHQu
cHV0SW1hZ2VEYXRhKGJ1ZmZlciwgMCwgTmFOLCAwLCAwLCAwLCAwKSB0aHJldyBleGNlcHRpb24g
RXJyb3I6IElOREVYX1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEuCitQQVNTIGNvbnRleHQucHV0
SW1hZ2VEYXRhKGJ1ZmZlciwgMCwgMCwgTmFOLCAwLCAwLCAwKSB0aHJldyBleGNlcHRpb24gRXJy
b3I6IElOREVYX1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEuCitQQVNTIGNvbnRleHQucHV0SW1h
Z2VEYXRhKGJ1ZmZlciwgMCwgMCwgMCwgTmFOLCAwLCAwKSB0aHJldyBleGNlcHRpb24gRXJyb3I6
IElOREVYX1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEuCitQQVNTIGNvbnRleHQucHV0SW1hZ2VE
YXRhKGJ1ZmZlciwgMCwgMCwgMCwgMCwgTmFOLCAwKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IElO
REVYX1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEuCitQQVNTIGNvbnRleHQucHV0SW1hZ2VEYXRh
KGJ1ZmZlciwgMCwgMCwgMCwgMCwgMCwgTmFOKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IElOREVY
X1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEuCitQQVNTIGNvbnRleHQucHV0SW1hZ2VEYXRhKGJ1
ZmZlciwgSW5maW5pdHksIDAsIDAsIDAsIDAsIDApIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSU5E
RVhfU0laRV9FUlI6IERPTSBFeGNlcHRpb24gMS4KK1BBU1MgY29udGV4dC5wdXRJbWFnZURhdGEo
YnVmZmVyLCAwLCBJbmZpbml0eSwgMCwgMCwgMCwgMCkgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJ
TkRFWF9TSVpFX0VSUjogRE9NIEV4Y2VwdGlvbiAxLgorUEFTUyBjb250ZXh0LnB1dEltYWdlRGF0
YShidWZmZXIsIDAsIDAsIEluZmluaXR5LCAwLCAwLCAwKSB0aHJldyBleGNlcHRpb24gRXJyb3I6
IElOREVYX1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEuCitQQVNTIGNvbnRleHQucHV0SW1hZ2VE
YXRhKGJ1ZmZlciwgMCwgMCwgMCwgSW5maW5pdHksIDAsIDApIHRocmV3IGV4Y2VwdGlvbiBFcnJv
cjogSU5ERVhfU0laRV9FUlI6IERPTSBFeGNlcHRpb24gMS4KK1BBU1MgY29udGV4dC5wdXRJbWFn
ZURhdGEoYnVmZmVyLCAwLCAwLCAwLCAwLCBJbmZpbml0eSwgMCkgdGhyZXcgZXhjZXB0aW9uIEVy
cm9yOiBJTkRFWF9TSVpFX0VSUjogRE9NIEV4Y2VwdGlvbiAxLgorUEFTUyBjb250ZXh0LnB1dElt
YWdlRGF0YShidWZmZXIsIDAsIDAsIDAsIDAsIDAsIEluZmluaXR5KSB0aHJldyBleGNlcHRpb24g
RXJyb3I6IElOREVYX1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEuCitQQVNTIGNvbnRleHQucHV0
SW1hZ2VEYXRhKGJ1ZmZlciwgdW5kZWZpbmVkLCAwLCAwLCAwLCAwLCAwKSB0aHJldyBleGNlcHRp
b24gRXJyb3I6IElOREVYX1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEuCitQQVNTIGNvbnRleHQu
cHV0SW1hZ2VEYXRhKGJ1ZmZlciwgMCwgdW5kZWZpbmVkLCAwLCAwLCAwLCAwKSB0aHJldyBleGNl
cHRpb24gRXJyb3I6IElOREVYX1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEuCitQQVNTIGNvbnRl
eHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgMCwgMCwgdW5kZWZpbmVkLCAwLCAwLCAwKSB0aHJldyBl
eGNlcHRpb24gRXJyb3I6IElOREVYX1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEuCitQQVNTIGNv
bnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgMCwgMCwgMCwgdW5kZWZpbmVkLCAwLCAwKSB0aHJl
dyBleGNlcHRpb24gRXJyb3I6IElOREVYX1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEuCitQQVNT
IGNvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgMCwgMCwgMCwgMCwgdW5kZWZpbmVkLCAwKSB0
aHJldyBleGNlcHRpb24gRXJyb3I6IElOREVYX1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEuCitQ
QVNTIGNvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgMCwgMCwgMCwgMCwgMCwgdW5kZWZpbmVk
KSB0aHJldyBleGNlcHRpb24gRXJyb3I6IElOREVYX1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEu
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLXB1dEltYWdlRGF0YS5odG1s
IGIvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLXB1dEltYWdlRGF0YS5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNmU5YjIKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy9jYW52YXMtcHV0SW1hZ2VEYXRhLmh0bWwKQEAgLTAs
MCArMSw3IEBACis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXN0eWxlLmNzcyI+Cis8c2NyaXB0IHNyYz0iLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qt
cHJlLmpzIj48L3NjcmlwdD4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgd2lkdGg9IjEwMCIgaGVpZ2h0
PSIxMDAiPjwvY2FudmFzPjxici8+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9
ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9ImNhbnZhcy1wdXRJbWFnZURhdGEuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvY2FudmFzLXB1dElt
YWdlRGF0YS5qcyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1wdXRJbWFnZURhdGEu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVmMzAyYwotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvY2FudmFzL2NhbnZhcy1wdXRJbWFnZURhdGEuanMK
QEAgLTAsMCArMSwyMjggQEAKK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgZW5zdXJlcyB0aGF0IHB1
dEltYWdlRGF0YSB3b3JrcyBjb3JyZWN0bHksIHRoZSBlbmQgcmVzdWx0IHNob3VsZCBiZSBhIDEw
MHgxMDBweCBncmVlbiBzcXVhcmUuIik7CisKK2Z1bmN0aW9uIGZpbGxSZWN0KGltYWdlRGF0YSwg
eCwgeSwgd2lkdGgsIGhlaWdodCwgciwgZywgYiwgYSkKK3sKKyAgICB2YXIgYnl0ZXNQZXJSb3cg
PSBpbWFnZURhdGEud2lkdGggKiA0OworICAgIHZhciBkYXRhID1pbWFnZURhdGEuZGF0YTsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IGhlaWdodDsgaSsrKSB7CisgICAgICAgIHZhciByb3dPcmln
aW4gPSAoeStpKSAqIGJ5dGVzUGVyUm93OworICAgICAgICByb3dPcmlnaW4gKz0geCAqIDQ7Cisg
ICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgd2lkdGg7IGorKykgeworICAgICAgICAgICAgdmFy
IHBvc2l0aW9uID0gcm93T3JpZ2luICsgaiAqIDQ7CisgICAgICAgICAgICBkYXRhW3Bvc2l0aW9u
ICsgMF0gPSByOworICAgICAgICAgICAgZGF0YVtwb3NpdGlvbiArIDFdID0gZzsKKyAgICAgICAg
ICAgIGRhdGFbcG9zaXRpb24gKyAyXSA9IGI7CisgICAgICAgICAgICBkYXRhW3Bvc2l0aW9uICsg
M10gPSBhOworICAgICAgICB9CisgICAgfQorfQorCitmdW5jdGlvbiBkYXRhVG9BcnJheShkYXRh
KSB7CisgICAgdmFyIHJlc3VsdCA9IG5ldyBBcnJheShkYXRhLmxlbmd0aCkKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspCisgICAgICAgIHJlc3VsdFtpXSA9IGRhdGFb
aV07CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnVuY3Rpb24gZ2V0UGl4ZWwoeCwgeSkgewor
ICAgIHZhciBkYXRhID0gY29udGV4dC5nZXRJbWFnZURhdGEoeCx5LDEsMSk7CisgICAgaWYgKCFk
YXRhKSAvLyBnZXRJbWFnZURhdGEgZmFpbGVkLCB3aGljaCBzaG91bGQgbmV2ZXIgaGFwcGVuCisg
ICAgICAgIHJldHVybiBbLTEsLTEsLTEsLTFdOworICAgIHJldHVybiBkYXRhVG9BcnJheShkYXRh
LmRhdGEpOworfQorCitmdW5jdGlvbiBwaXhlbFNob3VsZEJlKHgsIHksIGNvbG91cikgeworICAg
IHNob3VsZEJlKCJnZXRQaXhlbCgiICsgW3gsIHldICsiKSIsICJbIitjb2xvdXIrIl0iKTsKK30K
KwordmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK3ZhciBj
b250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoIjJkIik7CisKK2lmICghY29udGV4dC5jcmVhdGVJ
bWFnZURhdGEpCisgICAgY29udGV4dC5jcmVhdGVJbWFnZURhdGEgPSBmdW5jdGlvbih3LGgpIHsg
CisgICAgICAgIHZhciBkYXRhID0gdGhpcy5nZXRJbWFnZURhdGEoMCwgMCwgdywgaCk7CisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0YS5kYXRhLmxlbmd0aDsgaSsrKQorICAgICAgICAg
ICAgZGF0YS5kYXRhW2ldID0gMDsKKyAgICB9Cit2YXIgYnVmZmVyID0gY29udGV4dC5jcmVhdGVJ
bWFnZURhdGEoMTAwLDEwMCk7CisvLyBGaWxsIHRvcCBsZWZ0IGNvcm5lcgorZmlsbFJlY3QoYnVm
ZmVyLCAwLCAwLCA1MCwgNTAsIDAsIDEyOCwwLDI1NSk7Citjb250ZXh0LnB1dEltYWdlRGF0YShi
dWZmZXIsIDAsIDApOworcGl4ZWxTaG91bGRCZSggMCwgIDAsIFswLCAxMjgsMCwyNTVdKTsKK3Bp
eGVsU2hvdWxkQmUoMjUsIDI1LCBbMCwgMTI4LDAsMjU1XSk7CitwaXhlbFNob3VsZEJlKDQ5LCAg
MCwgWzAsIDEyOCwwLDI1NV0pOworcGl4ZWxTaG91bGRCZSggMCwgNDksIFswLCAxMjgsMCwyNTVd
KTsKK3BpeGVsU2hvdWxkQmUoNDksIDQ5LCBbMCwgMTI4LDAsMjU1XSk7CitwaXhlbFNob3VsZEJl
KDUwLCAgMCwgWzAsIDAsIDAsIDBdKTsKK3BpeGVsU2hvdWxkQmUoIDAsIDUwLCBbMCwgMCwgMCwg
MF0pOworcGl4ZWxTaG91bGRCZSg1MCwgNTAsIFswLCAwLCAwLCAwXSk7CisKKy8vIFRlc3QgcG9z
aXRpb25lZCBkcmF3aW5nIC0tIG1ha2UgYm90dG9tIHJpZ2h0IGdyZWVuCitjb250ZXh0LnB1dElt
YWdlRGF0YShidWZmZXIsIDAsIDUwKTsKK3BpeGVsU2hvdWxkQmUoIDAsIDUwLCBbMCwgMTI4LDAs
MjU1XSk7CitwaXhlbFNob3VsZEJlKDI1LCA3NSwgWzAsIDEyOCwwLDI1NV0pOworcGl4ZWxTaG91
bGRCZSg0OSwgNTAsIFswLCAxMjgsMCwyNTVdKTsKK3BpeGVsU2hvdWxkQmUoIDAsIDk5LCBbMCwg
MTI4LDAsMjU1XSk7CitwaXhlbFNob3VsZEJlKDQ5LCA5OSwgWzAsIDEyOCwwLDI1NV0pOworCisv
LyBUZXN0IHRyYW5zbGF0aW9uIGRvZXNuJ3QgZWZmZWN0IHB1dEltYWdlRGF0YQorY29udGV4dC50
cmFuc2xhdGUoNTAsIC01MCk7Citjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDUwLCA1MCk7
CitwaXhlbFNob3VsZEJlKDUwLCA1MCwgWzAsIDEyOCwwLDI1NV0pOworcGl4ZWxTaG91bGRCZSg3
NSwgNzUsIFswLCAxMjgsMCwyNTVdKTsKK3BpeGVsU2hvdWxkQmUoOTksIDk5LCBbMCwgMTI4LDAs
MjU1XSk7CitwaXhlbFNob3VsZEJlKDUwLCA0OSwgWzAsIDAsIDAsIDBdKTsKK2NvbnRleHQudHJh
bnNsYXRlKC01MCwgNTApOworCisvLyBUZXN0IGRpcnR5IHJlY3QgaGFuZGxpbmcKK2J1ZmZlciA9
IGNvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKDUwLDUwKTsKK2ZpbGxSZWN0KGJ1ZmZlciwgMCwgMCwg
NTAsIDUwLCAwLCAxMjgsIDAsIDI1NSk7Citjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDUw
LCAwKTsKK2ZpbGxSZWN0KGJ1ZmZlciwgMCwgMCwgNTAsIDUwLCAyNTUsIDAsIDAsIDI1NSk7Citj
b250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDUwLCAwLCAxNSwgMTUsIDIwLCAyMCk7Citjb250
ZXh0LmZpbGxTdHlsZT0icmdiKDAsMTI4LDApIjsKK2NvbnRleHQuZmlsbFJlY3QoNjUsIDE1LCAy
MCwgMjApOwordmFyIHBvaW50cyA9IFswLCA1LCAxNSwgMjUsIDM1LCA0NV07Citmb3IgKHZhciB4
ID0gMDsgeCA8IHBvaW50cy5sZW5ndGg7IHgrKykKKyAgICBmb3IgKHZhciB5ID0gMDsgeSA8IHBv
aW50cy5sZW5ndGg7IHkrKykKKyAgICAgICAgcGl4ZWxTaG91bGRCZShwb2ludHNbeF0gKyA1MCwg
cG9pbnRzW3ldLCBbMCwgMTI4LCAwLCAyNTVdKTsKKworLy8gVGVzdCBkcmF3aW5nIG91dHNpZGUg
dGhlIGNhbnZhcyBib3JkZXIKK2ZpbGxSZWN0KGJ1ZmZlciwgMCwgMCwgNTAsIDUwLCAyNTUsIDAs
IDAsIDI1NSk7Citjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIC01MCwgMCk7CitwaXhlbFNo
b3VsZEJlKDAsIDI1LCBbMCwgMTI4LDAsMjU1XSk7Citjb250ZXh0LnB1dEltYWdlRGF0YShidWZm
ZXIsIDEwMCwgMCk7CitwaXhlbFNob3VsZEJlKDk5LCAyNSwgWzAsIDEyOCwwLDI1NV0pOworY29u
dGV4dC5wdXRJbWFnZURhdGEoYnVmZmVyLCAwLCAtNTApOworcGl4ZWxTaG91bGRCZSgyNSwgMCwg
WzAsIDEyOCwwLDI1NV0pOworY29udGV4dC5wdXRJbWFnZURhdGEoYnVmZmVyLCAwLCAxMDApOwor
cGl4ZWxTaG91bGRCZSgyNSwgOTksIFswLCAxMjgsMCwyNTVdKTsKKworLy8gdGVzdCBkcmF3aW5n
IHdpdGggbm9uLWludGVyc2VjdGluZyBkaXJ0eSByZWN0Citjb250ZXh0LnB1dEltYWdlRGF0YShi
dWZmZXIsIDUwLCAwLCAgNTAsIDAsIDEwMCwgMTAwKTsKK2NvbnRleHQucHV0SW1hZ2VEYXRhKGJ1
ZmZlciwgNTAsIDAsIC01MCwgMCwgNTAsIDEwMCk7Citjb250ZXh0LnB1dEltYWdlRGF0YShidWZm
ZXIsIDUwLCAwLCAgMCwgNTAsIDEwMCwgMTAwKTsKK2NvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZl
ciwgNTAsIDAsICA1MCwgLTUwLCAxMDAsIDEwMCk7Citmb3IgKHZhciB4ID0gMDsgeCA8IHBvaW50
cy5sZW5ndGg7IHgrKykKKyAgICBmb3IgKHZhciB5ID0gMDsgeSA8IHBvaW50cy5sZW5ndGg7IHkr
KykKKyAgICAgICAgcGl4ZWxTaG91bGRCZShwb2ludHNbeF0gKyA1MCwgcG9pbnRzW3ldLCBbMCwg
MTI4LCAwLCAyNTVdKTsKKworLy8gVGVzdCBkcmF3aW5nIHRvIHJlZ2lvbiBpbnRlcnNlY3QgZWRn
ZSBvZiBjYW52YXMKK2J1ZmZlciA9IGNvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKDEwMCwgMTAwKTsK
K2ZpbGxSZWN0KGJ1ZmZlciwgMCwgMCwgMTAwLCAxMDAsIDAsIDEyOCwgMCwgMjU1KTsKK2ZpbGxS
ZWN0KGJ1ZmZlciwgMTAsIDEwLCA4MCwgODAsIDI1NSwgMCwgMCwgMjU1KTsKKworLy9sZWZ0IGVk
Z2UKK2NvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgLTkwLCAwKTsKK3BpeGVsU2hvdWxkQmUo
MCwgMjUsIFswLCAxMjgsMCwyNTVdKTsKK3BpeGVsU2hvdWxkQmUoMCwgNTAsIFswLCAxMjgsMCwy
NTVdKTsKK3BpeGVsU2hvdWxkQmUoMCwgNzUsIFswLCAxMjgsMCwyNTVdKTsKKy8vcmlnaHQgZWRn
ZQorY29udGV4dC5wdXRJbWFnZURhdGEoYnVmZmVyLCA5MCwgMCk7CitwaXhlbFNob3VsZEJlKDk5
LCAyNSwgWzAsIDEyOCwwLDI1NV0pOworcGl4ZWxTaG91bGRCZSg5OSwgNTAsIFswLCAxMjgsMCwy
NTVdKTsKK3BpeGVsU2hvdWxkQmUoOTksIDc1LCBbMCwgMTI4LDAsMjU1XSk7CisvL3RvcCBlZGdl
Citjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDAsIC05MCk7CitwaXhlbFNob3VsZEJlKDI1
LCAwLCBbMCwgMTI4LDAsMjU1XSk7CitwaXhlbFNob3VsZEJlKDUwLCAwLCBbMCwgMTI4LDAsMjU1
XSk7CitwaXhlbFNob3VsZEJlKDc1LCAwLCBbMCwgMTI4LDAsMjU1XSk7CisvL2JvdHRvbSBlZGdl
Citjb250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDAsIDkwKTsKK3BpeGVsU2hvdWxkQmUoMjUs
IDk5LCBbMCwgMTI4LDAsMjU1XSk7CitwaXhlbFNob3VsZEJlKDUwLCA5OSwgWzAsIDEyOCwwLDI1
NV0pOworcGl4ZWxTaG91bGRCZSg3NSwgOTksIFswLCAxMjgsMCwyNTVdKTsKKworLy8gVGVzdCBk
cmF3aW5nIHdpdGggb25seSBwYXJ0IG9mIHRoZSBkaXJ0eSByZWdpb24gaW50ZXJzZWN0aW5nIHRo
ZSB3aW5kb3cKKy8vIGxlZnQgZWRnZQorY29udGV4dC5wdXRJbWFnZURhdGEoYnVmZmVyLCAwLCAw
LCAtOTAsIDAsIDEwMCwgMTAwKTsKK3BpeGVsU2hvdWxkQmUoMCwgMjUsIFswLCAxMjgsMCwyNTVd
KTsKK3BpeGVsU2hvdWxkQmUoMCwgNTAsIFswLCAxMjgsMCwyNTVdKTsKK3BpeGVsU2hvdWxkQmUo
MCwgNzUsIFswLCAxMjgsMCwyNTVdKTsKK3BpeGVsU2hvdWxkQmUoMTAsIDI1LCBbMCwgMTI4LDAs
MjU1XSk7CitwaXhlbFNob3VsZEJlKDEwLCA1MCwgWzAsIDEyOCwwLDI1NV0pOworcGl4ZWxTaG91
bGRCZSgxMCwgNzUsIFswLCAxMjgsMCwyNTVdKTsKKy8vcmlnaHQgZWRnZQorY29udGV4dC5wdXRJ
bWFnZURhdGEoYnVmZmVyLCAwLCAwLCA5MCwgMCwgMTAwLCAxMDApOworcGl4ZWxTaG91bGRCZSg5
OSwgMjUsIFswLCAxMjgsMCwyNTVdKTsKK3BpeGVsU2hvdWxkQmUoOTksIDUwLCBbMCwgMTI4LDAs
MjU1XSk7CitwaXhlbFNob3VsZEJlKDk5LCA3NSwgWzAsIDEyOCwwLDI1NV0pOworcGl4ZWxTaG91
bGRCZSg4OSwgMjUsIFswLCAxMjgsMCwyNTVdKTsKK3BpeGVsU2hvdWxkQmUoODksIDUwLCBbMCwg
MTI4LDAsMjU1XSk7CitwaXhlbFNob3VsZEJlKDg5LCA3NSwgWzAsIDEyOCwwLDI1NV0pOworLy8g
dG9wIGVkZ2UKK2NvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgMCwgMCwgMCwgLTkwLCAxMDAs
IDEwMCk7CitwaXhlbFNob3VsZEJlKDI1LCAwLCBbMCwgMTI4LDAsMjU1XSk7CitwaXhlbFNob3Vs
ZEJlKDUwLCAwLCBbMCwgMTI4LDAsMjU1XSk7CitwaXhlbFNob3VsZEJlKDc1LCAwLCBbMCwgMTI4
LDAsMjU1XSk7CitwaXhlbFNob3VsZEJlKDI1LCAxMCwgWzAsIDEyOCwwLDI1NV0pOworcGl4ZWxT
aG91bGRCZSg1MCwgMTAsIFswLCAxMjgsMCwyNTVdKTsKK3BpeGVsU2hvdWxkQmUoNzUsIDEwLCBb
MCwgMTI4LDAsMjU1XSk7CisvL2JvdHRvbSBlZGdlCitjb250ZXh0LnB1dEltYWdlRGF0YShidWZm
ZXIsIDAsIDAsIDAsIDkwLCAxMDAsIDEwMCk7CitwaXhlbFNob3VsZEJlKDI1LCA5OSwgWzAsIDEy
OCwwLDI1NV0pOworcGl4ZWxTaG91bGRCZSg1MCwgOTksIFswLCAxMjgsMCwyNTVdKTsKK3BpeGVs
U2hvdWxkQmUoNzUsIDk5LCBbMCwgMTI4LDAsMjU1XSk7CitwaXhlbFNob3VsZEJlKDI1LCA4OSwg
WzAsIDEyOCwwLDI1NV0pOworcGl4ZWxTaG91bGRCZSg1MCwgODksIFswLCAxMjgsMCwyNTVdKTsK
K3BpeGVsU2hvdWxkQmUoNzUsIDg5LCBbMCwgMTI4LDAsMjU1XSk7CisKKy8vIFRlc3QgY2xhbXBp
bmcgb2YgZHgvZHkKK3ZhciBzbWFsbGJ1ZmZlciA9IGNvbnRleHQuY3JlYXRlSW1hZ2VEYXRhKDEw
LCAxMCk7CitmaWxsUmVjdChzbWFsbGJ1ZmZlciwgMCwgMCwgMTAsIDEwLCAyNTUsIDAsIDAsIDI1
NSk7Citjb250ZXh0LnB1dEltYWdlRGF0YShzbWFsbGJ1ZmZlciwgMS41LCAxKTsKK3BpeGVsU2hv
dWxkQmUoMTEsIDExLCBbMCwgMTI4LDAsMjU1XSk7CitmaWxsUmVjdChzbWFsbGJ1ZmZlciwgMCwg
MCwgMTAsIDEwLCAwLCAxMjgsIDAsIDI1NSk7Citjb250ZXh0LnB1dEltYWdlRGF0YShzbWFsbGJ1
ZmZlciwgMS41LCAxKTsKK3BpeGVsU2hvdWxkQmUoMSwgMSwgWzAsIDEyOCwwLDI1NV0pOworCisv
LyB0ZXN0IGNsYW1waW5nIG9mIGRpcnR5WC9ZL1dpZHRoL0hlaWdodAorZmlsbFJlY3Qoc21hbGxi
dWZmZXIsIDAsIDAsIDEwLCAxMCwgMjU1LCAwLCAwLCAyNTUpOworY29udGV4dC5wdXRJbWFnZURh
dGEoc21hbGxidWZmZXIsIDEsIDEsIDAuNSwgMC41LCA5LCA5KTsKK2NvbnRleHQuZmlsbFN0eWxl
ID0gImdyZWVuIjsKK2NvbnRleHQuZmlsbFJlY3QoMSwgMSwgOSwgOSk7CitwaXhlbFNob3VsZEJl
KDEsIDEsIFswLCAxMjgsMCwyNTVdKTsKK3BpeGVsU2hvdWxkQmUoMTAsIDEwLCBbMCwgMTI4LDAs
MjU1XSk7Citjb250ZXh0LnB1dEltYWdlRGF0YShzbWFsbGJ1ZmZlciwgMSwgMSwgMC4yNSwgMC4y
NSwgOSwgOSk7Citjb250ZXh0LmZpbGxTdHlsZSA9ICJncmVlbiI7Citjb250ZXh0LmZpbGxSZWN0
KDEsIDEsIDksIDkpOworcGl4ZWxTaG91bGRCZSgxLCAxLCBbMCwgMTI4LDAsMjU1XSk7CitwaXhl
bFNob3VsZEJlKDEwLCAxMCwgWzAsIDEyOCwwLDI1NV0pOworY29udGV4dC5wdXRJbWFnZURhdGEo
c21hbGxidWZmZXIsIDEsIDEsIDAuMCwgMC4wLCA4LjUsIDguNSk7Citjb250ZXh0LmZpbGxTdHls
ZSA9ICJncmVlbiI7Citjb250ZXh0LmZpbGxSZWN0KDEsIDEsIDgsIDgpOworcGl4ZWxTaG91bGRC
ZSgxLCAxLCBbMCwgMTI4LDAsMjU1XSk7CitwaXhlbFNob3VsZEJlKDksIDksIFswLCAxMjgsMCwy
NTVdKTsKK2NvbnRleHQucHV0SW1hZ2VEYXRhKHNtYWxsYnVmZmVyLCAxLCAxLCAwLjAsIDAuMCwg
OC4yNSwgOC4yNSk7Citjb250ZXh0LmZpbGxTdHlsZSA9ICJncmVlbiI7Citjb250ZXh0LmZpbGxS
ZWN0KDEsIDEsIDgsIDgpOworcGl4ZWxTaG91bGRCZSgxLCAxLCBbMCwgMTI4LDAsMjU1XSk7Citw
aXhlbFNob3VsZEJlKDksIDksIFswLCAxMjgsMCwyNTVdKTsKK2NvbnRleHQucHV0SW1hZ2VEYXRh
KHNtYWxsYnVmZmVyLCAxLCAxLCAwLjUsIDAuNSwgNy45LCA3LjkpOworY29udGV4dC5maWxsU3R5
bGUgPSAiZ3JlZW4iOworY29udGV4dC5maWxsUmVjdCgxLCAxLCA3LCA3KTsKK3BpeGVsU2hvdWxk
QmUoMSwgMSwgWzAsIDEyOCwwLDI1NV0pOworcGl4ZWxTaG91bGRCZSg5LCA5LCBbMCwgMTI4LDAs
MjU1XSk7CisKKworc2hvdWxkVGhyb3coImNvbnRleHQucHV0SW1hZ2VEYXRhKHt9LCAwLCAwKSIs
ICInRXJyb3I6IFRZUEVfTUlTTUFUQ0hfRVJSOiBET00gRXhjZXB0aW9uIDE3JyIpOworc2hvdWxk
VGhyb3coImNvbnRleHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgTmFOLCAwLCAwLCAwLCAwLCAwKSIs
ICInRXJyb3I6IElOREVYX1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEnIik7CitzaG91bGRUaHJv
dygiY29udGV4dC5wdXRJbWFnZURhdGEoYnVmZmVyLCAwLCBOYU4sIDAsIDAsIDAsIDApIiwgIidF
cnJvcjogSU5ERVhfU0laRV9FUlI6IERPTSBFeGNlcHRpb24gMSciKTsKK3Nob3VsZFRocm93KCJj
b250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDAsIDAsIE5hTiwgMCwgMCwgMCkiLCAiJ0Vycm9y
OiBJTkRFWF9TSVpFX0VSUjogRE9NIEV4Y2VwdGlvbiAxJyIpOworc2hvdWxkVGhyb3coImNvbnRl
eHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgMCwgMCwgMCwgTmFOLCAwLCAwKSIsICInRXJyb3I6IElO
REVYX1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEnIik7CitzaG91bGRUaHJvdygiY29udGV4dC5w
dXRJbWFnZURhdGEoYnVmZmVyLCAwLCAwLCAwLCAwLCBOYU4sIDApIiwgIidFcnJvcjogSU5ERVhf
U0laRV9FUlI6IERPTSBFeGNlcHRpb24gMSciKTsKK3Nob3VsZFRocm93KCJjb250ZXh0LnB1dElt
YWdlRGF0YShidWZmZXIsIDAsIDAsIDAsIDAsIDAsIE5hTikiLCAiJ0Vycm9yOiBJTkRFWF9TSVpF
X0VSUjogRE9NIEV4Y2VwdGlvbiAxJyIpOworc2hvdWxkVGhyb3coImNvbnRleHQucHV0SW1hZ2VE
YXRhKGJ1ZmZlciwgSW5maW5pdHksIDAsIDAsIDAsIDAsIDApIiwgIidFcnJvcjogSU5ERVhfU0la
RV9FUlI6IERPTSBFeGNlcHRpb24gMSciKTsKK3Nob3VsZFRocm93KCJjb250ZXh0LnB1dEltYWdl
RGF0YShidWZmZXIsIDAsIEluZmluaXR5LCAwLCAwLCAwLCAwKSIsICInRXJyb3I6IElOREVYX1NJ
WkVfRVJSOiBET00gRXhjZXB0aW9uIDEnIik7CitzaG91bGRUaHJvdygiY29udGV4dC5wdXRJbWFn
ZURhdGEoYnVmZmVyLCAwLCAwLCBJbmZpbml0eSwgMCwgMCwgMCkiLCAiJ0Vycm9yOiBJTkRFWF9T
SVpFX0VSUjogRE9NIEV4Y2VwdGlvbiAxJyIpOworc2hvdWxkVGhyb3coImNvbnRleHQucHV0SW1h
Z2VEYXRhKGJ1ZmZlciwgMCwgMCwgMCwgSW5maW5pdHksIDAsIDApIiwgIidFcnJvcjogSU5ERVhf
U0laRV9FUlI6IERPTSBFeGNlcHRpb24gMSciKTsKK3Nob3VsZFRocm93KCJjb250ZXh0LnB1dElt
YWdlRGF0YShidWZmZXIsIDAsIDAsIDAsIDAsIEluZmluaXR5LCAwKSIsICInRXJyb3I6IElOREVY
X1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEnIik7CitzaG91bGRUaHJvdygiY29udGV4dC5wdXRJ
bWFnZURhdGEoYnVmZmVyLCAwLCAwLCAwLCAwLCAwLCBJbmZpbml0eSkiLCAiJ0Vycm9yOiBJTkRF
WF9TSVpFX0VSUjogRE9NIEV4Y2VwdGlvbiAxJyIpOworc2hvdWxkVGhyb3coImNvbnRleHQucHV0
SW1hZ2VEYXRhKGJ1ZmZlciwgdW5kZWZpbmVkLCAwLCAwLCAwLCAwLCAwKSIsICInRXJyb3I6IElO
REVYX1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEnIik7CitzaG91bGRUaHJvdygiY29udGV4dC5w
dXRJbWFnZURhdGEoYnVmZmVyLCAwLCB1bmRlZmluZWQsIDAsIDAsIDAsIDApIiwgIidFcnJvcjog
SU5ERVhfU0laRV9FUlI6IERPTSBFeGNlcHRpb24gMSciKTsKK3Nob3VsZFRocm93KCJjb250ZXh0
LnB1dEltYWdlRGF0YShidWZmZXIsIDAsIDAsIHVuZGVmaW5lZCwgMCwgMCwgMCkiLCAiJ0Vycm9y
OiBJTkRFWF9TSVpFX0VSUjogRE9NIEV4Y2VwdGlvbiAxJyIpOworc2hvdWxkVGhyb3coImNvbnRl
eHQucHV0SW1hZ2VEYXRhKGJ1ZmZlciwgMCwgMCwgMCwgdW5kZWZpbmVkLCAwLCAwKSIsICInRXJy
b3I6IElOREVYX1NJWkVfRVJSOiBET00gRXhjZXB0aW9uIDEnIik7CitzaG91bGRUaHJvdygiY29u
dGV4dC5wdXRJbWFnZURhdGEoYnVmZmVyLCAwLCAwLCAwLCAwLCB1bmRlZmluZWQsIDApIiwgIidF
cnJvcjogSU5ERVhfU0laRV9FUlI6IERPTSBFeGNlcHRpb24gMSciKTsKK3Nob3VsZFRocm93KCJj
b250ZXh0LnB1dEltYWdlRGF0YShidWZmZXIsIDAsIDAsIDAsIDAsIDAsIHVuZGVmaW5lZCkiLCAi
J0Vycm9yOiBJTkRFWF9TSVpFX0VSUjogRE9NIEV4Y2VwdGlvbiAxJyIpOworCit2YXIgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggNjllM2FkNy4uM2Y3N2JhYiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAw
OC0wMi0yNCAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyAxNjk1NDogU3VwcG9ydCBwdXRJ
bWFnZURhdGEKKyAgICAgICAgCisgICAgICAgIEltcGxlbWVudCBzdXBwb3J0IGZvciBIVE1MNSdz
IHB1dEltYWdlRGF0YSBmb3IgdGhlIENHIHBvcnQuICBBbGwgb3RoZXIgcG9ydHMKKyAgICAgICAg
YXJlIGN1cnJlbnRseSBqdXN0IHVzaW5nIHN0dWJzIGZvciB0aGUgZmluYWwgYmxpdC4KKworICAg
ICAgICBUZXN0OiBmYXN0L2NhbnZhcy9jYW52YXMtcHV0SW1hZ2VEYXRhLmh0bWwKKworICAgICAg
ICAqIGJpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkpTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwdXRJbWFnZURhdGEp
OgorICAgICAgICAqIGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VEYXRhKToKKyAgICAg
ICAgKiBodG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fp
cm8vSW1hZ2VCdWZmZXJDYWlyby5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0SW1h
Z2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNw
cDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93eC9JbWFnZUJ1ZmZlcld4LmNwcDoKKwog
MjAwOC0wMi0yNCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgU2FtLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAppbmRleCA0YTYzOTBmLi4yZjE2N2RkIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3Vz
dG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQ3VzdG9tLmNwcApAQCAtMjgsMTAgKzI4LDEyIEBACiAjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CiAjaW5jbHVkZSAiSFRNTENhbnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVt
ZW50LmgiCisjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAiSlNDYW52YXNHcmFkaWVu
dC5oIgogI2luY2x1ZGUgIkpTQ2FudmFzUGF0dGVybi5oIgogI2luY2x1ZGUgIkpTSFRNTENhbnZh
c0VsZW1lbnQuaCIKICNpbmNsdWRlICJKU0hUTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJK
U0ltYWdlRGF0YS5oIgogI2luY2x1ZGUgImtqc19odG1sLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBL
SlM7CkBAIC0zMzUsNiArMzM3LDI0IEBAIEpTVmFsdWUqIEpTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpjcmVhdGVQYXR0ZXJuKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTGlzdCYKIAogSlNWYWx1
ZSogSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnB1dEltYWdlRGF0YShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IExpc3QmIGFyZ3MpCiB7CisgICAgLy8gcHV0SW1hZ2VEYXRhIGhhcyB0d28gdmFy
aWFudHMKKyAgICAvLyBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhLCB4LCB5KQorICAgIC8vIHB1dElt
YWdlRGF0YShJbWFnZURhdGEsIHgsIHksIGRpcnR5WCwgZGlydHlZLCBkaXJ0eVdpZHRoLCBkaXJ0
eUhlaWdodCkKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBpbXBsKCk7
CisgICAgCisgICAgSW1hZ2VEYXRhKiBkYXRhID0gdG9JbWFnZURhdGEoYXJnc1swXSk7CisgICAg
aWYgKCFkYXRhKSB7CisgICAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBUWVBFX01JU01BVENI
X0VSUik7CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIH0KKyAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICBpZiAoYXJncy5zaXplKCkgPj0gNykKKyAgICAgICAgY29udGV4
dC0+cHV0SW1hZ2VEYXRhKGRhdGEsIGFyZ3NbMV0tPnRvRmxvYXQoZXhlYyksIGFyZ3NbMl0tPnRv
RmxvYXQoZXhlYyksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1szXS0+dG9G
bG9hdChleGVjKSwgYXJnc1s0XS0+dG9GbG9hdChleGVjKSwgYXJnc1s1XS0+dG9GbG9hdChleGVj
KSwgYXJnc1s2XS0+dG9GbG9hdChleGVjKSwgZWMpOworICAgIGVsc2UKKyAgICAgICAgY29udGV4
dC0+cHV0SW1hZ2VEYXRhKGRhdGEsIGFyZ3NbMV0tPnRvRmxvYXQoZXhlYyksIGFyZ3NbMl0tPnRv
RmxvYXQoZXhlYyksIGVjKTsKKworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52
YXNQaXhlbEFycmF5LmNwcCBiL1dlYkNvcmUvaHRtbC9DYW52YXNQaXhlbEFycmF5LmNwcAppbmRl
eCA2NmFhZTNkLi43YWJkNTY1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUGl4ZWxB
cnJheS5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc1BpeGVsQXJyYXkuY3BwCkBAIC0zOSw2
ICszOSw3IEBAIFBhc3NSZWZQdHI8Q2FudmFzUGl4ZWxBcnJheT4gQ2FudmFzUGl4ZWxBcnJheTo6
Y3JlYXRlKHVuc2lnbmVkIHNpemUpCiBDYW52YXNQaXhlbEFycmF5OjpDYW52YXNQaXhlbEFycmF5
KHVuc2lnbmVkIHNpemUpCiAgICAgOiBtX2RhdGEoc2l6ZSkKIHsKKyAgICBBU1NFUlQoKG1fZGF0
YS5kYXRhKCkgJiAzKSA9PSAwKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcAppbmRleCBkYWIzODc5Li5hYzAyMzhjIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJDb3JlL2h0bWwvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMTIwMiw0ICsxMjAyLDQ3IEBAIFBhc3NSZWZQ
dHI8SW1hZ2VEYXRhPiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmdldEltYWdlRGF0YShmbG9h
dCBzeCwgZmxvYXQgc3ksCiAgICAgcmV0dXJuIGJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKHNjYWxlZFJl
Y3QpOwogfQogCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0SW1hZ2VEYXRhKElt
YWdlRGF0YSogZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sK
KyAgICBwdXRJbWFnZURhdGEoZGF0YSwgZHgsIGR5LCAwLCAwLCBkYXRhLT53aWR0aCgpLCBkYXRh
LT5oZWlnaHQoKSwgZWMpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cHV0
SW1hZ2VEYXRhKEltYWdlRGF0YSogZGF0YSwgZmxvYXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0
eVgsIGZsb2F0IGRpcnR5WSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZsb2F0IGRpcnR5V2lkdGgsIGZsb2F0IGRpcnR5SGVpZ2h0LCBFeGNlcHRpb25Db2Rl
JiBlYykKK3sKKyAgICBpZiAoIWlzZmluaXRlKGR4KSB8fCAhaXNmaW5pdGUoZHkpIHx8ICFpc2Zp
bml0ZShkaXJ0eVgpIHx8IAorICAgICAgICAhaXNmaW5pdGUoZGlydHlZKSB8fCAhaXNmaW5pdGUo
ZGlydHlXaWR0aCkgfHwgIWlzZmluaXRlKGRpcnR5SGVpZ2h0KSkgeworICAgICAgICBlYyA9IElO
REVYX1NJWkVfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgSW1hZ2VCdWZmZXIq
IGJ1ZmZlciA9IG1fY2FudmFzID8gbV9jYW52YXMtPmJ1ZmZlcigpIDogMDsKKyAgICBpZiAoIWJ1
ZmZlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGRpcnR5V2lkdGggPCAwKSB7CisgICAg
ICAgIGRpcnR5WCArPSBkaXJ0eVdpZHRoOworICAgICAgICBkaXJ0eVdpZHRoID0gLWRpcnR5V2lk
dGg7CisgICAgfQorCisgICAgaWYgKGRpcnR5SGVpZ2h0IDwgMCkgeworICAgICAgICBkaXJ0eVkg
Kz0gZGlydHlIZWlnaHQ7CisgICAgICAgIGRpcnR5SGVpZ2h0ID0gLWRpcnR5SGVpZ2h0OworICAg
IH0KKworICAgIEZsb2F0UmVjdCBjbGlwUmVjdChkaXJ0eVgsIGRpcnR5WSwgZGlydHlXaWR0aCwg
ZGlydHlIZWlnaHQpOworICAgIGNsaXBSZWN0LmludGVyc2VjdChJbnRSZWN0KDAsIDAsIGRhdGEt
PndpZHRoKCksIGRhdGEtPmhlaWdodCgpKSk7CisgICAgSW50U2l6ZSBkZXN0T2Zmc2V0KHN0YXRp
Y19DYXN0PGludD4oZHgpLCBzdGF0aWNfY2FzdDxpbnQ+KGR5KSk7CisgICAgSW50UmVjdCBzb3Vy
Y2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChjbGlwUmVjdCk7CisgICAgc291cmNlUmVjdC5tb3Zl
KGRlc3RPZmZzZXQpOworICAgIHNvdXJjZVJlY3QuaW50ZXJzZWN0KEludFJlY3QoSW50UG9pbnQo
KSwgYnVmZmVyLT5zaXplKCkpKTsKKyAgICBpZiAoc291cmNlUmVjdC5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybjsKKyAgICB3aWxsRHJhdyhzb3VyY2VSZWN0KTsKKyAgICBzb3VyY2VSZWN0Lm1v
dmUoLWRlc3RPZmZzZXQpOworICAgIEludFBvaW50IGRlc3RQb2ludChkZXN0T2Zmc2V0LndpZHRo
KCksIGRlc3RPZmZzZXQuaGVpZ2h0KCkpOworICAgIAorICAgIGJ1ZmZlci0+cHV0SW1hZ2VEYXRh
KGRhdGEsIHNvdXJjZVJlY3QsIGRlc3RQb2ludCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBi
L1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAppbmRleCBmNGNjOTM4Li41
Zjc5ZDUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmgKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCkBAIC0xNjYs
NiArMTY2LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAKICAgICAgICAgUGFzc1Jl
ZlB0cjxJbWFnZURhdGE+IGNyZWF0ZUltYWdlRGF0YShmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0
KSBjb25zdDsKICAgICAgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShmbG9h
dCBzeCwgZmxvYXQgc3ksIGZsb2F0IHN3LCBmbG9hdCBzaCkgY29uc3Q7CisgICAgICAgIHZvaWQg
cHV0SW1hZ2VEYXRhKEltYWdlRGF0YSosIGZsb2F0IGR4LCBmbG9hdCBkeSwgRXhjZXB0aW9uQ29k
ZSYpOworICAgICAgICB2b2lkIHB1dEltYWdlRGF0YShJbWFnZURhdGEqLCBmbG9hdCBkeCwgZmxv
YXQgZHksIGZsb2F0IGRpcnR5WCwgZmxvYXQgZGlydHlZLCBmbG9hdCBkaXJ0eVdpZHRoLCBmbG9h
dCBkaXJ0eUhlaWdodCwgRXhjZXB0aW9uQ29kZSYpOwogICAgICAgICAKICAgICAgICAgdm9pZCBy
ZXNldCgpOwogICAgICAgICB2b2lkIGRldGFjaENhbnZhcygpIHsgbV9jYW52YXMgPSAwOyB9CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmggYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyLmgKaW5kZXggODY5Y2Q3MS4uMmFjMmI0
ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaApAQCAtNDksNiArNDks
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiAg
ICAgY2xhc3MgSW1hZ2VEYXRhOworICAgIGNsYXNzIEludFBvaW50OwogICAgIGNsYXNzIEludFJl
Y3Q7CiAgICAgY2xhc3MgUmVuZGVyT2JqZWN0OwogCkBAIC02Nyw4ICs2OCwxMCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAjZWxpZiBQTEFURk9STShDQUlSTykKICAgICAgICAgY2Fpcm9fc3VyZmFj
ZV90KiBzdXJmYWNlKCkgY29uc3Q7CiAjZW5kaWYKLQorICAgICAgICAKICAgICAgICAgUGFzc1Jl
ZlB0cjxJbWFnZURhdGE+IGdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdDsK
KyAgICAgICAgdm9pZCBwdXRJbWFnZURhdGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJl
Y3QmIHNvdXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpOworCiAgICAgcHJpdmF0
ZToKICAgICAgICAgdm9pZCogbV9kYXRhOwogICAgICAgICBJbnRTaXplIG1fc2l6ZTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3Bw
CmluZGV4IGQ4ZDZhZDAuLjM5MmU5ZGYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcApAQCAtODAsNCArODAsOSBAQCBQYXNz
UmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0
JikgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAordm9pZCBJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VE
YXRhKEltYWdlRGF0YSosIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRQb2ludCYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VCdWZmZXJDRy5jcHAKaW5kZXggZjQ1NmVjNS4uZGY1MDE2NiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHLmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0cuY3BwCkBAIC03NSw2ICs3NSw3
IEBAIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcih2b2lkKiBpbWFnZURhdGEsIGNvbnN0IEludFNp
emUmIHNpemUsIGF1dG9fcHRyPEdyYXBoaWNzCiAgICAgLCBtX2NvbnRleHQoY29udGV4dC5yZWxl
YXNlKCkpCiAgICAgLCBtX2NnSW1hZ2UoMCkKIHsKKyAgICBBU1NFUlQoKHN0YXRpY19jYXN0PHNp
emVfdD4oaW1hZ2VEYXRhKSAmIDIpID09IDApOwogfQogCiBJbWFnZUJ1ZmZlcjo6fkltYWdlQnVm
ZmVyKCkKQEAgLTEzNiw3ICsxMzcsNyBAQCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZm
ZXI6OmdldEltYWdlRGF0YShjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAogICAgIHVuc2lnbmVk
IHNyY0J5dGVzUGVyUm93ID0gNCAqIG1fc2l6ZS53aWR0aCgpOwogICAgIHVuc2lnbmVkIGRlc3RC
eXRlc1BlclJvdyA9IDQgKiByZWN0LndpZHRoKCk7CiAgICAgCi0gICAgLy8gLW9yaWdpbnkgdG8g
aGFuZGxlIHRoZSBhY2N1cnNlZCBmbGlwcGVkIHkgYXhpcworICAgIC8vIG1fc2l6ZS5oZWlnaHQo
KSAtIG9yaWdpbnkgdG8gaGFuZGxlIHRoZSBhY2N1cnNlZCBmbGlwcGVkIHkgYXhpcyBpbiBDRyBi
YWNraW5nIHN0b3JlCiAgICAgdW5zaWduZWQgY2hhciogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dW5zaWduZWQgY2hhcio+KG1fZGF0YSkgKyAobV9zaXplLmhlaWdodCgpIC0gb3JpZ2lueSAt
IDEpICogc3JjQnl0ZXNQZXJSb3cgKyBvcmlnaW54ICogNDsKICAgICB1bnNpZ25lZCBjaGFyKiBk
ZXN0Um93cyA9IGRhdGEgKyBkZXN0eSAqIGRlc3RCeXRlc1BlclJvdyArIGRlc3R4ICogNDsKICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IG51bVJvd3M7ICsreSkgewpAQCAtMTU2LDQgKzE1Nyw1NiBA
QCBQYXNzUmVmUHRyPEltYWdlRGF0YT4gSW1hZ2VCdWZmZXI6OmdldEltYWdlRGF0YShjb25zdCBJ
bnRSZWN0JiByZWN0KSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgSW1hZ2VC
dWZmZXI6OnB1dEltYWdlRGF0YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc291
cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKK3sKKyAgICBBU1NFUlQoc291cmNl
UmVjdC53aWR0aCgpID4gMCk7CisgICAgQVNTRVJUKHNvdXJjZVJlY3QuaGVpZ2h0KCkgPiAwKTsK
KworICAgIGludCBvcmlnaW54ID0gc291cmNlUmVjdC54KCk7CisgICAgaW50IGRlc3R4ID0gZGVz
dFBvaW50LngoKSArIHNvdXJjZVJlY3QueCgpOworICAgIEFTU0VSVChkZXN0eCA+PSAwKTsKKyAg
ICBBU1NFUlQoZGVzdHggPCBtX3NpemUud2lkdGgoKSk7CisgICAgQVNTRVJUKG9yaWdpbnggPj0g
MCk7CisgICAgQVNTRVJUKG9yaWdpbnggPD0gc291cmNlUmVjdC5yaWdodCgpKTsKKworICAgIGlu
dCBlbmR4ID0gZGVzdFBvaW50LngoKSArIHNvdXJjZVJlY3QucmlnaHQoKTsKKyAgICBBU1NFUlQo
ZW5keCA8PSBtX3NpemUud2lkdGgoKSk7CisKKyAgICBpbnQgbnVtQ29sdW1ucyA9IGVuZHggLSBk
ZXN0eDsKKyAgICAKKyAgICBpbnQgb3JpZ2lueSA9IHNvdXJjZVJlY3QueSgpOworICAgIGludCBk
ZXN0eSA9IGRlc3RQb2ludC55KCkgKyBzb3VyY2VSZWN0LnkoKTsKKyAgICBBU1NFUlQoZGVzdHkg
Pj0gMCk7CisgICAgQVNTRVJUKGRlc3R5IDwgbV9zaXplLmhlaWdodCgpKTsKKyAgICBBU1NFUlQo
b3JpZ2lueSA+PSAwKTsKKyAgICBBU1NFUlQob3JpZ2lueSA8PSBzb3VyY2VSZWN0LmJvdHRvbSgp
KTsKKworICAgIGludCBlbmR5ID0gZGVzdFBvaW50LnkoKSArIHNvdXJjZVJlY3QuYm90dG9tKCk7
CisgICAgQVNTRVJUKGVuZHggPD0gbV9zaXplLmhlaWdodCgpKTsKKyAgICBpbnQgbnVtUm93cyA9
IGVuZHkgLSBkZXN0eTsKKworICAgIHVuc2lnbmVkIHNyY0J5dGVzUGVyUm93ID0gNCAqIHNvdXJj
ZS0+d2lkdGgoKTsKKyAgICB1bnNpZ25lZCBkZXN0Qnl0ZXNQZXJSb3cgPSA0ICogbV9zaXplLndp
ZHRoKCk7CisgICAgCisgICAgdW5zaWduZWQgY2hhciogc3JjUm93cyA9IHNvdXJjZS0+ZGF0YSgp
LT5kYXRhKCkuZGF0YSgpICsgb3JpZ2lueSAqIHNyY0J5dGVzUGVyUm93ICsgb3JpZ2lueCAqIDQ7
CisKKyAgICAvLyAtZGVzdHkgdG8gaGFuZGxlIHRoZSBhY2N1cnNlZCBmbGlwcGVkIHkgYXhpcwor
ICAgIHVuc2lnbmVkIGNoYXIqIGRlc3RSb3dzID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBj
aGFyKj4obV9kYXRhKSArIChtX3NpemUuaGVpZ2h0KCkgLSBkZXN0eSAtIDEpICogZGVzdEJ5dGVz
UGVyUm93ICsgZGVzdHggKiA0OworICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbnVtUm93czsgKyt5
KSB7CisgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbnVtQ29sdW1uczsgeCsrKSB7CisgICAg
ICAgICAgICB1bnNpZ25lZCBjaGFyIGFscGhhID0gc3JjUm93c1t4ICogNCArIDNdOworICAgICAg
ICAgICAgaWYgKGFscGhhICE9IDI1NSkgeworICAgICAgICAgICAgICAgIGRlc3RSb3dzW3ggKiA0
ICsgMF0gPSAoc3JjUm93c1swXSAqIGFscGhhKSAvIDI1NTsKKyAgICAgICAgICAgICAgICBkZXN0
Um93c1t4ICogNCArIDFdID0gKHNyY1Jvd3NbMV0gKiBhbHBoYSkgLyAyNTU7CisgICAgICAgICAg
ICAgICAgZGVzdFJvd3NbeCAqIDQgKyAyXSA9IChzcmNSb3dzWzJdICogYWxwaGEpIC8gMjU1Owor
ICAgICAgICAgICAgICAgIGRlc3RSb3dzW3ggKiA0ICsgM10gPSBhbHBoYTsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KGRl
c3RSb3dzICsgeCAqIDQpWzBdID0gcmVpbnRlcnByZXRfY2FzdDx1aW50MzJfdCo+KHNyY1Jvd3Mg
KyB4ICogNClbMF07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGVzdFJvd3Mg
LT0gZGVzdEJ5dGVzUGVyUm93OworICAgICAgICBzcmNSb3dzICs9IHNyY0J5dGVzUGVyUm93Owor
ICAgIH0KK30KKwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9J
bWFnZUJ1ZmZlclF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZm
ZXJRdC5jcHAKaW5kZXggMjE3MjQyZi4uNDQ5Njc3ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ltYWdlQnVmZmVyUXQuY3BwCkBAIC03Nyw0ICs3Nyw5IEBAIFBhc3NSZWZQ
dHI8SW1hZ2VEYXRhPiBJbWFnZUJ1ZmZlcjo6Z2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmKSBj
b25zdAogICAgIHJldHVybiAwOwogfQogCit2b2lkIEltYWdlQnVmZmVyOjpwdXRJbWFnZURhdGEo
SW1hZ2VEYXRhKiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFBvaW50JikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9J
bWFnZUJ1ZmZlcld4LmNwcAppbmRleCAzZTk2ZjFkLi4wYzgzMmVhIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0ltYWdlQnVmZmVyV3guY3BwCisrKyBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd3gvSW1hZ2VCdWZmZXJXeC5jcHAKQEAgLTUyLDQgKzUyLDkgQEAg
UGFzc1JlZlB0cjxJbWFnZURhdGE+IEltYWdlQnVmZmVyOjpnZXRJbWFnZURhdGEoY29uc3QgSW50
UmVjdCYpIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKK3ZvaWQgSW1hZ2VCdWZmZXI6OnB1dElt
YWdlRGF0YShJbWFnZURhdGEqLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50UG9pbnQmKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIH0K
</data>
<flag name="review"
          id="8460"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>