<?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>48212</bug_id>
          
          <creation_ts>2010-10-24 14:28:30 -0700</creation_ts>
          <short_desc>SVG FELighting performance issues</short_desc>
          <delta_ts>2014-05-12 05:54:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>68469</blocked>
    
    <blocked>26389</blocked>
    
    <blocked>48174</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>krit</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>zherczeg</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>298663</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-24 14:28:30 -0700</bug_when>
    <thetext>FELighting has some performance issues.

The most obvious issue is the -&gt; operator for the get and set calls on CanvasPixelArray. The ByteArray is ref counted, so we have to use this operator on every read or write operation. This can be avoided by using a ByteArray pointer instead of the CanvasPixelArray like on the other effects.

The other big perf issue if FloatPoint3D.
The most time is spend on setPixel and mainly in the normalize() function of FloatPoint3D. normalize() makes three divisions and a dot product of itself. The dot product seems really slow and calls x() y() and z() on every call. Can we speed this up? Can&apos;t we write a selfDot function? Is it possible to avoid the call of normalize() more?

Other issues depend on the kind of Lighting effect and are located at the update functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300038</commentid>
    <comment_count>1</comment_count>
      <attachid>71991</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-10-27 00:07:03 -0700</bug_when>
    <thetext>Created attachment 71991
draft patch

Faster light filter. I will upload an example, where the speed is improved from 55 to 73 fps (on a mac leopard)! The patch contains heavy optimizations, which you may not like, that is why it is a draft atm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300039</commentid>
    <comment_count>2</comment_count>
      <attachid>71992</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-10-27 00:07:50 -0700</bug_when>
    <thetext>Created attachment 71992
Example</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300051</commentid>
    <comment_count>3</comment_count>
      <attachid>71991</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-27 01:02:35 -0700</bug_when>
    <thetext>Comment on attachment 71991
draft patch

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

Have you measured the performance with ByteArray*? I couldn&apos;t see a difference between usigned char* and ByteArray* on feGaussianBlur with shark. Of course you save some address calculations on using unsigned char* (pixels[0] = ... pixels[1]), but would still interest me you see a difference.
The changes on FloatPoint3D are ok.

&gt; WebCore/platform/graphics/filters/FELighting.cpp:95
&gt; +inline void FELighting::LightingData::topRight(int offset, IntPair&amp; intPair)
&gt;  {
&gt; -    return static_cast&lt;int&gt;(pixels-&gt;get(offset - widthMultipliedByPixelSize + cPixelSize + cAlphaChannelOffset));
&gt; +    unsigned char* pixel = pixels + offset;
&gt; +    int left = static_cast&lt;int&gt;(pixel[-cPixelSize + cAlphaChannelOffset]);
&gt; +    int center = static_cast&lt;int&gt;(pixel[cAlphaChannelOffset]);
&gt; +    pixel += widthMultipliedByPixelSize;
&gt; +    int bottomLeft = static_cast&lt;int&gt;(pixel[-cPixelSize + cAlphaChannelOffset]);
&gt; +    int bottom = static_cast&lt;int&gt;(pixel[cAlphaChannelOffset]);
&gt; +    intPair.normalX = -(left &lt;&lt; 1) + (center &lt;&lt; 1) - bottomLeft + bottom;
&gt; +    intPair.normalY = -left - (center &lt;&lt; 1) + bottomLeft + (bottom &lt;&lt; 1);
&gt;  }

Is there no way to share more of the code with the other edge functions?

&gt; WebCore/platform/graphics/filters/FELighting.cpp:196
&gt; +            if (m_specularExponent == 1.0f)

== 1

&gt; WebCore/platform/graphics/filters/FELighting.cpp:205
&gt; +        normalVector.setZ(1.0f);

just ...setZ(1);

&gt; WebCore/platform/graphics/filters/FELighting.cpp:214
&gt; +            if (m_specularExponent == 1.0f)

== 1

&gt; WebCore/platform/graphics/filters/FELighting.cpp:-128
&gt; -    if (data.lightStrength &gt; 1.0f)
&gt; -        data.lightStrength = 1.0f;
&gt; -    if (data.lightStrength &lt; 0.0f)
&gt; -        data.lightStrength = 0.0f;

1 and 0

&gt; WebCore/platform/graphics/filters/FELighting.cpp:237
&gt; +    IntPair intPair;
&gt; +    int offset;

Please initialize these values. And declare them on the first use.

&gt; WebCore/platform/graphics/filters/FELighting.cpp:258
&gt; +    setPixel(offset, data, paintingData, 0, 0, -2.0f / 3.0f, -2.0f / 3.0f, intPair);

Normally the compiler should optimize it, but can you add a static const for -2 / 3.f ? This is reused multiple times. The same for some other constant calculations, a name is also easier to understand.

&gt; WebCore/platform/graphics/filters/FELighting.cpp:346
&gt;      RefPtr&lt;ImageData&gt; srcImageData(in-&gt;resultImage()-&gt;getUnmultipliedImageData(effectDrawingRect));

change srcImageData(...) to srcImageData = ... please

&gt; WebCore/platform/graphics/filters/FELighting.h:57
&gt; +    struct IntPair {
&gt; +        int normalX;
&gt; +        int normalY;
&gt; +    };

Do you really see a noticeable performance win compared to IntPoint?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300137</commentid>
    <comment_count>4</comment_count>
      <attachid>72014</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-10-27 05:10:43 -0700</bug_when>
    <thetext>Created attachment 72014
Draft patch 2

This one contains the requested changes except the ByteArray* rewriting. This is the fastest so far, can achive 74 fps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300138</commentid>
    <comment_count>5</comment_count>
      <attachid>72015</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-10-27 05:12:34 -0700</bug_when>
    <thetext>Created attachment 72015
ByteArray rewriting

This one contains the ByteArray rewriting. It is slower, only 72 fps.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300152</commentid>
    <comment_count>6</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-27 05:44:45 -0700</bug_when>
    <thetext>Thanks for taking the bother to check ByteArray, have you used callgrind (kcachegrind) or shark to look why it is slower on ByteArray? Is it the get and set method? If so, we might follow kling&apos;s suggestion and add a unsafeGet/Set method. I&apos;d also like to know what takes most of the time after your changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300174</commentid>
    <comment_count>7</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-10-27 06:35:26 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Thanks for taking the bother to check ByteArray, have you used callgrind (kcachegrind) or shark to look why it is slower on ByteArray? Is it the get and set method? If so, we might follow kling&apos;s suggestion and add a unsafeGet/Set method. I&apos;d also like to know what takes most of the time after your changes.

Assembly magic. The pixels-&gt;get(offset) is turned to indexed addressing modes  [reg + reg], while the other [reg, immediate] is supported by more architectures, and results a simplified machine code.

Valgrind is not useful for performance measurements, since it totally recompiles the code, even if you don&apos;t touch the instruction stream. Valgrind is a great tool, and excellent for searching memory leaks (and other things unrealted to performance).

There is no unsafeGet method for ByteArray. Get is unsafe enough :)

unsigned char get(unsigned index) const
{
    ASSERT(index &lt; m_size);
    return m_data[index];
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300202</commentid>
    <comment_count>8</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-27 07:15:52 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; Thanks for taking the bother to check ByteArray, have you used callgrind (kcachegrind) or shark to look why it is slower on ByteArray? Is it the get and set method? If so, we might follow kling&apos;s suggestion and add a unsafeGet/Set method. I&apos;d also like to know what takes most of the time after your changes.
&gt; 
&gt; Assembly magic. The pixels-&gt;get(offset) is turned to indexed addressing modes  [reg + reg], while the other [reg, immediate] is supported by more architectures, and results a simplified machine code.
&gt; 
&gt; Valgrind is not useful for performance measurements, since it totally recompiles the code, even if you don&apos;t touch the instruction stream. Valgrind is a great tool, and excellent for searching memory leaks (and other things unrealted to performance).
&gt; 
&gt; There is no unsafeGet method for ByteArray. Get is unsafe enough :)
&gt; 
&gt; unsigned char get(unsigned index) const
&gt; {
&gt;     ASSERT(index &lt; m_size);
&gt;     return m_data[index];
&gt; }

You don&apos;t need to recompile for using callgrind, and it is very useful to see how much time is spend in which function. Valgrind is a tool chain, and consists of different tools, not only cachegrind (I guess you were just thinking about this). kcachegrind2 on the other hand is just a graphical tool and makes it quiet easy to visualize the output of callgrind.

Yes, get is pretty simple, but set has a bit more &quot;complexity&quot;, that might get visible on the massive calls of it for pixel manipulation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>300288</commentid>
    <comment_count>9</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-10-27 09:47:13 -0700</bug_when>
    <thetext>&gt; You don&apos;t need to recompile for using callgrind, and it is very useful to see how much time is spend in which function. Valgrind is a tool chain, and consists of different tools, not only cachegrind (I guess you were just thinking about this). kcachegrind2 on the other hand is just a graphical tool and makes it quiet easy to visualize the output of callgrind.

I like valgrind, I even wrote valgrind tools myself. Valgrind using a recompiler called libVEX. It reads the machine instructions from the binary, convert them to a high level assembly language, where a tool can modify this stream (thus it is really easy to insert calls into the stream, that is what most tools do). Later, this high level assembly language is compiled back to binary form on-the-fly by libVEX again. If your tool does not touch the stream, you get a 3 times slower binary code. Hence it is useless for performance related things. But you can follow the control flow (inserting calls before function entries, and such), you can insert checks before each memory reads/writes (memcheck), and so on. If you need info, but you don&apos;t care about speed -&gt; valgring (libVEX) is your tool. If speed matters, use cycle accurate simulators (we also have one for arm: http://www.inf.u-szeged.hu/xeemu/)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301689</commentid>
    <comment_count>10</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-10-29 04:44:24 -0700</bug_when>
    <thetext>Krit, which version you choose? (Unfortunately the lighting filter is a big chunk of code because of inline functions, and cannot be analized properly)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>301696</commentid>
    <comment_count>11</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-10-29 05:19:59 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Krit, which version you choose? (Unfortunately the lighting filter is a big chunk of code because of inline functions, and cannot be analized properly)

Oh sorry, for consistency to other effects and given the fact that the difference is not that high, Id prefer ByteArray for the moment.
Is it possible to share more code on bottomLeft, borromRight,... functions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303354</commentid>
    <comment_count>12</comment_count>
      <attachid>72664</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-11-02 07:51:59 -0700</bug_when>
    <thetext>Created attachment 72664
final patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303355</commentid>
    <comment_count>13</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-11-02 07:53:37 -0700</bug_when>
    <thetext>&gt; Oh sorry, for consistency to other effects and given the fact that the difference is not that high, Id prefer ByteArray for the moment.
&gt; Is it possible to share more code on bottomLeft, borromRight,... functions?

Did it. There maybe some template magic which could reduce the number of functions without performance loss, but it looks difficult.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303662</commentid>
    <comment_count>14</comment_count>
      <attachid>72664</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-11-02 14:25:54 -0700</bug_when>
    <thetext>Comment on attachment 72664
final patch

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

r=me with little style changes.

&gt; WebCore/platform/graphics/filters/FELighting.cpp:178
&gt; +inline void FELighting::inlineSetPixel(int offset, LightingData&amp; data, LightSource::PaintingData&amp; paintingData,
&gt; +    int lightX, int lightY, float factorX, float factorY, IntPoint&amp; normal2DVector)

align the int&apos;s

&gt; WebCore/platform/graphics/filters/FELighting.cpp:227
&gt; +void FELighting::setPixel(int offset, LightingData&amp; data, LightSource::PaintingData&amp; paintingData,
&gt; +    int lightX, int lightY, float factorX, float factorY, IntPoint&amp; normalVector)

align the int&apos;s.

&gt; WebCore/platform/graphics/filters/FELighting.h:76
&gt; +    inline void inlineSetPixel(int offset, LightingData&amp;, LightSource::PaintingData&amp;,
&gt; +        int lightX, int lightY, float factorX, float factorY, IntPoint&amp; normalVector);

please align the ints

&gt; WebCore/platform/graphics/filters/FELighting.h:80
&gt; +    void setPixel(int offset, LightingData&amp;, LightSource::PaintingData&amp;,
&gt; +        int lightX, int lightY, float factorX, float factorY, IntPoint&amp; normalVector);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303933</commentid>
    <comment_count>15</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-11-03 01:44:19 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/71222

Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>71991</attachid>
            <date>2010-10-27 00:07:03 -0700</date>
            <delta_ts>2010-10-27 05:10:43 -0700</delta_ts>
            <desc>draft patch</desc>
            <filename>0001-light-filter.patch</filename>
            <type>text/plain</type>
            <size>29080</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSBiYzNhYTI2NjhjMmE4ZWI3NDQxYTk1MGY5OGY1ZGQ2YzhhNGMxZGFmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBUdWUsIDI2IE9jdCAyMDEwIDE0OjMwOjU5ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gbGlnaHQtZmlsdGVyCgpTaWduZWQtb2ZmLWJ5OiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdA
aW5mLnUtc3plZ2VkLmh1PgotLS0KIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dDNELmNwcCAgICAgICAgfCAgICA1IC0KIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludDNELmggICAgICAgICAgfCAgICAyICstCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVMaWdodGluZy5jcHAgIHwgIDI4OCArKysrKysrKysrKysrKy0tLS0tLS0KIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmggICAgfCAgIDM2ICsrLS0K
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5jcHAgfCAgICA3
ICstCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaCAgIHwg
ICAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDIxNCBpbnNlcnRpb25zKCspLCAxMjUgZGVsZXRpb25z
KC0pCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0Qu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwCmluZGV4IGJi
MDVlN2YuLmVkMTgxNmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludDNELmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQz
RC5jcHAKQEAgLTM4LDEwICszOCw1IEBAIHZvaWQgRmxvYXRQb2ludDNEOjpub3JtYWxpemUoKQog
ICAgIH0KIH0KIAotZmxvYXQgRmxvYXRQb2ludDNEOjpsZW5ndGgoKSBjb25zdAotewotICAgIHJl
dHVybiBzcXJ0ZihsZW5ndGhTcXVhcmVkKCkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5oCmluZGV4IDllZTU0OGQu
LmI2Y2JhYTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dDNELmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuaApAQCAt
MTEzLDggKzExMyw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
LSAgICBmbG9hdCBsZW5ndGgoKSBjb25zdDsKICAgICBmbG9hdCBsZW5ndGhTcXVhcmVkKCkgY29u
c3QgeyByZXR1cm4gdGhpcy0+ZG90KCp0aGlzKTsgfQorICAgIGZsb2F0IGxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIHNxcnRmKGxlbmd0aFNxdWFyZWQoKSk7IH0KIAogcHJpdmF0ZToKICAgICBmbG9h
dCBtX3g7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVM
aWdodGluZy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGlu
Zy5jcHAKaW5kZXggZTFkZjU4MC4uZWNmYWI3NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtNTUsODcgKzU1LDE4NiBAQCBjb25z
dCBzdGF0aWMgaW50IGNQaXhlbFNpemUgPSA0OwogY29uc3Qgc3RhdGljIGludCBjQWxwaGFDaGFu
bmVsT2Zmc2V0ID0gMzsKIGNvbnN0IHN0YXRpYyB1bnNpZ25lZCBjaGFyIGNPcGFxdWVBbHBoYSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDB4ZmYpOwogCi1BTFdBWVNfSU5MSU5FIGludCBG
RUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnVwTGVmdFBpeGVsVmFsdWUoKQorLy8gPDwgMSBpcyBz
aWduZWQgbXVsdGlwbHkgYnkgMgoraW5saW5lIHZvaWQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRh
Ojp0b3BMZWZ0KGludCBvZmZzZXQsIEludFBhaXImIGludFBhaXIpCiB7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhl
bFNpemUgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHVuc2lnbmVk
IGNoYXIqIHBpeGVsID0gcGl4ZWxzICsgb2Zmc2V0OworICAgIGludCBjZW50ZXIgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVsW2NBbHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBpbnQgcmlnaHQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVsW2NQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSk7
CisgICAgcGl4ZWwgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IGJvdHRv
bSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxbY0FscGhhQ2hhbm5lbE9mZnNldF0pOworICAgIGlu
dCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxbY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXRdKTsKKyAgICBpbnRQYWlyLm5vcm1hbFggPSAtKGNlbnRlciA8PCAxKSAr
IChyaWdodCA8PCAxKSAtIGJvdHRvbSArIGJvdHRvbVJpZ2h0OworICAgIGludFBhaXIubm9ybWFs
WSA9IC0oY2VudGVyIDw8IDEpIC0gcmlnaHQgKyAoYm90dG9tIDw8IDEpICsgYm90dG9tUmlnaHQ7
CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dXBQaXhl
bFZhbHVlKCkKK2lubGluZSB2b2lkIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUm93KGlu
dCBvZmZzZXQsIEludFBhaXImIGludFBhaXIpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5nZXQob2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7CisgICAgdW5zaWduZWQgY2hhciogcGl4ZWwgPSBwaXhlbHMgKyBv
ZmZzZXQ7CisgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsWy1jUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldF0pOworICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVsW2NBbHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBpbnQgcmlnaHQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVsW2NQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAg
cGl4ZWwgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IGJvdHRvbUxlZnQg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsWy1jUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dF0pOworICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsW2NBbHBoYUNoYW5u
ZWxPZmZzZXRdKTsKKyAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
W2NQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAgaW50UGFpci5ub3JtYWxY
ID0gLShsZWZ0IDw8IDEpICsgKHJpZ2h0IDw8IDEpIC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0
OworICAgIGludFBhaXIubm9ybWFsWSA9IC1sZWZ0IC0gKGNlbnRlciA8PCAxKSAtIHJpZ2h0ICsg
Ym90dG9tTGVmdCArIChib3R0b20gPDwgMSkgKyBib3R0b21SaWdodDsKIH0KIAotQUxXQVlTX0lO
TElORSBpbnQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp1cFJpZ2h0UGl4ZWxWYWx1ZSgpCitp
bmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcFJpZ2h0KGludCBvZmZzZXQs
IEludFBhaXImIGludFBhaXIpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5nZXQob2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVsID0gcGl4ZWxz
ICsgb2Zmc2V0OworICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbFstY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbFtjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAgcGl4ZWwgKz0gd2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IGJvdHRvbUxlZnQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVsWy1jUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldF0pOworICAgIGludCBi
b3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsW2NBbHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAg
ICBpbnRQYWlyLm5vcm1hbFggPSAtKGxlZnQgPDwgMSkgKyAoY2VudGVyIDw8IDEpIC0gYm90dG9t
TGVmdCArIGJvdHRvbTsKKyAgICBpbnRQYWlyLm5vcm1hbFkgPSAtbGVmdCAtIChjZW50ZXIgPDwg
MSkgKyBib3R0b21MZWZ0ICsgKGJvdHRvbSA8PCAxKTsKIH0KIAotQUxXQVlTX0lOTElORSBpbnQg
RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0UGl4ZWxWYWx1ZSgpCitpbmxpbmUgdm9pZCBG
RUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1bW4oaW50IG9mZnNldCwgSW50UGFpciYg
aW50UGFpcikKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZz
ZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHVuc2lnbmVkIGNo
YXIqIHBpeGVsID0gcGl4ZWxzICsgb2Zmc2V0OworICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVsW2NBbHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBpbnQgcmlnaHQgPSBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVsW2NQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSk7Cisg
ICAgcGl4ZWwgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IHRvcCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxbY0FscGhhQ2hhbm5lbE9mZnNldF0pOworICAgIGludCB0b3BS
aWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxbY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXRdKTsKKyAgICBwaXhlbCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA8PCAxOwor
ICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsW2NBbHBoYUNoYW5uZWxPZmZz
ZXRdKTsKKyAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsW2NQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAgaW50UGFpci5ub3JtYWxYID0gLXRv
cCArIHRvcFJpZ2h0IC0gKGNlbnRlciA8PCAxKSArIChyaWdodCA8PCAxKSAtIGJvdHRvbSArIGJv
dHRvbVJpZ2h0OworICAgIGludFBhaXIubm9ybWFsWSA9IC0odG9wIDw8IDEpIC0gdG9wUmlnaHQg
KyAoYm90dG9tIDw8IDEpICsgYm90dG9tUmlnaHQ7CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50IEZF
TGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Y2VudGVyUGl4ZWxWYWx1ZSgpCitpbmxpbmUgdm9pZCBG
RUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmludGVyaW9yKGludCBvZmZzZXQsIEludFBhaXImIGlu
dFBhaXIpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVsID0gcGl4
ZWxzICsgb2Zmc2V0OworICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbFstY1Bp
eGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBpbnQgcmlnaHQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVsW2NQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAg
cGl4ZWwgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IHRvcExlZnQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVsWy1jUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldF0p
OworICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsW2NBbHBoYUNoYW5uZWxPZmZz
ZXRdKTsKKyAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsW2NQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAgcGl4ZWwgKz0gd2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemUgPDwgMTsKKyAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxbLWNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAgaW50IGJvdHRv
bSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxbY0FscGhhQ2hhbm5lbE9mZnNldF0pOworICAgIGlu
dCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxbY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXRdKTsKKyAgICBpbnRQYWlyLm5vcm1hbFggPSAtdG9wTGVmdCArIHRvcFJp
Z2h0IC0gKGxlZnQgPDwgMSkgKyAocmlnaHQgPDwgMSkgLSBib3R0b21MZWZ0ICsgYm90dG9tUmln
aHQ7CisgICAgaW50UGFpci5ub3JtYWxZID0gLXRvcExlZnQgLSAodG9wIDw8IDEpIC0gdG9wUmln
aHQgKyBib3R0b21MZWZ0ICsgKGJvdHRvbSA8PCAxKSArIGJvdHRvbVJpZ2h0OwogfQogCi1BTFdB
WVNfSU5MSU5FIGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0UGl4ZWxWYWx1ZSgp
CitpbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uKGludCBv
ZmZzZXQsIEludFBhaXImIGludFBhaXIpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5nZXQob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
KyAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbCA9IHBpeGVscyArIG9mZnNldDsKKyAgICBpbnQgbGVm
dCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxbLWNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0XSk7CisgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxbY0FscGhhQ2hh
bm5lbE9mZnNldF0pOworICAgIHBpeGVsIC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwor
ICAgIGludCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbFstY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bFtjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAgcGl4ZWwgKz0gd2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemUgPDwgMTsKKyAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxbLWNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAgaW50IGJvdHRvbSA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxbY0FscGhhQ2hhbm5lbE9mZnNldF0pOworICAgIGludFBh
aXIubm9ybWFsWCA9IC10b3BMZWZ0ICsgdG9wIC0gKGxlZnQgPDwgMSkgKyAoY2VudGVyIDw8IDEp
IC0gYm90dG9tTGVmdCArIGJvdHRvbTsKKyAgICBpbnRQYWlyLm5vcm1hbFkgPSAtdG9wTGVmdCAt
ICh0b3AgPDwgMSkgKyBib3R0b21MZWZ0ICsgKGJvdHRvbSA8PCAxKTsKIH0KIAotQUxXQVlTX0lO
TElORSBpbnQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpkb3duTGVmdFBpeGVsVmFsdWUoKQor
aW5saW5lIHZvaWQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21MZWZ0KGludCBvZmZz
ZXQsIEludFBhaXImIGludFBhaXIpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5nZXQob2Zmc2V0ICsgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVsID0gcGl4
ZWxzICsgb2Zmc2V0OworICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsW2NB
bHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVsW2NQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAgcGl4ZWwgLT0gd2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxbY0FscGhhQ2hhbm5lbE9mZnNldF0pOworICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxbY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBp
bnRQYWlyLm5vcm1hbFggPSAtdG9wICsgdG9wUmlnaHQgLSAoY2VudGVyIDw8IDEpICsgKHJpZ2h0
IDw8IDEpOworICAgIGludFBhaXIubm9ybWFsWSA9IC0odG9wIDw8IDEpIC0gdG9wUmlnaHQgKyAo
Y2VudGVyIDw8IDEpICsgcmlnaHQ7CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6
OkxpZ2h0aW5nRGF0YTo6ZG93blBpeGVsVmFsdWUoKQoraW5saW5lIHZvaWQgRkVMaWdodGluZzo6
TGlnaHRpbmdEYXRhOjpib3R0b21Sb3coaW50IG9mZnNldCwgSW50UGFpciYgaW50UGFpcikKIHsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyB3aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICB1bnNpZ25l
ZCBjaGFyKiBwaXhlbCA9IHBpeGVscyArIG9mZnNldDsKKyAgICBpbnQgbGVmdCA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxbLWNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAg
aW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxbY0FscGhhQ2hhbm5lbE9mZnNldF0p
OworICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxbY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBwaXhlbCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZTsKKyAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxbLWNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxbY0FscGhhQ2hhbm5lbE9mZnNldF0pOworICAgIGludCB0b3BSaWdodCA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxbY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAg
ICBpbnRQYWlyLm5vcm1hbFggPSAtdG9wTGVmdCArIHRvcFJpZ2h0IC0gKGxlZnQgPDwgMSkgKyAo
cmlnaHQgPDwgMSk7CisgICAgaW50UGFpci5ub3JtYWxZID0gLXRvcExlZnQgLSAodG9wIDw8IDEp
IC0gdG9wUmlnaHQgKyBsZWZ0ICsgKGNlbnRlciA8PCAxKSArIHJpZ2h0OwogfQogCi1BTFdBWVNf
SU5MSU5FIGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmRvd25SaWdodFBpeGVsVmFsdWUo
KQoraW5saW5lIHZvaWQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21SaWdodChpbnQg
b2Zmc2V0LCBJbnRQYWlyJiBpbnRQYWlyKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVscy0+Z2V0KG9mZnNldCArIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbCA9
IHBpeGVscyArIG9mZnNldDsKKyAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxb
LWNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAgaW50IGNlbnRlciA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxbY0FscGhhQ2hhbm5lbE9mZnNldF0pOworICAgIHBpeGVsIC09
IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGludCB0b3BMZWZ0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbFstY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBp
bnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbFtjQWxwaGFDaGFubmVsT2Zmc2V0XSk7Cisg
ICAgaW50UGFpci5ub3JtYWxYID0gLXRvcExlZnQgKyB0b3AgLSAobGVmdCA8PCAxKSArIChjZW50
ZXIgPDwgMSk7CisgICAgaW50UGFpci5ub3JtYWxZID0gLXRvcExlZnQgLSAodG9wIDw8IDEpICsg
bGVmdCArIChjZW50ZXIgPDwgMSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBGRUxpZ2h0aW5n
OjpzZXRQaXhlbChMaWdodGluZ0RhdGEmIGRhdGEsIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEm
IHBhaW50aW5nRGF0YSwKLSAgICBpbnQgbGlnaHRYLCBpbnQgbGlnaHRZLCBmbG9hdCBmYWN0b3JY
LCBpbnQgbm9ybWFsWCwgZmxvYXQgZmFjdG9yWSwgaW50IG5vcm1hbFkpCitpbmxpbmUgdm9pZCBG
RUxpZ2h0aW5nOjpzZXRQaXhlbChpbnQgb2Zmc2V0LCBMaWdodGluZ0RhdGEmIGRhdGEsIExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwKKyAgICBpbnQgbGlnaHRYLCBpbnQg
bGlnaHRZLCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRQYWlyJiBpbnRQYWlyKQog
ewotICAgIG1fbGlnaHRTb3VyY2UtPnVwZGF0ZVBhaW50aW5nRGF0YShwYWludGluZ0RhdGEsIGxp
Z2h0WCwgbGlnaHRZLCBzdGF0aWNfY2FzdDxmbG9hdD4oZGF0YS5waXhlbHMtPmdldChkYXRhLm9m
ZnNldCArIDMpKSAqIGRhdGEuc3VyZmFjZVNjYWxlKTsKLQotICAgIGRhdGEubm9ybWFsVmVjdG9y
LnNldFgoZmFjdG9yWCAqIHN0YXRpY19jYXN0PGZsb2F0Pihub3JtYWxYKSAqIGRhdGEuc3VyZmFj
ZVNjYWxlKTsKLSAgICBkYXRhLm5vcm1hbFZlY3Rvci5zZXRZKGZhY3RvclkgKiBzdGF0aWNfY2Fz
dDxmbG9hdD4obm9ybWFsWSkgKiBkYXRhLnN1cmZhY2VTY2FsZSk7Ci0gICAgZGF0YS5ub3JtYWxW
ZWN0b3Iuc2V0WigxLjBmKTsKLSAgICBkYXRhLm5vcm1hbFZlY3Rvci5ub3JtYWxpemUoKTsKLQot
ICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcpCi0g
ICAgICAgIGRhdGEubGlnaHRTdHJlbmd0aCA9IG1fZGlmZnVzZUNvbnN0YW50ICogKGRhdGEubm9y
bWFsVmVjdG9yICogcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yKTsKLSAgICBlbHNlIHsKLSAgICAg
ICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSBwYWludGluZ0RhdGEubGlnaHRWZWN0b3I7
Ci0gICAgICAgIGhhbGZ3YXlWZWN0b3Iuc2V0WihoYWxmd2F5VmVjdG9yLnooKSArIDEuMGYpOwot
ICAgICAgICBoYWxmd2F5VmVjdG9yLm5vcm1hbGl6ZSgpOwotICAgICAgICBpZiAobV9zcGVjdWxh
ckV4cG9uZW50ID09IDEuMGYpCi0gICAgICAgICAgICBkYXRhLmxpZ2h0U3RyZW5ndGggPSBtX3Nw
ZWN1bGFyQ29uc3RhbnQgKiAoZGF0YS5ub3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9yKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgZGF0YS5saWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNv
bnN0YW50ICogcG93ZihkYXRhLm5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IsIG1fc3BlY3Vs
YXJFeHBvbmVudCk7CisgICAgbV9saWdodFNvdXJjZS0+dXBkYXRlUGFpbnRpbmdEYXRhKHBhaW50
aW5nRGF0YSwgbGlnaHRYLCBsaWdodFksIHN0YXRpY19jYXN0PGZsb2F0PihkYXRhLnBpeGVsc1tv
ZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSkgKiBkYXRhLnN1cmZhY2VTY2FsZSk7CisKKyAg
ICBmbG9hdCBsaWdodFN0cmVuZ3RoOworICAgIGlmICghaW50UGFpci5ub3JtYWxYICYmICFpbnRQ
YWlyLm5vcm1hbFkpIHsKKyAgICAgICAgLy8gTm9ybWFsIHZlY3RvciBpcyAoMCwgMCwgMSkuIFRo
aXMgaXMgYSBxdWl0ZSBmcmVxdWVudCBjYXNlLgorICAgICAgICBpZiAobV9saWdodGluZ1R5cGUg
PT0gRkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0aW5nKQorICAgICAgICAgICAgbGlnaHRTdHJlbmd0
aCA9IG1fZGlmZnVzZUNvbnN0YW50ICogcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnooKSAvIHBh
aW50aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aDsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9IHBhaW50aW5nRGF0YS5saWdodFZlY3RvcjsK
KyAgICAgICAgICAgIGhhbGZ3YXlWZWN0b3Iuc2V0WihoYWxmd2F5VmVjdG9yLnooKSArIHBhaW50
aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBmbG9hdCBoYWxmd2F5VmVj
dG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmIChtX3Nw
ZWN1bGFyRXhwb25lbnQgPT0gMS4wZikKKyAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0g
bV9zcGVjdWxhckNvbnN0YW50ICogaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9yTGVu
Z3RoOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBt
X3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rv
ckxlbmd0aCwgbV9zcGVjdWxhckV4cG9uZW50KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7Cisg
ICAgICAgIEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3I7CisgICAgICAgIG5vcm1hbFZlY3Rvci5z
ZXRYKGZhY3RvclggKiBzdGF0aWNfY2FzdDxmbG9hdD4oaW50UGFpci5ub3JtYWxYKSAqIGRhdGEu
c3VyZmFjZVNjYWxlKTsKKyAgICAgICAgbm9ybWFsVmVjdG9yLnNldFkoZmFjdG9yWSAqIHN0YXRp
Y19jYXN0PGZsb2F0PihpbnRQYWlyLm5vcm1hbFkpICogZGF0YS5zdXJmYWNlU2NhbGUpOworICAg
ICAgICBub3JtYWxWZWN0b3Iuc2V0WigxLjBmKTsKKyAgICAgICAgZmxvYXQgbm9ybWFsVmVjdG9y
TGVuZ3RoID0gbm9ybWFsVmVjdG9yLmxlbmd0aCgpOworCisgICAgICAgIGlmIChtX2xpZ2h0aW5n
VHlwZSA9PSBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcpCisgICAgICAgICAgICBsaWdodFN0
cmVuZ3RoID0gbV9kaWZmdXNlQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9yICogcGFpbnRpbmdEYXRh
LmxpZ2h0VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGggKiBwYWludGluZ0RhdGEubGlnaHRW
ZWN0b3JMZW5ndGgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBo
YWxmd2F5VmVjdG9yID0gcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yOworICAgICAgICAgICAgaGFs
ZndheVZlY3Rvci5zZXRaKGhhbGZ3YXlWZWN0b3IueigpICsgcGFpbnRpbmdEYXRhLmxpZ2h0VmVj
dG9yTGVuZ3RoKTsKKyAgICAgICAgICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxm
d2F5VmVjdG9yLmxlbmd0aCgpOworICAgICAgICAgICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9
PSAxLjBmKQorICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3Rh
bnQgKiAobm9ybWFsVmVjdG9yICogaGFsZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3Ro
ICogaGFsZndheVZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIHBvd2YoKG5vcm1hbFZlY3Rv
ciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JM
ZW5ndGgpLCBtX3NwZWN1bGFyRXhwb25lbnQpOworICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KGRhdGEubGlnaHRTdHJlbmd0aCA+IDEuMGYpCi0gICAgICAgIGRhdGEubGlnaHRTdHJlbmd0aCA9
IDEuMGY7Ci0gICAgaWYgKGRhdGEubGlnaHRTdHJlbmd0aCA8IDAuMGYpCi0gICAgICAgIGRhdGEu
bGlnaHRTdHJlbmd0aCA9IDAuMGY7CisgICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAxLjBmKQorICAg
ICAgICBsaWdodFN0cmVuZ3RoID0gMS4wZjsKKyAgICBpZiAobGlnaHRTdHJlbmd0aCA8IDAuMGYp
CisgICAgICAgIGxpZ2h0U3RyZW5ndGggPSAwLjBmOwogCi0gICAgZGF0YS5waXhlbHMtPnNldChk
YXRhLm9mZnNldCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oZGF0YS5saWdodFN0cmVuZ3Ro
ICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLngoKSkpOwotICAgIGRhdGEucGl4ZWxzLT5zZXQo
ZGF0YS5vZmZzZXQgKyAxLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihkYXRhLmxpZ2h0U3Ry
ZW5ndGggKiBwYWludGluZ0RhdGEuY29sb3JWZWN0b3IueSgpKSk7Ci0gICAgZGF0YS5waXhlbHMt
PnNldChkYXRhLm9mZnNldCArIDIsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGRhdGEubGln
aHRTdHJlbmd0aCAqIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci56KCkpKTsKKyAgICB1bnNpZ25l
ZCBjaGFyKiBwaXhlbCA9IGRhdGEucGl4ZWxzICsgb2Zmc2V0OworICAgIHBpeGVsWzBdID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4obGlnaHRTdHJlbmd0aCAqIHBhaW50aW5nRGF0YS5jb2xv
clZlY3Rvci54KCkpOworICAgIHBpeGVsWzFdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4o
bGlnaHRTdHJlbmd0aCAqIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci55KCkpOworICAgIHBpeGVs
WzJdID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4obGlnaHRTdHJlbmd0aCAqIHBhaW50aW5n
RGF0YS5jb2xvclZlY3Rvci56KCkpOwogfQogCi1ib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGlu
ZyhDYW52YXNQaXhlbEFycmF5KiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK2Jvb2wg
RkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKHVuc2lnbmVkIGNoYXIqIHBpeGVscywgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KQogewogICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFpbnRpbmdE
YXRhOwogICAgIExpZ2h0aW5nRGF0YSBkYXRhOworICAgIEludFBhaXIgaW50UGFpcjsKKyAgICBp
bnQgb2Zmc2V0OwogCiAgICAgaWYgKCFtX2xpZ2h0U291cmNlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0xNTQsODYgKzI1Myw3NyBAQCBib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhD
YW52YXNQaXhlbEFycmF5KiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBtX2xp
Z2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKHBhaW50aW5nRGF0YSk7CiAKICAgICAvLyBUb3Av
TGVmdCBjb3JuZXIKLSAgICBkYXRhLm9mZnNldCA9IDA7Ci0gICAgc2V0UGl4ZWwoZGF0YSwgcGFp
bnRpbmdEYXRhLCAwLCAwLAotICAgICAgICAtMi4wZiAvIDMuMGYsIC0yICogZGF0YS5jZW50ZXJQ
aXhlbFZhbHVlKCkgKyAyICogZGF0YS5yaWdodFBpeGVsVmFsdWUoKSAtIGRhdGEuZG93blBpeGVs
VmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpLAotICAgICAgICAtMi4wZiAvIDMu
MGYsIC0yICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgLSBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgp
ICsgMiAqIGRhdGEuZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgp
KTsKKyAgICBvZmZzZXQgPSAwOworICAgIGRhdGEudG9wTGVmdChvZmZzZXQsIGludFBhaXIpOwor
ICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCAwLCAtMi4wZiAvIDMu
MGYsIC0yLjBmIC8gMy4wZiwgaW50UGFpcik7CiAKICAgICAvLyBUb3AvUmlnaHQgcGl4ZWwKLSAg
ICBkYXRhLm9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxT
aXplOwotICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNl
ZEJ5T25lLCAwLAotICAgICAgICAtMi4wZiAvIDMuMGYsIC0yICogZGF0YS5sZWZ0UGl4ZWxWYWx1
ZSgpICsgMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpIC0gZGF0YS5kb3duTGVmdFBpeGVsVmFs
dWUoKSArIGRhdGEuZG93blBpeGVsVmFsdWUoKSwKLSAgICAgICAgLTIuMGYgLyAzLjBmLCAtZGF0
YS5sZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpICsgZGF0YS5k
b3duTGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmRvd25QaXhlbFZhbHVlKCkpOworICAgIG9m
ZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOworICAg
IGRhdGEudG9wUmlnaHQob2Zmc2V0LCBpbnRQYWlyKTsKKyAgICBzZXRQaXhlbChvZmZzZXQsIGRh
dGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCAwLCAtMi4wZiAvIDMu
MGYsIC0yLjBmIC8gMy4wZiwgaW50UGFpcik7CiAKICAgICAvLyBCb3R0b20vTGVmdCBwaXhlbAot
ICAgIGRhdGEub2Zmc2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdEYXRhLCAw
LCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLAotICAgICAgICAtMi4wZiAvIDMuMGYsIC1kYXRh
LnVwUGl4ZWxWYWx1ZSgpICsgZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEuY2Vu
dGVyUGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEucmlnaHRQaXhlbFZhbHVlKCksCi0gICAgICAgIC0y
LjBmIC8gMy4wZiwgLTIgKiBkYXRhLnVwUGl4ZWxWYWx1ZSgpIC0gZGF0YS51cFJpZ2h0UGl4ZWxW
YWx1ZSgpICsgMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpICsgZGF0YS5yaWdodFBpeGVsVmFs
dWUoKSk7CisgICAgb2Zmc2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgZGF0YS5ib3R0b21MZWZ0KG9mZnNldCwgaW50
UGFpcik7CisgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIGRhdGEu
aGVpZ2h0RGVjcmVhc2VkQnlPbmUsIC0yLjBmIC8gMy4wZiwgLTIuMGYgLyAzLjBmLCBpbnRQYWly
KTsKIAogICAgIC8vIEJvdHRvbS9SaWdodCBwaXhlbAotICAgIGRhdGEub2Zmc2V0ID0gaGVpZ2h0
ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgc2V0
UGl4ZWwoZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIGRhdGEu
aGVpZ2h0RGVjcmVhc2VkQnlPbmUsCi0gICAgICAgIC0yLjBmIC8gMy4wZiwgLWRhdGEudXBMZWZ0
UGl4ZWxWYWx1ZSgpICsgZGF0YS51cFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmxlZnRQaXhlbFZh
bHVlKCkgKyAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCksCi0gICAgICAgIC0yLjBmIC8gMy4w
ZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEudXBQaXhlbFZhbHVlKCkgKyBk
YXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkpOworICAg
IG9mZnNldCA9IGhlaWdodCAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4
ZWxTaXplOworICAgIGRhdGEuYm90dG9tUmlnaHQob2Zmc2V0LCBpbnRQYWlyKTsKKyAgICBzZXRQ
aXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25l
LCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCAtMi4wZiAvIDMuMGYsIC0yLjBmIC8gMy4wZiwg
aW50UGFpcik7CiAKICAgICBpZiAod2lkdGggPj0gMykgewotICAgICAgICAvLyBUb3AgbGluZQot
ICAgICAgICBkYXRhLm9mZnNldCA9IGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAx
OyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIGRhdGEub2Zmc2V0ICs9IGNQaXhl
bFNpemUpIHsKLSAgICAgICAgICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgMCwK
LSAgICAgICAgICAgICAgICAtMS4wZiAvIDMuMGYsIC0yICogZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgp
ICsgMiAqIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkgLSBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgp
ICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCksCi0gICAgICAgICAgICAgICAgLTEuMGYgLyAy
LjBmLCAtZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgp
IC0gZGF0YS5yaWdodFBpeGVsVmFsdWUoKSArIGRhdGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyAy
ICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCkpOwor
ICAgICAgICAvLyBUb3Agcm93CisgICAgICAgIG9mZnNldCA9IGNQaXhlbFNpemU7CisgICAgICAg
IGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNl
dCArPSBjUGl4ZWxTaXplKSB7CisgICAgICAgICAgICBkYXRhLnRvcFJvdyhvZmZzZXQsIGludFBh
aXIpOworICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgs
IDAsIC0xLjBmIC8gMy4wZiwgLTEuMGYgLyAyLjBmLCBpbnRQYWlyKTsKICAgICAgICAgfQotICAg
ICAgICAvLyBCb3R0b20gbGluZQotICAgICAgICBkYXRhLm9mZnNldCA9IGRhdGEuaGVpZ2h0RGVj
cmVhc2VkQnlPbmUgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1BpeGVsU2l6
ZTsKLSAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7
ICsreCwgZGF0YS5vZmZzZXQgKz0gY1BpeGVsU2l6ZSkgewotICAgICAgICAgICAgc2V0UGl4ZWwo
ZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLAotICAgICAg
ICAgICAgICAgIC0xLjBmIC8gMy4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS51
cFJpZ2h0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRh
LnJpZ2h0UGl4ZWxWYWx1ZSgpLAotICAgICAgICAgICAgICAgIC0xLjBmIC8gMi4wZiwgLWRhdGEu
dXBMZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEudXBQaXhlbFZhbHVlKCkgLSBkYXRhLnVwUmln
aHRQaXhlbFZhbHVlKCkgKyBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5jZW50ZXJQ
aXhlbFZhbHVlKCkgKyBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpKTsKKyAgICAgICAgLy8gQm90dG9t
IHJvdworICAgICAgICBvZmZzZXQgPSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICogZGF0YS53
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7CisgICAgICAgIGZvciAoaW50
IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4
ZWxTaXplKSB7CisgICAgICAgICAgICBkYXRhLmJvdHRvbVJvdyhvZmZzZXQsIGludFBhaXIpOwor
ICAgICAgICAgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIGRhdGEu
aGVpZ2h0RGVjcmVhc2VkQnlPbmUsIC0xLjBmIC8gMy4wZiwgLTEuMGYgLyAyLjBmLCBpbnRQYWly
KTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChoZWlnaHQgPj0gMykgewotICAgICAgICAv
LyBMZWZ0IGxpbmUKLSAgICAgICAgZGF0YS5vZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVh
c2VkQnlPbmU7ICsreSwgZGF0YS5vZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZSkgewotICAgICAgICAgICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCB5LAot
ICAgICAgICAgICAgICAgIC0xLjBmIC8gMi4wZiwgLWRhdGEudXBQaXhlbFZhbHVlKCkgKyBkYXRh
LnVwUmlnaHRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgKyAyICog
ZGF0YS5yaWdodFBpeGVsVmFsdWUoKSAtIGRhdGEuZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93
blJpZ2h0UGl4ZWxWYWx1ZSgpLAotICAgICAgICAgICAgICAgIC0xLjBmIC8gMy4wZiwgLTIgKiBk
YXRhLnVwUGl4ZWxWYWx1ZSgpIC0gZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEu
ZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpKTsKKyAgICAgICAg
Ly8gTGVmdCBjb2x1bW4KKyAgICAgICAgb2Zmc2V0ID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBp
eGVsU2l6ZTsKKyAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNl
ZEJ5T25lOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKSB7
CisgICAgICAgICAgICBkYXRhLmxlZnRDb2x1bW4ob2Zmc2V0LCBpbnRQYWlyKTsKKyAgICAgICAg
ICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCB5LCAtMS4wZiAvIDIu
MGYsIC0xLjBmIC8gMy4wZiwgaW50UGFpcik7CiAgICAgICAgIH0KLSAgICAgICAgLy8gUmlnaHQg
bGluZQotICAgICAgICBkYXRhLm9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNp
emUgKyBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICAg
ICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIGRh
dGEub2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpIHsKLSAgICAgICAg
ICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25l
LCB5LAotICAgICAgICAgICAgICAgIC0xLjBmIC8gMi4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1
ZSgpICsgZGF0YS51cFBpeGVsVmFsdWUoKSAtMiAqIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIg
KiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSAtIGRhdGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyBk
YXRhLmRvd25QaXhlbFZhbHVlKCksCi0gICAgICAgICAgICAgICAgLTEuMGYgLyAzLjBmLCAtZGF0
YS51cExlZnRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS51cFBpeGVsVmFsdWUoKSArIGRhdGEuZG93
bkxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpKTsKKyAgICAgICAg
Ly8gUmlnaHQgY29sdW1uCisgICAgICAgIG9mZnNldCA9IChkYXRhLndpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplIDw8IDEpIC0gY1BpeGVsU2l6ZTsKKyAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkg
PCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplKSB7CisgICAgICAgICAgICBkYXRhLnJpZ2h0Q29sdW1uKG9mZnNl
dCwgaW50UGFpcik7CisgICAgICAgICAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5n
RGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCB5LCAtMS4wZiAvIDIuMGYsIC0xLjBmIC8g
My4wZiwgaW50UGFpcik7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAod2lkdGggPj0gMyAm
JiBoZWlnaHQgPj0gMykgewogICAgICAgICAvLyBJbnRlcmlvciBwaXhlbHMKICAgICAgICAgZm9y
IChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3kpIHsKLSAgICAg
ICAgICAgIGRhdGEub2Zmc2V0ID0geSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUg
KyBjUGl4ZWxTaXplOwotICAgICAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRo
RGVjcmVhc2VkQnlPbmU7ICsreCwgZGF0YS5vZmZzZXQgKz0gY1BpeGVsU2l6ZSkgewotICAgICAg
ICAgICAgICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwKLSAgICAgICAgICAg
ICAgICAgICAgLTEuMGYgLyA0LjBmLCAtZGF0YS51cExlZnRQaXhlbFZhbHVlKCkgKyBkYXRhLnVw
UmlnaHRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEu
cmlnaHRQaXhlbFZhbHVlKCkgLSBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3du
UmlnaHRQaXhlbFZhbHVlKCksCi0gICAgICAgICAgICAgICAgICAgIC0xLjBmIC8gNC4wZiwgLWRh
dGEudXBMZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEudXBQaXhlbFZhbHVlKCkgLSBkYXRhLnVw
UmlnaHRQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEu
ZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpKTsKKyAgICAgICAg
ICAgIG9mZnNldCA9IHkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1BpeGVs
U2l6ZTsKKyAgICAgICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNl
ZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKSB7CisgICAgICAgICAgICAgICAgZGF0
YS5pbnRlcmlvcihvZmZzZXQsIGludFBhaXIpOworICAgICAgICAgICAgICAgIHNldFBpeGVsKG9m
ZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCB5LCAtMS4wZiAvIDQuMGYsIC0xLjBmIC8gNC4w
ZiwgaW50UGFpcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpbnQg
dG90YWxTaXplID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAqIGhlaWdodDsKKyAg
ICB1bnNpZ25lZCBjaGFyKiBsYXN0UGl4ZWwgPSBkYXRhLnBpeGVscyArIGRhdGEud2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUgKiBoZWlnaHQ7CiAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IERp
ZmZ1c2VMaWdodGluZykgewotICAgICAgICBmb3IgKGludCBpID0gMzsgaSA8IHRvdGFsU2l6ZTsg
aSArPSA0KQotICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpLCBjT3BhcXVlQWxwaGEpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGNoYXIqIHBpeGVsID0gZGF0YS5waXhlbHMgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0OyBwaXhlbCA8IGxhc3RQaXhlbDsgcGl4ZWwgKz0gY1BpeGVsU2l6ZSkKKyAg
ICAgICAgICAgIHBpeGVsWzBdID0gY09wYXF1ZUFscGhhOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxTaXplOyBpICs9IDQpIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIgYTEgPSBkYXRhLnBpeGVscy0+Z2V0KGkpOwotICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciBhMiA9IGRhdGEucGl4ZWxzLT5nZXQoaSArIDEpOwotICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciBhMyA9IGRhdGEucGl4ZWxzLT5nZXQoaSArIDIpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGNoYXIqIHBpeGVsID0gZGF0YS5waXhlbHM7IHBpeGVsIDwgbGFzdFBpeGVsOyBwaXhlbCAr
PSBjUGl4ZWxTaXplKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGExID0gcGl4ZWxbMF07
CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGEyID0gcGl4ZWxbMV07CisgICAgICAgICAgICB1
bnNpZ25lZCBjaGFyIGEzID0gcGl4ZWxbMl07CiAgICAgICAgICAgICAvLyBhbHBoYSBzZXQgdG8g
c2V0IHRvIG1heChhMSwgYTIsIGEzKQotICAgICAgICAgICAgZGF0YS5waXhlbHMtPnNldChpICsg
MywgYTEgPj0gYTIgPyAoYTEgPj0gYTMgPyBhMSA6IGEzKSA6IChhMiA+PSBhMyA/IGEyIDogYTMp
KTsKKyAgICAgICAgICAgIHBpeGVsWzNdID0gYTEgPj0gYTIgPyAoYTEgPj0gYTMgPyBhMSA6IGEz
KSA6IChhMiA+PSBhMyA/IGEyIDogYTMpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0yNTQsNyAr
MzQ0LDcgQEAgdm9pZCBGRUxpZ2h0aW5nOjphcHBseShGaWx0ZXIqIGZpbHRlcikKIAogICAgIElu
dFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRh
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFn
ZURhdGEoaW4tPnJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShlZmZlY3RE
cmF3aW5nUmVjdCkpOwotICAgIENhbnZhc1BpeGVsQXJyYXkqIHNyY1BpeGVsQXJyYXkoc3JjSW1h
Z2VEYXRhLT5kYXRhKCkpOworICAgIHVuc2lnbmVkIGNoYXIqIHNyY1BpeGVsQXJyYXkgPSBzcmNJ
bWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgpLT5kYXRhKCk7CiAKICAgICAvLyBGSVhNRTogc3VwcG9y
dCBrZXJuZWxVbml0TGVuZ3RocyBvdGhlciB0aGFuICgxLDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0
aGF0IHRoZSBXMwogICAgIC8vIHN0YW5kYXJkIGhhcyBubyB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFu
ZCBvdGhlciBicm93c2VycyAobGlrZSBGaXJlZm94KSBoYXMgc3RyYW5nZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKaW5kZXggYmQ1NmNlZS4uNDRm
MDAzMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGln
aHRpbmcuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGlu
Zy5oCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmls
dGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiTGlnaHRTb3VyY2UuaCIKLSNpbmNsdWRlIDx3dGYvQWx3
YXlzSW5saW5lLmg+CiAKIC8vIENvbW1vbiBiYXNlIGNsYXNzIGZvciBGRURpZmZ1c2VMaWdodGlu
ZyBhbmQgRkVTcGVjdWxhckxpZ2h0aW5nCiAKQEAgLTUyLDMyICs1MSwzNSBAQCBwcm90ZWN0ZWQ6
CiAgICAgICAgIFNwZWN1bGFyTGlnaHRpbmcKICAgICB9OwogCisgICAgc3RydWN0IEludFBhaXIg
eworICAgICAgICBpbnQgbm9ybWFsWDsKKyAgICAgICAgaW50IG5vcm1hbFk7CisgICAgfTsKKwog
ICAgIHN0cnVjdCBMaWdodGluZ0RhdGEgewotICAgICAgICBGbG9hdFBvaW50M0Qgbm9ybWFsVmVj
dG9yOwotICAgICAgICBDYW52YXNQaXhlbEFycmF5KiBwaXhlbHM7Ci0gICAgICAgIGZsb2F0IGxp
Z2h0U3RyZW5ndGg7CisgICAgICAgIC8vIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIG9ubHkgcmVh
ZC1vbmx5IChTTVAgc2FmZSkgZGF0YQorICAgICAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHM7CiAg
ICAgICAgIGZsb2F0IHN1cmZhY2VTY2FsZTsKLSAgICAgICAgaW50IG9mZnNldDsKICAgICAgICAg
aW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwogICAgICAgICBpbnQgd2lkdGhEZWNyZWFz
ZWRCeU9uZTsKICAgICAgICAgaW50IGhlaWdodERlY3JlYXNlZEJ5T25lOwogCi0gICAgICAgIEFM
V0FZU19JTkxJTkUgaW50IHVwTGVmdFBpeGVsVmFsdWUoKTsKLSAgICAgICAgQUxXQVlTX0lOTElO
RSBpbnQgdXBQaXhlbFZhbHVlKCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50IHVwUmlnaHRQ
aXhlbFZhbHVlKCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50IGxlZnRQaXhlbFZhbHVlKCk7
Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50IGNlbnRlclBpeGVsVmFsdWUoKTsKLSAgICAgICAg
QUxXQVlTX0lOTElORSBpbnQgcmlnaHRQaXhlbFZhbHVlKCk7Ci0gICAgICAgIEFMV0FZU19JTkxJ
TkUgaW50IGRvd25MZWZ0UGl4ZWxWYWx1ZSgpOwotICAgICAgICBBTFdBWVNfSU5MSU5FIGludCBk
b3duUGl4ZWxWYWx1ZSgpOwotICAgICAgICBBTFdBWVNfSU5MSU5FIGludCBkb3duUmlnaHRQaXhl
bFZhbHVlKCk7CisgICAgICAgIGlubGluZSB2b2lkIHRvcExlZnQoaW50IG9mZnNldCwgSW50UGFp
ciYgaW50UGFpcik7CisgICAgICAgIGlubGluZSB2b2lkIHRvcFJvdyhpbnQgb2Zmc2V0LCBJbnRQ
YWlyJiBpbnRQYWlyKTsKKyAgICAgICAgaW5saW5lIHZvaWQgdG9wUmlnaHQoaW50IG9mZnNldCwg
SW50UGFpciYgaW50UGFpcik7CisgICAgICAgIGlubGluZSB2b2lkIGxlZnRDb2x1bW4oaW50IG9m
ZnNldCwgSW50UGFpciYgaW50UGFpcik7CisgICAgICAgIGlubGluZSB2b2lkIGludGVyaW9yKGlu
dCBvZmZzZXQsIEludFBhaXImIGludFBhaXIpOworICAgICAgICBpbmxpbmUgdm9pZCByaWdodENv
bHVtbihpbnQgb2Zmc2V0LCBJbnRQYWlyJiBpbnRQYWlyKTsKKyAgICAgICAgaW5saW5lIHZvaWQg
Ym90dG9tTGVmdChpbnQgb2Zmc2V0LCBJbnRQYWlyJiBpbnRQYWlyKTsKKyAgICAgICAgaW5saW5l
IHZvaWQgYm90dG9tUm93KGludCBvZmZzZXQsIEludFBhaXImIGludFBhaXIpOworICAgICAgICBp
bmxpbmUgdm9pZCBib3R0b21SaWdodChpbnQgb2Zmc2V0LCBJbnRQYWlyJiBpbnRQYWlyKTsKICAg
ICB9OwogCiAgICAgRkVMaWdodGluZyhMaWdodGluZ1R5cGUsIGNvbnN0IENvbG9yJiwgZmxvYXQs
IGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgUGFzc1JlZlB0cjxMaWdodFNvdXJj
ZT4pOwogCi0gICAgYm9vbCBkcmF3TGlnaHRpbmcoQ2FudmFzUGl4ZWxBcnJheSosIGludCwgaW50
KTsKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0UGl4ZWwoTGlnaHRpbmdEYXRhJiwgTGlnaHRT
b3VyY2U6OlBhaW50aW5nRGF0YSYsCi0gICAgICAgIGludCBsaWdodFgsIGludCBsaWdodFksIGZs
b2F0IGZhY3RvclgsIGludCBub3JtYWxYLCBmbG9hdCBmYWN0b3JZLCBpbnQgbm9ybWFsWSk7Cisg
ICAgYm9vbCBkcmF3TGlnaHRpbmcodW5zaWduZWQgY2hhciosIGludCwgaW50KTsKKyAgICBpbmxp
bmUgdm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBMaWdodGluZ0RhdGEmLCBMaWdodFNvdXJjZTo6
UGFpbnRpbmdEYXRhJiwKKyAgICAgICAgaW50IGxpZ2h0WCwgaW50IGxpZ2h0WSwgZmxvYXQgZmFj
dG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50UGFpciYgaW50UGFpcik7CiAKICAgICBMaWdodGluZ1R5
cGUgbV9saWdodGluZ1R5cGU7CiAgICAgUmVmUHRyPExpZ2h0U291cmNlPiBtX2xpZ2h0U291cmNl
OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291
cmNlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5j
cHAKaW5kZXggYTgwYjE0Yi4uZGUwNjkxZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgUG9p
bnRMaWdodFNvdXJjZTo6dXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdE
YXRhLCBpbnQgeCwgaW50CiAgICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFgobV9wb3Np
dGlvbi54KCkgLSB4KTsKICAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WShtX3Bvc2l0
aW9uLnkoKSAtIHkpOwogICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRaKG1fcG9zaXRp
b24ueigpIC0geik7Ci0gICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLm5vcm1hbGl6ZSgpOwor
ICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCA9IHBhaW50aW5nRGF0YS5saWdodFZl
Y3Rvci5sZW5ndGgoKTsKIH0KIAogLy8gc3BvdC1saWdodCBlZGdlIGRhcmtlbmluZyBkZXBlbmRz
IG9uIGFuIGFic29sdXRlIHRyZXNob2xkCkBAIC04NCw5ICs4NCw5IEBAIHZvaWQgU3BvdExpZ2h0
U291cmNlOjp1cGRhdGVQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGlu
dCB4LCBpbnQKICAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WChtX3Bvc2l0aW9uLngo
KSAtIHgpOwogICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRZKG1fcG9zaXRpb24ueSgp
IC0geSk7CiAgICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFoobV9wb3NpdGlvbi56KCkg
LSB6KTsKLSAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iubm9ybWFsaXplKCk7CisgICAgcGFp
bnRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoID0gcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLmxl
bmd0aCgpOwogCi0gICAgZmxvYXQgY29zaW5lT2ZBbmdsZSA9IHBhaW50aW5nRGF0YS5saWdodFZl
Y3RvciAqIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25WZWN0b3I7CisgICAgZmxvYXQgY29zaW5lT2ZB
bmdsZSA9IChwYWludGluZ0RhdGEubGlnaHRWZWN0b3IgKiBwYWludGluZ0RhdGEuZGlyZWN0aW9u
VmVjdG9yKSAvIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aDsKICAgICBpZiAoY29zaW5l
T2ZBbmdsZSA+IHBhaW50aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQpIHsKICAgICAgICAgLy8gTm8g
bGlnaHQgaXMgcHJvZHVjZWQsIHNjYW5saW5lcyBhcmUgbm90IHVwZGF0ZWQKICAgICAgICAgcGFp
bnRpbmdEYXRhLmNvbG9yVmVjdG9yLnNldFgoMC4wZik7CkBAIC0xMjcsNiArMTI3LDcgQEAgdm9p
ZCBEaXN0YW50TGlnaHRTb3VyY2U6OmluaXRQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiBwYWlu
dGluZ0RhdGEpCiAgICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFgoY29zZihhemltdXRo
KSAqIGNvc2YoZWxldmF0aW9uKSk7CiAgICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFko
c2luZihhemltdXRoKSAqIGNvc2YoZWxldmF0aW9uKSk7CiAgICAgcGFpbnRpbmdEYXRhLmxpZ2h0
VmVjdG9yLnNldFooc2luZihlbGV2YXRpb24pKTsKKyAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0
b3JMZW5ndGggPSAxOwogfQogCiB2b2lkIERpc3RhbnRMaWdodFNvdXJjZTo6dXBkYXRlUGFpbnRp
bmdEYXRhKFBhaW50aW5nRGF0YSYsIGludCwgaW50LCBmbG9hdCkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKaW5kZXggMmU0YzU3OS4uMDEzZTkx
MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291
cmNlLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNl
LmgKQEAgLTUxLDYgKzUxLDcgQEAgcHVibGljOgogICAgICAgICAvLyBTVkdGRUxpZ2h0aW5nIGFs
c28gdXNlIHRoZW0KICAgICAgICAgRmxvYXRQb2ludDNEIGxpZ2h0VmVjdG9yOwogICAgICAgICBG
bG9hdFBvaW50M0QgY29sb3JWZWN0b3I7CisgICAgICAgIGZsb2F0IGxpZ2h0VmVjdG9yTGVuZ3Ro
OwogICAgICAgICAvLyBQcml2YXRlIG1lbWJlcnMKICAgICAgICAgRmxvYXRQb2ludDNEIGRpcmVj
dGlvblZlY3RvcjsKICAgICAgICAgRmxvYXRQb2ludDNEIHByaXZhdGVDb2xvclZlY3RvcjsKLS0g
CjEuNi4wLjQKCg==
</data>
<flag name="review"
          id="62149"
          type_id="1"
          status="-"
          setter="krit"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>71992</attachid>
            <date>2010-10-27 00:07:50 -0700</date>
            <delta_ts>2010-10-27 00:07:50 -0700</delta_ts>
            <desc>Example</desc>
            <filename>light.svg</filename>
            <type>image/svg+xml</type>
            <size>1049</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pg0KPCFET0NUWVBFIHN2ZyBQVUJM
SUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3Mv
U1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4NCg0KPHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAl
IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+DQo8ZGVm
cz4NCjxmaWx0ZXIgaWQ9ImZpbHQiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeD0iMCIg
eT0iMCIgd2lkdGg9IjMwMCIgaGVpZ2h0PSIyMDAiPg0KICAgIDxmZURpZmZ1c2VMaWdodGluZyBp
ZD0iZGlmZiIgaW49IlNvdXJjZUdyYXBoaWMiIGRpZmZ1c2VDb25zdGFudD0iMSIgbGlnaHRpbmct
Y29sb3I9InJlZCI+DQogICAgICAgICAgIDxmZVBvaW50TGlnaHQgaWQ9ImxpZ2h0IiB4PSItMTAw
IiB5PSIxMDAiIHo9IjUwIiAvPg0KICAgIDwvZmVEaWZmdXNlTGlnaHRpbmc+DQo8L2ZpbHRlcj4N
CjwvZGVmcz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCjxyZWN0IHg9
IjAiIHk9IjAiIHdpZHRoPSIzMDAiIGhlaWdodD0iMjAwIiBmaWx0ZXI9InVybCgjZmlsdCkiLz4N
Cjx0ZXh0IGlkPSJ0eHQiIHk9IjMwMCI+cGxhY2Vob2xkZXI8L3RleHQ+DQoNCjxzY3JpcHQ+IA0K
PCFbQ0RBVEFbDQp2YXIgbHggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGlnaHQnKS54Ow0K
dmFyIHR4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0eHQnKTsNCg0KdmFyIHNkID0gbmV3
IERhdGUoKTsNCnZhciBmYyA9IDA7DQoNCmZ1bmN0aW9uIGFuaW0oKSB7DQogICAgaWYgKGx4LmJh
c2VWYWwgPj0gNDAwKQ0KICAgICAgbHguYmFzZVZhbCA9IC0xMDA7DQogICAgZWxzZQ0KICAgICAg
bHguYmFzZVZhbCArPSAxMDsNCiAgICBmYysrOw0KICAgIHR4dC50ZXh0Q29udGVudCA9IGZjIC8g
KG5ldyBEYXRlKCkgLSBzZCkgKiAxMDAwOw0KfQ0KDQpzZXRJbnRlcnZhbChhbmltLDEpOw0KLy9d
XT4NCjwvc2NyaXB0Pg0KDQo8L3N2Zz4=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72014</attachid>
            <date>2010-10-27 05:10:43 -0700</date>
            <delta_ts>2010-11-02 07:51:59 -0700</delta_ts>
            <desc>Draft patch 2</desc>
            <filename>0001-light-filter.patch</filename>
            <type>text/plain</type>
            <size>30076</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSA3NzFkZDhjZWFmMGFiMmUzMTg1MGU3YmRlMmUyZjAwNTY4N2ExN2EzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBXZWQsIDI3IE9jdCAyMDEwIDEzOjEwOjAxICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gbGlnaHQtZmlsdGVyCgpTaWduZWQtb2ZmLWJ5OiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdA
aW5mLnUtc3plZ2VkLmh1PgotLS0KIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dDNELmNwcCAgICAgICAgfCAgICA1IC0KIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQ
b2ludDNELmggICAgICAgICAgfCAgICAyICstCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVMaWdodGluZy5jcHAgIHwgIDI5OSArKysrKysrKysrKysrKy0tLS0tLS0KIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmggICAgfCAgIDM1ICsrLS0K
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5jcHAgfCAgICA3
ICstCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuaCAgIHwg
ICAgMSArCiA2IGZpbGVzIGNoYW5nZWQsIDIyMyBpbnNlcnRpb25zKCspLCAxMjYgZGVsZXRpb25z
KC0pCgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0Qu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwCmluZGV4IGJi
MDVlN2YuLmVkMTgxNmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxv
YXRQb2ludDNELmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQz
RC5jcHAKQEAgLTM4LDEwICszOCw1IEBAIHZvaWQgRmxvYXRQb2ludDNEOjpub3JtYWxpemUoKQog
ICAgIH0KIH0KIAotZmxvYXQgRmxvYXRQb2ludDNEOjpsZW5ndGgoKSBjb25zdAotewotICAgIHJl
dHVybiBzcXJ0ZihsZW5ndGhTcXVhcmVkKCkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmgg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5oCmluZGV4IDllZTU0OGQu
LmI2Y2JhYTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2lu
dDNELmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuaApAQCAt
MTEzLDggKzExMyw4IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
LSAgICBmbG9hdCBsZW5ndGgoKSBjb25zdDsKICAgICBmbG9hdCBsZW5ndGhTcXVhcmVkKCkgY29u
c3QgeyByZXR1cm4gdGhpcy0+ZG90KCp0aGlzKTsgfQorICAgIGZsb2F0IGxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIHNxcnRmKGxlbmd0aFNxdWFyZWQoKSk7IH0KIAogcHJpdmF0ZToKICAgICBmbG9h
dCBtX3g7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVM
aWdodGluZy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGlu
Zy5jcHAKaW5kZXggZTFkZjU4MC4uYzA3OWMzYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcApAQCAtNTQsODUgKzU0LDE5MiBAQCBGRUxp
Z2h0aW5nOjpGRUxpZ2h0aW5nKExpZ2h0aW5nVHlwZSBsaWdodGluZ1R5cGUsIGNvbnN0IENvbG9y
JiBsaWdodGluZ0NvbG9yLCBmbAogY29uc3Qgc3RhdGljIGludCBjUGl4ZWxTaXplID0gNDsKIGNv
bnN0IHN0YXRpYyBpbnQgY0FscGhhQ2hhbm5lbE9mZnNldCA9IDM7CiBjb25zdCBzdGF0aWMgdW5z
aWduZWQgY2hhciBjT3BhcXVlQWxwaGEgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigweGZm
KTsKK2NvbnN0IHN0YXRpYyBmbG9hdCBjRmFjdG9yMWRpdjIgPSAtMSAvIDIuZjsKK2NvbnN0IHN0
YXRpYyBmbG9hdCBjRmFjdG9yMWRpdjMgPSAtMSAvIDMuZjsKK2NvbnN0IHN0YXRpYyBmbG9hdCBj
RmFjdG9yMWRpdjQgPSAtMSAvIDQuZjsKK2NvbnN0IHN0YXRpYyBmbG9hdCBjRmFjdG9yMmRpdjMg
PSAtMiAvIDMuZjsKIAotQUxXQVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRh
Ojp1cExlZnRQaXhlbFZhbHVlKCkKKy8vIDw8IDEgaXMgc2lnbmVkIG11bHRpcGx5IGJ5IDIKK2lu
bGluZSB2b2lkIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wTGVmdChpbnQgb2Zmc2V0LCBJ
bnRQb2ludCYgbm9ybWFsVmVjdG9yKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+Z2V0KG9mZnNldCAtIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbCA9IHBp
eGVscyArIG9mZnNldDsKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbFtj
QWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbFtjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldF0pOworICAgIHBpeGVsICs9IHdp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVsW2NBbHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBpbnQgYm90dG9tUmlnaHQgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVsW2NQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSk7
CisgICAgbm9ybWFsVmVjdG9yLnNldFgoLShjZW50ZXIgPDwgMSkgKyAocmlnaHQgPDwgMSkgLSBi
b3R0b20gKyBib3R0b21SaWdodCk7CisgICAgbm9ybWFsVmVjdG9yLnNldFkoLShjZW50ZXIgPDwg
MSkgLSByaWdodCArIChib3R0b20gPDwgMSkgKyBib3R0b21SaWdodCk7CiB9CiAKLUFMV0FZU19J
TkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dXBQaXhlbFZhbHVlKCkKK2lubGlu
ZSB2b2lkIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUm93KGludCBvZmZzZXQsIEludFBv
aW50JiBub3JtYWxWZWN0b3IpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5nZXQob2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0KSk7CisgICAgdW5zaWduZWQgY2hhciogcGl4ZWwgPSBwaXhlbHMgKyBvZmZzZXQ7Cisg
ICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsWy1jUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldF0pOworICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
W2NBbHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBpbnQgcmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVsW2NQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAgcGl4ZWwgKz0g
d2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IGJvdHRvbUxlZnQgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVsWy1jUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldF0pOworICAg
IGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsW2NBbHBoYUNoYW5uZWxPZmZzZXRd
KTsKKyAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsW2NQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAgbm9ybWFsVmVjdG9yLnNldFgoLShsZWZ0
IDw8IDEpICsgKHJpZ2h0IDw8IDEpIC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0KTsKKyAgICBu
b3JtYWxWZWN0b3Iuc2V0WSgtbGVmdCAtIChjZW50ZXIgPDwgMSkgLSByaWdodCArIGJvdHRvbUxl
ZnQgKyAoYm90dG9tIDw8IDEpICsgYm90dG9tUmlnaHQpOwogfQogCi1BTFdBWVNfSU5MSU5FIGlu
dCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnVwUmlnaHRQaXhlbFZhbHVlKCkKK2lubGluZSB2
b2lkIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dG9wUmlnaHQoaW50IG9mZnNldCwgSW50UG9p
bnQmIG5vcm1hbFZlY3RvcikKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
PmdldChvZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgdW5zaWduZWQgY2hhciogcGl4ZWwgPSBwaXhlbHMg
KyBvZmZzZXQ7CisgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsWy1jUGl4ZWxT
aXplICsgY0FscGhhQ2hhbm5lbE9mZnNldF0pOworICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2Fz
dDxpbnQ+KHBpeGVsW2NBbHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBwaXhlbCArPSB3aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxbLWNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAgaW50IGJv
dHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxbY0FscGhhQ2hhbm5lbE9mZnNldF0pOworICAg
IG5vcm1hbFZlY3Rvci5zZXRYKC0obGVmdCA8PCAxKSArIChjZW50ZXIgPDwgMSkgLSBib3R0b21M
ZWZ0ICsgYm90dG9tKTsKKyAgICBub3JtYWxWZWN0b3Iuc2V0WSgtbGVmdCAtIChjZW50ZXIgPDwg
MSkgKyBib3R0b21MZWZ0ICsgKGJvdHRvbSA8PCAxKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50
IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6bGVmdFBpeGVsVmFsdWUoKQoraW5saW5lIHZvaWQg
RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uKGludCBvZmZzZXQsIEludFBvaW50
JiBub3JtYWxWZWN0b3IpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5n
ZXQob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICB1bnNp
Z25lZCBjaGFyKiBwaXhlbCA9IHBpeGVscyArIG9mZnNldDsKKyAgICBpbnQgY2VudGVyID0gc3Rh
dGljX2Nhc3Q8aW50PihwaXhlbFtjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAgaW50IHJpZ2h0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbFtjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dF0pOworICAgIHBpeGVsIC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGludCB0
b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsW2NBbHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBp
bnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsW2NQaXhlbFNpemUgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0XSk7CisgICAgcGl4ZWwgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUg
PDwgMTsKKyAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbFtjQWxwaGFDaGFu
bmVsT2Zmc2V0XSk7CisgICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bFtjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldF0pOworICAgIG5vcm1hbFZlY3Rvci5z
ZXRYKC10b3AgKyB0b3BSaWdodCAtIChjZW50ZXIgPDwgMSkgKyAocmlnaHQgPDwgMSkgLSBib3R0
b20gKyBib3R0b21SaWdodCk7CisgICAgbm9ybWFsVmVjdG9yLnNldFkoLSh0b3AgPDwgMSkgLSB0
b3BSaWdodCArIChib3R0b20gPDwgMSkgKyBib3R0b21SaWdodCk7CiB9CiAKLUFMV0FZU19JTkxJ
TkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Y2VudGVyUGl4ZWxWYWx1ZSgpCitpbmxp
bmUgdm9pZCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmludGVyaW9yKGludCBvZmZzZXQsIElu
dFBvaW50JiBub3JtYWxWZWN0b3IpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5nZXQob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHVuc2lnbmVkIGNo
YXIqIHBpeGVsID0gcGl4ZWxzICsgb2Zmc2V0OworICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbFstY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBpbnQg
cmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsW2NQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0XSk7CisgICAgcGl4ZWwgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAg
aW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsWy1jUGl4ZWxTaXplICsgY0FscGhh
Q2hhbm5lbE9mZnNldF0pOworICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsW2NB
bHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVsW2NQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAgcGl4ZWwgKz0g
d2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgPDwgMTsKKyAgICBpbnQgYm90dG9tTGVmdCA9IHN0
YXRpY19jYXN0PGludD4ocGl4ZWxbLWNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSk7
CisgICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxbY0FscGhhQ2hhbm5lbE9m
ZnNldF0pOworICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxbY1Bp
eGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBub3JtYWxWZWN0b3Iuc2V0WCgt
dG9wTGVmdCArIHRvcFJpZ2h0IC0gKGxlZnQgPDwgMSkgKyAocmlnaHQgPDwgMSkgLSBib3R0b21M
ZWZ0ICsgYm90dG9tUmlnaHQpOworICAgIG5vcm1hbFZlY3Rvci5zZXRZKC10b3BMZWZ0IC0gKHRv
cCA8PCAxKSAtIHRvcFJpZ2h0ICsgYm90dG9tTGVmdCArIChib3R0b20gPDwgMSkgKyBib3R0b21S
aWdodCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
cmlnaHRQaXhlbFZhbHVlKCkKK2lubGluZSB2b2lkIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6
cmlnaHRDb2x1bW4oaW50IG9mZnNldCwgSW50UG9pbnQmIG5vcm1hbFZlY3RvcikKIHsKLSAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjUGl4ZWxTaXplICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVsID0gcGl4ZWxz
ICsgb2Zmc2V0OworICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbFstY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbFtjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAgcGl4ZWwgLT0gd2lkdGhN
dWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVsWy1jUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldF0pOworICAgIGludCB0b3Ag
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsW2NBbHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBwaXhl
bCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA8PCAxOworICAgIGludCBib3R0b21MZWZ0
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbFstY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZz
ZXRdKTsKKyAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbFtjQWxwaGFDaGFu
bmVsT2Zmc2V0XSk7CisgICAgbm9ybWFsVmVjdG9yLnNldFgoLXRvcExlZnQgKyB0b3AgLSAobGVm
dCA8PCAxKSArIChjZW50ZXIgPDwgMSkgLSBib3R0b21MZWZ0ICsgYm90dG9tKTsKKyAgICBub3Jt
YWxWZWN0b3Iuc2V0WSgtdG9wTGVmdCAtICh0b3AgPDwgMSkgKyBib3R0b21MZWZ0ICsgKGJvdHRv
bSA8PCAxKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0
YTo6ZG93bkxlZnRQaXhlbFZhbHVlKCkKK2lubGluZSB2b2lkIEZFTGlnaHRpbmc6OkxpZ2h0aW5n
RGF0YTo6Ym90dG9tTGVmdChpbnQgb2Zmc2V0LCBJbnRQb2ludCYgbm9ybWFsVmVjdG9yKQogewot
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIHdpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
KyAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbCA9IHBpeGVscyArIG9mZnNldDsKKyAgICBpbnQgY2Vu
dGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbFtjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAg
aW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbFtjUGl4ZWxTaXplICsgY0FscGhhQ2hh
bm5lbE9mZnNldF0pOworICAgIHBpeGVsIC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwor
ICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsW2NBbHBoYUNoYW5uZWxPZmZzZXRd
KTsKKyAgICBpbnQgdG9wUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVsW2NQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAgbm9ybWFsVmVjdG9yLnNldFgoLXRvcCArIHRv
cFJpZ2h0IC0gKGNlbnRlciA8PCAxKSArIChyaWdodCA8PCAxKSk7CisgICAgbm9ybWFsVmVjdG9y
LnNldFkoLSh0b3AgPDwgMSkgLSB0b3BSaWdodCArIChjZW50ZXIgPDwgMSkgKyByaWdodCk7CiB9
CiAKLUFMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6ZG93blBpeGVs
VmFsdWUoKQoraW5saW5lIHZvaWQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpib3R0b21Sb3co
aW50IG9mZnNldCwgSW50UG9pbnQmIG5vcm1hbFZlY3RvcikKIHsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbCA9IHBp
eGVscyArIG9mZnNldDsKKyAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxbLWNQ
aXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAgaW50IGNlbnRlciA9IHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxbY0FscGhhQ2hhbm5lbE9mZnNldF0pOworICAgIGludCByaWdodCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxbY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRd
KTsKKyAgICBwaXhlbCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgdG9w
TGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxbLWNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVs
T2Zmc2V0XSk7CisgICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxbY0FscGhhQ2hh
bm5lbE9mZnNldF0pOworICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxb
Y1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBub3JtYWxWZWN0b3Iuc2V0
WCgtdG9wTGVmdCArIHRvcFJpZ2h0IC0gKGxlZnQgPDwgMSkgKyAocmlnaHQgPDwgMSkpOworICAg
IG5vcm1hbFZlY3Rvci5zZXRZKC10b3BMZWZ0IC0gKHRvcCA8PCAxKSAtIHRvcFJpZ2h0ICsgbGVm
dCArIChjZW50ZXIgPDwgMSkgKyByaWdodCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50IEZFTGln
aHRpbmc6OkxpZ2h0aW5nRGF0YTo6ZG93blJpZ2h0UGl4ZWxWYWx1ZSgpCitpbmxpbmUgdm9pZCBG
RUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0KGludCBvZmZzZXQsIEludFBvaW50
JiBub3JtYWxWZWN0b3IpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5n
ZXQob2Zmc2V0ICsgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplICsgY0Fs
cGhhQ2hhbm5lbE9mZnNldCkpOworICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVsID0gcGl4ZWxzICsg
b2Zmc2V0OworICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbFstY1BpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbFtjQWxwaGFDaGFubmVsT2Zmc2V0XSk7CisgICAgcGl4ZWwgLT0gd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVsWy1jUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldF0pOworICAgIGludCB0b3AgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVsW2NBbHBoYUNoYW5uZWxPZmZzZXRdKTsKKyAgICBub3JtYWxW
ZWN0b3Iuc2V0WCgtdG9wTGVmdCArIHRvcCAtIChsZWZ0IDw8IDEpICsgKGNlbnRlciA8PCAxKSk7
CisgICAgbm9ybWFsVmVjdG9yLnNldFkoLXRvcExlZnQgLSAodG9wIDw8IDEpICsgbGVmdCArIChj
ZW50ZXIgPDwgMSkpOwogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgRkVMaWdodGluZzo6c2V0UGl4
ZWwoTGlnaHRpbmdEYXRhJiBkYXRhLCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGlu
Z0RhdGEsCi0gICAgaW50IGxpZ2h0WCwgaW50IGxpZ2h0WSwgZmxvYXQgZmFjdG9yWCwgaW50IG5v
cm1hbFgsIGZsb2F0IGZhY3RvclksIGludCBub3JtYWxZKQoraW5saW5lIHZvaWQgRkVMaWdodGlu
Zzo6aW5saW5lU2V0UGl4ZWwoaW50IG9mZnNldCwgTGlnaHRpbmdEYXRhJiBkYXRhLCBMaWdodFNv
dXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsCisgICAgaW50IGxpZ2h0WCwgaW50IGxp
Z2h0WSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50UG9pbnQmIG5vcm1hbFZlY3Rv
cikKIHsKLSAgICBtX2xpZ2h0U291cmNlLT51cGRhdGVQYWludGluZ0RhdGEocGFpbnRpbmdEYXRh
LCBsaWdodFgsIGxpZ2h0WSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRhdGEucGl4ZWxzLT5nZXQoZGF0
YS5vZmZzZXQgKyAzKSkgKiBkYXRhLnN1cmZhY2VTY2FsZSk7Ci0KLSAgICBkYXRhLm5vcm1hbFZl
Y3Rvci5zZXRYKGZhY3RvclggKiBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsWCkgKiBkYXRhLnN1
cmZhY2VTY2FsZSk7Ci0gICAgZGF0YS5ub3JtYWxWZWN0b3Iuc2V0WShmYWN0b3JZICogc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG5vcm1hbFkpICogZGF0YS5zdXJmYWNlU2NhbGUpOwotICAgIGRhdGEubm9y
bWFsVmVjdG9yLnNldFooMS4wZik7Ci0gICAgZGF0YS5ub3JtYWxWZWN0b3Iubm9ybWFsaXplKCk7
Ci0KLSAgICBpZiAobV9saWdodGluZ1R5cGUgPT0gRkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0aW5n
KQotICAgICAgICBkYXRhLmxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAqIChkYXRh
Lm5vcm1hbFZlY3RvciAqIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvcik7Ci0gICAgZWxzZSB7Ci0g
ICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gcGFpbnRpbmdEYXRhLmxpZ2h0VmVj
dG9yOwotICAgICAgICBoYWxmd2F5VmVjdG9yLnNldFooaGFsZndheVZlY3Rvci56KCkgKyAxLjBm
KTsKLSAgICAgICAgaGFsZndheVZlY3Rvci5ub3JtYWxpemUoKTsKLSAgICAgICAgaWYgKG1fc3Bl
Y3VsYXJFeHBvbmVudCA9PSAxLjBmKQotICAgICAgICAgICAgZGF0YS5saWdodFN0cmVuZ3RoID0g
bV9zcGVjdWxhckNvbnN0YW50ICogKGRhdGEubm9ybWFsVmVjdG9yICogaGFsZndheVZlY3Rvcik7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRhdGEubGlnaHRTdHJlbmd0aCA9IG1fc3BlY3Vs
YXJDb25zdGFudCAqIHBvd2YoZGF0YS5ub3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9yLCBtX3Nw
ZWN1bGFyRXhwb25lbnQpOworICAgIG1fbGlnaHRTb3VyY2UtPnVwZGF0ZVBhaW50aW5nRGF0YShw
YWludGluZ0RhdGEsIGxpZ2h0WCwgbGlnaHRZLCBzdGF0aWNfY2FzdDxmbG9hdD4oZGF0YS5waXhl
bHNbb2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldF0pICogZGF0YS5zdXJmYWNlU2NhbGUpOwor
CisgICAgZmxvYXQgbGlnaHRTdHJlbmd0aDsKKyAgICBpZiAoIW5vcm1hbFZlY3Rvci54KCkgJiYg
IW5vcm1hbFZlY3Rvci55KCkpIHsKKyAgICAgICAgLy8gTm9ybWFsIHZlY3RvciBpcyAoMCwgMCwg
MSkuIFRoaXMgaXMgYSBxdWl0ZSBmcmVxdWVudCBjYXNlLgorICAgICAgICBpZiAobV9saWdodGlu
Z1R5cGUgPT0gRkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0aW5nKQorICAgICAgICAgICAgbGlnaHRT
dHJlbmd0aCA9IG1fZGlmZnVzZUNvbnN0YW50ICogcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnoo
KSAvIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aDsKKyAgICAgICAgZWxzZSB7CisgICAg
ICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9IHBhaW50aW5nRGF0YS5saWdodFZl
Y3RvcjsKKyAgICAgICAgICAgIGhhbGZ3YXlWZWN0b3Iuc2V0WihoYWxmd2F5VmVjdG9yLnooKSAr
IHBhaW50aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBmbG9hdCBoYWxm
d2F5VmVjdG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlm
IChtX3NwZWN1bGFyRXhwb25lbnQgPT0gMSkKKyAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3Ro
ID0gbV9zcGVjdWxhckNvbnN0YW50ICogaGFsZndheVZlY3Rvci56KCkgLyBoYWxmd2F5VmVjdG9y
TGVuZ3RoOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGgg
PSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBwb3dmKGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndheVZl
Y3Rvckxlbmd0aCwgbV9zcGVjdWxhckV4cG9uZW50KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIEZsb2F0UG9pbnQzRCBub3JtYWxWZWN0b3I7CisgICAgICAgIG5vcm1hbFZlY3Rv
ci5zZXRYKGZhY3RvclggKiBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsVmVjdG9yLngoKSkgKiBk
YXRhLnN1cmZhY2VTY2FsZSk7CisgICAgICAgIG5vcm1hbFZlY3Rvci5zZXRZKGZhY3RvclkgKiBz
dGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsVmVjdG9yLnkoKSkgKiBkYXRhLnN1cmZhY2VTY2FsZSk7
CisgICAgICAgIG5vcm1hbFZlY3Rvci5zZXRaKDEpOworICAgICAgICBmbG9hdCBub3JtYWxWZWN0
b3JMZW5ndGggPSBub3JtYWxWZWN0b3IubGVuZ3RoKCk7CisKKyAgICAgICAgaWYgKG1fbGlnaHRp
bmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdodGluZykKKyAgICAgICAgICAgIGxpZ2h0
U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAqIChub3JtYWxWZWN0b3IgKiBwYWludGluZ0Rh
dGEubGlnaHRWZWN0b3IpIC8gKG5vcm1hbFZlY3Rvckxlbmd0aCAqIHBhaW50aW5nRGF0YS5saWdo
dFZlY3Rvckxlbmd0aCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgRmxvYXRQb2ludDNE
IGhhbGZ3YXlWZWN0b3IgPSBwYWludGluZ0RhdGEubGlnaHRWZWN0b3I7CisgICAgICAgICAgICBo
YWxmd2F5VmVjdG9yLnNldFooaGFsZndheVZlY3Rvci56KCkgKyBwYWludGluZ0RhdGEubGlnaHRW
ZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0aCA9IGhh
bGZ3YXlWZWN0b3IubGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50
ID09IDEpCisgICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFu
dCAqIChub3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGgg
KiBoYWxmd2F5VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogcG93Zigobm9ybWFsVmVjdG9y
ICogaGFsZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxl
bmd0aCksIG1fc3BlY3VsYXJFeHBvbmVudCk7CisgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAo
ZGF0YS5saWdodFN0cmVuZ3RoID4gMS4wZikKLSAgICAgICAgZGF0YS5saWdodFN0cmVuZ3RoID0g
MS4wZjsKLSAgICBpZiAoZGF0YS5saWdodFN0cmVuZ3RoIDwgMC4wZikKLSAgICAgICAgZGF0YS5s
aWdodFN0cmVuZ3RoID0gMC4wZjsKKyAgICBpZiAobGlnaHRTdHJlbmd0aCA+IDEpCisgICAgICAg
IGxpZ2h0U3RyZW5ndGggPSAxOworICAgIGlmIChsaWdodFN0cmVuZ3RoIDwgMCkKKyAgICAgICAg
bGlnaHRTdHJlbmd0aCA9IDA7CiAKLSAgICBkYXRhLnBpeGVscy0+c2V0KGRhdGEub2Zmc2V0LCBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihkYXRhLmxpZ2h0U3RyZW5ndGggKiBwYWludGluZ0Rh
dGEuY29sb3JWZWN0b3IueCgpKSk7Ci0gICAgZGF0YS5waXhlbHMtPnNldChkYXRhLm9mZnNldCAr
IDEsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGRhdGEubGlnaHRTdHJlbmd0aCAqIHBhaW50
aW5nRGF0YS5jb2xvclZlY3Rvci55KCkpKTsKLSAgICBkYXRhLnBpeGVscy0+c2V0KGRhdGEub2Zm
c2V0ICsgMiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oZGF0YS5saWdodFN0cmVuZ3RoICog
cGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnooKSkpOworICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVs
ID0gZGF0YS5waXhlbHMgKyBvZmZzZXQ7CisgICAgcGl4ZWxbMF0gPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyPihsaWdodFN0cmVuZ3RoICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLngoKSk7
CisgICAgcGl4ZWxbMV0gPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihsaWdodFN0cmVuZ3Ro
ICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnkoKSk7CisgICAgcGl4ZWxbMl0gPSBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBjaGFyPihsaWdodFN0cmVuZ3RoICogcGFpbnRpbmdEYXRhLmNvbG9yVmVj
dG9yLnooKSk7Cit9CisKK3ZvaWQgRkVMaWdodGluZzo6c2V0UGl4ZWwoaW50IG9mZnNldCwgTGln
aHRpbmdEYXRhJiBkYXRhLCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEs
CisgICAgaW50IGxpZ2h0WCwgaW50IGxpZ2h0WSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9y
WSwgSW50UG9pbnQmIG5vcm1hbFZlY3RvcikKK3sKKyAgICBpbmxpbmVTZXRQaXhlbChvZmZzZXQs
IGRhdGEsIHBhaW50aW5nRGF0YSwgbGlnaHRYLCBsaWdodFksIGZhY3RvclgsIGZhY3RvclksIG5v
cm1hbFZlY3Rvcik7CiB9CiAKLWJvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKENhbnZhc1Bp
eGVsQXJyYXkqIHBpeGVscywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQorYm9vbCBGRUxpZ2h0aW5n
OjpkcmF3TGlnaHRpbmcodW5zaWduZWQgY2hhciogcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWln
aHQpCiB7CiAgICAgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7CiAgICAg
TGlnaHRpbmdEYXRhIGRhdGE7CkBAIC0xNTQsODYgKzI2MSw3OCBAQCBib29sIEZFTGlnaHRpbmc6
OmRyYXdMaWdodGluZyhDYW52YXNQaXhlbEFycmF5KiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhl
aWdodCkKICAgICBtX2xpZ2h0U291cmNlLT5pbml0UGFpbnRpbmdEYXRhKHBhaW50aW5nRGF0YSk7
CiAKICAgICAvLyBUb3AvTGVmdCBjb3JuZXIKLSAgICBkYXRhLm9mZnNldCA9IDA7Ci0gICAgc2V0
UGl4ZWwoZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCAwLAotICAgICAgICAtMi4wZiAvIDMuMGYsIC0y
ICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5yaWdodFBpeGVsVmFsdWUoKSAt
IGRhdGEuZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpLAotICAg
ICAgICAtMi4wZiAvIDMuMGYsIC0yICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgLSBkYXRhLnJp
Z2h0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEuZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJp
Z2h0UGl4ZWxWYWx1ZSgpKTsKKyAgICBJbnRQb2ludCBub3JtYWxWZWN0b3I7CisgICAgaW50IG9m
ZnNldCA9IDA7CisgICAgZGF0YS50b3BMZWZ0KG9mZnNldCwgbm9ybWFsVmVjdG9yKTsKKyAgICBz
ZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgMCwgY0ZhY3RvcjJkaXYzLCBj
RmFjdG9yMmRpdjMsIG5vcm1hbFZlY3Rvcik7CiAKICAgICAvLyBUb3AvUmlnaHQgcGl4ZWwKLSAg
ICBkYXRhLm9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxT
aXplOwotICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNl
ZEJ5T25lLCAwLAotICAgICAgICAtMi4wZiAvIDMuMGYsIC0yICogZGF0YS5sZWZ0UGl4ZWxWYWx1
ZSgpICsgMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpIC0gZGF0YS5kb3duTGVmdFBpeGVsVmFs
dWUoKSArIGRhdGEuZG93blBpeGVsVmFsdWUoKSwKLSAgICAgICAgLTIuMGYgLyAzLjBmLCAtZGF0
YS5sZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpICsgZGF0YS5k
b3duTGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmRvd25QaXhlbFZhbHVlKCkpOworICAgIG9m
ZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOworICAg
IGRhdGEudG9wUmlnaHQob2Zmc2V0LCBub3JtYWxWZWN0b3IpOworICAgIHNldFBpeGVsKG9mZnNl
dCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIDAsIGNGYWN0
b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBub3JtYWxWZWN0b3IpOwogCiAgICAgLy8gQm90dG9tL0xl
ZnQgcGl4ZWwKLSAgICBkYXRhLm9mZnNldCA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgIHNldFBpeGVsKGRhdGEsIHBhaW50
aW5nRGF0YSwgMCwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwKLSAgICAgICAgLTIuMGYgLyAz
LjBmLCAtZGF0YS51cFBpeGVsVmFsdWUoKSArIGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSAtIDIg
KiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpLAot
ICAgICAgICAtMi4wZiAvIDMuMGYsIC0yICogZGF0YS51cFBpeGVsVmFsdWUoKSAtIGRhdGEudXBS
aWdodFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSArIGRhdGEucmln
aHRQaXhlbFZhbHVlKCkpOworICAgIG9mZnNldCA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUg
KiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGRhdGEuYm90dG9tTGVmdChv
ZmZzZXQsIG5vcm1hbFZlY3Rvcik7CisgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGlu
Z0RhdGEsIDAsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0ZhY3Rv
cjJkaXYzLCBub3JtYWxWZWN0b3IpOwogCiAgICAgLy8gQm90dG9tL1JpZ2h0IHBpeGVsCi0gICAg
ZGF0YS5vZmZzZXQgPSBoZWlnaHQgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0g
Y1BpeGVsU2l6ZTsKLSAgICBzZXRQaXhlbChkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhE
ZWNyZWFzZWRCeU9uZSwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwKLSAgICAgICAgLTIuMGYg
LyAzLjBmLCAtZGF0YS51cExlZnRQaXhlbFZhbHVlKCkgKyBkYXRhLnVwUGl4ZWxWYWx1ZSgpIC0g
MiAqIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSwK
LSAgICAgICAgLTIuMGYgLyAzLjBmLCAtZGF0YS51cExlZnRQaXhlbFZhbHVlKCkgLSAyICogZGF0
YS51cFBpeGVsVmFsdWUoKSArIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmNlbnRl
clBpeGVsVmFsdWUoKSk7CisgICAgb2Zmc2V0ID0gaGVpZ2h0ICogZGF0YS53aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7CisgICAgZGF0YS5ib3R0b21SaWdodChvZmZzZXQs
IG5vcm1hbFZlY3Rvcik7CisgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEs
IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0Zh
Y3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIG5vcm1hbFZlY3Rvcik7CiAKICAgICBpZiAod2lkdGgg
Pj0gMykgewotICAgICAgICAvLyBUb3AgbGluZQotICAgICAgICBkYXRhLm9mZnNldCA9IGNQaXhl
bFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5
T25lOyArK3gsIGRhdGEub2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKLSAgICAgICAgICAgIHNldFBp
eGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgMCwKLSAgICAgICAgICAgICAgICAtMS4wZiAvIDMu
MGYsIC0yICogZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEucmlnaHRQaXhlbFZhbHVl
KCkgLSBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVl
KCksCi0gICAgICAgICAgICAgICAgLTEuMGYgLyAyLjBmLCAtZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgp
IC0gMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpIC0gZGF0YS5yaWdodFBpeGVsVmFsdWUoKSAr
IGRhdGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpICsg
ZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCkpOworICAgICAgICAvLyBUb3Agcm93CisgICAgICAg
IG9mZnNldCA9IGNQaXhlbFNpemU7CisgICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53
aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIG9mZnNldCArPSBjUGl4ZWxTaXplKSB7CisgICAgICAg
ICAgICBkYXRhLnRvcFJvdyhvZmZzZXQsIG5vcm1hbFZlY3Rvcik7CisgICAgICAgICAgICBpbmxp
bmVTZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgMCwgY0ZhY3RvcjFkaXYz
LCBjRmFjdG9yMWRpdjIsIG5vcm1hbFZlY3Rvcik7CiAgICAgICAgIH0KLSAgICAgICAgLy8gQm90
dG9tIGxpbmUKLSAgICAgICAgZGF0YS5vZmZzZXQgPSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25l
ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7Ci0gICAgICAg
IGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIGRhdGEu
b2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKLSAgICAgICAgICAgIHNldFBpeGVsKGRhdGEsIHBhaW50
aW5nRGF0YSwgeCwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwKLSAgICAgICAgICAgICAgICAt
MS4wZiAvIDMuMGYsIC1kYXRhLnVwTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEudXBSaWdodFBpeGVs
VmFsdWUoKSAtIDIgKiBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5yaWdodFBpeGVs
VmFsdWUoKSwKLSAgICAgICAgICAgICAgICAtMS4wZiAvIDIuMGYsIC1kYXRhLnVwTGVmdFBpeGVs
VmFsdWUoKSAtIDIgKiBkYXRhLnVwUGl4ZWxWYWx1ZSgpIC0gZGF0YS51cFJpZ2h0UGl4ZWxWYWx1
ZSgpICsgZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgp
ICsgZGF0YS5yaWdodFBpeGVsVmFsdWUoKSk7CisgICAgICAgIC8vIEJvdHRvbSByb3cKKyAgICAg
ICAgb2Zmc2V0ID0gZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplOworICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8
IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkgewor
ICAgICAgICAgICAgZGF0YS5ib3R0b21Sb3cob2Zmc2V0LCBub3JtYWxWZWN0b3IpOworICAgICAg
ICAgICAgaW5saW5lU2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIGRhdGEu
aGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYyLCBub3JtYWxW
ZWN0b3IpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGhlaWdodCA+PSAzKSB7Ci0gICAg
ICAgIC8vIExlZnQgbGluZQotICAgICAgICBkYXRhLm9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHRE
ZWNyZWFzZWRCeU9uZTsgKyt5LCBkYXRhLm9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICBzZXRQaXhlbChkYXRhLCBwYWludGluZ0RhdGEsIDAs
IHksCi0gICAgICAgICAgICAgICAgLTEuMGYgLyAyLjBmLCAtZGF0YS51cFBpeGVsVmFsdWUoKSAr
IGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSAr
IDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpIC0gZGF0YS5kb3duUGl4ZWxWYWx1ZSgpICsgZGF0
YS5kb3duUmlnaHRQaXhlbFZhbHVlKCksCi0gICAgICAgICAgICAgICAgLTEuMGYgLyAzLjBmLCAt
MiAqIGRhdGEudXBQaXhlbFZhbHVlKCkgLSBkYXRhLnVwUmlnaHRQaXhlbFZhbHVlKCkgKyAyICog
ZGF0YS5kb3duUGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCkpOworICAg
ICAgICAvLyBMZWZ0IGNvbHVtbgorICAgICAgICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplOworICAgICAgICBmb3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVj
cmVhc2VkQnlPbmU7ICsreSwgb2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNp
emUpIHsKKyAgICAgICAgICAgIGRhdGEubGVmdENvbHVtbihvZmZzZXQsIG5vcm1hbFZlY3Rvcik7
CisgICAgICAgICAgICBpbmxpbmVTZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwg
MCwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFjdG9yMWRpdjMsIG5vcm1hbFZlY3Rvcik7CiAgICAgICAg
IH0KLSAgICAgICAgLy8gUmlnaHQgbGluZQotICAgICAgICBkYXRhLm9mZnNldCA9IGRhdGEud2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
IC0gY1BpeGVsU2l6ZTsKLSAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERl
Y3JlYXNlZEJ5T25lOyArK3ksIGRhdGEub2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemUpIHsKLSAgICAgICAgICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0
YS53aWR0aERlY3JlYXNlZEJ5T25lLCB5LAotICAgICAgICAgICAgICAgIC0xLjBmIC8gMi4wZiwg
LWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS51cFBpeGVsVmFsdWUoKSAtMiAqIGRhdGEu
bGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSAtIGRhdGEuZG93
bkxlZnRQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25QaXhlbFZhbHVlKCksCi0gICAgICAgICAgICAg
ICAgLTEuMGYgLyAzLjBmLCAtZGF0YS51cExlZnRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS51cFBp
eGVsVmFsdWUoKSArIGRhdGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4
ZWxWYWx1ZSgpKTsKKyAgICAgICAgLy8gUmlnaHQgY29sdW1uCisgICAgICAgIG9mZnNldCA9IChk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIDw8IDEpIC0gY1BpeGVsU2l6ZTsKKyAgICAg
ICAgZm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIG9m
ZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKSB7CisgICAgICAgICAgICBk
YXRhLnJpZ2h0Q29sdW1uKG9mZnNldCwgbm9ybWFsVmVjdG9yKTsKKyAgICAgICAgICAgIGlubGlu
ZVNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2Vk
QnlPbmUsIHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBub3JtYWxWZWN0b3IpOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgaWYgKHdpZHRoID49IDMgJiYgaGVpZ2h0ID49IDMpIHsKICAg
ICAgICAgLy8gSW50ZXJpb3IgcGl4ZWxzCiAgICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0
YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5KSB7Ci0gICAgICAgICAgICBkYXRhLm9mZnNldCA9
IHkgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1BpeGVsU2l6ZTsKLSAgICAg
ICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gs
IGRhdGEub2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKLSAgICAgICAgICAgICAgICBzZXRQaXhlbChk
YXRhLCBwYWludGluZ0RhdGEsIHgsIHksCi0gICAgICAgICAgICAgICAgICAgIC0xLjBmIC8gNC4w
ZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpIC0g
MiAqIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpIC0g
ZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpLAot
ICAgICAgICAgICAgICAgICAgICAtMS4wZiAvIDQuMGYsIC1kYXRhLnVwTGVmdFBpeGVsVmFsdWUo
KSAtIDIgKiBkYXRhLnVwUGl4ZWxWYWx1ZSgpIC0gZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpICsg
ZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmRvd25QaXhlbFZhbHVlKCkgKyBk
YXRhLmRvd25SaWdodFBpeGVsVmFsdWUoKSk7CisgICAgICAgICAgICBvZmZzZXQgPSB5ICogZGF0
YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7CisgICAgICAgICAgICBm
b3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQg
Kz0gY1BpeGVsU2l6ZSkgeworICAgICAgICAgICAgICAgIGRhdGEuaW50ZXJpb3Iob2Zmc2V0LCBu
b3JtYWxWZWN0b3IpOworICAgICAgICAgICAgICAgIGlubGluZVNldFBpeGVsKG9mZnNldCwgZGF0
YSwgcGFpbnRpbmdEYXRhLCB4LCB5LCBjRmFjdG9yMWRpdjQsIGNGYWN0b3IxZGl2NCwgbm9ybWFs
VmVjdG9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGludCB0b3Rh
bFNpemUgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICogaGVpZ2h0OworICAgIHVu
c2lnbmVkIGNoYXIqIGxhc3RQaXhlbCA9IGRhdGEucGl4ZWxzICsgZGF0YS53aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSAqIGhlaWdodDsKICAgICBpZiAobV9saWdodGluZ1R5cGUgPT0gRGlmZnVz
ZUxpZ2h0aW5nKSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAzOyBpIDwgdG90YWxTaXplOyBpICs9
IDQpCi0gICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGksIGNPcGFxdWVBbHBoYSk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgY2hhciogcGl4ZWwgPSBkYXRhLnBpeGVscyArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQ7IHBpeGVsIDwgbGFzdFBpeGVsOyBwaXhlbCArPSBjUGl4ZWxTaXplKQorICAgICAg
ICAgICAgcGl4ZWxbMF0gPSBjT3BhcXVlQWxwaGE7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCB0b3RhbFNpemU7IGkgKz0gNCkgewotICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciBhMSA9IGRhdGEucGl4ZWxzLT5nZXQoaSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBj
aGFyIGEyID0gZGF0YS5waXhlbHMtPmdldChpICsgMSk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBj
aGFyIGEzID0gZGF0YS5waXhlbHMtPmdldChpICsgMik7CisgICAgICAgIGZvciAodW5zaWduZWQg
Y2hhciogcGl4ZWwgPSBkYXRhLnBpeGVsczsgcGl4ZWwgPCBsYXN0UGl4ZWw7IHBpeGVsICs9IGNQ
aXhlbFNpemUpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYTEgPSBwaXhlbFswXTsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYTIgPSBwaXhlbFsxXTsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIgYTMgPSBwaXhlbFsyXTsKICAgICAgICAgICAgIC8vIGFscGhhIHNldCB0byBzZXQg
dG8gbWF4KGExLCBhMiwgYTMpCi0gICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGkgKyAzLCBh
MSA+PSBhMiA/IChhMSA+PSBhMyA/IGExIDogYTMpIDogKGEyID49IGEzID8gYTIgOiBhMykpOwor
ICAgICAgICAgICAgcGl4ZWxbM10gPSBhMSA+PSBhMiA/IChhMSA+PSBhMyA/IGExIDogYTMpIDog
KGEyID49IGEzID8gYTIgOiBhMyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI1Myw4ICszNTIs
OCBAQCB2b2lkIEZFTGlnaHRpbmc6OmFwcGx5KEZpbHRlciogZmlsdGVyKQogICAgIHNldElzQWxw
aGFJbWFnZShmYWxzZSk7CiAKICAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVz
dGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7Ci0gICAg
UmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhKGluLT5yZXN1bHRJbWFnZSgpLT5nZXRVbm11
bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0RHJhd2luZ1JlY3QpKTsKLSAgICBDYW52YXNQaXhlbEFy
cmF5KiBzcmNQaXhlbEFycmF5KHNyY0ltYWdlRGF0YS0+ZGF0YSgpKTsKKyAgICBSZWZQdHI8SW1h
Z2VEYXRhPiBzcmNJbWFnZURhdGEgPSBpbi0+cmVzdWx0SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0KTsKKyAgICB1bnNpZ25lZCBjaGFyKiBzcmNQaXhl
bEFycmF5ID0gc3JjSW1hZ2VEYXRhLT5kYXRhKCktPmRhdGEoKS0+ZGF0YSgpOwogCiAgICAgLy8g
RklYTUU6IHN1cHBvcnQga2VybmVsVW5pdExlbmd0aHMgb3RoZXIgdGhhbiAoMSwxKS4gVGhlIGlz
c3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMKICAgICAvLyBzdGFuZGFyZCBoYXMgbm8gdGVzdCBjYXNl
IGZvciB0aGVtLCBhbmQgb3RoZXIgYnJvd3NlcnMgKGxpa2UgRmlyZWZveCkgaGFzIHN0cmFuZ2UK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5n
LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCmluZGV4
IGJkNTZjZWUuLmMzNjA3NGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRUxpZ2h0aW5nLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFTGlnaHRpbmcuaApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkZpbHRlci5oIgog
I2luY2x1ZGUgIkZpbHRlckVmZmVjdC5oIgogI2luY2x1ZGUgIkxpZ2h0U291cmNlLmgiCi0jaW5j
bHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgogCiAvLyBDb21tb24gYmFzZSBjbGFzcyBmb3IgRkVE
aWZmdXNlTGlnaHRpbmcgYW5kIEZFU3BlY3VsYXJMaWdodGluZwogCkBAIC01MywzMSArNTIsMzMg
QEAgcHJvdGVjdGVkOgogICAgIH07CiAKICAgICBzdHJ1Y3QgTGlnaHRpbmdEYXRhIHsKLSAgICAg
ICAgRmxvYXRQb2ludDNEIG5vcm1hbFZlY3RvcjsKLSAgICAgICAgQ2FudmFzUGl4ZWxBcnJheSog
cGl4ZWxzOwotICAgICAgICBmbG9hdCBsaWdodFN0cmVuZ3RoOworICAgICAgICAvLyBUaGlzIHN0
cnVjdHVyZSBjb250YWlucyBvbmx5IHJlYWQtb25seSAoU01QIHNhZmUpIGRhdGEKKyAgICAgICAg
dW5zaWduZWQgY2hhciogcGl4ZWxzOwogICAgICAgICBmbG9hdCBzdXJmYWNlU2NhbGU7Ci0gICAg
ICAgIGludCBvZmZzZXQ7CiAgICAgICAgIGludCB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsK
ICAgICAgICAgaW50IHdpZHRoRGVjcmVhc2VkQnlPbmU7CiAgICAgICAgIGludCBoZWlnaHREZWNy
ZWFzZWRCeU9uZTsKIAotICAgICAgICBBTFdBWVNfSU5MSU5FIGludCB1cExlZnRQaXhlbFZhbHVl
KCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50IHVwUGl4ZWxWYWx1ZSgpOwotICAgICAgICBB
TFdBWVNfSU5MSU5FIGludCB1cFJpZ2h0UGl4ZWxWYWx1ZSgpOwotICAgICAgICBBTFdBWVNfSU5M
SU5FIGludCBsZWZ0UGl4ZWxWYWx1ZSgpOwotICAgICAgICBBTFdBWVNfSU5MSU5FIGludCBjZW50
ZXJQaXhlbFZhbHVlKCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50IHJpZ2h0UGl4ZWxWYWx1
ZSgpOwotICAgICAgICBBTFdBWVNfSU5MSU5FIGludCBkb3duTGVmdFBpeGVsVmFsdWUoKTsKLSAg
ICAgICAgQUxXQVlTX0lOTElORSBpbnQgZG93blBpeGVsVmFsdWUoKTsKLSAgICAgICAgQUxXQVlT
X0lOTElORSBpbnQgZG93blJpZ2h0UGl4ZWxWYWx1ZSgpOworICAgICAgICBpbmxpbmUgdm9pZCB0
b3BMZWZ0KGludCBvZmZzZXQsIEludFBvaW50JiBub3JtYWxWZWN0b3IpOworICAgICAgICBpbmxp
bmUgdm9pZCB0b3BSb3coaW50IG9mZnNldCwgSW50UG9pbnQmIG5vcm1hbFZlY3Rvcik7CisgICAg
ICAgIGlubGluZSB2b2lkIHRvcFJpZ2h0KGludCBvZmZzZXQsIEludFBvaW50JiBub3JtYWxWZWN0
b3IpOworICAgICAgICBpbmxpbmUgdm9pZCBsZWZ0Q29sdW1uKGludCBvZmZzZXQsIEludFBvaW50
JiBub3JtYWxWZWN0b3IpOworICAgICAgICBpbmxpbmUgdm9pZCBpbnRlcmlvcihpbnQgb2Zmc2V0
LCBJbnRQb2ludCYgbm9ybWFsVmVjdG9yKTsKKyAgICAgICAgaW5saW5lIHZvaWQgcmlnaHRDb2x1
bW4oaW50IG9mZnNldCwgSW50UG9pbnQmIG5vcm1hbFZlY3Rvcik7CisgICAgICAgIGlubGluZSB2
b2lkIGJvdHRvbUxlZnQoaW50IG9mZnNldCwgSW50UG9pbnQmIG5vcm1hbFZlY3Rvcik7CisgICAg
ICAgIGlubGluZSB2b2lkIGJvdHRvbVJvdyhpbnQgb2Zmc2V0LCBJbnRQb2ludCYgbm9ybWFsVmVj
dG9yKTsKKyAgICAgICAgaW5saW5lIHZvaWQgYm90dG9tUmlnaHQoaW50IG9mZnNldCwgSW50UG9p
bnQmIG5vcm1hbFZlY3Rvcik7CiAgICAgfTsKIAogICAgIEZFTGlnaHRpbmcoTGlnaHRpbmdUeXBl
LCBjb25zdCBDb2xvciYsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQs
IFBhc3NSZWZQdHI8TGlnaHRTb3VyY2U+KTsKIAotICAgIGJvb2wgZHJhd0xpZ2h0aW5nKENhbnZh
c1BpeGVsQXJyYXkqLCBpbnQsIGludCk7Ci0gICAgQUxXQVlTX0lOTElORSB2b2lkIHNldFBpeGVs
KExpZ2h0aW5nRGF0YSYsIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLAotICAgICAgICBpbnQg
bGlnaHRYLCBpbnQgbGlnaHRZLCBmbG9hdCBmYWN0b3JYLCBpbnQgbm9ybWFsWCwgZmxvYXQgZmFj
dG9yWSwgaW50IG5vcm1hbFkpOworICAgIGJvb2wgZHJhd0xpZ2h0aW5nKHVuc2lnbmVkIGNoYXIq
LCBpbnQsIGludCk7CisgICAgaW5saW5lIHZvaWQgaW5saW5lU2V0UGl4ZWwoaW50IG9mZnNldCwg
TGlnaHRpbmdEYXRhJiwgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsCisgICAgICAgIGludCBs
aWdodFgsIGludCBsaWdodFksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFBvaW50
JiBub3JtYWxWZWN0b3IpOworCisgICAgLy8gTm90IHdvcnRoIHRvIGlubGluZSBldmVyeSBvY2N1
cmVuY2Ugb2Ygc2V0UGl4ZWwuCisgICAgdm9pZCBzZXRQaXhlbChpbnQgb2Zmc2V0LCBMaWdodGlu
Z0RhdGEmLCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwKKyAgICAgICAgaW50IGxpZ2h0WCwg
aW50IGxpZ2h0WSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwgSW50UG9pbnQmIG5vcm1h
bFZlY3Rvcik7CiAKICAgICBMaWdodGluZ1R5cGUgbV9saWdodGluZ1R5cGU7CiAgICAgUmVmUHRy
PExpZ2h0U291cmNlPiBtX2xpZ2h0U291cmNlOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5jcHAKaW5kZXggYTgwYjE0Yi4uZGUwNjkxZSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3Bw
CkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgUG9pbnRMaWdodFNvdXJjZTo6dXBkYXRlUGFpbnRpbmdE
YXRhKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50CiAgICAgcGFpbnRpbmdE
YXRhLmxpZ2h0VmVjdG9yLnNldFgobV9wb3NpdGlvbi54KCkgLSB4KTsKICAgICBwYWludGluZ0Rh
dGEubGlnaHRWZWN0b3Iuc2V0WShtX3Bvc2l0aW9uLnkoKSAtIHkpOwogICAgIHBhaW50aW5nRGF0
YS5saWdodFZlY3Rvci5zZXRaKG1fcG9zaXRpb24ueigpIC0geik7Ci0gICAgcGFpbnRpbmdEYXRh
LmxpZ2h0VmVjdG9yLm5vcm1hbGl6ZSgpOworICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvckxl
bmd0aCA9IHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5sZW5ndGgoKTsKIH0KIAogLy8gc3BvdC1s
aWdodCBlZGdlIGRhcmtlbmluZyBkZXBlbmRzIG9uIGFuIGFic29sdXRlIHRyZXNob2xkCkBAIC04
NCw5ICs4NCw5IEBAIHZvaWQgU3BvdExpZ2h0U291cmNlOjp1cGRhdGVQYWludGluZ0RhdGEoUGFp
bnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQKICAgICBwYWludGluZ0RhdGEubGln
aHRWZWN0b3Iuc2V0WChtX3Bvc2l0aW9uLngoKSAtIHgpOwogICAgIHBhaW50aW5nRGF0YS5saWdo
dFZlY3Rvci5zZXRZKG1fcG9zaXRpb24ueSgpIC0geSk7CiAgICAgcGFpbnRpbmdEYXRhLmxpZ2h0
VmVjdG9yLnNldFoobV9wb3NpdGlvbi56KCkgLSB6KTsKLSAgICBwYWludGluZ0RhdGEubGlnaHRW
ZWN0b3Iubm9ybWFsaXplKCk7CisgICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoID0g
cGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLmxlbmd0aCgpOwogCi0gICAgZmxvYXQgY29zaW5lT2ZB
bmdsZSA9IHBhaW50aW5nRGF0YS5saWdodFZlY3RvciAqIHBhaW50aW5nRGF0YS5kaXJlY3Rpb25W
ZWN0b3I7CisgICAgZmxvYXQgY29zaW5lT2ZBbmdsZSA9IChwYWludGluZ0RhdGEubGlnaHRWZWN0
b3IgKiBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yKSAvIHBhaW50aW5nRGF0YS5saWdodFZl
Y3Rvckxlbmd0aDsKICAgICBpZiAoY29zaW5lT2ZBbmdsZSA+IHBhaW50aW5nRGF0YS5jb25lQ3V0
T2ZmTGltaXQpIHsKICAgICAgICAgLy8gTm8gbGlnaHQgaXMgcHJvZHVjZWQsIHNjYW5saW5lcyBh
cmUgbm90IHVwZGF0ZWQKICAgICAgICAgcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnNldFgoMC4w
Zik7CkBAIC0xMjcsNiArMTI3LDcgQEAgdm9pZCBEaXN0YW50TGlnaHRTb3VyY2U6OmluaXRQYWlu
dGluZ0RhdGEoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCiAgICAgcGFpbnRpbmdEYXRhLmxp
Z2h0VmVjdG9yLnNldFgoY29zZihhemltdXRoKSAqIGNvc2YoZWxldmF0aW9uKSk7CiAgICAgcGFp
bnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFkoc2luZihhemltdXRoKSAqIGNvc2YoZWxldmF0aW9u
KSk7CiAgICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFooc2luZihlbGV2YXRpb24pKTsK
KyAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGggPSAxOwogfQogCiB2b2lkIERpc3Rh
bnRMaWdodFNvdXJjZTo6dXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYsIGludCwgaW50
LCBmbG9hdCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9M
aWdodFNvdXJjZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291
cmNlLmgKaW5kZXggMmU0YzU3OS4uMDEzZTkxMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKQEAgLTUxLDYgKzUxLDcgQEAgcHVibGljOgog
ICAgICAgICAvLyBTVkdGRUxpZ2h0aW5nIGFsc28gdXNlIHRoZW0KICAgICAgICAgRmxvYXRQb2lu
dDNEIGxpZ2h0VmVjdG9yOwogICAgICAgICBGbG9hdFBvaW50M0QgY29sb3JWZWN0b3I7CisgICAg
ICAgIGZsb2F0IGxpZ2h0VmVjdG9yTGVuZ3RoOwogICAgICAgICAvLyBQcml2YXRlIG1lbWJlcnMK
ICAgICAgICAgRmxvYXRQb2ludDNEIGRpcmVjdGlvblZlY3RvcjsKICAgICAgICAgRmxvYXRQb2lu
dDNEIHByaXZhdGVDb2xvclZlY3RvcjsKLS0gCjEuNi4wLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72015</attachid>
            <date>2010-10-27 05:12:34 -0700</date>
            <delta_ts>2010-11-02 07:51:59 -0700</delta_ts>
            <desc>ByteArray rewriting</desc>
            <filename>0001-light-filterB.patch</filename>
            <type>text/plain</type>
            <size>30034</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSA2Njc4MWVlOGI4OWEyNGNjMzg2YTgwOTA3MDZkNTE3MjQ0NWM2Yzc0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBXZWQsIDI3IE9jdCAyMDEwIDEzOjUyOjA1ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gbGlnaHQtZmlsdGVyQgoKU2lnbmVkLW9mZi1ieTogWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVn
QGluZi51LXN6ZWdlZC5odT4KLS0tCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9p
bnQzRC5jcHAgICAgICAgIHwgICAgNSAtCiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0
UG9pbnQzRC5oICAgICAgICAgIHwgICAgMiArLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFTGlnaHRpbmcuY3BwICB8ICAyNzkgKysrKysrKysrKysrKystLS0tLS0tCiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oICAgIHwgICAzOCArKy0t
CiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3BwIHwgICAg
NyArLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmggICB8
ICAgIDEgKwogNiBmaWxlcyBjaGFuZ2VkLCAyMDkgaW5zZXJ0aW9ucygrKSwgMTIzIGRlbGV0aW9u
cygtKQoKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNE
LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcAppbmRleCBi
YjA1ZTdmLi5lZDE4MTZiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UG9pbnQzRC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50
M0QuY3BwCkBAIC0zOCwxMCArMzgsNSBAQCB2b2lkIEZsb2F0UG9pbnQzRDo6bm9ybWFsaXplKCkK
ICAgICB9CiB9CiAKLWZsb2F0IEZsb2F0UG9pbnQzRDo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gc3FydGYobGVuZ3RoU3F1YXJlZCgpKTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5o
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuaAppbmRleCA5ZWU1NDhk
Li5iNmNiYWE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9p
bnQzRC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmgKQEAg
LTExMyw4ICsxMTMsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQog
Ci0gICAgZmxvYXQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgZmxvYXQgbGVuZ3RoU3F1YXJlZCgpIGNv
bnN0IHsgcmV0dXJuIHRoaXMtPmRvdCgqdGhpcyk7IH0KKyAgICBmbG9hdCBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBzcXJ0ZihsZW5ndGhTcXVhcmVkKCkpOyB9CiAKIHByaXZhdGU6CiAgICAgZmxv
YXQgbV94OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
TGlnaHRpbmcuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRp
bmcuY3BwCmluZGV4IGUxZGY1ODAuLjcxZGMyZjYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5jcHAKQEAgLTU0LDg1ICs1NCwxODIgQEAgRkVM
aWdodGluZzo6RkVMaWdodGluZyhMaWdodGluZ1R5cGUgbGlnaHRpbmdUeXBlLCBjb25zdCBDb2xv
ciYgbGlnaHRpbmdDb2xvciwgZmwKIGNvbnN0IHN0YXRpYyBpbnQgY1BpeGVsU2l6ZSA9IDQ7CiBj
b25zdCBzdGF0aWMgaW50IGNBbHBoYUNoYW5uZWxPZmZzZXQgPSAzOwogY29uc3Qgc3RhdGljIHVu
c2lnbmVkIGNoYXIgY09wYXF1ZUFscGhhID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMHhm
Zik7Citjb25zdCBzdGF0aWMgZmxvYXQgY0ZhY3RvcjFkaXYyID0gLTEgLyAyLmY7Citjb25zdCBz
dGF0aWMgZmxvYXQgY0ZhY3RvcjFkaXYzID0gLTEgLyAzLmY7Citjb25zdCBzdGF0aWMgZmxvYXQg
Y0ZhY3RvcjFkaXY0ID0gLTEgLyA0LmY7Citjb25zdCBzdGF0aWMgZmxvYXQgY0ZhY3RvcjJkaXYz
ID0gLTIgLyAzLmY7CiAKLUFMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0
YTo6dXBMZWZ0UGl4ZWxWYWx1ZSgpCisvLyA8PCAxIGlzIHNpZ25lZCBtdWx0aXBseSBieSAyCitp
bmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcExlZnQoaW50IG9mZnNldCwg
SW50UG9pbnQmIG5vcm1hbFZlY3RvcikKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPmdldChvZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGlu
dCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgY1BpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVk
QnlQaXhlbFNpemU7CisgICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5n
ZXQob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCBib3R0b21SaWdodCA9
IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKKyAgICBub3JtYWxWZWN0b3Iuc2V0WCgtKGNlbnRlciA8PCAxKSAr
IChyaWdodCA8PCAxKSAtIGJvdHRvbSArIGJvdHRvbVJpZ2h0KTsKKyAgICBub3JtYWxWZWN0b3Iu
c2V0WSgtKGNlbnRlciA8PCAxKSAtIHJpZ2h0ICsgKGJvdHRvbSA8PCAxKSArIGJvdHRvbVJpZ2h0
KTsKIH0KIAotQUxXQVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp1cFBp
eGVsVmFsdWUoKQoraW5saW5lIHZvaWQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSb3co
aW50IG9mZnNldCwgSW50UG9pbnQmIG5vcm1hbFZlY3RvcikKIHsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5nZXQob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPmdldChvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OworICAgIG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgYm90
dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0IC0gY1BpeGVsU2l6
ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50
IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG5vcm1hbFZlY3Rvci5zZXRYKC0o
bGVmdCA8PCAxKSArIChyaWdodCA8PCAxKSAtIGJvdHRvbUxlZnQgKyBib3R0b21SaWdodCk7Cisg
ICAgbm9ybWFsVmVjdG9yLnNldFkoLWxlZnQgLSAoY2VudGVyIDw8IDEpIC0gcmlnaHQgKyBib3R0
b21MZWZ0ICsgKGJvdHRvbSA8PCAxKSArIGJvdHRvbVJpZ2h0KTsKIH0KIAotQUxXQVlTX0lOTElO
RSBpbnQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp1cFJpZ2h0UGl4ZWxWYWx1ZSgpCitpbmxp
bmUgdm9pZCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRvcFJpZ2h0KGludCBvZmZzZXQsIElu
dFBvaW50JiBub3JtYWxWZWN0b3IpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5nZXQob2Zmc2V0IC0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPmdldChvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OworICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQ
aXhlbFNpemU7CisgICAgaW50IGJvdHRvbUxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
Z2V0KG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50
IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOworICAgIG5vcm1hbFZlY3Rvci5zZXRYKC0obGVmdCA8PCAxKSArIChjZW50
ZXIgPDwgMSkgLSBib3R0b21MZWZ0ICsgYm90dG9tKTsKKyAgICBub3JtYWxWZWN0b3Iuc2V0WSgt
bGVmdCAtIChjZW50ZXIgPDwgMSkgKyBib3R0b21MZWZ0ICsgKGJvdHRvbSA8PCAxKSk7CiB9CiAK
LUFMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6bGVmdFBpeGVsVmFs
dWUoKQoraW5saW5lIHZvaWQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uKGlu
dCBvZmZzZXQsIEludFBvaW50JiBub3JtYWxWZWN0b3IpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxP
ZmZzZXQpKTsKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChv
ZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nh
c3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOworICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBp
bnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjQWxwaGFDaGFu
bmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMt
PmdldChvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9m
ZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA8PCAxOworICAgIGludCBib3R0b20g
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKKyAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0
KG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgbm9ybWFs
VmVjdG9yLnNldFgoLXRvcCArIHRvcFJpZ2h0IC0gKGNlbnRlciA8PCAxKSArIChyaWdodCA8PCAx
KSAtIGJvdHRvbSArIGJvdHRvbVJpZ2h0KTsKKyAgICBub3JtYWxWZWN0b3Iuc2V0WSgtKHRvcCA8
PCAxKSAtIHRvcFJpZ2h0ICsgKGJvdHRvbSA8PCAxKSArIGJvdHRvbVJpZ2h0KTsKIH0KIAotQUxX
QVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjpjZW50ZXJQaXhlbFZhbHVl
KCkKK2lubGluZSB2b2lkIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6aW50ZXJpb3IoaW50IG9m
ZnNldCwgSW50UG9pbnQmIG5vcm1hbFZlY3RvcikKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50
IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCAtIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPmdldChvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkp
OworICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgdG9w
TGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0IC0gY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPmdldChvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcFJp
Z2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjUGl4ZWxTaXplICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBp
eGVsU2l6ZSA8PCAxOworICAgIGludCBib3R0b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPmdldChvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAg
IGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIGNBbHBo
YUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgYm90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+
KHBpeGVscy0+Z2V0KG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
CisgICAgbm9ybWFsVmVjdG9yLnNldFgoLXRvcExlZnQgKyB0b3BSaWdodCAtIChsZWZ0IDw8IDEp
ICsgKHJpZ2h0IDw8IDEpIC0gYm90dG9tTGVmdCArIGJvdHRvbVJpZ2h0KTsKKyAgICBub3JtYWxW
ZWN0b3Iuc2V0WSgtdG9wTGVmdCAtICh0b3AgPDwgMSkgLSB0b3BSaWdodCArIGJvdHRvbUxlZnQg
KyAoYm90dG9tIDw8IDEpICsgYm90dG9tUmlnaHQpOwogfQogCi1BTFdBWVNfSU5MSU5FIGludCBG
RUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0UGl4ZWxWYWx1ZSgpCitpbmxpbmUgdm9pZCBG
RUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29sdW1uKGludCBvZmZzZXQsIEludFBvaW50
JiBub3JtYWxWZWN0b3IpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5n
ZXQob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQg
bGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0IC0gY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPmdldChvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgb2Zmc2V0
IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgIGludCB0b3BMZWZ0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOworICAgIGludCB0b3AgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9m
ZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemUgPDwgMTsKKyAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5nZXQob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKKyAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgbm9ybWFsVmVjdG9yLnNldFgoLXRvcExlZnQg
KyB0b3AgLSAobGVmdCA8PCAxKSArIChjZW50ZXIgPDwgMSkgLSBib3R0b21MZWZ0ICsgYm90dG9t
KTsKKyAgICBub3JtYWxWZWN0b3Iuc2V0WSgtdG9wTGVmdCAtICh0b3AgPDwgMSkgKyBib3R0b21M
ZWZ0ICsgKGJvdHRvbSA8PCAxKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6
OkxpZ2h0aW5nRGF0YTo6ZG93bkxlZnRQaXhlbFZhbHVlKCkKK2lubGluZSB2b2lkIEZFTGlnaHRp
bmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVmdChpbnQgb2Zmc2V0LCBJbnRQb2ludCYgbm9ybWFs
VmVjdG9yKQogewotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNl
dCArIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKTsKKyAgICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdl
dChvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHJpZ2h0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOworICAgIG9mZnNldCAtPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAg
ICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPmdldChvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAg
IG5vcm1hbFZlY3Rvci5zZXRYKC10b3AgKyB0b3BSaWdodCAtIChjZW50ZXIgPDwgMSkgKyAocmln
aHQgPDwgMSkpOworICAgIG5vcm1hbFZlY3Rvci5zZXRZKC0odG9wIDw8IDEpIC0gdG9wUmlnaHQg
KyAoY2VudGVyIDw8IDEpICsgcmlnaHQpOwogfQogCi1BTFdBWVNfSU5MSU5FIGludCBGRUxpZ2h0
aW5nOjpMaWdodGluZ0RhdGE6OmRvd25QaXhlbFZhbHVlKCkKK2lubGluZSB2b2lkIEZFTGlnaHRp
bmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93KGludCBvZmZzZXQsIEludFBvaW50JiBub3JtYWxW
ZWN0b3IpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0
ICsgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cisg
ICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCAtIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IGNlbnRlciA9IHN0YXRpY19j
YXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAg
IGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgY1BpeGVs
U2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemU7CisgICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVs
cy0+Z2V0KG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAg
aW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgY0FscGhhQ2hh
bm5lbE9mZnNldCkpOworICAgIGludCB0b3BSaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxz
LT5nZXQob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBu
b3JtYWxWZWN0b3Iuc2V0WCgtdG9wTGVmdCArIHRvcFJpZ2h0IC0gKGxlZnQgPDwgMSkgKyAocmln
aHQgPDwgMSkpOworICAgIG5vcm1hbFZlY3Rvci5zZXRZKC10b3BMZWZ0IC0gKHRvcCA8PCAxKSAt
IHRvcFJpZ2h0ICsgbGVmdCArIChjZW50ZXIgPDwgMSkgKyByaWdodCk7CiB9CiAKLUFMV0FZU19J
TkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6ZG93blJpZ2h0UGl4ZWxWYWx1ZSgp
CitpbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0KGludCBv
ZmZzZXQsIEludFBvaW50JiBub3JtYWxWZWN0b3IpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBj
UGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCBsZWZ0ID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5l
bE9mZnNldCkpOworICAgIGludCBjZW50ZXIgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0
KG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBvZmZzZXQgLT0gd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+Z2V0KG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cisg
ICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgY0FscGhh
Q2hhbm5lbE9mZnNldCkpOworICAgIG5vcm1hbFZlY3Rvci5zZXRYKC10b3BMZWZ0ICsgdG9wIC0g
KGxlZnQgPDwgMSkgKyAoY2VudGVyIDw8IDEpKTsKKyAgICBub3JtYWxWZWN0b3Iuc2V0WSgtdG9w
TGVmdCAtICh0b3AgPDwgMSkgKyBsZWZ0ICsgKGNlbnRlciA8PCAxKSk7CiB9CiAKLUFMV0FZU19J
TkxJTkUgdm9pZCBGRUxpZ2h0aW5nOjpzZXRQaXhlbChMaWdodGluZ0RhdGEmIGRhdGEsIExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwKLSAgICBpbnQgbGlnaHRYLCBpbnQg
bGlnaHRZLCBmbG9hdCBmYWN0b3JYLCBpbnQgbm9ybWFsWCwgZmxvYXQgZmFjdG9yWSwgaW50IG5v
cm1hbFkpCitpbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjppbmxpbmVTZXRQaXhlbChpbnQgb2Zmc2V0
LCBMaWdodGluZ0RhdGEmIGRhdGEsIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5n
RGF0YSwKKyAgICBpbnQgbGlnaHRYLCBpbnQgbGlnaHRZLCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBm
YWN0b3JZLCBJbnRQb2ludCYgbm9ybWFsVmVjdG9yKQogewotICAgIG1fbGlnaHRTb3VyY2UtPnVw
ZGF0ZVBhaW50aW5nRGF0YShwYWludGluZ0RhdGEsIGxpZ2h0WCwgbGlnaHRZLCBzdGF0aWNfY2Fz
dDxmbG9hdD4oZGF0YS5waXhlbHMtPmdldChkYXRhLm9mZnNldCArIDMpKSAqIGRhdGEuc3VyZmFj
ZVNjYWxlKTsKLQotICAgIGRhdGEubm9ybWFsVmVjdG9yLnNldFgoZmFjdG9yWCAqIHN0YXRpY19j
YXN0PGZsb2F0Pihub3JtYWxYKSAqIGRhdGEuc3VyZmFjZVNjYWxlKTsKLSAgICBkYXRhLm5vcm1h
bFZlY3Rvci5zZXRZKGZhY3RvclkgKiBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsWSkgKiBkYXRh
LnN1cmZhY2VTY2FsZSk7Ci0gICAgZGF0YS5ub3JtYWxWZWN0b3Iuc2V0WigxLjBmKTsKLSAgICBk
YXRhLm5vcm1hbFZlY3Rvci5ub3JtYWxpemUoKTsKLQotICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9
PSBGRUxpZ2h0aW5nOjpEaWZmdXNlTGlnaHRpbmcpCi0gICAgICAgIGRhdGEubGlnaHRTdHJlbmd0
aCA9IG1fZGlmZnVzZUNvbnN0YW50ICogKGRhdGEubm9ybWFsVmVjdG9yICogcGFpbnRpbmdEYXRh
LmxpZ2h0VmVjdG9yKTsKLSAgICBlbHNlIHsKLSAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlW
ZWN0b3IgPSBwYWludGluZ0RhdGEubGlnaHRWZWN0b3I7Ci0gICAgICAgIGhhbGZ3YXlWZWN0b3Iu
c2V0WihoYWxmd2F5VmVjdG9yLnooKSArIDEuMGYpOwotICAgICAgICBoYWxmd2F5VmVjdG9yLm5v
cm1hbGl6ZSgpOwotICAgICAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEuMGYpCi0gICAg
ICAgICAgICBkYXRhLmxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiAoZGF0YS5u
b3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9yKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
ZGF0YS5saWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogcG93ZihkYXRhLm5vcm1h
bFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IsIG1fc3BlY3VsYXJFeHBvbmVudCk7CisgICAgbV9saWdo
dFNvdXJjZS0+dXBkYXRlUGFpbnRpbmdEYXRhKHBhaW50aW5nRGF0YSwgbGlnaHRYLCBsaWdodFks
IHN0YXRpY19jYXN0PGZsb2F0PihkYXRhLnBpeGVscy0+Z2V0KG9mZnNldCArIGNBbHBoYUNoYW5u
ZWxPZmZzZXQpKSAqIGRhdGEuc3VyZmFjZVNjYWxlKTsKKworICAgIGZsb2F0IGxpZ2h0U3RyZW5n
dGg7CisgICAgaWYgKCFub3JtYWxWZWN0b3IueCgpICYmICFub3JtYWxWZWN0b3IueSgpKSB7Cisg
ICAgICAgIC8vIE5vcm1hbCB2ZWN0b3IgaXMgKDAsIDAsIDEpLiBUaGlzIGlzIGEgcXVpdGUgZnJl
cXVlbnQgY2FzZS4KKyAgICAgICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRp
ZmZ1c2VMaWdodGluZykKKyAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25z
dGFudCAqIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci56KCkgLyBwYWludGluZ0RhdGEubGlnaHRW
ZWN0b3JMZW5ndGg7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhh
bGZ3YXlWZWN0b3IgPSBwYWludGluZ0RhdGEubGlnaHRWZWN0b3I7CisgICAgICAgICAgICBoYWxm
d2F5VmVjdG9yLnNldFooaGFsZndheVZlY3Rvci56KCkgKyBwYWludGluZ0RhdGEubGlnaHRWZWN0
b3JMZW5ndGgpOworICAgICAgICAgICAgZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0aCA9IGhhbGZ3
YXlWZWN0b3IubGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09
IDEpCisgICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAq
IGhhbGZ3YXlWZWN0b3IueigpIC8gaGFsZndheVZlY3Rvckxlbmd0aDsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICog
cG93ZihoYWxmd2F5VmVjdG9yLnooKSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGgsIG1fc3BlY3VsYXJF
eHBvbmVudCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBGbG9hdFBvaW50M0Qg
bm9ybWFsVmVjdG9yOworICAgICAgICBub3JtYWxWZWN0b3Iuc2V0WChmYWN0b3JYICogc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KG5vcm1hbFZlY3Rvci54KCkpICogZGF0YS5zdXJmYWNlU2NhbGUpOworICAg
ICAgICBub3JtYWxWZWN0b3Iuc2V0WShmYWN0b3JZICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1h
bFZlY3Rvci55KCkpICogZGF0YS5zdXJmYWNlU2NhbGUpOworICAgICAgICBub3JtYWxWZWN0b3Iu
c2V0WigxKTsKKyAgICAgICAgZmxvYXQgbm9ybWFsVmVjdG9yTGVuZ3RoID0gbm9ybWFsVmVjdG9y
Lmxlbmd0aCgpOworCisgICAgICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9PSBGRUxpZ2h0aW5nOjpE
aWZmdXNlTGlnaHRpbmcpCisgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29u
c3RhbnQgKiAobm9ybWFsVmVjdG9yICogcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yKSAvIChub3Jt
YWxWZWN0b3JMZW5ndGggKiBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgpOworICAgICAg
ICBlbHNlIHsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQzRCBoYWxmd2F5VmVjdG9yID0gcGFpbnRp
bmdEYXRhLmxpZ2h0VmVjdG9yOworICAgICAgICAgICAgaGFsZndheVZlY3Rvci5zZXRaKGhhbGZ3
YXlWZWN0b3IueigpICsgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAg
ICAgIGZsb2F0IGhhbGZ3YXlWZWN0b3JMZW5ndGggPSBoYWxmd2F5VmVjdG9yLmxlbmd0aCgpOwor
ICAgICAgICAgICAgaWYgKG1fc3BlY3VsYXJFeHBvbmVudCA9PSAxKQorICAgICAgICAgICAgICAg
IGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiAobm9ybWFsVmVjdG9yICogaGFs
ZndheVZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICogaGFsZndheVZlY3Rvckxlbmd0aCk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fc3Bl
Y3VsYXJDb25zdGFudCAqIHBvd2YoKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5v
cm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpLCBtX3NwZWN1bGFyRXhwb25l
bnQpOworICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGRhdGEubGlnaHRTdHJlbmd0aCA+IDEu
MGYpCi0gICAgICAgIGRhdGEubGlnaHRTdHJlbmd0aCA9IDEuMGY7Ci0gICAgaWYgKGRhdGEubGln
aHRTdHJlbmd0aCA8IDAuMGYpCi0gICAgICAgIGRhdGEubGlnaHRTdHJlbmd0aCA9IDAuMGY7Cisg
ICAgaWYgKGxpZ2h0U3RyZW5ndGggPiAxKQorICAgICAgICBsaWdodFN0cmVuZ3RoID0gMTsKKyAg
ICBpZiAobGlnaHRTdHJlbmd0aCA8IDApCisgICAgICAgIGxpZ2h0U3RyZW5ndGggPSAwOwogCi0g
ICAgZGF0YS5waXhlbHMtPnNldChkYXRhLm9mZnNldCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cj4oZGF0YS5saWdodFN0cmVuZ3RoICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLngoKSkpOwot
ICAgIGRhdGEucGl4ZWxzLT5zZXQoZGF0YS5vZmZzZXQgKyAxLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPihkYXRhLmxpZ2h0U3RyZW5ndGggKiBwYWludGluZ0RhdGEuY29sb3JWZWN0b3IueSgp
KSk7Ci0gICAgZGF0YS5waXhlbHMtPnNldChkYXRhLm9mZnNldCArIDIsIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KGRhdGEubGlnaHRTdHJlbmd0aCAqIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rv
ci56KCkpKTsKKyAgICBkYXRhLnBpeGVscy0+c2V0KG9mZnNldCwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgY2hhcj4obGlnaHRTdHJlbmd0aCAqIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci54KCkpKTsK
KyAgICBkYXRhLnBpeGVscy0+c2V0KG9mZnNldCArIDEsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNo
YXI+KGxpZ2h0U3RyZW5ndGggKiBwYWludGluZ0RhdGEuY29sb3JWZWN0b3IueSgpKSk7CisgICAg
ZGF0YS5waXhlbHMtPnNldChvZmZzZXQgKyAyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihs
aWdodFN0cmVuZ3RoICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnooKSkpOworfQorCit2b2lk
IEZFTGlnaHRpbmc6OnNldFBpeGVsKGludCBvZmZzZXQsIExpZ2h0aW5nRGF0YSYgZGF0YSwgTGln
aHRTb3VyY2U6OlBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLAorICAgIGludCBsaWdodFgsIGlu
dCBsaWdodFksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFBvaW50JiBub3JtYWxW
ZWN0b3IpCit7CisgICAgaW5saW5lU2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEs
IGxpZ2h0WCwgbGlnaHRZLCBmYWN0b3JYLCBmYWN0b3JZLCBub3JtYWxWZWN0b3IpOwogfQogCi1i
b29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhDYW52YXNQaXhlbEFycmF5KiBwaXhlbHMsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCkKK2Jvb2wgRkVMaWdodGluZzo6ZHJhd0xpZ2h0aW5nKEJ5dGVB
cnJheSogcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgTGlnaHRTb3VyY2U6
OlBhaW50aW5nRGF0YSBwYWludGluZ0RhdGE7CiAgICAgTGlnaHRpbmdEYXRhIGRhdGE7CkBAIC0x
NTQsODEgKzI1MSw3MyBAQCBib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhDYW52YXNQaXhl
bEFycmF5KiBwaXhlbHMsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAgICBtX2xpZ2h0U291cmNl
LT5pbml0UGFpbnRpbmdEYXRhKHBhaW50aW5nRGF0YSk7CiAKICAgICAvLyBUb3AvTGVmdCBjb3Ju
ZXIKLSAgICBkYXRhLm9mZnNldCA9IDA7Ci0gICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdEYXRh
LCAwLCAwLAotICAgICAgICAtMi4wZiAvIDMuMGYsIC0yICogZGF0YS5jZW50ZXJQaXhlbFZhbHVl
KCkgKyAyICogZGF0YS5yaWdodFBpeGVsVmFsdWUoKSAtIGRhdGEuZG93blBpeGVsVmFsdWUoKSAr
IGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpLAotICAgICAgICAtMi4wZiAvIDMuMGYsIC0yICog
ZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgLSBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpICsgMiAqIGRh
dGEuZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpKTsKKyAgICBJ
bnRQb2ludCBub3JtYWxWZWN0b3I7CisgICAgaW50IG9mZnNldCA9IDA7CisgICAgZGF0YS50b3BM
ZWZ0KG9mZnNldCwgbm9ybWFsVmVjdG9yKTsKKyAgICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBh
aW50aW5nRGF0YSwgMCwgMCwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMsIG5vcm1hbFZlY3Rv
cik7CiAKICAgICAvLyBUb3AvUmlnaHQgcGl4ZWwKLSAgICBkYXRhLm9mZnNldCA9IGRhdGEud2lk
dGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOwotICAgIHNldFBpeGVsKGRhdGEs
IHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCAwLAotICAgICAgICAtMi4w
ZiAvIDMuMGYsIC0yICogZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEuY2VudGVyUGl4
ZWxWYWx1ZSgpIC0gZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEuZG93blBpeGVsVmFs
dWUoKSwKLSAgICAgICAgLTIuMGYgLyAzLjBmLCAtZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAq
IGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIDIg
KiBkYXRhLmRvd25QaXhlbFZhbHVlKCkpOworICAgIG9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBs
aWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOworICAgIGRhdGEudG9wUmlnaHQob2Zmc2V0LCBu
b3JtYWxWZWN0b3IpOworICAgIHNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBk
YXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIDAsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBu
b3JtYWxWZWN0b3IpOwogCiAgICAgLy8gQm90dG9tL0xlZnQgcGl4ZWwKLSAgICBkYXRhLm9mZnNl
dCA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplOwotICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgZGF0YS5oZWlnaHRE
ZWNyZWFzZWRCeU9uZSwKLSAgICAgICAgLTIuMGYgLyAzLjBmLCAtZGF0YS51cFBpeGVsVmFsdWUo
KSArIGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUo
KSArIDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpLAotICAgICAgICAtMi4wZiAvIDMuMGYsIC0y
ICogZGF0YS51cFBpeGVsVmFsdWUoKSAtIGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSArIDIgKiBk
YXRhLmNlbnRlclBpeGVsVmFsdWUoKSArIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkpOworICAgIG9m
ZnNldCA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBkYXRhLndpZHRoTXVsdGlwbGllZEJ5
UGl4ZWxTaXplOworICAgIGRhdGEuYm90dG9tTGVmdChvZmZzZXQsIG5vcm1hbFZlY3Rvcik7Cisg
ICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIGRhdGEuaGVpZ2h0RGVj
cmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBub3JtYWxWZWN0b3IpOwog
CiAgICAgLy8gQm90dG9tL1JpZ2h0IHBpeGVsCi0gICAgZGF0YS5vZmZzZXQgPSBoZWlnaHQgKiBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICBzZXRQaXhl
bChkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgZGF0YS5oZWln
aHREZWNyZWFzZWRCeU9uZSwKLSAgICAgICAgLTIuMGYgLyAzLjBmLCAtZGF0YS51cExlZnRQaXhl
bFZhbHVlKCkgKyBkYXRhLnVwUGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEubGVmdFBpeGVsVmFsdWUo
KSArIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSwKLSAgICAgICAgLTIuMGYgLyAzLjBmLCAt
ZGF0YS51cExlZnRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS51cFBpeGVsVmFsdWUoKSArIGRhdGEu
bGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSk7CisgICAgb2Zm
c2V0ID0gaGVpZ2h0ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNp
emU7CisgICAgZGF0YS5ib3R0b21SaWdodChvZmZzZXQsIG5vcm1hbFZlY3Rvcik7CisgICAgc2V0
UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9u
ZSwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZSwgY0ZhY3RvcjJkaXYzLCBjRmFjdG9yMmRpdjMs
IG5vcm1hbFZlY3Rvcik7CiAKICAgICBpZiAod2lkdGggPj0gMykgewotICAgICAgICAvLyBUb3Ag
bGluZQotICAgICAgICBkYXRhLm9mZnNldCA9IGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50
IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIGRhdGEub2Zmc2V0ICs9
IGNQaXhlbFNpemUpIHsKLSAgICAgICAgICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwg
eCwgMCwKLSAgICAgICAgICAgICAgICAtMS4wZiAvIDMuMGYsIC0yICogZGF0YS5sZWZ0UGl4ZWxW
YWx1ZSgpICsgMiAqIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkgLSBkYXRhLmRvd25MZWZ0UGl4ZWxW
YWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCksCi0gICAgICAgICAgICAgICAgLTEu
MGYgLyAyLjBmLCAtZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEuY2VudGVyUGl4ZWxW
YWx1ZSgpIC0gZGF0YS5yaWdodFBpeGVsVmFsdWUoKSArIGRhdGEuZG93bkxlZnRQaXhlbFZhbHVl
KCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVl
KCkpOworICAgICAgICAvLyBUb3Agcm93CisgICAgICAgIG9mZnNldCA9IGNQaXhlbFNpemU7Cisg
ICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gs
IG9mZnNldCArPSBjUGl4ZWxTaXplKSB7CisgICAgICAgICAgICBkYXRhLnRvcFJvdyhvZmZzZXQs
IG5vcm1hbFZlY3Rvcik7CisgICAgICAgICAgICBpbmxpbmVTZXRQaXhlbChvZmZzZXQsIGRhdGEs
IHBhaW50aW5nRGF0YSwgeCwgMCwgY0ZhY3RvcjFkaXYzLCBjRmFjdG9yMWRpdjIsIG5vcm1hbFZl
Y3Rvcik7CiAgICAgICAgIH0KLSAgICAgICAgLy8gQm90dG9tIGxpbmUKLSAgICAgICAgZGF0YS5v
ZmZzZXQgPSBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lICogZGF0YS53aWR0aE11bHRpcGxpZWRC
eVBpeGVsU2l6ZSArIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHggPSAxOyB4IDwgZGF0
YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIGRhdGEub2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsK
LSAgICAgICAgICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgZGF0YS5oZWlnaHRE
ZWNyZWFzZWRCeU9uZSwKLSAgICAgICAgICAgICAgICAtMS4wZiAvIDMuMGYsIC1kYXRhLnVwTGVm
dFBpeGVsVmFsdWUoKSArIGRhdGEudXBSaWdodFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmxlZnRQ
aXhlbFZhbHVlKCkgKyAyICogZGF0YS5yaWdodFBpeGVsVmFsdWUoKSwKLSAgICAgICAgICAgICAg
ICAtMS4wZiAvIDIuMGYsIC1kYXRhLnVwTGVmdFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLnVwUGl4
ZWxWYWx1ZSgpIC0gZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpICsgZGF0YS5sZWZ0UGl4ZWxWYWx1
ZSgpICsgMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpICsgZGF0YS5yaWdodFBpeGVsVmFsdWUo
KSk7CisgICAgICAgIC8vIEJvdHRvbSByb3cKKyAgICAgICAgb2Zmc2V0ID0gZGF0YS5oZWlnaHRE
ZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxT
aXplOworICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9u
ZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkgeworICAgICAgICAgICAgZGF0YS5ib3R0b21S
b3cob2Zmc2V0LCBub3JtYWxWZWN0b3IpOworICAgICAgICAgICAgaW5saW5lU2V0UGl4ZWwob2Zm
c2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsIGNG
YWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYyLCBub3JtYWxWZWN0b3IpOwogICAgICAgICB9CiAgICAg
fQogCiAgICAgaWYgKGhlaWdodCA+PSAzKSB7Ci0gICAgICAgIC8vIExlZnQgbGluZQotICAgICAg
ICBkYXRhLm9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7Ci0gICAgICAg
IGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBkYXRh
Lm9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKSB7Ci0gICAgICAgICAg
ICBzZXRQaXhlbChkYXRhLCBwYWludGluZ0RhdGEsIDAsIHksCi0gICAgICAgICAgICAgICAgLTEu
MGYgLyAyLjBmLCAtZGF0YS51cFBpeGVsVmFsdWUoKSArIGRhdGEudXBSaWdodFBpeGVsVmFsdWUo
KSAtIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1
ZSgpIC0gZGF0YS5kb3duUGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCks
Ci0gICAgICAgICAgICAgICAgLTEuMGYgLyAzLjBmLCAtMiAqIGRhdGEudXBQaXhlbFZhbHVlKCkg
LSBkYXRhLnVwUmlnaHRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpICsg
ZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCkpOworICAgICAgICAvLyBMZWZ0IGNvbHVtbgorICAg
ICAgICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOworICAgICAgICBm
b3IgKGludCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSwgb2Zmc2V0
ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpIHsKKyAgICAgICAgICAgIGRhdGEu
bGVmdENvbHVtbihvZmZzZXQsIG5vcm1hbFZlY3Rvcik7CisgICAgICAgICAgICBpbmxpbmVTZXRQ
aXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgeSwgY0ZhY3RvcjFkaXYyLCBjRmFj
dG9yMWRpdjMsIG5vcm1hbFZlY3Rvcik7CiAgICAgICAgIH0KLSAgICAgICAgLy8gUmlnaHQgbGlu
ZQotICAgICAgICBkYXRhLm9mZnNldCA9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUg
KyBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICAgICAg
Zm9yIChpbnQgeSA9IDE7IHkgPCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIGRhdGEu
b2Zmc2V0ICs9IGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUpIHsKLSAgICAgICAgICAg
IHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lLCB5
LAotICAgICAgICAgICAgICAgIC0xLjBmIC8gMi4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgp
ICsgZGF0YS51cFBpeGVsVmFsdWUoKSAtMiAqIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBk
YXRhLmNlbnRlclBpeGVsVmFsdWUoKSAtIGRhdGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyBkYXRh
LmRvd25QaXhlbFZhbHVlKCksCi0gICAgICAgICAgICAgICAgLTEuMGYgLyAzLjBmLCAtZGF0YS51
cExlZnRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS51cFBpeGVsVmFsdWUoKSArIGRhdGEuZG93bkxl
ZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxWYWx1ZSgpKTsKKyAgICAgICAgLy8g
UmlnaHQgY29sdW1uCisgICAgICAgIG9mZnNldCA9IChkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplIDw8IDEpIC0gY1BpeGVsU2l6ZTsKKyAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkgPCBk
YXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVsdGlw
bGllZEJ5UGl4ZWxTaXplKSB7CisgICAgICAgICAgICBkYXRhLnJpZ2h0Q29sdW1uKG9mZnNldCwg
bm9ybWFsVmVjdG9yKTsKKyAgICAgICAgICAgIGlubGluZVNldFBpeGVsKG9mZnNldCwgZGF0YSwg
cGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIHksIGNGYWN0b3IxZGl2Miwg
Y0ZhY3RvcjFkaXYzLCBub3JtYWxWZWN0b3IpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYg
KHdpZHRoID49IDMgJiYgaGVpZ2h0ID49IDMpIHsKICAgICAgICAgLy8gSW50ZXJpb3IgcGl4ZWxz
CiAgICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsg
Kyt5KSB7Ci0gICAgICAgICAgICBkYXRhLm9mZnNldCA9IHkgKiBkYXRhLndpZHRoTXVsdGlwbGll
ZEJ5UGl4ZWxTaXplICsgY1BpeGVsU2l6ZTsKLSAgICAgICAgICAgIGZvciAoaW50IHggPSAxOyB4
IDwgZGF0YS53aWR0aERlY3JlYXNlZEJ5T25lOyArK3gsIGRhdGEub2Zmc2V0ICs9IGNQaXhlbFNp
emUpIHsKLSAgICAgICAgICAgICAgICBzZXRQaXhlbChkYXRhLCBwYWludGluZ0RhdGEsIHgsIHks
Ci0gICAgICAgICAgICAgICAgICAgIC0xLjBmIC8gNC4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1
ZSgpICsgZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpIC0gMiAqIGRhdGEubGVmdFBpeGVsVmFsdWUo
KSArIDIgKiBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpIC0gZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUo
KSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpLAotICAgICAgICAgICAgICAgICAgICAtMS4w
ZiAvIDQuMGYsIC1kYXRhLnVwTGVmdFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLnVwUGl4ZWxWYWx1
ZSgpIC0gZGF0YS51cFJpZ2h0UGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUo
KSArIDIgKiBkYXRhLmRvd25QaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25SaWdodFBpeGVsVmFsdWUo
KSk7CisgICAgICAgICAgICBvZmZzZXQgPSB5ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZSArIGNQaXhlbFNpemU7CisgICAgICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEu
d2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVsU2l6ZSkgeworICAgICAg
ICAgICAgICAgIGRhdGEuaW50ZXJpb3Iob2Zmc2V0LCBub3JtYWxWZWN0b3IpOworICAgICAgICAg
ICAgICAgIGlubGluZVNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCB5LCBj
RmFjdG9yMWRpdjQsIGNGYWN0b3IxZGl2NCwgbm9ybWFsVmVjdG9yKTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgfQogICAgIH0KIAotICAgIGludCB0b3RhbFNpemUgPSBkYXRhLndpZHRoTXVsdGlw
bGllZEJ5UGl4ZWxTaXplICogaGVpZ2h0OworICAgIGludCBsYXN0UGl4ZWwgPSBkYXRhLndpZHRo
TXVsdGlwbGllZEJ5UGl4ZWxTaXplICogaGVpZ2h0OwogICAgIGlmIChtX2xpZ2h0aW5nVHlwZSA9
PSBEaWZmdXNlTGlnaHRpbmcpIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDM7IGkgPCB0b3RhbFNp
emU7IGkgKz0gNCkKKyAgICAgICAgZm9yIChpbnQgaSA9IGNBbHBoYUNoYW5uZWxPZmZzZXQ7IGkg
PCBsYXN0UGl4ZWw7IGkgKz0gY1BpeGVsU2l6ZSkKICAgICAgICAgICAgIGRhdGEucGl4ZWxzLT5z
ZXQoaSwgY09wYXF1ZUFscGhhKTsKICAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IHRvdGFsU2l6ZTsgaSArPSA0KSB7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
bGFzdFBpeGVsOyBpICs9IGNQaXhlbFNpemUpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIg
YTEgPSBkYXRhLnBpeGVscy0+Z2V0KGkpOwogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhMiA9
IGRhdGEucGl4ZWxzLT5nZXQoaSArIDEpOwogICAgICAgICAgICAgdW5zaWduZWQgY2hhciBhMyA9
IGRhdGEucGl4ZWxzLT5nZXQoaSArIDIpOwpAQCAtMjUzLDggKzM0Miw4IEBAIHZvaWQgRkVMaWdo
dGluZzo6YXBwbHkoRmlsdGVyKiBmaWx0ZXIpCiAgICAgc2V0SXNBbHBoYUltYWdlKGZhbHNlKTsK
IAogICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0
SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBSZWZQdHI8SW1hZ2VEYXRh
PiBzcmNJbWFnZURhdGEoaW4tPnJlc3VsdEltYWdlKCktPmdldFVubXVsdGlwbGllZEltYWdlRGF0
YShlZmZlY3REcmF3aW5nUmVjdCkpOwotICAgIENhbnZhc1BpeGVsQXJyYXkqIHNyY1BpeGVsQXJy
YXkoc3JjSW1hZ2VEYXRhLT5kYXRhKCkpOworICAgIFJlZlB0cjxJbWFnZURhdGE+IHNyY0ltYWdl
RGF0YSA9IGluLT5yZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0
RHJhd2luZ1JlY3QpOworICAgIEJ5dGVBcnJheSogc3JjUGl4ZWxBcnJheSA9IHNyY0ltYWdlRGF0
YS0+ZGF0YSgpLT5kYXRhKCk7CiAKICAgICAvLyBGSVhNRTogc3VwcG9ydCBrZXJuZWxVbml0TGVu
Z3RocyBvdGhlciB0aGFuICgxLDEpLiBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IHRoZSBXMwogICAg
IC8vIHN0YW5kYXJkIGhhcyBubyB0ZXN0IGNhc2UgZm9yIHRoZW0sIGFuZCBvdGhlciBicm93c2Vy
cyAobGlrZSBGaXJlZm94KSBoYXMgc3RyYW5nZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKaW5kZXggYmQ1NmNlZS4uMjIzY2U1OCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGluZy5oCkBAIC0zMiwxNCAr
MzIsMTIgQEAKICNpbmNsdWRlICJGaWx0ZXIuaCIKICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIK
ICNpbmNsdWRlICJMaWdodFNvdXJjZS5oIgotI2luY2x1ZGUgPHd0Zi9BbHdheXNJbmxpbmUuaD4K
KyNpbmNsdWRlIDx3dGYvQnl0ZUFycmF5Lmg+CiAKIC8vIENvbW1vbiBiYXNlIGNsYXNzIGZvciBG
RURpZmZ1c2VMaWdodGluZyBhbmQgRkVTcGVjdWxhckxpZ2h0aW5nCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgQ2FudmFzUGl4ZWxBcnJheTsKLQogY2xhc3MgRkVMaWdodGluZyA6IHB1
YmxpYyBGaWx0ZXJFZmZlY3QgewogcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhcHBseShGaWx0
ZXIqKTsKQEAgLTUzLDMxICs1MSwzMyBAQCBwcm90ZWN0ZWQ6CiAgICAgfTsKIAogICAgIHN0cnVj
dCBMaWdodGluZ0RhdGEgewotICAgICAgICBGbG9hdFBvaW50M0Qgbm9ybWFsVmVjdG9yOwotICAg
ICAgICBDYW52YXNQaXhlbEFycmF5KiBwaXhlbHM7Ci0gICAgICAgIGZsb2F0IGxpZ2h0U3RyZW5n
dGg7CisgICAgICAgIC8vIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIG9ubHkgcmVhZC1vbmx5IChT
TVAgc2FmZSkgZGF0YQorICAgICAgICBCeXRlQXJyYXkqIHBpeGVsczsKICAgICAgICAgZmxvYXQg
c3VyZmFjZVNjYWxlOwotICAgICAgICBpbnQgb2Zmc2V0OwogICAgICAgICBpbnQgd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemU7CiAgICAgICAgIGludCB3aWR0aERlY3JlYXNlZEJ5T25lOwogICAg
ICAgICBpbnQgaGVpZ2h0RGVjcmVhc2VkQnlPbmU7CiAKLSAgICAgICAgQUxXQVlTX0lOTElORSBp
bnQgdXBMZWZ0UGl4ZWxWYWx1ZSgpOwotICAgICAgICBBTFdBWVNfSU5MSU5FIGludCB1cFBpeGVs
VmFsdWUoKTsKLSAgICAgICAgQUxXQVlTX0lOTElORSBpbnQgdXBSaWdodFBpeGVsVmFsdWUoKTsK
LSAgICAgICAgQUxXQVlTX0lOTElORSBpbnQgbGVmdFBpeGVsVmFsdWUoKTsKLSAgICAgICAgQUxX
QVlTX0lOTElORSBpbnQgY2VudGVyUGl4ZWxWYWx1ZSgpOwotICAgICAgICBBTFdBWVNfSU5MSU5F
IGludCByaWdodFBpeGVsVmFsdWUoKTsKLSAgICAgICAgQUxXQVlTX0lOTElORSBpbnQgZG93bkxl
ZnRQaXhlbFZhbHVlKCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50IGRvd25QaXhlbFZhbHVl
KCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50IGRvd25SaWdodFBpeGVsVmFsdWUoKTsKKyAg
ICAgICAgaW5saW5lIHZvaWQgdG9wTGVmdChpbnQgb2Zmc2V0LCBJbnRQb2ludCYgbm9ybWFsVmVj
dG9yKTsKKyAgICAgICAgaW5saW5lIHZvaWQgdG9wUm93KGludCBvZmZzZXQsIEludFBvaW50JiBu
b3JtYWxWZWN0b3IpOworICAgICAgICBpbmxpbmUgdm9pZCB0b3BSaWdodChpbnQgb2Zmc2V0LCBJ
bnRQb2ludCYgbm9ybWFsVmVjdG9yKTsKKyAgICAgICAgaW5saW5lIHZvaWQgbGVmdENvbHVtbihp
bnQgb2Zmc2V0LCBJbnRQb2ludCYgbm9ybWFsVmVjdG9yKTsKKyAgICAgICAgaW5saW5lIHZvaWQg
aW50ZXJpb3IoaW50IG9mZnNldCwgSW50UG9pbnQmIG5vcm1hbFZlY3Rvcik7CisgICAgICAgIGlu
bGluZSB2b2lkIHJpZ2h0Q29sdW1uKGludCBvZmZzZXQsIEludFBvaW50JiBub3JtYWxWZWN0b3Ip
OworICAgICAgICBpbmxpbmUgdm9pZCBib3R0b21MZWZ0KGludCBvZmZzZXQsIEludFBvaW50JiBu
b3JtYWxWZWN0b3IpOworICAgICAgICBpbmxpbmUgdm9pZCBib3R0b21Sb3coaW50IG9mZnNldCwg
SW50UG9pbnQmIG5vcm1hbFZlY3Rvcik7CisgICAgICAgIGlubGluZSB2b2lkIGJvdHRvbVJpZ2h0
KGludCBvZmZzZXQsIEludFBvaW50JiBub3JtYWxWZWN0b3IpOwogICAgIH07CiAKICAgICBGRUxp
Z2h0aW5nKExpZ2h0aW5nVHlwZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBm
bG9hdCwgZmxvYXQsIGZsb2F0LCBQYXNzUmVmUHRyPExpZ2h0U291cmNlPik7CiAKLSAgICBib29s
IGRyYXdMaWdodGluZyhDYW52YXNQaXhlbEFycmF5KiwgaW50LCBpbnQpOwotICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBzZXRQaXhlbChMaWdodGluZ0RhdGEmLCBMaWdodFNvdXJjZTo6UGFpbnRpbmdE
YXRhJiwKLSAgICAgICAgaW50IGxpZ2h0WCwgaW50IGxpZ2h0WSwgZmxvYXQgZmFjdG9yWCwgaW50
IG5vcm1hbFgsIGZsb2F0IGZhY3RvclksIGludCBub3JtYWxZKTsKKyAgICBib29sIGRyYXdMaWdo
dGluZyhCeXRlQXJyYXkqLCBpbnQsIGludCk7CisgICAgaW5saW5lIHZvaWQgaW5saW5lU2V0UGl4
ZWwoaW50IG9mZnNldCwgTGlnaHRpbmdEYXRhJiwgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYs
CisgICAgICAgIGludCBsaWdodFgsIGludCBsaWdodFksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZh
Y3RvclksIEludFBvaW50JiBub3JtYWxWZWN0b3IpOworCisgICAgLy8gTm90IHdvcnRoIHRvIGlu
bGluZSBldmVyeSBvY2N1cmVuY2Ugb2Ygc2V0UGl4ZWwuCisgICAgdm9pZCBzZXRQaXhlbChpbnQg
b2Zmc2V0LCBMaWdodGluZ0RhdGEmLCBMaWdodFNvdXJjZTo6UGFpbnRpbmdEYXRhJiwKKyAgICAg
ICAgaW50IGxpZ2h0WCwgaW50IGxpZ2h0WSwgZmxvYXQgZmFjdG9yWCwgZmxvYXQgZmFjdG9yWSwg
SW50UG9pbnQmIG5vcm1hbFZlY3Rvcik7CiAKICAgICBMaWdodGluZ1R5cGUgbV9saWdodGluZ1R5
cGU7CiAgICAgUmVmUHRyPExpZ2h0U291cmNlPiBtX2xpZ2h0U291cmNlOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5jcHAKaW5kZXggYTgwYjE0
Yi4uZGUwNjkxZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0xpZ2h0U291cmNlLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
TGlnaHRTb3VyY2UuY3BwCkBAIC00Miw3ICs0Miw3IEBAIHZvaWQgUG9pbnRMaWdodFNvdXJjZTo6
dXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50
CiAgICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFgobV9wb3NpdGlvbi54KCkgLSB4KTsK
ICAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WShtX3Bvc2l0aW9uLnkoKSAtIHkpOwog
ICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRaKG1fcG9zaXRpb24ueigpIC0geik7Ci0g
ICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLm5vcm1hbGl6ZSgpOworICAgIHBhaW50aW5nRGF0
YS5saWdodFZlY3Rvckxlbmd0aCA9IHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5sZW5ndGgoKTsK
IH0KIAogLy8gc3BvdC1saWdodCBlZGdlIGRhcmtlbmluZyBkZXBlbmRzIG9uIGFuIGFic29sdXRl
IHRyZXNob2xkCkBAIC04NCw5ICs4NCw5IEBAIHZvaWQgU3BvdExpZ2h0U291cmNlOjp1cGRhdGVQ
YWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEsIGludCB4LCBpbnQKICAgICBw
YWludGluZ0RhdGEubGlnaHRWZWN0b3Iuc2V0WChtX3Bvc2l0aW9uLngoKSAtIHgpOwogICAgIHBh
aW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRZKG1fcG9zaXRpb24ueSgpIC0geSk7CiAgICAgcGFp
bnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFoobV9wb3NpdGlvbi56KCkgLSB6KTsKLSAgICBwYWlu
dGluZ0RhdGEubGlnaHRWZWN0b3Iubm9ybWFsaXplKCk7CisgICAgcGFpbnRpbmdEYXRhLmxpZ2h0
VmVjdG9yTGVuZ3RoID0gcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLmxlbmd0aCgpOwogCi0gICAg
ZmxvYXQgY29zaW5lT2ZBbmdsZSA9IHBhaW50aW5nRGF0YS5saWdodFZlY3RvciAqIHBhaW50aW5n
RGF0YS5kaXJlY3Rpb25WZWN0b3I7CisgICAgZmxvYXQgY29zaW5lT2ZBbmdsZSA9IChwYWludGlu
Z0RhdGEubGlnaHRWZWN0b3IgKiBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVjdG9yKSAvIHBhaW50
aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aDsKICAgICBpZiAoY29zaW5lT2ZBbmdsZSA+IHBhaW50
aW5nRGF0YS5jb25lQ3V0T2ZmTGltaXQpIHsKICAgICAgICAgLy8gTm8gbGlnaHQgaXMgcHJvZHVj
ZWQsIHNjYW5saW5lcyBhcmUgbm90IHVwZGF0ZWQKICAgICAgICAgcGFpbnRpbmdEYXRhLmNvbG9y
VmVjdG9yLnNldFgoMC4wZik7CkBAIC0xMjcsNiArMTI3LDcgQEAgdm9pZCBEaXN0YW50TGlnaHRT
b3VyY2U6OmluaXRQYWludGluZ0RhdGEoUGFpbnRpbmdEYXRhJiBwYWludGluZ0RhdGEpCiAgICAg
cGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFgoY29zZihhemltdXRoKSAqIGNvc2YoZWxldmF0
aW9uKSk7CiAgICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFkoc2luZihhemltdXRoKSAq
IGNvc2YoZWxldmF0aW9uKSk7CiAgICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yLnNldFooc2lu
ZihlbGV2YXRpb24pKTsKKyAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGggPSAxOwog
fQogCiB2b2lkIERpc3RhbnRMaWdodFNvdXJjZTo6dXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50aW5n
RGF0YSYsIGludCwgaW50LCBmbG9hdCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0xpZ2h0U291cmNlLmgKaW5kZXggMmU0YzU3OS4uMDEzZTkxMCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmgKQEAgLTUxLDYgKzUx
LDcgQEAgcHVibGljOgogICAgICAgICAvLyBTVkdGRUxpZ2h0aW5nIGFsc28gdXNlIHRoZW0KICAg
ICAgICAgRmxvYXRQb2ludDNEIGxpZ2h0VmVjdG9yOwogICAgICAgICBGbG9hdFBvaW50M0QgY29s
b3JWZWN0b3I7CisgICAgICAgIGZsb2F0IGxpZ2h0VmVjdG9yTGVuZ3RoOwogICAgICAgICAvLyBQ
cml2YXRlIG1lbWJlcnMKICAgICAgICAgRmxvYXRQb2ludDNEIGRpcmVjdGlvblZlY3RvcjsKICAg
ICAgICAgRmxvYXRQb2ludDNEIHByaXZhdGVDb2xvclZlY3RvcjsKLS0gCjEuNi4wLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>72664</attachid>
            <date>2010-11-02 07:51:59 -0700</date>
            <delta_ts>2010-11-02 14:25:53 -0700</delta_ts>
            <desc>final patch</desc>
            <filename>0001-light-filterB.patch</filename>
            <type>text/plain</type>
            <size>32126</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSA0NzQyZmJkODRmMTZmZTA1OWJiMmM3NTJhZTM0ZGY2YjM4OWRhZTJjIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBUdWUsIDIgTm92IDIwMTAgMTU6NTA6MDggKzAxMDAKU3ViamVjdDogW1BBVENI
XSBsaWdodC1maWx0ZXJCCgpTaWduZWQtb2ZmLWJ5OiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdA
aW5mLnUtc3plZ2VkLmh1PgotLS0KIFdlYkNvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDM5ICsrKwogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFBvaW50M0QuY3BwICAgICAgICB8ICAgIDUgLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9G
bG9hdFBvaW50M0QuaCAgICAgICAgICB8ICAgIDIgKy0KIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUxpZ2h0aW5nLmNwcCAgfCAgMjc5ICsrKysrKysrKysrKysrLS0tLS0tLQog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaCAgICB8ICAgMzgg
KystLQogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcCB8
ICAgIDcgKy0KIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5o
ICAgfCAgICAxICsKIDcgZmlsZXMgY2hhbmdlZCwgMjQ4IGluc2VydGlvbnMoKyksIDEyMyBkZWxl
dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IDI3Y2JmYjAuLmM3YjI3YzAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTAtMTEtMDIgIFpv
bHRhbiBIZXJjemVnICA8emhlcmN6ZWdAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTVkcgRkVMaWdodGluZyBwZXJmb3JtYW5jZSBp
c3N1ZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQ4
MjEyCisKKyAgICAgICAgVGhpcyBwYXRjaCBzcGVlZHMtdXAgRkVMaWdodGluZyBmaWx0ZXIgcGFp
bnRpbmcgYnkgNDAlCisgICAgICAgIEl0IHJlZHVjZXMgdGhlIG51bWJlciBvZiBmbG9hdGluZyBw
b2ludCBvcGVyYXRpb25zIGFuZAorICAgICAgICBlbXBvbHlzIGZhc3RlciBwaXhlbCBtYW5pcHVs
YXRpb24gKGJvdGggZm9yIHJlYWQgYW5kCisgICAgICAgIHdyaXRlKS4gRnVydGhlcm1vcmUgdGhl
IGxlbmd0aCgpIG1lbWJlciBvZiBGbG9hdFBvaW50M0QKKyAgICAgICAgaXMgbWFkZSBpbmxpbmUg
dG8gc3BlZWQgdXAgdmVjdG9yIGxlbmd0aCBjYWxjdWxhdGlvbnMuCisKKyAgICAgICAgVGhlIGxp
Z2h0aW5nIGZpbHRlciBwaXhlbHMgdGVzdHMgYXJlIGNvdmVyIHRoaXMgcGF0Y2guCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5oOgorICAgICAgICAoV2ViQ29yZTo6RmxvYXRQb2lu
dDNEOjpsZW5ndGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdo
dGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnRv
cExlZnQpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BS
b3cpOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSaWdo
dCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmxlZnRDb2x1
bW4pOgorICAgICAgICAoV2ViQ29yZTo6RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjppbnRlcmlv
cik6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJpZ2h0Q29s
dW1uKToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9t
TGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRv
bVJvdyk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmJvdHRv
bVJpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OmlubGluZVNldFBpeGVsKToK
KyAgICAgICAgKFdlYkNvcmU6OkZFTGlnaHRpbmc6OnNldFBpeGVsKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyk6CisgICAgICAgIChXZWJDb3JlOjpGRUxpZ2h0
aW5nOjphcHBseSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0
aW5nLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQb2ludExpZ2h0U291cmNlOjp1cGRhdGVQYWludGluZ0Rh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6U3BvdExpZ2h0U291cmNlOjp1cGRhdGVQYWludGluZ0Rh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6RGlzdGFudExpZ2h0U291cmNlOjppbml0UGFpbnRpbmdE
YXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmg6
CisKIDIwMTAtMTEtMDEgIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhbmllbCBCYXRlcy4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRQb2ludDNELmNwcAppbmRleCBiYjA1ZTdmLi5lZDE4MTZiIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwCkBAIC0zOCwxMCArMzgsNSBAQCB2
b2lkIEZsb2F0UG9pbnQzRDo6bm9ybWFsaXplKCkKICAgICB9CiB9CiAKLWZsb2F0IEZsb2F0UG9p
bnQzRDo6bGVuZ3RoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gc3FydGYobGVuZ3RoU3F1YXJlZCgp
KTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9GbG9hdFBvaW50M0QuaAppbmRleCA5ZWU1NDhkLi5iNmNiYWE4IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmgKQEAgLTExMyw4ICsxMTMsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogCi0gICAgZmxvYXQgbGVuZ3RoKCkgY29uc3Q7
CiAgICAgZmxvYXQgbGVuZ3RoU3F1YXJlZCgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPmRvdCgqdGhp
cyk7IH0KKyAgICBmbG9hdCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBzcXJ0ZihsZW5ndGhTcXVh
cmVkKCkpOyB9CiAKIHByaXZhdGU6CiAgICAgZmxvYXQgbV94OwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuY3BwCmluZGV4IGUxZGY1ODAuLmFiNzI1
NTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0
aW5nLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdodGlu
Zy5jcHAKQEAgLTU0LDg1ICs1NCwxODIgQEAgRkVMaWdodGluZzo6RkVMaWdodGluZyhMaWdodGlu
Z1R5cGUgbGlnaHRpbmdUeXBlLCBjb25zdCBDb2xvciYgbGlnaHRpbmdDb2xvciwgZmwKIGNvbnN0
IHN0YXRpYyBpbnQgY1BpeGVsU2l6ZSA9IDQ7CiBjb25zdCBzdGF0aWMgaW50IGNBbHBoYUNoYW5u
ZWxPZmZzZXQgPSAzOwogY29uc3Qgc3RhdGljIHVuc2lnbmVkIGNoYXIgY09wYXF1ZUFscGhhID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMHhmZik7Citjb25zdCBzdGF0aWMgZmxvYXQgY0Zh
Y3RvcjFkaXYyID0gLTEgLyAyLmY7Citjb25zdCBzdGF0aWMgZmxvYXQgY0ZhY3RvcjFkaXYzID0g
LTEgLyAzLmY7Citjb25zdCBzdGF0aWMgZmxvYXQgY0ZhY3RvcjFkaXY0ID0gLTEgLyA0LmY7Citj
b25zdCBzdGF0aWMgZmxvYXQgY0ZhY3RvcjJkaXYzID0gLTIgLyAzLmY7CiAKLUFMV0FZU19JTkxJ
TkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6dXBMZWZ0UGl4ZWxWYWx1ZSgpCisvLyA8
PCAxIGlzIHNpZ25lZCBtdWx0aXBseSBieSAyCitpbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpMaWdo
dGluZ0RhdGE6OnRvcExlZnQoaW50IG9mZnNldCwgSW50UG9pbnQmIG5vcm1hbFZlY3RvcikKIHsK
LSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgLSB3aWR0aE11
bHRpcGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7
CisgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5nZXQob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
KyAgICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IGJvdHRv
bSA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOworICAgIGludCBib3R0b21SaWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5n
ZXQob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBub3Jt
YWxWZWN0b3Iuc2V0WCgtKGNlbnRlciA8PCAxKSArIChyaWdodCA8PCAxKSAtIGJvdHRvbSArIGJv
dHRvbVJpZ2h0KTsKKyAgICBub3JtYWxWZWN0b3Iuc2V0WSgtKGNlbnRlciA8PCAxKSAtIHJpZ2h0
ICsgKGJvdHRvbSA8PCAxKSArIGJvdHRvbVJpZ2h0KTsKIH0KIAotQUxXQVlTX0lOTElORSBpbnQg
RkVMaWdodGluZzo6TGlnaHRpbmdEYXRhOjp1cFBpeGVsVmFsdWUoKQoraW5saW5lIHZvaWQgRkVM
aWdodGluZzo6TGlnaHRpbmdEYXRhOjp0b3BSb3coaW50IG9mZnNldCwgSW50UG9pbnQmIG5vcm1h
bFZlY3RvcikKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZz
ZXQgLSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
KyAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0IC0gY1Bp
eGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgY2VudGVyID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cisg
ICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCArPSB3aWR0aE11bHRp
cGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5nZXQob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsK
KyAgICBpbnQgYm90dG9tID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IGJvdHRvbVJpZ2h0ID0gc3RhdGljX2Nhc3Q8
aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNl
dCkpOworICAgIG5vcm1hbFZlY3Rvci5zZXRYKC0obGVmdCA8PCAxKSArIChyaWdodCA8PCAxKSAt
IGJvdHRvbUxlZnQgKyBib3R0b21SaWdodCk7CisgICAgbm9ybWFsVmVjdG9yLnNldFkoLWxlZnQg
LSAoY2VudGVyIDw8IDEpIC0gcmlnaHQgKyBib3R0b21MZWZ0ICsgKGJvdHRvbSA8PCAxKSArIGJv
dHRvbVJpZ2h0KTsKIH0KIAotQUxXQVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6TGlnaHRpbmdE
YXRhOjp1cFJpZ2h0UGl4ZWxWYWx1ZSgpCitpbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpMaWdodGlu
Z0RhdGE6OnRvcFJpZ2h0KGludCBvZmZzZXQsIEludFBvaW50JiBub3JtYWxWZWN0b3IpCiB7Ci0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0IC0gd2lkdGhNdWx0
aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOwor
ICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgLSBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCBjZW50ZXIgPSBzdGF0aWNf
Y2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAg
ICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IGJvdHRvbUxl
ZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCAtIGNQaXhlbFNpemUgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IGJvdHRvbSA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5nZXQob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG5vcm1hbFZl
Y3Rvci5zZXRYKC0obGVmdCA8PCAxKSArIChjZW50ZXIgPDwgMSkgLSBib3R0b21MZWZ0ICsgYm90
dG9tKTsKKyAgICBub3JtYWxWZWN0b3Iuc2V0WSgtbGVmdCAtIChjZW50ZXIgPDwgMSkgKyBib3R0
b21MZWZ0ICsgKGJvdHRvbSA8PCAxKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRp
bmc6OkxpZ2h0aW5nRGF0YTo6bGVmdFBpeGVsVmFsdWUoKQoraW5saW5lIHZvaWQgRkVMaWdodGlu
Zzo6TGlnaHRpbmdEYXRhOjpsZWZ0Q29sdW1uKGludCBvZmZzZXQsIEludFBvaW50JiBub3JtYWxW
ZWN0b3IpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0
IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgY2VudGVyID0g
c3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7CisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQg
KyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCAtPSB3aWR0
aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50Pihw
aXhlbHMtPmdldChvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcFJp
Z2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjUGl4ZWxTaXplICsg
Y0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBp
eGVsU2l6ZSA8PCAxOworICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+
Z2V0KG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgYm90dG9tUmlnaHQg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIGNQaXhlbFNpemUgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7CisgICAgbm9ybWFsVmVjdG9yLnNldFgoLXRvcCArIHRvcFJpZ2h0
IC0gKGNlbnRlciA8PCAxKSArIChyaWdodCA8PCAxKSAtIGJvdHRvbSArIGJvdHRvbVJpZ2h0KTsK
KyAgICBub3JtYWxWZWN0b3Iuc2V0WSgtKHRvcCA8PCAxKSAtIHRvcFJpZ2h0ICsgKGJvdHRvbSA8
PCAxKSArIGJvdHRvbVJpZ2h0KTsKIH0KIAotQUxXQVlTX0lOTElORSBpbnQgRkVMaWdodGluZzo6
TGlnaHRpbmdEYXRhOjpjZW50ZXJQaXhlbFZhbHVlKCkKK2lubGluZSB2b2lkIEZFTGlnaHRpbmc6
OkxpZ2h0aW5nRGF0YTo6aW50ZXJpb3IoaW50IG9mZnNldCwgSW50UG9pbnQmIG5vcm1hbFZlY3Rv
cikKIHsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBj
QWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBp
eGVscy0+Z2V0KG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cisg
ICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjUGl4
ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCAtPSB3aWR0aE11bHRp
cGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgdG9wTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5nZXQob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAg
ICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjQWxwaGFD
aGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhl
bHMtPmdldChvZmZzZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAg
IG9mZnNldCArPSB3aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA8PCAxOworICAgIGludCBib3R0
b21MZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgLSBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCBib3R0b20gPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQg
Ym90dG9tUmlnaHQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIGNQaXhl
bFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgbm9ybWFsVmVjdG9yLnNldFgoLXRv
cExlZnQgKyB0b3BSaWdodCAtIChsZWZ0IDw8IDEpICsgKHJpZ2h0IDw8IDEpIC0gYm90dG9tTGVm
dCArIGJvdHRvbVJpZ2h0KTsKKyAgICBub3JtYWxWZWN0b3Iuc2V0WSgtdG9wTGVmdCAtICh0b3Ag
PDwgMSkgLSB0b3BSaWdodCArIGJvdHRvbUxlZnQgKyAoYm90dG9tIDw8IDEpICsgYm90dG9tUmln
aHQpOwogfQogCi1BTFdBWVNfSU5MSU5FIGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJp
Z2h0UGl4ZWxWYWx1ZSgpCitpbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OnJp
Z2h0Q29sdW1uKGludCBvZmZzZXQsIEludFBvaW50JiBub3JtYWxWZWN0b3IpCiB7Ci0gICAgcmV0
dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNB
bHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgbGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4
ZWxzLT5nZXQob2Zmc2V0IC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAg
ICBpbnQgY2VudGVyID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjQWxw
aGFDaGFubmVsT2Zmc2V0KSk7CisgICAgb2Zmc2V0IC09IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplOworICAgIGludCB0b3BMZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZz
ZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCB0b3AgPSBz
dGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKKyAgICBvZmZzZXQgKz0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgPDwgMTsKKyAgICBp
bnQgYm90dG9tTGVmdCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0IC0gY1Bp
eGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgYm90dG9tID0gc3RhdGlj
X2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7Cisg
ICAgbm9ybWFsVmVjdG9yLnNldFgoLXRvcExlZnQgKyB0b3AgLSAobGVmdCA8PCAxKSArIChjZW50
ZXIgPDwgMSkgLSBib3R0b21MZWZ0ICsgYm90dG9tKTsKKyAgICBub3JtYWxWZWN0b3Iuc2V0WSgt
dG9wTGVmdCAtICh0b3AgPDwgMSkgKyBib3R0b21MZWZ0ICsgKGJvdHRvbSA8PCAxKSk7CiB9CiAK
LUFMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6ZG93bkxlZnRQaXhl
bFZhbHVlKCkKK2lubGluZSB2b2lkIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tTGVm
dChpbnQgb2Zmc2V0LCBJbnRQb2ludCYgbm9ybWFsVmVjdG9yKQogewotICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxT
aXplIC0gY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBpbnQgY2VudGVy
ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zm
c2V0KSk7CisgICAgaW50IHJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZz
ZXQgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG9mZnNldCAtPSB3
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBpbnQgdG9wID0gc3RhdGljX2Nhc3Q8aW50
PihwaXhlbHMtPmdldChvZmZzZXQgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRv
cFJpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZzZXQgKyBjUGl4ZWxTaXpl
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG5vcm1hbFZlY3Rvci5zZXRYKC10b3AgKyB0
b3BSaWdodCAtIChjZW50ZXIgPDwgMSkgKyAocmlnaHQgPDwgMSkpOworICAgIG5vcm1hbFZlY3Rv
ci5zZXRZKC0odG9wIDw8IDEpIC0gdG9wUmlnaHQgKyAoY2VudGVyIDw8IDEpICsgcmlnaHQpOwog
fQogCi1BTFdBWVNfSU5MSU5FIGludCBGRUxpZ2h0aW5nOjpMaWdodGluZ0RhdGE6OmRvd25QaXhl
bFZhbHVlKCkKK2lubGluZSB2b2lkIEZFTGlnaHRpbmc6OkxpZ2h0aW5nRGF0YTo6Ym90dG9tUm93
KGludCBvZmZzZXQsIEludFBvaW50JiBub3JtYWxWZWN0b3IpCiB7Ci0gICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IGxlZnQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHBpeGVscy0+Z2V0KG9mZnNldCAtIGNQaXhlbFNpemUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0
KSk7CisgICAgaW50IGNlbnRlciA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0
ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCByaWdodCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgY1BpeGVsU2l6ZSArIGNBbHBoYUNoYW5uZWxPZmZzZXQp
KTsKKyAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50IHRv
cExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCAtIGNQaXhlbFNpemUg
KyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGludD4o
cGl4ZWxzLT5nZXQob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCB0b3BS
aWdodCA9IHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgY1BpeGVsU2l6ZSAr
IGNBbHBoYUNoYW5uZWxPZmZzZXQpKTsKKyAgICBub3JtYWxWZWN0b3Iuc2V0WCgtdG9wTGVmdCAr
IHRvcFJpZ2h0IC0gKGxlZnQgPDwgMSkgKyAocmlnaHQgPDwgMSkpOworICAgIG5vcm1hbFZlY3Rv
ci5zZXRZKC10b3BMZWZ0IC0gKHRvcCA8PCAxKSAtIHRvcFJpZ2h0ICsgbGVmdCArIChjZW50ZXIg
PDwgMSkgKyByaWdodCk7CiB9CiAKLUFMV0FZU19JTkxJTkUgaW50IEZFTGlnaHRpbmc6OkxpZ2h0
aW5nRGF0YTo6ZG93blJpZ2h0UGl4ZWxWYWx1ZSgpCitpbmxpbmUgdm9pZCBGRUxpZ2h0aW5nOjpM
aWdodGluZ0RhdGE6OmJvdHRvbVJpZ2h0KGludCBvZmZzZXQsIEludFBvaW50JiBub3JtYWxWZWN0
b3IpCiB7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsg
d2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9m
ZnNldCkpOworICAgIGludCBsZWZ0ID0gc3RhdGljX2Nhc3Q8aW50PihwaXhlbHMtPmdldChvZmZz
ZXQgLSBjUGl4ZWxTaXplICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIGludCBjZW50ZXIg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCArIGNBbHBoYUNoYW5uZWxPZmZz
ZXQpKTsKKyAgICBvZmZzZXQgLT0gd2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemU7CisgICAgaW50
IHRvcExlZnQgPSBzdGF0aWNfY2FzdDxpbnQ+KHBpeGVscy0+Z2V0KG9mZnNldCAtIGNQaXhlbFNp
emUgKyBjQWxwaGFDaGFubmVsT2Zmc2V0KSk7CisgICAgaW50IHRvcCA9IHN0YXRpY19jYXN0PGlu
dD4ocGl4ZWxzLT5nZXQob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpOworICAgIG5vcm1h
bFZlY3Rvci5zZXRYKC10b3BMZWZ0ICsgdG9wIC0gKGxlZnQgPDwgMSkgKyAoY2VudGVyIDw8IDEp
KTsKKyAgICBub3JtYWxWZWN0b3Iuc2V0WSgtdG9wTGVmdCAtICh0b3AgPDwgMSkgKyBsZWZ0ICsg
KGNlbnRlciA8PCAxKSk7CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBGRUxpZ2h0aW5nOjpzZXRQ
aXhlbChMaWdodGluZ0RhdGEmIGRhdGEsIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50
aW5nRGF0YSwKLSAgICBpbnQgbGlnaHRYLCBpbnQgbGlnaHRZLCBmbG9hdCBmYWN0b3JYLCBpbnQg
bm9ybWFsWCwgZmxvYXQgZmFjdG9yWSwgaW50IG5vcm1hbFkpCitpbmxpbmUgdm9pZCBGRUxpZ2h0
aW5nOjppbmxpbmVTZXRQaXhlbChpbnQgb2Zmc2V0LCBMaWdodGluZ0RhdGEmIGRhdGEsIExpZ2h0
U291cmNlOjpQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwKKyAgICBpbnQgbGlnaHRYLCBpbnQg
bGlnaHRZLCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRQb2ludCYgbm9ybWFsMkRW
ZWN0b3IpCiB7Ci0gICAgbV9saWdodFNvdXJjZS0+dXBkYXRlUGFpbnRpbmdEYXRhKHBhaW50aW5n
RGF0YSwgbGlnaHRYLCBsaWdodFksIHN0YXRpY19jYXN0PGZsb2F0PihkYXRhLnBpeGVscy0+Z2V0
KGRhdGEub2Zmc2V0ICsgMykpICogZGF0YS5zdXJmYWNlU2NhbGUpOwotCi0gICAgZGF0YS5ub3Jt
YWxWZWN0b3Iuc2V0WChmYWN0b3JYICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbFgpICogZGF0
YS5zdXJmYWNlU2NhbGUpOwotICAgIGRhdGEubm9ybWFsVmVjdG9yLnNldFkoZmFjdG9yWSAqIHN0
YXRpY19jYXN0PGZsb2F0Pihub3JtYWxZKSAqIGRhdGEuc3VyZmFjZVNjYWxlKTsKLSAgICBkYXRh
Lm5vcm1hbFZlY3Rvci5zZXRaKDEuMGYpOwotICAgIGRhdGEubm9ybWFsVmVjdG9yLm5vcm1hbGl6
ZSgpOwotCi0gICAgaWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdo
dGluZykKLSAgICAgICAgZGF0YS5saWdodFN0cmVuZ3RoID0gbV9kaWZmdXNlQ29uc3RhbnQgKiAo
ZGF0YS5ub3JtYWxWZWN0b3IgKiBwYWludGluZ0RhdGEubGlnaHRWZWN0b3IpOwotICAgIGVsc2Ug
ewotICAgICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9IHBhaW50aW5nRGF0YS5saWdo
dFZlY3RvcjsKLSAgICAgICAgaGFsZndheVZlY3Rvci5zZXRaKGhhbGZ3YXlWZWN0b3IueigpICsg
MS4wZik7Ci0gICAgICAgIGhhbGZ3YXlWZWN0b3Iubm9ybWFsaXplKCk7Ci0gICAgICAgIGlmICht
X3NwZWN1bGFyRXhwb25lbnQgPT0gMS4wZikKLSAgICAgICAgICAgIGRhdGEubGlnaHRTdHJlbmd0
aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIChkYXRhLm5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0
b3IpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBkYXRhLmxpZ2h0U3RyZW5ndGggPSBtX3Nw
ZWN1bGFyQ29uc3RhbnQgKiBwb3dmKGRhdGEubm9ybWFsVmVjdG9yICogaGFsZndheVZlY3Rvciwg
bV9zcGVjdWxhckV4cG9uZW50KTsKKyAgICBtX2xpZ2h0U291cmNlLT51cGRhdGVQYWludGluZ0Rh
dGEocGFpbnRpbmdEYXRhLCBsaWdodFgsIGxpZ2h0WSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGRhdGEu
cGl4ZWxzLT5nZXQob2Zmc2V0ICsgY0FscGhhQ2hhbm5lbE9mZnNldCkpICogZGF0YS5zdXJmYWNl
U2NhbGUpOworCisgICAgZmxvYXQgbGlnaHRTdHJlbmd0aDsKKyAgICBpZiAoIW5vcm1hbDJEVmVj
dG9yLngoKSAmJiAhbm9ybWFsMkRWZWN0b3IueSgpKSB7CisgICAgICAgIC8vIE5vcm1hbCB2ZWN0
b3IgaXMgKDAsIDAsIDEpLiBUaGlzIGlzIGEgcXVpdGUgZnJlcXVlbnQgY2FzZS4KKyAgICAgICAg
aWYgKG1fbGlnaHRpbmdUeXBlID09IEZFTGlnaHRpbmc6OkRpZmZ1c2VMaWdodGluZykKKyAgICAg
ICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX2RpZmZ1c2VDb25zdGFudCAqIHBhaW50aW5nRGF0YS5s
aWdodFZlY3Rvci56KCkgLyBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGg7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgRmxvYXRQb2ludDNEIGhhbGZ3YXlWZWN0b3IgPSBwYWludGlu
Z0RhdGEubGlnaHRWZWN0b3I7CisgICAgICAgICAgICBoYWxmd2F5VmVjdG9yLnNldFooaGFsZndh
eVZlY3Rvci56KCkgKyBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5ndGgpOworICAgICAgICAg
ICAgZmxvYXQgaGFsZndheVZlY3Rvckxlbmd0aCA9IGhhbGZ3YXlWZWN0b3IubGVuZ3RoKCk7Cisg
ICAgICAgICAgICBpZiAobV9zcGVjdWxhckV4cG9uZW50ID09IDEpCisgICAgICAgICAgICAgICAg
bGlnaHRTdHJlbmd0aCA9IG1fc3BlY3VsYXJDb25zdGFudCAqIGhhbGZ3YXlWZWN0b3IueigpIC8g
aGFsZndheVZlY3Rvckxlbmd0aDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBs
aWdodFN0cmVuZ3RoID0gbV9zcGVjdWxhckNvbnN0YW50ICogcG93ZihoYWxmd2F5VmVjdG9yLnoo
KSAvIGhhbGZ3YXlWZWN0b3JMZW5ndGgsIG1fc3BlY3VsYXJFeHBvbmVudCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgeworICAgICAgICBGbG9hdFBvaW50M0Qgbm9ybWFsVmVjdG9yOworICAgICAg
ICBub3JtYWxWZWN0b3Iuc2V0WChmYWN0b3JYICogc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5vcm1hbDJE
VmVjdG9yLngoKSkgKiBkYXRhLnN1cmZhY2VTY2FsZSk7CisgICAgICAgIG5vcm1hbFZlY3Rvci5z
ZXRZKGZhY3RvclkgKiBzdGF0aWNfY2FzdDxmbG9hdD4obm9ybWFsMkRWZWN0b3IueSgpKSAqIGRh
dGEuc3VyZmFjZVNjYWxlKTsKKyAgICAgICAgbm9ybWFsVmVjdG9yLnNldFooMSk7CisgICAgICAg
IGZsb2F0IG5vcm1hbFZlY3Rvckxlbmd0aCA9IG5vcm1hbFZlY3Rvci5sZW5ndGgoKTsKKworICAg
ICAgICBpZiAobV9saWdodGluZ1R5cGUgPT0gRkVMaWdodGluZzo6RGlmZnVzZUxpZ2h0aW5nKQor
ICAgICAgICAgICAgbGlnaHRTdHJlbmd0aCA9IG1fZGlmZnVzZUNvbnN0YW50ICogKG5vcm1hbFZl
Y3RvciAqIHBhaW50aW5nRGF0YS5saWdodFZlY3RvcikgLyAobm9ybWFsVmVjdG9yTGVuZ3RoICog
cGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBGbG9hdFBvaW50M0QgaGFsZndheVZlY3RvciA9IHBhaW50aW5nRGF0YS5saWdodFZlY3Rv
cjsKKyAgICAgICAgICAgIGhhbGZ3YXlWZWN0b3Iuc2V0WihoYWxmd2F5VmVjdG9yLnooKSArIHBh
aW50aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCk7CisgICAgICAgICAgICBmbG9hdCBoYWxmd2F5
VmVjdG9yTGVuZ3RoID0gaGFsZndheVZlY3Rvci5sZW5ndGgoKTsKKyAgICAgICAgICAgIGlmICht
X3NwZWN1bGFyRXhwb25lbnQgPT0gMSkKKyAgICAgICAgICAgICAgICBsaWdodFN0cmVuZ3RoID0g
bV9zcGVjdWxhckNvbnN0YW50ICogKG5vcm1hbFZlY3RvciAqIGhhbGZ3YXlWZWN0b3IpIC8gKG5v
cm1hbFZlY3Rvckxlbmd0aCAqIGhhbGZ3YXlWZWN0b3JMZW5ndGgpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGxpZ2h0U3RyZW5ndGggPSBtX3NwZWN1bGFyQ29uc3RhbnQgKiBw
b3dmKChub3JtYWxWZWN0b3IgKiBoYWxmd2F5VmVjdG9yKSAvIChub3JtYWxWZWN0b3JMZW5ndGgg
KiBoYWxmd2F5VmVjdG9yTGVuZ3RoKSwgbV9zcGVjdWxhckV4cG9uZW50KTsKKyAgICAgICAgfQog
ICAgIH0KIAotICAgIGlmIChkYXRhLmxpZ2h0U3RyZW5ndGggPiAxLjBmKQotICAgICAgICBkYXRh
LmxpZ2h0U3RyZW5ndGggPSAxLjBmOwotICAgIGlmIChkYXRhLmxpZ2h0U3RyZW5ndGggPCAwLjBm
KQotICAgICAgICBkYXRhLmxpZ2h0U3RyZW5ndGggPSAwLjBmOworICAgIGlmIChsaWdodFN0cmVu
Z3RoID4gMSkKKyAgICAgICAgbGlnaHRTdHJlbmd0aCA9IDE7CisgICAgaWYgKGxpZ2h0U3RyZW5n
dGggPCAwKQorICAgICAgICBsaWdodFN0cmVuZ3RoID0gMDsKIAotICAgIGRhdGEucGl4ZWxzLT5z
ZXQoZGF0YS5vZmZzZXQsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGRhdGEubGlnaHRTdHJl
bmd0aCAqIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci54KCkpKTsKLSAgICBkYXRhLnBpeGVscy0+
c2V0KGRhdGEub2Zmc2V0ICsgMSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oZGF0YS5saWdo
dFN0cmVuZ3RoICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnkoKSkpOwotICAgIGRhdGEucGl4
ZWxzLT5zZXQoZGF0YS5vZmZzZXQgKyAyLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihkYXRh
LmxpZ2h0U3RyZW5ndGggKiBwYWludGluZ0RhdGEuY29sb3JWZWN0b3IueigpKSk7CisgICAgZGF0
YS5waXhlbHMtPnNldChvZmZzZXQsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGxpZ2h0U3Ry
ZW5ndGggKiBwYWludGluZ0RhdGEuY29sb3JWZWN0b3IueCgpKSk7CisgICAgZGF0YS5waXhlbHMt
PnNldChvZmZzZXQgKyAxLCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihsaWdodFN0cmVuZ3Ro
ICogcGFpbnRpbmdEYXRhLmNvbG9yVmVjdG9yLnkoKSkpOworICAgIGRhdGEucGl4ZWxzLT5zZXQo
b2Zmc2V0ICsgMiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4obGlnaHRTdHJlbmd0aCAqIHBh
aW50aW5nRGF0YS5jb2xvclZlY3Rvci56KCkpKTsKK30KKwordm9pZCBGRUxpZ2h0aW5nOjpzZXRQ
aXhlbChpbnQgb2Zmc2V0LCBMaWdodGluZ0RhdGEmIGRhdGEsIExpZ2h0U291cmNlOjpQYWludGlu
Z0RhdGEmIHBhaW50aW5nRGF0YSwKKyAgICBpbnQgbGlnaHRYLCBpbnQgbGlnaHRZLCBmbG9hdCBm
YWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRQb2ludCYgbm9ybWFsVmVjdG9yKQoreworICAgIGlu
bGluZVNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRpbmdEYXRhLCBsaWdodFgsIGxpZ2h0WSwg
ZmFjdG9yWCwgZmFjdG9yWSwgbm9ybWFsVmVjdG9yKTsKIH0KIAotYm9vbCBGRUxpZ2h0aW5nOjpk
cmF3TGlnaHRpbmcoQ2FudmFzUGl4ZWxBcnJheSogcGl4ZWxzLCBpbnQgd2lkdGgsIGludCBoZWln
aHQpCitib29sIEZFTGlnaHRpbmc6OmRyYXdMaWdodGluZyhCeXRlQXJyYXkqIHBpeGVscywgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEgcGFp
bnRpbmdEYXRhOwogICAgIExpZ2h0aW5nRGF0YSBkYXRhOwpAQCAtMTU0LDgxICsyNTEsNzMgQEAg
Ym9vbCBGRUxpZ2h0aW5nOjpkcmF3TGlnaHRpbmcoQ2FudmFzUGl4ZWxBcnJheSogcGl4ZWxzLCBp
bnQgd2lkdGgsIGludCBoZWlnaHQpCiAgICAgbV9saWdodFNvdXJjZS0+aW5pdFBhaW50aW5nRGF0
YShwYWludGluZ0RhdGEpOwogCiAgICAgLy8gVG9wL0xlZnQgY29ybmVyCi0gICAgZGF0YS5vZmZz
ZXQgPSAwOwotICAgIHNldFBpeGVsKGRhdGEsIHBhaW50aW5nRGF0YSwgMCwgMCwKLSAgICAgICAg
LTIuMGYgLyAzLjBmLCAtMiAqIGRhdGEuY2VudGVyUGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEucmln
aHRQaXhlbFZhbHVlKCkgLSBkYXRhLmRvd25QaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25SaWdodFBp
eGVsVmFsdWUoKSwKLSAgICAgICAgLTIuMGYgLyAzLjBmLCAtMiAqIGRhdGEuY2VudGVyUGl4ZWxW
YWx1ZSgpIC0gZGF0YS5yaWdodFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmRvd25QaXhlbFZhbHVl
KCkgKyBkYXRhLmRvd25SaWdodFBpeGVsVmFsdWUoKSk7CisgICAgSW50UG9pbnQgbm9ybWFsVmVj
dG9yOworICAgIGludCBvZmZzZXQgPSAwOworICAgIGRhdGEudG9wTGVmdChvZmZzZXQsIG5vcm1h
bFZlY3Rvcik7CisgICAgc2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIDAsIDAs
IGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBub3JtYWxWZWN0b3IpOwogCiAgICAgLy8gVG9w
L1JpZ2h0IHBpeGVsCi0gICAgZGF0YS5vZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4
ZWxTaXplIC0gY1BpeGVsU2l6ZTsKLSAgICBzZXRQaXhlbChkYXRhLCBwYWludGluZ0RhdGEsIGRh
dGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgMCwKLSAgICAgICAgLTIuMGYgLyAzLjBmLCAtMiAqIGRh
dGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSAtIGRhdGEu
ZG93bkxlZnRQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25QaXhlbFZhbHVlKCksCi0gICAgICAgIC0y
LjBmIC8gMy4wZiwgLWRhdGEubGVmdFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmNlbnRlclBpeGVs
VmFsdWUoKSArIGRhdGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3duUGl4ZWxW
YWx1ZSgpKTsKKyAgICBvZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplIC0g
Y1BpeGVsU2l6ZTsKKyAgICBkYXRhLnRvcFJpZ2h0KG9mZnNldCwgbm9ybWFsVmVjdG9yKTsKKyAg
ICBzZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0YS53aWR0aERlY3JlYXNl
ZEJ5T25lLCAwLCBjRmFjdG9yMmRpdjMsIGNGYWN0b3IyZGl2Mywgbm9ybWFsVmVjdG9yKTsKIAog
ICAgIC8vIEJvdHRvbS9MZWZ0IHBpeGVsCi0gICAgZGF0YS5vZmZzZXQgPSBkYXRhLmhlaWdodERl
Y3JlYXNlZEJ5T25lICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKLSAgICBzZXRQ
aXhlbChkYXRhLCBwYWludGluZ0RhdGEsIDAsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsCi0g
ICAgICAgIC0yLjBmIC8gMy4wZiwgLWRhdGEudXBQaXhlbFZhbHVlKCkgKyBkYXRhLnVwUmlnaHRQ
aXhlbFZhbHVlKCkgLSAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5yaWdo
dFBpeGVsVmFsdWUoKSwKLSAgICAgICAgLTIuMGYgLyAzLjBmLCAtMiAqIGRhdGEudXBQaXhlbFZh
bHVlKCkgLSBkYXRhLnVwUmlnaHRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5jZW50ZXJQaXhlbFZh
bHVlKCkgKyBkYXRhLnJpZ2h0UGl4ZWxWYWx1ZSgpKTsKKyAgICBvZmZzZXQgPSBkYXRhLmhlaWdo
dERlY3JlYXNlZEJ5T25lICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICBk
YXRhLmJvdHRvbUxlZnQob2Zmc2V0LCBub3JtYWxWZWN0b3IpOworICAgIHNldFBpeGVsKG9mZnNl
dCwgZGF0YSwgcGFpbnRpbmdEYXRhLCAwLCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFj
dG9yMmRpdjMsIGNGYWN0b3IyZGl2Mywgbm9ybWFsVmVjdG9yKTsKIAogICAgIC8vIEJvdHRvbS9S
aWdodCBwaXhlbAotICAgIGRhdGEub2Zmc2V0ID0gaGVpZ2h0ICogZGF0YS53aWR0aE11bHRpcGxp
ZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdE
YXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUs
Ci0gICAgICAgIC0yLjBmIC8gMy4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS51
cFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5jZW50
ZXJQaXhlbFZhbHVlKCksCi0gICAgICAgIC0yLjBmIC8gMy4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxW
YWx1ZSgpIC0gMiAqIGRhdGEudXBQaXhlbFZhbHVlKCkgKyBkYXRhLmxlZnRQaXhlbFZhbHVlKCkg
KyAyICogZGF0YS5jZW50ZXJQaXhlbFZhbHVlKCkpOworICAgIG9mZnNldCA9IGhlaWdodCAqIGRh
dGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgLSBjUGl4ZWxTaXplOworICAgIGRhdGEuYm90
dG9tUmlnaHQob2Zmc2V0LCBub3JtYWxWZWN0b3IpOworICAgIHNldFBpeGVsKG9mZnNldCwgZGF0
YSwgcGFpbnRpbmdEYXRhLCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmUsIGRhdGEuaGVpZ2h0RGVj
cmVhc2VkQnlPbmUsIGNGYWN0b3IyZGl2MywgY0ZhY3RvcjJkaXYzLCBub3JtYWxWZWN0b3IpOwog
CiAgICAgaWYgKHdpZHRoID49IDMpIHsKLSAgICAgICAgLy8gVG9wIGxpbmUKLSAgICAgICAgZGF0
YS5vZmZzZXQgPSBjUGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEu
d2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBkYXRhLm9mZnNldCArPSBjUGl4ZWxTaXplKSB7Ci0g
ICAgICAgICAgICBzZXRQaXhlbChkYXRhLCBwYWludGluZ0RhdGEsIHgsIDAsCi0gICAgICAgICAg
ICAgICAgLTEuMGYgLyAzLjBmLCAtMiAqIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRh
LnJpZ2h0UGl4ZWxWYWx1ZSgpIC0gZGF0YS5kb3duTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEuZG93
blJpZ2h0UGl4ZWxWYWx1ZSgpLAotICAgICAgICAgICAgICAgIC0xLjBmIC8gMi4wZiwgLWRhdGEu
bGVmdFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmNlbnRlclBpeGVsVmFsdWUoKSAtIGRhdGEucmln
aHRQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgMiAqIGRhdGEuZG93
blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpKTsKKyAgICAgICAgLy8g
VG9wIHJvdworICAgICAgICBvZmZzZXQgPSBjUGl4ZWxTaXplOworICAgICAgICBmb3IgKGludCB4
ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZTsgKyt4LCBvZmZzZXQgKz0gY1BpeGVs
U2l6ZSkgeworICAgICAgICAgICAgZGF0YS50b3BSb3cob2Zmc2V0LCBub3JtYWxWZWN0b3IpOwor
ICAgICAgICAgICAgaW5saW5lU2V0UGl4ZWwob2Zmc2V0LCBkYXRhLCBwYWludGluZ0RhdGEsIHgs
IDAsIGNGYWN0b3IxZGl2MywgY0ZhY3RvcjFkaXYyLCBub3JtYWxWZWN0b3IpOwogICAgICAgICB9
Ci0gICAgICAgIC8vIEJvdHRvbSBsaW5lCi0gICAgICAgIGRhdGEub2Zmc2V0ID0gZGF0YS5oZWln
aHREZWNyZWFzZWRCeU9uZSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4
ZWxTaXplOwotICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNyZWFzZWRC
eU9uZTsgKyt4LCBkYXRhLm9mZnNldCArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICBzZXRQ
aXhlbChkYXRhLCBwYWludGluZ0RhdGEsIHgsIGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUsCi0g
ICAgICAgICAgICAgICAgLTEuMGYgLyAzLjBmLCAtZGF0YS51cExlZnRQaXhlbFZhbHVlKCkgKyBk
YXRhLnVwUmlnaHRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS5sZWZ0UGl4ZWxWYWx1ZSgpICsgMiAq
IGRhdGEucmlnaHRQaXhlbFZhbHVlKCksCi0gICAgICAgICAgICAgICAgLTEuMGYgLyAyLjBmLCAt
ZGF0YS51cExlZnRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS51cFBpeGVsVmFsdWUoKSAtIGRhdGEu
dXBSaWdodFBpeGVsVmFsdWUoKSArIGRhdGEubGVmdFBpeGVsVmFsdWUoKSArIDIgKiBkYXRhLmNl
bnRlclBpeGVsVmFsdWUoKSArIGRhdGEucmlnaHRQaXhlbFZhbHVlKCkpOworICAgICAgICAvLyBC
b3R0b20gcm93CisgICAgICAgIG9mZnNldCA9IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmUgKiBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgY1BpeGVsU2l6ZTsKKyAgICAgICAgZm9y
IChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlPbmU7ICsreCwgb2Zmc2V0ICs9
IGNQaXhlbFNpemUpIHsKKyAgICAgICAgICAgIGRhdGEuYm90dG9tUm93KG9mZnNldCwgbm9ybWFs
VmVjdG9yKTsKKyAgICAgICAgICAgIGlubGluZVNldFBpeGVsKG9mZnNldCwgZGF0YSwgcGFpbnRp
bmdEYXRhLCB4LCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lLCBjRmFjdG9yMWRpdjMsIGNGYWN0
b3IxZGl2Miwgbm9ybWFsVmVjdG9yKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChoZWln
aHQgPj0gMykgewotICAgICAgICAvLyBMZWZ0IGxpbmUKLSAgICAgICAgZGF0YS5vZmZzZXQgPSBk
YXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplOwotICAgICAgICBmb3IgKGludCB5ID0gMTsg
eSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSwgZGF0YS5vZmZzZXQgKz0gZGF0YS53
aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkgewotICAgICAgICAgICAgc2V0UGl4ZWwoZGF0YSwg
cGFpbnRpbmdEYXRhLCAwLCB5LAotICAgICAgICAgICAgICAgIC0xLjBmIC8gMi4wZiwgLWRhdGEu
dXBQaXhlbFZhbHVlKCkgKyBkYXRhLnVwUmlnaHRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS5jZW50
ZXJQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5yaWdodFBpeGVsVmFsdWUoKSAtIGRhdGEuZG93blBp
eGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4ZWxWYWx1ZSgpLAotICAgICAgICAgICAgICAg
IC0xLjBmIC8gMy4wZiwgLTIgKiBkYXRhLnVwUGl4ZWxWYWx1ZSgpIC0gZGF0YS51cFJpZ2h0UGl4
ZWxWYWx1ZSgpICsgMiAqIGRhdGEuZG93blBpeGVsVmFsdWUoKSArIGRhdGEuZG93blJpZ2h0UGl4
ZWxWYWx1ZSgpKTsKKyAgICAgICAgLy8gTGVmdCBjb2x1bW4KKyAgICAgICAgb2Zmc2V0ID0gZGF0
YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZTsKKyAgICAgICAgZm9yIChpbnQgeSA9IDE7IHkg
PCBkYXRhLmhlaWdodERlY3JlYXNlZEJ5T25lOyArK3ksIG9mZnNldCArPSBkYXRhLndpZHRoTXVs
dGlwbGllZEJ5UGl4ZWxTaXplKSB7CisgICAgICAgICAgICBkYXRhLmxlZnRDb2x1bW4ob2Zmc2V0
LCBub3JtYWxWZWN0b3IpOworICAgICAgICAgICAgaW5saW5lU2V0UGl4ZWwob2Zmc2V0LCBkYXRh
LCBwYWludGluZ0RhdGEsIDAsIHksIGNGYWN0b3IxZGl2MiwgY0ZhY3RvcjFkaXYzLCBub3JtYWxW
ZWN0b3IpOwogICAgICAgICB9Ci0gICAgICAgIC8vIFJpZ2h0IGxpbmUKLSAgICAgICAgZGF0YS5v
ZmZzZXQgPSBkYXRhLndpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplICsgZGF0YS53aWR0aE11bHRp
cGxpZWRCeVBpeGVsU2l6ZSAtIGNQaXhlbFNpemU7Ci0gICAgICAgIGZvciAoaW50IHkgPSAxOyB5
IDwgZGF0YS5oZWlnaHREZWNyZWFzZWRCeU9uZTsgKyt5LCBkYXRhLm9mZnNldCArPSBkYXRhLndp
ZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXplKSB7Ci0gICAgICAgICAgICBzZXRQaXhlbChkYXRhLCBw
YWludGluZ0RhdGEsIGRhdGEud2lkdGhEZWNyZWFzZWRCeU9uZSwgeSwKLSAgICAgICAgICAgICAg
ICAtMS4wZiAvIDIuMGYsIC1kYXRhLnVwTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEudXBQaXhlbFZh
bHVlKCkgLTIgKiBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5jZW50ZXJQaXhlbFZh
bHVlKCkgLSBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUGl4ZWxWYWx1ZSgp
LAotICAgICAgICAgICAgICAgIC0xLjBmIC8gMy4wZiwgLWRhdGEudXBMZWZ0UGl4ZWxWYWx1ZSgp
IC0gMiAqIGRhdGEudXBQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25MZWZ0UGl4ZWxWYWx1ZSgpICsg
MiAqIGRhdGEuZG93blBpeGVsVmFsdWUoKSk7CisgICAgICAgIC8vIFJpZ2h0IGNvbHVtbgorICAg
ICAgICBvZmZzZXQgPSAoZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSA8PCAxKSAtIGNQ
aXhlbFNpemU7CisgICAgICAgIGZvciAoaW50IHkgPSAxOyB5IDwgZGF0YS5oZWlnaHREZWNyZWFz
ZWRCeU9uZTsgKyt5LCBvZmZzZXQgKz0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSkg
eworICAgICAgICAgICAgZGF0YS5yaWdodENvbHVtbihvZmZzZXQsIG5vcm1hbFZlY3Rvcik7Cisg
ICAgICAgICAgICBpbmxpbmVTZXRQaXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgZGF0
YS53aWR0aERlY3JlYXNlZEJ5T25lLCB5LCBjRmFjdG9yMWRpdjIsIGNGYWN0b3IxZGl2Mywgbm9y
bWFsVmVjdG9yKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmICh3aWR0aCA+PSAzICYmIGhl
aWdodCA+PSAzKSB7CiAgICAgICAgIC8vIEludGVyaW9yIHBpeGVscwogICAgICAgICBmb3IgKGlu
dCB5ID0gMTsgeSA8IGRhdGEuaGVpZ2h0RGVjcmVhc2VkQnlPbmU7ICsreSkgewotICAgICAgICAg
ICAgZGF0YS5vZmZzZXQgPSB5ICogZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSArIGNQ
aXhlbFNpemU7Ci0gICAgICAgICAgICBmb3IgKGludCB4ID0gMTsgeCA8IGRhdGEud2lkdGhEZWNy
ZWFzZWRCeU9uZTsgKyt4LCBkYXRhLm9mZnNldCArPSBjUGl4ZWxTaXplKSB7Ci0gICAgICAgICAg
ICAgICAgc2V0UGl4ZWwoZGF0YSwgcGFpbnRpbmdEYXRhLCB4LCB5LAotICAgICAgICAgICAgICAg
ICAgICAtMS4wZiAvIDQuMGYsIC1kYXRhLnVwTGVmdFBpeGVsVmFsdWUoKSArIGRhdGEudXBSaWdo
dFBpeGVsVmFsdWUoKSAtIDIgKiBkYXRhLmxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5yaWdo
dFBpeGVsVmFsdWUoKSAtIGRhdGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyBkYXRhLmRvd25SaWdo
dFBpeGVsVmFsdWUoKSwKLSAgICAgICAgICAgICAgICAgICAgLTEuMGYgLyA0LjBmLCAtZGF0YS51
cExlZnRQaXhlbFZhbHVlKCkgLSAyICogZGF0YS51cFBpeGVsVmFsdWUoKSAtIGRhdGEudXBSaWdo
dFBpeGVsVmFsdWUoKSArIGRhdGEuZG93bkxlZnRQaXhlbFZhbHVlKCkgKyAyICogZGF0YS5kb3du
UGl4ZWxWYWx1ZSgpICsgZGF0YS5kb3duUmlnaHRQaXhlbFZhbHVlKCkpOworICAgICAgICAgICAg
b2Zmc2V0ID0geSAqIGRhdGEud2lkdGhNdWx0aXBsaWVkQnlQaXhlbFNpemUgKyBjUGl4ZWxTaXpl
OworICAgICAgICAgICAgZm9yIChpbnQgeCA9IDE7IHggPCBkYXRhLndpZHRoRGVjcmVhc2VkQnlP
bmU7ICsreCwgb2Zmc2V0ICs9IGNQaXhlbFNpemUpIHsKKyAgICAgICAgICAgICAgICBkYXRhLmlu
dGVyaW9yKG9mZnNldCwgbm9ybWFsVmVjdG9yKTsKKyAgICAgICAgICAgICAgICBpbmxpbmVTZXRQ
aXhlbChvZmZzZXQsIGRhdGEsIHBhaW50aW5nRGF0YSwgeCwgeSwgY0ZhY3RvcjFkaXY0LCBjRmFj
dG9yMWRpdjQsIG5vcm1hbFZlY3Rvcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBpbnQgdG90YWxTaXplID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVsU2l6ZSAq
IGhlaWdodDsKKyAgICBpbnQgbGFzdFBpeGVsID0gZGF0YS53aWR0aE11bHRpcGxpZWRCeVBpeGVs
U2l6ZSAqIGhlaWdodDsKICAgICBpZiAobV9saWdodGluZ1R5cGUgPT0gRGlmZnVzZUxpZ2h0aW5n
KSB7Ci0gICAgICAgIGZvciAoaW50IGkgPSAzOyBpIDwgdG90YWxTaXplOyBpICs9IDQpCisgICAg
ICAgIGZvciAoaW50IGkgPSBjQWxwaGFDaGFubmVsT2Zmc2V0OyBpIDwgbGFzdFBpeGVsOyBpICs9
IGNQaXhlbFNpemUpCiAgICAgICAgICAgICBkYXRhLnBpeGVscy0+c2V0KGksIGNPcGFxdWVBbHBo
YSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0b3RhbFNpemU7
IGkgKz0gNCkgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxhc3RQaXhlbDsgaSArPSBj
UGl4ZWxTaXplKSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGExID0gZGF0YS5waXhlbHMt
PmdldChpKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYTIgPSBkYXRhLnBpeGVscy0+Z2V0
KGkgKyAxKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgYTMgPSBkYXRhLnBpeGVscy0+Z2V0
KGkgKyAyKTsKQEAgLTI1Myw4ICszNDIsOCBAQCB2b2lkIEZFTGlnaHRpbmc6OmFwcGx5KEZpbHRl
ciogZmlsdGVyKQogICAgIHNldElzQWxwaGFJbWFnZShmYWxzZSk7CiAKICAgICBJbnRSZWN0IGVm
ZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVnaW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJz
b2x1dGVQYWludFJlY3QoKSk7Ci0gICAgUmVmUHRyPEltYWdlRGF0YT4gc3JjSW1hZ2VEYXRhKGlu
LT5yZXN1bHRJbWFnZSgpLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoZWZmZWN0RHJhd2luZ1Jl
Y3QpKTsKLSAgICBDYW52YXNQaXhlbEFycmF5KiBzcmNQaXhlbEFycmF5KHNyY0ltYWdlRGF0YS0+
ZGF0YSgpKTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBzcmNJbWFnZURhdGEgPSBpbi0+cmVzdWx0
SW1hZ2UoKS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKGVmZmVjdERyYXdpbmdSZWN0KTsKKyAg
ICBCeXRlQXJyYXkqIHNyY1BpeGVsQXJyYXkgPSBzcmNJbWFnZURhdGEtPmRhdGEoKS0+ZGF0YSgp
OwogCiAgICAgLy8gRklYTUU6IHN1cHBvcnQga2VybmVsVW5pdExlbmd0aHMgb3RoZXIgdGhhbiAo
MSwxKS4gVGhlIGlzc3VlIGhlcmUgaXMgdGhhdCB0aGUgVzMKICAgICAvLyBzdGFuZGFyZCBoYXMg
bm8gdGVzdCBjYXNlIGZvciB0aGVtLCBhbmQgb3RoZXIgYnJvd3NlcnMgKGxpa2UgRmlyZWZveCkg
aGFzIHN0cmFuZ2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GRUxpZ2h0aW5nLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVMaWdo
dGluZy5oCmluZGV4IGJkNTZjZWUuLjIyM2NlNTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUxpZ2h0aW5nLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFTGlnaHRpbmcuaApAQCAtMzIsMTQgKzMyLDEyIEBACiAjaW5jbHVk
ZSAiRmlsdGVyLmgiCiAjaW5jbHVkZSAiRmlsdGVyRWZmZWN0LmgiCiAjaW5jbHVkZSAiTGlnaHRT
b3VyY2UuaCIKLSNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CisjaW5jbHVkZSA8d3RmL0J5
dGVBcnJheS5oPgogCiAvLyBDb21tb24gYmFzZSBjbGFzcyBmb3IgRkVEaWZmdXNlTGlnaHRpbmcg
YW5kIEZFU3BlY3VsYXJMaWdodGluZwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIENh
bnZhc1BpeGVsQXJyYXk7Ci0KIGNsYXNzIEZFTGlnaHRpbmcgOiBwdWJsaWMgRmlsdGVyRWZmZWN0
IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYXBwbHkoRmlsdGVyKik7CkBAIC01MywzMSAr
NTEsMzMgQEAgcHJvdGVjdGVkOgogICAgIH07CiAKICAgICBzdHJ1Y3QgTGlnaHRpbmdEYXRhIHsK
LSAgICAgICAgRmxvYXRQb2ludDNEIG5vcm1hbFZlY3RvcjsKLSAgICAgICAgQ2FudmFzUGl4ZWxB
cnJheSogcGl4ZWxzOwotICAgICAgICBmbG9hdCBsaWdodFN0cmVuZ3RoOworICAgICAgICAvLyBU
aGlzIHN0cnVjdHVyZSBjb250YWlucyBvbmx5IHJlYWQtb25seSAoU01QIHNhZmUpIGRhdGEKKyAg
ICAgICAgQnl0ZUFycmF5KiBwaXhlbHM7CiAgICAgICAgIGZsb2F0IHN1cmZhY2VTY2FsZTsKLSAg
ICAgICAgaW50IG9mZnNldDsKICAgICAgICAgaW50IHdpZHRoTXVsdGlwbGllZEJ5UGl4ZWxTaXpl
OwogICAgICAgICBpbnQgd2lkdGhEZWNyZWFzZWRCeU9uZTsKICAgICAgICAgaW50IGhlaWdodERl
Y3JlYXNlZEJ5T25lOwogCi0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50IHVwTGVmdFBpeGVsVmFs
dWUoKTsKLSAgICAgICAgQUxXQVlTX0lOTElORSBpbnQgdXBQaXhlbFZhbHVlKCk7Ci0gICAgICAg
IEFMV0FZU19JTkxJTkUgaW50IHVwUmlnaHRQaXhlbFZhbHVlKCk7Ci0gICAgICAgIEFMV0FZU19J
TkxJTkUgaW50IGxlZnRQaXhlbFZhbHVlKCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50IGNl
bnRlclBpeGVsVmFsdWUoKTsKLSAgICAgICAgQUxXQVlTX0lOTElORSBpbnQgcmlnaHRQaXhlbFZh
bHVlKCk7Ci0gICAgICAgIEFMV0FZU19JTkxJTkUgaW50IGRvd25MZWZ0UGl4ZWxWYWx1ZSgpOwot
ICAgICAgICBBTFdBWVNfSU5MSU5FIGludCBkb3duUGl4ZWxWYWx1ZSgpOwotICAgICAgICBBTFdB
WVNfSU5MSU5FIGludCBkb3duUmlnaHRQaXhlbFZhbHVlKCk7CisgICAgICAgIGlubGluZSB2b2lk
IHRvcExlZnQoaW50IG9mZnNldCwgSW50UG9pbnQmIG5vcm1hbFZlY3Rvcik7CisgICAgICAgIGlu
bGluZSB2b2lkIHRvcFJvdyhpbnQgb2Zmc2V0LCBJbnRQb2ludCYgbm9ybWFsVmVjdG9yKTsKKyAg
ICAgICAgaW5saW5lIHZvaWQgdG9wUmlnaHQoaW50IG9mZnNldCwgSW50UG9pbnQmIG5vcm1hbFZl
Y3Rvcik7CisgICAgICAgIGlubGluZSB2b2lkIGxlZnRDb2x1bW4oaW50IG9mZnNldCwgSW50UG9p
bnQmIG5vcm1hbFZlY3Rvcik7CisgICAgICAgIGlubGluZSB2b2lkIGludGVyaW9yKGludCBvZmZz
ZXQsIEludFBvaW50JiBub3JtYWxWZWN0b3IpOworICAgICAgICBpbmxpbmUgdm9pZCByaWdodENv
bHVtbihpbnQgb2Zmc2V0LCBJbnRQb2ludCYgbm9ybWFsVmVjdG9yKTsKKyAgICAgICAgaW5saW5l
IHZvaWQgYm90dG9tTGVmdChpbnQgb2Zmc2V0LCBJbnRQb2ludCYgbm9ybWFsVmVjdG9yKTsKKyAg
ICAgICAgaW5saW5lIHZvaWQgYm90dG9tUm93KGludCBvZmZzZXQsIEludFBvaW50JiBub3JtYWxW
ZWN0b3IpOworICAgICAgICBpbmxpbmUgdm9pZCBib3R0b21SaWdodChpbnQgb2Zmc2V0LCBJbnRQ
b2ludCYgbm9ybWFsVmVjdG9yKTsKICAgICB9OwogCiAgICAgRkVMaWdodGluZyhMaWdodGluZ1R5
cGUsIGNvbnN0IENvbG9yJiwgZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIGZsb2F0LCBmbG9h
dCwgUGFzc1JlZlB0cjxMaWdodFNvdXJjZT4pOwogCi0gICAgYm9vbCBkcmF3TGlnaHRpbmcoQ2Fu
dmFzUGl4ZWxBcnJheSosIGludCwgaW50KTsKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgc2V0UGl4
ZWwoTGlnaHRpbmdEYXRhJiwgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsCi0gICAgICAgIGlu
dCBsaWdodFgsIGludCBsaWdodFksIGZsb2F0IGZhY3RvclgsIGludCBub3JtYWxYLCBmbG9hdCBm
YWN0b3JZLCBpbnQgbm9ybWFsWSk7CisgICAgYm9vbCBkcmF3TGlnaHRpbmcoQnl0ZUFycmF5Kiwg
aW50LCBpbnQpOworICAgIGlubGluZSB2b2lkIGlubGluZVNldFBpeGVsKGludCBvZmZzZXQsIExp
Z2h0aW5nRGF0YSYsIExpZ2h0U291cmNlOjpQYWludGluZ0RhdGEmLAorICAgICAgICBpbnQgbGln
aHRYLCBpbnQgbGlnaHRZLCBmbG9hdCBmYWN0b3JYLCBmbG9hdCBmYWN0b3JZLCBJbnRQb2ludCYg
bm9ybWFsVmVjdG9yKTsKKworICAgIC8vIE5vdCB3b3J0aCB0byBpbmxpbmUgZXZlcnkgb2NjdXJl
bmNlIG9mIHNldFBpeGVsLgorICAgIHZvaWQgc2V0UGl4ZWwoaW50IG9mZnNldCwgTGlnaHRpbmdE
YXRhJiwgTGlnaHRTb3VyY2U6OlBhaW50aW5nRGF0YSYsCisgICAgICAgIGludCBsaWdodFgsIGlu
dCBsaWdodFksIGZsb2F0IGZhY3RvclgsIGZsb2F0IGZhY3RvclksIEludFBvaW50JiBub3JtYWxW
ZWN0b3IpOwogCiAgICAgTGlnaHRpbmdUeXBlIG1fbGlnaHRpbmdUeXBlOwogICAgIFJlZlB0cjxM
aWdodFNvdXJjZT4gbV9saWdodFNvdXJjZTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvTGlnaHRTb3VyY2UuY3BwCmluZGV4IGE4MGIxNGIuLmRlMDY5MWUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0xpZ2h0U291cmNlLmNwcApA
QCAtNDIsNyArNDIsNyBAQCB2b2lkIFBvaW50TGlnaHRTb3VyY2U6OnVwZGF0ZVBhaW50aW5nRGF0
YShQYWludGluZ0RhdGEmIHBhaW50aW5nRGF0YSwgaW50IHgsIGludAogICAgIHBhaW50aW5nRGF0
YS5saWdodFZlY3Rvci5zZXRYKG1fcG9zaXRpb24ueCgpIC0geCk7CiAgICAgcGFpbnRpbmdEYXRh
LmxpZ2h0VmVjdG9yLnNldFkobV9wb3NpdGlvbi55KCkgLSB5KTsKICAgICBwYWludGluZ0RhdGEu
bGlnaHRWZWN0b3Iuc2V0WihtX3Bvc2l0aW9uLnooKSAtIHopOwotICAgIHBhaW50aW5nRGF0YS5s
aWdodFZlY3Rvci5ub3JtYWxpemUoKTsKKyAgICBwYWludGluZ0RhdGEubGlnaHRWZWN0b3JMZW5n
dGggPSBwYWludGluZ0RhdGEubGlnaHRWZWN0b3IubGVuZ3RoKCk7CiB9CiAKIC8vIHNwb3QtbGln
aHQgZWRnZSBkYXJrZW5pbmcgZGVwZW5kcyBvbiBhbiBhYnNvbHV0ZSB0cmVzaG9sZApAQCAtODQs
OSArODQsOSBAQCB2b2lkIFNwb3RMaWdodFNvdXJjZTo6dXBkYXRlUGFpbnRpbmdEYXRhKFBhaW50
aW5nRGF0YSYgcGFpbnRpbmdEYXRhLCBpbnQgeCwgaW50CiAgICAgcGFpbnRpbmdEYXRhLmxpZ2h0
VmVjdG9yLnNldFgobV9wb3NpdGlvbi54KCkgLSB4KTsKICAgICBwYWludGluZ0RhdGEubGlnaHRW
ZWN0b3Iuc2V0WShtX3Bvc2l0aW9uLnkoKSAtIHkpOwogICAgIHBhaW50aW5nRGF0YS5saWdodFZl
Y3Rvci5zZXRaKG1fcG9zaXRpb24ueigpIC0geik7Ci0gICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVj
dG9yLm5vcm1hbGl6ZSgpOworICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvckxlbmd0aCA9IHBh
aW50aW5nRGF0YS5saWdodFZlY3Rvci5sZW5ndGgoKTsKIAotICAgIGZsb2F0IGNvc2luZU9mQW5n
bGUgPSBwYWludGluZ0RhdGEubGlnaHRWZWN0b3IgKiBwYWludGluZ0RhdGEuZGlyZWN0aW9uVmVj
dG9yOworICAgIGZsb2F0IGNvc2luZU9mQW5nbGUgPSAocGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9y
ICogcGFpbnRpbmdEYXRhLmRpcmVjdGlvblZlY3RvcikgLyBwYWludGluZ0RhdGEubGlnaHRWZWN0
b3JMZW5ndGg7CiAgICAgaWYgKGNvc2luZU9mQW5nbGUgPiBwYWludGluZ0RhdGEuY29uZUN1dE9m
ZkxpbWl0KSB7CiAgICAgICAgIC8vIE5vIGxpZ2h0IGlzIHByb2R1Y2VkLCBzY2FubGluZXMgYXJl
IG5vdCB1cGRhdGVkCiAgICAgICAgIHBhaW50aW5nRGF0YS5jb2xvclZlY3Rvci5zZXRYKDAuMGYp
OwpAQCAtMTI3LDYgKzEyNyw3IEBAIHZvaWQgRGlzdGFudExpZ2h0U291cmNlOjppbml0UGFpbnRp
bmdEYXRhKFBhaW50aW5nRGF0YSYgcGFpbnRpbmdEYXRhKQogICAgIHBhaW50aW5nRGF0YS5saWdo
dFZlY3Rvci5zZXRYKGNvc2YoYXppbXV0aCkgKiBjb3NmKGVsZXZhdGlvbikpOwogICAgIHBhaW50
aW5nRGF0YS5saWdodFZlY3Rvci5zZXRZKHNpbmYoYXppbXV0aCkgKiBjb3NmKGVsZXZhdGlvbikp
OwogICAgIHBhaW50aW5nRGF0YS5saWdodFZlY3Rvci5zZXRaKHNpbmYoZWxldmF0aW9uKSk7Cisg
ICAgcGFpbnRpbmdEYXRhLmxpZ2h0VmVjdG9yTGVuZ3RoID0gMTsKIH0KIAogdm9pZCBEaXN0YW50
TGlnaHRTb3VyY2U6OnVwZGF0ZVBhaW50aW5nRGF0YShQYWludGluZ0RhdGEmLCBpbnQsIGludCwg
ZmxvYXQpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvTGln
aHRTb3VyY2UuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJj
ZS5oCmluZGV4IDJlNGM1NzkuLjAxM2U5MTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9MaWdodFNvdXJjZS5oCkBAIC01MSw2ICs1MSw3IEBAIHB1YmxpYzoKICAg
ICAgICAgLy8gU1ZHRkVMaWdodGluZyBhbHNvIHVzZSB0aGVtCiAgICAgICAgIEZsb2F0UG9pbnQz
RCBsaWdodFZlY3RvcjsKICAgICAgICAgRmxvYXRQb2ludDNEIGNvbG9yVmVjdG9yOworICAgICAg
ICBmbG9hdCBsaWdodFZlY3Rvckxlbmd0aDsKICAgICAgICAgLy8gUHJpdmF0ZSBtZW1iZXJzCiAg
ICAgICAgIEZsb2F0UG9pbnQzRCBkaXJlY3Rpb25WZWN0b3I7CiAgICAgICAgIEZsb2F0UG9pbnQz
RCBwcml2YXRlQ29sb3JWZWN0b3I7Ci0tIAoxLjYuMC40Cgo=
</data>
<flag name="review"
          id="62950"
          type_id="1"
          status="+"
          setter="krit"
    />
          </attachment>
      

    </bug>

</bugzilla>