<?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>49365</bug_id>
          
          <creation_ts>2010-11-10 22:27:56 -0800</creation_ts>
          <short_desc>[chromium] Add canvas.toDataURL(&quot;image/jpeg&quot;, quality) support</short_desc>
          <delta_ts>2010-12-02 11:43:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Canvas</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>40147</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="noel gordon">noel.gordon</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>levin</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>paulirish</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>307733</commentid>
    <comment_count>0</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2010-11-10 22:27:56 -0800</bug_when>
    <thetext>Chromium win/linux support &quot;image/png&quot; in .toDataURL(), but not &quot;image/jpeg&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309597</commentid>
    <comment_count>1</comment_count>
      <attachid>73965</attachid>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2010-11-15 23:10:17 -0800</bug_when>
    <thetext>Created attachment 73965
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>309600</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-15 23:14:32 -0800</bug_when>
    <thetext>Attachment 73965 did not build on chromium:
Build output: http://queues.webkit.org/results/5963082</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310052</commentid>
    <comment_count>3</comment_count>
      <attachid>74069</attachid>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2010-11-16 17:24:58 -0800</bug_when>
    <thetext>Created attachment 74069
patch

costs a style nit, but builds on linux</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310054</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-11-16 17:26:32 -0800</bug_when>
    <thetext>Attachment 74069 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;]&quot; exit_code: 1
Total errors found: 0 in 0 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311313</commentid>
    <comment_count>5</comment_count>
      <attachid>74360</attachid>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2010-11-18 23:52:35 -0800</bug_when>
    <thetext>Created attachment 74360
patch

chromium trys pass fast/canvas/canvas-toDataURL-case-insensitive-mimetype.html
now, fix that and update ChangeLogs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312919</commentid>
    <comment_count>6</comment_count>
      <attachid>74360</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-11-23 10:45:41 -0800</bug_when>
    <thetext>Comment on attachment 74360
patch

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

&gt; WebCore/ChangeLog:17
&gt; +        Adds a libjpeg-based image encoder for Skia bitmaps.  Default encoding quality
&gt; +        is 92 to match Mozilla, also Safari, though the actual value used by Safari is
&gt; +        undocumented, and it appears to pre-blur images prior to compression.
&gt; +
&gt; +        JPGBitmapEncoder::preMultipliedBGRAtoRGB restores the un-multiplied RGB colors
&gt; +        where there is non-zero alpha.  Again, this matches Firefox and Safari, but no
&gt; +        browser conforms to the HTML5 canvas standard here, I believe, considering the
&gt; +        results of canvas/philip/tests/toDataURL.jpeg.alpha.html; the test ignores the
&gt; +        alpha channel when extracting an &quot;image/jpeg&quot;.toDataURL().  The correct answer
&gt; +        needs more investigation.

Nit: These comments are really helpful.  For this reason, I&apos;d like to see them in the source code itself.  The first comment can be in the declaration of JPGImageEncoder, and the second in the declaration of JPGBitmapEncoder.  (They don&apos;t need to be duplicated into the ChangeLog at that point.)

&gt; WebCore/platform/graphics/skia/ImageBufferSkia.cpp:322
&gt; +    Vector&lt;unsigned char&gt; encodedImage;
&gt; +

Nit: Extra blank line here

&gt; WebCore/platform/image-encoders/skia/JPGImageEncoder.cpp:45
&gt; +class JPGBitmapEncoder : public jpeg_destination_mgr {

Nit: WebCore is pretty consistent about using &quot;JPEG&quot; rather than &quot;JPG&quot; in class and file names.  Please follow suit.

&gt; WebCore/platform/image-encoders/skia/JPGImageEncoder.cpp:47
&gt; +public:
&gt; +    JPGBitmapEncoder(const SkBitmap&amp; input, Vector&lt;unsigned char&gt;* output)

Nit: Defining your methods inline in your declaration tells the compiler you want them inlined.  Since that&apos;s not actually what you mean here, you should declare the class above its definition.  This also makes it easier for a reader to quickly see the structure of the class by just glancing at its declaration, and for you to mark with a single comment theblock of functions responsible for implementing jpeg_destination_mgr.

&gt; WebCore/platform/image-encoders/skia/JPGImageEncoder.cpp:107
&gt; +        const SkPMColor* pixel = reinterpret_cast&lt;const uint32_t*&gt;(m_pixels);
&gt; +        while (pixels-- &gt; 0) {
&gt; +            SkColor unmultiplied = SkUnPreMultiply::PMColorToColor(*pixel++);

Nit: If you declare |m_pixels| as &quot;const SkPMColor*&quot; (and add a &quot;/ sizeof(SkPMColor)&quot; to the increment in encode() above), you can write this loop as:

for (const SkPMColor* pixel = m_pixels; pixel &lt; (m_pixels + pixels); ++pixel) {
  SkColor unmultiplied = SkUnPreMultiply::PMColorToColor(*pixel);
  ...

...which is not only shorter, it seems (to me at least) easier to understand and harder to screw up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313003</commentid>
    <comment_count>7</comment_count>
      <attachid>74360</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-11-23 13:46:26 -0800</bug_when>
    <thetext>Comment on attachment 74360
patch

r- based on Peter&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313759</commentid>
    <comment_count>8</comment_count>
      <attachid>74360</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-11-25 07:25:17 -0800</bug_when>
    <thetext>Comment on attachment 74360
patch

Thanks for taking this on!

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

&gt; WebCore/ChangeLog:16
&gt; +        alpha channel when extracting an &quot;image/jpeg&quot;.toDataURL().  The correct answer
&gt; +        needs more investigation.

I don&apos;t know if it helps for this particular test, but some of the canvas/philip tests require a different unpremultiply that the one implemented in SkUnPreMultiply, in order to achieve roundtrip lossless conversion on a certain set of colours.  See http://trac.webkit.org/changeset/71760, function mulDiv255Ceil() in ImageBufferSkia.cpp.  The test was canvas/philip/tests/2d.imageData.put.unchanged.html.  If this does fix the problem, it would be ideal if you could upstream this function to Skia.

&gt; WebCore/platform/image-encoders/skia/JPGImageEncoder.cpp:107
&gt; +            SkColor unmultiplied = SkUnPreMultiply::PMColorToColor(*pixel++);

See above:  check if mulDiv255Ceil() fixes the JPEG+alpha case.

&gt; WebCore/platform/image-encoders/skia/JPGImageEncoder.cpp:117
&gt; +        out-&gt;m_buffer.resize(8192);

This magic value should be in a constant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313921</commentid>
    <comment_count>9</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2010-11-26 01:37:54 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 74360 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74360&amp;action=review
&gt; 
&gt; &gt; WebCore/ChangeLog:17
&gt; &gt; +        Adds a libjpeg-based image encoder for Skia bitmaps.  Default encoding quality
&gt; &gt; +        is 92 to match Mozilla, also Safari, though the actual value used by Safari is
&gt; &gt; +        undocumented, and it appears to pre-blur images prior to compression.
&gt; &gt; +
&gt; &gt; +        JPGBitmapEncoder::preMultipliedBGRAtoRGB restores the un-multiplied RGB colors
&gt; &gt; +        where there is non-zero alpha.  Again, this matches Firefox and Safari, but no
&gt; &gt; +        browser conforms to the HTML5 canvas standard here, I believe, considering the
&gt; &gt; +        results of canvas/philip/tests/toDataURL.jpeg.alpha.html; the test ignores the
&gt; &gt; +        alpha channel when extracting an &quot;image/jpeg&quot;.toDataURL().  The correct answer
&gt; &gt; +        needs more investigation.
&gt; 
&gt; Nit: These comments are really helpful.  For this reason, I&apos;d like to see them in the source code itself.  The first comment can be in the declaration of JPGImageEncoder, and the second in the declaration of JPGBitmapEncoder.  (They don&apos;t need to be duplicated into the ChangeLog at that point.)
&gt; 

I&apos;m glad you found the comments helpful, that&apos;s why I put them in the ChangeLog and I
believe that&apos;s the correct place for them.  I&apos;m hesitant to add en-block comments like this
in the code.  I did add a FIXME code comment.


&gt; &gt; WebCore/platform/graphics/skia/ImageBufferSkia.cpp:322
&gt; &gt; +    Vector&lt;unsigned char&gt; encodedImage;
&gt; &gt; +
&gt; 
&gt; Nit: Extra blank line here

Done.
 
&gt; &gt; WebCore/platform/image-encoders/skia/JPGImageEncoder.cpp:45
&gt; &gt; +class JPGBitmapEncoder : public jpeg_destination_mgr {
&gt; 
&gt; Nit: WebCore is pretty consistent about using &quot;JPEG&quot; rather than &quot;JPG&quot; in class and file names.  Please follow suit.

Yeap, changed everywhere: class names, filenames, ...

 
&gt; &gt; WebCore/platform/image-encoders/skia/JPGImageEncoder.cpp:47
&gt; &gt; +public:
&gt; &gt; +    JPGBitmapEncoder(const SkBitmap&amp; input, Vector&lt;unsigned char&gt;* output)
&gt; 
&gt; Nit: Defining your methods inline in your declaration tells the compiler you want them inlined.  Since that&apos;s not actually what you mean here, you should declare the class above its definition.  This also makes it easier for a reader to quickly see the structure of the class by just glancing at its declaration, and for you to mark with a single comment the block of functions responsible for implementing jpeg_destination_mgr.
&gt; 

that block of functions got in the way of your reading, so I moved them out of the way and
into encode().  The compiler _may_ inline the code, it&apos;s not something I&apos;d rely on or
need here.  I used a class to try get the reader to encode() (the only public function of
a class that is private to this file) in a few lines of code, and to deal with the issues
setjmp() creates for C++ object destruction.

With a class, member destruction is assured regardless of libjpeg errors during encode(),
whereas in our current PNGEncoder (not class based), a C++ object leaks memory on encoding
failures.  I&apos;m trying to avoid that, but maybe I should just ditch the class approach and
write it all as static functions, I&apos;m fresh out of ideas for keeping the code short.


&gt; &gt; WebCore/platform/image-encoders/skia/JPGImageEncoder.cpp:107
&gt; &gt; +        const SkPMColor* pixel = reinterpret_cast&lt;const uint32_t*&gt;(m_pixels);
&gt; &gt; +        while (pixels-- &gt; 0) {
&gt; &gt; +            SkColor unmultiplied = SkUnPreMultiply::PMColorToColor(*pixel++);
&gt; 
&gt; Nit: If you declare |m_pixels| as &quot;const SkPMColor*&quot; (and add a &quot;/ sizeof(SkPMColor)&quot; to the increment in encode() above), you can write this loop as:
&gt; 
&gt; for (const SkPMColor* pixel = m_pixels; pixel &lt; (m_pixels + pixels); ++pixel) {
&gt;   SkColor unmultiplied = SkUnPreMultiply::PMColorToColor(*pixel);
&gt;   ...
&gt; 
&gt; ...which is not only shorter, it seems (to me at least) easier to understand and harder to screw up.

Shorter true, a little harder to read for me :).  Appreciate your idea about defining
|m_pixels| as const SkPMColor* -- I&apos;ve used it and it simplified the loop, made me deal
with m_pixels in one place (rather than two), and allowed me to ditch 8 more lines
of code from encode(), much shorter.

Uploaded a WIP patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>313923</commentid>
    <comment_count>10</comment_count>
      <attachid>74908</attachid>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2010-11-26 01:40:00 -0800</bug_when>
    <thetext>Created attachment 74908
patch wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314303</commentid>
    <comment_count>11</comment_count>
      <attachid>75000</attachid>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2010-11-29 01:30:12 -0800</bug_when>
    <thetext>Created attachment 75000
patch wip static functions

rewritten using static functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>314842</commentid>
    <comment_count>12</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2010-11-29 20:33:50 -0800</bug_when>
    <thetext>*** Bug 38495 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316018</commentid>
    <comment_count>13</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2010-12-01 22:41:30 -0800</bug_when>
    <thetext>asked for clarification on jpeg image toDataURL, bug filed 
  http://www.w3.org/Bugs/Public/show_bug.cgi?id=11431</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316020</commentid>
    <comment_count>14</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2010-12-01 22:45:49 -0800</bug_when>
    <thetext>No observable difference in performance for either implementation, so choosing the short code, adding r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316026</commentid>
    <comment_count>15</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2010-12-01 23:34:17 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 74360 [details])
&gt; Thanks for taking this on!

more too it than I expected :)

&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=74360&amp;action=review
&gt; 
&gt; &gt; WebCore/ChangeLog:16
&gt; &gt; +        alpha channel when extracting an &quot;image/jpeg&quot;.toDataURL().  The correct answer
&gt; &gt; +        needs more investigation.
&gt; 
&gt; I don&apos;t know if it helps for this particular test, but some of the canvas/philip tests require a different unpremultiply that the one implemented in SkUnPreMultiply, in order to achieve roundtrip lossless conversion on a certain set of colours.  See http://trac.webkit.org/changeset/71760, function mulDiv255Ceil() in ImageBufferSkia.cpp.  The test was canvas/philip/tests/2d.imageData.put.unchanged.html.  If this does fix the problem, it would be
ideal if you could upstream this function to Skia.

So mulDiv255Ceil() appears to premultiply, yes?  In my case, I&apos;m doing the opposite -- I must unpremultiply much like getImageData().  I note that
getImageData() uses color-component * 255 / alpha to unpremultiply RGB values.  I believe SkUnPreMultiply does exactly that using a lookup table to
avoid integer division.  Please check, because I wondered why getImageData() uses an integer divide.

The test I mentioned, canvas/philip/tests/toDataURL.jpeg.alpha.html, suggests we should not unpremultiply at all, and instead ignore the alpha
channel and JPEG encode the premultiplied RGB.  Firefox and Safari unpremultiply first and JPEG encode the unpremultiplied RGB.  Don&apos;t know who&apos;s
right here, I asked ian to clarify the spec - http://www.w3.org/Bugs/Public/show_bug.cgi?id=11431


&gt; &gt; WebCore/platform/image-encoders/skia/JPGImageEncoder.cpp:107
&gt; &gt; +            SkColor unmultiplied = SkUnPreMultiply::PMColorToColor(*pixel++);
&gt; 
&gt; See above:  check if mulDiv255Ceil() fixes the JPEG+alpha case.

see above.

&gt; &gt; WebCore/platform/image-encoders/skia/JPGImageEncoder.cpp:117
&gt; &gt; +        out-&gt;m_buffer.resize(8192);
&gt; 
&gt; This magic value should be in a constant.

done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316246</commentid>
    <comment_count>16</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2010-12-02 10:56:12 -0800</bug_when>
    <thetext>Looks good. (Comments below are more conversational in nature :).

(In reply to comment #15)
&gt; (In reply to comment #8)
&gt; 
&gt; &gt; I don&apos;t know if it helps for this particular test, but some of the canvas/philip tests require a different unpremultiply that the one implemented in SkUnPreMultiply, in order to achieve roundtrip lossless conversion on a certain set of colours.  See http://trac.webkit.org/changeset/71760, function mulDiv255Ceil() in ImageBufferSkia.cpp.  The test was canvas/philip/tests/2d.imageData.put.unchanged.html.  If this does fix the problem, it would be
&gt; ideal if you could upstream this function to Skia.
&gt; 
&gt; So mulDiv255Ceil() appears to premultiply, yes?  In my case, I&apos;m doing the opposite -- I must unpremultiply much like getImageData().

Oh, you&apos;re right.  In that case, forget everything I said.  :)

&gt; I note that
&gt; getImageData() uses color-component * 255 / alpha to unpremultiply RGB values.  I believe SkUnPreMultiply does exactly that using a lookup table to
&gt; avoid integer division.  Please check, because I wondered why getImageData() uses an integer divide.

I think I&apos;m to blame, actually:  see r50408, where I ripped out SkPMColorToColor() and replaced it with integer divides (as the CG path does).  If I recall correctly, SkPMColorToColor() rounds, while the CG path truncates, and the latter behaviour was required to get us to pass the layout test.  (It also looks like the LUT in SkPMColorToColor is only accurate to with one lsb, but I could be wrong about that).  It should be possible to implement a rounding LUT that behaves the same as the CG path, but it would probably need to be bigger to be fully accurate.

&gt; The test I mentioned, canvas/philip/tests/toDataURL.jpeg.alpha.html, suggests we should not unpremultiply at all, and instead ignore the alpha
&gt; channel and JPEG encode the premultiplied RGB.  Firefox and Safari unpremultiply first and JPEG encode the unpremultiplied RGB.  Don&apos;t know who&apos;s
&gt; right here, I asked ian to clarify the spec - http://www.w3.org/Bugs/Public/show_bug.cgi?id=11431
&gt; 
&gt; 
&gt; &gt; &gt; WebCore/platform/image-encoders/skia/JPGImageEncoder.cpp:107
&gt; &gt; &gt; +            SkColor unmultiplied = SkUnPreMultiply::PMColorToColor(*pixel++);
&gt; &gt; 
&gt; &gt; See above:  check if mulDiv255Ceil() fixes the JPEG+alpha case.
&gt; 
&gt; see above.
&gt; 
&gt; &gt; &gt; WebCore/platform/image-encoders/skia/JPGImageEncoder.cpp:117
&gt; &gt; &gt; +        out-&gt;m_buffer.resize(8192);
&gt; &gt; 
&gt; &gt; This magic value should be in a constant.
&gt; 
&gt; done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316298</commentid>
    <comment_count>17</comment_count>
      <attachid>75000</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-02 11:43:03 -0800</bug_when>
    <thetext>Comment on attachment 75000
patch wip static functions

Clearing flags on attachment: 75000

Committed r73173: &lt;http://trac.webkit.org/changeset/73173&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>316299</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-12-02 11:43:11 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>73965</attachid>
            <date>2010-11-15 23:10:17 -0800</date>
            <delta_ts>2010-11-16 17:24:58 -0800</delta_ts>
            <desc>patch</desc>
            <filename>git-diff.patch</filename>
            <type>text/plain</type>
            <size>16026</size>
            <attacher name="noel gordon">noel.gordon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
M2Y4YTRlOS4uMTljOTgxZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAxMC0xMS0xNSAgTm9lbCBHb3Jkb24g
IDxub2VsLmdvcmRvbkBnbWFpbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBBZGQgY2FudmFzLnRvRGF0YVVSTCgiaW1hZ2Uv
anBlZyIsIHF1YWxpdHkpIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTQ5MzY1CisKKyAgICAgICAgQWRkZWQgYSBsaWJqcGVnLWJhc2VkIGlt
YWdlIGVuY29kZXIgZm9yIFNraWEgYml0bWFwcy4gIEFzIHBlciB0aGUgUE5HIGVuY29kZXIsCisg
ICAgICAgIG9ubHkga0FSR0JfODg4OCAoMzIgYml0IHBlciBwaXhlbCkgYml0bWFwcyBhcmUgc3Vw
cG9ydGVkLiAgRGVmYXVsdCBxdWFsaXR5IGZvcgorICAgICAgICBlbmNvZGluZyBpcyBzZXQgdG8g
OTIsIHRvIG1hdGNoIE1vemlsbGEsIGFuZCBTYWZhcmkgNSwgYWx0aG91Z2ggdGhlIGFjdHVhbCB2
YWx1ZQorICAgICAgICB1c2VkIGJ5IFNhZmFyaSB1bmRvY3VtZW50ZWQuCisKKyAgICAgICAgSlBH
Qml0bWFwRW5jb2Rlcjo6cHJlTXVsdGlwbGllZEJHUkF0b1JHQiByZXN0b3JlcyB0aGUgdW5tdWx0
aXBsaWVkIFJHQiBjb2xvcnMKKyAgICAgICAgd2hlcmUgdGhlcmUgaXMgbm9uLXplcm8gYWxwaGEu
ICBUaGlzIHRvIG1hdGNoIEZpcmVmb3ggYW5kIFNhZmFyaSwgYnV0IG5vIGJyb3dzZXIKKyAgICAg
ICAgbWF0Y2hlcyB0aGUgSFRNTDUgY2FudmFzIHN0YW5kYXJkIGhlcmUsIGNvbnNpZGVyaW5nIHRo
ZSByZXN1bHRzIG9mIGNhbnZhcyB0ZXN0CisgICAgICAgIGNhbnZhcy9waGlsaXAvdGVzdHMvdG9E
YXRhVVJMLmpwZWcuYWxwaGEuaHRtbCAtIHRoYXQgdGVzdCBzdWdnZXN0cyB3ZSBzaG91bGQKKyAg
ICAgICAgaWdub3JlIHRoZSBhbHBoYSBjaGFubmVsIHdoZW4gZXh0cmFjdGluZyBhIGpwZWcgLnRv
RGF0YVVSTCBpbWFnZS4gIFRoZSBjb3JyZWN0CisgICAgICAgIGFuc3dlciByZXF1aXJlcyBtb3Jl
IGludmVzdGlnYXRpb24uCisKKyAgICAgICAgQ2FudmFzIHRvRGF0YVVSTCBpcyBjb3ZlcmVkIGJ5
IGV4aXN0aW5nIHRlc3RzIGNhbnZhcy9waGlsaXAvdGVzdHMvdG9EYXRhVVJMLioKKworICAgICAg
ICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2Fu
dmFzRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEhUTUxDYW52YXNFbGVt
ZW50Ojp0b0RhdGFVUkxDYWxsYmFjayk6IGRvbid0IHNldCBxdWFsaXR5IGF0IHRoaXMgbGV2ZWws
CisgICAgICAgICAgICAgIGp1c3QgcGFzcyB0aGUgcGFyYW1ldGVycyB0byB0aGUgY2FudmFzIGxh
eWVyLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL01JTUVUeXBlUmVnaXN0cnlDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZElt
YWdlTUlNRVR5cGVGb3JFbmNvZGluZyk6IGltcGxlbWVudCBpbi1wbGFjZS4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKTogYWRkIGpwZWcgJiBlbmNvZGluZyBxdWFsaXR5
IHN1cHBvcnQuCisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9KUEdJbWFn
ZUVuY29kZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpQR0JpdG1hcEVuY29kZXI6
OkpQR0JpdG1hcEVuY29kZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlBHQml0bWFwRW5jb2Rlcjo6
ZW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkpQR0JpdG1hcEVuY29kZXI6OnByZU11bHRpcGxp
ZWRCR1JBdG9SR0IpOgorICAgICAgICAoV2ViQ29yZTo6SlBHQml0bWFwRW5jb2Rlcjo6cHJlcGFy
ZU91dHB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKUEdCaXRtYXBFbmNvZGVyOjp3cml0ZU91dHB1
dCk6CisgICAgICAgIChXZWJDb3JlOjpKUEdCaXRtYXBFbmNvZGVyOjpmaW5pc2hPdXRwdXQpOgor
ICAgICAgICAoV2ViQ29yZTo6SlBHQml0bWFwRW5jb2Rlcjo6aGFuZGxlRXJyb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6SlBHSW1hZ2VFbmNvZGVyOjplbmNvZGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWVuY29kZXJzL3NraWEvSlBHSW1hZ2VFbmNvZGVyLmg6IEFkZGVkLgorCiAyMDEwLTEx
LTE1ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGE5M2RjNTEuLjg0ODEzNDQgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0y
OTE2LDYgKzI5MTYsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3ps
aWIvemNvbmYuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi96
bGliLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvenV0aWwu
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9KUEdJbWFnZUVu
Y29kZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQ
R0ltYWdlRW5jb2Rlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9z
a2lhL1BOR0ltYWdlRW5jb2Rlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWVu
Y29kZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21h
Yy9BdXRvZHJhaW5lZFBvb2wubW0nLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAppbmRleCBkMmY4Yzk2Li5lMTU0
ZjdmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNF
bGVtZW50Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxD
YW52YXNFbGVtZW50Q3VzdG9tLmNwcApAQCAtOTQsMTggKzk0LDE5IEBAIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOEhUTUxDYW52YXNFbGVtZW50OjpnZXRDb250ZXh0Q2FsbGJhY2soY29uc3Qgdjg6
OkFyZ3VtZW50CiAKIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxDYW52YXNFbGVtZW50Ojp0
b0RhdGFVUkxDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogewotICAgIGRvdWJs
ZSBxdWFsaXR5ID0gMS4wOwotICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMSkgewotICAgICAgICBp
ZiAoYXJnc1sxXS0+SXNOdW1iZXIoKSkKLSAgICAgICAgICAgIHF1YWxpdHkgPSBhcmdzWzFdLT5O
dW1iZXJWYWx1ZSgpOwotICAgICAgICBpZiAoISgwLjAgPD0gcXVhbGl0eSAmJiBxdWFsaXR5IDw9
IDEuMCkpCi0gICAgICAgICAgICBxdWFsaXR5ID0gMS4wOwotICAgIH0KICAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7CiAgICAgSFRNTENhbnZhc0VsZW1l
bnQqIGNhbnZhcyA9IFY4SFRNTENhbnZhc0VsZW1lbnQ6OnRvTmF0aXZlKGhvbGRlcik7Ci0gICAg
U3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7Ci0gICAgU3RyaW5nIHJlc3VsdCA9IGNhbnZhcy0+dG9EYXRhVVJMKHR5cGUsICZx
dWFsaXR5LCBlYyk7CisKKyAgICBTdHJpbmcgdHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBd
KTsKKyAgICBkb3VibGUgcXVhbGl0eTsKKyAgICBkb3VibGUqIHF1YWxpdHlQdHIgPSAwOworICAg
IGlmIChhcmdzLkxlbmd0aCgpID4gMSAmJiBhcmdzWzFdLT5Jc051bWJlcigpKSB7CisgICAgICAg
IHF1YWxpdHkgPSBhcmdzWzFdLT5OdW1iZXJWYWx1ZSgpOworICAgICAgICBxdWFsaXR5UHRyID0g
JnF1YWxpdHk7CisgICAgfQorCisgICAgU3RyaW5nIHJlc3VsdCA9IGNhbnZhcy0+dG9EYXRhVVJM
KHR5cGUsIHF1YWxpdHlQdHIsIGVjKTsKICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMp
OwogICAgIHJldHVybiB2OFN0cmluZ09yVW5kZWZpbmVkKHJlc3VsdCk7CiB9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL01JTUVUeXBlUmVnaXN0cnlDaHJvbWl1bS5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL01JTUVUeXBlUmVnaXN0cnlDaHJvbWl1bS5jcHAK
aW5kZXggMjNmNzkyNi4uOWRmODg0NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9NSU1FVHlwZVJlZ2lzdHJ5Q2hyb21pdW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vTUlNRVR5cGVSZWdpc3RyeUNocm9taXVtLmNwcApAQCAtOTEsOCArOTEsNyBAQCBi
b29sIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VSZXNvdXJjZU1JTUVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpCiAKIGJvb2wgTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0
ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKLSAg
ICAvLyBGSVhNRTogRmlsbCB0aGlzIG91dC4gU2VlOiBodHRwOi8vdHJhYy53ZWJraXQub3JnL2No
YW5nZXNldC8zMDg4OAotICAgIHJldHVybiBpc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUobWltZVR5
cGUpOworICAgIHJldHVybiBtaW1lVHlwZSA9PSAiaW1hZ2UvanBlZyIgfHwgbWltZVR5cGUgPT0g
ImltYWdlL3BuZyI7CiB9CiAKIGJvb2wgTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRKYXZh
U2NyaXB0TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKaW5kZXggMGRiOTZjZi4u
YzdmODJmMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
QnVmZmVyU2tpYS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
QnVmZmVyU2tpYS5jcHAKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJHTEVTMkNhbnZhcy5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgor
I2luY2x1ZGUgIkpQR0ltYWdlRW5jb2Rlci5oIgogI2luY2x1ZGUgIlBOR0ltYWdlRW5jb2Rlci5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJTa0NvbG9yUHJp
di5oIgpAQCAtMzEyLDIwICszMTMsMjkgQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlw
bGllZEltYWdlRGF0YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc28KICAgICBw
dXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4oc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQs
ICpjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5iaXRtYXAoKSwgbV9zaXplKTsKIH0KIAot
U3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwgY29uc3QgZG91Ymxl
KikgY29uc3QKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkgY29uc3QKIHsKLSAgICAvLyBFbmNvZGUgdGhl
IGltYWdlIGludG8gYSB2ZWN0b3IuCi0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHBuZ0VuY29k
ZWREYXRhOwotICAgIFBOR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKCpjb250ZXh0KCktPnBsYXRmb3Jt
Q29udGV4dCgpLT5iaXRtYXAoKSwgJnBuZ0VuY29kZWREYXRhKTsKLQotICAgIC8vIENvbnZlcnQg
aXQgaW50byBiYXNlNjQuCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NEVuY29kZWREYXRhOwotICAg
IGJhc2U2NEVuY29kZSgqcmVpbnRlcnByZXRfY2FzdDxWZWN0b3I8Y2hhcj4qPigmcG5nRW5jb2Rl
ZERhdGEpLCBiYXNlNjRFbmNvZGVkRGF0YSk7Ci0gICAgLy8gQXBwZW5kIHdpdGggYSBcMCBzbyB0
aGF0IGl0J3MgYSB2YWxpZCBzdHJpbmcuCi0gICAgYmFzZTY0RW5jb2RlZERhdGEuYXBwZW5kKCdc
MCcpOwotCi0gICAgLy8gQW5kIHRoZSByZXN1bHRpbmcgc3RyaW5nLgotICAgIHJldHVybiBtYWtl
U3RyaW5nKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZERhdGEuZGF0YSgp
KTsKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBl
Rm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBlbmNv
ZGVkSW1hZ2U7CisKKyAgICBpZiAobWltZVR5cGUgPT0gImltYWdlL2pwZWciKSB7CisgICAgICAg
IGludCBjb21wcmVzc2lvblF1YWxpdHkgPSBKUEdJbWFnZUVuY29kZXI6OkRlZmF1bHRDb21wcmVz
c2lvblF1YWxpdHk7CisgICAgICAgIGlmIChxdWFsaXR5ICYmICpxdWFsaXR5ID49IDAuMCAmJiAq
cXVhbGl0eSA8PSAxLjApCisgICAgICAgICAgICBjb21wcmVzc2lvblF1YWxpdHkgPSBzdGF0aWNf
Y2FzdDxpbnQ+KCpxdWFsaXR5ICogMTAwICsgMC41KTsKKyAgICAgICAgaWYgKCFKUEdJbWFnZUVu
Y29kZXI6OmVuY29kZSgqY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCksIGNv
bXByZXNzaW9uUXVhbGl0eSwgJmVuY29kZWRJbWFnZSkpCisgICAgICAgICAgICByZXR1cm4gImRh
dGE6LCI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFQTkdJbWFnZUVuY29kZXI6OmVuY29k
ZSgqY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCksICZlbmNvZGVkSW1hZ2Up
KQorICAgICAgICAgICAgcmV0dXJuICJkYXRhOiwiOworICAgICAgICBBU1NFUlQobWltZVR5cGUg
PT0gImltYWdlL3BuZyIpOworICAgIH0KKworICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwor
ICAgIGJhc2U2NEVuY29kZSgqcmVpbnRlcnByZXRfY2FzdDxWZWN0b3I8Y2hhcj4qPigmZW5jb2Rl
ZEltYWdlKSwgYmFzZTY0RGF0YSk7CisgICAgYmFzZTY0RGF0YS5hcHBlbmQoJ1wwJyk7CisKKyAg
ICByZXR1cm4gbWFrZVN0cmluZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0
RGF0YS5kYXRhKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvSlBHSW1hZ2VFbmNvZGVyLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9KUEdJbWFnZUVuY29kZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlZWMwMDQKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvSlBHSW1hZ2VFbmNv
ZGVyLmNwcApAQCAtMCwwICsxLDE2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkpQR0ltYWdlRW5jb2Rlci5oIgorCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlNr
Qml0bWFwLmgiCisjaW5jbHVkZSAiU2tVblByZU11bHRpcGx5LmgiCitleHRlcm4gIkMiIHsKKyNp
bmNsdWRlICJqaW5jbHVkZS5oIgorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlIDxzZXRq
bXAuaD4KK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKUEdCaXRtYXBFbmNvZGVy
IDogcHVibGljIGpwZWdfZGVzdGluYXRpb25fbWdyIHsKK3B1YmxpYzoKKyAgICBKUEdCaXRtYXBF
bmNvZGVyKGNvbnN0IFNrQml0bWFwJiBpbnB1dCwgVmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBvdXRw
dXQpCisgICAgICAgIDogbV9iaXRtYXAoaW5wdXQpCisgICAgICAgICwgbV9waXhlbHMoc3RhdGlj
X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGlucHV0LmdldFBpeGVscygpKSkKKyAgICAgICAg
LCBtX291dHB1dChvdXRwdXQpCisgICAgeworICAgICAgICB0aGlzLT5qcGVnX2Rlc3RpbmF0aW9u
X21ncjo6aW5pdF9kZXN0aW5hdGlvbiA9IHByZXBhcmVPdXRwdXQ7CisgICAgICAgIHRoaXMtPmpw
ZWdfZGVzdGluYXRpb25fbWdyOjplbXB0eV9vdXRwdXRfYnVmZmVyID0gd3JpdGVPdXRwdXQ7Cisg
ICAgICAgIHRoaXMtPmpwZWdfZGVzdGluYXRpb25fbWdyOjp0ZXJtX2Rlc3RpbmF0aW9uID0gZmlu
aXNoT3V0cHV0OworICAgIH0KKworICAgIGJvb2wgZW5jb2RlKGludCBxdWFsaXR5KQorICAgIHsK
KyAgICAgICAgSW50U2l6ZSBpbWFnZVNpemUobV9iaXRtYXAud2lkdGgoKSwgbV9iaXRtYXAuaGVp
Z2h0KCkpOworICAgICAgICBpbWFnZVNpemUuY2xhbXBOZWdhdGl2ZVRvWmVybygpOworCisgICAg
ICAgIGNvbnN0IGludCBpbnB1dFJvd0J5dGVzID0gaW1hZ2VTaXplLndpZHRoKCkgKiA0OworICAg
ICAgICBpZiAoIWlucHV0Um93Qnl0ZXMgfHwgKGlucHV0Um93Qnl0ZXMgIT0gbV9iaXRtYXAucm93
Qnl0ZXMoKSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBqcGVnX2NvbXByZXNzX3N0cnVjdCBjaW5m
bzsKKyAgICAgICAgY2luZm8uZXJyID0ganBlZ19zdGRfZXJyb3IoJm1fZXJyb3IpOworICAgICAg
ICBtX2Vycm9yLmVycm9yX2V4aXQgPSBoYW5kbGVFcnJvcjsKKyAgICAgICAgY2luZm8uY2xpZW50
X2RhdGEgPSB0aGlzOworCisgICAgICAgIGlmIChzZXRqbXAobV9qbXBidWYpKSB7CisgICAgICAg
ICAgICBqcGVnX2Rlc3Ryb3lfY29tcHJlc3MoJmNpbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGpwZWdfY3JlYXRlX2NvbXByZXNzKCZjaW5mbyk7
CisgICAgICAgIGNpbmZvLmRlc3QgPSB0aGlzOworICAgICAgICBjaW5mby5pbWFnZV93aWR0aCA9
IGltYWdlU2l6ZS53aWR0aCgpOworICAgICAgICBjaW5mby5pbWFnZV9oZWlnaHQgPSBpbWFnZVNp
emUuaGVpZ2h0KCk7CisgICAgICAgIGNpbmZvLmluX2NvbG9yX3NwYWNlID0gSkNTX1JHQjsKKyAg
ICAgICAgY2luZm8uaW5wdXRfY29tcG9uZW50cyA9IDM7CisgICAgICAgIGNpbmZvLm9wdGltaXpl
X2NvZGluZyA9IFRSVUU7CisKKyAgICAgICAganBlZ19zZXRfZGVmYXVsdHMoJmNpbmZvKTsKKyAg
ICAgICAganBlZ19zZXRfcXVhbGl0eSgmY2luZm8sIHF1YWxpdHksIFRSVUUpOworICAgICAgICBq
cGVnX3N0YXJ0X2NvbXByZXNzKCZjaW5mbywgVFJVRSk7CisKKyAgICAgICAgbV9yb3cucmVzaXpl
KGNpbmZvLmltYWdlX3dpZHRoICogMyk7CisgICAgICAgIHdoaWxlIChjaW5mby5uZXh0X3NjYW5s
aW5lIDwgY2luZm8uaW1hZ2VfaGVpZ2h0KSB7CisgICAgICAgICAgICBwcmVNdWx0aXBsaWVkQkdS
QXRvUkdCKGNpbmZvLmltYWdlX3dpZHRoLCBtX3Jvdy5kYXRhKCkpOworICAgICAgICAgICAganBl
Z193cml0ZV9zY2FubGluZXMoJmNpbmZvLCBtX3Jvdy5kYXRhU2xvdCgpLCAxKTsKKyAgICAgICAg
ICAgIG1fcGl4ZWxzICs9IG1fYml0bWFwLnJvd0J5dGVzKCk7CisgICAgICAgIH0KKworICAgICAg
ICBqcGVnX2ZpbmlzaF9jb21wcmVzcygmY2luZm8pOworICAgICAgICBqcGVnX2Rlc3Ryb3lfY29t
cHJlc3MoJmNpbmZvKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgor
ICAgIHZvaWQgcHJlTXVsdGlwbGllZEJHUkF0b1JHQih1bnNpZ25lZCBwaXhlbHMsIHVuc2lnbmVk
IGNoYXIqIG91dHB1dCkKKyAgICB7CisgICAgICAgIGNvbnN0IFNrUE1Db2xvciogcGl4ZWwgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90Kj4obV9waXhlbHMpOworICAgICAgICB3aGls
ZSAocGl4ZWxzLS0gPiAwKSB7CisgICAgICAgICAgICBTa0NvbG9yIHVubXVsdGlwbGllZCA9IFNr
VW5QcmVNdWx0aXBseTo6UE1Db2xvclRvQ29sb3IoKnBpeGVsKyspOworICAgICAgICAgICAgKm91
dHB1dCsrID0gU2tDb2xvckdldFIodW5tdWx0aXBsaWVkKTsKKyAgICAgICAgICAgICpvdXRwdXQr
KyA9IFNrQ29sb3JHZXRHKHVubXVsdGlwbGllZCk7CisgICAgICAgICAgICAqb3V0cHV0KysgPSBT
a0NvbG9yR2V0Qih1bm11bHRpcGxpZWQpOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGlj
IHZvaWQgcHJlcGFyZU91dHB1dChqX2NvbXByZXNzX3B0ciBjaW5mbykKKyAgICB7CisgICAgICAg
IEpQR0JpdG1hcEVuY29kZXIqIG91dCA9IHN0YXRpY19jYXN0PEpQR0JpdG1hcEVuY29kZXIqPihj
aW5mby0+ZGVzdCk7CisgICAgICAgIG91dC0+bV9idWZmZXIucmVzaXplKDgxOTIpOworICAgICAg
ICBvdXQtPm5leHRfb3V0cHV0X2J5dGUgPSBvdXQtPm1fYnVmZmVyLmRhdGEoKTsKKyAgICAgICAg
b3V0LT5mcmVlX2luX2J1ZmZlciA9IG91dC0+bV9idWZmZXIuc2l6ZSgpOworICAgIH0KKworICAg
IHN0YXRpYyBib29sZWFuIHdyaXRlT3V0cHV0KGpfY29tcHJlc3NfcHRyIGNpbmZvKQorICAgIHsK
KyAgICAgICAgSlBHQml0bWFwRW5jb2Rlciogb3V0ID0gc3RhdGljX2Nhc3Q8SlBHQml0bWFwRW5j
b2Rlcio+KGNpbmZvLT5kZXN0KTsKKyAgICAgICAgb3V0LT5tX291dHB1dC0+YXBwZW5kKG91dC0+
bV9idWZmZXIuZGF0YSgpLCBvdXQtPm1fYnVmZmVyLnNpemUoKSk7CisgICAgICAgIG91dC0+bmV4
dF9vdXRwdXRfYnl0ZSA9IG91dC0+bV9idWZmZXIuZGF0YSgpOworICAgICAgICBvdXQtPmZyZWVf
aW5fYnVmZmVyID0gb3V0LT5tX2J1ZmZlci5zaXplKCk7CisgICAgICAgIHJldHVybiBUUlVFOwor
ICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGZpbmlzaE91dHB1dChqX2NvbXByZXNzX3B0ciBjaW5m
bykKKyAgICB7CisgICAgICAgIEpQR0JpdG1hcEVuY29kZXIqIG91dCA9IHN0YXRpY19jYXN0PEpQ
R0JpdG1hcEVuY29kZXIqPihjaW5mby0+ZGVzdCk7CisgICAgICAgIGNvbnN0IHNpemVfdCBzaXpl
ID0gb3V0LT5tX2J1ZmZlci5zaXplKCkgLSBvdXQtPmZyZWVfaW5fYnVmZmVyOworICAgICAgICBv
dXQtPm1fb3V0cHV0LT5hcHBlbmQob3V0LT5tX2J1ZmZlci5kYXRhKCksIHNpemUpOworICAgIH0K
KworICAgIHN0YXRpYyB2b2lkIGhhbmRsZUVycm9yKGpfY29tbW9uX3B0ciBjb21tb24pCisgICAg
eworICAgICAgICB2b2lkKiBjbGllbnQgPSBjb21tb24tPmNsaWVudF9kYXRhOworICAgICAgICBK
UEdCaXRtYXBFbmNvZGVyKiBmYWlsZWQgPSBzdGF0aWNfY2FzdDxKUEdCaXRtYXBFbmNvZGVyKj4o
Y2xpZW50KTsKKyAgICAgICAgbG9uZ2ptcChmYWlsZWQtPm1fam1wYnVmLCAtMSk7CisgICAgfQor
CisgICAgY29uc3QgU2tCaXRtYXAmIG1fYml0bWFwOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIq
IG1fcGl4ZWxzOworICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogbV9vdXRwdXQ7CisgICAgVmVj
dG9yPHVuc2lnbmVkIGNoYXI+IG1fYnVmZmVyOworICAgIFZlY3RvcjxKU0FNUExFPiBtX3JvdzsK
KyAgICBqcGVnX2Vycm9yX21nciBtX2Vycm9yOworICAgIGptcF9idWYgbV9qbXBidWY7Cit9Owor
Citib29sIEpQR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGlu
dCBxdWFsaXR5LCBWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG91dHB1dCkKK3sKKyAgICBpZiAoYml0
bWFwLmNvbmZpZygpICE9IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykKKyAgICAgICAgcmV0
dXJuIGZhbHNlOyAvLyBPbmx5IHN1cHBvcnQgQVJHQiAzMiBicHAgc2tpYSBiaXRtYXBzLgorCisg
ICAgU2tBdXRvTG9ja1BpeGVscyBiaXRtYXBMb2NrKGJpdG1hcCk7CisgICAgcmV0dXJuIEpQR0Jp
dG1hcEVuY29kZXIoYml0bWFwLCBvdXRwdXQpLmVuY29kZShxdWFsaXR5KTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNv
ZGVycy9za2lhL0pQR0ltYWdlRW5jb2Rlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNv
ZGVycy9za2lhL0pQR0ltYWdlRW5jb2Rlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmVhMjhkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWVuY29kZXJzL3NraWEvSlBHSW1hZ2VFbmNvZGVyLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBKUEdJbWFnZUVuY29kZXJfaAorI2RlZmluZSBKUEdJbWFnZUVuY29kZXJfaAorCisjaW5jbHVk
ZSAiVmVjdG9yLmgiCisKK2NsYXNzIFNrQml0bWFwOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEpQR0ltYWdlRW5jb2RlciB7CitwdWJsaWM6CisgICAgLy8gRW5jb2RlIHRoZSBpbnB1
dCBiaXRtYXAgd2l0aCBhIGNvbXByZXNzaW9uIHF1YWxpdHkgaW4gWzAtMTAwXS4KKyAgICBzdGF0
aWMgYm9vbCBlbmNvZGUoY29uc3QgU2tCaXRtYXAmLCBpbnQgcXVhbGl0eSwgVmVjdG9yPHVuc2ln
bmVkIGNoYXI+Kik7CisKKyAgICAvLyBGb3IgY2FsbGVyczogcHJvdmlkZSBhIHJlYXNvbmFibGUg
Y29tcHJlc3Npb24gcXVhbGl0eSBkZWZhdWx0LgorICAgIGVudW0gUXVhbGl0eSB7IERlZmF1bHRD
b21wcmVzc2lvblF1YWxpdHkgPSA5MiB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74069</attachid>
            <date>2010-11-16 17:24:58 -0800</date>
            <delta_ts>2010-11-18 23:52:35 -0800</delta_ts>
            <desc>patch</desc>
            <filename>linux-build-fix.diff</filename>
            <type>text/plain</type>
            <size>15198</size>
            <attacher name="noel gordon">noel.gordon</attacher>
            
              <data encoding="base64">LS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGEvV2ViQ29yZS9DaGFuZ2VMb2cJCkBAIC0xLDMg
KzEsNDMgQEAgCisyMDEwLTExLTE1ICBOb2VsIEdvcmRvbiAgPG5vZWwuZ29yZG9uQGdtYWlsLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hy
b21pdW1dIEFkZCBjYW52YXMudG9EYXRhVVJMKCJpbWFnZS9qcGVnIiwgcXVhbGl0eSkgc3VwcG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzNjUK
KworICAgICAgICBBZGRlZCBhIGxpYmpwZWctYmFzZWQgaW1hZ2UgZW5jb2RlciBmb3IgU2tpYSBi
aXRtYXBzLiAgQXMgcGVyIHRoZSBQTkcgZW5jb2RlciwKKyAgICAgICAgb25seSBrQVJHQl84ODg4
ICgzMiBiaXQgcGVyIHBpeGVsKSBiaXRtYXBzIGFyZSBzdXBwb3J0ZWQuICBEZWZhdWx0IHF1YWxp
dHkgZm9yCisgICAgICAgIGVuY29kaW5nIGlzIHNldCB0byA5MiwgdG8gbWF0Y2ggTW96aWxsYSwg
YW5kIFNhZmFyaSA1LCBhbHRob3VnaCB0aGUgYWN0dWFsIHZhbHVlCisgICAgICAgIHVzZWQgYnkg
U2FmYXJpIHVuZG9jdW1lbnRlZC4KKworICAgICAgICBKUEdCaXRtYXBFbmNvZGVyOjpwcmVNdWx0
aXBsaWVkQkdSQXRvUkdCIHJlc3RvcmVzIHRoZSB1bm11bHRpcGxpZWQgUkdCIGNvbG9ycworICAg
ICAgICB3aGVyZSB0aGVyZSBpcyBub24temVybyBhbHBoYS4gIFRoaXMgdG8gbWF0Y2ggRmlyZWZv
eCBhbmQgU2FmYXJpLCBidXQgbm8gYnJvd3NlcgorICAgICAgICBtYXRjaGVzIHRoZSBIVE1MNSBj
YW52YXMgc3RhbmRhcmQgaGVyZSwgY29uc2lkZXJpbmcgdGhlIHJlc3VsdHMgb2YgY2FudmFzIHRl
c3QKKyAgICAgICAgY2FudmFzL3BoaWxpcC90ZXN0cy90b0RhdGFVUkwuanBlZy5hbHBoYS5odG1s
IC0gdGhhdCB0ZXN0IHN1Z2dlc3RzIHdlIHNob3VsZAorICAgICAgICBpZ25vcmUgdGhlIGFscGhh
IGNoYW5uZWwgd2hlbiBleHRyYWN0aW5nIGEganBlZyAudG9EYXRhVVJMIGltYWdlLiAgVGhlIGNv
cnJlY3QKKyAgICAgICAgYW5zd2VyIHJlcXVpcmVzIG1vcmUgaW52ZXN0aWdhdGlvbi4KKworICAg
ICAgICBDYW52YXMgdG9EYXRhVVJMIGlzIGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMgY2FudmFz
L3BoaWxpcC90ZXN0cy90b0RhdGFVUkwuKgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlY4SFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTENhbGxiYWNr
KTogZG9uJ3Qgc2V0IHF1YWxpdHkgYXQgdGhpcyBsZXZlbCwKKyAgICAgICAgICAgICAganVzdCBw
YXNzIHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBjYW52YXMgbGF5ZXIuCisgICAgICAgICogcGxhdGZv
cm0vY2hyb21pdW0vTUlNRVR5cGVSZWdpc3RyeUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5n
KTogaW1wbGVtZW50IGluLXBsYWNlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEv
SW1hZ2VCdWZmZXJTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjp0b0Rh
dGFVUkwpOiBhZGQganBlZyAmIGVuY29kaW5nIHF1YWxpdHkgc3VwcG9ydC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQR0ltYWdlRW5jb2Rlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SlBHQml0bWFwRW5jb2Rlcjo6SlBHQml0bWFwRW5jb2Rlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpKUEdCaXRtYXBFbmNvZGVyOjplbmNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlBHQml0bWFwRW5jb2Rlcjo6cHJlTXVsdGlwbGllZEJHUkF0b1JHQik6CisgICAgICAg
IChXZWJDb3JlOjpKUEdCaXRtYXBFbmNvZGVyOjpwcmVwYXJlT3V0cHV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkpQR0JpdG1hcEVuY29kZXI6OndyaXRlT3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6
OkpQR0JpdG1hcEVuY29kZXI6OmZpbmlzaE91dHB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKUEdC
aXRtYXBFbmNvZGVyOjpoYW5kbGVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpKUEdJbWFnZUVu
Y29kZXI6OmVuY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9K
UEdJbWFnZUVuY29kZXIuaDogQWRkZWQuCisKIDIwMTAtMTEtMTUgIERpbWl0cmkgR2xhemtvdiAg
PGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxl
ci4KLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkJCisrKyBhL1dlYkNvcmUvV2ViQ29yZS5neXBp
CQpAQCAtMjkxNiw2ICsyOTE2LDggQEAgCiAgICAgICAgICAgICAncGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvemxpYi96Y29uZi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy96bGliL3psaWIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxp
Yi96dXRpbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQ
R0ltYWdlRW5jb2Rlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWVuY29kZXJz
L3NraWEvSlBHSW1hZ2VFbmNvZGVyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWVu
Y29kZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
aW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vbWFjL0F1dG9kcmFpbmVkUG9vbC5tbScsCi0tLSBhL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwCQorKysgYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAkKQEAgLTk0LDE4ICs5
NCwxOSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29u
dGV4dENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudAogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
VjhIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncykKIHsKLSAgICBkb3VibGUgcXVhbGl0eSA9IDEuMDsKLSAgICBpZiAoYXJncy5MZW5n
dGgoKSA+IDEpIHsKLSAgICAgICAgaWYgKGFyZ3NbMV0tPklzTnVtYmVyKCkpCi0gICAgICAgICAg
ICBxdWFsaXR5ID0gYXJnc1sxXS0+TnVtYmVyVmFsdWUoKTsKLSAgICAgICAgaWYgKCEoMC4wIDw9
IHF1YWxpdHkgJiYgcXVhbGl0eSA8PSAxLjApKQotICAgICAgICAgICAgcXVhbGl0eSA9IDEuMDsK
LSAgICB9CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRlcigp
OwogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBWOEhUTUxDYW52YXNFbGVtZW50Ojp0
b05hdGl2ZShob2xkZXIpOwotICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3Nb
MF0pOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFN0cmluZyByZXN1bHQgPSBjYW52
YXMtPnRvRGF0YVVSTCh0eXBlLCAmcXVhbGl0eSwgZWMpOworCisgICAgU3RyaW5nIHR5cGUgPSB0
b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CisgICAgZG91YmxlIHF1YWxpdHk7CisgICAgZG91Ymxl
KiBxdWFsaXR5UHRyID0gMDsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEgJiYgYXJnc1sxXS0+
SXNOdW1iZXIoKSkgeworICAgICAgICBxdWFsaXR5ID0gYXJnc1sxXS0+TnVtYmVyVmFsdWUoKTsK
KyAgICAgICAgcXVhbGl0eVB0ciA9ICZxdWFsaXR5OworICAgIH0KKworICAgIFN0cmluZyByZXN1
bHQgPSBjYW52YXMtPnRvRGF0YVVSTCh0eXBlLCBxdWFsaXR5UHRyLCBlYyk7CiAgICAgVjhQcm94
eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAgICByZXR1cm4gdjhTdHJpbmdPclVuZGVmaW5lZChy
ZXN1bHQpOwogfQotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL01JTUVUeXBlUmVnaXN0
cnlDaHJvbWl1bS5jcHAJCisrKyBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vTUlNRVR5cGVS
ZWdpc3RyeUNocm9taXVtLmNwcAkKQEAgLTkxLDggKzkxLDcgQEAgYm9vbCBNSU1FVHlwZVJlZ2lz
dHJ5Ojppc1N1cHBvcnRlZEltYWdlUmVzb3VyY2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKQogCiBib29sIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZv
ckVuY29kaW5nKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7Ci0gICAgLy8gRklYTUU6IEZpbGwg
dGhpcyBvdXQuIFNlZTogaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMzA4ODgKLSAg
ICByZXR1cm4gaXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICByZXR1cm4g
bWltZVR5cGUgPT0gImltYWdlL2pwZWciIHx8IG1pbWVUeXBlID09ICJpbWFnZS9wbmciOwogfQog
CiBib29sIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpCi0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9JbWFnZUJ1ZmZlclNraWEuY3BwCQorKysgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkKQEAgLTQwLDYgKzQwLDcgQEAgCiAjaW5jbHVkZSAiR0xF
UzJDYW52YXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFn
ZURhdGEuaCIKKyNpbmNsdWRlICJKUEdJbWFnZUVuY29kZXIuaCIKICNpbmNsdWRlICJQTkdJbWFn
ZUVuY29kZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAi
U2tDb2xvclByaXYuaCIKQEAgLTMxMiwyMCArMzEzLDI5IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1
dFByZW11bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3Qm
IHNvCiAgICAgcHV0SW1hZ2VEYXRhPFByZW11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlUmVjdCwg
ZGVzdFBvaW50LCAqY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCksIG1fc2l6
ZSk7CiB9CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYsIGNv
bnN0IGRvdWJsZSopIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkpIGNvbnN0CiB7Ci0gICAgLy8g
RW5jb2RlIHRoZSBpbWFnZSBpbnRvIGEgdmVjdG9yLgotICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFy
PiBwbmdFbmNvZGVkRGF0YTsKLSAgICBQTkdJbWFnZUVuY29kZXI6OmVuY29kZSgqY29udGV4dCgp
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCksICZwbmdFbmNvZGVkRGF0YSk7Ci0KLSAgICAv
LyBDb252ZXJ0IGl0IGludG8gYmFzZTY0LgotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjRFbmNvZGVk
RGF0YTsKLSAgICBiYXNlNjRFbmNvZGUoKnJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yPGNoYXI+Kj4o
JnBuZ0VuY29kZWREYXRhKSwgYmFzZTY0RW5jb2RlZERhdGEpOwotICAgIC8vIEFwcGVuZCB3aXRo
IGEgXDAgc28gdGhhdCBpdCdzIGEgdmFsaWQgc3RyaW5nLgotICAgIGJhc2U2NEVuY29kZWREYXRh
LmFwcGVuZCgnXDAnKTsKLQotICAgIC8vIEFuZCB0aGUgcmVzdWx0aW5nIHN0cmluZy4KLSAgICBy
ZXR1cm4gbWFrZVN0cmluZygiZGF0YTppbWFnZS9wbmc7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWRE
YXRhLmRhdGEoKSk7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1h
Z2VNSU1FVHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisKKyAgICBWZWN0b3I8dW5zaWduZWQg
Y2hhcj4gZW5jb2RlZEltYWdlOworCisgICAgaWYgKG1pbWVUeXBlID09ICJpbWFnZS9qcGVnIikg
eworICAgICAgICBpbnQgY29tcHJlc3Npb25RdWFsaXR5ID0gSlBHSW1hZ2VFbmNvZGVyOjpEZWZh
dWx0Q29tcHJlc3Npb25RdWFsaXR5OworICAgICAgICBpZiAocXVhbGl0eSAmJiAqcXVhbGl0eSA+
PSAwLjAgJiYgKnF1YWxpdHkgPD0gMS4wKQorICAgICAgICAgICAgY29tcHJlc3Npb25RdWFsaXR5
ID0gc3RhdGljX2Nhc3Q8aW50PigqcXVhbGl0eSAqIDEwMCArIDAuNSk7CisgICAgICAgIGlmICgh
SlBHSW1hZ2VFbmNvZGVyOjplbmNvZGUoKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJp
dG1hcCgpLCBjb21wcmVzc2lvblF1YWxpdHksICZlbmNvZGVkSW1hZ2UpKQorICAgICAgICAgICAg
cmV0dXJuICJkYXRhOiwiOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghUE5HSW1hZ2VFbmNv
ZGVyOjplbmNvZGUoKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1hcCgpLCAmZW5j
b2RlZEltYWdlKSkKKyAgICAgICAgICAgIHJldHVybiAiZGF0YTosIjsKKyAgICAgICAgQVNTRVJU
KG1pbWVUeXBlID09ICJpbWFnZS9wbmciKTsKKyAgICB9CisKKyAgICBWZWN0b3I8Y2hhcj4gYmFz
ZTY0RGF0YTsKKyAgICBiYXNlNjRFbmNvZGUoKnJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yPGNoYXI+
Kj4oJmVuY29kZWRJbWFnZSksIGJhc2U2NERhdGEpOworICAgIGJhc2U2NERhdGEuYXBwZW5kKCdc
MCcpOworCisgICAgcmV0dXJuIG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUsICI7YmFzZTY0
LCIsIGJhc2U2NERhdGEuZGF0YSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvSlBHSW1hZ2VFbmNvZGVyLmNw
cAkKKysrIGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQR0ltYWdlRW5j
b2Rlci5jcHAJCkBAIC0wLDAgKzEsMTYzIEBAIAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkpQR0ltYWdlRW5jb2Rlci5oIgorCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUg
IlNrQml0bWFwLmgiCisjaW5jbHVkZSAiU2tVblByZU11bHRpcGx5LmgiCitleHRlcm4gIkMiIHsK
KyNpbmNsdWRlIDxzdGRpby5oPiAvLyBqcGVnbGliLmggbmVlZHMgc3RkaW8uaCBGSUxFCisjaW5j
bHVkZSAianBlZ2xpYi5oIgorI2luY2x1ZGUgPHNldGptcC5oPgorfQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEpQR0JpdG1hcEVuY29kZXIgOiBwdWJsaWMganBlZ19kZXN0aW5hdGlv
bl9tZ3IgeworcHVibGljOgorICAgIEpQR0JpdG1hcEVuY29kZXIoY29uc3QgU2tCaXRtYXAmIGlu
cHV0LCBWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG91dHB1dCkKKyAgICAgICAgOiBtX2JpdG1hcChp
bnB1dCkKKyAgICAgICAgLCBtX3BpeGVscyhzdGF0aWNfY2FzdDxjb25zdCB1bnNpZ25lZCBjaGFy
Kj4oaW5wdXQuZ2V0UGl4ZWxzKCkpKQorICAgICAgICAsIG1fb3V0cHV0KG91dHB1dCkKKyAgICB7
CisgICAgICAgIHRoaXMtPmpwZWdfZGVzdGluYXRpb25fbWdyOjppbml0X2Rlc3RpbmF0aW9uID0g
cHJlcGFyZU91dHB1dDsKKyAgICAgICAgdGhpcy0+anBlZ19kZXN0aW5hdGlvbl9tZ3I6OmVtcHR5
X291dHB1dF9idWZmZXIgPSB3cml0ZU91dHB1dDsKKyAgICAgICAgdGhpcy0+anBlZ19kZXN0aW5h
dGlvbl9tZ3I6OnRlcm1fZGVzdGluYXRpb24gPSBmaW5pc2hPdXRwdXQ7CisgICAgfQorCisgICAg
Ym9vbCBlbmNvZGUoaW50IHF1YWxpdHkpCisgICAgeworICAgICAgICBJbnRTaXplIGltYWdlU2l6
ZShtX2JpdG1hcC53aWR0aCgpLCBtX2JpdG1hcC5oZWlnaHQoKSk7CisgICAgICAgIGltYWdlU2l6
ZS5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisKKyAgICAgICAgY29uc3QgaW50IGlucHV0Um93Qnl0
ZXMgPSBpbWFnZVNpemUud2lkdGgoKSAqIDQ7CisgICAgICAgIGlmICghaW5wdXRSb3dCeXRlcyB8
fCAoaW5wdXRSb3dCeXRlcyAhPSBtX2JpdG1hcC5yb3dCeXRlcygpKSkgeworICAgICAgICAgICAg
QVNTRVJUKGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGpwZWdfY29tcHJlc3Nfc3RydWN0IGNpbmZvOworICAgICAgICBjaW5mby5lcnIgPSBq
cGVnX3N0ZF9lcnJvcigmbV9lcnJvcik7CisgICAgICAgIG1fZXJyb3IuZXJyb3JfZXhpdCA9IGhh
bmRsZUVycm9yOworICAgICAgICBjaW5mby5jbGllbnRfZGF0YSA9IHRoaXM7CisKKyAgICAgICAg
aWYgKHNldGptcChtX2ptcGJ1ZikpIHsKKyAgICAgICAgICAgIGpwZWdfZGVzdHJveV9jb21wcmVz
cygmY2luZm8pOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAg
ICAganBlZ19jcmVhdGVfY29tcHJlc3MoJmNpbmZvKTsKKyAgICAgICAgY2luZm8uZGVzdCA9IHRo
aXM7CisgICAgICAgIGNpbmZvLmltYWdlX3dpZHRoID0gaW1hZ2VTaXplLndpZHRoKCk7CisgICAg
ICAgIGNpbmZvLmltYWdlX2hlaWdodCA9IGltYWdlU2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgY2lu
Zm8uaW5fY29sb3Jfc3BhY2UgPSBKQ1NfUkdCOworICAgICAgICBjaW5mby5pbnB1dF9jb21wb25l
bnRzID0gMzsKKyAgICAgICAgY2luZm8ub3B0aW1pemVfY29kaW5nID0gVFJVRTsKKworICAgICAg
ICBqcGVnX3NldF9kZWZhdWx0cygmY2luZm8pOworICAgICAgICBqcGVnX3NldF9xdWFsaXR5KCZj
aW5mbywgcXVhbGl0eSwgVFJVRSk7CisgICAgICAgIGpwZWdfc3RhcnRfY29tcHJlc3MoJmNpbmZv
LCBUUlVFKTsKKworICAgICAgICBtX3Jvdy5yZXNpemUoY2luZm8uaW1hZ2Vfd2lkdGggKiAzKTsK
KyAgICAgICAgd2hpbGUgKGNpbmZvLm5leHRfc2NhbmxpbmUgPCBjaW5mby5pbWFnZV9oZWlnaHQp
IHsKKyAgICAgICAgICAgIHByZU11bHRpcGxpZWRCR1JBdG9SR0IoY2luZm8uaW1hZ2Vfd2lkdGgs
IG1fcm93LmRhdGEoKSk7CisgICAgICAgICAgICBqcGVnX3dyaXRlX3NjYW5saW5lcygmY2luZm8s
IG1fcm93LmRhdGFTbG90KCksIDEpOworICAgICAgICAgICAgbV9waXhlbHMgKz0gbV9iaXRtYXAu
cm93Qnl0ZXMoKTsKKyAgICAgICAgfQorCisgICAgICAgIGpwZWdfZmluaXNoX2NvbXByZXNzKCZj
aW5mbyk7CisgICAgICAgIGpwZWdfZGVzdHJveV9jb21wcmVzcygmY2luZm8pOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBwcmVNdWx0aXBsaWVkQkdS
QXRvUkdCKHVuc2lnbmVkIHBpeGVscywgdW5zaWduZWQgY2hhciogb3V0cHV0KQorICAgIHsKKyAg
ICAgICAgY29uc3QgU2tQTUNvbG9yKiBwaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWlu
dDMyX3QqPihtX3BpeGVscyk7CisgICAgICAgIHdoaWxlIChwaXhlbHMtLSA+IDApIHsKKyAgICAg
ICAgICAgIFNrQ29sb3IgdW5tdWx0aXBsaWVkID0gU2tVblByZU11bHRpcGx5OjpQTUNvbG9yVG9D
b2xvcigqcGl4ZWwrKyk7CisgICAgICAgICAgICAqb3V0cHV0KysgPSBTa0NvbG9yR2V0Uih1bm11
bHRpcGxpZWQpOworICAgICAgICAgICAgKm91dHB1dCsrID0gU2tDb2xvckdldEcodW5tdWx0aXBs
aWVkKTsKKyAgICAgICAgICAgICpvdXRwdXQrKyA9IFNrQ29sb3JHZXRCKHVubXVsdGlwbGllZCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBwcmVwYXJlT3V0cHV0KGpfY29t
cHJlc3NfcHRyIGNpbmZvKQorICAgIHsKKyAgICAgICAgSlBHQml0bWFwRW5jb2Rlciogb3V0ID0g
c3RhdGljX2Nhc3Q8SlBHQml0bWFwRW5jb2Rlcio+KGNpbmZvLT5kZXN0KTsKKyAgICAgICAgb3V0
LT5tX2J1ZmZlci5yZXNpemUoODE5Mik7CisgICAgICAgIG91dC0+bmV4dF9vdXRwdXRfYnl0ZSA9
IG91dC0+bV9idWZmZXIuZGF0YSgpOworICAgICAgICBvdXQtPmZyZWVfaW5fYnVmZmVyID0gb3V0
LT5tX2J1ZmZlci5zaXplKCk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2xlYW4gd3JpdGVPdXRw
dXQoal9jb21wcmVzc19wdHIgY2luZm8pCisgICAgeworICAgICAgICBKUEdCaXRtYXBFbmNvZGVy
KiBvdXQgPSBzdGF0aWNfY2FzdDxKUEdCaXRtYXBFbmNvZGVyKj4oY2luZm8tPmRlc3QpOworICAg
ICAgICBvdXQtPm1fb3V0cHV0LT5hcHBlbmQob3V0LT5tX2J1ZmZlci5kYXRhKCksIG91dC0+bV9i
dWZmZXIuc2l6ZSgpKTsKKyAgICAgICAgb3V0LT5uZXh0X291dHB1dF9ieXRlID0gb3V0LT5tX2J1
ZmZlci5kYXRhKCk7CisgICAgICAgIG91dC0+ZnJlZV9pbl9idWZmZXIgPSBvdXQtPm1fYnVmZmVy
LnNpemUoKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQg
ZmluaXNoT3V0cHV0KGpfY29tcHJlc3NfcHRyIGNpbmZvKQorICAgIHsKKyAgICAgICAgSlBHQml0
bWFwRW5jb2Rlciogb3V0ID0gc3RhdGljX2Nhc3Q8SlBHQml0bWFwRW5jb2Rlcio+KGNpbmZvLT5k
ZXN0KTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUgPSBvdXQtPm1fYnVmZmVyLnNpemUoKSAt
IG91dC0+ZnJlZV9pbl9idWZmZXI7CisgICAgICAgIG91dC0+bV9vdXRwdXQtPmFwcGVuZChvdXQt
Pm1fYnVmZmVyLmRhdGEoKSwgc2l6ZSk7CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgaGFuZGxl
RXJyb3Ioal9jb21tb25fcHRyIGNvbW1vbikKKyAgICB7CisgICAgICAgIHZvaWQqIGNsaWVudCA9
IGNvbW1vbi0+Y2xpZW50X2RhdGE7CisgICAgICAgIEpQR0JpdG1hcEVuY29kZXIqIGZhaWxlZCA9
IHN0YXRpY19jYXN0PEpQR0JpdG1hcEVuY29kZXIqPihjbGllbnQpOworICAgICAgICBsb25nam1w
KGZhaWxlZC0+bV9qbXBidWYsIC0xKTsKKyAgICB9CisKKyAgICBjb25zdCBTa0JpdG1hcCYgbV9i
aXRtYXA7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogbV9waXhlbHM7CisgICAgVmVjdG9yPHVu
c2lnbmVkIGNoYXI+KiBtX291dHB1dDsKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4gbV9idWZm
ZXI7CisgICAgVmVjdG9yPEpTQU1QTEU+IG1fcm93OworICAgIGpwZWdfZXJyb3JfbWdyIG1fZXJy
b3I7CisgICAgam1wX2J1ZiBtX2ptcGJ1ZjsKK307CisKK2Jvb2wgSlBHSW1hZ2VFbmNvZGVyOjpl
bmNvZGUoY29uc3QgU2tCaXRtYXAmIGJpdG1hcCwgaW50IHF1YWxpdHksIFZlY3Rvcjx1bnNpZ25l
ZCBjaGFyPiogb3V0cHV0KQoreworICAgIGlmIChiaXRtYXAuY29uZmlnKCkgIT0gU2tCaXRtYXA6
OmtBUkdCXzg4ODhfQ29uZmlnKQorICAgICAgICByZXR1cm4gZmFsc2U7IC8vIE9ubHkgc3VwcG9y
dCBBUkdCIDMyIGJwcCBza2lhIGJpdG1hcHMuCisKKyAgICBTa0F1dG9Mb2NrUGl4ZWxzIGJpdG1h
cExvY2soYml0bWFwKTsKKyAgICByZXR1cm4gSlBHQml0bWFwRW5jb2RlcihiaXRtYXAsIG91dHB1
dCkuZW5jb2RlKHF1YWxpdHkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9KUEdJbWFnZUVuY29kZXIuaAkKKysr
IGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQR0ltYWdlRW5jb2Rlci5o
CQpAQCAtMCwwICsxLDUxIEBAIAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKUEdJbWFnZUVuY29kZXJfaAorI2RlZmluZSBK
UEdJbWFnZUVuY29kZXJfaAorCisjaW5jbHVkZSAiVmVjdG9yLmgiCisKK2NsYXNzIFNrQml0bWFw
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpQR0ltYWdlRW5jb2RlciB7CitwdWJs
aWM6CisgICAgLy8gRW5jb2RlIHRoZSBpbnB1dCBiaXRtYXAgd2l0aCBhIGNvbXByZXNzaW9uIHF1
YWxpdHkgaW4gWzAtMTAwXS4KKyAgICBzdGF0aWMgYm9vbCBlbmNvZGUoY29uc3QgU2tCaXRtYXAm
LCBpbnQgcXVhbGl0eSwgVmVjdG9yPHVuc2lnbmVkIGNoYXI+Kik7CisKKyAgICAvLyBGb3IgY2Fs
bGVyczogcHJvdmlkZSBhIHJlYXNvbmFibGUgY29tcHJlc3Npb24gcXVhbGl0eSBkZWZhdWx0Lgor
ICAgIGVudW0gUXVhbGl0eSB7IERlZmF1bHRDb21wcmVzc2lvblF1YWxpdHkgPSA5MiB9OworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74360</attachid>
            <date>2010-11-18 23:52:35 -0800</date>
            <delta_ts>2010-11-26 01:40:00 -0800</delta_ts>
            <desc>patch</desc>
            <filename>git-diff.patch</filename>
            <type>text/plain</type>
            <size>17484</size>
            <attacher name="noel gordon">noel.gordon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBjOGE1YTk0Li5lYTE1YzYyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTAtMTEt
MTggIE5vZWwgR29yZG9uICA8bm9lbC5nb3Jkb25AZ21haWwuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENocm9taXVtIHdpbmRvdy9saW51eCBs
YXlvdXQgdHJ5IHJlc3VsdHMgbm93IG1hdGNoIHRoZSBkZWZhdWx0IHRlc3QgcmVzdWx0LCBzbwor
ICAgICAgICByZW1vdmUgdGhpcyB0ZXN0IGV4cGVjdGF0aW9uIGV4Y2VwdGlvbiBmaWxlLgorCisg
ICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0td2luL2Zhc3QvY2FudmFzL2NhbnZhcy10b0RhdGFV
UkwtY2FzZS1pbnNlbnNpdGl2ZS1taW1ldHlwZS1leHBlY3RlZC50eHQ6IFJlbW92ZWQuCisKIDIw
MTAtMTEtMTggIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJ1YmJlciBzdGFtcGVkIGJ5IEdlb2ZmIEdhcmVuLgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2Zhc3QvY2FudmFzL2NhbnZhcy10b0RhdGFVUkwt
Y2FzZS1pbnNlbnNpdGl2ZS1taW1ldHlwZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9jaHJvbWl1bS13aW4vZmFzdC9jYW52YXMvY2FudmFzLXRvRGF0YVVSTC1jYXNlLWluc2Vu
c2l0aXZlLW1pbWV0eXBlLWV4cGVjdGVkLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggM2Q0YWI3OS4uMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS13
aW4vZmFzdC9jYW52YXMvY2FudmFzLXRvRGF0YVVSTC1jYXNlLWluc2Vuc2l0aXZlLW1pbWV0eXBl
LWV4cGVjdGVkLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDExICswLDAgQEAKLVRlc3QgdGhhdCB0
b0RhdGFVUkwobWltZVR5cGUpIGlnbm9yZXMgdGhlIGNhc2Ugb2YgJ21pbWVUeXBlJy4NCi0NCi1P
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuDQotDQotDQotUEFTUyB0cnlNaW1lVHlwZSgnaW1hZ2Uv
cG5nJykgaXMgJ2ltYWdlL3BuZycNCi1QQVNTIHRyeU1pbWVUeXBlKCdpTUFnZS9QbmcnKSBpcyAn
aW1hZ2UvcG5nJw0KLVBBU1MgdHJ5TWltZVR5cGUoJ0lNQUdFL1BORycpIGlzICdpbWFnZS9wbmcn
DQotUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQ0KLQ0KLVRFU1QgQ09NUExFVEUNCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDlh
ZWY0Y2UuLjM3NTI3N2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNv
cmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDQgQEAKKzIwMTAtMTEtMTggIE5vZWwgR29yZG9uICA8
bm9lbC5nb3Jkb25AZ21haWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIGNhbnZhcy50b0RhdGFVUkwoImltYWdlL2pw
ZWciLCBxdWFsaXR5KSBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD00OTM2NQorCisgICAgICAgIEFkZHMgYSBsaWJqcGVnLWJhc2VkIGltYWdl
IGVuY29kZXIgZm9yIFNraWEgYml0bWFwcy4gIERlZmF1bHQgZW5jb2RpbmcgcXVhbGl0eQorICAg
ICAgICBpcyA5MiB0byBtYXRjaCBNb3ppbGxhLCBhbHNvIFNhZmFyaSwgdGhvdWdoIHRoZSBhY3R1
YWwgdmFsdWUgdXNlZCBieSBTYWZhcmkgaXMKKyAgICAgICAgdW5kb2N1bWVudGVkLCBhbmQgaXQg
YXBwZWFycyB0byBwcmUtYmx1ciBpbWFnZXMgcHJpb3IgdG8gY29tcHJlc3Npb24uCisKKyAgICAg
ICAgSlBHQml0bWFwRW5jb2Rlcjo6cHJlTXVsdGlwbGllZEJHUkF0b1JHQiByZXN0b3JlcyB0aGUg
dW4tbXVsdGlwbGllZCBSR0IgY29sb3JzCisgICAgICAgIHdoZXJlIHRoZXJlIGlzIG5vbi16ZXJv
IGFscGhhLiAgQWdhaW4sIHRoaXMgbWF0Y2hlcyBGaXJlZm94IGFuZCBTYWZhcmksIGJ1dCBubwor
ICAgICAgICBicm93c2VyIGNvbmZvcm1zIHRvIHRoZSBIVE1MNSBjYW52YXMgc3RhbmRhcmQgaGVy
ZSwgSSBiZWxpZXZlLCBjb25zaWRlcmluZyB0aGUKKyAgICAgICAgcmVzdWx0cyBvZiBjYW52YXMv
cGhpbGlwL3Rlc3RzL3RvRGF0YVVSTC5qcGVnLmFscGhhLmh0bWw7IHRoZSB0ZXN0IGlnbm9yZXMg
dGhlCisgICAgICAgIGFscGhhIGNoYW5uZWwgd2hlbiBleHRyYWN0aW5nIGFuICJpbWFnZS9qcGVn
Ii50b0RhdGFVUkwoKS4gIFRoZSBjb3JyZWN0IGFuc3dlcgorICAgICAgICBuZWVkcyBtb3JlIGlu
dmVzdGlnYXRpb24uCisKKyAgICAgICAgQ2FudmFzIHRvRGF0YVVSTCBpcyBjb3ZlcmVkIGJ5IGV4
aXN0aW5nIHRlc3RzIGNhbnZhcy9waGlsaXAvdGVzdHMvdG9EYXRhVVJMLiosCisgICAgICAgIGFu
ZCBmYXN0L2NhbnZhcy8qdG9EYXRhVVJMKiB0ZXN0cy4KKworICAgICAgICAqIFdlYkNvcmUuZ3lw
aToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEhUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkxD
YWxsYmFjayk6IGRvbid0IHNldCBlbmNvZGluZyBxdWFsaXR5CisgICAgICAgIGhlcmUsIGp1c3Qg
cGFzcyB0aGUgcGFyYW1ldGVycyB0aHJvdWdoIHRvIHRoZSBjYW52YXMgbGF5ZXIuCisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vTUlNRVR5cGVSZWdpc3RyeUNocm9taXVtLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZv
ckVuY29kaW5nKTogaW1wbGVtZW50CisgICAgICAgIHRoZSBzdXBwb3J0ZWQgbWltZVR5cGVzIGZv
ciBlbmNvZGluZyBpbi1wbGFjZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0lt
YWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6dG9EYXRh
VVJMKTogYWRkIGpwZWcgZW5jb2RpbmcgYW5kIHF1YWxpdHkgc3VwcG9ydC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQR0ltYWdlRW5jb2Rlci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SlBHQml0bWFwRW5jb2Rlcjo6SlBHQml0bWFwRW5jb2Rlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpKUEdCaXRtYXBFbmNvZGVyOjplbmNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlBHQml0bWFwRW5jb2Rlcjo6cHJlTXVsdGlwbGllZEJHUkF0b1JHQik6CisgICAgICAg
IChXZWJDb3JlOjpKUEdCaXRtYXBFbmNvZGVyOjpwcmVwYXJlT3V0cHV0KToKKyAgICAgICAgKFdl
YkNvcmU6OkpQR0JpdG1hcEVuY29kZXI6OndyaXRlT3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6
OkpQR0JpdG1hcEVuY29kZXI6OmZpbmlzaE91dHB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKUEdC
aXRtYXBFbmNvZGVyOjpoYW5kbGVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpKUEdJbWFnZUVu
Y29kZXI6OmVuY29kZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9K
UEdJbWFnZUVuY29kZXIuaDogQWRkZWQuCisKIDIwMTAtMTEtMDEgIE1PUklUQSBIYWppbWUgIDxt
b3JyaXRhQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgSHlhdHQuCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCmlu
ZGV4IGQ5ZjFlZjMuLmNkMTMzZGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5neXBpCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yOTEwLDYgKzI5MTAsOCBAQAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL3psaWIvemNvbmYuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi96bGliLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3psaWIvenV0aWwuaCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
aW1hZ2UtZW5jb2RlcnMvc2tpYS9KUEdJbWFnZUVuY29kZXIuY3BwJywKKyAgICAgICAgICAgICdw
bGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQR0ltYWdlRW5jb2Rlci5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvUE5HSW1hZ2VFbmNvZGVy
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL21hYy9BdXRvZHJhaW5lZFBvb2wubW0nLApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1
c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50
Q3VzdG9tLmNwcAppbmRleCBkMmY4Yzk2Li5lMTU0ZjdmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAorKysgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcApAQCAt
OTQsMTggKzk0LDE5IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxDYW52YXNFbGVtZW50
OjpnZXRDb250ZXh0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50CiAKIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOEhUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkxDYWxsYmFjayhjb25zdCB2ODo6
QXJndW1lbnRzJiBhcmdzKQogewotICAgIGRvdWJsZSBxdWFsaXR5ID0gMS4wOwotICAgIGlmIChh
cmdzLkxlbmd0aCgpID4gMSkgewotICAgICAgICBpZiAoYXJnc1sxXS0+SXNOdW1iZXIoKSkKLSAg
ICAgICAgICAgIHF1YWxpdHkgPSBhcmdzWzFdLT5OdW1iZXJWYWx1ZSgpOwotICAgICAgICBpZiAo
ISgwLjAgPD0gcXVhbGl0eSAmJiBxdWFsaXR5IDw9IDEuMCkpCi0gICAgICAgICAgICBxdWFsaXR5
ID0gMS4wOwotICAgIH0KICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGFyZ3Mu
SG9sZGVyKCk7CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IFY4SFRNTENhbnZhc0Vs
ZW1lbnQ6OnRvTmF0aXZlKGhvbGRlcik7Ci0gICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJp
bmcoYXJnc1swXSk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgU3RyaW5nIHJlc3Vs
dCA9IGNhbnZhcy0+dG9EYXRhVVJMKHR5cGUsICZxdWFsaXR5LCBlYyk7CisKKyAgICBTdHJpbmcg
dHlwZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKKyAgICBkb3VibGUgcXVhbGl0eTsKKyAg
ICBkb3VibGUqIHF1YWxpdHlQdHIgPSAwOworICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMSAmJiBh
cmdzWzFdLT5Jc051bWJlcigpKSB7CisgICAgICAgIHF1YWxpdHkgPSBhcmdzWzFdLT5OdW1iZXJW
YWx1ZSgpOworICAgICAgICBxdWFsaXR5UHRyID0gJnF1YWxpdHk7CisgICAgfQorCisgICAgU3Ry
aW5nIHJlc3VsdCA9IGNhbnZhcy0+dG9EYXRhVVJMKHR5cGUsIHF1YWxpdHlQdHIsIGVjKTsKICAg
ICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwogICAgIHJldHVybiB2OFN0cmluZ09yVW5k
ZWZpbmVkKHJlc3VsdCk7CiB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L01JTUVUeXBlUmVnaXN0cnlDaHJvbWl1bS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L01JTUVUeXBlUmVnaXN0cnlDaHJvbWl1bS5jcHAKaW5kZXggMjNmNzkyNi4uOWRmODg0NyAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9NSU1FVHlwZVJlZ2lzdHJ5Q2hyb21p
dW0uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vTUlNRVR5cGVSZWdpc3RyeUNo
cm9taXVtLmNwcApAQCAtOTEsOCArOTEsNyBAQCBib29sIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3Vw
cG9ydGVkSW1hZ2VSZXNvdXJjZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiAKIGJv
b2wgTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2Rpbmco
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKLSAgICAvLyBGSVhNRTogRmlsbCB0aGlzIG91dC4g
U2VlOiBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8zMDg4OAotICAgIHJldHVybiBp
c1N1cHBvcnRlZEltYWdlTUlNRVR5cGUobWltZVR5cGUpOworICAgIHJldHVybiBtaW1lVHlwZSA9
PSAiaW1hZ2UvanBlZyIgfHwgbWltZVR5cGUgPT0gImltYWdlL3BuZyI7CiB9CiAKIGJvb2wgTUlN
RVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRKYXZhU2NyaXB0TUlNRVR5cGUoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9J
bWFnZUJ1ZmZlclNraWEuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
QnVmZmVyU2tpYS5jcHAKaW5kZXggMGRiOTZjZi4uZDU4MjRjYSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKQEAgLTQwLDYgKzQw
LDggQEAKICNpbmNsdWRlICJHTEVTMkNhbnZhcy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgorI2luY2x1ZGUgIkpQR0ltYWdlRW5jb2Rlci5o
IgorI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbmNsdWRlICJQTkdJbWFnZUVuY29k
ZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiU2tDb2xv
clByaXYuaCIKQEAgLTMxMiwyMCArMzE0LDI5IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OnB1dFByZW11
bHRpcGxpZWRJbWFnZURhdGEoSW1hZ2VEYXRhKiBzb3VyY2UsIGNvbnN0IEludFJlY3QmIHNvCiAg
ICAgcHV0SW1hZ2VEYXRhPFByZW11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlUmVjdCwgZGVzdFBv
aW50LCAqY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCksIG1fc2l6ZSk7CiB9
CiAKLVN0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYsIGNvbnN0IGRv
dWJsZSopIGNvbnN0CitTdHJpbmcgSW1hZ2VCdWZmZXI6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcm
IG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHkpIGNvbnN0CiB7Ci0gICAgLy8gRW5jb2Rl
IHRoZSBpbWFnZSBpbnRvIGEgdmVjdG9yLgotICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBwbmdF
bmNvZGVkRGF0YTsKLSAgICBQTkdJbWFnZUVuY29kZXI6OmVuY29kZSgqY29udGV4dCgpLT5wbGF0
Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCksICZwbmdFbmNvZGVkRGF0YSk7Ci0KLSAgICAvLyBDb252
ZXJ0IGl0IGludG8gYmFzZTY0LgotICAgIFZlY3RvcjxjaGFyPiBiYXNlNjRFbmNvZGVkRGF0YTsK
LSAgICBiYXNlNjRFbmNvZGUoKnJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yPGNoYXI+Kj4oJnBuZ0Vu
Y29kZWREYXRhKSwgYmFzZTY0RW5jb2RlZERhdGEpOwotICAgIC8vIEFwcGVuZCB3aXRoIGEgXDAg
c28gdGhhdCBpdCdzIGEgdmFsaWQgc3RyaW5nLgotICAgIGJhc2U2NEVuY29kZWREYXRhLmFwcGVu
ZCgnXDAnKTsKLQotICAgIC8vIEFuZCB0aGUgcmVzdWx0aW5nIHN0cmluZy4KLSAgICByZXR1cm4g
bWFrZVN0cmluZygiZGF0YTppbWFnZS9wbmc7YmFzZTY0LCIsIGJhc2U2NEVuY29kZWREYXRhLmRh
dGEoKSk7CisgICAgQVNTRVJUKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1F
VHlwZUZvckVuY29kaW5nKG1pbWVUeXBlKSk7CisKKyAgICBWZWN0b3I8dW5zaWduZWQgY2hhcj4g
ZW5jb2RlZEltYWdlOworCisgICAgaWYgKG1pbWVUeXBlID09ICJpbWFnZS9qcGVnIikgeworICAg
ICAgICBpbnQgY29tcHJlc3Npb25RdWFsaXR5ID0gSlBHSW1hZ2VFbmNvZGVyOjpEZWZhdWx0Q29t
cHJlc3Npb25RdWFsaXR5OworICAgICAgICBpZiAocXVhbGl0eSAmJiAqcXVhbGl0eSA+PSAwLjAg
JiYgKnF1YWxpdHkgPD0gMS4wKQorICAgICAgICAgICAgY29tcHJlc3Npb25RdWFsaXR5ID0gc3Rh
dGljX2Nhc3Q8aW50PigqcXVhbGl0eSAqIDEwMCArIDAuNSk7CisgICAgICAgIGlmICghSlBHSW1h
Z2VFbmNvZGVyOjplbmNvZGUoKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1hcCgp
LCBjb21wcmVzc2lvblF1YWxpdHksICZlbmNvZGVkSW1hZ2UpKQorICAgICAgICAgICAgcmV0dXJu
ICJkYXRhOiwiOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghUE5HSW1hZ2VFbmNvZGVyOjpl
bmNvZGUoKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmJpdG1hcCgpLCAmZW5jb2RlZElt
YWdlKSkKKyAgICAgICAgICAgIHJldHVybiAiZGF0YTosIjsKKyAgICAgICAgQVNTRVJUKG1pbWVU
eXBlID09ICJpbWFnZS9wbmciKTsKKyAgICB9CisKKyAgICBWZWN0b3I8Y2hhcj4gYmFzZTY0RGF0
YTsKKyAgICBiYXNlNjRFbmNvZGUoKnJlaW50ZXJwcmV0X2Nhc3Q8VmVjdG9yPGNoYXI+Kj4oJmVu
Y29kZWRJbWFnZSksIGJhc2U2NERhdGEpOworICAgIGJhc2U2NERhdGEuYXBwZW5kKCdcMCcpOwor
CisgICAgcmV0dXJuIG1ha2VTdHJpbmcoImRhdGE6IiwgbWltZVR5cGUsICI7YmFzZTY0LCIsIGJh
c2U2NERhdGEuZGF0YSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQR0ltYWdlRW5jb2Rlci5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvSlBHSW1hZ2VFbmNvZGVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjBiZjA0Ci0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQR0ltYWdl
RW5jb2Rlci5jcHAKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAs
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAg
KiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJKUEdJbWFnZUVuY29kZXIuaCIKKworI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRl
ICJTa0JpdG1hcC5oIgorI2luY2x1ZGUgIlNrVW5QcmVNdWx0aXBseS5oIgorZXh0ZXJuICJDIiB7
CisjaW5jbHVkZSA8c3RkaW8uaD4gLy8ganBlZ2xpYi5oIG5lZWRzIHN0ZGlvLmggRklMRQorI2lu
Y2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlIDxzZXRqbXAuaD4KK30KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBKUEdCaXRtYXBFbmNvZGVyIDogcHVibGljIGpwZWdfZGVzdGluYXRp
b25fbWdyIHsKK3B1YmxpYzoKKyAgICBKUEdCaXRtYXBFbmNvZGVyKGNvbnN0IFNrQml0bWFwJiBp
bnB1dCwgVmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBvdXRwdXQpCisgICAgICAgIDogbV9iaXRtYXAo
aW5wdXQpCisgICAgICAgICwgbV9waXhlbHMoc3RhdGljX2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hh
cio+KGlucHV0LmdldFBpeGVscygpKSkKKyAgICAgICAgLCBtX291dHB1dChvdXRwdXQpCisgICAg
eworICAgICAgICB0aGlzLT5qcGVnX2Rlc3RpbmF0aW9uX21ncjo6aW5pdF9kZXN0aW5hdGlvbiA9
IHByZXBhcmVPdXRwdXQ7CisgICAgICAgIHRoaXMtPmpwZWdfZGVzdGluYXRpb25fbWdyOjplbXB0
eV9vdXRwdXRfYnVmZmVyID0gd3JpdGVPdXRwdXQ7CisgICAgICAgIHRoaXMtPmpwZWdfZGVzdGlu
YXRpb25fbWdyOjp0ZXJtX2Rlc3RpbmF0aW9uID0gZmluaXNoT3V0cHV0OworICAgIH0KKworICAg
IGJvb2wgZW5jb2RlKGludCBxdWFsaXR5KQorICAgIHsKKyAgICAgICAgSW50U2l6ZSBpbWFnZVNp
emUobV9iaXRtYXAud2lkdGgoKSwgbV9iaXRtYXAuaGVpZ2h0KCkpOworICAgICAgICBpbWFnZVNp
emUuY2xhbXBOZWdhdGl2ZVRvWmVybygpOworCisgICAgICAgIGNvbnN0IGludCBpbnB1dFJvd0J5
dGVzID0gaW1hZ2VTaXplLndpZHRoKCkgKiA0OworICAgICAgICBpZiAoIWlucHV0Um93Qnl0ZXMg
fHwgKGlucHV0Um93Qnl0ZXMgIT0gbV9iaXRtYXAucm93Qnl0ZXMoKSkpIHsKKyAgICAgICAgICAg
IEFTU0VSVChmYWxzZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICBqcGVnX2NvbXByZXNzX3N0cnVjdCBjaW5mbzsKKyAgICAgICAgY2luZm8uZXJyID0g
anBlZ19zdGRfZXJyb3IoJm1fZXJyb3IpOworICAgICAgICBtX2Vycm9yLmVycm9yX2V4aXQgPSBo
YW5kbGVFcnJvcjsKKyAgICAgICAgY2luZm8uY2xpZW50X2RhdGEgPSB0aGlzOworCisgICAgICAg
IGlmIChzZXRqbXAobV9qbXBidWYpKSB7CisgICAgICAgICAgICBqcGVnX2Rlc3Ryb3lfY29tcHJl
c3MoJmNpbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGpwZWdfY3JlYXRlX2NvbXByZXNzKCZjaW5mbyk7CisgICAgICAgIGNpbmZvLmRlc3QgPSB0
aGlzOworICAgICAgICBjaW5mby5pbWFnZV93aWR0aCA9IGltYWdlU2l6ZS53aWR0aCgpOworICAg
ICAgICBjaW5mby5pbWFnZV9oZWlnaHQgPSBpbWFnZVNpemUuaGVpZ2h0KCk7CisgICAgICAgIGNp
bmZvLmluX2NvbG9yX3NwYWNlID0gSkNTX1JHQjsKKyAgICAgICAgY2luZm8uaW5wdXRfY29tcG9u
ZW50cyA9IDM7CisgICAgICAgIGNpbmZvLm9wdGltaXplX2NvZGluZyA9IFRSVUU7CisKKyAgICAg
ICAganBlZ19zZXRfZGVmYXVsdHMoJmNpbmZvKTsKKyAgICAgICAganBlZ19zZXRfcXVhbGl0eSgm
Y2luZm8sIHF1YWxpdHksIFRSVUUpOworICAgICAgICBqcGVnX3N0YXJ0X2NvbXByZXNzKCZjaW5m
bywgVFJVRSk7CisKKyAgICAgICAgbV9yb3cucmVzaXplKGNpbmZvLmltYWdlX3dpZHRoICogMyk7
CisgICAgICAgIHdoaWxlIChjaW5mby5uZXh0X3NjYW5saW5lIDwgY2luZm8uaW1hZ2VfaGVpZ2h0
KSB7CisgICAgICAgICAgICBwcmVNdWx0aXBsaWVkQkdSQXRvUkdCKGNpbmZvLmltYWdlX3dpZHRo
LCBtX3Jvdy5kYXRhKCkpOworICAgICAgICAgICAganBlZ193cml0ZV9zY2FubGluZXMoJmNpbmZv
LCBtX3Jvdy5kYXRhU2xvdCgpLCAxKTsKKyAgICAgICAgICAgIG1fcGl4ZWxzICs9IG1fYml0bWFw
LnJvd0J5dGVzKCk7CisgICAgICAgIH0KKworICAgICAgICBqcGVnX2ZpbmlzaF9jb21wcmVzcygm
Y2luZm8pOworICAgICAgICBqcGVnX2Rlc3Ryb3lfY29tcHJlc3MoJmNpbmZvKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgcHJlTXVsdGlwbGllZEJH
UkF0b1JHQih1bnNpZ25lZCBwaXhlbHMsIHVuc2lnbmVkIGNoYXIqIG91dHB1dCkKKyAgICB7Cisg
ICAgICAgIGNvbnN0IFNrUE1Db2xvciogcGl4ZWwgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQzMl90Kj4obV9waXhlbHMpOworICAgICAgICB3aGlsZSAocGl4ZWxzLS0gPiAwKSB7CisgICAg
ICAgICAgICBTa0NvbG9yIHVubXVsdGlwbGllZCA9IFNrVW5QcmVNdWx0aXBseTo6UE1Db2xvclRv
Q29sb3IoKnBpeGVsKyspOworICAgICAgICAgICAgKm91dHB1dCsrID0gU2tDb2xvckdldFIodW5t
dWx0aXBsaWVkKTsKKyAgICAgICAgICAgICpvdXRwdXQrKyA9IFNrQ29sb3JHZXRHKHVubXVsdGlw
bGllZCk7CisgICAgICAgICAgICAqb3V0cHV0KysgPSBTa0NvbG9yR2V0Qih1bm11bHRpcGxpZWQp
OworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIHZvaWQgcHJlcGFyZU91dHB1dChqX2Nv
bXByZXNzX3B0ciBjaW5mbykKKyAgICB7CisgICAgICAgIEpQR0JpdG1hcEVuY29kZXIqIG91dCA9
IHN0YXRpY19jYXN0PEpQR0JpdG1hcEVuY29kZXIqPihjaW5mby0+ZGVzdCk7CisgICAgICAgIG91
dC0+bV9idWZmZXIucmVzaXplKDgxOTIpOworICAgICAgICBvdXQtPm5leHRfb3V0cHV0X2J5dGUg
PSBvdXQtPm1fYnVmZmVyLmRhdGEoKTsKKyAgICAgICAgb3V0LT5mcmVlX2luX2J1ZmZlciA9IG91
dC0+bV9idWZmZXIuc2l6ZSgpOworICAgIH0KKworICAgIHN0YXRpYyBib29sZWFuIHdyaXRlT3V0
cHV0KGpfY29tcHJlc3NfcHRyIGNpbmZvKQorICAgIHsKKyAgICAgICAgSlBHQml0bWFwRW5jb2Rl
ciogb3V0ID0gc3RhdGljX2Nhc3Q8SlBHQml0bWFwRW5jb2Rlcio+KGNpbmZvLT5kZXN0KTsKKyAg
ICAgICAgb3V0LT5tX291dHB1dC0+YXBwZW5kKG91dC0+bV9idWZmZXIuZGF0YSgpLCBvdXQtPm1f
YnVmZmVyLnNpemUoKSk7CisgICAgICAgIG91dC0+bmV4dF9vdXRwdXRfYnl0ZSA9IG91dC0+bV9i
dWZmZXIuZGF0YSgpOworICAgICAgICBvdXQtPmZyZWVfaW5fYnVmZmVyID0gb3V0LT5tX2J1ZmZl
ci5zaXplKCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAgIHN0YXRpYyB2b2lk
IGZpbmlzaE91dHB1dChqX2NvbXByZXNzX3B0ciBjaW5mbykKKyAgICB7CisgICAgICAgIEpQR0Jp
dG1hcEVuY29kZXIqIG91dCA9IHN0YXRpY19jYXN0PEpQR0JpdG1hcEVuY29kZXIqPihjaW5mby0+
ZGVzdCk7CisgICAgICAgIGNvbnN0IHNpemVfdCBzaXplID0gb3V0LT5tX2J1ZmZlci5zaXplKCkg
LSBvdXQtPmZyZWVfaW5fYnVmZmVyOworICAgICAgICBvdXQtPm1fb3V0cHV0LT5hcHBlbmQob3V0
LT5tX2J1ZmZlci5kYXRhKCksIHNpemUpOworICAgIH0KKworICAgIHN0YXRpYyB2b2lkIGhhbmRs
ZUVycm9yKGpfY29tbW9uX3B0ciBjb21tb24pCisgICAgeworICAgICAgICB2b2lkKiBjbGllbnQg
PSBjb21tb24tPmNsaWVudF9kYXRhOworICAgICAgICBKUEdCaXRtYXBFbmNvZGVyKiBmYWlsZWQg
PSBzdGF0aWNfY2FzdDxKUEdCaXRtYXBFbmNvZGVyKj4oY2xpZW50KTsKKyAgICAgICAgbG9uZ2pt
cChmYWlsZWQtPm1fam1wYnVmLCAtMSk7CisgICAgfQorCisgICAgY29uc3QgU2tCaXRtYXAmIG1f
Yml0bWFwOworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIG1fcGl4ZWxzOworICAgIFZlY3Rvcjx1
bnNpZ25lZCBjaGFyPiogbV9vdXRwdXQ7CisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IG1fYnVm
ZmVyOworICAgIFZlY3RvcjxKU0FNUExFPiBtX3JvdzsKKyAgICBqcGVnX2Vycm9yX21nciBtX2Vy
cm9yOworICAgIGptcF9idWYgbV9qbXBidWY7Cit9OworCitib29sIEpQR0ltYWdlRW5jb2Rlcjo6
ZW5jb2RlKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGludCBxdWFsaXR5LCBWZWN0b3I8dW5zaWdu
ZWQgY2hhcj4qIG91dHB1dCkKK3sKKyAgICBpZiAoYml0bWFwLmNvbmZpZygpICE9IFNrQml0bWFw
OjprQVJHQl84ODg4X0NvbmZpZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBPbmx5IHN1cHBv
cnQgQVJHQiAzMiBicHAgc2tpYSBiaXRtYXBzLgorCisgICAgU2tBdXRvTG9ja1BpeGVscyBiaXRt
YXBMb2NrKGJpdG1hcCk7CisgICAgcmV0dXJuIEpQR0JpdG1hcEVuY29kZXIoYml0bWFwLCBvdXRw
dXQpLmVuY29kZShxdWFsaXR5KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQR0ltYWdlRW5jb2Rl
ci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQR0ltYWdlRW5jb2Rl
ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMjhkYjcKLS0tIC9kZXYv
bnVsbAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvSlBHSW1hZ2VF
bmNvZGVyLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBKUEdJbWFnZUVuY29kZXJfaAorI2Rl
ZmluZSBKUEdJbWFnZUVuY29kZXJfaAorCisjaW5jbHVkZSAiVmVjdG9yLmgiCisKK2NsYXNzIFNr
Qml0bWFwOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEpQR0ltYWdlRW5jb2RlciB7
CitwdWJsaWM6CisgICAgLy8gRW5jb2RlIHRoZSBpbnB1dCBiaXRtYXAgd2l0aCBhIGNvbXByZXNz
aW9uIHF1YWxpdHkgaW4gWzAtMTAwXS4KKyAgICBzdGF0aWMgYm9vbCBlbmNvZGUoY29uc3QgU2tC
aXRtYXAmLCBpbnQgcXVhbGl0eSwgVmVjdG9yPHVuc2lnbmVkIGNoYXI+Kik7CisKKyAgICAvLyBG
b3IgY2FsbGVyczogcHJvdmlkZSBhIHJlYXNvbmFibGUgY29tcHJlc3Npb24gcXVhbGl0eSBkZWZh
dWx0LgorICAgIGVudW0gUXVhbGl0eSB7IERlZmF1bHRDb21wcmVzc2lvblF1YWxpdHkgPSA5MiB9
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
</data>
<flag name="review"
          id="65146"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74908</attachid>
            <date>2010-11-26 01:40:00 -0800</date>
            <delta_ts>2010-11-26 01:40:00 -0800</delta_ts>
            <desc>patch wip</desc>
            <filename>git-diff.patch</filename>
            <type>text/plain</type>
            <size>17504</size>
            <attacher name="noel gordon">noel.gordon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1NjBjYzhlLi4wN2ZjMWZmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMTEt
MjUgIE5vZWwgR29yZG9uICA8bm9lbC5nb3Jkb25AZ21haWwuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIGNhbnZhcy50
b0RhdGFVUkwoImltYWdlL2pwZWciLCBxdWFsaXR5KSBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTM2NQorCisgICAgICAgIENocm9taXVt
IHdpbmRvdy9saW51eCBsYXlvdXQgdHJ5IHJlc3VsdHMgbm93IG1hdGNoIHRoZSBkZWZhdWx0IHRl
c3QgcmVzdWx0LCBzbworICAgICAgICByZW1vdmUgdGhpcyBwbGF0Zm9ybS1zcGVjaWZpYyB0ZXN0
IGV4Y2VwdGlvbiBmaWxlLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0td2luL2Zhc3Qv
Y2FudmFzL2NhbnZhcy10b0RhdGFVUkwtY2FzZS1pbnNlbnNpdGl2ZS1taW1ldHlwZS1leHBlY3Rl
ZC50eHQ6IFJlbW92ZWQuCisKIDIwMTAtMTEtMjUgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEVuYWJsZSB0ZXN0IGZvciBXaW4g
UmVsZWFzZSBjaHJvbXVpbS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtLXdpbi9mYXN0L2NhbnZhcy9jYW52YXMtdG9EYXRhVVJMLWNhc2UtaW5zZW5zaXRpdmUtbWlt
ZXR5cGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2Zh
c3QvY2FudmFzL2NhbnZhcy10b0RhdGFVUkwtY2FzZS1pbnNlbnNpdGl2ZS1taW1ldHlwZS1leHBl
Y3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkNGFiNzkuLjAwMDAwMDAK
LS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2Zhc3QvY2FudmFzL2NhbnZh
cy10b0RhdGFVUkwtY2FzZS1pbnNlbnNpdGl2ZS1taW1ldHlwZS1leHBlY3RlZC50eHQKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1UZXN0IHRoYXQgdG9EYXRhVVJMKG1pbWVUeXBlKSBp
Z25vcmVzIHRoZSBjYXNlIG9mICdtaW1lVHlwZScuDQotDQotT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLg0KLQ0KLQ0KLVBBU1MgdHJ5TWltZVR5cGUoJ2ltYWdlL3BuZycpIGlzICdpbWFnZS9wbmcn
DQotUEFTUyB0cnlNaW1lVHlwZSgnaU1BZ2UvUG5nJykgaXMgJ2ltYWdlL3BuZycNCi1QQVNTIHRy
eU1pbWVUeXBlKCdJTUFHRS9QTkcnKSBpcyAnaW1hZ2UvcG5nJw0KLVBBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUNCi0NCi1URVNUIENPTVBMRVRFDQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyODFjNTFmLi45NzZjYzNkIDEwMDY0
NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDQ0IEBACisyMDEwLTExLTI1ICBOb2VsIEdvcmRvbiAgPG5vZWwuZ29yZG9uQGdtYWlsLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hy
b21pdW1dIEFkZCBjYW52YXMudG9EYXRhVVJMKCJpbWFnZS9qcGVnIiwgcXVhbGl0eSkgc3VwcG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzNjUK
KworICAgICAgICBBZGRzIGEgbGlianBlZy1iYXNlZCBpbWFnZSBlbmNvZGVyIGZvciBTa2lhIGJp
dG1hcHMuICBEZWZhdWx0IGVuY29kaW5nIHF1YWxpdHkKKyAgICAgICAgaXMgOTIgdG8gbWF0Y2gg
TW96aWxsYSwgYWxzbyBTYWZhcmksIHRob3VnaCB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgYnkgU2Fm
YXJpIGlzCisgICAgICAgIHVuZG9jdW1lbnRlZCwgYW5kIGl0IGFwcGVhcnMgdG8gcHJlLWJsdXIg
aW1hZ2VzIHByaW9yIHRvIGNvbXByZXNzaW9uLgorCisgICAgICAgIEpQRUdCaXRtYXBFbmNvZGVy
OjpwcmVNdWx0aXBsaWVkQkdSQXRvUkdCIHJlc3RvcmVzIHRoZSB1bm11bHRpcGxpZWQgUkdCIGNv
bG9ycworICAgICAgICB3aGVyZSB0aGVyZSBpcyBub24temVybyBhbHBoYS4gIEFnYWluLCB0aGlz
IG1hdGNoZXMgRmlyZWZveCBhbmQgU2FmYXJpLCBidXQgbm8KKyAgICAgICAgYnJvd3NlciBjb25m
b3JtcyB0byB0aGUgSFRNTDUgY2FudmFzIHN0YW5kYXJkIGhlcmUsIEkgYmVsaWV2ZSwgY29uc2lk
ZXJpbmcgdGhlCisgICAgICAgIHJlc3VsdCBvZiBjYW52YXMvcGhpbGlwL3Rlc3RzL3RvRGF0YVVS
TC5qcGVnLmFscGhhLmh0bWw7IHRoYXQgdGVzdCBpZ25vcmVzIHRoZQorICAgICAgICBhbHBoYSBj
aGFubmVsIHdoZW4gZXh0cmFjdGluZyBhbiAiaW1hZ2UvanBlZyIudG9EYXRhVVJMKCkuICBUaGUg
Y29ycmVjdCBhbnN3ZXIKKyAgICAgICAgbmVlZHMgbW9yZSBpbnZlc3RpZ2F0aW9uLCBidWcgaHR0
cDovL3dlYmtpdC5vcmcvYi80MDE0Ny4KKworICAgICAgICBDYW52YXMgdG9EYXRhVVJMIGlzIGNv
dmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMgY2FudmFzL3BoaWxpcC90ZXN0cy90b0RhdGFVUkwuKiwK
KyAgICAgICAgYW5kIGZhc3QvY2FudmFzLyp0b0RhdGFVUkwqIHRlc3RzLgorCisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNF
bGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4SFRNTENhbnZhc0VsZW1lbnQ6
OnRvRGF0YVVSTENhbGxiYWNrKTogZG9uJ3Qgc2V0IGVuY29kaW5nIHF1YWxpdHkKKyAgICAgICAg
aGVyZSwganVzdCBwYXNzIHRoZSB0b0RhdGFVUkwgcGFyYW1ldGVycyB0aHJvdWdoIHRvIHRoZSBj
YW52YXMgbGF5ZXIuCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vTUlNRVR5cGVSZWdpc3Ry
eUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmlzU3Vw
cG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKTogaW1wbGVtZW50CisgICAgICAgIHRoZSBz
dXBwb3J0ZWQgbWltZVR5cGVzIGZvciBlbmNvZGluZyBpbi1wbGFjZS4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKTogYWRkIGpwZWcgZW5jb2RpbmcgYW5kIHF1YWxpdHkg
c3VwcG9ydC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQRUdJbWFn
ZUVuY29kZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkpQRUdCaXRtYXBFbmNvZGVy
OjpKUEVHQml0bWFwRW5jb2Rlcik6CisgICAgICAgIChXZWJDb3JlOjpKUEVHQml0bWFwRW5jb2Rl
cjo6ZW5jb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdCaXRtYXBFbmNvZGVyOjpwcmVNdWx0
aXBsaWVkQkdSQXRvUkdCKTogRklYTUU6IGJ1ZyA0MDE0Ny4KKyAgICAgICAgKFdlYkNvcmU6OkpQ
RUdCaXRtYXBFbmNvZGVyOjpwcmVwYXJlT3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdC
aXRtYXBFbmNvZGVyOjp3cml0ZU91dHB1dCk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHQml0bWFw
RW5jb2Rlcjo6ZmluaXNoT3V0cHV0KToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdCaXRtYXBFbmNv
ZGVyOjpoYW5kbGVFcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VFbmNvZGVyOjpl
bmNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvSlBFR0ltYWdl
RW5jb2Rlci5oOiBBZGRlZC4KKwogMjAxMC0xMS0yNSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZGJj
ODk3OS4uNjc4NTZiNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTI5NDAsNiArMjk0MCw4IEBACiAgICAgICAgICAgICAncGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi96Y29uZi5oJywKICAgICAgICAgICAgICdwbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy96bGliL3psaWIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvemxpYi96dXRpbC5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1l
bmNvZGVycy9za2lhL0pQRUdJbWFnZUVuY29kZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9y
bS9pbWFnZS1lbmNvZGVycy9za2lhL0pQRUdJbWFnZUVuY29kZXIuaCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9QTkdJbWFnZUVuY29kZXIuY3BwJywKICAgICAg
ICAgICAgICdwbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL1BOR0ltYWdlRW5jb2Rlci5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvQXV0b2RyYWluZWRQb29sLm1tJywKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20u
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3Rv
bS5jcHAKaW5kZXggZDJmOGM5Ni4uZTE1NGY3ZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKQEAgLTk0LDE4
ICs5NCwxOSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ2FudmFzRWxlbWVudDo6Z2V0
Q29udGV4dENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudAogCiB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3Vt
ZW50cyYgYXJncykKIHsKLSAgICBkb3VibGUgcXVhbGl0eSA9IDEuMDsKLSAgICBpZiAoYXJncy5M
ZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgaWYgKGFyZ3NbMV0tPklzTnVtYmVyKCkpCi0gICAgICAg
ICAgICBxdWFsaXR5ID0gYXJnc1sxXS0+TnVtYmVyVmFsdWUoKTsKLSAgICAgICAgaWYgKCEoMC4w
IDw9IHF1YWxpdHkgJiYgcXVhbGl0eSA8PSAxLjApKQotICAgICAgICAgICAgcXVhbGl0eSA9IDEu
MDsKLSAgICB9CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRl
cigpOwogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBWOEhUTUxDYW52YXNFbGVtZW50
Ojp0b05hdGl2ZShob2xkZXIpOwotICAgIFN0cmluZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFy
Z3NbMF0pOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFN0cmluZyByZXN1bHQgPSBj
YW52YXMtPnRvRGF0YVVSTCh0eXBlLCAmcXVhbGl0eSwgZWMpOworCisgICAgU3RyaW5nIHR5cGUg
PSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CisgICAgZG91YmxlIHF1YWxpdHk7CisgICAgZG91
YmxlKiBxdWFsaXR5UHRyID0gMDsKKyAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEgJiYgYXJnc1sx
XS0+SXNOdW1iZXIoKSkgeworICAgICAgICBxdWFsaXR5ID0gYXJnc1sxXS0+TnVtYmVyVmFsdWUo
KTsKKyAgICAgICAgcXVhbGl0eVB0ciA9ICZxdWFsaXR5OworICAgIH0KKworICAgIFN0cmluZyBy
ZXN1bHQgPSBjYW52YXMtPnRvRGF0YVVSTCh0eXBlLCBxdWFsaXR5UHRyLCBlYyk7CiAgICAgVjhQ
cm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAgICByZXR1cm4gdjhTdHJpbmdPclVuZGVmaW5l
ZChyZXN1bHQpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9NSU1F
VHlwZVJlZ2lzdHJ5Q2hyb21pdW0uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9NSU1F
VHlwZVJlZ2lzdHJ5Q2hyb21pdW0uY3BwCmluZGV4IDIzZjc5MjYuLjlkZjg4NDcgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vTUlNRVR5cGVSZWdpc3RyeUNocm9taXVtLmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL01JTUVUeXBlUmVnaXN0cnlDaHJvbWl1
bS5jcHAKQEAgLTkxLDggKzkxLDcgQEAgYm9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRl
ZEltYWdlUmVzb3VyY2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogCiBib29sIE1J
TUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZUZvckVuY29kaW5nKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpCiB7Ci0gICAgLy8gRklYTUU6IEZpbGwgdGhpcyBvdXQuIFNlZTog
aHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMzA4ODgKLSAgICByZXR1cm4gaXNTdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICByZXR1cm4gbWltZVR5cGUgPT0gImlt
YWdlL2pwZWciIHx8IG1pbWVUeXBlID09ICJpbWFnZS9wbmciOwogfQogCiBib29sIE1JTUVUeXBl
UmVnaXN0cnk6OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VC
dWZmZXJTa2lhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZl
clNraWEuY3BwCmluZGV4IGFkYjczMmIuLmI3MTRlZjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCkBAIC00MCw2ICs0MCw4IEBA
CiAjaW5jbHVkZSAiR0xFUzJDYW52YXMuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJKUEVHSW1hZ2VFbmNvZGVyLmgiCisj
aW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIlBOR0ltYWdlRW5jb2Rlci5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJTa0NvbG9yUHJp
di5oIgpAQCAtMzE4LDIwICszMjAsMjggQEAgdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlw
bGllZEltYWdlRGF0YShJbWFnZURhdGEqIHNvdXJjZSwgY29uc3QgSW50UmVjdCYgc28KICAgICBw
dXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4oc291cmNlLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQs
ICpjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5iaXRtYXAoKSwgbV9zaXplKTsKIH0KIAot
U3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiwgY29uc3QgZG91Ymxl
KikgY29uc3QKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkgY29uc3QKIHsKLSAgICAvLyBFbmNvZGUgdGhl
IGltYWdlIGludG8gYSB2ZWN0b3IuCi0gICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHBuZ0VuY29k
ZWREYXRhOwotICAgIFBOR0ltYWdlRW5jb2Rlcjo6ZW5jb2RlKCpjb250ZXh0KCktPnBsYXRmb3Jt
Q29udGV4dCgpLT5iaXRtYXAoKSwgJnBuZ0VuY29kZWREYXRhKTsKLQotICAgIC8vIENvbnZlcnQg
aXQgaW50byBiYXNlNjQuCi0gICAgVmVjdG9yPGNoYXI+IGJhc2U2NEVuY29kZWREYXRhOwotICAg
IGJhc2U2NEVuY29kZSgqcmVpbnRlcnByZXRfY2FzdDxWZWN0b3I8Y2hhcj4qPigmcG5nRW5jb2Rl
ZERhdGEpLCBiYXNlNjRFbmNvZGVkRGF0YSk7Ci0gICAgLy8gQXBwZW5kIHdpdGggYSBcMCBzbyB0
aGF0IGl0J3MgYSB2YWxpZCBzdHJpbmcuCi0gICAgYmFzZTY0RW5jb2RlZERhdGEuYXBwZW5kKCdc
MCcpOwotCi0gICAgLy8gQW5kIHRoZSByZXN1bHRpbmcgc3RyaW5nLgotICAgIHJldHVybiBtYWtl
U3RyaW5nKCJkYXRhOmltYWdlL3BuZztiYXNlNjQsIiwgYmFzZTY0RW5jb2RlZERhdGEuZGF0YSgp
KTsKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBl
Rm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKworICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBlbmNv
ZGVkSW1hZ2U7CisgICAgaWYgKG1pbWVUeXBlID09ICJpbWFnZS9qcGVnIikgeworICAgICAgICBp
bnQgY29tcHJlc3Npb25RdWFsaXR5ID0gSlBFR0ltYWdlRW5jb2Rlcjo6RGVmYXVsdENvbXByZXNz
aW9uUXVhbGl0eTsKKyAgICAgICAgaWYgKHF1YWxpdHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpx
dWFsaXR5IDw9IDEuMCkKKyAgICAgICAgICAgIGNvbXByZXNzaW9uUXVhbGl0eSA9IHN0YXRpY19j
YXN0PGludD4oKnF1YWxpdHkgKiAxMDAgKyAwLjUpOworICAgICAgICBpZiAoIUpQRUdJbWFnZUVu
Y29kZXI6OmVuY29kZSgqY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCksIGNv
bXByZXNzaW9uUXVhbGl0eSwgJmVuY29kZWRJbWFnZSkpCisgICAgICAgICAgICByZXR1cm4gImRh
dGE6LCI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCFQTkdJbWFnZUVuY29kZXI6OmVuY29k
ZSgqY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCksICZlbmNvZGVkSW1hZ2Up
KQorICAgICAgICAgICAgcmV0dXJuICJkYXRhOiwiOworICAgICAgICBBU1NFUlQobWltZVR5cGUg
PT0gImltYWdlL3BuZyIpOworICAgIH0KKworICAgIFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOwor
ICAgIGJhc2U2NEVuY29kZSgqcmVpbnRlcnByZXRfY2FzdDxWZWN0b3I8Y2hhcj4qPigmZW5jb2Rl
ZEltYWdlKSwgYmFzZTY0RGF0YSk7CisgICAgYmFzZTY0RGF0YS5hcHBlbmQoJ1wwJyk7CisKKyAg
ICByZXR1cm4gbWFrZVN0cmluZygiZGF0YToiLCBtaW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0
RGF0YS5kYXRhKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvSlBFR0ltYWdlRW5jb2Rlci5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvSlBFR0ltYWdlRW5jb2Rlci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg0YzZmZQotLS0gL2Rldi9u
dWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9KUEVHSW1hZ2VF
bmNvZGVyLmNwcApAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkpQRUdJbWFnZUVuY29kZXIuaCIKKworI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRl
ICJTa0JpdG1hcC5oIgorI2luY2x1ZGUgIlNrVW5QcmVNdWx0aXBseS5oIgorZXh0ZXJuICJDIiB7
CisjaW5jbHVkZSA8c3RkaW8uaD4gLy8ganBlZ2xpYi5oIG5lZWRzIHN0ZGlvLmggRklMRQorI2lu
Y2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlIDxzZXRqbXAuaD4KK30KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBKUEVHQml0bWFwRW5jb2RlciA6IHB1YmxpYyBqcGVnX2Rlc3RpbmF0
aW9uX21nciB7CitwdWJsaWM6CisgICAgSlBFR0JpdG1hcEVuY29kZXIoY29uc3QgU2tCaXRtYXAm
IGlucHV0LCBWZWN0b3I8dW5zaWduZWQgY2hhcj4qIG91dHB1dCkKKyAgICAgICAgOiBtX2JpdG1h
cChpbnB1dCkKKyAgICAgICAgLCBtX3BpeGVscyhzdGF0aWNfY2FzdDxjb25zdCBTa1BNQ29sb3Iq
PihpbnB1dC5nZXRQaXhlbHMoKSkpCisgICAgICAgICwgbV9vdXRwdXQob3V0cHV0KQorICAgIHsK
KyAgICB9CisKKyAgICBib29sIGVuY29kZShpbnQgcXVhbGl0eSkKKyAgICB7CisgICAgICAgIElu
dFNpemUgaW1hZ2VTaXplKG1fYml0bWFwLndpZHRoKCksIG1fYml0bWFwLmhlaWdodCgpKTsKKyAg
ICAgICAgaW1hZ2VTaXplLmNsYW1wTmVnYXRpdmVUb1plcm8oKTsKKworICAgICAgICBqcGVnX2Nv
bXByZXNzX3N0cnVjdCBjaW5mbzsKKyAgICAgICAgY2luZm8uZXJyID0ganBlZ19zdGRfZXJyb3Io
Jm1fZXJyb3IpOworICAgICAgICBtX2Vycm9yLmVycm9yX2V4aXQgPSBoYW5kbGVFcnJvcjsKKyAg
ICAgICAgY2luZm8uY2xpZW50X2RhdGEgPSB0aGlzOworCisgICAgICAgIGlmIChzZXRqbXAobV9q
bXBidWYpKSB7CisgICAgICAgICAgICBqcGVnX2Rlc3Ryb3lfY29tcHJlc3MoJmNpbmZvKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGpwZWdfY3JlYXRl
X2NvbXByZXNzKCZjaW5mbyk7CisgICAgICAgIGNpbmZvLmltYWdlX3dpZHRoID0gaW1hZ2VTaXpl
LndpZHRoKCk7CisgICAgICAgIGNpbmZvLmltYWdlX2hlaWdodCA9IGltYWdlU2l6ZS5oZWlnaHQo
KTsKKyAgICAgICAgY2luZm8uaW5fY29sb3Jfc3BhY2UgPSBKQ1NfUkdCOworICAgICAgICBjaW5m
by5pbnB1dF9jb21wb25lbnRzID0gMzsKKworICAgICAgICBjaW5mby5kZXN0ID0gdGhpczsKKyAg
ICAgICAgaW5pdF9kZXN0aW5hdGlvbiA9IHByZXBhcmVPdXRwdXQ7CisgICAgICAgIGVtcHR5X291
dHB1dF9idWZmZXIgPSB3cml0ZU91dHB1dDsKKyAgICAgICAgdGVybV9kZXN0aW5hdGlvbiA9IGZp
bmlzaE91dHB1dDsKKworICAgICAgICBqcGVnX3NldF9kZWZhdWx0cygmY2luZm8pOworICAgICAg
ICBqcGVnX3NldF9xdWFsaXR5KCZjaW5mbywgcXVhbGl0eSwgVFJVRSk7CisgICAgICAgIGpwZWdf
c3RhcnRfY29tcHJlc3MoJmNpbmZvLCBUUlVFKTsKKworICAgICAgICBtX3Jvdy5yZXNpemUoY2lu
Zm8uaW1hZ2Vfd2lkdGggKiBjaW5mby5pbnB1dF9jb21wb25lbnRzKTsKKyAgICAgICAgd2hpbGUg
KGNpbmZvLm5leHRfc2NhbmxpbmUgPCBjaW5mby5pbWFnZV9oZWlnaHQpIHsKKyAgICAgICAgICAg
IHByZU11bHRpcGxpZWRCR1JBdG9SR0IoY2luZm8uaW1hZ2Vfd2lkdGgsIG1fcm93LmRhdGEoKSk7
CisgICAgICAgICAgICBqcGVnX3dyaXRlX3NjYW5saW5lcygmY2luZm8sIG1fcm93LmRhdGFTbG90
KCksIDEpOworICAgICAgICB9CisKKyAgICAgICAganBlZ19maW5pc2hfY29tcHJlc3MoJmNpbmZv
KTsKKyAgICAgICAganBlZ19kZXN0cm95X2NvbXByZXNzKCZjaW5mbyk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworcHJpdmF0ZToKKyAgICAvLyBGSVhNRTogaXMgYWxwaGEgdW5wcmVt
dWx0aXBsaWNhdGlvbiBjb3JyZWN0LCBvciBzaG91bGQgdGhlIGFscGhhIGNoYW5uZWwKKyAgICAv
LyBiZSBpZ25vcmVkPyBTZWUgYnVnIGh0dHA6Ly93ZWJraXQub3JnL2IvNDAxNDcuCisgICAgdm9p
ZCBwcmVNdWx0aXBsaWVkQkdSQXRvUkdCKHVuc2lnbmVkIGludCBwaXhlbHMsIHVuc2lnbmVkIGNo
YXIqIG91dHB1dCkKKyAgICB7CisgICAgICAgIHdoaWxlIChwaXhlbHMtLSA+IDApIHsKKyAgICAg
ICAgICAgIFNrQ29sb3IgdW5tdWx0aXBsaWVkID0gU2tVblByZU11bHRpcGx5OjpQTUNvbG9yVG9D
b2xvcigqbV9waXhlbHMrKyk7CisgICAgICAgICAgICAqb3V0cHV0KysgPSBTa0NvbG9yR2V0Uih1
bm11bHRpcGxpZWQpOworICAgICAgICAgICAgKm91dHB1dCsrID0gU2tDb2xvckdldEcodW5tdWx0
aXBsaWVkKTsKKyAgICAgICAgICAgICpvdXRwdXQrKyA9IFNrQ29sb3JHZXRCKHVubXVsdGlwbGll
ZCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdm9pZCBwcmVwYXJlT3V0cHV0KGpf
Y29tcHJlc3NfcHRyIGNpbmZvKQorICAgIHsKKyAgICAgICAgSlBFR0JpdG1hcEVuY29kZXIqIG91
dCA9IHN0YXRpY19jYXN0PEpQRUdCaXRtYXBFbmNvZGVyKj4oY2luZm8tPmRlc3QpOworICAgICAg
ICBjb25zdCBzaXplX3QgaW50ZXJuYWxCdWZmZXJTaXplID0gODE5MjsKKyAgICAgICAgb3V0LT5t
X2J1ZmZlci5yZXNpemUoaW50ZXJuYWxCdWZmZXJTaXplKTsKKyAgICAgICAgb3V0LT5uZXh0X291
dHB1dF9ieXRlID0gb3V0LT5tX2J1ZmZlci5kYXRhKCk7CisgICAgICAgIG91dC0+ZnJlZV9pbl9i
dWZmZXIgPSBvdXQtPm1fYnVmZmVyLnNpemUoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbGVh
biB3cml0ZU91dHB1dChqX2NvbXByZXNzX3B0ciBjaW5mbykKKyAgICB7CisgICAgICAgIEpQRUdC
aXRtYXBFbmNvZGVyKiBvdXQgPSBzdGF0aWNfY2FzdDxKUEVHQml0bWFwRW5jb2Rlcio+KGNpbmZv
LT5kZXN0KTsKKyAgICAgICAgb3V0LT5tX291dHB1dC0+YXBwZW5kKG91dC0+bV9idWZmZXIuZGF0
YSgpLCBvdXQtPm1fYnVmZmVyLnNpemUoKSk7CisgICAgICAgIG91dC0+bmV4dF9vdXRwdXRfYnl0
ZSA9IG91dC0+bV9idWZmZXIuZGF0YSgpOworICAgICAgICBvdXQtPmZyZWVfaW5fYnVmZmVyID0g
b3V0LT5tX2J1ZmZlci5zaXplKCk7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0KKworICAg
IHN0YXRpYyB2b2lkIGZpbmlzaE91dHB1dChqX2NvbXByZXNzX3B0ciBjaW5mbykKKyAgICB7Cisg
ICAgICAgIEpQRUdCaXRtYXBFbmNvZGVyKiBvdXQgPSBzdGF0aWNfY2FzdDxKUEVHQml0bWFwRW5j
b2Rlcio+KGNpbmZvLT5kZXN0KTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHNpemUgPSBvdXQtPm1f
YnVmZmVyLnNpemUoKSAtIG91dC0+ZnJlZV9pbl9idWZmZXI7CisgICAgICAgIG91dC0+bV9vdXRw
dXQtPmFwcGVuZChvdXQtPm1fYnVmZmVyLmRhdGEoKSwgc2l6ZSk7CisgICAgfQorCisgICAgc3Rh
dGljIHZvaWQgaGFuZGxlRXJyb3Ioal9jb21tb25fcHRyIGNvbW1vbikKKyAgICB7CisgICAgICAg
IHZvaWQqIGNsaWVudCA9IGNvbW1vbi0+Y2xpZW50X2RhdGE7CisgICAgICAgIEpQRUdCaXRtYXBF
bmNvZGVyKiBmYWlsZWQgPSBzdGF0aWNfY2FzdDxKUEVHQml0bWFwRW5jb2Rlcio+KGNsaWVudCk7
CisgICAgICAgIGxvbmdqbXAoZmFpbGVkLT5tX2ptcGJ1ZiwgLTEpOworICAgIH0KKworICAgIGNv
bnN0IFNrQml0bWFwJiBtX2JpdG1hcDsKKyAgICBjb25zdCBTa1BNQ29sb3IqIG1fcGl4ZWxzOwor
ICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiogbV9vdXRwdXQ7CisgICAgVmVjdG9yPHVuc2lnbmVk
IGNoYXI+IG1fYnVmZmVyOworICAgIFZlY3RvcjxKU0FNUExFPiBtX3JvdzsKKyAgICBqcGVnX2Vy
cm9yX21nciBtX2Vycm9yOworICAgIGptcF9idWYgbV9qbXBidWY7Cit9OworCitib29sIEpQRUdJ
bWFnZUVuY29kZXI6OmVuY29kZShjb25zdCBTa0JpdG1hcCYgYml0bWFwLCBpbnQgcXVhbGl0eSwg
VmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBvdXRwdXQpCit7CisgICAgaWYgKGJpdG1hcC5jb25maWco
KSAhPSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpCisgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gT25seSBzdXBwb3J0IEFSR0IgMzIgYnBwIHNraWEgYml0bWFwcy4KKworICAgIFNrQXV0b0xv
Y2tQaXhlbHMgYml0bWFwTG9jayhiaXRtYXApOworICAgIHJldHVybiBKUEVHQml0bWFwRW5jb2Rl
cihiaXRtYXAsIG91dHB1dCkuZW5jb2RlKHF1YWxpdHkpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEv
SlBFR0ltYWdlRW5jb2Rlci5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lh
L0pQRUdJbWFnZUVuY29kZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5m
MmFjNTJkCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVy
cy9za2lhL0pQRUdJbWFnZUVuY29kZXIuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJp
Z2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEpQRUdJ
bWFnZUVuY29kZXJfaAorI2RlZmluZSBKUEVHSW1hZ2VFbmNvZGVyX2gKKworI2luY2x1ZGUgIlZl
Y3Rvci5oIgorCitjbGFzcyBTa0JpdG1hcDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBKUEVHSW1hZ2VFbmNvZGVyIHsKK3B1YmxpYzoKKyAgICAvLyBFbmNvZGUgdGhlIGlucHV0IGJp
dG1hcCB3aXRoIGEgY29tcHJlc3Npb24gcXVhbGl0eSBpbiBbMC0xMDBdLgorICAgIHN0YXRpYyBi
b29sIGVuY29kZShjb25zdCBTa0JpdG1hcCYsIGludCBxdWFsaXR5LCBWZWN0b3I8dW5zaWduZWQg
Y2hhcj4qKTsKKworICAgIC8vIEZvciBjYWxsZXJzOiBwcm92aWRlIGEgcmVhc29uYWJsZSBjb21w
cmVzc2lvbiBxdWFsaXR5IGRlZmF1bHQuCisgICAgZW51bSBRdWFsaXR5IHsgRGVmYXVsdENvbXBy
ZXNzaW9uUXVhbGl0eSA9IDkyIH07Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75000</attachid>
            <date>2010-11-29 01:30:12 -0800</date>
            <delta_ts>2010-12-02 11:43:03 -0800</delta_ts>
            <desc>patch wip static functions</desc>
            <filename>git-diff.patch</filename>
            <type>text/plain</type>
            <size>16790</size>
            <attacher name="noel gordon">noel.gordon</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1NjBjYzhlLi5kOWRjNzY5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMTEt
MjkgIE5vZWwgR29yZG9uICA8bm9lbC5nb3Jkb25AZ21haWwuY29tPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gQWRkIGNhbnZhcy50
b0RhdGFVUkwoImltYWdlL2pwZWciLCBxdWFsaXR5KSBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD00OTM2NQorCisgICAgICAgIENocm9taXVt
IHdpbmRvdy9saW51eCBsYXlvdXQgdHJ5IHJlc3VsdHMgbm93IG1hdGNoIHRoZSBkZWZhdWx0IHRl
c3QgcmVzdWx0LCBzbworICAgICAgICByZW1vdmUgdGhpcyBwbGF0Zm9ybS1zcGVjaWZpYyB0ZXN0
IGV4Y2VwdGlvbiBmaWxlLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0td2luL2Zhc3Qv
Y2FudmFzL2NhbnZhcy10b0RhdGFVUkwtY2FzZS1pbnNlbnNpdGl2ZS1taW1ldHlwZS1leHBlY3Rl
ZC50eHQ6IFJlbW92ZWQuCisKIDIwMTAtMTEtMjUgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIEVuYWJsZSB0ZXN0IGZvciBXaW4g
UmVsZWFzZSBjaHJvbXVpbS4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtLXdpbi9mYXN0L2NhbnZhcy9jYW52YXMtdG9EYXRhVVJMLWNhc2UtaW5zZW5zaXRpdmUtbWlt
ZXR5cGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2Zh
c3QvY2FudmFzL2NhbnZhcy10b0RhdGFVUkwtY2FzZS1pbnNlbnNpdGl2ZS1taW1ldHlwZS1leHBl
Y3RlZC50eHQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNkNGFiNzkuLjAwMDAwMDAK
LS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0td2luL2Zhc3QvY2FudmFzL2NhbnZh
cy10b0RhdGFVUkwtY2FzZS1pbnNlbnNpdGl2ZS1taW1ldHlwZS1leHBlY3RlZC50eHQKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMSArMCwwIEBACi1UZXN0IHRoYXQgdG9EYXRhVVJMKG1pbWVUeXBlKSBp
Z25vcmVzIHRoZSBjYXNlIG9mICdtaW1lVHlwZScuDQotDQotT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLg0KLQ0KLQ0KLVBBU1MgdHJ5TWltZVR5cGUoJ2ltYWdlL3BuZycpIGlzICdpbWFnZS9wbmcn
DQotUEFTUyB0cnlNaW1lVHlwZSgnaU1BZ2UvUG5nJykgaXMgJ2ltYWdlL3BuZycNCi1QQVNTIHRy
eU1pbWVUeXBlKCdJTUFHRS9QTkcnKSBpcyAnaW1hZ2UvcG5nJw0KLVBBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUNCi0NCi1URVNUIENPTVBMRVRFDQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyODFjNTFmLi5lYmYwMzViIDEwMDY0
NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDQyIEBACisyMDEwLTExLTI5ICBOb2VsIEdvcmRvbiAgPG5vZWwuZ29yZG9uQGdtYWlsLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hy
b21pdW1dIEFkZCBjYW52YXMudG9EYXRhVVJMKCJpbWFnZS9qcGVnIiwgcXVhbGl0eSkgc3VwcG9y
dAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDkzNjUK
KworICAgICAgICBBZGRzIGEgbGlianBlZy1iYXNlZCBpbWFnZSBlbmNvZGVyIGZvciBTa2lhIGJp
dG1hcHMuICBEZWZhdWx0IGVuY29kaW5nIHF1YWxpdHkKKyAgICAgICAgaXMgOTIgdG8gbWF0Y2gg
TW96aWxsYSwgYWxzbyBTYWZhcmksIHRob3VnaCB0aGUgYWN0dWFsIHZhbHVlIHVzZWQgYnkgU2Fm
YXJpIGlzCisgICAgICAgIHVuZG9jdW1lbnRlZCwgYW5kIGl0IGFwcGVhcnMgdG8gcHJlLWJsdXIg
aW1hZ2VzIHByaW9yIHRvIGNvbXByZXNzaW9uLgorCisgICAgICAgIFRoZSBwcmVNdWx0aXBsaWVk
QkdSQXRvUkdCKCkgcm91dGluZSByZXN0b3JlcyB0aGUgdW4tcHJlbXVsdGlwbGllZCBSR0IgY29s
b3JzCisgICAgICAgIHdoZXJlIHRoZXJlIGlzIG5vbi16ZXJvIGFscGhhLiAgQWdhaW4sIHRoaXMg
bWF0Y2hlcyBGaXJlZm94IGFuZCBTYWZhcmksIGJ1dCBubworICAgICAgICBicm93c2VyIGNvbmZv
cm1zIHRvIHRoZSBIVE1MNSBjYW52YXMgc3RhbmRhcmQgaGVyZSwgSSBiZWxpZXZlLCBjb25zaWRl
cmluZyB0aGUKKyAgICAgICAgcmVzdWx0IG9mIGNhbnZhcy9waGlsaXAvdGVzdHMvdG9EYXRhVVJM
LmpwZWcuYWxwaGEuaHRtbDsgdGhhdCB0ZXN0IGlnbm9yZXMgdGhlCisgICAgICAgIGFscGhhIGNo
YW5uZWwgd2hlbiBleHRyYWN0aW5nIGFuICJpbWFnZS9qcGVnIi50b0RhdGFVUkwoKS4gIFRoZSBj
b3JyZWN0IGFuc3dlcgorICAgICAgICBuZWVkcyBtb3JlIGludmVzdGlnYXRpb24sIGJ1ZyBodHRw
Oi8vd2Via2l0Lm9yZy9iLzQwMTQ3LgorCisgICAgICAgIENhbnZhcyB0b0RhdGFVUkwgaXMgY292
ZXJlZCBieSBleGlzdGluZyB0ZXN0cyBjYW52YXMvcGhpbGlwL3Rlc3RzL3RvRGF0YVVSTC4qLAor
ICAgICAgICBhbmQgZmFzdC9jYW52YXMvKnRvRGF0YVVSTCogdGVzdHMuCisKKyAgICAgICAgKiBX
ZWJDb3JlLmd5cGk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0Vs
ZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhIVE1MQ2FudmFzRWxlbWVudDo6
dG9EYXRhVVJMQ2FsbGJhY2spOiBkb24ndCBzZXQgZW5jb2RpbmcgcXVhbGl0eQorICAgICAgICBo
ZXJlLCBqdXN0IHBhc3MgdGhlIHRvRGF0YVVSTCBwYXJhbWV0ZXJzIHRocm91Z2ggdG8gdGhlIGNh
bnZhcyBsYXllci4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9NSU1FVHlwZVJlZ2lzdHJ5
Q2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcpOiBpbXBsZW1lbnQKKyAgICAgICAgdGhlIHN1
cHBvcnRlZCBtaW1lVHlwZXMgZm9yIGVuY29kaW5nIGluLXBsYWNlLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyOjp0b0RhdGFVUkwpOiBhZGQganBlZyBlbmNvZGluZyBhbmQgcXVhbGl0eSBz
dXBwb3J0LgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvSlBFR0ltYWdl
RW5jb2Rlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6cHJlcGFyZU91dHB1dCk6Cisg
ICAgICAgIChXZWJDb3JlOjp3cml0ZU91dHB1dCk6CisgICAgICAgIChXZWJDb3JlOjpmaW5pc2hP
dXRwdXQpOgorICAgICAgICAoV2ViQ29yZTo6aGFuZGxlRXJyb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6cHJlTXVsdGlwbGllZEJHUkF0b1JHQik6IEZJWE1FOiBidWcgNDAxNDcuCisgICAgICAgIChX
ZWJDb3JlOjpKUEVHSW1hZ2VFbmNvZGVyOjplbmNvZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2lt
YWdlLWVuY29kZXJzL3NraWEvSlBFR0ltYWdlRW5jb2Rlci5oOiBBZGRlZC4KKwogMjAxMC0xMS0y
NSAgQW50dGkgS29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFuIEJlcm5zdGVpbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZGJjODk3OS4uNjc4NTZiNSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI5NDAsNiAr
Mjk0MCw4IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi96Y29u
Zi5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy96bGliL3psaWIuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvemxpYi96dXRpbC5oJywKKyAg
ICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQRUdJbWFnZUVuY29kZXIu
Y3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQRUdJbWFn
ZUVuY29kZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vaW1hZ2UtZW5jb2RlcnMvc2tpYS9Q
TkdJbWFnZUVuY29kZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9pbWFnZS1lbmNvZGVy
cy9za2lhL1BOR0ltYWdlRW5jb2Rlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9tYWMvQXV0
b2RyYWluZWRQb29sLm1tJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAKaW5kZXggZDJmOGM5Ni4uZTE1NGY3ZiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFzRWxlbWVu
dEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ2FudmFz
RWxlbWVudEN1c3RvbS5jcHAKQEAgLTk0LDE4ICs5NCwxOSBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gVjhIVE1MQ2FudmFzRWxlbWVudDo6Z2V0Q29udGV4dENhbGxiYWNrKGNvbnN0IHY4OjpBcmd1
bWVudAogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRh
VVJMQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykKIHsKLSAgICBkb3VibGUgcXVh
bGl0eSA9IDEuMDsKLSAgICBpZiAoYXJncy5MZW5ndGgoKSA+IDEpIHsKLSAgICAgICAgaWYgKGFy
Z3NbMV0tPklzTnVtYmVyKCkpCi0gICAgICAgICAgICBxdWFsaXR5ID0gYXJnc1sxXS0+TnVtYmVy
VmFsdWUoKTsKLSAgICAgICAgaWYgKCEoMC4wIDw9IHF1YWxpdHkgJiYgcXVhbGl0eSA8PSAxLjAp
KQotICAgICAgICAgICAgcXVhbGl0eSA9IDEuMDsKLSAgICB9CiAgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwogICAgIEhUTUxDYW52YXNFbGVtZW50KiBj
YW52YXMgPSBWOEhUTUxDYW52YXNFbGVtZW50Ojp0b05hdGl2ZShob2xkZXIpOwotICAgIFN0cmlu
ZyB0eXBlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgIFN0cmluZyByZXN1bHQgPSBjYW52YXMtPnRvRGF0YVVSTCh0eXBlLCAmcXVhbGl0
eSwgZWMpOworCisgICAgU3RyaW5nIHR5cGUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7Cisg
ICAgZG91YmxlIHF1YWxpdHk7CisgICAgZG91YmxlKiBxdWFsaXR5UHRyID0gMDsKKyAgICBpZiAo
YXJncy5MZW5ndGgoKSA+IDEgJiYgYXJnc1sxXS0+SXNOdW1iZXIoKSkgeworICAgICAgICBxdWFs
aXR5ID0gYXJnc1sxXS0+TnVtYmVyVmFsdWUoKTsKKyAgICAgICAgcXVhbGl0eVB0ciA9ICZxdWFs
aXR5OworICAgIH0KKworICAgIFN0cmluZyByZXN1bHQgPSBjYW52YXMtPnRvRGF0YVVSTCh0eXBl
LCBxdWFsaXR5UHRyLCBlYyk7CiAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKICAg
ICByZXR1cm4gdjhTdHJpbmdPclVuZGVmaW5lZChyZXN1bHQpOwogfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9NSU1FVHlwZVJlZ2lzdHJ5Q2hyb21pdW0uY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9NSU1FVHlwZVJlZ2lzdHJ5Q2hyb21pdW0uY3BwCmluZGV4
IDIzZjc5MjYuLjlkZjg4NDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
TUlNRVR5cGVSZWdpc3RyeUNocm9taXVtLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL01JTUVUeXBlUmVnaXN0cnlDaHJvbWl1bS5jcHAKQEAgLTkxLDggKzkxLDcgQEAgYm9vbCBN
SU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlUmVzb3VyY2VNSU1FVHlwZShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKQogCiBib29sIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1h
Z2VNSU1FVHlwZUZvckVuY29kaW5nKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7Ci0gICAgLy8g
RklYTUU6IEZpbGwgdGhpcyBvdXQuIFNlZTogaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2Vz
ZXQvMzA4ODgKLSAgICByZXR1cm4gaXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKG1pbWVUeXBlKTsK
KyAgICByZXR1cm4gbWltZVR5cGUgPT0gImltYWdlL2pwZWciIHx8IG1pbWVUeXBlID09ICJpbWFn
ZS9wbmciOwogfQogCiBib29sIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSmF2YVNjcmlw
dE1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCmluZGV4IGFkYjczMmIuLmI3MTRl
ZjQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZl
clNraWEuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZl
clNraWEuY3BwCkBAIC00MCw2ICs0MCw4IEBACiAjaW5jbHVkZSAiR0xFUzJDYW52YXMuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNs
dWRlICJKUEVHSW1hZ2VFbmNvZGVyLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgog
I2luY2x1ZGUgIlBOR0ltYWdlRW5jb2Rlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNr
aWEuaCIKICNpbmNsdWRlICJTa0NvbG9yUHJpdi5oIgpAQCAtMzE4LDIwICszMjAsMjggQEAgdm9p
ZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShJbWFnZURhdGEqIHNvdXJj
ZSwgY29uc3QgSW50UmVjdCYgc28KICAgICBwdXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4oc291
cmNlLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQsICpjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgp
LT5iaXRtYXAoKSwgbV9zaXplKTsKIH0KIAotU3RyaW5nIEltYWdlQnVmZmVyOjp0b0RhdGFVUkwo
Y29uc3QgU3RyaW5nJiwgY29uc3QgZG91YmxlKikgY29uc3QKK1N0cmluZyBJbWFnZUJ1ZmZlcjo6
dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSkg
Y29uc3QKIHsKLSAgICAvLyBFbmNvZGUgdGhlIGltYWdlIGludG8gYSB2ZWN0b3IuCi0gICAgVmVj
dG9yPHVuc2lnbmVkIGNoYXI+IHBuZ0VuY29kZWREYXRhOwotICAgIFBOR0ltYWdlRW5jb2Rlcjo6
ZW5jb2RlKCpjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5iaXRtYXAoKSwgJnBuZ0VuY29k
ZWREYXRhKTsKLQotICAgIC8vIENvbnZlcnQgaXQgaW50byBiYXNlNjQuCi0gICAgVmVjdG9yPGNo
YXI+IGJhc2U2NEVuY29kZWREYXRhOwotICAgIGJhc2U2NEVuY29kZSgqcmVpbnRlcnByZXRfY2Fz
dDxWZWN0b3I8Y2hhcj4qPigmcG5nRW5jb2RlZERhdGEpLCBiYXNlNjRFbmNvZGVkRGF0YSk7Ci0g
ICAgLy8gQXBwZW5kIHdpdGggYSBcMCBzbyB0aGF0IGl0J3MgYSB2YWxpZCBzdHJpbmcuCi0gICAg
YmFzZTY0RW5jb2RlZERhdGEuYXBwZW5kKCdcMCcpOwotCi0gICAgLy8gQW5kIHRoZSByZXN1bHRp
bmcgc3RyaW5nLgotICAgIHJldHVybiBtYWtlU3RyaW5nKCJkYXRhOmltYWdlL3BuZztiYXNlNjQs
IiwgYmFzZTY0RW5jb2RlZERhdGEuZGF0YSgpKTsKKyAgICBBU1NFUlQoTUlNRVR5cGVSZWdpc3Ry
eTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobWltZVR5cGUpKTsKKworICAg
IFZlY3Rvcjx1bnNpZ25lZCBjaGFyPiBlbmNvZGVkSW1hZ2U7CisgICAgaWYgKG1pbWVUeXBlID09
ICJpbWFnZS9qcGVnIikgeworICAgICAgICBpbnQgY29tcHJlc3Npb25RdWFsaXR5ID0gSlBFR0lt
YWdlRW5jb2Rlcjo6RGVmYXVsdENvbXByZXNzaW9uUXVhbGl0eTsKKyAgICAgICAgaWYgKHF1YWxp
dHkgJiYgKnF1YWxpdHkgPj0gMC4wICYmICpxdWFsaXR5IDw9IDEuMCkKKyAgICAgICAgICAgIGNv
bXByZXNzaW9uUXVhbGl0eSA9IHN0YXRpY19jYXN0PGludD4oKnF1YWxpdHkgKiAxMDAgKyAwLjUp
OworICAgICAgICBpZiAoIUpQRUdJbWFnZUVuY29kZXI6OmVuY29kZSgqY29udGV4dCgpLT5wbGF0
Zm9ybUNvbnRleHQoKS0+Yml0bWFwKCksIGNvbXByZXNzaW9uUXVhbGl0eSwgJmVuY29kZWRJbWFn
ZSkpCisgICAgICAgICAgICByZXR1cm4gImRhdGE6LCI7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
aWYgKCFQTkdJbWFnZUVuY29kZXI6OmVuY29kZSgqY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQo
KS0+Yml0bWFwKCksICZlbmNvZGVkSW1hZ2UpKQorICAgICAgICAgICAgcmV0dXJuICJkYXRhOiwi
OworICAgICAgICBBU1NFUlQobWltZVR5cGUgPT0gImltYWdlL3BuZyIpOworICAgIH0KKworICAg
IFZlY3RvcjxjaGFyPiBiYXNlNjREYXRhOworICAgIGJhc2U2NEVuY29kZSgqcmVpbnRlcnByZXRf
Y2FzdDxWZWN0b3I8Y2hhcj4qPigmZW5jb2RlZEltYWdlKSwgYmFzZTY0RGF0YSk7CisgICAgYmFz
ZTY0RGF0YS5hcHBlbmQoJ1wwJyk7CisKKyAgICByZXR1cm4gbWFrZVN0cmluZygiZGF0YToiLCBt
aW1lVHlwZSwgIjtiYXNlNjQsIiwgYmFzZTY0RGF0YS5kYXRhKCkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29kZXJz
L3NraWEvSlBFR0ltYWdlRW5jb2Rlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWVuY29k
ZXJzL3NraWEvSlBFR0ltYWdlRW5jb2Rlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYzA0MDE5ZAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZW5jb2RlcnMvc2tpYS9KUEVHSW1hZ2VFbmNvZGVyLmNwcApAQCAtMCwwICsxLDE0NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpQRUdJbWFnZUVuY29kZXIuaCIKKworI2lu
Y2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTa0JpdG1hcC5oIgorI2luY2x1ZGUgIlNrVW5Q
cmVNdWx0aXBseS5oIgorZXh0ZXJuICJDIiB7CisjaW5jbHVkZSA8c3RkaW8uaD4gLy8ganBlZ2xp
Yi5oIG5lZWRzIHN0ZGlvLmggRklMRQorI2luY2x1ZGUgImpwZWdsaWIuaCIKKyNpbmNsdWRlIDxz
ZXRqbXAuaD4KK30KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdHJ1Y3QgSlBFR091dHB1dEJ1
ZmZlciA6IHB1YmxpYyBqcGVnX2Rlc3RpbmF0aW9uX21nciB7CisgICAgVmVjdG9yPHVuc2lnbmVk
IGNoYXI+KiBvdXRwdXQ7CisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IGJ1ZmZlcjsKK307CisK
K3N0YXRpYyB2b2lkIHByZXBhcmVPdXRwdXQoal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgICAg
SlBFR091dHB1dEJ1ZmZlciogb3V0ID0gc3RhdGljX2Nhc3Q8SlBFR091dHB1dEJ1ZmZlcio+KGNp
bmZvLT5kZXN0KTsKKyAgICBjb25zdCBzaXplX3QgaW50ZXJuYWxCdWZmZXJTaXplID0gODE5MjsK
KyAgICBvdXQtPmJ1ZmZlci5yZXNpemUoaW50ZXJuYWxCdWZmZXJTaXplKTsKKyAgICBvdXQtPm5l
eHRfb3V0cHV0X2J5dGUgPSBvdXQtPmJ1ZmZlci5kYXRhKCk7CisgICAgb3V0LT5mcmVlX2luX2J1
ZmZlciA9IG91dC0+YnVmZmVyLnNpemUoKTsKK30KKworc3RhdGljIGJvb2xlYW4gd3JpdGVPdXRw
dXQoal9jb21wcmVzc19wdHIgY2luZm8pCit7CisgICAgSlBFR091dHB1dEJ1ZmZlciogb3V0ID0g
c3RhdGljX2Nhc3Q8SlBFR091dHB1dEJ1ZmZlcio+KGNpbmZvLT5kZXN0KTsKKyAgICBvdXQtPm91
dHB1dC0+YXBwZW5kKG91dC0+YnVmZmVyLmRhdGEoKSwgb3V0LT5idWZmZXIuc2l6ZSgpKTsKKyAg
ICBvdXQtPm5leHRfb3V0cHV0X2J5dGUgPSBvdXQtPmJ1ZmZlci5kYXRhKCk7CisgICAgb3V0LT5m
cmVlX2luX2J1ZmZlciA9IG91dC0+YnVmZmVyLnNpemUoKTsKKyAgICByZXR1cm4gVFJVRTsKK30K
Kworc3RhdGljIHZvaWQgZmluaXNoT3V0cHV0KGpfY29tcHJlc3NfcHRyIGNpbmZvKQoreworICAg
IEpQRUdPdXRwdXRCdWZmZXIqIG91dCA9IHN0YXRpY19jYXN0PEpQRUdPdXRwdXRCdWZmZXIqPihj
aW5mby0+ZGVzdCk7CisgICAgY29uc3Qgc2l6ZV90IHNpemUgPSBvdXQtPmJ1ZmZlci5zaXplKCkg
LSBvdXQtPmZyZWVfaW5fYnVmZmVyOworICAgIG91dC0+b3V0cHV0LT5hcHBlbmQob3V0LT5idWZm
ZXIuZGF0YSgpLCBzaXplKTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlRXJyb3Ioal9jb21tb25f
cHRyIGNvbW1vbikKK3sKKyAgICBqbXBfYnVmKiBqdW1wQnVmZmVyUHRyID0gc3RhdGljX2Nhc3Q8
am1wX2J1Zio+KGNvbW1vbi0+Y2xpZW50X2RhdGEpOworICAgIGxvbmdqbXAoKmp1bXBCdWZmZXJQ
dHIsIC0xKTsKK30KKworLy8gRklYTUU6IGlzIGFscGhhIHVucHJlbXVsdGlwbGljYXRpb24gY29y
cmVjdCwgb3Igc2hvdWxkIHRoZSBhbHBoYSBjaGFubmVsCisvLyBiZSBpZ25vcmVkPyBTZWUgYnVn
IGh0dHA6Ly93ZWJraXQub3JnL2IvNDAxNDcuCit2b2lkIHByZU11bHRpcGxpZWRCR1JBdG9SR0Io
Y29uc3QgU2tQTUNvbG9yKiBpbnB1dCwgdW5zaWduZWQgaW50IHBpeGVscywgdW5zaWduZWQgY2hh
ciogb3V0cHV0KQoreworICAgIHdoaWxlIChwaXhlbHMtLSA+IDApIHsKKyAgICAgICAgU2tDb2xv
ciB1bm11bHRpcGxpZWQgPSBTa1VuUHJlTXVsdGlwbHk6OlBNQ29sb3JUb0NvbG9yKCppbnB1dCsr
KTsKKyAgICAgICAgKm91dHB1dCsrID0gU2tDb2xvckdldFIodW5tdWx0aXBsaWVkKTsKKyAgICAg
ICAgKm91dHB1dCsrID0gU2tDb2xvckdldEcodW5tdWx0aXBsaWVkKTsKKyAgICAgICAgKm91dHB1
dCsrID0gU2tDb2xvckdldEIodW5tdWx0aXBsaWVkKTsKKyAgICB9Cit9CisKK2Jvb2wgSlBFR0lt
YWdlRW5jb2Rlcjo6ZW5jb2RlKGNvbnN0IFNrQml0bWFwJiBiaXRtYXAsIGludCBxdWFsaXR5LCBW
ZWN0b3I8dW5zaWduZWQgY2hhcj4qIG91dHB1dCkKK3sKKyAgICBpZiAoYml0bWFwLmNvbmZpZygp
ICE9IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZykKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAv
LyBPbmx5IHN1cHBvcnQgQVJHQiAzMiBicHAgc2tpYSBiaXRtYXBzLgorCisgICAgU2tBdXRvTG9j
a1BpeGVscyBiaXRtYXBMb2NrKGJpdG1hcCk7CisgICAgSW50U2l6ZSBpbWFnZVNpemUoYml0bWFw
LndpZHRoKCksIGJpdG1hcC5oZWlnaHQoKSk7CisgICAgaW1hZ2VTaXplLmNsYW1wTmVnYXRpdmVU
b1plcm8oKTsKKyAgICBKUEVHT3V0cHV0QnVmZmVyIGRlc3RpbmF0aW9uOworICAgIGRlc3RpbmF0
aW9uLm91dHB1dCA9IG91dHB1dDsKKyAgICBWZWN0b3I8SlNBTVBMRT4gcm93OworCisgICAganBl
Z19jb21wcmVzc19zdHJ1Y3QgY2luZm87CisgICAganBlZ19lcnJvcl9tZ3IgZXJyb3I7CisgICAg
Y2luZm8uZXJyID0ganBlZ19zdGRfZXJyb3IoJmVycm9yKTsKKyAgICBlcnJvci5lcnJvcl9leGl0
ID0gaGFuZGxlRXJyb3I7CisgICAgam1wX2J1ZiBqdW1wQnVmZmVyOworICAgIGNpbmZvLmNsaWVu
dF9kYXRhID0gJmp1bXBCdWZmZXI7CisKKyAgICBpZiAoc2V0am1wKGp1bXBCdWZmZXIpKSB7Cisg
ICAgICAgIGpwZWdfZGVzdHJveV9jb21wcmVzcygmY2luZm8pOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAganBlZ19jcmVhdGVfY29tcHJlc3MoJmNpbmZvKTsKKyAgICBjaW5m
by5kZXN0ID0gJmRlc3RpbmF0aW9uOworICAgIGNpbmZvLmRlc3QtPmluaXRfZGVzdGluYXRpb24g
PSBwcmVwYXJlT3V0cHV0OworICAgIGNpbmZvLmRlc3QtPmVtcHR5X291dHB1dF9idWZmZXIgPSB3
cml0ZU91dHB1dDsKKyAgICBjaW5mby5kZXN0LT50ZXJtX2Rlc3RpbmF0aW9uID0gZmluaXNoT3V0
cHV0OworICAgIGNpbmZvLmltYWdlX2hlaWdodCA9IGltYWdlU2l6ZS5oZWlnaHQoKTsKKyAgICBj
aW5mby5pbWFnZV93aWR0aCA9IGltYWdlU2l6ZS53aWR0aCgpOworICAgIGNpbmZvLmluX2NvbG9y
X3NwYWNlID0gSkNTX1JHQjsKKyAgICBjaW5mby5pbnB1dF9jb21wb25lbnRzID0gMzsKKworICAg
IGpwZWdfc2V0X2RlZmF1bHRzKCZjaW5mbyk7CisgICAganBlZ19zZXRfcXVhbGl0eSgmY2luZm8s
IHF1YWxpdHksIFRSVUUpOworICAgIGpwZWdfc3RhcnRfY29tcHJlc3MoJmNpbmZvLCBUUlVFKTsK
KworICAgIGNvbnN0IFNrUE1Db2xvciogcGl4ZWxzID0gc3RhdGljX2Nhc3Q8U2tQTUNvbG9yKj4o
Yml0bWFwLmdldFBpeGVscygpKTsKKyAgICByb3cucmVzaXplKGNpbmZvLmltYWdlX3dpZHRoICog
Y2luZm8uaW5wdXRfY29tcG9uZW50cyk7CisgICAgd2hpbGUgKGNpbmZvLm5leHRfc2NhbmxpbmUg
PCBjaW5mby5pbWFnZV9oZWlnaHQpIHsKKyAgICAgICAgcHJlTXVsdGlwbGllZEJHUkF0b1JHQihw
aXhlbHMsIGNpbmZvLmltYWdlX3dpZHRoLCByb3cuZGF0YSgpKTsKKyAgICAgICAganBlZ193cml0
ZV9zY2FubGluZXMoJmNpbmZvLCByb3cuZGF0YVNsb3QoKSwgMSk7CisgICAgICAgIHBpeGVscyAr
PSBjaW5mby5pbWFnZV93aWR0aDsKKyAgICB9CisKKyAgICBqcGVnX2ZpbmlzaF9jb21wcmVzcygm
Y2luZm8pOworICAgIGpwZWdfZGVzdHJveV9jb21wcmVzcygmY2luZm8pOworICAgIHJldHVybiB0
cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWVuY29kZXJzL3NraWEvSlBFR0ltYWdlRW5jb2Rlci5oIGIvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQRUdJbWFnZUVuY29kZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmFjNTJkCi0tLSAvZGV2L251bGwKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9pbWFnZS1lbmNvZGVycy9za2lhL0pQRUdJbWFnZUVuY29kZXIuaApAQCAt
MCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEpQRUdJbWFnZUVuY29kZXJfaAorI2RlZmluZSBKUEVHSW1h
Z2VFbmNvZGVyX2gKKworI2luY2x1ZGUgIlZlY3Rvci5oIgorCitjbGFzcyBTa0JpdG1hcDsKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBKUEVHSW1hZ2VFbmNvZGVyIHsKK3B1YmxpYzoK
KyAgICAvLyBFbmNvZGUgdGhlIGlucHV0IGJpdG1hcCB3aXRoIGEgY29tcHJlc3Npb24gcXVhbGl0
eSBpbiBbMC0xMDBdLgorICAgIHN0YXRpYyBib29sIGVuY29kZShjb25zdCBTa0JpdG1hcCYsIGlu
dCBxdWFsaXR5LCBWZWN0b3I8dW5zaWduZWQgY2hhcj4qKTsKKworICAgIC8vIEZvciBjYWxsZXJz
OiBwcm92aWRlIGEgcmVhc29uYWJsZSBjb21wcmVzc2lvbiBxdWFsaXR5IGRlZmF1bHQuCisgICAg
ZW51bSBRdWFsaXR5IHsgRGVmYXVsdENvbXByZXNzaW9uUXVhbGl0eSA9IDkyIH07Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>