<?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>109662</bug_id>
          
          <creation_ts>2013-02-12 22:00:52 -0800</creation_ts>
          <short_desc>GIFImageReader to read from source data directly</short_desc>
          <delta_ts>2013-05-22 00:39:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>116041</dependson>
    
    <dependson>110789</dependson>
          <blocked>98098</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hin-Chung Lam">hclam</reporter>
          <assigned_to name="Hin-Chung Lam">hclam</assigned_to>
          <cc>nduca</cc>
    
    <cc>pkasting</cc>
    
    <cc>qinmin</cc>
    
    <cc>senorblanco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>831625</commentid>
    <comment_count>0</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-12 22:00:52 -0800</bug_when>
    <thetext>GIFImageReader has a legacy thing  that keeps a small internal buffer to copy into. The code calls it the &quot;hold&quot; pattern. The bug is to remove this read pattern because WebKit holds the entire file. Change the code such that it reads from a large memory that holds the entire file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837491</commentid>
    <comment_count>1</comment_count>
      <attachid>189326</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-20 08:32:21 -0800</bug_when>
    <thetext>Created attachment 189326
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837496</commentid>
    <comment_count>2</comment_count>
      <attachid>189328</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-20 08:43:32 -0800</bug_when>
    <thetext>Created attachment 189328
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837499</commentid>
    <comment_count>3</comment_count>
      <attachid>189329</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-20 08:46:49 -0800</bug_when>
    <thetext>Created attachment 189329
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837500</commentid>
    <comment_count>4</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-20 08:47:44 -0800</bug_when>
    <thetext>Peter: Would you please review this patch? 

Stephen: Please review after Peter.

More patches coming, thanks guys!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837606</commentid>
    <comment_count>5</comment_count>
      <attachid>189329</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2013-02-20 11:34:25 -0800</bug_when>
    <thetext>Comment on attachment 189329
Patch

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

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp:54
&gt; +    if (m_reader)
&gt; +        m_reader-&gt;setData(data);

For consistency with other decoders, put this immediately below the superclass call.  (See BMPImageDecoder::setData().)

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp:90
&gt;          GIFImageReader reader(0);

Long-term, are you planning to get rid of this by making it possible to non-destructively query |m_reader| for this information?

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:93
&gt; +        m_bytesInNextBlock = (n); \

This name seems a bit misleading, maybe m_bytesRequested?  (Since this is &quot;how many bytes we want next&quot;, but that might not be the full length of a block, just the length of the next component our parser is looking for, right?)

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:204
&gt; +bool GIFImageReader::doLZW(const unsigned char* block, unsigned bytesInBlock)

Nit: Seems better to use size_t for byte counts instead of unsigned. (several places)

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:375
&gt; +    // Variables:

I&apos;m not a fan of this big comment block.  Descriptive variable names (&quot;q&quot; sucks) plus comments above variables where they&apos;re declared (as needed) are sufficient.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:391
&gt; +    // This loop reads as many blocks from |m_data| as possible.
&gt; +    // Beginning of each iteration dataPosition will be advanced m_bytesInNextBlock to point
&gt; +    // to the next block, len is decremented accordingly.

Again, we don[t actually increment block-at-a-time, just individual-parsed-component at a time, right?

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:486
&gt; +                // The entire global colormap is received so advance read position.

Nit: This comment seems unnecessary.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:787
&gt; +                    // Not enough bytes to read the entire colormap, read it as next block.

Tiny nit: Word this identically to how you did the global colormap comment.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:792
&gt; +                // There&apos;s enough bytes for the entire colormap so advance data pointer.

Nit: This comment seems unnecessary.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:-897
&gt; -        m_client-&gt;decodingHalted(0);

You seem to have removed all the decodingHalted() calls, shouldn&apos;t you remove that function itself?  And doesn&apos;t that mean that GIFImageDecoder::m_readOffset isn&apos;t being updated anymore?  (You&apos;re now tracking that as GIFImageReader::m_bytesRead, aren&apos;t you?)

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:201
&gt; +        return colormap(m_globalColormapPosition, m_globalColormapSize);

It seems like for safety this should have some kind of check that we&apos;ve actually read the global colormap yet, as we do for the local colormap.

If we do this, we ought to be able to remove the sanity-check in colormap(), which means that colormap() itself can be removed and replaced by a direct call to data().

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:226
&gt; +    const unsigned char* data(unsigned dataPosition) const

It seems like we mostly need this because we&apos;re casting char* to unsigned char*.  If callers took a char*, they could just do &quot;m_data-&gt;data() + position&quot; directly.

This is perhaps a viral change, so it may not be suitable for doing in this CL, but are there real problems with changing various places that use unsigned char* to just char*?  This will eliminate some casting elsewhere too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837804</commentid>
    <comment_count>6</comment_count>
      <attachid>189388</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-20 15:01:08 -0800</bug_when>
    <thetext>Created attachment 189388
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837809</commentid>
    <comment_count>7</comment_count>
      <attachid>189329</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-20 15:03:09 -0800</bug_when>
    <thetext>Comment on attachment 189329
Patch

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

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp:54
&gt;&gt; +        m_reader-&gt;setData(data);
&gt; 
&gt; For consistency with other decoders, put this immediately below the superclass call.  (See BMPImageDecoder::setData().)

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageDecoder.cpp:90
&gt;&gt;          GIFImageReader reader(0);
&gt; 
&gt; Long-term, are you planning to get rid of this by making it possible to non-destructively query |m_reader| for this information?

Yes that&apos;s definitely the short term goal. You&apos;ll see this n^2 behavior removed in a few patches.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:93
&gt;&gt; +        m_bytesInNextBlock = (n); \
&gt; 
&gt; This name seems a bit misleading, maybe m_bytesRequested?  (Since this is &quot;how many bytes we want next&quot;, but that might not be the full length of a block, just the length of the next component our parser is looking for, right?)

In that case I&apos;ll just revert it back to m_bytesToConsume. I don&apos;t see much difference between m_bytesToConsume or m_bytesRequested.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:204
&gt;&gt; +bool GIFImageReader::doLZW(const unsigned char* block, unsigned bytesInBlock)
&gt; 
&gt; Nit: Seems better to use size_t for byte counts instead of unsigned. (several places)

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:375
&gt;&gt; +    // Variables:
&gt; 
&gt; I&apos;m not a fan of this big comment block.  Descriptive variable names (&quot;q&quot; sucks) plus comments above variables where they&apos;re declared (as needed) are sufficient.

Okay, removing this.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:391
&gt;&gt; +    // to the next block, len is decremented accordingly.
&gt; 
&gt; Again, we don[t actually increment block-at-a-time, just individual-parsed-component at a time, right?

s/block/component/

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:486
&gt;&gt; +                // The entire global colormap is received so advance read position.
&gt; 
&gt; Nit: This comment seems unnecessary.

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:787
&gt;&gt; +                    // Not enough bytes to read the entire colormap, read it as next block.
&gt; 
&gt; Tiny nit: Word this identically to how you did the global colormap comment.

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:792
&gt;&gt; +                // There&apos;s enough bytes for the entire colormap so advance data pointer.
&gt; 
&gt; Nit: This comment seems unnecessary.

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:-897
&gt;&gt; -        m_client-&gt;decodingHalted(0);
&gt; 
&gt; You seem to have removed all the decodingHalted() calls, shouldn&apos;t you remove that function itself?  And doesn&apos;t that mean that GIFImageDecoder::m_readOffset isn&apos;t being updated anymore?  (You&apos;re now tracking that as GIFImageReader::m_bytesRead, aren&apos;t you?)

Yeah removing decodingHalted in the next patch.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:201
&gt;&gt; +        return colormap(m_globalColormapPosition, m_globalColormapSize);
&gt; 
&gt; It seems like for safety this should have some kind of check that we&apos;ve actually read the global colormap yet, as we do for the local colormap.
&gt; 
&gt; If we do this, we ought to be able to remove the sanity-check in colormap(), which means that colormap() itself can be removed and replaced by a direct call to data().

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:226
&gt;&gt; +    const unsigned char* data(unsigned dataPosition) const
&gt; 
&gt; It seems like we mostly need this because we&apos;re casting char* to unsigned char*.  If callers took a char*, they could just do &quot;m_data-&gt;data() + position&quot; directly.
&gt; 
&gt; This is perhaps a viral change, so it may not be suitable for doing in this CL, but are there real problems with changing various places that use unsigned char* to just char*?  This will eliminate some casting elsewhere too.

This function is for casting and doing the + offset. I don&apos;t want to do this offset everywhere. Yes I think returning char* might have consequences, we should do it separately in another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837818</commentid>
    <comment_count>8</comment_count>
      <attachid>189388</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2013-02-20 15:13:10 -0800</bug_when>
    <thetext>Comment on attachment 189388
Patch

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

Out of curiosity, are there tests which cover the colormap cases?

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:371
&gt; +    // If there&apos;s not enough bytes for parsing this component then return.

Nit:  there&apos;s not -&gt; there are not.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:376
&gt; +    // Beginning of each iteration dataPosition will be advanced by m_bytesToConsume to point

s/Beginning of each iteration/At the beginning of each iteration,/

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:377
&gt; +    // to the next component, len is decremented accordingly.

That&apos;s two to&apos;s.  :)

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:229
&gt; +    bool decodeInternal(unsigned dataPosition, unsigned len, WebCore::GIFImageDecoder::GIFQuery = WebCore::GIFImageDecoder::GIFFullQuery, unsigned haltAtFrame = -1);

The only caller I see of this function supplies all the parameters.  Are the defaults necessary?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837865</commentid>
    <comment_count>9</comment_count>
      <attachid>189388</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2013-02-20 15:55:55 -0800</bug_when>
    <thetext>Comment on attachment 189388
Patch

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

I can&apos;t set r+, but this seems basically OK to me.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:358
&gt; +    if (m_bytesRead &gt; m_data-&gt;size())

When can this actually happen?  Doesn&apos;t the ASSERT in setRemainingBytes() prevent this?

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:364
&gt; +bool GIFImageReader::decodeInternal(unsigned dataPosition, unsigned len, GIFImageDecoder::GIFQuery query, unsigned haltAtFrame)

I&apos;d probably change these unsigneds to size_ts as well, along with most others in this file; but perhaps that sort of change should be done separately.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:371
&gt;&gt; +    // If there&apos;s not enough bytes for parsing this component then return.
&gt; 
&gt; Nit:  there&apos;s not -&gt; there are not.

Or just remove the comment.  The code is pretty clear.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:377
&gt;&gt; +    // to the next component, len is decremented accordingly.
&gt; 
&gt; That&apos;s two to&apos;s.  :)

&quot;to point to&quot; is OK.  But &quot;, len is decremented accordingly&quot; might be better as &quot;.  len will be decremented accordingly.&quot;

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:382
&gt; +        // Eat the current component from the buffer, q keeps pointed at current component.

How about: &quot;// Mark the current component as consumed.  Note that q will remain pointed at this component until the next loop iteration.&quot;

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:466
&gt; +                    // Not enough bytes to read the entire global colormap this time so read it next.

How about: &quot;// Wait until we have enough bytes to consume the entire colormap at once.&quot; (2 places)

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:107
&gt; +    unsigned localColormapPosition; // Per-image colormap.

Similarly, this sort of thing would also ideally be a size_t.

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:172
&gt; +        , m_bytesToConsume(6) // Number of bytes for the first read.

Perhaps the comment should say why the first read needs to be 6 bytes?

&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:202
&gt; +        if (!m_isGlobalColormapDefined)

FWIW, all these could be rewritten more succinctly as something like:

    return m_isGlobalColormapDefined ? data(m_globalColormapPosition) : 0;

Note also that you could choose to store the &quot;colormap defined&quot; state in the position variable by using static_cast&lt;size_t&gt;(-1).  Or, assuming GIFs have to start with a valid header, you could use 0 as a signal value, since we couldn&apos;t have the colormap appear before the header.

I don&apos;t feel strongly about which route gets chosen.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837876</commentid>
    <comment_count>10</comment_count>
      <attachid>189388</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2013-02-20 16:06:27 -0800</bug_when>
    <thetext>Comment on attachment 189388
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:377
&gt;&gt;&gt; +    // to the next component, len is decremented accordingly.
&gt;&gt; 
&gt;&gt; That&apos;s two to&apos;s.  :)
&gt; 
&gt; &quot;to point to&quot; is OK.  But &quot;, len is decremented accordingly&quot; might be better as &quot;.  len will be decremented accordingly.&quot;

Oh, sorry, I missed the &quot;point&quot; (bad word wrap).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838586</commentid>
    <comment_count>11</comment_count>
      <attachid>189557</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-21 10:58:13 -0800</bug_when>
    <thetext>Created attachment 189557
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>838587</commentid>
    <comment_count>12</comment_count>
      <attachid>189388</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-21 10:58:28 -0800</bug_when>
    <thetext>Comment on attachment 189388
Patch

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

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:358
&gt;&gt; +    if (m_bytesRead &gt; m_data-&gt;size())
&gt; 
&gt; When can this actually happen?  Doesn&apos;t the ASSERT in setRemainingBytes() prevent this?

I&apos;ll change this to an assert.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:364
&gt;&gt; +bool GIFImageReader::decodeInternal(unsigned dataPosition, unsigned len, GIFImageDecoder::GIFQuery query, unsigned haltAtFrame)
&gt; 
&gt; I&apos;d probably change these unsigneds to size_ts as well, along with most others in this file; but perhaps that sort of change should be done separately.

Done. I&apos;ve scanned the code to use size_t as much as possible.

&gt;&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:371
&gt;&gt;&gt; +    // If there&apos;s not enough bytes for parsing this component then return.
&gt;&gt; 
&gt;&gt; Nit:  there&apos;s not -&gt; there are not.
&gt; 
&gt; Or just remove the comment.  The code is pretty clear.

Removed.

&gt;&gt;&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:377
&gt;&gt;&gt;&gt; +    // to the next component, len is decremented accordingly.
&gt;&gt;&gt; 
&gt;&gt;&gt; That&apos;s two to&apos;s.  :)
&gt;&gt; 
&gt;&gt; &quot;to point to&quot; is OK.  But &quot;, len is decremented accordingly&quot; might be better as &quot;.  len will be decremented accordingly.&quot;
&gt; 
&gt; Oh, sorry, I missed the &quot;point&quot; (bad word wrap).

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:382
&gt;&gt; +        // Eat the current component from the buffer, q keeps pointed at current component.
&gt; 
&gt; How about: &quot;// Mark the current component as consumed.  Note that q will remain pointed at this component until the next loop iteration.&quot;

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.cpp:466
&gt;&gt; +                    // Not enough bytes to read the entire global colormap this time so read it next.
&gt; 
&gt; How about: &quot;// Wait until we have enough bytes to consume the entire colormap at once.&quot; (2 places)

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:107
&gt;&gt; +    unsigned localColormapPosition; // Per-image colormap.
&gt; 
&gt; Similarly, this sort of thing would also ideally be a size_t.

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:172
&gt;&gt; +        , m_bytesToConsume(6) // Number of bytes for the first read.
&gt; 
&gt; Perhaps the comment should say why the first read needs to be 6 bytes?

Done.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:202
&gt;&gt; +        if (!m_isGlobalColormapDefined)
&gt; 
&gt; FWIW, all these could be rewritten more succinctly as something like:
&gt; 
&gt;     return m_isGlobalColormapDefined ? data(m_globalColormapPosition) : 0;
&gt; 
&gt; Note also that you could choose to store the &quot;colormap defined&quot; state in the position variable by using static_cast&lt;size_t&gt;(-1).  Or, assuming GIFs have to start with a valid header, you could use 0 as a signal value, since we couldn&apos;t have the colormap appear before the header.
&gt; 
&gt; I don&apos;t feel strongly about which route gets chosen.

I would like to stick with have a position and a boolean.

The reason is boolean value has a dual meaning of the colormap being defined and fully received. Using one variable we&apos;ll have to change the parsing logic if colormap is partially received.

&gt;&gt; Source/WebCore/platform/image-decoders/gif/GIFImageReader.h:229
&gt;&gt; +    bool decodeInternal(unsigned dataPosition, unsigned len, WebCore::GIFImageDecoder::GIFQuery = WebCore::GIFImageDecoder::GIFFullQuery, unsigned haltAtFrame = -1);
&gt; 
&gt; The only caller I see of this function supplies all the parameters.  Are the defaults necessary?

Good one! I find those defaults distracting, will remove them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840417</commentid>
    <comment_count>13</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-23 10:54:10 -0800</bug_when>
    <thetext>ping for review. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840941</commentid>
    <comment_count>14</comment_count>
      <attachid>189557</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2013-02-25 07:13:24 -0800</bug_when>
    <thetext>Comment on attachment 189557
Patch

r=me (with Peter&apos;s LG on the previous patch).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840952</commentid>
    <comment_count>15</comment_count>
      <attachid>189557</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-25 07:24:56 -0800</bug_when>
    <thetext>Comment on attachment 189557
Patch

Rejecting attachment 189557 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=gce-cq-03&apos;, &apos;validate-changelog&apos;, &apos;--non-interactive&apos;, 189557, &apos;--port=chromium-xvfb&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue

/mnt/git/webkit-commit-queue/Source/WebKit/chromium/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://queues.webkit.org/results/16750271</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>840966</commentid>
    <comment_count>16</comment_count>
      <attachid>190059</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-25 07:45:15 -0800</bug_when>
    <thetext>Created attachment 190059
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841026</commentid>
    <comment_count>17</comment_count>
      <attachid>190059</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-25 09:29:03 -0800</bug_when>
    <thetext>Comment on attachment 190059
Patch for landing

Clearing flags on attachment: 190059

Committed r143936: &lt;http://trac.webkit.org/changeset/143936&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841027</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-25 09:29:07 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841243</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-25 13:21:32 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 110789</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841413</commentid>
    <comment_count>20</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-25 16:34:41 -0800</bug_when>
    <thetext>Test failure because Android failed to open GIF test files. :(

Will submit another patch that disables test on Android.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841430</commentid>
    <comment_count>21</comment_count>
      <attachid>190158</attachid>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-25 16:58:44 -0800</bug_when>
    <thetext>Created attachment 190158
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>841431</commentid>
    <comment_count>22</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-25 17:01:27 -0800</bug_when>
    <thetext>This should fix Android, data files should be loaded properly this time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842224</commentid>
    <comment_count>23</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-26 11:38:42 -0800</bug_when>
    <thetext>PLease have a look. This is a reland of the same patch with fix to use Platform::current()-&gt;unitTestSupport()-&gt;webKitRootDir() to get the directory for data files. This should fix unit test failures on Android.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842237</commentid>
    <comment_count>24</comment_count>
      <attachid>190158</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2013-02-26 11:51:02 -0800</bug_when>
    <thetext>Comment on attachment 190158
Patch

OK.  r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>842323</commentid>
    <comment_count>25</comment_count>
    <who name="Hin-Chung Lam">hclam</who>
    <bug_when>2013-02-26 13:41:15 -0800</bug_when>
    <thetext>Committed r144100: &lt;http://trac.webkit.org/changeset/144100&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189326</attachid>
            <date>2013-02-20 08:32:21 -0800</date>
            <delta_ts>2013-02-20 08:43:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109662-20130220082843.patch</filename>
            <type>text/plain</type>
            <size>44649</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyODUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjc1Y2IzYjYxMzgyYTk1
MGY1MTNlYzZmMzE3MTgwNjZmMmRhNWVjZC4uMWRhZTk1YTg2NzQxODk2YzUxM2E3N2M3OTU3OWQy
ODVmNTg0ZGEwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEzLTAyLTIwICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgdG8g
cmVhZCBmcm9tIHNvdXJjZSBkYXRhIGRpcmVjdGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk2NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBwYXRjaCB0byBpbXByb3Zl
IEdJRiBpbWFnZSBkZWNvZGluZy4KKworICAgICAgICBHSUZJbWFnZVJlYWRlciBoYXMgYW4gaW50
ZXJuYWwgMjU2IGJ5dGVzIGJ1ZmZlciB0byBzYXZpbmcgaW5jb21pbmcKKyAgICAgICAgYnl0ZXMu
IFRoaXMgbWVjaGFuaXNtIGlzIG91dC1kYXRlZCBiZWNhdXNlIFdlYktpdCBob2xkcyB0aGUgZW50
aXJlCisgICAgICAgIGZpbGUgaW4gbWVtb3J5IGFuZCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGhv
bGQgZGF0YSBpbiBhbiBpbnRlcm1lZGlhdGUKKyAgICAgICAgYnVmZmVyLgorCisgICAgICAgIFRo
aXMgaXMgYWxzbyBhIGJsb2NrZXIgZm9yIGxhdGVyIHdvcmsgdG8gcGFyc2UgYW5kIGRlY29kZSBH
SUYKKyAgICAgICAgaW5jcmVtZW50YWxseS4KKworICAgICAgICBUaGlzIGNoYW5nZSByZW1vdmVk
IHRoZSBpbXRlcm1lZGlhdGUgJ2hvbGQnIGJ1ZmZlciBhbmQgdXNlcyBhbiBpbmRleAorICAgICAg
ICBmb3IgZGF0YSBwb3NpdGlvbiB0byBrZWVwIHRyYWNrIG9mIHBhcnNpbmcgb2YgdGhlIEdJRiBm
aWxlLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGlzIHRlc3RlZCBieToKKworICAgICAgICBMYXlv
dXQgdGVzdHMKKyAgICAgICAgQWxsIHRlc3RzIHBhc3NlZCB1bmRlciBmYXN0L2ltYWdlcy4KKwor
ICAgICAgICBVbml0IHRlc3RzCisgICAgICAgIEFkZGVkIEdJRkltYWdlRGVjb2RlclRlc3QgZm9y
IENocm9taXVtLgorCisgICAgICAgIExvY2FsIHRlc3RpbmcKKyAgICAgICAgSSB0ZXN0ZWQgdGhp
cyBpbXBsZW1lbnRhdGlvbiBhZ2FpbnN0IGEgc2V0IG9mIDUwayBHSUYgaW1hZ2VzIGFuZAorICAg
ICAgICB0aGVyZSdzIG5vIGNyYXNoZXMgYW5kIHByb2R1Y2VzIGJpdC1leGFjdCByZXN1bHRzIGFz
IHByZXZpb3VzIGNvZGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYv
R0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6
c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmRlY29kZSk6CisgICAgICAgICogcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcDoKKyAgICAgICAgKEdJ
RkltYWdlUmVhZGVyOjpkb0xaVyk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlKToK
KyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbCk6CisgICAgICAgIChHSUZJ
bWFnZVJlYWRlcjo6c2V0UmVtYWluaW5nQnl0ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0
KToKKyAgICAgICAgKEdJRkZyYW1lQ29udGV4dDo6R0lGRnJhbWVDb250ZXh0KToKKyAgICAgICAg
KEdJRkZyYW1lQ29udGV4dDo6fkdJRkZyYW1lQ29udGV4dCk6CisgICAgICAgIChHSUZJbWFnZVJl
YWRlcjo6R0lGSW1hZ2VSZWFkZXIpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6On5HSUZJbWFn
ZVJlYWRlcik6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6c2V0RGF0YSk6CisgICAgICAgIChH
SUZJbWFnZVJlYWRlcik6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6Z2xvYmFsQ29sb3JtYXAp
OgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmxvY2FsQ29sb3JtYXApOgorICAgICAgICAoR0lG
SW1hZ2VSZWFkZXI6OmxvY2FsQ29sb3JtYXBTaXplKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVy
OjpkYXRhKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpjb2xvcm1hcCk6CisKIDIwMTMtMDIt
MTMgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtWOF0g
R2VuZXJhdGUgd3JhcHBlciBtZXRob2RzIGZvciBjdXN0b20gbWV0aG9kcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCBhMWFmYWZiZmU2OTdmY2JjZGI0ODlhNDJhM2RhNzBiMGVlMTA4MzFi
Li5jYmNmYTA4OTUzYWZiZDU5NWFlNDQ1ZjhlZmEzZWQyMDNmOTI3NTU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEzLTAyLTIwICBBbHBoYSBMYW0gIDxo
Y2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgdG8gcmVhZCBmcm9t
IHNvdXJjZSBkYXRhIGRpcmVjdGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDk2NjIKKworICAgICAgICBBZGRlZCB0aGUgZm9sbG93aW5nIHVuaXQg
dGVzdHMgdG8gdGVzdCBuZXcgbG9naWMgaW4gR0lGSW1hZ2VEZWNvZGVyOgorCisgICAgICAgIEdJ
RkltYWdlRGVjb2RlclRlc3QuZGVjb2RlVHdvRnJhbWVzCisgICAgICAgIFRlc3QgdGhhdCBpdCBj
YW4gZGVjb2RlIGEgbXVsdGktZnJhbWUgR0lGIGltYWdlIGNvcnJlY3RseS4KKworICAgICAgICBH
SUZJbWFnZURlY29kZXJUZXN0LnBhcnNlQW5kRGVjb2RlCisgICAgICAgIEZpcnN0IHBlcmZvcm0g
YSBwYXJzZSBvcGVyYXRpb24gYW5kIHRoZW4gYSBkZWNvZGUgb3BlcmF0aW9uLiBFeHBlY3QKKyAg
ICAgICAgdGhhdCBwYXJzZSBhbmQgZGVjb2RlIG9wZXJhdGVzIGNvcnJlY3RseS4KKworICAgICAg
ICBHSUZJbWFnZURlY29kZXJUZXN0LnBhcnNlQnl0ZUJ5Qnl0ZQorICAgICAgICBUZXN0IHRoYXQg
bXVsdGktZnJhbWUgR0lGIGltYWdlIGNhbiBiZSBwYXJzZWQgY29ycmVjdGx5IGJ5dGUgYnkgYnl0
ZS4KKworICAgICAgICBHSUZJbWFnZURlY29kZXJUZXN0LnBhcnNlQW5kRGVjb2RlQnl0ZUJ5Qnl0
ZQorICAgICAgICBSdW4gYSBsb29wIHRvIGZlZWQgZGVjb2RlciBieXRlIGJ5IGJ5dGUsIHBlcmZv
cm0gYSBwYXJzZSBhbmQgdGhlbgorICAgICAgICBkZWNvZGUgb3BlcmF0aW9uIGFuZCBtYWtlIHN1
cmUgZnJhbWVzIGFyZSBkZWNvZGVkIGNvcnJlY3RseS4KKworICAgICAgICBHSUZJbWFnZURlY29k
ZXJUZXN0LmJyb2tlblNlY29uZEZyYW1lCisgICAgICAgIERlY29kZSBhIEdJRiBpbWFnZSB3aXRo
IHNlY29uZCBmcmFtZSBicm9rZW4uIEV4cGVjdCB0aGF0IHRoZSBmaXJzdAorICAgICAgICBmcmFt
ZSBjYW4gYmUgZGVjb2RlZCBjb3JyZWN0bHkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAg
ICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0dJRkltYWdlRGVjb2RlclRlc3Qu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OnJlYWRGaWxl
KToKKyAgICAgICAgKFdlYktpdDo6VEVTVCk6CisgICAgICAgICogdGVzdHMvZGF0YS9icm9rZW4u
Z2lmOiBBZGRlZC4KKwogMjAxMy0wMi0xMyAgTWF4IFZ1am92aWMgIDxtdnVqb3ZpY0BhZG9iZS5j
b20+CiAKICAgICAgICAgW0NTUyBGaWx0ZXJzXSBSZWZhY3RvciBmaWx0ZXIgb3V0c2V0cyBpbnRv
IGEgY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKaW5kZXggMGNiMjI4ODVjZWIzZDZi
MTZiMjM1ZjgxOWI5OGEyNWI5M2JhZmQ4Yi4uMDFhNDZjYjI0YzAxYjM2NGE3MDViMTUxYTZmMTJh
NDU2NTdiOGE2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKQEAgLTUwLDYgKzUwLDkg
QEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29s
IGFsbERhdGFSZWNlaXZlZCkKICAgICBpZiAoZmFpbGVkKCkpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIGlmIChtX3JlYWRlcikKKyAgICAgICAgbV9yZWFkZXItPnNldERhdGEoZGF0YSk7CisKICAg
ICBJbWFnZURlY29kZXI6OnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKIAogICAgIC8v
IFdlIG5lZWQgdG8gcmVzY2FuIHRoZSBmcmFtZSBjb3VudCwgYXMgdGhlIG5ldyBkYXRhIG1heSBo
YXZlIGNoYW5nZWQgaXQuCkBAIC04NSw3ICs4OCw4IEBAIHNpemVfdCBHSUZJbWFnZURlY29kZXI6
OmZyYW1lQ291bnQoKQogICAgICAgICAvLyBhbGwgdGhlIGRhdGEuICBOb3RlIHRoYXQgdGhpcyBp
cyBubyB3b3JzZSB0aGFuIHdoYXQgSW1hZ2VJTyBkb2VzIG9uCiAgICAgICAgIC8vIE1hYyByaWdo
dCBub3cgKGl0IGFsc28gY3Jhd2xzIGFsbCB0aGUgZGF0YSBhZ2FpbikuCiAgICAgICAgIEdJRklt
YWdlUmVhZGVyIHJlYWRlcigwKTsKLSAgICAgICAgcmVhZGVyLnJlYWQoKGNvbnN0IHVuc2lnbmVk
IGNoYXIqKW1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSwgR0lGRnJhbWVDb3VudFF1ZXJ5
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLTEpKTsKKyAgICAgICAgcmVhZGVyLnNldERhdGEobV9k
YXRhKTsKKyAgICAgICAgcmVhZGVyLmRlY29kZShHSUZGcmFtZUNvdW50UXVlcnksIHN0YXRpY19j
YXN0PHVuc2lnbmVkPigtMSkpOwogICAgICAgICBtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JG
cmFtZUNvdW50ID0gdHJ1ZTsKICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZShyZWFk
ZXIuaW1hZ2VzQ291bnQoKSk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVhZGVyLmlt
YWdlc0NvdW50KCk7ICsraSkKQEAgLTIxNiw4ICsyMjAsOCBAQCBib29sIEdJRkltYWdlRGVjb2Rl
cjo6aGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgY2hhciogcm93
QnVmZgogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvbG9yTWFwOwogICAgIHVuc2lnbmVkIGNv
bG9yTWFwU2l6ZTsKICAgICBpZiAoZnJhbWVDb250ZXh0LT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVk
KSB7Ci0gICAgICAgIGNvbG9yTWFwID0gZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFwOwotICAg
ICAgICBjb2xvck1hcFNpemUgPSAodW5zaWduZWQpZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFw
U2l6ZTsKKyAgICAgICAgY29sb3JNYXAgPSBtX3JlYWRlci0+bG9jYWxDb2xvcm1hcChmcmFtZUNv
bnRleHQpOworICAgICAgICBjb2xvck1hcFNpemUgPSBtX3JlYWRlci0+bG9jYWxDb2xvcm1hcFNp
emUoZnJhbWVDb250ZXh0KTsKICAgICB9IGVsc2UgewogICAgICAgICBjb2xvck1hcCA9IG1fcmVh
ZGVyLT5nbG9iYWxDb2xvcm1hcCgpOwogICAgICAgICBjb2xvck1hcFNpemUgPSBtX3JlYWRlci0+
Z2xvYmFsQ29sb3JtYXBTaXplKCk7CkBAIC0zMTksMTIgKzMyMywxNCBAQCB2b2lkIEdJRkltYWdl
RGVjb2Rlcjo6ZGVjb2RlKHVuc2lnbmVkIGhhbHRBdEZyYW1lLCBHSUZRdWVyeSBxdWVyeSkKICAg
ICBpZiAoZmFpbGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9yZWFkZXIpCisg
ICAgaWYgKCFtX3JlYWRlcikgewogICAgICAgICBtX3JlYWRlciA9IGFkb3B0UHRyKG5ldyBHSUZJ
bWFnZVJlYWRlcih0aGlzKSk7CisgICAgICAgIG1fcmVhZGVyLT5zZXREYXRhKG1fZGF0YSk7Cisg
ICAgfQogCiAgICAgLy8gSWYgd2UgY291bGRuJ3QgZGVjb2RlIHRoZSBpbWFnZSBidXQgd2UndmUg
cmVjZWl2ZWQgYWxsIHRoZSBkYXRhLCBkZWNvZGluZwogICAgIC8vIGhhcyBmYWlsZWQuCi0gICAg
aWYgKCFtX3JlYWRlci0+cmVhZCgoY29uc3QgdW5zaWduZWQgY2hhciopbV9kYXRhLT5kYXRhKCkg
KyBtX3JlYWRPZmZzZXQsIG1fZGF0YS0+c2l6ZSgpIC0gbV9yZWFkT2Zmc2V0LCBxdWVyeSwgaGFs
dEF0RnJhbWUpICYmIGlzQWxsRGF0YVJlY2VpdmVkKCkpCisgICAgaWYgKCFtX3JlYWRlci0+ZGVj
b2RlKHF1ZXJ5LCBoYWx0QXRGcmFtZSkgJiYgaXNBbGxEYXRhUmVjZWl2ZWQoKSkKICAgICAgICAg
c2V0RmFpbGVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCmluZGV4IDY5OWQzYzQ3
ZmI0NGFmMmM4MjRmYTU5YjAzYjQyZjUxMDY2MGVlZmIuLmMxMGUyODkxYzA2NTIyZmY2YzNjYzcy
NjhjNWVmODRhNmUyMDAyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcApAQCAtOTAsNyAr
OTAsNyBAQCB1c2luZyBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI7CiAvLyBUaGlzIGJ1ZmZlciBp
cyBvbmx5IG5lZWRlZCB0byBjb3B5IGxlZnQtb3ZlciBkYXRhIGZyb20gb25lIEdpZldyaXRlIGNh
bGwgdG8gdGhlIG5leHQKICNkZWZpbmUgR0VUTihuLCBzKSBcCiAgICAgZG8geyBcCi0gICAgICAg
IG1fYnl0ZXNUb0NvbnN1bWUgPSAobik7IFwKKyAgICAgICAgbV9ieXRlc0luTmV4dEJsb2NrID0g
KG4pOyBcCiAgICAgICAgIG1fc3RhdGUgPSAocyk7IFwKICAgICB9IHdoaWxlICgwKQogCkBAIC0y
MDEsNyArMjAxLDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6b3V0cHV0Um93KCkKIH0KIAogLy8g
UGVyZm9ybSBMZW1wZWwtWml2LVdlbGNoIGRlY29kaW5nLgotYm9vbCBHSUZJbWFnZVJlYWRlcjo6
ZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciAqcSkKK2Jvb2wgR0lGSW1hZ2VSZWFkZXI6OmRvTFpX
KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJsb2NrLCB1bnNpZ25lZCBieXRlc0luQmxvY2spCiB7CiAg
ICAgaWYgKCFtX2ZyYW1lQ29udGV4dCkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMTUsNyAr
MjE1LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciAq
cSkKICAgICAvLyBiYWNrIGludG8gdGhlIEdJRiBkZWNvZGVyIHN0cnVjdHVyZSB3aGVuIHdlIGV4
aXQuCiAgICAgaW50IGF2YWlsID0gbV9mcmFtZUNvbnRleHQtPmF2YWlsOwogICAgIGludCBiaXRz
ID0gbV9mcmFtZUNvbnRleHQtPmJpdHM7Ci0gICAgaW50IGNudCA9IG1fY291bnQ7CisgICAgaW50
IGNudCA9IGJ5dGVzSW5CbG9jazsKICAgICBpbnQgY29kZXNpemUgPSBtX2ZyYW1lQ29udGV4dC0+
Y29kZXNpemU7CiAgICAgaW50IGNvZGVtYXNrID0gbV9mcmFtZUNvbnRleHQtPmNvZGVtYXNrOwog
ICAgIGludCBvbGRjb2RlID0gbV9mcmFtZUNvbnRleHQtPm9sZGNvZGU7CkBAIC0yNDksNyArMjQ5
LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciAqcSkK
ICAgICAgICAgICAgIGdvdG8gRU5EOyBcCiAgICAgfSB3aGlsZSAoMCkKIAotICAgIGZvciAoY2gg
PSBxOyBjbnQtLSA+IDA7IGNoKyspIHsKKyAgICBmb3IgKGNoID0gYmxvY2s7IGNudC0tID4gMDsg
Y2grKykgewogICAgICAgICAvLyBGZWVkIHRoZSBuZXh0IGJ5dGUgaW50byB0aGUgZGVjb2Rlcidz
IDMyLWJpdCBpbnB1dCBidWZmZXIuCiAgICAgICAgIGRhdHVtICs9ICgoaW50KSAqY2gpIDw8IGJp
dHM7CiAgICAgICAgIGJpdHMgKz0gODsKQEAgLTM0NCw3ICszNDQsNiBAQCBFTkQ6CiAgICAgbV9m
cmFtZUNvbnRleHQtPmJpdHMgPSBiaXRzOwogICAgIG1fZnJhbWVDb250ZXh0LT5jb2Rlc2l6ZSA9
IGNvZGVzaXplOwogICAgIG1fZnJhbWVDb250ZXh0LT5jb2RlbWFzayA9IGNvZGVtYXNrOwotICAg
IG1fY291bnQgPSBjbnQ7CiAgICAgbV9mcmFtZUNvbnRleHQtPm9sZGNvZGUgPSBvbGRjb2RlOwog
ICAgIG1fZnJhbWVDb250ZXh0LT5maXJzdGNoYXIgPSBmaXJzdGNoYXI7CiAgICAgbV9mcmFtZUNv
bnRleHQtPmRhdHVtID0gZGF0dW07CkBAIC0zNTQsNzUgKzM1Myw2MCBAQCBFTkQ6CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK2Jvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZShHSUZJbWFnZURlY29k
ZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCBpbnQgaGFsdEF0RnJhbWUpCit7CisgICAgaWYgKG1fYnl0ZXNS
ZWFkID4gbV9kYXRhLT5zaXplKCkpCisgICAgICAgIHJldHVybiBtX2NsaWVudC0+c2V0RmFpbGVk
KCk7CisgICAgcmV0dXJuIGRlY29kZUludGVybmFsKG1fYnl0ZXNSZWFkLCBtX2RhdGEtPnNpemUo
KSAtIG1fYnl0ZXNSZWFkLCBxdWVyeSwgaGFsdEF0RnJhbWUpOworfQogCiAvLyBQcm9jZXNzIGRh
dGEgYXJyaXZpbmcgZnJvbSB0aGUgc3RyZWFtIGZvciB0aGUgZ2lmIGRlY29kZXIuCi1ib29sIEdJ
RkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVu
LCBHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSkK
K2Jvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVybmFsKHVuc2lnbmVkIGRhdGFQb3NpdGlv
biwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25l
ZCBoYWx0QXRGcmFtZSkKIHsKICAgICBpZiAoIWxlbikgewogICAgICAgICAvLyBObyBuZXcgZGF0
YSBoYXMgY29tZSBpbiBzaW5jZSB0aGUgbGFzdCBjYWxsLCBqdXN0IGlnbm9yZSB0aGlzIGNhbGwu
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg
KnEgPSBidWY7Ci0KLSAgICAvLyBBZGQgd2hhdCB3ZSBoYXZlIHNvIGZhciB0byB0aGUgYmxvY2su
Ci0gICAgLy8gSWYgcHJldmlvdXMgY2FsbCB0byBtZSBsZWZ0IHNvbWV0aGluZyBpbiB0aGUgaG9s
ZCBmaXJzdCBjb21wbGV0ZSBjdXJyZW50IGJsb2NrCi0gICAgLy8gb3IgaWYgd2UgYXJlIGZpbGxp
bmcgdGhlIGNvbG9ybWFwcywgZmlyc3QgY29tcGxldGUgdGhlIGNvbG9ybWFwLgotICAgIHVuc2ln
bmVkIGNoYXIqIHAgPSAwOwotICAgIGlmIChtX3N0YXRlID09IEdJRkdsb2JhbENvbG9ybWFwKQot
ICAgICAgICBwID0gbV9nbG9iYWxDb2xvcm1hcDsKLSAgICBlbHNlIGlmIChtX3N0YXRlID09IEdJ
RkltYWdlQ29sb3JtYXApCi0gICAgICAgIHAgPSBtX2ZyYW1lQ29udGV4dCA/IG1fZnJhbWVDb250
ZXh0LT5sb2NhbENvbG9ybWFwIDogMDsKLSAgICBlbHNlIGlmIChtX2J5dGVzSW5Ib2xkKQotICAg
ICAgICBwID0gbV9ob2xkOwotICAgIGVsc2UKLSAgICAgICAgcCA9IDA7Ci0KLSAgICBpZiAocCB8
fCAobV9zdGF0ZSA9PSBHSUZHbG9iYWxDb2xvcm1hcCkgfHwgKG1fc3RhdGUgPT0gR0lGSW1hZ2VD
b2xvcm1hcCkpIHsKLSAgICAgICAgLy8gQWRkIHdoYXQgd2UgaGF2ZSBzb2ZhciB0byB0aGUgYmxv
Y2sKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbGVuIDwgbV9ieXRlc1RvQ29uc3VtZSA/IGxl
biA6IG1fYnl0ZXNUb0NvbnN1bWU7Ci0gICAgICAgIGlmIChwKQotICAgICAgICAgICAgbWVtY3B5
KHAgKyBtX2J5dGVzSW5Ib2xkLCBidWYsIGxlbmd0aCk7Ci0KLSAgICAgICAgaWYgKGxlbmd0aCA8
IG1fYnl0ZXNUb0NvbnN1bWUpIHsKLSAgICAgICAgICAgIC8vIE5vdCBlbm91Z2ggaW4gJ2J1Zicg
dG8gY29tcGxldGUgY3VycmVudCBibG9jaywgZ2V0IG1vcmUKLSAgICAgICAgICAgIG1fYnl0ZXNJ
bkhvbGQgKz0gbGVuZ3RoOwotICAgICAgICAgICAgbV9ieXRlc1RvQ29uc3VtZSAtPSBsZW5ndGg7
Ci0gICAgICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICAgICAgbV9jbGllbnQtPmRl
Y29kaW5nSGFsdGVkKDApOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gUmVzZXQgaG9sZCBidWZmZXIgY291bnQKLSAgICAgICAgbV9ieXRlc0luSG9s
ZCA9IDA7CisgICAgLy8gSWYgdGhlcmUncyBub3QgZW5vdWdoIGJ5dGVzIGZvciB0aGlzIGJsb2Nr
IHRoZW4gcmV0dXJuLgorICAgIGlmIChsZW4gPCBtX2J5dGVzSW5OZXh0QmxvY2spCisgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICAvLyBQb2ludCAncScgdG8gY29tcGxldGUgYmxvY2sg
aW4gaG9sZCAob3IgaW4gY29sb3JtYXApCi0gICAgICAgIHEgPSBwOwotICAgIH0KKyAgICAvLyBW
YXJpYWJsZXM6CisgICAgLy8gY3VycmVudEJsb2NrCisgICAgLy8gICBQb2ludGVyIHRvIHRoZSBj
dXJyZW50IGJsb2NrLgorICAgIC8vIAorICAgIC8vIG1fYnl0ZXNJbk5leHRCbG9jaworICAgIC8v
ICAgTnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBuZXh0IGJsb2NrLiBJdCdzIHZhbHVlIGlzIHVwZGF0
ZWQgaW4gZWFjaCBpdGVyYXRpb24gYWZ0ZXIKKyAgICAvLyAgIHByb2Nlc3NpbmcgdGhlIGN1cnJl
bnQgYmxvY2suCisgICAgLy8KKyAgICAvLyBkYXRhUG9zaXRpb24KKyAgICAvLyAgIEluZGV4IHRv
IHRoZSBmaXJzdCBieXRlIGluICdtX2RhdGEnIGZvciB0aGUgY3VycmVudCBibG9jay4KKyAgICAv
LworICAgIC8vIGxlbgorICAgIC8vICAgTnVtYmVyIG9mIGJ5dGVzIGxlZnQgaW4gaW5wdXQgYnVm
ZmVyIGZyb20gcG9zaXRpb24gJ2RhdGFQb3NpdGlvbicuCisKKyAgICAvLyBUaGlzIGxvb3AgcmVh
ZHMgYXMgbWFueSBibG9ja3MgZnJvbSB8bV9kYXRhfCBhcyBwb3NzaWJsZS4KKyAgICAvLyBCZWdp
bm5pbmcgb2YgZWFjaCBpdGVyYXRpb24gZGF0YVBvc2l0aW9uIHdpbGwgYmUgYWR2YW5jZWQgbV9i
eXRlc0luTmV4dEJsb2NrIHRvIHBvaW50CisgICAgLy8gdG8gdGhlIG5leHQgYmxvY2ssIGxlbiBp
cyBkZWNyZW1lbnRlZCBhY2NvcmRpbmdseS4KKyAgICB3aGlsZSAobGVuID49IG1fYnl0ZXNJbk5l
eHRCbG9jaykgeworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBjdXJyZW50QmxvY2sgPSBk
YXRhKGRhdGFQb3NpdGlvbik7CiAKLSAgICAvLyBJbnZhcmlhbnQ6Ci0gICAgLy8gICAgJ3EnIGlz
IHN0YXJ0IG9mIGN1cnJlbnQgdG8gYmUgcHJvY2Vzc2VkIGJsb2NrIChob2xkLCBjb2xvcm1hcCBv
ciBidWYpCi0gICAgLy8gICAgJ21fYnl0ZXNUb0NvbnN1bWUnIGlzIG51bWJlciBvZiBieXRlcyB0
byBjb25zdW1lIGZyb20gJ2J1ZicKLSAgICAvLyAgICAnYnVmJyBwb2ludHMgdG8gdGhlIGJ5dGVz
IHRvIGJlIGNvbnN1bWVkIGZyb20gdGhlIGlucHV0IGJ1ZmZlcgotICAgIC8vICAgICdsZW4nIGlz
IG51bWJlciBvZiBieXRlcyBsZWZ0IGluIGlucHV0IGJ1ZmZlciBmcm9tIHBvc2l0aW9uICdidWYn
LgotICAgIC8vICAgIEF0IGVudHJhbmNlIG9mIHRoZSBmb3IgbG9vcCB3aWxsICdidWYnIHdpbGwg
YmUgbW92ZWQgJ21fYnl0ZXNUb0NvbnN1bWUnCi0gICAgLy8gICAgdG8gcG9pbnQgdG8gbmV4dCBi
dWZmZXIsICdsZW4nIGlzIGFkanVzdGVkIGFjY29yZGluZ2x5LgotICAgIC8vICAgIFNvIHRoYXQg
bmV4dCByb3VuZCBpbiBmb3IgbG9vcCwgcSBnZXRzIHBvaW50ZWQgdG8gdGhlIG5leHQgYnVmZmVy
LgotICAgIGZvciAoO2xlbiA+PSBtX2J5dGVzVG9Db25zdW1lOyBxID0gYnVmKSB7CiAgICAgICAg
IC8vIEVhdCB0aGUgY3VycmVudCBibG9jayBmcm9tIHRoZSBidWZmZXIsIHEga2VlcHMgcG9pbnRl
ZCBhdCBjdXJyZW50IGJsb2NrLgotICAgICAgICBidWYgKz0gbV9ieXRlc1RvQ29uc3VtZTsKLSAg
ICAgICAgbGVuIC09IG1fYnl0ZXNUb0NvbnN1bWU7CisgICAgICAgIGRhdGFQb3NpdGlvbiArPSBt
X2J5dGVzSW5OZXh0QmxvY2s7CisgICAgICAgIGxlbiAtPSBtX2J5dGVzSW5OZXh0QmxvY2s7CiAK
ICAgICAgICAgc3dpdGNoIChtX3N0YXRlKSB7CiAgICAgICAgIGNhc2UgR0lGTFpXOgotICAgICAg
ICAgICAgaWYgKCFkb0xaVyhxKSkKKyAgICAgICAgICAgIC8vIG1fYnl0ZXNJbk5leHRCbG9jayBp
cyB0aGUgY3VycmVudCBibG9jayBzaXplIGJlY2F1c2UgaXQgaGFzbid0IGJlZW4gdXBkYXRlZC4K
KyAgICAgICAgICAgIGlmICghZG9MWlcoY3VycmVudEJsb2NrLCBtX2J5dGVzSW5OZXh0QmxvY2sp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gSWYgZG9MWlcoKSBlbmNvdW50ZXJl
ZCBhbiBlcnJvciwgaXQgaGFzIGFscmVhZHkgY2FsbGVkIG1fY2xpZW50LT5zZXRGYWlsZWQoKS4K
ICAgICAgICAgICAgIEdFVE4oMSwgR0lGU3ViQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAK
ICAgICAgICAgY2FzZSBHSUZMWldTdGFydDogewogICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSBM
WlcgcGFyc2VyL2RlY29kZXIuCi0gICAgICAgICAgICBpbnQgZGF0YXNpemUgPSAqcTsKKyAgICAg
ICAgICAgIGludCBkYXRhc2l6ZSA9ICpjdXJyZW50QmxvY2s7CiAKICAgICAgICAgICAgIC8vIFNp
bmNlIHdlIHVzZSBhIGNvZGVzaXplIG9mIDEgbW9yZSB0aGFuIHRoZSBkYXRhc2l6ZSwgd2UgbmVl
ZCB0byBlbnN1cmUKICAgICAgICAgICAgIC8vIHRoYXQgb3VyIGRhdGFzaXplIGlzIHN0cmljdGx5
IGxlc3MgdGhhbiB0aGUgTUFYX0xaV19CSVRTIHZhbHVlICgxMikuCkBAIC00NjIsOSArNDQ2LDkg
QEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVu
c2lnbmVkIGxlbiwgR0lGSW1hZ2VEZWNvZGUKIAogICAgICAgICBjYXNlIEdJRlR5cGU6IHsKICAg
ICAgICAgICAgIC8vIEFsbCBHSUYgZmlsZXMgYmVnaW4gd2l0aCAiR0lGODdhIiBvciAiR0lGODlh
Ii4KLSAgICAgICAgICAgIGlmICghc3RybmNtcCgoY2hhciopcSwgIkdJRjg5YSIsIDYpKQorICAg
ICAgICAgICAgaWYgKCFzdHJuY21wKChjaGFyKiljdXJyZW50QmxvY2ssICJHSUY4OWEiLCA2KSkK
ICAgICAgICAgICAgICAgICBtX3ZlcnNpb24gPSA4OTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCFz
dHJuY21wKChjaGFyKilxLCAiR0lGODdhIiwgNikpCisgICAgICAgICAgICBlbHNlIGlmICghc3Ry
bmNtcCgoY2hhciopY3VycmVudEJsb2NrLCAiR0lGODdhIiwgNikpCiAgICAgICAgICAgICAgICAg
bV92ZXJzaW9uID0gODc7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJu
IG1fY2xpZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDogZmFsc2U7CkBAIC00NzYsNTggKzQ2
MCw1NSBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1
ZiwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURlY29kZQogICAgICAgICAgICAgLy8gVGhpcyBpcyB0
aGUgaGVpZ2h0IGFuZCB3aWR0aCBvZiB0aGUgInNjcmVlbiIgb3IgZnJhbWUgaW50byB3aGljaCBp
bWFnZXMgYXJlIHJlbmRlcmVkLiBUaGUKICAgICAgICAgICAgIC8vIGluZGl2aWR1YWwgaW1hZ2Vz
IGNhbiBiZSBzbWFsbGVyIHRoYW4gdGhlIHNjcmVlbiBzaXplIGFuZCBsb2NhdGVkIHdpdGggYW4g
b3JpZ2luIGFueXdoZXJlCiAgICAgICAgICAgICAvLyB3aXRoaW4gdGhlIHNjcmVlbi4KLSAgICAg
ICAgICAgIG1fc2NyZWVuV2lkdGggPSBHRVRJTlQxNihxKTsKLSAgICAgICAgICAgIG1fc2NyZWVu
SGVpZ2h0ID0gR0VUSU5UMTYocSArIDIpOworICAgICAgICAgICAgbV9zY3JlZW5XaWR0aCA9IEdF
VElOVDE2KGN1cnJlbnRCbG9jayk7CisgICAgICAgICAgICBtX3NjcmVlbkhlaWdodCA9IEdFVElO
VDE2KGN1cnJlbnRCbG9jayArIDIpOwogCiAgICAgICAgICAgICAvLyBDQUxMQkFDSzogSW5mb3Jt
IHRoZSBkZWNvZGVycGx1Z2luIG9mIG91ciBzaXplLgogICAgICAgICAgICAgaWYgKG1fY2xpZW50
ICYmICFtX2NsaWVudC0+c2V0U2l6ZShtX3NjcmVlbldpZHRoLCBtX3NjcmVlbkhlaWdodCkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgICAgICBtX3NjcmVlbkJnY29s
b3IgPSBxWzVdOwotICAgICAgICAgICAgbV9nbG9iYWxDb2xvcm1hcFNpemUgPSAyIDw8IChxWzRd
ICYgMHgwNyk7CisgICAgICAgICAgICBtX3NjcmVlbkJnY29sb3IgPSBjdXJyZW50QmxvY2tbNV07
CisgICAgICAgICAgICBtX2dsb2JhbENvbG9ybWFwU2l6ZSA9IDIgPDwgKGN1cnJlbnRCbG9ja1s0
XSAmIDB4MDcpOwogCi0gICAgICAgICAgICBpZiAoKHFbNF0gJiAweDgwKSAmJiBtX2dsb2JhbENv
bG9ybWFwU2l6ZSA+IDApIHsgLyogZ2xvYmFsIG1hcCAqLwotICAgICAgICAgICAgICAgIC8vIEdl
dCB0aGUgZ2xvYmFsIGNvbG9ybWFwCi0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2l6
ZSA9IDMqbV9nbG9iYWxDb2xvcm1hcFNpemU7CisgICAgICAgICAgICBpZiAoKGN1cnJlbnRCbG9j
a1s0XSAmIDB4ODApICYmIG1fZ2xvYmFsQ29sb3JtYXBTaXplID4gMCkgeyAvKiBnbG9iYWwgbWFw
ICovCisgICAgICAgICAgICAgICAgbV9nbG9iYWxDb2xvcm1hcFBvc2l0aW9uID0gZGF0YVBvc2l0
aW9uOwogCi0gICAgICAgICAgICAgICAgLy8gTWFsbG9jIHRoZSBjb2xvciBtYXAsIGJ1dCBvbmx5
IGlmIHdlJ3JlIG5vdCBqdXN0IGNvdW50aW5nIGZyYW1lcy4KLSAgICAgICAgICAgICAgICBpZiAo
cXVlcnkgIT0gR0lGSW1hZ2VEZWNvZGVyOjpHSUZGcmFtZUNvdW50UXVlcnkpCi0gICAgICAgICAg
ICAgICAgICAgIG1fZ2xvYmFsQ29sb3JtYXAgPSBuZXcgdW5zaWduZWQgY2hhcltzaXplXTsKKyAg
ICAgICAgICAgICAgICAvLyBHZXQgdGhlIGdsb2JhbCBjb2xvcm1hcAorICAgICAgICAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGdsb2JhbENvbG9ybWFwQnl0ZXMgPSAzICogbV9nbG9iYWxDb2xvcm1h
cFNpemU7CiAKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgc2l6ZSkgewotICAgICAgICAgICAg
ICAgICAgICAvLyBVc2UgJ2hvbGQnIHBhdHRlcm4gdG8gZ2V0IHRoZSBnbG9iYWwgY29sb3JtYXAK
LSAgICAgICAgICAgICAgICAgICAgR0VUTihzaXplLCBHSUZHbG9iYWxDb2xvcm1hcCk7CisgICAg
ICAgICAgICAgICAgaWYgKGxlbiA8IGdsb2JhbENvbG9ybWFwQnl0ZXMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gTm90IGVub3VnaCBieXRlcyB0byByZWFkIHRoZSBlbnRpcmUgZ2xvYmFsIGNv
bG9ybWFwIHRoaXMgdGltZSBzbworICAgICAgICAgICAgICAgICAgICAvLyByZWFkIGl0IGFzIHRo
ZSBuZXh0IGJsb2NrLgorICAgICAgICAgICAgICAgICAgICBHRVROKGdsb2JhbENvbG9ybWFwQnl0
ZXMsIEdJRkdsb2JhbENvbG9ybWFwKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgLy8gQ29weSBldmVyeXRoaW5nIGFuZCBn
byBkaXJlY3RseSB0byBHSUZJbWFnZV9zdGFydC4KLSAgICAgICAgICAgICAgICBpZiAobV9nbG9i
YWxDb2xvcm1hcCkKLSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KG1fZ2xvYmFsQ29sb3JtYXAs
IGJ1Ziwgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnVmICs9IHNpemU7Ci0gICAgICAgICAgICAg
ICAgbGVuIC09IHNpemU7CisgICAgICAgICAgICAgICAgLy8gVGhlIGVudGlyZSBnbG9iYWwgY29s
b3JtYXAgaXMgcmVjZWl2ZWQgc28gYWR2YW5jZSByZWFkIHBvc2l0aW9uLgorICAgICAgICAgICAg
ICAgIGRhdGFQb3NpdGlvbiArPSBnbG9iYWxDb2xvcm1hcEJ5dGVzOworICAgICAgICAgICAgICAg
IGxlbiAtPSBnbG9iYWxDb2xvcm1hcEJ5dGVzOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBHRVROKDEsIEdJRkltYWdlU3RhcnQpOwogCi0gICAgICAgICAgICAvLyBxWzZdID0gUGl4ZWwg
QXNwZWN0IFJhdGlvCisgICAgICAgICAgICAvLyBjdXJyZW50QmxvY2tbNl0gPSBQaXhlbCBBc3Bl
Y3QgUmF0aW8KICAgICAgICAgICAgIC8vICAgTm90IHVzZWQKLSAgICAgICAgICAgIC8vICAgZmxv
YXQgYXNwZWN0ID0gKGZsb2F0KSgocVs2XSArIDE1KSAvIDY0LjApOworICAgICAgICAgICAgLy8g
ICBmbG9hdCBhc3BlY3QgPSAoZmxvYXQpKChjdXJyZW50QmxvY2tbNl0gKyAxNSkgLyA2NC4wKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHSUZHbG9iYWxD
b2xvcm1hcDogewotICAgICAgICAgICAgLy8gRXZlcnl0aGluZyBpcyBhbHJlYWR5IGNvcGllZCBp
bnRvIG1fZ2xvYmFsQ29sb3JtYXAKKyAgICAgICAgICAgIC8vIERvbid0IG5lZWQgdG8gZG8gYW55
dGhpbmcsIHByb2NlZWQgdG8gcmVhZCB0aGUgaW1hZ2UuCiAgICAgICAgICAgICBHRVROKDEsIEdJ
RkltYWdlU3RhcnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBj
YXNlIEdJRkltYWdlU3RhcnQ6IHsKLSAgICAgICAgICAgIGlmICgqcSA9PSAnOycpIHsgLy8gdGVy
bWluYXRvci4KKyAgICAgICAgICAgIGlmICgqY3VycmVudEJsb2NrID09ICc7JykgeyAvLyB0ZXJt
aW5hdG9yLgogICAgICAgICAgICAgICAgIEdFVE4oMCwgR0lGRG9uZSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICgqcSA9PSAnIScpIHsg
Ly8gZXh0ZW5zaW9uLgorICAgICAgICAgICAgaWYgKCpjdXJyZW50QmxvY2sgPT0gJyEnKSB7IC8v
IGV4dGVuc2lvbi4KICAgICAgICAgICAgICAgICBHRVROKDIsIEdJRkV4dGVuc2lvbik7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CkBAIC01MzcsNyArNTE4LDcgQEAgYm9v
bCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVk
IGxlbiwgR0lGSW1hZ2VEZWNvZGUKICAgICAgICAgICAgIC8vIGJldHdlZW4gYmxvY2tzLiBUaGUg
R0lGODdhIHNwZWMgdGVsbHMgdXMgdG8ga2VlcCByZWFkaW5nCiAgICAgICAgICAgICAvLyB1bnRp
bCB3ZSBmaW5kIGFuIGltYWdlIHNlcGFyYXRvciwgYnV0IEdJRjg5YSBzYXlzIHN1Y2gKICAgICAg
ICAgICAgIC8vIGEgZmlsZSBpcyBjb3JydXB0LiBXZSBmb2xsb3cgR0lGODlhIGFuZCBiYWlsIG91
dC4KLSAgICAgICAgICAgIGlmICgqcSAhPSAnLCcpCisgICAgICAgICAgICBpZiAoKmN1cnJlbnRC
bG9jayAhPSAnLCcpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xpZW50ID8gbV9jbGllbnQt
PnNldEZhaWxlZCgpIDogZmFsc2U7CiAKICAgICAgICAgICAgIEdFVE4oOSwgR0lGSW1hZ2VIZWFk
ZXIpOwpAQCAtNTQ1LDcgKzUyNiw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3Qg
dW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIEdJRkltYWdlRGVjb2RlCiAgICAgICAg
IH0KIAogICAgICAgICBjYXNlIEdJRkV4dGVuc2lvbjogewotICAgICAgICAgICAgbV9jb3VudCA9
IHFbMV07CisgICAgICAgICAgICB1bnNpZ25lZCBieXRlc0luQmxvY2sgPSBjdXJyZW50QmxvY2tb
MV07CiAgICAgICAgICAgICBHSUZTdGF0ZSBlcyA9IEdJRlNraXBCbG9jazsKIAogICAgICAgICAg
ICAgLy8gVGhlIEdJRiBzcGVjIG1hbmRhdGVzIGxlbmd0aHMgZm9yIHRocmVlIG9mIHRoZSBleHRl
bnNpb25zIGJlbG93LgpAQCAtNTYzLDIwICs1NDQsMjAgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6
cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgR0lGSW1hZ2VEZWNv
ZGUKICAgICAgICAgICAgIC8vIGJ5dGVzIGF2YWlsYWJsZSwgYW5kIGlmIHdlIGRvbid0IGVuc3Vy
ZSB0aGF0LCB0aGV5IGNvdWxkIHJlYWQgb2ZmIHRoZQogICAgICAgICAgICAgLy8gZW5kIG9mIHRo
ZSBoZWFwIGJ1ZmZlci4gKEluIHRoaXMgY2FzZSwgaXQncyBsaWtlbHkgdGhlIEdJRiBpcyBjb3Jy
dXB0CiAgICAgICAgICAgICAvLyBhbmQgd2UnbGwgc29vbiBmYWlsIHRvIGRlY29kZSBhbnl3YXku
KQotICAgICAgICAgICAgc3dpdGNoICgqcSkgeworICAgICAgICAgICAgc3dpdGNoICgqY3VycmVu
dEJsb2NrKSB7CiAgICAgICAgICAgICBjYXNlIDB4Zjk6CiAgICAgICAgICAgICAgICAgZXMgPSBH
SUZDb250cm9sRXh0ZW5zaW9uOwotICAgICAgICAgICAgICAgIG1fY291bnQgPSBzdGQ6Om1heCht
X2NvdW50LCA0KTsKKyAgICAgICAgICAgICAgICBieXRlc0luQmxvY2sgPSBzdGQ6Om1heChieXRl
c0luQmxvY2ssIDR1KTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2Fz
ZSAweDAxOgogICAgICAgICAgICAgICAgIC8vIGlnbm9yaW5nIHBsYWluIHRleHQgZXh0ZW5zaW9u
Ci0gICAgICAgICAgICAgICAgbV9jb3VudCA9IHN0ZDo6bWF4KG1fY291bnQsIDEyKTsKKyAgICAg
ICAgICAgICAgICBieXRlc0luQmxvY2sgPSBzdGQ6Om1heChieXRlc0luQmxvY2ssIDEydSk7CiAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgMHhmZjoKICAgICAgICAg
ICAgICAgICBlcyA9IEdJRkFwcGxpY2F0aW9uRXh0ZW5zaW9uOwotICAgICAgICAgICAgICAgIG1f
Y291bnQgPSBzdGQ6Om1heChtX2NvdW50LCAxMSk7CisgICAgICAgICAgICAgICAgYnl0ZXNJbkJs
b2NrID0gc3RkOjptYXgoYnl0ZXNJbkJsb2NrLCAxMXUpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgICAgICBjYXNlIDB4ZmU6CkBAIC01ODQsMTggKzU2NSwxOCBAQCBib29sIEdJ
RkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVu
LCBHSUZJbWFnZURlY29kZQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBpZiAobV9jb3VudCkKLSAgICAgICAgICAgICAgICBHRVROKG1fY291bnQs
IGVzKTsKKyAgICAgICAgICAgIGlmIChieXRlc0luQmxvY2spCisgICAgICAgICAgICAgICAgR0VU
TihieXRlc0luQmxvY2ssIGVzKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBH
RVROKDEsIEdJRkltYWdlU3RhcnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAog
ICAgICAgICBjYXNlIEdJRkNvbnN1bWVCbG9jazogewotICAgICAgICAgICAgaWYgKCEqcSkKKyAg
ICAgICAgICAgIGlmICghKmN1cnJlbnRCbG9jaykKICAgICAgICAgICAgICAgICBHRVROKDEsIEdJ
RkltYWdlU3RhcnQpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIEdFVE4oKnEs
IEdJRlNraXBCbG9jayk7CisgICAgICAgICAgICAgICAgR0VUTigqY3VycmVudEJsb2NrLCBHSUZT
a2lwQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtNjExLDggKzU5
Miw4IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVm
LCB1bnNpZ25lZCBsZW4sIEdJRkltYWdlRGVjb2RlCiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIGlmIChtX2ZyYW1lQ29udGV4dCkgewotICAgICAgICAgICAgICAgIGlmICgqcSAmIDB4MSkg
ewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+dHBpeGVsID0gcVszXTsKKyAg
ICAgICAgICAgICAgICBpZiAoKmN1cnJlbnRCbG9jayAmIDB4MSkgeworICAgICAgICAgICAgICAg
ICAgICBtX2ZyYW1lQ29udGV4dC0+dHBpeGVsID0gY3VycmVudEJsb2NrWzNdOwogICAgICAgICAg
ICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNUcmFuc3BhcmVudCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlz
VHJhbnNwYXJlbnQgPSBmYWxzZTsKQEAgLTYyMCwyMiArNjAxLDIyIEBAIGJvb2wgR0lGSW1hZ2VS
ZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIEdJRklt
YWdlRGVjb2RlCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIE5PVEU6IFRo
aXMgcmVsaWVzIG9uIHRoZSB2YWx1ZXMgaW4gdGhlIEZyYW1lRGlzcG9zYWxNZXRob2QgZW51bQog
ICAgICAgICAgICAgICAgIC8vIG1hdGNoaW5nIHRob3NlIGluIHRoZSBHSUYgc3BlYyEKLSAgICAg
ICAgICAgICAgICBpbnQgZGlzcG9zYWxNZXRob2QgPSAoKCpxKSA+PiAyKSAmIDB4NzsKKyAgICAg
ICAgICAgICAgICBpbnQgZGlzcG9zYWxNZXRob2QgPSAoKCpjdXJyZW50QmxvY2spID4+IDIpICYg
MHg3OwogICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5kaXNwb3NhbE1ldGhvZCA9IChX
ZWJDb3JlOjpJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kKWRpc3Bvc2FsTWV0aG9kOwog
CiAgICAgICAgICAgICAgICAgLy8gU29tZSBzcGVjcyBzYXkgM3JkIGJpdCAodmFsdWUgNCksIG90
aGVyIHNwZWNzIHNheSB2YWx1ZSAzCiAgICAgICAgICAgICAgICAgLy8gTGV0J3MgY2hvb3NlIDMg
KHRoZSBtb3JlIHBvcHVsYXIpCiAgICAgICAgICAgICAgICAgaWYgKGRpc3Bvc2FsTWV0aG9kID09
IDQpCiAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5kaXNwb3NhbE1ldGhvZCA9
IFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2VPdmVyd3JpdGVQcmV2aW91czsKLSAgICAgICAg
ICAgICAgICBtX2ZyYW1lQ29udGV4dC0+ZGVsYXlUaW1lID0gR0VUSU5UMTYocSArIDEpICogMTA7
CisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmRlbGF5VGltZSA9IEdFVElOVDE2KGN1
cnJlbnRCbG9jayArIDEpICogMTA7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBHRVROKDEs
IEdJRkNvbnN1bWVCbG9jayk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAg
ICAgIGNhc2UgR0lGQ29tbWVudEV4dGVuc2lvbjogewotICAgICAgICAgICAgaWYgKCpxKQotICAg
ICAgICAgICAgICAgIEdFVE4oKnEsIEdJRkNvbnN1bWVDb21tZW50KTsKKyAgICAgICAgICAgIGlm
ICgqY3VycmVudEJsb2NrKQorICAgICAgICAgICAgICAgIEdFVE4oKmN1cnJlbnRCbG9jaywgR0lG
Q29uc3VtZUNvbW1lbnQpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIEdFVE4o
MSwgR0lGSW1hZ2VTdGFydCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTY0OCw3ICs2MjksNyBA
QCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5z
aWduZWQgbGVuLCBHSUZJbWFnZURlY29kZQogCiAgICAgICAgIGNhc2UgR0lGQXBwbGljYXRpb25F
eHRlbnNpb246IHsKICAgICAgICAgICAgIC8vIENoZWNrIGZvciBuZXRzY2FwZSBhcHBsaWNhdGlv
biBleHRlbnNpb24uCi0gICAgICAgICAgICBpZiAoIXN0cm5jbXAoKGNoYXIqKXEsICJORVRTQ0FQ
RTIuMCIsIDExKSB8fCAhc3RybmNtcCgoY2hhciopcSwgIkFOSU1FWFRTMS4wIiwgMTEpKQorICAg
ICAgICAgICAgaWYgKCFzdHJuY21wKChjaGFyKiljdXJyZW50QmxvY2ssICJORVRTQ0FQRTIuMCIs
IDExKSB8fCAhc3RybmNtcCgoY2hhciopY3VycmVudEJsb2NrLCAiQU5JTUVYVFMxLjAiLCAxMSkp
CiAgICAgICAgICAgICAgICAgR0VUTigxLCBHSUZOZXRzY2FwZUV4dGVuc2lvbkJsb2NrKTsKICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBHRVROKDEsIEdJRkNvbnN1bWVCbG9jayk7
CkBAIC02NTcsOCArNjM4LDggQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNp
Z25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgR0lGSW1hZ2VEZWNvZGUKIAogICAgICAgICAv
LyBOZXRzY2FwZS1zcGVjaWZpYyBHSUYgZXh0ZW5zaW9uOiBhbmltYXRpb24gbG9vcGluZy4KICAg
ICAgICAgY2FzZSBHSUZOZXRzY2FwZUV4dGVuc2lvbkJsb2NrOiB7Ci0gICAgICAgICAgICBpZiAo
KnEpCi0gICAgICAgICAgICAgICAgR0VUTigqcSwgR0lGQ29uc3VtZU5ldHNjYXBlRXh0ZW5zaW9u
KTsKKyAgICAgICAgICAgIGlmICgqY3VycmVudEJsb2NrKQorICAgICAgICAgICAgICAgIEdFVE4o
KmN1cnJlbnRCbG9jaywgR0lGQ29uc3VtZU5ldHNjYXBlRXh0ZW5zaW9uKTsKICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICBHRVROKDEsIEdJRkltYWdlU3RhcnQpOwogICAgICAgICAg
ICAgYnJlYWs7CkBAIC02NjYsMTEgKzY0NywxMSBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFk
KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURlY29kZQog
CiAgICAgICAgIC8vIFBhcnNlIG5ldHNjYXBlLXNwZWNpZmljIGFwcGxpY2F0aW9uIGV4dGVuc2lv
bnMKICAgICAgICAgY2FzZSBHSUZDb25zdW1lTmV0c2NhcGVFeHRlbnNpb246IHsKLSAgICAgICAg
ICAgIGludCBuZXRzY2FwZUV4dGVuc2lvbiA9IHFbMF0gJiA3OworICAgICAgICAgICAgaW50IG5l
dHNjYXBlRXh0ZW5zaW9uID0gY3VycmVudEJsb2NrWzBdICYgNzsKIAogICAgICAgICAgICAgLy8g
TG9vcCBlbnRpcmUgYW5pbWF0aW9uIHNwZWNpZmllZCAjIG9mIHRpbWVzLiBPbmx5IHJlYWQgdGhl
IGxvb3AgY291bnQgZHVyaW5nIHRoZSBmaXJzdCBpdGVyYXRpb24uCiAgICAgICAgICAgICBpZiAo
bmV0c2NhcGVFeHRlbnNpb24gPT0gMSkgewotICAgICAgICAgICAgICAgIG1fbG9vcENvdW50ID0g
R0VUSU5UMTYocSArIDEpOworICAgICAgICAgICAgICAgIG1fbG9vcENvdW50ID0gR0VUSU5UMTYo
Y3VycmVudEJsb2NrICsgMSk7CiAKICAgICAgICAgICAgICAgICAvLyBaZXJvIGxvb3AgY291bnQg
aXMgaW5maW5pdGUgYW5pbWF0aW9uIGxvb3AgcmVxdWVzdC4KICAgICAgICAgICAgICAgICBpZiAo
IW1fbG9vcENvdW50KQpAQCAtNjk1LDEyICs2NzYsMTIgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6
cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgR0lGSW1hZ2VEZWNv
ZGUKICAgICAgICAgICAgIHVuc2lnbmVkIGhlaWdodCwgd2lkdGgsIHhPZmZzZXQsIHlPZmZzZXQ7
CiAKICAgICAgICAgICAgIC8qIEdldCBpbWFnZSBvZmZzZXRzLCB3aXRoIHJlc3BlY3QgdG8gdGhl
IHNjcmVlbiBvcmlnaW4gKi8KLSAgICAgICAgICAgIHhPZmZzZXQgPSBHRVRJTlQxNihxKTsKLSAg
ICAgICAgICAgIHlPZmZzZXQgPSBHRVRJTlQxNihxICsgMik7CisgICAgICAgICAgICB4T2Zmc2V0
ID0gR0VUSU5UMTYoY3VycmVudEJsb2NrKTsKKyAgICAgICAgICAgIHlPZmZzZXQgPSBHRVRJTlQx
NihjdXJyZW50QmxvY2sgKyAyKTsKIAogICAgICAgICAgICAgLyogR2V0IGltYWdlIHdpZHRoIGFu
ZCBoZWlnaHQuICovCi0gICAgICAgICAgICB3aWR0aCAgPSBHRVRJTlQxNihxICsgNCk7Ci0gICAg
ICAgICAgICBoZWlnaHQgPSBHRVRJTlQxNihxICsgNik7CisgICAgICAgICAgICB3aWR0aCAgPSBH
RVRJTlQxNihjdXJyZW50QmxvY2sgKyA0KTsKKyAgICAgICAgICAgIGhlaWdodCA9IEdFVElOVDE2
KGN1cnJlbnRCbG9jayArIDYpOwogCiAgICAgICAgICAgICAvKiBXb3JrIGFyb3VuZCBicm9rZW4g
R0lGIGZpbGVzIHdoZXJlIHRoZSBsb2dpY2FsIHNjcmVlbgogICAgICAgICAgICAgICogc2l6ZSBo
YXMgd2VpcmQgd2lkdGggb3IgaGVpZ2h0LiAgV2UgYXNzdW1lIHRoYXQgR0lGODdhCkBAIC03Mjks
OCArNzEwLDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFy
ICpidWYsIHVuc2lnbmVkIGxlbiwgR0lGSW1hZ2VEZWNvZGUKICAgICAgICAgICAgIGlmIChxdWVy
eSA9PSBHSUZJbWFnZURlY29kZXI6OkdJRlNpemVRdWVyeSB8fCBoYWx0QXRGcmFtZSA9PSBtX2lt
YWdlc0RlY29kZWQpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgZGVjb2RlciBuZWVkcyB0byBz
dG9wLiBIYW5kIGJhY2sgdGhlIG51bWJlciBvZiBieXRlcyB3ZSBjb25zdW1lZCBmcm9tCiAgICAg
ICAgICAgICAgICAgLy8gYnVmZmVyIG1pbnVzIDkgKHRoZSBhbW91bnQgd2UgY29uc3VtZWQgdG8g
cmVhZCB0aGUgaGVhZGVyKS4KLSAgICAgICAgICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAg
ICAgICAgICAgICAgIG1fY2xpZW50LT5kZWNvZGluZ0hhbHRlZChsZW4gKyA5KTsKKyAgICAgICAg
ICAgICAgICBzZXRSZW1haW5pbmdCeXRlcyhsZW4gKyA5KTsKICAgICAgICAgICAgICAgICBHRVRO
KDksIEdJRkltYWdlSGVhZGVyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgICAgIH0KQEAgLTc2Miw3ICs3NDIsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNv
bnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURlY29kZQogICAg
ICAgICAgICAgICAgIGlmIChtX3NjcmVlbkhlaWdodCA8IGhlaWdodCkKICAgICAgICAgICAgICAg
ICAgICAgbV9zY3JlZW5IZWlnaHQgPSBoZWlnaHQ7CiAKLSAgICAgICAgICAgICAgICBpZiAocVs4
XSAmIDB4NDApIHsKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudEJsb2NrWzhdICYgMHg0MCkg
ewogICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aW50ZXJsYWNlZCA9IHRydWU7
CiAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pcGFzcyA9IDE7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKQEAgLTc4OCwzOSArNzY4LDMwIEBAIGJvb2wgR0lGSW1hZ2VSZWFk
ZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIEdJRkltYWdl
RGVjb2RlCiAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPnJvd2VuZCA9IG1fZnJhbWVD
b250ZXh0LT5yb3didWYgKyBtX2ZyYW1lQ29udGV4dC0+d2lkdGg7CiAgICAgICAgICAgICAgICAg
bV9mcmFtZUNvbnRleHQtPnJvd3AgPSBtX2ZyYW1lQ29udGV4dC0+cm93YnVmOwogCi0gICAgICAg
ICAgICAgICAgLy8gYml0cyBwZXIgcGl4ZWwgaXMgcVs4XSYweDA3CisgICAgICAgICAgICAgICAg
Ly8gYml0cyBwZXIgcGl4ZWwgaXMgY3VycmVudEJsb2NrWzhdJjB4MDcKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgLy8gaGFzIGEgbG9jYWwgY29sb3JtYXA/Ci0gICAgICAgICAgICBpZiAo
cVs4XSAmIDB4ODApIHsKLSAgICAgICAgICAgICAgICBpbnQgbnVtQ29sb3JzID0gMiA8PCAocVs4
XSAmIDB4Nyk7Ci0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2l6ZSA9IDMgKiBudW1D
b2xvcnM7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqbWFwID0gbV9mcmFtZUNvbnRl
eHQgPyBtX2ZyYW1lQ29udGV4dC0+bG9jYWxDb2xvcm1hcCA6IDA7Ci0gICAgICAgICAgICAgICAg
aWYgKG1fZnJhbWVDb250ZXh0ICYmICghbWFwIHx8IChudW1Db2xvcnMgPiBtX2ZyYW1lQ29udGV4
dC0+bG9jYWxDb2xvcm1hcFNpemUpKSkgewotICAgICAgICAgICAgICAgICAgICBkZWxldGUgW11t
YXA7Ci0gICAgICAgICAgICAgICAgICAgIG1hcCA9IG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoIW1hcCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjdXJyZW50QmxvY2tbOF0gJiAweDgwKSB7CisgICAg
ICAgICAgICAgICAgaW50IG51bUNvbG9ycyA9IDIgPDwgKGN1cnJlbnRCbG9ja1s4XSAmIDB4Nyk7
CisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbG9jYWxDb2xvcm1hcEJ5dGVzID0gMyAq
IG51bUNvbG9yczsKIAogICAgICAgICAgICAgICAgIC8vIFN3aXRjaCB0byB0aGUgbmV3IGxvY2Fs
IHBhbGV0dGUgYWZ0ZXIgaXQgbG9hZHMKICAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRl
eHQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXAg
PSBtYXA7CisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFw
UG9zaXRpb24gPSBkYXRhUG9zaXRpb247CiAgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250
ZXh0LT5sb2NhbENvbG9ybWFwU2l6ZSA9IG51bUNvbG9yczsKICAgICAgICAgICAgICAgICAgICAg
bV9mcmFtZUNvbnRleHQtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChsZW4gPCBzaXplKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFVzZSAnaG9sZCcgcGF0dGVybiB0byBnZXQgdGhlIGltYWdlIGNvbG9ybWFw
Ci0gICAgICAgICAgICAgICAgICAgIEdFVE4oc2l6ZSwgR0lGSW1hZ2VDb2xvcm1hcCk7CisgICAg
ICAgICAgICAgICAgaWYgKGxlbiA8IGxvY2FsQ29sb3JtYXBCeXRlcykgeworICAgICAgICAgICAg
ICAgICAgICAvLyBOb3QgZW5vdWdoIGJ5dGVzIHRvIHJlYWQgdGhlIGVudGlyZSBjb2xvcm1hcCwg
cmVhZCBpdCBhcyBuZXh0IGJsb2NrLgorICAgICAgICAgICAgICAgICAgICBHRVROKGxvY2FsQ29s
b3JtYXBCeXRlcywgR0lGSW1hZ2VDb2xvcm1hcCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIC8vIENvcHkgZXZlcnl0aGlu
ZyBhbmQgZGlyZWN0bHkgZ28gdG8gR0lGTFpXU3RhcnQKLSAgICAgICAgICAgICAgICBpZiAobV9m
cmFtZUNvbnRleHQpCi0gICAgICAgICAgICAgICAgICAgIG1lbWNweShtX2ZyYW1lQ29udGV4dC0+
bG9jYWxDb2xvcm1hcCwgYnVmLCBzaXplKTsKLSAgICAgICAgICAgICAgICBidWYgKz0gc2l6ZTsK
LSAgICAgICAgICAgICAgICBsZW4gLT0gc2l6ZTsKKyAgICAgICAgICAgICAgICAvLyBUaGVyZSdz
IGVub3VnaCBieXRlcyBmb3IgdGhlIGVudGlyZSBjb2xvcm1hcCBzbyBhZHZhbmNlIGRhdGEgcG9p
bnRlci4KKyAgICAgICAgICAgICAgICBkYXRhUG9zaXRpb24gKz0gbG9jYWxDb2xvcm1hcEJ5dGVz
OworICAgICAgICAgICAgICAgIGxlbiAtPSBsb2NhbENvbG9ybWFwQnl0ZXM7CiAgICAgICAgICAg
ICB9IGVsc2UgaWYgKG1fZnJhbWVDb250ZXh0KSB7CiAgICAgICAgICAgICAgICAgLy8gU3dpdGNo
IGJhY2sgdG8gdGhlIGdsb2JhbCBwYWxldHRlCiAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRl
eHQtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSBmYWxzZTsKQEAgLTgzNywxNCArODA4LDE1IEBA
IGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNp
Z25lZCBsZW4sIEdJRkltYWdlRGVjb2RlCiAKICAgICAgICAgY2FzZSBHSUZTdWJCbG9jazogewog
ICAgICAgICAgICAgLy8gU3RpbGwgd29ya2luZyBvbiB0aGUgc2FtZSBpbWFnZTogUHJvY2VzcyBu
ZXh0IExaVyBkYXRhIGJsb2NrLgotICAgICAgICAgICAgaWYgKChtX2NvdW50ID0gKnEpKSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBieXRlc0luQmxvY2sgPSAqY3VycmVudEJsb2NrOworICAgICAg
ICAgICAgaWYgKGJ5dGVzSW5CbG9jaykgewogICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0
aGVyZSBhcmUgc3RpbGwgcm93cyBsZWZ0LiBJZiB0aGUgR0lGIGRhdGEKICAgICAgICAgICAgICAg
ICAvLyBpcyBjb3JydXB0LCB3ZSBtYXkgbm90IGdldCBhbiBleHBsaWNpdCB0ZXJtaW5hdG9yLgog
ICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCAmJiAhbV9mcmFtZUNvbnRleHQtPnJv
d3NSZW1haW5pbmcpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBpbGxlZ2Fs
IEdJRiwgYnV0IHdlIHJlbWFpbiB0b2xlcmFudC4KICAgICAgICAgICAgICAgICAgICAgR0VUTigx
LCBHSUZTdWJCbG9jayk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEdFVE4o
bV9jb3VudCwgR0lGTFpXKTsKKyAgICAgICAgICAgICAgICBHRVROKGJ5dGVzSW5CbG9jaywgR0lG
TFpXKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gU2VlIGlmIHRo
ZXJlIGFyZSBhbnkgbW9yZSBpbWFnZXMgaW4gdGhpcyBzZXF1ZW5jZS4KICAgICAgICAgICAgICAg
ICBtX2ltYWdlc0RlY29kZWQrKzsKQEAgLTg3NywyMyArODQ5LDEyIEBAIGJvb2wgR0lGSW1hZ2VS
ZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIEdJRklt
YWdlRGVjb2RlCiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBDb3B5IHRoZSBsZWZ0b3ZlciBp
bnRvIG1fZnJhbWVDb250ZXh0LT5tX2hvbGQKLSAgICBtX2J5dGVzSW5Ib2xkID0gbGVuOwotICAg
IGlmIChsZW4pIHsKLSAgICAgICAgLy8gQWRkIHdoYXQgd2UgaGF2ZSBzb2ZhciB0byB0aGUgYmxv
Y2sKLSAgICAgICAgdW5zaWduZWQgY2hhciogcDsKLSAgICAgICAgaWYgKG1fc3RhdGUgPT0gR0lG
R2xvYmFsQ29sb3JtYXApCi0gICAgICAgICAgICBwID0gbV9nbG9iYWxDb2xvcm1hcDsKLSAgICAg
ICAgZWxzZSBpZiAobV9zdGF0ZSA9PSBHSUZJbWFnZUNvbG9ybWFwKQotICAgICAgICAgICAgcCA9
IG1fZnJhbWVDb250ZXh0ID8gbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXAgOiAwOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBwID0gbV9ob2xkOwotICAgICAgICBpZiAocCkKLSAgICAg
ICAgICAgIG1lbWNweShwLCBidWYsIGxlbik7Ci0gICAgICAgIG1fYnl0ZXNUb0NvbnN1bWUgLT0g
bGVuOwotICAgIH0KLQotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmRlY29k
aW5nSGFsdGVkKDApOworICAgIHNldFJlbWFpbmluZ0J5dGVzKGxlbik7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQorCit2b2lkIEdJRkltYWdlUmVhZGVyOjpzZXRSZW1haW5pbmdCeXRlcyh1bnNpZ25l
ZCByZW1haW5pbmdCeXRlcykKK3sKKyAgICBBU1NFUlQocmVtYWluaW5nQnl0ZXMgPD0gbV9kYXRh
LT5zaXplKCkpOworICAgIG1fYnl0ZXNSZWFkID0gbV9kYXRhLT5zaXplKCkgLSByZW1haW5pbmdC
eXRlczsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmgKaW5kZXggYzA4MjkxOGM0MzE2NmIzODAyOWVi
ZGY0ZjI0Y2YzNGRlNjlkNzQ5Yi4uOTc2M2JhZTRmMmY2NDA3NDNjNjQ5MDBmZGFkM2UzNzQzMWQy
NTdlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMv
Z2lmL0dJRkltYWdlUmVhZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmgKQEAgLTQxLDExICs0MSwxMyBAQAogLy8gRGVm
aW5lIG91cnNlbHZlcyBhcyB0aGUgY2xpZW50UHRyLiAgTW96aWxsYSBqdXN0IGhhY2tlZCB0aGVp
ciBDKysgY2FsbGJhY2sgY2xhc3MgaW50byB0aGlzIG9sZCBDIGRlY29kZXIsCiAvLyBzbyB3ZSB3
aWxsIHRvby4KICNpbmNsdWRlICJHSUZJbWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKIAogI2RlZmluZSBNQVhfTFpXX0JJVFMgICAgICAgICAgMTIKICNkZWZpbmUgTUFY
X0JJVFMgICAgICAgICAgICA0MDk3IC8qIDJeTUFYX0xaV19CSVRTKzEgKi8KICNkZWZpbmUgTUFY
X0NPTE9SUyAgICAgICAgICAgMjU2CiAjZGVmaW5lIE1BWF9IT0xEX1NJWkUgICAgICAgIDI1Ngor
I2RlZmluZSBHSUZfQ09MT1JTICAgICAgICAgICAgIDMKIAogY29uc3QgaW50IGNMb29wQ291bnRO
b3RTZWVuID0gLTI7CiAKQEAgLTEwMyw3ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQg
aGVpZ2h0OwogICAgIGludCB0cGl4ZWw7IC8vIEluZGV4IG9mIHRyYW5zcGFyZW50IHBpeGVsLgog
ICAgIFdlYkNvcmU6OkltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRo
b2Q7IC8vIFJlc3RvcmUgdG8gYmFja2dyb3VuZCwgbGVhdmUgaW4gcGxhY2UsIGV0Yy4KLSAgICB1
bnNpZ25lZCBjaGFyICpsb2NhbENvbG9ybWFwOyAvLyBQZXItaW1hZ2UgY29sb3JtYXAuCisgICAg
dW5zaWduZWQgbG9jYWxDb2xvcm1hcFBvc2l0aW9uOyAvLyBQZXItaW1hZ2UgY29sb3JtYXAuCiAg
ICAgaW50IGxvY2FsQ29sb3JtYXBTaXplOyAvLyBTaXplIG9mIGxvY2FsIGNvbG9ybWFwIGFycmF5
LgogICAgIAogICAgIGJvb2wgaXNMb2NhbENvbG9ybWFwRGVmaW5lZCA6IDE7CkBAIC0xNDAsNyAr
MTQyLDcgQEAgcHVibGljOgogICAgICAgICAsIGhlaWdodCgwKQogICAgICAgICAsIHRwaXhlbCgw
KQogICAgICAgICAsIGRpc3Bvc2FsTWV0aG9kKFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2VO
b3RTcGVjaWZpZWQpCi0gICAgICAgICwgbG9jYWxDb2xvcm1hcCgwKQorICAgICAgICAsIGxvY2Fs
Q29sb3JtYXBQb3NpdGlvbigwKQogICAgICAgICAsIGxvY2FsQ29sb3JtYXBTaXplKDApCiAgICAg
ICAgICwgaXNMb2NhbENvbG9ybWFwRGVmaW5lZChmYWxzZSkKICAgICAgICAgLCBwcm9ncmVzc2l2
ZURpc3BsYXkoZmFsc2UpCkBAIC0xNTYsNyArMTU4LDYgQEAgcHVibGljOgogICAgIH5HSUZGcmFt
ZUNvbnRleHQoKQogICAgIHsKICAgICAgICAgZGVsZXRlIFtdIHJvd2J1ZjsKLSAgICAgICAgZGVs
ZXRlIFtdIGxvY2FsQ29sb3JtYXA7CiAgICAgICAgIGRlbGV0ZSBbXSBwcmVmaXg7CiAgICAgICAg
IGRlbGV0ZSBbXSBzdWZmaXg7CiAgICAgICAgIGRlbGV0ZSBbXSBzdGFjazsKQEAgLTE2OSw2NiAr
MTcwLDkzIEBAIHB1YmxpYzoKICAgICBHSUZJbWFnZVJlYWRlcihXZWJDb3JlOjpHSUZJbWFnZURl
Y29kZXIqIGNsaWVudCA9IDApCiAgICAgICAgIDogbV9jbGllbnQoY2xpZW50KQogICAgICAgICAs
IG1fc3RhdGUoR0lGVHlwZSkKLSAgICAgICAgLCBtX2J5dGVzVG9Db25zdW1lKDYpCi0gICAgICAg
ICwgbV9ieXRlc0luSG9sZCgwKQotICAgICAgICAsIG1fZ2xvYmFsQ29sb3JtYXAoMCkKKyAgICAg
ICAgLCBtX2J5dGVzSW5OZXh0QmxvY2soNikgLy8gTnVtYmVyIG9mIGJ5dGVzIGZvciB0aGUgZmly
c3QgcmVhZC4KKyAgICAgICAgLCBtX2J5dGVzUmVhZCgwKQogICAgICAgICAsIG1fc2NyZWVuQmdj
b2xvcigwKQogICAgICAgICAsIG1fdmVyc2lvbigwKQogICAgICAgICAsIG1fc2NyZWVuV2lkdGgo
MCkKICAgICAgICAgLCBtX3NjcmVlbkhlaWdodCgwKQorICAgICAgICAsIG1fZ2xvYmFsQ29sb3Jt
YXBQb3NpdGlvbigwKQogICAgICAgICAsIG1fZ2xvYmFsQ29sb3JtYXBTaXplKDApCiAgICAgICAg
ICwgbV9pbWFnZXNEZWNvZGVkKDApCiAgICAgICAgICwgbV9pbWFnZXNDb3VudCgwKQogICAgICAg
ICAsIG1fbG9vcENvdW50KGNMb29wQ291bnROb3RTZWVuKQotICAgICAgICAsIG1fY291bnQoMCkK
ICAgICAgICAgLCBtX2ZyYW1lQ29udGV4dCgwKQogICAgIHsKICAgICB9CiAKICAgICB+R0lGSW1h
Z2VSZWFkZXIoKQogICAgIHsKLSAgICAgICAgZGVsZXRlIFtdIG1fZ2xvYmFsQ29sb3JtYXA7Ci0g
ICAgICAgIG1fZ2xvYmFsQ29sb3JtYXAgPSAwOwotCiAgICAgICAgIGRlbGV0ZSBtX2ZyYW1lQ29u
dGV4dDsKICAgICAgICAgbV9mcmFtZUNvbnRleHQgPSAwOwogICAgIH0KIAotICAgIGJvb2wgcmVh
ZChjb25zdCB1bnNpZ25lZCBjaGFyKiBidWYsIHVuc2lnbmVkIG51bWJ5dGVzLCBXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5ID0gV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZG
dWxsUXVlcnksIHVuc2lnbmVkIGhhbHRBdEZyYW1lID0gLTEpOworICAgIHZvaWQgc2V0RGF0YShQ
YXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gZGF0YSkgeyBtX2RhdGEgPSBkYXRhOyB9
CisgICAgYm9vbCBkZWNvZGUoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSwgaW50
IGhhbHRBdEZyYW1lKTsKIAogICAgIGludCBpbWFnZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW1hZ2VzQ291bnQ7IH0KICAgICBpbnQgbG9vcENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9sb29w
Q291bnQ7IH0KLSAgICB1bnNpZ25lZCBjaGFyKiBnbG9iYWxDb2xvcm1hcCgpIGNvbnN0IHsgcmV0
dXJuIG1fZ2xvYmFsQ29sb3JtYXA7IH0KKworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGdsb2Jh
bENvbG9ybWFwKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBjb2xvcm1hcChtX2dsb2Jh
bENvbG9ybWFwUG9zaXRpb24sIG1fZ2xvYmFsQ29sb3JtYXBTaXplKTsKKyAgICB9CiAgICAgaW50
IGdsb2JhbENvbG9ybWFwU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsQ29sb3JtYXBTaXpl
OyB9CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBsb2NhbENvbG9ybWFwKGNvbnN0IEdJRkZy
YW1lQ29udGV4dCogZnJhbWUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWZyYW1lLT5pc0xv
Y2FsQ29sb3JtYXBEZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVy
biBjb2xvcm1hcChmcmFtZS0+bG9jYWxDb2xvcm1hcFBvc2l0aW9uLCBmcmFtZS0+bG9jYWxDb2xv
cm1hcFNpemUpOworICAgIH0KKyAgICBpbnQgbG9jYWxDb2xvcm1hcFNpemUoY29uc3QgR0lGRnJh
bWVDb250ZXh0KiBmcmFtZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghZnJhbWUtPmlzTG9j
YWxDb2xvcm1hcERlZmluZWQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJu
IGZyYW1lLT5sb2NhbENvbG9ybWFwU2l6ZTsKKyAgICB9CisKICAgICBjb25zdCBHSUZGcmFtZUNv
bnRleHQqIGZyYW1lQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVDb250ZXh0OyB9CiAK
IHByaXZhdGU6CisgICAgYm9vbCBkZWNvZGVJbnRlcm5hbCh1bnNpZ25lZCBkYXRhUG9zaXRpb24s
IHVuc2lnbmVkIGxlbiwgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSA9IFdlYkNv
cmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSA9
IC0xKTsKICAgICBib29sIG91dHB1dFJvdygpOwotICAgIGJvb2wgZG9MWlcoY29uc3QgdW5zaWdu
ZWQgY2hhciAqcSk7CisgICAgYm9vbCBkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2ln
bmVkKTsKKyAgICB2b2lkIHNldFJlbWFpbmluZ0J5dGVzKHVuc2lnbmVkKTsKKworICAgIGNvbnN0
IHVuc2lnbmVkIGNoYXIqIGRhdGEodW5zaWduZWQgZGF0YVBvc2l0aW9uKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KG1f
ZGF0YS0+ZGF0YSgpKSArIGRhdGFQb3NpdGlvbjsKKyAgICB9CisKKyAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBjb2xvcm1hcCh1bnNpZ25lZCBwb3NpdGlvbiwgaW50IHNpemUpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAocG9zaXRpb24gKyBzaXplICogR0lGX0NPTE9SUyA+IG1fZGF0YS0+c2l6
ZSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBkYXRhKHBvc2l0aW9u
KTsKKyAgICB9CiAKICAgICBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIG1fY2xpZW50OwogCiAg
ICAgLy8gUGFyc2luZyBzdGF0ZSBtYWNoaW5lLgogICAgIEdJRlN0YXRlIG1fc3RhdGU7IC8vIEN1
cnJlbnQgZGVjb2RlciBtYXN0ZXIgc3RhdGUuCi0gICAgdW5zaWduZWQgbV9ieXRlc1RvQ29uc3Vt
ZTsgLy8gTnVtYmVyIG9mIGJ5dGVzIHRvIGFjY3VtdWxhdGUuCi0gICAgdW5zaWduZWQgbV9ieXRl
c0luSG9sZDsgLy8gYnl0ZXMgYWNjdW11bGF0ZWQgc28gZmFyLgotICAgIHVuc2lnbmVkIGNoYXIg
bV9ob2xkW01BWF9IT0xEX1NJWkVdOyAvLyBBY2N1bXVsYXRpb24gYnVmZmVyLgotICAgIHVuc2ln
bmVkIGNoYXIqIG1fZ2xvYmFsQ29sb3JtYXA7IC8vICgzKiBNQVhfQ09MT1JTIGluIHNpemUpIERl
ZmF1bHQgY29sb3JtYXAgaWYgbG9jYWwgbm90IHN1cHBsaWVkLCAzIGJ5dGVzIGZvciBlYWNoIGNv
bG9yLgorICAgIHVuc2lnbmVkIG1fYnl0ZXNJbk5leHRCbG9jazsgLy8gTnVtYmVyIG9mIGJ5dGVz
IHRvIGFjY3VtdWxhdGUuCisgICAgdW5zaWduZWQgbV9ieXRlc1JlYWQ7IC8vIE51bWJlciBvZiBi
eXRlcyBwcm9jZXNzZWQuCiAgICAgCiAgICAgLy8gR2xvYmFsIChtdWx0aS1pbWFnZSkgc3RhdGUu
CiAgICAgaW50IG1fc2NyZWVuQmdjb2xvcjsgLy8gTG9naWNhbCBzY3JlZW4gYmFja2dyb3VuZCBj
b2xvci4KICAgICBpbnQgbV92ZXJzaW9uOyAvLyBFaXRoZXIgODkgZm9yIEdJRjg5IG9yIDg3IGZv
ciBHSUY4Ny4KICAgICB1bnNpZ25lZCBtX3NjcmVlbldpZHRoOyAvLyBMb2dpY2FsIHNjcmVlbiB3
aWR0aCAmIGhlaWdodC4KICAgICB1bnNpZ25lZCBtX3NjcmVlbkhlaWdodDsKKyAgICB1bnNpZ25l
ZCBtX2dsb2JhbENvbG9ybWFwUG9zaXRpb247IC8vICgzKiBNQVhfQ09MT1JTIGluIHNpemUpIERl
ZmF1bHQgY29sb3JtYXAgaWYgbG9jYWwgbm90IHN1cHBsaWVkLCAzIGJ5dGVzIGZvciBlYWNoIGNv
bG9yLgogICAgIGludCBtX2dsb2JhbENvbG9ybWFwU2l6ZTsgLy8gU2l6ZSBvZiBnbG9iYWwgY29s
b3JtYXAgYXJyYXkuCiAgICAgdW5zaWduZWQgbV9pbWFnZXNEZWNvZGVkOyAvLyBDb3VudHMgY29t
cGxldGVkIGZyYW1lcyBmb3IgYW5pbWF0ZWQgR0lGcy4KICAgICBpbnQgbV9pbWFnZXNDb3VudDsg
Ly8gQ291bnRlZCBhbGwgZnJhbWVzIHNlZW4gc28gZmFyIChpbmNsdWRpbmcgaW5jb21wbGV0ZSBm
cmFtZXMpLgogICAgIGludCBtX2xvb3BDb3VudDsgLy8gTmV0c2NhcGUgc3BlY2lmaWMgZXh0ZW5z
aW9uIGJsb2NrIHRvIGNvbnRyb2wgdGhlIG51bWJlciBvZiBhbmltYXRpb24gbG9vcHMgYSBHSUYg
cmVuZGVycy4KICAgICAKLSAgICAvLyBOb3QgcmVhbGx5IGdsb2JhbCwgYnV0IGNvbnZlbmllbnQg
dG8gbG9jYXRlIGhlcmUuCi0gICAgaW50IG1fY291bnQ7IC8vIFJlbWFpbmluZyAjIGJ5dGVzIGlu
IHN1Yi1ibG9jay4KLSAgICAKICAgICBHSUZGcmFtZUNvbnRleHQqIG1fZnJhbWVDb250ZXh0Owor
CisgICAgUmVmUHRyPFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcj4gbV9kYXRhOwogfTsKIAogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggYWExNDE1ZjQyNzFjOTI5OWU5NWQwZjM5
NzNjM2E1MGM2YmUxYzdmZS4uZjA0ZWJhZDdmYjE2MjVkMmRlNzc0NTI0NzVhN2VhMDQ5OGE4ZWNj
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cApAQCAtNjQxLDYgKzY0MSw3IEBACiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2Ugc2hvdWxkIG5vdCBpbmNsdWRlIGZpbGVz
IGRlcGVuZGluZyBvbiB3ZWJraXRfc3VwcG9ydC4KICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIyBUaGVzZSB0ZXN0cyBkZXBlbmQgb24gd2Via2l0X3N1cHBvcnQgYW5kCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICMgZnVuY3Rpb25zIGRlZmluZWQgb25seSBpbiAhV0VC
S0lUX0lNUExFTUVOVEFUSU9OLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVz
dHMvR0lGSW1hZ2VEZWNvZGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAndGVzdHMvTGV2ZWxEQlRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb25kaXRpb25zJzogWwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggZDU4MTEyODhjZmU0Y2YzMzdhZTQ3NmEzZDU3Mjg3
YTFhMTMzMWMyOS4uM2IwYTdhNTNlNTgyM2M3MWNiZTY4MmI1NzA3NGRmNTZmMTQxMGMxZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC03Miw2ICs3Miw3IEBACiAgICAgICAgICAg
ICAndGVzdHMvRnJhbWVMb2FkZXJDbGllbnRJbXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL0ZyYW1lVGVzdEhlbHBlcnMuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9GcmFtZVRlc3RI
ZWxwZXJzLmgnLAorICAgICAgICAgICAgJ3Rlc3RzL0dJRkltYWdlRGVjb2RlclRlc3QuY3BwJywK
ICAgICAgICAgICAgICd0ZXN0cy9HcmFwaGljc0xheWVyQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAg
ICAgICAgICAndGVzdHMvSURCQWJvcnRPbkNvcnJ1cHRUZXN0LmNwcCcsCiAgICAgICAgICAgICAn
dGVzdHMvSURCQmluZGluZ1V0aWxpdGllc1Rlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvR0lGSW1hZ2VEZWNvZGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL0dJRkltYWdlRGVjb2RlclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRk
NTQ3ZTlhZGNjMDAwYWEyOTE0ZmQwZGJmN2NiNGZjMjUzY2VlOTYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dJRkltYWdlRGVjb2RlclRlc3QuY3BwCkBA
IC0wLDAgKzEsMTg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisg
KiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisg
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiR0lGSW1hZ2VE
ZWNvZGVyLmgiCisKKyNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVm
ZmVyLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViRGF0
YS5oPgorI2luY2x1ZGUgPHB1YmxpYy9XZWJTaXplLmg+CisjaW5jbHVkZSA8d2Via2l0L3N1cHBv
cnQvd2Via2l0X3N1cHBvcnQuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1l
c3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgeworCitzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRC
dWZmZXI+IHJlYWRGaWxlKGNvbnN0IGNoYXIqIGZpbGVOYW1lKQoreworICAgIFN0cmluZyBmaWxl
UGF0aCA9IHdlYmtpdF9zdXBwb3J0OjpHZXRXZWJLaXRSb290RGlyKCk7CisgICAgZmlsZVBhdGgu
YXBwZW5kKGZpbGVOYW1lKTsKKworICAgIGxvbmcgbG9uZyBmaWxlU2l6ZTsKKyAgICBpZiAoIWdl
dEZpbGVTaXplKGZpbGVQYXRoLCBmaWxlU2l6ZSkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
UGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSA9IG9wZW5GaWxlKGZpbGVQYXRoLCBPcGVuRm9yUmVh
ZCk7CisgICAgaW50IGZpbGVMZW5ndGggPSBzdGF0aWNfY2FzdDxpbnQ+KGZpbGVTaXplKTsKKyAg
ICBWZWN0b3I8Y2hhcj4gYnVmZmVyKGZpbGVMZW5ndGgpOworICAgIHJlYWRGcm9tRmlsZShoYW5k
bGUsIGJ1ZmZlci5kYXRhKCksIGZpbGVMZW5ndGgpOworICAgIGNsb3NlRmlsZShoYW5kbGUpOwor
ICAgIHJldHVybiBTaGFyZWRCdWZmZXI6OmFkb3B0VmVjdG9yKGJ1ZmZlcik7Cit9CisKK1RFU1Qo
R0lGSW1hZ2VEZWNvZGVyVGVzdCwgZGVjb2RlVHdvRnJhbWVzKQoreworICAgIE93blB0cjxHSUZJ
bWFnZURlY29kZXI+IGRlY29kZXIoYWRvcHRQdHIobmV3IEdJRkltYWdlRGVjb2RlcihJbWFnZVNv
dXJjZTo6QWxwaGFOb3RQcmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclBy
b2ZpbGVBcHBsaWVkKSkpOworCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IHJlYWRG
aWxlKCIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcmVzb3VyY2VzL2FuaW1hdGVkLmdpZiIpOwor
ICAgIEFTU0VSVF9UUlVFKGRhdGEuZ2V0KCkpOworICAgIGRlY29kZXItPnNldERhdGEoZGF0YS5n
ZXQoKSwgdHJ1ZSk7CisgICAgRVhQRUNUX0VRKGNBbmltYXRpb25Mb29wT25jZSwgZGVjb2Rlci0+
cmVwZXRpdGlvbkNvdW50KCkpOworCisgICAgSW1hZ2VGcmFtZSogZnJhbWUgPSBkZWNvZGVyLT5m
cmFtZUJ1ZmZlckF0SW5kZXgoMCk7CisgICAgRVhQRUNUX0VRKEltYWdlRnJhbWU6OkZyYW1lQ29t
cGxldGUsIGZyYW1lLT5zdGF0dXMoKSk7CisgICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+Z2V0U2tC
aXRtYXAoKS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTYsIGZyYW1lLT5nZXRTa0JpdG1hcCgp
LmhlaWdodCgpKTsKKworICAgIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDEp
OworICAgIEVYUEVDVF9FUShJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlLCBmcmFtZS0+c3RhdHVz
KCkpOworICAgIEVYUEVDVF9FUSgxNiwgZnJhbWUtPmdldFNrQml0bWFwKCkud2lkdGgoKSk7Cisg
ICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+Z2V0U2tCaXRtYXAoKS5oZWlnaHQoKSk7CisKKyAgICBF
WFBFQ1RfRVEoMnUsIGRlY29kZXItPmZyYW1lQ291bnQoKSk7CisgICAgRVhQRUNUX0VRKGNBbmlt
YXRpb25Mb29wSW5maW5pdGUsIGRlY29kZXItPnJlcGV0aXRpb25Db3VudCgpKTsKK30KKworVEVT
VChHSUZJbWFnZURlY29kZXJUZXN0LCBwYXJzZUFuZERlY29kZSkKK3sKKyAgICBPd25QdHI8R0lG
SW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGFkb3B0UHRyKG5ldyBHSUZJbWFnZURlY29kZXIoSW1hZ2VT
b3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQ
cm9maWxlQXBwbGllZCkpKTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSByZWFk
RmlsZSgiL0xheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL3Jlc291cmNlcy9hbmltYXRlZC5naWYiKTsK
KyAgICBBU1NFUlRfVFJVRShkYXRhLmdldCgpKTsKKyAgICBkZWNvZGVyLT5zZXREYXRhKGRhdGEu
Z2V0KCksIHRydWUpOworICAgIEVYUEVDVF9FUShjQW5pbWF0aW9uTG9vcE9uY2UsIGRlY29kZXIt
PnJlcGV0aXRpb25Db3VudCgpKTsKKworICAgIC8vIFRoaXMgY2FsbCB3aWxsIHBhcnNlIHRoZSBl
bnRpcmUgZmlsZS4KKyAgICBFWFBFQ1RfRVEoMnUsIGRlY29kZXItPmZyYW1lQ291bnQoKSk7CisK
KyAgICBJbWFnZUZyYW1lKiBmcmFtZSA9IGRlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKTsK
KyAgICBFWFBFQ1RfRVEoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSwgZnJhbWUtPnN0YXR1cygp
KTsKKyAgICBFWFBFQ1RfRVEoMTYsIGZyYW1lLT5nZXRTa0JpdG1hcCgpLndpZHRoKCkpOworICAg
IEVYUEVDVF9FUSgxNiwgZnJhbWUtPmdldFNrQml0bWFwKCkuaGVpZ2h0KCkpOworCisgICAgZnJh
bWUgPSBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMSk7CisgICAgRVhQRUNUX0VRKEltYWdl
RnJhbWU6OkZyYW1lQ29tcGxldGUsIGZyYW1lLT5zdGF0dXMoKSk7CisgICAgRVhQRUNUX0VRKDE2
LCBmcmFtZS0+Z2V0U2tCaXRtYXAoKS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTYsIGZyYW1l
LT5nZXRTa0JpdG1hcCgpLmhlaWdodCgpKTsKKyAgICBFWFBFQ1RfRVEoY0FuaW1hdGlvbkxvb3BJ
bmZpbml0ZSwgZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkpOworfQorCitURVNUKEdJRkltYWdl
RGVjb2RlclRlc3QsIHBhcnNlQnl0ZUJ5Qnl0ZSkKK3sKKyAgICBPd25QdHI8R0lGSW1hZ2VEZWNv
ZGVyPiBkZWNvZGVyKGFkb3B0UHRyKG5ldyBHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFs
cGhhTm90UHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBw
bGllZCkpKTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSByZWFkRmlsZSgiL0xh
eW91dFRlc3RzL2Zhc3QvaW1hZ2VzL3Jlc291cmNlcy9hbmltYXRlZC5naWYiKTsKKyAgICBBU1NF
UlRfVFJVRShkYXRhLmdldCgpKTsKKworICAgIHNpemVfdCBmcmFtZUNvdW50ID0gMDsKKworICAg
IC8vIFBhc3MgZGF0YSB0byBkZWNvZGVyIGJ5dGUgYnkgYnl0ZS4KKyAgICBmb3IgKHVuc2lnbmVk
IGxlbmd0aCA9IDE7IGxlbmd0aCA8PSBkYXRhLT5zaXplKCk7ICsrbGVuZ3RoKSB7CisgICAgICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IHRlbXBEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0
YS0+ZGF0YSgpLCBsZW5ndGgpOworICAgICAgICBkZWNvZGVyLT5zZXREYXRhKHRlbXBEYXRhLmdl
dCgpLCBsZW5ndGggPT0gZGF0YS0+c2l6ZSgpKTsKKworICAgICAgICBFWFBFQ1RfTEUoZnJhbWVD
b3VudCwgZGVjb2Rlci0+ZnJhbWVDb3VudCgpKTsKKyAgICAgICAgZnJhbWVDb3VudCA9IGRlY29k
ZXItPmZyYW1lQ291bnQoKTsKKyAgICB9CisKKyAgICBFWFBFQ1RfRVEoMnUsIGRlY29kZXItPmZy
YW1lQ291bnQoKSk7CisKKyAgICBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7CisgICAg
ZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDEpOworICAgIEVYUEVDVF9FUShjQW5pbWF0aW9u
TG9vcEluZmluaXRlLCBkZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSk7Cit9CisKK1RFU1QoR0lG
SW1hZ2VEZWNvZGVyVGVzdCwgcGFyc2VBbmREZWNvZGVCeXRlQnlCeXRlKQoreworICAgIE93blB0
cjxHSUZJbWFnZURlY29kZXI+IGRlY29kZXIoYWRvcHRQdHIobmV3IEdJRkltYWdlRGVjb2RlcihJ
bWFnZVNvdXJjZTo6QWxwaGFOb3RQcmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRD
b2xvclByb2ZpbGVBcHBsaWVkKSkpOworCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9
IHJlYWRGaWxlKCIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcmVzb3VyY2VzL2FuaW1hdGVkLWdp
Zi13aXRoLW9mZnNldHMuZ2lmIik7CisgICAgQVNTRVJUX1RSVUUoZGF0YS5nZXQoKSk7CisKKyAg
ICBzaXplX3QgZnJhbWVDb3VudCA9IDA7CisgICAgc2l6ZV90IGZyYW1lc0RlY29kZWQgPSAwOwor
CisgICAgLy8gUGFzcyBkYXRhIHRvIGRlY29kZXIgYnl0ZSBieSBieXRlLgorICAgIGZvciAodW5z
aWduZWQgbGVuZ3RoID0gMTsgbGVuZ3RoIDw9IGRhdGEtPnNpemUoKTsgKytsZW5ndGgpIHsKKyAg
ICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdGVtcERhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0
ZShkYXRhLT5kYXRhKCksIGxlbmd0aCk7CisgICAgICAgIGRlY29kZXItPnNldERhdGEodGVtcERh
dGEuZ2V0KCksIGxlbmd0aCA9PSBkYXRhLT5zaXplKCkpOworCisgICAgICAgIEVYUEVDVF9MRShm
cmFtZUNvdW50LCBkZWNvZGVyLT5mcmFtZUNvdW50KCkpOworICAgICAgICBmcmFtZUNvdW50ID0g
ZGVjb2Rlci0+ZnJhbWVDb3VudCgpOworCisgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lID0gZGVj
b2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KGZyYW1lQ291bnQgLSAxKTsKKyAgICAgICAgaWYgKGZy
YW1lICYmIGZyYW1lLT5zdGF0dXMoKSA9PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlICYmIGZy
YW1lc0RlY29kZWQgPCBmcmFtZUNvdW50KQorICAgICAgICAgICAgKytmcmFtZXNEZWNvZGVkOwor
ICAgIH0KKworICAgIEVYUEVDVF9FUSg1dSwgZGVjb2Rlci0+ZnJhbWVDb3VudCgpKTsKKyAgICBF
WFBFQ1RfRVEoNXUsIGZyYW1lc0RlY29kZWQpOworICAgIEVYUEVDVF9FUShjQW5pbWF0aW9uTG9v
cEluZmluaXRlLCBkZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSk7Cit9CisKKy8vIFNlY29uZCBm
cmFtZSBpbiB0aGUgZmlsZSBpcyBicm9rZW4gYnV0IHRlc3QgdGhhdCBmaXJzdCBmcmFtZSBjYW4g
YmUgZGVjb2RlZC4KK1RFU1QoR0lGSW1hZ2VEZWNvZGVyVGVzdCwgYnJva2VuU2Vjb25kRnJhbWUp
Cit7CisgICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihuZXcgR0lG
SW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIEltYWdlU291
cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CisKKyAgICBSZWZQdHI8U2hhcmVk
QnVmZmVyPiBkYXRhID0gcmVhZEZpbGUoIi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2Rh
dGEvYnJva2VuLmdpZiIpOworICAgIEFTU0VSVF9UUlVFKGRhdGEuZ2V0KCkpOworICAgIGRlY29k
ZXItPnNldERhdGEoZGF0YS5nZXQoKSwgdHJ1ZSk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIGRlY29k
ZXItPmZyYW1lQ291bnQoKSk7CisKKyAgICBJbWFnZUZyYW1lKiBmcmFtZSA9IGRlY29kZXItPmZy
YW1lQnVmZmVyQXRJbmRleCgwKTsKKyAgICBFWFBFQ1RfRVEoSW1hZ2VGcmFtZTo6RnJhbWVDb21w
bGV0ZSwgZnJhbWUtPnN0YXR1cygpKTsKKyAgICBFWFBFQ1RfRVEoMTYsIGZyYW1lLT5nZXRTa0Jp
dG1hcCgpLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgxNiwgZnJhbWUtPmdldFNrQml0bWFwKCku
aGVpZ2h0KCkpOworCisgICAgZnJhbWUgPSBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMSk7
CisgICAgRVhQRUNUX0ZBTFNFKGZyYW1lKTsKKyAgICBFWFBFQ1RfRVEoY0FuaW1hdGlvbkxvb3BP
bmNlLCBkZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvYnJva2VuLmdpZiBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9icm9rZW4uZ2lmCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmUzYTdjNGViZTdkOWJlYTk4Mzk3NWY4MjlhMmVkYzhlNTVkMWY3NmQKR0lUIGJpbmFyeSBwYXRj
aApsaXRlcmFsIDkwNgp6Y21aP3diaEVIYjZrcmZ3X3xDdzxrZH02YVZKNDZzMSowSl8weipMWUtl
d04yTlUqYkdmVUErNzBXJXtvMm8hJl4KenV6KjVCMlNrOWYyP0t7TDEyY3o9JEEkJDVuPm1FRlZv
cSNXYyhgM2EqPXZyKyN6alhQODV1ITM/JXc0R1lQIURgCktPJmNSVlpQb3lQKEl2ZUEKCmxpdGVy
YWwgMApIY21WP2QwMDAwMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189328</attachid>
            <date>2013-02-20 08:43:32 -0800</date>
            <delta_ts>2013-02-20 08:46:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109662-20130220083953.patch</filename>
            <type>text/plain</type>
            <size>36169</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyODUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjc1Y2IzYjYxMzgyYTk1
MGY1MTNlYzZmMzE3MTgwNjZmMmRhNWVjZC4uMWRhZTk1YTg2NzQxODk2YzUxM2E3N2M3OTU3OWQy
ODVmNTg0ZGEwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU5IEBACisyMDEzLTAyLTIwICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgdG8g
cmVhZCBmcm9tIHNvdXJjZSBkYXRhIGRpcmVjdGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk2NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBwYXRjaCB0byBpbXByb3Zl
IEdJRiBpbWFnZSBkZWNvZGluZy4KKworICAgICAgICBHSUZJbWFnZVJlYWRlciBoYXMgYW4gaW50
ZXJuYWwgMjU2IGJ5dGVzIGJ1ZmZlciB0byBzYXZpbmcgaW5jb21pbmcKKyAgICAgICAgYnl0ZXMu
IFRoaXMgbWVjaGFuaXNtIGlzIG91dC1kYXRlZCBiZWNhdXNlIFdlYktpdCBob2xkcyB0aGUgZW50
aXJlCisgICAgICAgIGZpbGUgaW4gbWVtb3J5IGFuZCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGhv
bGQgZGF0YSBpbiBhbiBpbnRlcm1lZGlhdGUKKyAgICAgICAgYnVmZmVyLgorCisgICAgICAgIFRo
aXMgaXMgYWxzbyBhIGJsb2NrZXIgZm9yIGxhdGVyIHdvcmsgdG8gcGFyc2UgYW5kIGRlY29kZSBH
SUYKKyAgICAgICAgaW5jcmVtZW50YWxseS4KKworICAgICAgICBUaGlzIGNoYW5nZSByZW1vdmVk
IHRoZSBpbXRlcm1lZGlhdGUgJ2hvbGQnIGJ1ZmZlciBhbmQgdXNlcyBhbiBpbmRleAorICAgICAg
ICBmb3IgZGF0YSBwb3NpdGlvbiB0byBrZWVwIHRyYWNrIG9mIHBhcnNpbmcgb2YgdGhlIEdJRiBm
aWxlLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGlzIHRlc3RlZCBieToKKworICAgICAgICBMYXlv
dXQgdGVzdHMKKyAgICAgICAgQWxsIHRlc3RzIHBhc3NlZCB1bmRlciBmYXN0L2ltYWdlcy4KKwor
ICAgICAgICBVbml0IHRlc3RzCisgICAgICAgIEFkZGVkIEdJRkltYWdlRGVjb2RlclRlc3QgZm9y
IENocm9taXVtLgorCisgICAgICAgIExvY2FsIHRlc3RpbmcKKyAgICAgICAgSSB0ZXN0ZWQgdGhp
cyBpbXBsZW1lbnRhdGlvbiBhZ2FpbnN0IGEgc2V0IG9mIDUwayBHSUYgaW1hZ2VzIGFuZAorICAg
ICAgICB0aGVyZSdzIG5vIGNyYXNoZXMgYW5kIHByb2R1Y2VzIGJpdC1leGFjdCByZXN1bHRzIGFz
IHByZXZpb3VzIGNvZGUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYv
R0lGSW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6
c2V0RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OmRlY29kZSk6CisgICAgICAgICogcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcDoKKyAgICAgICAgKEdJ
RkltYWdlUmVhZGVyOjpkb0xaVyk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlKToK
KyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbCk6CisgICAgICAgIChHSUZJ
bWFnZVJlYWRlcjo6c2V0UmVtYWluaW5nQnl0ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0
KToKKyAgICAgICAgKEdJRkZyYW1lQ29udGV4dDo6R0lGRnJhbWVDb250ZXh0KToKKyAgICAgICAg
KEdJRkZyYW1lQ29udGV4dDo6fkdJRkZyYW1lQ29udGV4dCk6CisgICAgICAgIChHSUZJbWFnZVJl
YWRlcjo6R0lGSW1hZ2VSZWFkZXIpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6On5HSUZJbWFn
ZVJlYWRlcik6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6c2V0RGF0YSk6CisgICAgICAgIChH
SUZJbWFnZVJlYWRlcik6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6Z2xvYmFsQ29sb3JtYXAp
OgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmxvY2FsQ29sb3JtYXApOgorICAgICAgICAoR0lG
SW1hZ2VSZWFkZXI6OmxvY2FsQ29sb3JtYXBTaXplKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVy
OjpkYXRhKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpjb2xvcm1hcCk6CisKIDIwMTMtMDIt
MTMgIEtlbnRhcm8gSGFyYSAgPGhhcmFrZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtWOF0g
R2VuZXJhdGUgd3JhcHBlciBtZXRob2RzIGZvciBjdXN0b20gbWV0aG9kcwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCBhMWFmYWZiZmU2OTdmY2JjZGI0ODlhNDJhM2RhNzBiMGVlMTA4MzFi
Li5jYmNmYTA4OTUzYWZiZDU5NWFlNDQ1ZjhlZmEzZWQyMDNmOTI3NTU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDEzLTAyLTIwICBBbHBoYSBMYW0gIDxo
Y2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgdG8gcmVhZCBmcm9t
IHNvdXJjZSBkYXRhIGRpcmVjdGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDk2NjIKKworICAgICAgICBBZGRlZCB0aGUgZm9sbG93aW5nIHVuaXQg
dGVzdHMgdG8gdGVzdCBuZXcgbG9naWMgaW4gR0lGSW1hZ2VEZWNvZGVyOgorCisgICAgICAgIEdJ
RkltYWdlRGVjb2RlclRlc3QuZGVjb2RlVHdvRnJhbWVzCisgICAgICAgIFRlc3QgdGhhdCBpdCBj
YW4gZGVjb2RlIGEgbXVsdGktZnJhbWUgR0lGIGltYWdlIGNvcnJlY3RseS4KKworICAgICAgICBH
SUZJbWFnZURlY29kZXJUZXN0LnBhcnNlQW5kRGVjb2RlCisgICAgICAgIEZpcnN0IHBlcmZvcm0g
YSBwYXJzZSBvcGVyYXRpb24gYW5kIHRoZW4gYSBkZWNvZGUgb3BlcmF0aW9uLiBFeHBlY3QKKyAg
ICAgICAgdGhhdCBwYXJzZSBhbmQgZGVjb2RlIG9wZXJhdGVzIGNvcnJlY3RseS4KKworICAgICAg
ICBHSUZJbWFnZURlY29kZXJUZXN0LnBhcnNlQnl0ZUJ5Qnl0ZQorICAgICAgICBUZXN0IHRoYXQg
bXVsdGktZnJhbWUgR0lGIGltYWdlIGNhbiBiZSBwYXJzZWQgY29ycmVjdGx5IGJ5dGUgYnkgYnl0
ZS4KKworICAgICAgICBHSUZJbWFnZURlY29kZXJUZXN0LnBhcnNlQW5kRGVjb2RlQnl0ZUJ5Qnl0
ZQorICAgICAgICBSdW4gYSBsb29wIHRvIGZlZWQgZGVjb2RlciBieXRlIGJ5IGJ5dGUsIHBlcmZv
cm0gYSBwYXJzZSBhbmQgdGhlbgorICAgICAgICBkZWNvZGUgb3BlcmF0aW9uIGFuZCBtYWtlIHN1
cmUgZnJhbWVzIGFyZSBkZWNvZGVkIGNvcnJlY3RseS4KKworICAgICAgICBHSUZJbWFnZURlY29k
ZXJUZXN0LmJyb2tlblNlY29uZEZyYW1lCisgICAgICAgIERlY29kZSBhIEdJRiBpbWFnZSB3aXRo
IHNlY29uZCBmcmFtZSBicm9rZW4uIEV4cGVjdCB0aGF0IHRoZSBmaXJzdAorICAgICAgICBmcmFt
ZSBjYW4gYmUgZGVjb2RlZCBjb3JyZWN0bHkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAg
ICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0dJRkltYWdlRGVjb2RlclRlc3Qu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChXZWJLaXQ6OnJlYWRGaWxl
KToKKyAgICAgICAgKFdlYktpdDo6VEVTVCk6CisgICAgICAgICogdGVzdHMvZGF0YS9icm9rZW4u
Z2lmOiBBZGRlZC4KKwogMjAxMy0wMi0xMyAgTWF4IFZ1am92aWMgIDxtdnVqb3ZpY0BhZG9iZS5j
b20+CiAKICAgICAgICAgW0NTUyBGaWx0ZXJzXSBSZWZhY3RvciBmaWx0ZXIgb3V0c2V0cyBpbnRv
IGEgY2xhc3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKaW5kZXggMGNiMjI4ODVjZWIzZDZi
MTZiMjM1ZjgxOWI5OGEyNWI5M2JhZmQ4Yi4uMDFhNDZjYjI0YzAxYjM2NGE3MDViMTUxYTZmMTJh
NDU2NTdiOGE2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAKQEAgLTUwLDYgKzUwLDkg
QEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZmVyKiBkYXRhLCBib29s
IGFsbERhdGFSZWNlaXZlZCkKICAgICBpZiAoZmFpbGVkKCkpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIGlmIChtX3JlYWRlcikKKyAgICAgICAgbV9yZWFkZXItPnNldERhdGEoZGF0YSk7CisKICAg
ICBJbWFnZURlY29kZXI6OnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKIAogICAgIC8v
IFdlIG5lZWQgdG8gcmVzY2FuIHRoZSBmcmFtZSBjb3VudCwgYXMgdGhlIG5ldyBkYXRhIG1heSBo
YXZlIGNoYW5nZWQgaXQuCkBAIC04NSw3ICs4OCw4IEBAIHNpemVfdCBHSUZJbWFnZURlY29kZXI6
OmZyYW1lQ291bnQoKQogICAgICAgICAvLyBhbGwgdGhlIGRhdGEuICBOb3RlIHRoYXQgdGhpcyBp
cyBubyB3b3JzZSB0aGFuIHdoYXQgSW1hZ2VJTyBkb2VzIG9uCiAgICAgICAgIC8vIE1hYyByaWdo
dCBub3cgKGl0IGFsc28gY3Jhd2xzIGFsbCB0aGUgZGF0YSBhZ2FpbikuCiAgICAgICAgIEdJRklt
YWdlUmVhZGVyIHJlYWRlcigwKTsKLSAgICAgICAgcmVhZGVyLnJlYWQoKGNvbnN0IHVuc2lnbmVk
IGNoYXIqKW1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSwgR0lGRnJhbWVDb3VudFF1ZXJ5
LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLTEpKTsKKyAgICAgICAgcmVhZGVyLnNldERhdGEobV9k
YXRhKTsKKyAgICAgICAgcmVhZGVyLmRlY29kZShHSUZGcmFtZUNvdW50UXVlcnksIHN0YXRpY19j
YXN0PHVuc2lnbmVkPigtMSkpOwogICAgICAgICBtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JG
cmFtZUNvdW50ID0gdHJ1ZTsKICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZShyZWFk
ZXIuaW1hZ2VzQ291bnQoKSk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVhZGVyLmlt
YWdlc0NvdW50KCk7ICsraSkKQEAgLTIxNiw4ICsyMjAsOCBAQCBib29sIEdJRkltYWdlRGVjb2Rl
cjo6aGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgY2hhciogcm93
QnVmZgogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvbG9yTWFwOwogICAgIHVuc2lnbmVkIGNv
bG9yTWFwU2l6ZTsKICAgICBpZiAoZnJhbWVDb250ZXh0LT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVk
KSB7Ci0gICAgICAgIGNvbG9yTWFwID0gZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFwOwotICAg
ICAgICBjb2xvck1hcFNpemUgPSAodW5zaWduZWQpZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFw
U2l6ZTsKKyAgICAgICAgY29sb3JNYXAgPSBtX3JlYWRlci0+bG9jYWxDb2xvcm1hcChmcmFtZUNv
bnRleHQpOworICAgICAgICBjb2xvck1hcFNpemUgPSBtX3JlYWRlci0+bG9jYWxDb2xvcm1hcFNp
emUoZnJhbWVDb250ZXh0KTsKICAgICB9IGVsc2UgewogICAgICAgICBjb2xvck1hcCA9IG1fcmVh
ZGVyLT5nbG9iYWxDb2xvcm1hcCgpOwogICAgICAgICBjb2xvck1hcFNpemUgPSBtX3JlYWRlci0+
Z2xvYmFsQ29sb3JtYXBTaXplKCk7CkBAIC0zMTksMTIgKzMyMywxNCBAQCB2b2lkIEdJRkltYWdl
RGVjb2Rlcjo6ZGVjb2RlKHVuc2lnbmVkIGhhbHRBdEZyYW1lLCBHSUZRdWVyeSBxdWVyeSkKICAg
ICBpZiAoZmFpbGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9yZWFkZXIpCisg
ICAgaWYgKCFtX3JlYWRlcikgewogICAgICAgICBtX3JlYWRlciA9IGFkb3B0UHRyKG5ldyBHSUZJ
bWFnZVJlYWRlcih0aGlzKSk7CisgICAgICAgIG1fcmVhZGVyLT5zZXREYXRhKG1fZGF0YSk7Cisg
ICAgfQogCiAgICAgLy8gSWYgd2UgY291bGRuJ3QgZGVjb2RlIHRoZSBpbWFnZSBidXQgd2UndmUg
cmVjZWl2ZWQgYWxsIHRoZSBkYXRhLCBkZWNvZGluZwogICAgIC8vIGhhcyBmYWlsZWQuCi0gICAg
aWYgKCFtX3JlYWRlci0+cmVhZCgoY29uc3QgdW5zaWduZWQgY2hhciopbV9kYXRhLT5kYXRhKCkg
KyBtX3JlYWRPZmZzZXQsIG1fZGF0YS0+c2l6ZSgpIC0gbV9yZWFkT2Zmc2V0LCBxdWVyeSwgaGFs
dEF0RnJhbWUpICYmIGlzQWxsRGF0YVJlY2VpdmVkKCkpCisgICAgaWYgKCFtX3JlYWRlci0+ZGVj
b2RlKHF1ZXJ5LCBoYWx0QXRGcmFtZSkgJiYgaXNBbGxEYXRhUmVjZWl2ZWQoKSkKICAgICAgICAg
c2V0RmFpbGVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCmluZGV4IDY5OWQzYzQ3
ZmI0NGFmMmM4MjRmYTU5YjAzYjQyZjUxMDY2MGVlZmIuLjgxM2RjMGFiNmE4MjAzZDIyZGZmYzNj
NWE4MjAwODg3MzZmY2Y3YTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcApAQCAtOTAsNyAr
OTAsNyBAQCB1c2luZyBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI7CiAvLyBUaGlzIGJ1ZmZlciBp
cyBvbmx5IG5lZWRlZCB0byBjb3B5IGxlZnQtb3ZlciBkYXRhIGZyb20gb25lIEdpZldyaXRlIGNh
bGwgdG8gdGhlIG5leHQKICNkZWZpbmUgR0VUTihuLCBzKSBcCiAgICAgZG8geyBcCi0gICAgICAg
IG1fYnl0ZXNUb0NvbnN1bWUgPSAobik7IFwKKyAgICAgICAgbV9ieXRlc0luTmV4dEJsb2NrID0g
KG4pOyBcCiAgICAgICAgIG1fc3RhdGUgPSAocyk7IFwKICAgICB9IHdoaWxlICgwKQogCkBAIC0y
MDEsNyArMjAxLDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6b3V0cHV0Um93KCkKIH0KIAogLy8g
UGVyZm9ybSBMZW1wZWwtWml2LVdlbGNoIGRlY29kaW5nLgotYm9vbCBHSUZJbWFnZVJlYWRlcjo6
ZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciAqcSkKK2Jvb2wgR0lGSW1hZ2VSZWFkZXI6OmRvTFpX
KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJsb2NrLCB1bnNpZ25lZCBieXRlc0luQmxvY2spCiB7CiAg
ICAgaWYgKCFtX2ZyYW1lQ29udGV4dCkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMTUsNyAr
MjE1LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciAq
cSkKICAgICAvLyBiYWNrIGludG8gdGhlIEdJRiBkZWNvZGVyIHN0cnVjdHVyZSB3aGVuIHdlIGV4
aXQuCiAgICAgaW50IGF2YWlsID0gbV9mcmFtZUNvbnRleHQtPmF2YWlsOwogICAgIGludCBiaXRz
ID0gbV9mcmFtZUNvbnRleHQtPmJpdHM7Ci0gICAgaW50IGNudCA9IG1fY291bnQ7CisgICAgaW50
IGNudCA9IGJ5dGVzSW5CbG9jazsKICAgICBpbnQgY29kZXNpemUgPSBtX2ZyYW1lQ29udGV4dC0+
Y29kZXNpemU7CiAgICAgaW50IGNvZGVtYXNrID0gbV9mcmFtZUNvbnRleHQtPmNvZGVtYXNrOwog
ICAgIGludCBvbGRjb2RlID0gbV9mcmFtZUNvbnRleHQtPm9sZGNvZGU7CkBAIC0yNDksNyArMjQ5
LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciAqcSkK
ICAgICAgICAgICAgIGdvdG8gRU5EOyBcCiAgICAgfSB3aGlsZSAoMCkKIAotICAgIGZvciAoY2gg
PSBxOyBjbnQtLSA+IDA7IGNoKyspIHsKKyAgICBmb3IgKGNoID0gYmxvY2s7IGNudC0tID4gMDsg
Y2grKykgewogICAgICAgICAvLyBGZWVkIHRoZSBuZXh0IGJ5dGUgaW50byB0aGUgZGVjb2Rlcidz
IDMyLWJpdCBpbnB1dCBidWZmZXIuCiAgICAgICAgIGRhdHVtICs9ICgoaW50KSAqY2gpIDw8IGJp
dHM7CiAgICAgICAgIGJpdHMgKz0gODsKQEAgLTM0NCw3ICszNDQsNiBAQCBFTkQ6CiAgICAgbV9m
cmFtZUNvbnRleHQtPmJpdHMgPSBiaXRzOwogICAgIG1fZnJhbWVDb250ZXh0LT5jb2Rlc2l6ZSA9
IGNvZGVzaXplOwogICAgIG1fZnJhbWVDb250ZXh0LT5jb2RlbWFzayA9IGNvZGVtYXNrOwotICAg
IG1fY291bnQgPSBjbnQ7CiAgICAgbV9mcmFtZUNvbnRleHQtPm9sZGNvZGUgPSBvbGRjb2RlOwog
ICAgIG1fZnJhbWVDb250ZXh0LT5maXJzdGNoYXIgPSBmaXJzdGNoYXI7CiAgICAgbV9mcmFtZUNv
bnRleHQtPmRhdHVtID0gZGF0dW07CkBAIC0zNTQsNjggKzM1Myw1NCBAQCBFTkQ6CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKK2Jvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZShHSUZJbWFnZURlY29k
ZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCBpbnQgaGFsdEF0RnJhbWUpCit7CisgICAgaWYgKG1fYnl0ZXNS
ZWFkID4gbV9kYXRhLT5zaXplKCkpCisgICAgICAgIHJldHVybiBtX2NsaWVudC0+c2V0RmFpbGVk
KCk7CisgICAgcmV0dXJuIGRlY29kZUludGVybmFsKG1fYnl0ZXNSZWFkLCBtX2RhdGEtPnNpemUo
KSAtIG1fYnl0ZXNSZWFkLCBxdWVyeSwgaGFsdEF0RnJhbWUpOworfQogCiAvLyBQcm9jZXNzIGRh
dGEgYXJyaXZpbmcgZnJvbSB0aGUgc3RyZWFtIGZvciB0aGUgZ2lmIGRlY29kZXIuCi1ib29sIEdJ
RkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVu
LCBHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSkK
K2Jvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVybmFsKHVuc2lnbmVkIGRhdGFQb3NpdGlv
biwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25l
ZCBoYWx0QXRGcmFtZSkKIHsKICAgICBpZiAoIWxlbikgewogICAgICAgICAvLyBObyBuZXcgZGF0
YSBoYXMgY29tZSBpbiBzaW5jZSB0aGUgbGFzdCBjYWxsLCBqdXN0IGlnbm9yZSB0aGlzIGNhbGwu
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIg
KnEgPSBidWY7Ci0KLSAgICAvLyBBZGQgd2hhdCB3ZSBoYXZlIHNvIGZhciB0byB0aGUgYmxvY2su
Ci0gICAgLy8gSWYgcHJldmlvdXMgY2FsbCB0byBtZSBsZWZ0IHNvbWV0aGluZyBpbiB0aGUgaG9s
ZCBmaXJzdCBjb21wbGV0ZSBjdXJyZW50IGJsb2NrCi0gICAgLy8gb3IgaWYgd2UgYXJlIGZpbGxp
bmcgdGhlIGNvbG9ybWFwcywgZmlyc3QgY29tcGxldGUgdGhlIGNvbG9ybWFwLgotICAgIHVuc2ln
bmVkIGNoYXIqIHAgPSAwOwotICAgIGlmIChtX3N0YXRlID09IEdJRkdsb2JhbENvbG9ybWFwKQot
ICAgICAgICBwID0gbV9nbG9iYWxDb2xvcm1hcDsKLSAgICBlbHNlIGlmIChtX3N0YXRlID09IEdJ
RkltYWdlQ29sb3JtYXApCi0gICAgICAgIHAgPSBtX2ZyYW1lQ29udGV4dCA/IG1fZnJhbWVDb250
ZXh0LT5sb2NhbENvbG9ybWFwIDogMDsKLSAgICBlbHNlIGlmIChtX2J5dGVzSW5Ib2xkKQotICAg
ICAgICBwID0gbV9ob2xkOwotICAgIGVsc2UKLSAgICAgICAgcCA9IDA7Ci0KLSAgICBpZiAocCB8
fCAobV9zdGF0ZSA9PSBHSUZHbG9iYWxDb2xvcm1hcCkgfHwgKG1fc3RhdGUgPT0gR0lGSW1hZ2VD
b2xvcm1hcCkpIHsKLSAgICAgICAgLy8gQWRkIHdoYXQgd2UgaGF2ZSBzb2ZhciB0byB0aGUgYmxv
Y2sKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbGVuIDwgbV9ieXRlc1RvQ29uc3VtZSA/IGxl
biA6IG1fYnl0ZXNUb0NvbnN1bWU7Ci0gICAgICAgIGlmIChwKQotICAgICAgICAgICAgbWVtY3B5
KHAgKyBtX2J5dGVzSW5Ib2xkLCBidWYsIGxlbmd0aCk7Ci0KLSAgICAgICAgaWYgKGxlbmd0aCA8
IG1fYnl0ZXNUb0NvbnN1bWUpIHsKLSAgICAgICAgICAgIC8vIE5vdCBlbm91Z2ggaW4gJ2J1Zicg
dG8gY29tcGxldGUgY3VycmVudCBibG9jaywgZ2V0IG1vcmUKLSAgICAgICAgICAgIG1fYnl0ZXNJ
bkhvbGQgKz0gbGVuZ3RoOwotICAgICAgICAgICAgbV9ieXRlc1RvQ29uc3VtZSAtPSBsZW5ndGg7
Ci0gICAgICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICAgICAgbV9jbGllbnQtPmRl
Y29kaW5nSGFsdGVkKDApOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0K
LSAgICAgICAgLy8gUmVzZXQgaG9sZCBidWZmZXIgY291bnQKLSAgICAgICAgbV9ieXRlc0luSG9s
ZCA9IDA7CisgICAgLy8gSWYgdGhlcmUncyBub3QgZW5vdWdoIGJ5dGVzIGZvciB0aGlzIGJsb2Nr
IHRoZW4gcmV0dXJuLgorICAgIGlmIChsZW4gPCBtX2J5dGVzSW5OZXh0QmxvY2spCisgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICAvLyBQb2ludCAncScgdG8gY29tcGxldGUgYmxvY2sg
aW4gaG9sZCAob3IgaW4gY29sb3JtYXApCi0gICAgICAgIHEgPSBwOwotICAgIH0KKyAgICAvLyBW
YXJpYWJsZXM6CisgICAgLy8gcQorICAgIC8vICAgUG9pbnRlciB0byB0aGUgY3VycmVudCBibG9j
ay4KKyAgICAvLyAKKyAgICAvLyBtX2J5dGVzSW5OZXh0QmxvY2sKKyAgICAvLyAgIE51bWJlciBv
ZiBieXRlcyBpbiB0aGUgbmV4dCBibG9jay4gSXQncyB2YWx1ZSBpcyB1cGRhdGVkIGluIGVhY2gg
aXRlcmF0aW9uIGFmdGVyCisgICAgLy8gICBwcm9jZXNzaW5nIHRoZSBjdXJyZW50IGJsb2NrLgor
ICAgIC8vCisgICAgLy8gZGF0YVBvc2l0aW9uCisgICAgLy8gICBJbmRleCB0byB0aGUgZmlyc3Qg
Ynl0ZSBpbiAnbV9kYXRhJyBmb3IgdGhlIGN1cnJlbnQgYmxvY2suCisgICAgLy8KKyAgICAvLyBs
ZW4KKyAgICAvLyAgIE51bWJlciBvZiBieXRlcyBsZWZ0IGluIGlucHV0IGJ1ZmZlciBmcm9tIHBv
c2l0aW9uICdkYXRhUG9zaXRpb24nLgorCisgICAgLy8gVGhpcyBsb29wIHJlYWRzIGFzIG1hbnkg
YmxvY2tzIGZyb20gfG1fZGF0YXwgYXMgcG9zc2libGUuCisgICAgLy8gQmVnaW5uaW5nIG9mIGVh
Y2ggaXRlcmF0aW9uIGRhdGFQb3NpdGlvbiB3aWxsIGJlIGFkdmFuY2VkIG1fYnl0ZXNJbk5leHRC
bG9jayB0byBwb2ludAorICAgIC8vIHRvIHRoZSBuZXh0IGJsb2NrLCBsZW4gaXMgZGVjcmVtZW50
ZWQgYWNjb3JkaW5nbHkuCisgICAgd2hpbGUgKGxlbiA+PSBtX2J5dGVzSW5OZXh0QmxvY2spIHsK
KyAgICAgICAgLy8gRklYTUU6IFJlbmFtZSB0aGlzIHZhcmlhYmxlIHRvIGN1cnJlbnRCbG9jay4K
KyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogcSA9IGRhdGEoZGF0YVBvc2l0aW9uKTsKIAot
ICAgIC8vIEludmFyaWFudDoKLSAgICAvLyAgICAncScgaXMgc3RhcnQgb2YgY3VycmVudCB0byBi
ZSBwcm9jZXNzZWQgYmxvY2sgKGhvbGQsIGNvbG9ybWFwIG9yIGJ1ZikKLSAgICAvLyAgICAnbV9i
eXRlc1RvQ29uc3VtZScgaXMgbnVtYmVyIG9mIGJ5dGVzIHRvIGNvbnN1bWUgZnJvbSAnYnVmJwot
ICAgIC8vICAgICdidWYnIHBvaW50cyB0byB0aGUgYnl0ZXMgdG8gYmUgY29uc3VtZWQgZnJvbSB0
aGUgaW5wdXQgYnVmZmVyCi0gICAgLy8gICAgJ2xlbicgaXMgbnVtYmVyIG9mIGJ5dGVzIGxlZnQg
aW4gaW5wdXQgYnVmZmVyIGZyb20gcG9zaXRpb24gJ2J1ZicuCi0gICAgLy8gICAgQXQgZW50cmFu
Y2Ugb2YgdGhlIGZvciBsb29wIHdpbGwgJ2J1Zicgd2lsbCBiZSBtb3ZlZCAnbV9ieXRlc1RvQ29u
c3VtZScKLSAgICAvLyAgICB0byBwb2ludCB0byBuZXh0IGJ1ZmZlciwgJ2xlbicgaXMgYWRqdXN0
ZWQgYWNjb3JkaW5nbHkuCi0gICAgLy8gICAgU28gdGhhdCBuZXh0IHJvdW5kIGluIGZvciBsb29w
LCBxIGdldHMgcG9pbnRlZCB0byB0aGUgbmV4dCBidWZmZXIuCi0gICAgZm9yICg7bGVuID49IG1f
Ynl0ZXNUb0NvbnN1bWU7IHEgPSBidWYpIHsKICAgICAgICAgLy8gRWF0IHRoZSBjdXJyZW50IGJs
b2NrIGZyb20gdGhlIGJ1ZmZlciwgcSBrZWVwcyBwb2ludGVkIGF0IGN1cnJlbnQgYmxvY2suCi0g
ICAgICAgIGJ1ZiArPSBtX2J5dGVzVG9Db25zdW1lOwotICAgICAgICBsZW4gLT0gbV9ieXRlc1Rv
Q29uc3VtZTsKKyAgICAgICAgZGF0YVBvc2l0aW9uICs9IG1fYnl0ZXNJbk5leHRCbG9jazsKKyAg
ICAgICAgbGVuIC09IG1fYnl0ZXNJbk5leHRCbG9jazsKIAogICAgICAgICBzd2l0Y2ggKG1fc3Rh
dGUpIHsKICAgICAgICAgY2FzZSBHSUZMWlc6Ci0gICAgICAgICAgICBpZiAoIWRvTFpXKHEpKQor
ICAgICAgICAgICAgLy8gbV9ieXRlc0luTmV4dEJsb2NrIGlzIHRoZSBjdXJyZW50IGJsb2NrIHNp
emUgYmVjYXVzZSBpdCBoYXNuJ3QgYmVlbiB1cGRhdGVkLgorICAgICAgICAgICAgaWYgKCFkb0xa
VyhxLCBtX2J5dGVzSW5OZXh0QmxvY2spKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsg
Ly8gSWYgZG9MWlcoKSBlbmNvdW50ZXJlZCBhbiBlcnJvciwgaXQgaGFzIGFscmVhZHkgY2FsbGVk
IG1fY2xpZW50LT5zZXRGYWlsZWQoKS4KICAgICAgICAgICAgIEdFVE4oMSwgR0lGU3ViQmxvY2sp
OwogICAgICAgICAgICAgYnJlYWs7CkBAIC00ODgsMjMgKzQ3MywxOSBAQCBib29sIEdJRkltYWdl
UmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBHSUZJ
bWFnZURlY29kZQogCiAgICAgICAgICAgICBpZiAoKHFbNF0gJiAweDgwKSAmJiBtX2dsb2JhbENv
bG9ybWFwU2l6ZSA+IDApIHsgLyogZ2xvYmFsIG1hcCAqLwogICAgICAgICAgICAgICAgIC8vIEdl
dCB0aGUgZ2xvYmFsIGNvbG9ybWFwCi0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2l6
ZSA9IDMqbV9nbG9iYWxDb2xvcm1hcFNpemU7CisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgZ2xvYmFsQ29sb3JtYXBCeXRlcyA9IDMgKiBtX2dsb2JhbENvbG9ybWFwU2l6ZTsKKyAgICAg
ICAgICAgICAgICBtX2dsb2JhbENvbG9ybWFwUG9zaXRpb24gPSBkYXRhUG9zaXRpb247CiAKLSAg
ICAgICAgICAgICAgICAvLyBNYWxsb2MgdGhlIGNvbG9yIG1hcCwgYnV0IG9ubHkgaWYgd2UncmUg
bm90IGp1c3QgY291bnRpbmcgZnJhbWVzLgotICAgICAgICAgICAgICAgIGlmIChxdWVyeSAhPSBH
SUZJbWFnZURlY29kZXI6OkdJRkZyYW1lQ291bnRRdWVyeSkKLSAgICAgICAgICAgICAgICAgICAg
bV9nbG9iYWxDb2xvcm1hcCA9IG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdOwotCi0gICAgICAgICAg
ICAgICAgaWYgKGxlbiA8IHNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVXNlICdob2xk
JyBwYXR0ZXJuIHRvIGdldCB0aGUgZ2xvYmFsIGNvbG9ybWFwCi0gICAgICAgICAgICAgICAgICAg
IEdFVE4oc2l6ZSwgR0lGR2xvYmFsQ29sb3JtYXApOworICAgICAgICAgICAgICAgIGlmIChsZW4g
PCBnbG9iYWxDb2xvcm1hcEJ5dGVzKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5vdCBlbm91
Z2ggYnl0ZXMgdG8gcmVhZCB0aGUgZW50aXJlIGdsb2JhbCBjb2xvcm1hcCB0aGlzIHRpbWUgc28K
KyAgICAgICAgICAgICAgICAgICAgLy8gcmVhZCBpdCBhcyB0aGUgbmV4dCBibG9jay4KKyAgICAg
ICAgICAgICAgICAgICAgR0VUTihnbG9iYWxDb2xvcm1hcEJ5dGVzLCBHSUZHbG9iYWxDb2xvcm1h
cCk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgICAgIC8vIENvcHkgZXZlcnl0aGluZyBhbmQgZ28gZGlyZWN0bHkgdG8gR0lGSW1h
Z2Vfc3RhcnQuCi0gICAgICAgICAgICAgICAgaWYgKG1fZ2xvYmFsQ29sb3JtYXApCi0gICAgICAg
ICAgICAgICAgICAgIG1lbWNweShtX2dsb2JhbENvbG9ybWFwLCBidWYsIHNpemUpOwotICAgICAg
ICAgICAgICAgIGJ1ZiArPSBzaXplOwotICAgICAgICAgICAgICAgIGxlbiAtPSBzaXplOworICAg
ICAgICAgICAgICAgIC8vIFRoZSBlbnRpcmUgZ2xvYmFsIGNvbG9ybWFwIGlzIHJlY2VpdmVkIHNv
IGFkdmFuY2UgcmVhZCBwb3NpdGlvbi4KKyAgICAgICAgICAgICAgICBkYXRhUG9zaXRpb24gKz0g
Z2xvYmFsQ29sb3JtYXBCeXRlczsKKyAgICAgICAgICAgICAgICBsZW4gLT0gZ2xvYmFsQ29sb3Jt
YXBCeXRlczsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgR0VUTigxLCBHSUZJbWFnZVN0
YXJ0KTsKQEAgLTUxNiw3ICs0OTcsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0
IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURlY29kZQogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBHSUZHbG9iYWxDb2xvcm1hcDogewotICAgICAgICAgICAgLy8g
RXZlcnl0aGluZyBpcyBhbHJlYWR5IGNvcGllZCBpbnRvIG1fZ2xvYmFsQ29sb3JtYXAKKyAgICAg
ICAgICAgIC8vIERvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcsIHByb2NlZWQgdG8gcmVhZCB0aGUg
aW1hZ2UuCiAgICAgICAgICAgICBHRVROKDEsIEdJRkltYWdlU3RhcnQpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTU0NSw3ICs1MjYsNyBAQCBib29sIEdJRkltYWdlUmVhZGVy
OjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURl
Y29kZQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHSUZFeHRlbnNpb246IHsKLSAgICAgICAg
ICAgIG1fY291bnQgPSBxWzFdOworICAgICAgICAgICAgdW5zaWduZWQgYnl0ZXNJbkJsb2NrID0g
cVsxXTsKICAgICAgICAgICAgIEdJRlN0YXRlIGVzID0gR0lGU2tpcEJsb2NrOwogCiAgICAgICAg
ICAgICAvLyBUaGUgR0lGIHNwZWMgbWFuZGF0ZXMgbGVuZ3RocyBmb3IgdGhyZWUgb2YgdGhlIGV4
dGVuc2lvbnMgYmVsb3cuCkBAIC01NjYsMTcgKzU0NywxNyBAQCBib29sIEdJRkltYWdlUmVhZGVy
OjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURl
Y29kZQogICAgICAgICAgICAgc3dpdGNoICgqcSkgewogICAgICAgICAgICAgY2FzZSAweGY5Ogog
ICAgICAgICAgICAgICAgIGVzID0gR0lGQ29udHJvbEV4dGVuc2lvbjsKLSAgICAgICAgICAgICAg
ICBtX2NvdW50ID0gc3RkOjptYXgobV9jb3VudCwgNCk7CisgICAgICAgICAgICAgICAgYnl0ZXNJ
bkJsb2NrID0gc3RkOjptYXgoYnl0ZXNJbkJsb2NrLCA0dSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgICAgIGNhc2UgMHgwMToKICAgICAgICAgICAgICAgICAvLyBpZ25vcmlu
ZyBwbGFpbiB0ZXh0IGV4dGVuc2lvbgotICAgICAgICAgICAgICAgIG1fY291bnQgPSBzdGQ6Om1h
eChtX2NvdW50LCAxMik7CisgICAgICAgICAgICAgICAgYnl0ZXNJbkJsb2NrID0gc3RkOjptYXgo
Ynl0ZXNJbkJsb2NrLCAxMnUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAg
ICBjYXNlIDB4ZmY6CiAgICAgICAgICAgICAgICAgZXMgPSBHSUZBcHBsaWNhdGlvbkV4dGVuc2lv
bjsKLSAgICAgICAgICAgICAgICBtX2NvdW50ID0gc3RkOjptYXgobV9jb3VudCwgMTEpOworICAg
ICAgICAgICAgICAgIGJ5dGVzSW5CbG9jayA9IHN0ZDo6bWF4KGJ5dGVzSW5CbG9jaywgMTF1KTsK
ICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSAweGZlOgpAQCAtNTg0
LDggKzU2NSw4IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hh
ciAqYnVmLCB1bnNpZ25lZCBsZW4sIEdJRkltYWdlRGVjb2RlCiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChtX2NvdW50KQotICAgICAgICAg
ICAgICAgIEdFVE4obV9jb3VudCwgZXMpOworICAgICAgICAgICAgaWYgKGJ5dGVzSW5CbG9jaykK
KyAgICAgICAgICAgICAgICBHRVROKGJ5dGVzSW5CbG9jaywgZXMpOwogICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgICAgIEdFVE4oMSwgR0lGSW1hZ2VTdGFydCk7CiAgICAgICAgICAgICBi
cmVhazsKQEAgLTcyOSw4ICs3MTAsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0
IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURlY29kZQogICAgICAg
ICAgICAgaWYgKHF1ZXJ5ID09IEdJRkltYWdlRGVjb2Rlcjo6R0lGU2l6ZVF1ZXJ5IHx8IGhhbHRB
dEZyYW1lID09IG1faW1hZ2VzRGVjb2RlZCkgewogICAgICAgICAgICAgICAgIC8vIFRoZSBkZWNv
ZGVyIG5lZWRzIHRvIHN0b3AuIEhhbmQgYmFjayB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGNvbnN1
bWVkIGZyb20KICAgICAgICAgICAgICAgICAvLyBidWZmZXIgbWludXMgOSAodGhlIGFtb3VudCB3
ZSBjb25zdW1lZCB0byByZWFkIHRoZSBoZWFkZXIpLgotICAgICAgICAgICAgICAgIGlmIChtX2Ns
aWVudCkKLSAgICAgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRlY29kaW5nSGFsdGVkKGxlbiAr
IDkpOworICAgICAgICAgICAgICAgIHNldFJlbWFpbmluZ0J5dGVzKGxlbiArIDkpOwogICAgICAg
ICAgICAgICAgIEdFVE4oOSwgR0lGSW1hZ2VIZWFkZXIpOwogICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICAgICAgfQpAQCAtNzk0LDMzICs3NzQsMjQgQEAgYm9vbCBHSUZJbWFn
ZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgR0lG
SW1hZ2VEZWNvZGUKICAgICAgICAgICAgIC8vIGhhcyBhIGxvY2FsIGNvbG9ybWFwPwogICAgICAg
ICAgICAgaWYgKHFbOF0gJiAweDgwKSB7CiAgICAgICAgICAgICAgICAgaW50IG51bUNvbG9ycyA9
IDIgPDwgKHFbOF0gJiAweDcpOwotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNpemUg
PSAzICogbnVtQ29sb3JzOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm1hcCA9IG1f
ZnJhbWVDb250ZXh0ID8gbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXAgOiAwOwotICAgICAg
ICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCAmJiAoIW1hcCB8fCAobnVtQ29sb3JzID4gbV9m
cmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXBTaXplKSkpIHsKLSAgICAgICAgICAgICAgICAgICAg
ZGVsZXRlIFtdbWFwOwotICAgICAgICAgICAgICAgICAgICBtYXAgPSBuZXcgdW5zaWduZWQgY2hh
cltzaXplXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXApCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsK
LSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbG9jYWxD
b2xvcm1hcEJ5dGVzID0gMyAqIG51bUNvbG9yczsKIAogICAgICAgICAgICAgICAgIC8vIFN3aXRj
aCB0byB0aGUgbmV3IGxvY2FsIHBhbGV0dGUgYWZ0ZXIgaXQgbG9hZHMKICAgICAgICAgICAgICAg
ICBpZiAobV9mcmFtZUNvbnRleHQpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRl
eHQtPmxvY2FsQ29sb3JtYXAgPSBtYXA7CisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250
ZXh0LT5sb2NhbENvbG9ybWFwUG9zaXRpb24gPSBkYXRhUG9zaXRpb247CiAgICAgICAgICAgICAg
ICAgICAgIG1fZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFwU2l6ZSA9IG51bUNvbG9yczsKICAg
ICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQg
PSB0cnVlOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGlmIChsZW4gPCBz
aXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFVzZSAnaG9sZCcgcGF0dGVybiB0byBnZXQg
dGhlIGltYWdlIGNvbG9ybWFwCi0gICAgICAgICAgICAgICAgICAgIEdFVE4oc2l6ZSwgR0lGSW1h
Z2VDb2xvcm1hcCk7CisgICAgICAgICAgICAgICAgaWYgKGxlbiA8IGxvY2FsQ29sb3JtYXBCeXRl
cykgeworICAgICAgICAgICAgICAgICAgICAvLyBOb3QgZW5vdWdoIGJ5dGVzIHRvIHJlYWQgdGhl
IGVudGlyZSBjb2xvcm1hcCwgcmVhZCBpdCBhcyBuZXh0IGJsb2NrLgorICAgICAgICAgICAgICAg
ICAgICBHRVROKGxvY2FsQ29sb3JtYXBCeXRlcywgR0lGSW1hZ2VDb2xvcm1hcCk7CiAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAg
IC8vIENvcHkgZXZlcnl0aGluZyBhbmQgZGlyZWN0bHkgZ28gdG8gR0lGTFpXU3RhcnQKLSAgICAg
ICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQpCi0gICAgICAgICAgICAgICAgICAgIG1lbWNw
eShtX2ZyYW1lQ29udGV4dC0+bG9jYWxDb2xvcm1hcCwgYnVmLCBzaXplKTsKLSAgICAgICAgICAg
ICAgICBidWYgKz0gc2l6ZTsKLSAgICAgICAgICAgICAgICBsZW4gLT0gc2l6ZTsKKyAgICAgICAg
ICAgICAgICAvLyBUaGVyZSdzIGVub3VnaCBieXRlcyBmb3IgdGhlIGVudGlyZSBjb2xvcm1hcCBz
byBhZHZhbmNlIGRhdGEgcG9pbnRlci4KKyAgICAgICAgICAgICAgICBkYXRhUG9zaXRpb24gKz0g
bG9jYWxDb2xvcm1hcEJ5dGVzOworICAgICAgICAgICAgICAgIGxlbiAtPSBsb2NhbENvbG9ybWFw
Qnl0ZXM7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fZnJhbWVDb250ZXh0KSB7CiAgICAgICAg
ICAgICAgICAgLy8gU3dpdGNoIGJhY2sgdG8gdGhlIGdsb2JhbCBwYWxldHRlCiAgICAgICAgICAg
ICAgICAgbV9mcmFtZUNvbnRleHQtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSBmYWxzZTsKQEAg
LTgzNywxNCArODA4LDE1IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWdu
ZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIEdJRkltYWdlRGVjb2RlCiAKICAgICAgICAgY2Fz
ZSBHSUZTdWJCbG9jazogewogICAgICAgICAgICAgLy8gU3RpbGwgd29ya2luZyBvbiB0aGUgc2Ft
ZSBpbWFnZTogUHJvY2VzcyBuZXh0IExaVyBkYXRhIGJsb2NrLgotICAgICAgICAgICAgaWYgKCht
X2NvdW50ID0gKnEpKSB7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBieXRlc0luQmxvY2sg
PSAqcTsKKyAgICAgICAgICAgIGlmIChieXRlc0luQmxvY2spIHsKICAgICAgICAgICAgICAgICAv
LyBNYWtlIHN1cmUgdGhlcmUgYXJlIHN0aWxsIHJvd3MgbGVmdC4gSWYgdGhlIEdJRiBkYXRhCiAg
ICAgICAgICAgICAgICAgLy8gaXMgY29ycnVwdCwgd2UgbWF5IG5vdCBnZXQgYW4gZXhwbGljaXQg
dGVybWluYXRvci4KICAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQgJiYgIW1fZnJh
bWVDb250ZXh0LT5yb3dzUmVtYWluaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMg
aXMgYW4gaWxsZWdhbCBHSUYsIGJ1dCB3ZSByZW1haW4gdG9sZXJhbnQuCiAgICAgICAgICAgICAg
ICAgICAgIEdFVE4oMSwgR0lGU3ViQmxvY2spOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgICAgICBHRVROKG1fY291bnQsIEdJRkxaVyk7CisgICAgICAgICAgICAgICAgR0VUTihieXRl
c0luQmxvY2ssIEdJRkxaVyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg
IC8vIFNlZSBpZiB0aGVyZSBhcmUgYW55IG1vcmUgaW1hZ2VzIGluIHRoaXMgc2VxdWVuY2UuCiAg
ICAgICAgICAgICAgICAgbV9pbWFnZXNEZWNvZGVkKys7CkBAIC04NzcsMjMgKzg0OSwxMiBAQCBi
b29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWdu
ZWQgbGVuLCBHSUZJbWFnZURlY29kZQogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gQ29weSB0
aGUgbGVmdG92ZXIgaW50byBtX2ZyYW1lQ29udGV4dC0+bV9ob2xkCi0gICAgbV9ieXRlc0luSG9s
ZCA9IGxlbjsKLSAgICBpZiAobGVuKSB7Ci0gICAgICAgIC8vIEFkZCB3aGF0IHdlIGhhdmUgc29m
YXIgdG8gdGhlIGJsb2NrCi0gICAgICAgIHVuc2lnbmVkIGNoYXIqIHA7Ci0gICAgICAgIGlmICht
X3N0YXRlID09IEdJRkdsb2JhbENvbG9ybWFwKQotICAgICAgICAgICAgcCA9IG1fZ2xvYmFsQ29s
b3JtYXA7Ci0gICAgICAgIGVsc2UgaWYgKG1fc3RhdGUgPT0gR0lGSW1hZ2VDb2xvcm1hcCkKLSAg
ICAgICAgICAgIHAgPSBtX2ZyYW1lQ29udGV4dCA/IG1fZnJhbWVDb250ZXh0LT5sb2NhbENvbG9y
bWFwIDogMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcCA9IG1faG9sZDsKLSAgICAgICAg
aWYgKHApCi0gICAgICAgICAgICBtZW1jcHkocCwgYnVmLCBsZW4pOwotICAgICAgICBtX2J5dGVz
VG9Db25zdW1lIC09IGxlbjsKLSAgICB9Ci0KLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAgIG1f
Y2xpZW50LT5kZWNvZGluZ0hhbHRlZCgwKTsKKyAgICBzZXRSZW1haW5pbmdCeXRlcyhsZW4pOwog
ICAgIHJldHVybiBmYWxzZTsKIH0KKwordm9pZCBHSUZJbWFnZVJlYWRlcjo6c2V0UmVtYWluaW5n
Qnl0ZXModW5zaWduZWQgcmVtYWluaW5nQnl0ZXMpCit7CisgICAgQVNTRVJUKHJlbWFpbmluZ0J5
dGVzIDw9IG1fZGF0YS0+c2l6ZSgpKTsKKyAgICBtX2J5dGVzUmVhZCA9IG1fZGF0YS0+c2l6ZSgp
IC0gcmVtYWluaW5nQnl0ZXM7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCmluZGV4IGMwODI5MThj
NDMxNjZiMzgwMjllYmRmNGYyNGNmMzRkZTY5ZDc0OWIuLjk5OGNkMGVjMjA5ZTNlMTllNTQxNDQw
Njk2MzgwMTVkNTljZDQ5ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lt
YWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCkBAIC00MSwxMSArNDEs
MTIgQEAKIC8vIERlZmluZSBvdXJzZWx2ZXMgYXMgdGhlIGNsaWVudFB0ci4gIE1vemlsbGEganVz
dCBoYWNrZWQgdGhlaXIgQysrIGNhbGxiYWNrIGNsYXNzIGludG8gdGhpcyBvbGQgQyBkZWNvZGVy
LAogLy8gc28gd2Ugd2lsbCB0b28uCiAjaW5jbHVkZSAiR0lGSW1hZ2VEZWNvZGVyLmgiCisjaW5j
bHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKICNkZWZpbmUgTUFYX0xaV19CSVRTICAgICAgICAgIDEy
CiAjZGVmaW5lIE1BWF9CSVRTICAgICAgICAgICAgNDA5NyAvKiAyXk1BWF9MWldfQklUUysxICov
CiAjZGVmaW5lIE1BWF9DT0xPUlMgICAgICAgICAgIDI1NgotI2RlZmluZSBNQVhfSE9MRF9TSVpF
ICAgICAgICAyNTYKKyNkZWZpbmUgR0lGX0NPTE9SUyAgICAgICAgICAgICAzCiAKIGNvbnN0IGlu
dCBjTG9vcENvdW50Tm90U2VlbiA9IC0yOwogCkBAIC0xMDMsNyArMTA0LDcgQEAgcHVibGljOgog
ICAgIHVuc2lnbmVkIGhlaWdodDsKICAgICBpbnQgdHBpeGVsOyAvLyBJbmRleCBvZiB0cmFuc3Bh
cmVudCBwaXhlbC4KICAgICBXZWJDb3JlOjpJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9k
IGRpc3Bvc2FsTWV0aG9kOyAvLyBSZXN0b3JlIHRvIGJhY2tncm91bmQsIGxlYXZlIGluIHBsYWNl
LCBldGMuCi0gICAgdW5zaWduZWQgY2hhciAqbG9jYWxDb2xvcm1hcDsgLy8gUGVyLWltYWdlIGNv
bG9ybWFwLgorICAgIHVuc2lnbmVkIGxvY2FsQ29sb3JtYXBQb3NpdGlvbjsgLy8gUGVyLWltYWdl
IGNvbG9ybWFwLgogICAgIGludCBsb2NhbENvbG9ybWFwU2l6ZTsgLy8gU2l6ZSBvZiBsb2NhbCBj
b2xvcm1hcCBhcnJheS4KICAgICAKICAgICBib29sIGlzTG9jYWxDb2xvcm1hcERlZmluZWQgOiAx
OwpAQCAtMTQwLDcgKzE0MSw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBoZWlnaHQoMCkKICAgICAg
ICAgLCB0cGl4ZWwoMCkKICAgICAgICAgLCBkaXNwb3NhbE1ldGhvZChXZWJDb3JlOjpJbWFnZUZy
YW1lOjpEaXNwb3NlTm90U3BlY2lmaWVkKQotICAgICAgICAsIGxvY2FsQ29sb3JtYXAoMCkKKyAg
ICAgICAgLCBsb2NhbENvbG9ybWFwUG9zaXRpb24oMCkKICAgICAgICAgLCBsb2NhbENvbG9ybWFw
U2l6ZSgwKQogICAgICAgICAsIGlzTG9jYWxDb2xvcm1hcERlZmluZWQoZmFsc2UpCiAgICAgICAg
ICwgcHJvZ3Jlc3NpdmVEaXNwbGF5KGZhbHNlKQpAQCAtMTU2LDcgKzE1Nyw2IEBAIHB1YmxpYzoK
ICAgICB+R0lGRnJhbWVDb250ZXh0KCkKICAgICB7CiAgICAgICAgIGRlbGV0ZSBbXSByb3didWY7
Ci0gICAgICAgIGRlbGV0ZSBbXSBsb2NhbENvbG9ybWFwOwogICAgICAgICBkZWxldGUgW10gcHJl
Zml4OwogICAgICAgICBkZWxldGUgW10gc3VmZml4OwogICAgICAgICBkZWxldGUgW10gc3RhY2s7
CkBAIC0xNjksNjYgKzE2OSw5MyBAQCBwdWJsaWM6CiAgICAgR0lGSW1hZ2VSZWFkZXIoV2ViQ29y
ZTo6R0lGSW1hZ2VEZWNvZGVyKiBjbGllbnQgPSAwKQogICAgICAgICA6IG1fY2xpZW50KGNsaWVu
dCkKICAgICAgICAgLCBtX3N0YXRlKEdJRlR5cGUpCi0gICAgICAgICwgbV9ieXRlc1RvQ29uc3Vt
ZSg2KQotICAgICAgICAsIG1fYnl0ZXNJbkhvbGQoMCkKLSAgICAgICAgLCBtX2dsb2JhbENvbG9y
bWFwKDApCisgICAgICAgICwgbV9ieXRlc0luTmV4dEJsb2NrKDYpIC8vIE51bWJlciBvZiBieXRl
cyBmb3IgdGhlIGZpcnN0IHJlYWQuCisgICAgICAgICwgbV9ieXRlc1JlYWQoMCkKICAgICAgICAg
LCBtX3NjcmVlbkJnY29sb3IoMCkKICAgICAgICAgLCBtX3ZlcnNpb24oMCkKICAgICAgICAgLCBt
X3NjcmVlbldpZHRoKDApCiAgICAgICAgICwgbV9zY3JlZW5IZWlnaHQoMCkKKyAgICAgICAgLCBt
X2dsb2JhbENvbG9ybWFwUG9zaXRpb24oMCkKICAgICAgICAgLCBtX2dsb2JhbENvbG9ybWFwU2l6
ZSgwKQogICAgICAgICAsIG1faW1hZ2VzRGVjb2RlZCgwKQogICAgICAgICAsIG1faW1hZ2VzQ291
bnQoMCkKICAgICAgICAgLCBtX2xvb3BDb3VudChjTG9vcENvdW50Tm90U2VlbikKLSAgICAgICAg
LCBtX2NvdW50KDApCiAgICAgICAgICwgbV9mcmFtZUNvbnRleHQoMCkKICAgICB7CiAgICAgfQog
CiAgICAgfkdJRkltYWdlUmVhZGVyKCkKICAgICB7Ci0gICAgICAgIGRlbGV0ZSBbXSBtX2dsb2Jh
bENvbG9ybWFwOwotICAgICAgICBtX2dsb2JhbENvbG9ybWFwID0gMDsKLQogICAgICAgICBkZWxl
dGUgbV9mcmFtZUNvbnRleHQ7CiAgICAgICAgIG1fZnJhbWVDb250ZXh0ID0gMDsKICAgICB9CiAK
LSAgICBib29sIHJlYWQoY29uc3QgdW5zaWduZWQgY2hhciogYnVmLCB1bnNpZ25lZCBudW1ieXRl
cywgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSA9IFdlYkNvcmU6OkdJRkltYWdl
RGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSA9IC0xKTsKKyAgICB2
b2lkIHNldERhdGEoUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGRhdGEpIHsgbV9k
YXRhID0gZGF0YTsgfQorICAgIGJvb2wgZGVjb2RlKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6
R0lGUXVlcnksIGludCBoYWx0QXRGcmFtZSk7CiAKICAgICBpbnQgaW1hZ2VzQ291bnQoKSBjb25z
dCB7IHJldHVybiBtX2ltYWdlc0NvdW50OyB9CiAgICAgaW50IGxvb3BDb3VudCgpIGNvbnN0IHsg
cmV0dXJuIG1fbG9vcENvdW50OyB9Ci0gICAgdW5zaWduZWQgY2hhciogZ2xvYmFsQ29sb3JtYXAo
KSBjb25zdCB7IHJldHVybiBtX2dsb2JhbENvbG9ybWFwOyB9CisKKyAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBnbG9iYWxDb2xvcm1hcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gY29s
b3JtYXAobV9nbG9iYWxDb2xvcm1hcFBvc2l0aW9uLCBtX2dsb2JhbENvbG9ybWFwU2l6ZSk7Cisg
ICAgfQogICAgIGludCBnbG9iYWxDb2xvcm1hcFNpemUoKSBjb25zdCB7IHJldHVybiBtX2dsb2Jh
bENvbG9ybWFwU2l6ZTsgfQorCisgICAgY29uc3QgdW5zaWduZWQgY2hhciogbG9jYWxDb2xvcm1h
cChjb25zdCBHSUZGcmFtZUNvbnRleHQqIGZyYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KCFmcmFtZS0+aXNMb2NhbENvbG9ybWFwRGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICByZXR1cm4gY29sb3JtYXAoZnJhbWUtPmxvY2FsQ29sb3JtYXBQb3NpdGlvbiwgZnJh
bWUtPmxvY2FsQ29sb3JtYXBTaXplKTsKKyAgICB9CisgICAgaW50IGxvY2FsQ29sb3JtYXBTaXpl
KGNvbnN0IEdJRkZyYW1lQ29udGV4dCogZnJhbWUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
IWZyYW1lLT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuIDA7Cisg
ICAgICAgIHJldHVybiBmcmFtZS0+bG9jYWxDb2xvcm1hcFNpemU7CisgICAgfQorCiAgICAgY29u
c3QgR0lGRnJhbWVDb250ZXh0KiBmcmFtZUNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1l
Q29udGV4dDsgfQogCiBwcml2YXRlOgorICAgIGJvb2wgZGVjb2RlSW50ZXJuYWwodW5zaWduZWQg
ZGF0YVBvc2l0aW9uLCB1bnNpZ25lZCBsZW4sIFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lG
UXVlcnkgPSBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OkdJRkZ1bGxRdWVyeSwgdW5zaWduZWQg
aGFsdEF0RnJhbWUgPSAtMSk7CiAgICAgYm9vbCBvdXRwdXRSb3coKTsKLSAgICBib29sIGRvTFpX
KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEpOworICAgIGJvb2wgZG9MWlcoY29uc3QgdW5zaWduZWQg
Y2hhciAqLCB1bnNpZ25lZCk7CisgICAgdm9pZCBzZXRSZW1haW5pbmdCeXRlcyh1bnNpZ25lZCk7
CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBkYXRhKHVuc2lnbmVkIGRhdGFQb3NpdGlvbikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2ln
bmVkIGNoYXIqPihtX2RhdGEtPmRhdGEoKSkgKyBkYXRhUG9zaXRpb247CisgICAgfQorCisgICAg
Y29uc3QgdW5zaWduZWQgY2hhciogY29sb3JtYXAodW5zaWduZWQgcG9zaXRpb24sIGludCBzaXpl
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKHBvc2l0aW9uICsgc2l6ZSAqIEdJRl9DT0xPUlMg
PiBtX2RhdGEtPnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4g
ZGF0YShwb3NpdGlvbik7CisgICAgfQogCiAgICAgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyKiBt
X2NsaWVudDsKIAogICAgIC8vIFBhcnNpbmcgc3RhdGUgbWFjaGluZS4KICAgICBHSUZTdGF0ZSBt
X3N0YXRlOyAvLyBDdXJyZW50IGRlY29kZXIgbWFzdGVyIHN0YXRlLgotICAgIHVuc2lnbmVkIG1f
Ynl0ZXNUb0NvbnN1bWU7IC8vIE51bWJlciBvZiBieXRlcyB0byBhY2N1bXVsYXRlLgotICAgIHVu
c2lnbmVkIG1fYnl0ZXNJbkhvbGQ7IC8vIGJ5dGVzIGFjY3VtdWxhdGVkIHNvIGZhci4KLSAgICB1
bnNpZ25lZCBjaGFyIG1faG9sZFtNQVhfSE9MRF9TSVpFXTsgLy8gQWNjdW11bGF0aW9uIGJ1ZmZl
ci4KLSAgICB1bnNpZ25lZCBjaGFyKiBtX2dsb2JhbENvbG9ybWFwOyAvLyAoMyogTUFYX0NPTE9S
UyBpbiBzaXplKSBEZWZhdWx0IGNvbG9ybWFwIGlmIGxvY2FsIG5vdCBzdXBwbGllZCwgMyBieXRl
cyBmb3IgZWFjaCBjb2xvci4KKyAgICB1bnNpZ25lZCBtX2J5dGVzSW5OZXh0QmxvY2s7IC8vIE51
bWJlciBvZiBieXRlcyB0byBhY2N1bXVsYXRlLgorICAgIHVuc2lnbmVkIG1fYnl0ZXNSZWFkOyAv
LyBOdW1iZXIgb2YgYnl0ZXMgcHJvY2Vzc2VkLgogICAgIAogICAgIC8vIEdsb2JhbCAobXVsdGkt
aW1hZ2UpIHN0YXRlLgogICAgIGludCBtX3NjcmVlbkJnY29sb3I7IC8vIExvZ2ljYWwgc2NyZWVu
IGJhY2tncm91bmQgY29sb3IuCiAgICAgaW50IG1fdmVyc2lvbjsgLy8gRWl0aGVyIDg5IGZvciBH
SUY4OSBvciA4NyBmb3IgR0lGODcuCiAgICAgdW5zaWduZWQgbV9zY3JlZW5XaWR0aDsgLy8gTG9n
aWNhbCBzY3JlZW4gd2lkdGggJiBoZWlnaHQuCiAgICAgdW5zaWduZWQgbV9zY3JlZW5IZWlnaHQ7
CisgICAgdW5zaWduZWQgbV9nbG9iYWxDb2xvcm1hcFBvc2l0aW9uOyAvLyAoMyogTUFYX0NPTE9S
UyBpbiBzaXplKSBEZWZhdWx0IGNvbG9ybWFwIGlmIGxvY2FsIG5vdCBzdXBwbGllZCwgMyBieXRl
cyBmb3IgZWFjaCBjb2xvci4KICAgICBpbnQgbV9nbG9iYWxDb2xvcm1hcFNpemU7IC8vIFNpemUg
b2YgZ2xvYmFsIGNvbG9ybWFwIGFycmF5LgogICAgIHVuc2lnbmVkIG1faW1hZ2VzRGVjb2RlZDsg
Ly8gQ291bnRzIGNvbXBsZXRlZCBmcmFtZXMgZm9yIGFuaW1hdGVkIEdJRnMuCiAgICAgaW50IG1f
aW1hZ2VzQ291bnQ7IC8vIENvdW50ZWQgYWxsIGZyYW1lcyBzZWVuIHNvIGZhciAoaW5jbHVkaW5n
IGluY29tcGxldGUgZnJhbWVzKS4KICAgICBpbnQgbV9sb29wQ291bnQ7IC8vIE5ldHNjYXBlIHNw
ZWNpZmljIGV4dGVuc2lvbiBibG9jayB0byBjb250cm9sIHRoZSBudW1iZXIgb2YgYW5pbWF0aW9u
IGxvb3BzIGEgR0lGIHJlbmRlcnMuCiAgICAgCi0gICAgLy8gTm90IHJlYWxseSBnbG9iYWwsIGJ1
dCBjb252ZW5pZW50IHRvIGxvY2F0ZSBoZXJlLgotICAgIGludCBtX2NvdW50OyAvLyBSZW1haW5p
bmcgIyBieXRlcyBpbiBzdWItYmxvY2suCi0gICAgCiAgICAgR0lGRnJhbWVDb250ZXh0KiBtX2Zy
YW1lQ29udGV4dDsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IG1fZGF0YTsK
IH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IGFhMTQxNWY0Mjcx
YzkyOTllOTVkMGYzOTczYzNhNTBjNmJlMWM3ZmUuLmYwNGViYWQ3ZmIxNjI1ZDJkZTc3NDUyNDc1
YTdlYTA0OThhOGVjY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTY0MSw2ICs2
NDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIHNob3VsZCBub3Qg
aW5jbHVkZSBmaWxlcyBkZXBlbmRpbmcgb24gd2Via2l0X3N1cHBvcnQuCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICMgVGhlc2UgdGVzdHMgZGVwZW5kIG9uIHdlYmtpdF9zdXBwb3J0
IGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZ1bmN0aW9ucyBkZWZpbmVk
IG9ubHkgaW4gIVdFQktJVF9JTVBMRU1FTlRBVElPTi4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3Rlc3RzL0dJRkltYWdlRGVjb2RlclRlc3QuY3BwJywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0xldmVsREJUZXN0LmNwcCcsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9u
cyc6IFsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGQ1ODExMjg4Y2ZlNGNmMzM3
YWU0NzZhM2Q1NzI4N2ExYTEzMzFjMjkuLjNiMGE3YTUzZTU4MjNjNzFjYmU2ODJiNTcwNzRkZjU2
ZjE0MTBjMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNzIsNiArNzIsNyBA
QAogICAgICAgICAgICAgJ3Rlc3RzL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbFRlc3QuY3BwJywKICAg
ICAgICAgICAgICd0ZXN0cy9GcmFtZVRlc3RIZWxwZXJzLmNwcCcsCiAgICAgICAgICAgICAndGVz
dHMvRnJhbWVUZXN0SGVscGVycy5oJywKKyAgICAgICAgICAgICd0ZXN0cy9HSUZJbWFnZURlY29k
ZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvR3JhcGhpY3NMYXllckNocm9taXVtVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQkFib3J0T25Db3JydXB0VGVzdC5jcHAnLAog
ICAgICAgICAgICAgJ3Rlc3RzL0lEQkJpbmRpbmdVdGlsaXRpZXNUZXN0LmNwcCcsCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dJRkltYWdlRGVjb2RlclRlc3QuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HSUZJbWFnZURlY29kZXJUZXN0LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi40ZDU0N2U5YWRjYzAwMGFhMjkxNGZkMGRiZjdjYjRmYzI1M2NlZTk2Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HSUZJbWFnZURlY29k
ZXJUZXN0LmNwcApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIkdJRkltYWdlRGVjb2Rlci5oIgorCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1
ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8
cHVibGljL1dlYkRhdGEuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViU2l6ZS5oPgorI2luY2x1ZGUg
PHdlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNwYWNlIHsKKworc3RhdGljIFBhc3NS
ZWZQdHI8U2hhcmVkQnVmZmVyPiByZWFkRmlsZShjb25zdCBjaGFyKiBmaWxlTmFtZSkKK3sKKyAg
ICBTdHJpbmcgZmlsZVBhdGggPSB3ZWJraXRfc3VwcG9ydDo6R2V0V2ViS2l0Um9vdERpcigpOwor
ICAgIGZpbGVQYXRoLmFwcGVuZChmaWxlTmFtZSk7CisKKyAgICBsb25nIGxvbmcgZmlsZVNpemU7
CisgICAgaWYgKCFnZXRGaWxlU2l6ZShmaWxlUGF0aCwgZmlsZVNpemUpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUgPSBvcGVuRmlsZShmaWxlUGF0
aCwgT3BlbkZvclJlYWQpOworICAgIGludCBmaWxlTGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50Pihm
aWxlU2l6ZSk7CisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcihmaWxlTGVuZ3RoKTsKKyAgICByZWFk
RnJvbUZpbGUoaGFuZGxlLCBidWZmZXIuZGF0YSgpLCBmaWxlTGVuZ3RoKTsKKyAgICBjbG9zZUZp
bGUoaGFuZGxlKTsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjphZG9wdFZlY3RvcihidWZmZXIp
OworfQorCitURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIGRlY29kZVR3b0ZyYW1lcykKK3sKKyAg
ICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGFkb3B0UHRyKG5ldyBHSUZJbWFnZURl
Y29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6Okdh
bW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkpKTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+
IGRhdGEgPSByZWFkRmlsZSgiL0xheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL3Jlc291cmNlcy9hbmlt
YXRlZC5naWYiKTsKKyAgICBBU1NFUlRfVFJVRShkYXRhLmdldCgpKTsKKyAgICBkZWNvZGVyLT5z
ZXREYXRhKGRhdGEuZ2V0KCksIHRydWUpOworICAgIEVYUEVDVF9FUShjQW5pbWF0aW9uTG9vcE9u
Y2UsIGRlY29kZXItPnJlcGV0aXRpb25Db3VudCgpKTsKKworICAgIEltYWdlRnJhbWUqIGZyYW1l
ID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDApOworICAgIEVYUEVDVF9FUShJbWFnZUZy
YW1lOjpGcmFtZUNvbXBsZXRlLCBmcmFtZS0+c3RhdHVzKCkpOworICAgIEVYUEVDVF9FUSgxNiwg
ZnJhbWUtPmdldFNrQml0bWFwKCkud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+
Z2V0U2tCaXRtYXAoKS5oZWlnaHQoKSk7CisKKyAgICBmcmFtZSA9IGRlY29kZXItPmZyYW1lQnVm
ZmVyQXRJbmRleCgxKTsKKyAgICBFWFBFQ1RfRVEoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSwg
ZnJhbWUtPnN0YXR1cygpKTsKKyAgICBFWFBFQ1RfRVEoMTYsIGZyYW1lLT5nZXRTa0JpdG1hcCgp
LndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgxNiwgZnJhbWUtPmdldFNrQml0bWFwKCkuaGVpZ2h0
KCkpOworCisgICAgRVhQRUNUX0VRKDJ1LCBkZWNvZGVyLT5mcmFtZUNvdW50KCkpOworICAgIEVY
UEVDVF9FUShjQW5pbWF0aW9uTG9vcEluZmluaXRlLCBkZWNvZGVyLT5yZXBldGl0aW9uQ291bnQo
KSk7Cit9CisKK1RFU1QoR0lGSW1hZ2VEZWNvZGVyVGVzdCwgcGFyc2VBbmREZWNvZGUpCit7Cisg
ICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihuZXcgR0lGSW1hZ2VE
ZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIEltYWdlU291cmNlOjpH
YW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CisKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBkYXRhID0gcmVhZEZpbGUoIi9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9yZXNvdXJjZXMvYW5p
bWF0ZWQuZ2lmIik7CisgICAgQVNTRVJUX1RSVUUoZGF0YS5nZXQoKSk7CisgICAgZGVjb2Rlci0+
c2V0RGF0YShkYXRhLmdldCgpLCB0cnVlKTsKKyAgICBFWFBFQ1RfRVEoY0FuaW1hdGlvbkxvb3BP
bmNlLCBkZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSk7CisKKyAgICAvLyBUaGlzIGNhbGwgd2ls
bCBwYXJzZSB0aGUgZW50aXJlIGZpbGUuCisgICAgRVhQRUNUX0VRKDJ1LCBkZWNvZGVyLT5mcmFt
ZUNvdW50KCkpOworCisgICAgSW1hZ2VGcmFtZSogZnJhbWUgPSBkZWNvZGVyLT5mcmFtZUJ1ZmZl
ckF0SW5kZXgoMCk7CisgICAgRVhQRUNUX0VRKEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUsIGZy
YW1lLT5zdGF0dXMoKSk7CisgICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+Z2V0U2tCaXRtYXAoKS53
aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTYsIGZyYW1lLT5nZXRTa0JpdG1hcCgpLmhlaWdodCgp
KTsKKworICAgIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDEpOworICAgIEVY
UEVDVF9FUShJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlLCBmcmFtZS0+c3RhdHVzKCkpOworICAg
IEVYUEVDVF9FUSgxNiwgZnJhbWUtPmdldFNrQml0bWFwKCkud2lkdGgoKSk7CisgICAgRVhQRUNU
X0VRKDE2LCBmcmFtZS0+Z2V0U2tCaXRtYXAoKS5oZWlnaHQoKSk7CisgICAgRVhQRUNUX0VRKGNB
bmltYXRpb25Mb29wSW5maW5pdGUsIGRlY29kZXItPnJlcGV0aXRpb25Db3VudCgpKTsKK30KKwor
VEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBwYXJzZUJ5dGVCeUJ5dGUpCit7CisgICAgT3duUHRy
PEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihuZXcgR0lGSW1hZ2VEZWNvZGVyKElt
YWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENv
bG9yUHJvZmlsZUFwcGxpZWQpKSk7CisKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0g
cmVhZEZpbGUoIi9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9yZXNvdXJjZXMvYW5pbWF0ZWQuZ2lm
Iik7CisgICAgQVNTRVJUX1RSVUUoZGF0YS5nZXQoKSk7CisKKyAgICBzaXplX3QgZnJhbWVDb3Vu
dCA9IDA7CisKKyAgICAvLyBQYXNzIGRhdGEgdG8gZGVjb2RlciBieXRlIGJ5IGJ5dGUuCisgICAg
Zm9yICh1bnNpZ25lZCBsZW5ndGggPSAxOyBsZW5ndGggPD0gZGF0YS0+c2l6ZSgpOyArK2xlbmd0
aCkgeworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiB0ZW1wRGF0YSA9IFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKGRhdGEtPmRhdGEoKSwgbGVuZ3RoKTsKKyAgICAgICAgZGVjb2Rlci0+c2V0RGF0
YSh0ZW1wRGF0YS5nZXQoKSwgbGVuZ3RoID09IGRhdGEtPnNpemUoKSk7CisKKyAgICAgICAgRVhQ
RUNUX0xFKGZyYW1lQ291bnQsIGRlY29kZXItPmZyYW1lQ291bnQoKSk7CisgICAgICAgIGZyYW1l
Q291bnQgPSBkZWNvZGVyLT5mcmFtZUNvdW50KCk7CisgICAgfQorCisgICAgRVhQRUNUX0VRKDJ1
LCBkZWNvZGVyLT5mcmFtZUNvdW50KCkpOworCisgICAgZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdElu
ZGV4KDApOworICAgIGRlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgxKTsKKyAgICBFWFBFQ1Rf
RVEoY0FuaW1hdGlvbkxvb3BJbmZpbml0ZSwgZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkpOwor
fQorCitURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIHBhcnNlQW5kRGVjb2RlQnl0ZUJ5Qnl0ZSkK
K3sKKyAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGFkb3B0UHRyKG5ldyBHSUZJ
bWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwgSW1hZ2VTb3Vy
Y2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkpKTsKKworICAgIFJlZlB0cjxTaGFyZWRC
dWZmZXI+IGRhdGEgPSByZWFkRmlsZSgiL0xheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL3Jlc291cmNl
cy9hbmltYXRlZC1naWYtd2l0aC1vZmZzZXRzLmdpZiIpOworICAgIEFTU0VSVF9UUlVFKGRhdGEu
Z2V0KCkpOworCisgICAgc2l6ZV90IGZyYW1lQ291bnQgPSAwOworICAgIHNpemVfdCBmcmFtZXNE
ZWNvZGVkID0gMDsKKworICAgIC8vIFBhc3MgZGF0YSB0byBkZWNvZGVyIGJ5dGUgYnkgYnl0ZS4K
KyAgICBmb3IgKHVuc2lnbmVkIGxlbmd0aCA9IDE7IGxlbmd0aCA8PSBkYXRhLT5zaXplKCk7ICsr
bGVuZ3RoKSB7CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHRlbXBEYXRhID0gU2hhcmVk
QnVmZmVyOjpjcmVhdGUoZGF0YS0+ZGF0YSgpLCBsZW5ndGgpOworICAgICAgICBkZWNvZGVyLT5z
ZXREYXRhKHRlbXBEYXRhLmdldCgpLCBsZW5ndGggPT0gZGF0YS0+c2l6ZSgpKTsKKworICAgICAg
ICBFWFBFQ1RfTEUoZnJhbWVDb3VudCwgZGVjb2Rlci0+ZnJhbWVDb3VudCgpKTsKKyAgICAgICAg
ZnJhbWVDb3VudCA9IGRlY29kZXItPmZyYW1lQ291bnQoKTsKKworICAgICAgICBJbWFnZUZyYW1l
KiBmcmFtZSA9IGRlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChmcmFtZUNvdW50IC0gMSk7Cisg
ICAgICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVD
b21wbGV0ZSAmJiBmcmFtZXNEZWNvZGVkIDwgZnJhbWVDb3VudCkKKyAgICAgICAgICAgICsrZnJh
bWVzRGVjb2RlZDsKKyAgICB9CisKKyAgICBFWFBFQ1RfRVEoNXUsIGRlY29kZXItPmZyYW1lQ291
bnQoKSk7CisgICAgRVhQRUNUX0VRKDV1LCBmcmFtZXNEZWNvZGVkKTsKKyAgICBFWFBFQ1RfRVEo
Y0FuaW1hdGlvbkxvb3BJbmZpbml0ZSwgZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkpOworfQor
CisvLyBTZWNvbmQgZnJhbWUgaW4gdGhlIGZpbGUgaXMgYnJva2VuIGJ1dCB0ZXN0IHRoYXQgZmly
c3QgZnJhbWUgY2FuIGJlIGRlY29kZWQuCitURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIGJyb2tl
blNlY29uZEZyYW1lKQoreworICAgIE93blB0cjxHSUZJbWFnZURlY29kZXI+IGRlY29kZXIoYWRv
cHRQdHIobmV3IEdJRkltYWdlRGVjb2RlcihJbWFnZVNvdXJjZTo6QWxwaGFOb3RQcmVtdWx0aXBs
aWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKSkpOworCisgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IHJlYWRGaWxlKCIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS90ZXN0cy9kYXRhL2Jyb2tlbi5naWYiKTsKKyAgICBBU1NFUlRfVFJVRShkYXRhLmdldCgp
KTsKKyAgICBkZWNvZGVyLT5zZXREYXRhKGRhdGEuZ2V0KCksIHRydWUpOworCisgICAgRVhQRUNU
X0VRKDF1LCBkZWNvZGVyLT5mcmFtZUNvdW50KCkpOworCisgICAgSW1hZ2VGcmFtZSogZnJhbWUg
PSBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7CisgICAgRVhQRUNUX0VRKEltYWdlRnJh
bWU6OkZyYW1lQ29tcGxldGUsIGZyYW1lLT5zdGF0dXMoKSk7CisgICAgRVhQRUNUX0VRKDE2LCBm
cmFtZS0+Z2V0U2tCaXRtYXAoKS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTYsIGZyYW1lLT5n
ZXRTa0JpdG1hcCgpLmhlaWdodCgpKTsKKworICAgIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZm
ZXJBdEluZGV4KDEpOworICAgIEVYUEVDVF9GQUxTRShmcmFtZSk7CisgICAgRVhQRUNUX0VRKGNB
bmltYXRpb25Mb29wT25jZSwgZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkpOworfQorCit9IC8v
IG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRh
L2Jyb2tlbi5naWYgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvYnJva2VuLmdp
ZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lM2E3YzRlYmU3ZDliZWE5ODM5NzVmODI5YTJlZGM4ZTU1ZDFmNzZkCkdJ
VCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA5MDYKemNtWj93YmhFSGI2a3Jmd198Q3c8a2R9NmFWSjQ2
czEqMEpfMHoqTFlLZXdOMk5VKmJHZlVBKzcwVyV7bzJvISZeCnp1eio1QjJTazlmMj9Le0wxMmN6
PSRBJCQ1bj5tRUZWb3EjV2MoYDNhKj12cisjempYUDg1dSEzPyV3NEdZUCFEYApLTyZjUlZaUG95
UChJdmVBCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189329</attachid>
            <date>2013-02-20 08:46:49 -0800</date>
            <delta_ts>2013-02-20 15:03:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109662-20130220084311.patch</filename>
            <type>text/plain</type>
            <size>36303</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyODUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjc1Y2IzYjYxMzgyYTk1
MGY1MTNlYzZmMzE3MTgwNjZmMmRhNWVjZC4uOWZhM2RjMWNlYTRmYmY0ODcyZTUzYmViOWIwM2Ey
OGUxYjFkODhjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEzLTAyLTIwICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgdG8g
cmVhZCBmcm9tIHNvdXJjZSBkYXRhIGRpcmVjdGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk2NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBwYXRjaCB0byBpbXByb3Zl
IEdJRiBpbWFnZSBkZWNvZGluZy4KKworICAgICAgICBHSUZJbWFnZVJlYWRlciBoYXMgYW4gaW50
ZXJuYWwgMjU2IGJ5dGVzIGJ1ZmZlciB0byBzYXZpbmcgaW5jb21pbmcKKyAgICAgICAgYnl0ZXMu
IFRoaXMgbWVjaGFuaXNtIGlzIG91dC1kYXRlZCBiZWNhdXNlIFdlYktpdCBob2xkcyB0aGUgZW50
aXJlCisgICAgICAgIGZpbGUgaW4gbWVtb3J5IGFuZCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGhv
bGQgZGF0YSBpbiBhbiBpbnRlcm1lZGlhdGUKKyAgICAgICAgYnVmZmVyLgorCisgICAgICAgIFRo
aXMgaXMgYWxzbyBhIGJsb2NrZXIgZm9yIGxhdGVyIHdvcmsgdG8gcGFyc2UgYW5kIGRlY29kZSBH
SUYKKyAgICAgICAgaW5jcmVtZW50YWxseS4KKworICAgICAgICBUaGlzIGNoYW5nZSByZW1vdmVk
IHRoZSBpbXRlcm1lZGlhdGUgJ2hvbGQnIGJ1ZmZlciBhbmQgdXNlcyBhbiBpbmRleAorICAgICAg
ICBmb3IgZGF0YSBwb3NpdGlvbiB0byBrZWVwIHRyYWNrIG9mIHBhcnNpbmcgb2YgdGhlIEdJRiBm
aWxlLiBCdWZmZXIgZm9yCisgICAgICAgIGdsb2JhbCBjb2xvcm1hcCBhbmQgbG9jYWwgY29sb3Jt
YXAgYXJlIGFsc28gcmVtb3ZlZCBiZWNhdXNlIHRoZXkgY2FuIGJlCisgICAgICAgIHJlZmVyZW5j
ZWQgZnJvbSB0aGUgZGF0YSBzdHJlYW0uCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgaXMgdGVzdGVk
IGJ5OgorCisgICAgICAgIExheW91dCB0ZXN0cworICAgICAgICBBbGwgdGVzdHMgcGFzc2VkIHVu
ZGVyIGZhc3QvaW1hZ2VzLgorCisgICAgICAgIFVuaXQgdGVzdHMKKyAgICAgICAgQWRkZWQgR0lG
SW1hZ2VEZWNvZGVyVGVzdCBmb3IgQ2hyb21pdW0uCisKKyAgICAgICAgTG9jYWwgdGVzdGluZwor
ICAgICAgICBJIHRlc3RlZCB0aGlzIGltcGxlbWVudGF0aW9uIGFnYWluc3QgYSBzZXQgb2YgNTBr
IEdJRiBpbWFnZXMgYW5kCisgICAgICAgIHRoZXJlJ3Mgbm8gY3Jhc2hlcyBhbmQgcHJvZHVjZXMg
Yml0LWV4YWN0IHJlc3VsdHMgYXMgcHJldmlvdXMgY29kZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R0lGSW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdl
RGVjb2Rlcjo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6
OmhhdmVEZWNvZGVkUm93KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZGVj
b2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFk
ZXIuY3BwOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmRvTFpXKToKKyAgICAgICAgKEdJRklt
YWdlUmVhZGVyOjpkZWNvZGUpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVy
bmFsKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpzZXRSZW1haW5pbmdCeXRlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmg6CisgICAg
ICAgIChHSUZGcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0OjpHSUZGcmFt
ZUNvbnRleHQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0Ojp+R0lGRnJhbWVDb250ZXh0KToK
KyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpHSUZJbWFnZVJlYWRlcik6CisgICAgICAgIChHSUZJ
bWFnZVJlYWRlcjo6fkdJRkltYWdlUmVhZGVyKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpz
ZXREYXRhKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyKToKKyAgICAgICAgKEdJRkltYWdlUmVh
ZGVyOjpnbG9iYWxDb2xvcm1hcCk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6bG9jYWxDb2xv
cm1hcCk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6bG9jYWxDb2xvcm1hcFNpemUpOgorICAg
ICAgICAoR0lGSW1hZ2VSZWFkZXI6OmRhdGEpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmNv
bG9ybWFwKToKKwogMjAxMy0wMi0xMyAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW1Y4XSBHZW5lcmF0ZSB3cmFwcGVyIG1ldGhvZHMgZm9yIGN1c3RvbSBt
ZXRob2RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGExYWZhZmJmZTY5N2ZjYmNkYjQ4
OWE0MmEzZGE3MGIwZWUxMDgzMWIuLmNiY2ZhMDg5NTNhZmJkNTk1YWU0NDVmOGVmYTNlZDIwM2Y5
Mjc1NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTMt
MDItMjAgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBHSUZJbWFn
ZVJlYWRlciB0byByZWFkIGZyb20gc291cmNlIGRhdGEgZGlyZWN0bHkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTY2MgorCisgICAgICAgIEFkZGVk
IHRoZSBmb2xsb3dpbmcgdW5pdCB0ZXN0cyB0byB0ZXN0IG5ldyBsb2dpYyBpbiBHSUZJbWFnZURl
Y29kZXI6CisKKyAgICAgICAgR0lGSW1hZ2VEZWNvZGVyVGVzdC5kZWNvZGVUd29GcmFtZXMKKyAg
ICAgICAgVGVzdCB0aGF0IGl0IGNhbiBkZWNvZGUgYSBtdWx0aS1mcmFtZSBHSUYgaW1hZ2UgY29y
cmVjdGx5LgorCisgICAgICAgIEdJRkltYWdlRGVjb2RlclRlc3QucGFyc2VBbmREZWNvZGUKKyAg
ICAgICAgRmlyc3QgcGVyZm9ybSBhIHBhcnNlIG9wZXJhdGlvbiBhbmQgdGhlbiBhIGRlY29kZSBv
cGVyYXRpb24uIEV4cGVjdAorICAgICAgICB0aGF0IHBhcnNlIGFuZCBkZWNvZGUgb3BlcmF0ZXMg
Y29ycmVjdGx5LgorCisgICAgICAgIEdJRkltYWdlRGVjb2RlclRlc3QucGFyc2VCeXRlQnlCeXRl
CisgICAgICAgIFRlc3QgdGhhdCBtdWx0aS1mcmFtZSBHSUYgaW1hZ2UgY2FuIGJlIHBhcnNlZCBj
b3JyZWN0bHkgYnl0ZSBieSBieXRlLgorCisgICAgICAgIEdJRkltYWdlRGVjb2RlclRlc3QucGFy
c2VBbmREZWNvZGVCeXRlQnlCeXRlCisgICAgICAgIFJ1biBhIGxvb3AgdG8gZmVlZCBkZWNvZGVy
IGJ5dGUgYnkgYnl0ZSwgcGVyZm9ybSBhIHBhcnNlIGFuZCB0aGVuCisgICAgICAgIGRlY29kZSBv
cGVyYXRpb24gYW5kIG1ha2Ugc3VyZSBmcmFtZXMgYXJlIGRlY29kZWQgY29ycmVjdGx5LgorCisg
ICAgICAgIEdJRkltYWdlRGVjb2RlclRlc3QuYnJva2VuU2Vjb25kRnJhbWUKKyAgICAgICAgRGVj
b2RlIGEgR0lGIGltYWdlIHdpdGggc2Vjb25kIGZyYW1lIGJyb2tlbi4gRXhwZWN0IHRoYXQgdGhl
IGZpcnN0CisgICAgICAgIGZyYW1lIGNhbiBiZSBkZWNvZGVkIGNvcnJlY3RseS4KKworICAgICAg
ICAqIFdlYktpdC5neXA6CisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMv
R0lGSW1hZ2VEZWNvZGVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYktpdDo6cmVhZEZpbGUpOgorICAgICAgICAoV2ViS2l0OjpURVNUKToKKyAgICAgICAg
KiB0ZXN0cy9kYXRhL2Jyb2tlbi5naWY6IEFkZGVkLgorCiAyMDEzLTAyLTEzICBNYXggVnVqb3Zp
YyAgPG12dWpvdmljQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTIEZpbHRlcnNdIFJlZmFjdG9y
IGZpbHRlciBvdXRzZXRzIGludG8gYSBjbGFzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcApp
bmRleCAwY2IyMjg4NWNlYjNkNmIxNmIyMzVmODE5Yjk4YTI1YjkzYmFmZDhiLi4wMWE0NmNiMjRj
MDFiMzY0YTcwNWIxNTFhNmYxMmE0NTY1N2I4YTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVy
LmNwcApAQCAtNTAsNiArNTAsOSBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFy
ZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogICAgIGlmIChmYWlsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKG1fcmVhZGVyKQorICAgICAgICBtX3JlYWRlci0+
c2V0RGF0YShkYXRhKTsKKwogICAgIEltYWdlRGVjb2Rlcjo6c2V0RGF0YShkYXRhLCBhbGxEYXRh
UmVjZWl2ZWQpOwogCiAgICAgLy8gV2UgbmVlZCB0byByZXNjYW4gdGhlIGZyYW1lIGNvdW50LCBh
cyB0aGUgbmV3IGRhdGEgbWF5IGhhdmUgY2hhbmdlZCBpdC4KQEAgLTg1LDcgKzg4LDggQEAgc2l6
ZV90IEdJRkltYWdlRGVjb2Rlcjo6ZnJhbWVDb3VudCgpCiAgICAgICAgIC8vIGFsbCB0aGUgZGF0
YS4gIE5vdGUgdGhhdCB0aGlzIGlzIG5vIHdvcnNlIHRoYW4gd2hhdCBJbWFnZUlPIGRvZXMgb24K
ICAgICAgICAgLy8gTWFjIHJpZ2h0IG5vdyAoaXQgYWxzbyBjcmF3bHMgYWxsIHRoZSBkYXRhIGFn
YWluKS4KICAgICAgICAgR0lGSW1hZ2VSZWFkZXIgcmVhZGVyKDApOwotICAgICAgICByZWFkZXIu
cmVhZCgoY29uc3QgdW5zaWduZWQgY2hhciopbV9kYXRhLT5kYXRhKCksIG1fZGF0YS0+c2l6ZSgp
LCBHSUZGcmFtZUNvdW50UXVlcnksIHN0YXRpY19jYXN0PHVuc2lnbmVkPigtMSkpOworICAgICAg
ICByZWFkZXIuc2V0RGF0YShtX2RhdGEpOworICAgICAgICByZWFkZXIuZGVjb2RlKEdJRkZyYW1l
Q291bnRRdWVyeSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC0xKSk7CiAgICAgICAgIG1fYWxyZWFk
eVNjYW5uZWRUaGlzRGF0YUZvckZyYW1lQ291bnQgPSB0cnVlOwogICAgICAgICBtX2ZyYW1lQnVm
ZmVyQ2FjaGUucmVzaXplKHJlYWRlci5pbWFnZXNDb3VudCgpKTsKICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCByZWFkZXIuaW1hZ2VzQ291bnQoKTsgKytpKQpAQCAtMjE2LDggKzIyMCw4IEBA
IGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4
LCB1bnNpZ25lZCBjaGFyKiByb3dCdWZmCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciogY29sb3JN
YXA7CiAgICAgdW5zaWduZWQgY29sb3JNYXBTaXplOwogICAgIGlmIChmcmFtZUNvbnRleHQtPmlz
TG9jYWxDb2xvcm1hcERlZmluZWQpIHsKLSAgICAgICAgY29sb3JNYXAgPSBmcmFtZUNvbnRleHQt
PmxvY2FsQ29sb3JtYXA7Ci0gICAgICAgIGNvbG9yTWFwU2l6ZSA9ICh1bnNpZ25lZClmcmFtZUNv
bnRleHQtPmxvY2FsQ29sb3JtYXBTaXplOworICAgICAgICBjb2xvck1hcCA9IG1fcmVhZGVyLT5s
b2NhbENvbG9ybWFwKGZyYW1lQ29udGV4dCk7CisgICAgICAgIGNvbG9yTWFwU2l6ZSA9IG1fcmVh
ZGVyLT5sb2NhbENvbG9ybWFwU2l6ZShmcmFtZUNvbnRleHQpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGNvbG9yTWFwID0gbV9yZWFkZXItPmdsb2JhbENvbG9ybWFwKCk7CiAgICAgICAgIGNvbG9y
TWFwU2l6ZSA9IG1fcmVhZGVyLT5nbG9iYWxDb2xvcm1hcFNpemUoKTsKQEAgLTMxOSwxMiArMzIz
LDE0IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUodW5zaWduZWQgaGFsdEF0RnJhbWUs
IEdJRlF1ZXJ5IHF1ZXJ5KQogICAgIGlmIChmYWlsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKCFtX3JlYWRlcikKKyAgICBpZiAoIW1fcmVhZGVyKSB7CiAgICAgICAgIG1fcmVhZGVy
ID0gYWRvcHRQdHIobmV3IEdJRkltYWdlUmVhZGVyKHRoaXMpKTsKKyAgICAgICAgbV9yZWFkZXIt
PnNldERhdGEobV9kYXRhKTsKKyAgICB9CiAKICAgICAvLyBJZiB3ZSBjb3VsZG4ndCBkZWNvZGUg
dGhlIGltYWdlIGJ1dCB3ZSd2ZSByZWNlaXZlZCBhbGwgdGhlIGRhdGEsIGRlY29kaW5nCiAgICAg
Ly8gaGFzIGZhaWxlZC4KLSAgICBpZiAoIW1fcmVhZGVyLT5yZWFkKChjb25zdCB1bnNpZ25lZCBj
aGFyKiltX2RhdGEtPmRhdGEoKSArIG1fcmVhZE9mZnNldCwgbV9kYXRhLT5zaXplKCkgLSBtX3Jl
YWRPZmZzZXQsIHF1ZXJ5LCBoYWx0QXRGcmFtZSkgJiYgaXNBbGxEYXRhUmVjZWl2ZWQoKSkKKyAg
ICBpZiAoIW1fcmVhZGVyLT5kZWNvZGUocXVlcnksIGhhbHRBdEZyYW1lKSAmJiBpc0FsbERhdGFS
ZWNlaXZlZCgpKQogICAgICAgICBzZXRGYWlsZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRl
ci5jcHAKaW5kZXggNjk5ZDNjNDdmYjQ0YWYyYzgyNGZhNTliMDNiNDJmNTEwNjYwZWVmYi4uODEz
ZGMwYWI2YTgyMDNkMjJkZmZjM2M1YTgyMDA4ODczNmZjZjdhMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VS
ZWFkZXIuY3BwCkBAIC05MCw3ICs5MCw3IEBAIHVzaW5nIFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rl
cjsKIC8vIFRoaXMgYnVmZmVyIGlzIG9ubHkgbmVlZGVkIHRvIGNvcHkgbGVmdC1vdmVyIGRhdGEg
ZnJvbSBvbmUgR2lmV3JpdGUgY2FsbCB0byB0aGUgbmV4dAogI2RlZmluZSBHRVROKG4sIHMpIFwK
ICAgICBkbyB7IFwKLSAgICAgICAgbV9ieXRlc1RvQ29uc3VtZSA9IChuKTsgXAorICAgICAgICBt
X2J5dGVzSW5OZXh0QmxvY2sgPSAobik7IFwKICAgICAgICAgbV9zdGF0ZSA9IChzKTsgXAogICAg
IH0gd2hpbGUgKDApCiAKQEAgLTIwMSw3ICsyMDEsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpv
dXRwdXRSb3coKQogfQogCiAvLyBQZXJmb3JtIExlbXBlbC1aaXYtV2VsY2ggZGVjb2RpbmcuCi1i
b29sIEdJRkltYWdlUmVhZGVyOjpkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyICpxKQorYm9vbCBH
SUZJbWFnZVJlYWRlcjo6ZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciogYmxvY2ssIHVuc2lnbmVk
IGJ5dGVzSW5CbG9jaykKIHsKICAgICBpZiAoIW1fZnJhbWVDb250ZXh0KQogICAgICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTIxNSw3ICsyMTUsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkb0xaVyhj
b25zdCB1bnNpZ25lZCBjaGFyICpxKQogICAgIC8vIGJhY2sgaW50byB0aGUgR0lGIGRlY29kZXIg
c3RydWN0dXJlIHdoZW4gd2UgZXhpdC4KICAgICBpbnQgYXZhaWwgPSBtX2ZyYW1lQ29udGV4dC0+
YXZhaWw7CiAgICAgaW50IGJpdHMgPSBtX2ZyYW1lQ29udGV4dC0+Yml0czsKLSAgICBpbnQgY250
ID0gbV9jb3VudDsKKyAgICBpbnQgY250ID0gYnl0ZXNJbkJsb2NrOwogICAgIGludCBjb2Rlc2l6
ZSA9IG1fZnJhbWVDb250ZXh0LT5jb2Rlc2l6ZTsKICAgICBpbnQgY29kZW1hc2sgPSBtX2ZyYW1l
Q29udGV4dC0+Y29kZW1hc2s7CiAgICAgaW50IG9sZGNvZGUgPSBtX2ZyYW1lQ29udGV4dC0+b2xk
Y29kZTsKQEAgLTI0OSw3ICsyNDksNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkb0xaVyhjb25z
dCB1bnNpZ25lZCBjaGFyICpxKQogICAgICAgICAgICAgZ290byBFTkQ7IFwKICAgICB9IHdoaWxl
ICgwKQogCi0gICAgZm9yIChjaCA9IHE7IGNudC0tID4gMDsgY2grKykgeworICAgIGZvciAoY2gg
PSBibG9jazsgY250LS0gPiAwOyBjaCsrKSB7CiAgICAgICAgIC8vIEZlZWQgdGhlIG5leHQgYnl0
ZSBpbnRvIHRoZSBkZWNvZGVyJ3MgMzItYml0IGlucHV0IGJ1ZmZlci4KICAgICAgICAgZGF0dW0g
Kz0gKChpbnQpICpjaCkgPDwgYml0czsKICAgICAgICAgYml0cyArPSA4OwpAQCAtMzQ0LDcgKzM0
NCw2IEBAIEVORDoKICAgICBtX2ZyYW1lQ29udGV4dC0+Yml0cyA9IGJpdHM7CiAgICAgbV9mcmFt
ZUNvbnRleHQtPmNvZGVzaXplID0gY29kZXNpemU7CiAgICAgbV9mcmFtZUNvbnRleHQtPmNvZGVt
YXNrID0gY29kZW1hc2s7Ci0gICAgbV9jb3VudCA9IGNudDsKICAgICBtX2ZyYW1lQ29udGV4dC0+
b2xkY29kZSA9IG9sZGNvZGU7CiAgICAgbV9mcmFtZUNvbnRleHQtPmZpcnN0Y2hhciA9IGZpcnN0
Y2hhcjsKICAgICBtX2ZyYW1lQ29udGV4dC0+ZGF0dW0gPSBkYXR1bTsKQEAgLTM1NCw2OCArMzUz
LDU0IEBAIEVORDoKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBHSUZJbWFnZVJlYWRlcjo6
ZGVjb2RlKEdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgcXVlcnksIGludCBoYWx0QXRGcmFtZSkK
K3sKKyAgICBpZiAobV9ieXRlc1JlYWQgPiBtX2RhdGEtPnNpemUoKSkKKyAgICAgICAgcmV0dXJu
IG1fY2xpZW50LT5zZXRGYWlsZWQoKTsKKyAgICByZXR1cm4gZGVjb2RlSW50ZXJuYWwobV9ieXRl
c1JlYWQsIG1fZGF0YS0+c2l6ZSgpIC0gbV9ieXRlc1JlYWQsIHF1ZXJ5LCBoYWx0QXRGcmFtZSk7
Cit9CiAKIC8vIFByb2Nlc3MgZGF0YSBhcnJpdmluZyBmcm9tIHRoZSBzdHJlYW0gZm9yIHRoZSBn
aWYgZGVjb2Rlci4KLWJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hh
ciAqYnVmLCB1bnNpZ25lZCBsZW4sIEdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgcXVlcnksIHVu
c2lnbmVkIGhhbHRBdEZyYW1lKQorYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJuYWwo
dW5zaWduZWQgZGF0YVBvc2l0aW9uLCB1bnNpZ25lZCBsZW4sIEdJRkltYWdlRGVjb2Rlcjo6R0lG
UXVlcnkgcXVlcnksIHVuc2lnbmVkIGhhbHRBdEZyYW1lKQogewogICAgIGlmICghbGVuKSB7CiAg
ICAgICAgIC8vIE5vIG5ldyBkYXRhIGhhcyBjb21lIGluIHNpbmNlIHRoZSBsYXN0IGNhbGwsIGp1
c3QgaWdub3JlIHRoaXMgY2FsbC4KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAg
Y29uc3QgdW5zaWduZWQgY2hhciAqcSA9IGJ1ZjsKLQotICAgIC8vIEFkZCB3aGF0IHdlIGhhdmUg
c28gZmFyIHRvIHRoZSBibG9jay4KLSAgICAvLyBJZiBwcmV2aW91cyBjYWxsIHRvIG1lIGxlZnQg
c29tZXRoaW5nIGluIHRoZSBob2xkIGZpcnN0IGNvbXBsZXRlIGN1cnJlbnQgYmxvY2sKLSAgICAv
LyBvciBpZiB3ZSBhcmUgZmlsbGluZyB0aGUgY29sb3JtYXBzLCBmaXJzdCBjb21wbGV0ZSB0aGUg
Y29sb3JtYXAuCi0gICAgdW5zaWduZWQgY2hhciogcCA9IDA7Ci0gICAgaWYgKG1fc3RhdGUgPT0g
R0lGR2xvYmFsQ29sb3JtYXApCi0gICAgICAgIHAgPSBtX2dsb2JhbENvbG9ybWFwOwotICAgIGVs
c2UgaWYgKG1fc3RhdGUgPT0gR0lGSW1hZ2VDb2xvcm1hcCkKLSAgICAgICAgcCA9IG1fZnJhbWVD
b250ZXh0ID8gbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXAgOiAwOwotICAgIGVsc2UgaWYg
KG1fYnl0ZXNJbkhvbGQpCi0gICAgICAgIHAgPSBtX2hvbGQ7Ci0gICAgZWxzZQotICAgICAgICBw
ID0gMDsKLQotICAgIGlmIChwIHx8IChtX3N0YXRlID09IEdJRkdsb2JhbENvbG9ybWFwKSB8fCAo
bV9zdGF0ZSA9PSBHSUZJbWFnZUNvbG9ybWFwKSkgewotICAgICAgICAvLyBBZGQgd2hhdCB3ZSBo
YXZlIHNvZmFyIHRvIHRoZSBibG9jawotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBsZW4gPCBt
X2J5dGVzVG9Db25zdW1lID8gbGVuIDogbV9ieXRlc1RvQ29uc3VtZTsKLSAgICAgICAgaWYgKHAp
Ci0gICAgICAgICAgICBtZW1jcHkocCArIG1fYnl0ZXNJbkhvbGQsIGJ1ZiwgbGVuZ3RoKTsKLQot
ICAgICAgICBpZiAobGVuZ3RoIDwgbV9ieXRlc1RvQ29uc3VtZSkgewotICAgICAgICAgICAgLy8g
Tm90IGVub3VnaCBpbiAnYnVmJyB0byBjb21wbGV0ZSBjdXJyZW50IGJsb2NrLCBnZXQgbW9yZQot
ICAgICAgICAgICAgbV9ieXRlc0luSG9sZCArPSBsZW5ndGg7Ci0gICAgICAgICAgICBtX2J5dGVz
VG9Db25zdW1lIC09IGxlbmd0aDsKLSAgICAgICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAg
ICAgICAgICBtX2NsaWVudC0+ZGVjb2RpbmdIYWx0ZWQoMCk7Ci0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXNldCBob2xkIGJ1ZmZlciBjb3VudAot
ICAgICAgICBtX2J5dGVzSW5Ib2xkID0gMDsKKyAgICAvLyBJZiB0aGVyZSdzIG5vdCBlbm91Z2gg
Ynl0ZXMgZm9yIHRoaXMgYmxvY2sgdGhlbiByZXR1cm4uCisgICAgaWYgKGxlbiA8IG1fYnl0ZXNJ
bk5leHRCbG9jaykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIC8vIFBvaW50ICdx
JyB0byBjb21wbGV0ZSBibG9jayBpbiBob2xkIChvciBpbiBjb2xvcm1hcCkKLSAgICAgICAgcSA9
IHA7Ci0gICAgfQorICAgIC8vIFZhcmlhYmxlczoKKyAgICAvLyBxCisgICAgLy8gICBQb2ludGVy
IHRvIHRoZSBjdXJyZW50IGJsb2NrLgorICAgIC8vIAorICAgIC8vIG1fYnl0ZXNJbk5leHRCbG9j
aworICAgIC8vICAgTnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBuZXh0IGJsb2NrLiBJdCdzIHZhbHVl
IGlzIHVwZGF0ZWQgaW4gZWFjaCBpdGVyYXRpb24gYWZ0ZXIKKyAgICAvLyAgIHByb2Nlc3Npbmcg
dGhlIGN1cnJlbnQgYmxvY2suCisgICAgLy8KKyAgICAvLyBkYXRhUG9zaXRpb24KKyAgICAvLyAg
IEluZGV4IHRvIHRoZSBmaXJzdCBieXRlIGluICdtX2RhdGEnIGZvciB0aGUgY3VycmVudCBibG9j
ay4KKyAgICAvLworICAgIC8vIGxlbgorICAgIC8vICAgTnVtYmVyIG9mIGJ5dGVzIGxlZnQgaW4g
aW5wdXQgYnVmZmVyIGZyb20gcG9zaXRpb24gJ2RhdGFQb3NpdGlvbicuCisKKyAgICAvLyBUaGlz
IGxvb3AgcmVhZHMgYXMgbWFueSBibG9ja3MgZnJvbSB8bV9kYXRhfCBhcyBwb3NzaWJsZS4KKyAg
ICAvLyBCZWdpbm5pbmcgb2YgZWFjaCBpdGVyYXRpb24gZGF0YVBvc2l0aW9uIHdpbGwgYmUgYWR2
YW5jZWQgbV9ieXRlc0luTmV4dEJsb2NrIHRvIHBvaW50CisgICAgLy8gdG8gdGhlIG5leHQgYmxv
Y2ssIGxlbiBpcyBkZWNyZW1lbnRlZCBhY2NvcmRpbmdseS4KKyAgICB3aGlsZSAobGVuID49IG1f
Ynl0ZXNJbk5leHRCbG9jaykgeworICAgICAgICAvLyBGSVhNRTogUmVuYW1lIHRoaXMgdmFyaWFi
bGUgdG8gY3VycmVudEJsb2NrLgorICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBxID0gZGF0
YShkYXRhUG9zaXRpb24pOwogCi0gICAgLy8gSW52YXJpYW50OgotICAgIC8vICAgICdxJyBpcyBz
dGFydCBvZiBjdXJyZW50IHRvIGJlIHByb2Nlc3NlZCBibG9jayAoaG9sZCwgY29sb3JtYXAgb3Ig
YnVmKQotICAgIC8vICAgICdtX2J5dGVzVG9Db25zdW1lJyBpcyBudW1iZXIgb2YgYnl0ZXMgdG8g
Y29uc3VtZSBmcm9tICdidWYnCi0gICAgLy8gICAgJ2J1ZicgcG9pbnRzIHRvIHRoZSBieXRlcyB0
byBiZSBjb25zdW1lZCBmcm9tIHRoZSBpbnB1dCBidWZmZXIKLSAgICAvLyAgICAnbGVuJyBpcyBu
dW1iZXIgb2YgYnl0ZXMgbGVmdCBpbiBpbnB1dCBidWZmZXIgZnJvbSBwb3NpdGlvbiAnYnVmJy4K
LSAgICAvLyAgICBBdCBlbnRyYW5jZSBvZiB0aGUgZm9yIGxvb3Agd2lsbCAnYnVmJyB3aWxsIGJl
IG1vdmVkICdtX2J5dGVzVG9Db25zdW1lJwotICAgIC8vICAgIHRvIHBvaW50IHRvIG5leHQgYnVm
ZmVyLCAnbGVuJyBpcyBhZGp1c3RlZCBhY2NvcmRpbmdseS4KLSAgICAvLyAgICBTbyB0aGF0IG5l
eHQgcm91bmQgaW4gZm9yIGxvb3AsIHEgZ2V0cyBwb2ludGVkIHRvIHRoZSBuZXh0IGJ1ZmZlci4K
LSAgICBmb3IgKDtsZW4gPj0gbV9ieXRlc1RvQ29uc3VtZTsgcSA9IGJ1ZikgewogICAgICAgICAv
LyBFYXQgdGhlIGN1cnJlbnQgYmxvY2sgZnJvbSB0aGUgYnVmZmVyLCBxIGtlZXBzIHBvaW50ZWQg
YXQgY3VycmVudCBibG9jay4KLSAgICAgICAgYnVmICs9IG1fYnl0ZXNUb0NvbnN1bWU7Ci0gICAg
ICAgIGxlbiAtPSBtX2J5dGVzVG9Db25zdW1lOworICAgICAgICBkYXRhUG9zaXRpb24gKz0gbV9i
eXRlc0luTmV4dEJsb2NrOworICAgICAgICBsZW4gLT0gbV9ieXRlc0luTmV4dEJsb2NrOwogCiAg
ICAgICAgIHN3aXRjaCAobV9zdGF0ZSkgewogICAgICAgICBjYXNlIEdJRkxaVzoKLSAgICAgICAg
ICAgIGlmICghZG9MWlcocSkpCisgICAgICAgICAgICAvLyBtX2J5dGVzSW5OZXh0QmxvY2sgaXMg
dGhlIGN1cnJlbnQgYmxvY2sgc2l6ZSBiZWNhdXNlIGl0IGhhc24ndCBiZWVuIHVwZGF0ZWQuCisg
ICAgICAgICAgICBpZiAoIWRvTFpXKHEsIG1fYnl0ZXNJbk5leHRCbG9jaykpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOyAvLyBJZiBkb0xaVygpIGVuY291bnRlcmVkIGFuIGVycm9yLCBp
dCBoYXMgYWxyZWFkeSBjYWxsZWQgbV9jbGllbnQtPnNldEZhaWxlZCgpLgogICAgICAgICAgICAg
R0VUTigxLCBHSUZTdWJCbG9jayk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTQ4OCwyMyArNDcz
LDE5IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVm
LCB1bnNpZ25lZCBsZW4sIEdJRkltYWdlRGVjb2RlCiAKICAgICAgICAgICAgIGlmICgocVs0XSAm
IDB4ODApICYmIG1fZ2xvYmFsQ29sb3JtYXBTaXplID4gMCkgeyAvKiBnbG9iYWwgbWFwICovCiAg
ICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBnbG9iYWwgY29sb3JtYXAKLSAgICAgICAgICAgICAg
ICBjb25zdCB1bnNpZ25lZCBzaXplID0gMyptX2dsb2JhbENvbG9ybWFwU2l6ZTsKKyAgICAgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCBnbG9iYWxDb2xvcm1hcEJ5dGVzID0gMyAqIG1fZ2xvYmFs
Q29sb3JtYXBTaXplOworICAgICAgICAgICAgICAgIG1fZ2xvYmFsQ29sb3JtYXBQb3NpdGlvbiA9
IGRhdGFQb3NpdGlvbjsKIAotICAgICAgICAgICAgICAgIC8vIE1hbGxvYyB0aGUgY29sb3IgbWFw
LCBidXQgb25seSBpZiB3ZSdyZSBub3QganVzdCBjb3VudGluZyBmcmFtZXMuCi0gICAgICAgICAg
ICAgICAgaWYgKHF1ZXJ5ICE9IEdJRkltYWdlRGVjb2Rlcjo6R0lGRnJhbWVDb3VudFF1ZXJ5KQot
ICAgICAgICAgICAgICAgICAgICBtX2dsb2JhbENvbG9ybWFwID0gbmV3IHVuc2lnbmVkIGNoYXJb
c2l6ZV07Ci0KLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgc2l6ZSkgewotICAgICAgICAgICAg
ICAgICAgICAvLyBVc2UgJ2hvbGQnIHBhdHRlcm4gdG8gZ2V0IHRoZSBnbG9iYWwgY29sb3JtYXAK
LSAgICAgICAgICAgICAgICAgICAgR0VUTihzaXplLCBHSUZHbG9iYWxDb2xvcm1hcCk7CisgICAg
ICAgICAgICAgICAgaWYgKGxlbiA8IGdsb2JhbENvbG9ybWFwQnl0ZXMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gTm90IGVub3VnaCBieXRlcyB0byByZWFkIHRoZSBlbnRpcmUgZ2xvYmFsIGNv
bG9ybWFwIHRoaXMgdGltZSBzbworICAgICAgICAgICAgICAgICAgICAvLyByZWFkIGl0IGFzIHRo
ZSBuZXh0IGJsb2NrLgorICAgICAgICAgICAgICAgICAgICBHRVROKGdsb2JhbENvbG9ybWFwQnl0
ZXMsIEdJRkdsb2JhbENvbG9ybWFwKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgLy8gQ29weSBldmVyeXRoaW5nIGFuZCBn
byBkaXJlY3RseSB0byBHSUZJbWFnZV9zdGFydC4KLSAgICAgICAgICAgICAgICBpZiAobV9nbG9i
YWxDb2xvcm1hcCkKLSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KG1fZ2xvYmFsQ29sb3JtYXAs
IGJ1Ziwgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnVmICs9IHNpemU7Ci0gICAgICAgICAgICAg
ICAgbGVuIC09IHNpemU7CisgICAgICAgICAgICAgICAgLy8gVGhlIGVudGlyZSBnbG9iYWwgY29s
b3JtYXAgaXMgcmVjZWl2ZWQgc28gYWR2YW5jZSByZWFkIHBvc2l0aW9uLgorICAgICAgICAgICAg
ICAgIGRhdGFQb3NpdGlvbiArPSBnbG9iYWxDb2xvcm1hcEJ5dGVzOworICAgICAgICAgICAgICAg
IGxlbiAtPSBnbG9iYWxDb2xvcm1hcEJ5dGVzOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAg
ICBHRVROKDEsIEdJRkltYWdlU3RhcnQpOwpAQCAtNTE2LDcgKzQ5Nyw3IEBAIGJvb2wgR0lGSW1h
Z2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIEdJ
RkltYWdlRGVjb2RlCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEdJRkdsb2JhbENvbG9ybWFw
OiB7Ci0gICAgICAgICAgICAvLyBFdmVyeXRoaW5nIGlzIGFscmVhZHkgY29waWVkIGludG8gbV9n
bG9iYWxDb2xvcm1hcAorICAgICAgICAgICAgLy8gRG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZywg
cHJvY2VlZCB0byByZWFkIHRoZSBpbWFnZS4KICAgICAgICAgICAgIEdFVE4oMSwgR0lGSW1hZ2VT
dGFydCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTQ1LDcgKzUyNiw3IEBA
IGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNp
Z25lZCBsZW4sIEdJRkltYWdlRGVjb2RlCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEdJRkV4
dGVuc2lvbjogewotICAgICAgICAgICAgbV9jb3VudCA9IHFbMV07CisgICAgICAgICAgICB1bnNp
Z25lZCBieXRlc0luQmxvY2sgPSBxWzFdOwogICAgICAgICAgICAgR0lGU3RhdGUgZXMgPSBHSUZT
a2lwQmxvY2s7CiAKICAgICAgICAgICAgIC8vIFRoZSBHSUYgc3BlYyBtYW5kYXRlcyBsZW5ndGhz
IGZvciB0aHJlZSBvZiB0aGUgZXh0ZW5zaW9ucyBiZWxvdy4KQEAgLTU2NiwxNyArNTQ3LDE3IEBA
IGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNp
Z25lZCBsZW4sIEdJRkltYWdlRGVjb2RlCiAgICAgICAgICAgICBzd2l0Y2ggKCpxKSB7CiAgICAg
ICAgICAgICBjYXNlIDB4Zjk6CiAgICAgICAgICAgICAgICAgZXMgPSBHSUZDb250cm9sRXh0ZW5z
aW9uOwotICAgICAgICAgICAgICAgIG1fY291bnQgPSBzdGQ6Om1heChtX2NvdW50LCA0KTsKKyAg
ICAgICAgICAgICAgICBieXRlc0luQmxvY2sgPSBzdGQ6Om1heChieXRlc0luQmxvY2ssIDR1KTsK
ICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSAweDAxOgogICAgICAg
ICAgICAgICAgIC8vIGlnbm9yaW5nIHBsYWluIHRleHQgZXh0ZW5zaW9uCi0gICAgICAgICAgICAg
ICAgbV9jb3VudCA9IHN0ZDo6bWF4KG1fY291bnQsIDEyKTsKKyAgICAgICAgICAgICAgICBieXRl
c0luQmxvY2sgPSBzdGQ6Om1heChieXRlc0luQmxvY2ssIDEydSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgMHhmZjoKICAgICAgICAgICAgICAgICBlcyA9IEdJ
RkFwcGxpY2F0aW9uRXh0ZW5zaW9uOwotICAgICAgICAgICAgICAgIG1fY291bnQgPSBzdGQ6Om1h
eChtX2NvdW50LCAxMSk7CisgICAgICAgICAgICAgICAgYnl0ZXNJbkJsb2NrID0gc3RkOjptYXgo
Ynl0ZXNJbkJsb2NrLCAxMXUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAg
ICBjYXNlIDB4ZmU6CkBAIC01ODQsOCArNTY1LDggQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVh
ZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgR0lGSW1hZ2VEZWNvZGUK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgaWYg
KG1fY291bnQpCi0gICAgICAgICAgICAgICAgR0VUTihtX2NvdW50LCBlcyk7CisgICAgICAgICAg
ICBpZiAoYnl0ZXNJbkJsb2NrKQorICAgICAgICAgICAgICAgIEdFVE4oYnl0ZXNJbkJsb2NrLCBl
cyk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgR0VUTigxLCBHSUZJbWFnZVN0
YXJ0KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzI5LDggKzcxMCw3IEBAIGJvb2wgR0lGSW1h
Z2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIEdJ
RkltYWdlRGVjb2RlCiAgICAgICAgICAgICBpZiAocXVlcnkgPT0gR0lGSW1hZ2VEZWNvZGVyOjpH
SUZTaXplUXVlcnkgfHwgaGFsdEF0RnJhbWUgPT0gbV9pbWFnZXNEZWNvZGVkKSB7CiAgICAgICAg
ICAgICAgICAgLy8gVGhlIGRlY29kZXIgbmVlZHMgdG8gc3RvcC4gSGFuZCBiYWNrIHRoZSBudW1i
ZXIgb2YgYnl0ZXMgd2UgY29uc3VtZWQgZnJvbQogICAgICAgICAgICAgICAgIC8vIGJ1ZmZlciBt
aW51cyA5ICh0aGUgYW1vdW50IHdlIGNvbnN1bWVkIHRvIHJlYWQgdGhlIGhlYWRlcikuCi0gICAg
ICAgICAgICAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICAgICAgICAgICAgICBtX2NsaWVudC0+
ZGVjb2RpbmdIYWx0ZWQobGVuICsgOSk7CisgICAgICAgICAgICAgICAgc2V0UmVtYWluaW5nQnl0
ZXMobGVuICsgOSk7CiAgICAgICAgICAgICAgICAgR0VUTig5LCBHSUZJbWFnZUhlYWRlcik7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CkBAIC03OTQsMzMgKzc3
NCwyNCBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1
ZiwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURlY29kZQogICAgICAgICAgICAgLy8gaGFzIGEgbG9j
YWwgY29sb3JtYXA/CiAgICAgICAgICAgICBpZiAocVs4XSAmIDB4ODApIHsKICAgICAgICAgICAg
ICAgICBpbnQgbnVtQ29sb3JzID0gMiA8PCAocVs4XSAmIDB4Nyk7Ci0gICAgICAgICAgICAgICAg
Y29uc3QgdW5zaWduZWQgc2l6ZSA9IDMgKiBudW1Db2xvcnM7Ci0gICAgICAgICAgICAgICAgdW5z
aWduZWQgY2hhciAqbWFwID0gbV9mcmFtZUNvbnRleHQgPyBtX2ZyYW1lQ29udGV4dC0+bG9jYWxD
b2xvcm1hcCA6IDA7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0ICYmICghbWFw
IHx8IChudW1Db2xvcnMgPiBtX2ZyYW1lQ29udGV4dC0+bG9jYWxDb2xvcm1hcFNpemUpKSkgewot
ICAgICAgICAgICAgICAgICAgICBkZWxldGUgW11tYXA7Ci0gICAgICAgICAgICAgICAgICAgIG1h
cCA9IG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdOwotICAgICAgICAgICAgICAgICAgICBpZiAoIW1h
cCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/IG1fY2xpZW50LT5z
ZXRGYWlsZWQoKSA6IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBj
b25zdCB1bnNpZ25lZCBsb2NhbENvbG9ybWFwQnl0ZXMgPSAzICogbnVtQ29sb3JzOwogCiAgICAg
ICAgICAgICAgICAgLy8gU3dpdGNoIHRvIHRoZSBuZXcgbG9jYWwgcGFsZXR0ZSBhZnRlciBpdCBs
b2FkcwogICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkgewotICAgICAgICAgICAg
ICAgICAgICBtX2ZyYW1lQ29udGV4dC0+bG9jYWxDb2xvcm1hcCA9IG1hcDsKKyAgICAgICAgICAg
ICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXBQb3NpdGlvbiA9IGRhdGFQb3Np
dGlvbjsKICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXBT
aXplID0gbnVtQ29sb3JzOwogICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNM
b2NhbENvbG9ybWFwRGVmaW5lZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICAgICAgaWYgKGxlbiA8IHNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gVXNlICdo
b2xkJyBwYXR0ZXJuIHRvIGdldCB0aGUgaW1hZ2UgY29sb3JtYXAKLSAgICAgICAgICAgICAgICAg
ICAgR0VUTihzaXplLCBHSUZJbWFnZUNvbG9ybWFwKTsKKyAgICAgICAgICAgICAgICBpZiAobGVu
IDwgbG9jYWxDb2xvcm1hcEJ5dGVzKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE5vdCBlbm91
Z2ggYnl0ZXMgdG8gcmVhZCB0aGUgZW50aXJlIGNvbG9ybWFwLCByZWFkIGl0IGFzIG5leHQgYmxv
Y2suCisgICAgICAgICAgICAgICAgICAgIEdFVE4obG9jYWxDb2xvcm1hcEJ5dGVzLCBHSUZJbWFn
ZUNvbG9ybWFwKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgLy8gQ29weSBldmVyeXRoaW5nIGFuZCBkaXJlY3RseSBnbyB0
byBHSUZMWldTdGFydAotICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkKLSAgICAg
ICAgICAgICAgICAgICAgbWVtY3B5KG1fZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFwLCBidWYs
IHNpemUpOwotICAgICAgICAgICAgICAgIGJ1ZiArPSBzaXplOwotICAgICAgICAgICAgICAgIGxl
biAtPSBzaXplOworICAgICAgICAgICAgICAgIC8vIFRoZXJlJ3MgZW5vdWdoIGJ5dGVzIGZvciB0
aGUgZW50aXJlIGNvbG9ybWFwIHNvIGFkdmFuY2UgZGF0YSBwb2ludGVyLgorICAgICAgICAgICAg
ICAgIGRhdGFQb3NpdGlvbiArPSBsb2NhbENvbG9ybWFwQnl0ZXM7CisgICAgICAgICAgICAgICAg
bGVuIC09IGxvY2FsQ29sb3JtYXBCeXRlczsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9mcmFt
ZUNvbnRleHQpIHsKICAgICAgICAgICAgICAgICAvLyBTd2l0Y2ggYmFjayB0byB0aGUgZ2xvYmFs
IHBhbGV0dGUKICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNMb2NhbENvbG9ybWFw
RGVmaW5lZCA9IGZhbHNlOwpAQCAtODM3LDE0ICs4MDgsMTUgQEAgYm9vbCBHSUZJbWFnZVJlYWRl
cjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgR0lGSW1hZ2VE
ZWNvZGUKIAogICAgICAgICBjYXNlIEdJRlN1YkJsb2NrOiB7CiAgICAgICAgICAgICAvLyBTdGls
bCB3b3JraW5nIG9uIHRoZSBzYW1lIGltYWdlOiBQcm9jZXNzIG5leHQgTFpXIGRhdGEgYmxvY2su
Ci0gICAgICAgICAgICBpZiAoKG1fY291bnQgPSAqcSkpIHsKKyAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGJ5dGVzSW5CbG9jayA9ICpxOworICAgICAgICAgICAgaWYgKGJ5dGVzSW5CbG9jaykg
ewogICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBhcmUgc3RpbGwgcm93cyBsZWZ0
LiBJZiB0aGUgR0lGIGRhdGEKICAgICAgICAgICAgICAgICAvLyBpcyBjb3JydXB0LCB3ZSBtYXkg
bm90IGdldCBhbiBleHBsaWNpdCB0ZXJtaW5hdG9yLgogICAgICAgICAgICAgICAgIGlmIChtX2Zy
YW1lQ29udGV4dCAmJiAhbV9mcmFtZUNvbnRleHQtPnJvd3NSZW1haW5pbmcpIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBpbGxlZ2FsIEdJRiwgYnV0IHdlIHJlbWFpbiB0b2xl
cmFudC4KICAgICAgICAgICAgICAgICAgICAgR0VUTigxLCBHSUZTdWJCbG9jayk7CiAgICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgICAgIEdFVE4obV9jb3VudCwgR0lGTFpXKTsKKyAgICAg
ICAgICAgICAgICBHRVROKGJ5dGVzSW5CbG9jaywgR0lGTFpXKTsKICAgICAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGFyZSBhbnkgbW9yZSBpbWFnZXMg
aW4gdGhpcyBzZXF1ZW5jZS4KICAgICAgICAgICAgICAgICBtX2ltYWdlc0RlY29kZWQrKzsKQEAg
LTg3NywyMyArODQ5LDEyIEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWdu
ZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIEdJRkltYWdlRGVjb2RlCiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICAvLyBDb3B5IHRoZSBsZWZ0b3ZlciBpbnRvIG1fZnJhbWVDb250ZXh0LT5tX2hv
bGQKLSAgICBtX2J5dGVzSW5Ib2xkID0gbGVuOwotICAgIGlmIChsZW4pIHsKLSAgICAgICAgLy8g
QWRkIHdoYXQgd2UgaGF2ZSBzb2ZhciB0byB0aGUgYmxvY2sKLSAgICAgICAgdW5zaWduZWQgY2hh
ciogcDsKLSAgICAgICAgaWYgKG1fc3RhdGUgPT0gR0lGR2xvYmFsQ29sb3JtYXApCi0gICAgICAg
ICAgICBwID0gbV9nbG9iYWxDb2xvcm1hcDsKLSAgICAgICAgZWxzZSBpZiAobV9zdGF0ZSA9PSBH
SUZJbWFnZUNvbG9ybWFwKQotICAgICAgICAgICAgcCA9IG1fZnJhbWVDb250ZXh0ID8gbV9mcmFt
ZUNvbnRleHQtPmxvY2FsQ29sb3JtYXAgOiAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBw
ID0gbV9ob2xkOwotICAgICAgICBpZiAocCkKLSAgICAgICAgICAgIG1lbWNweShwLCBidWYsIGxl
bik7Ci0gICAgICAgIG1fYnl0ZXNUb0NvbnN1bWUgLT0gbGVuOwotICAgIH0KLQotICAgIGlmICht
X2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmRlY29kaW5nSGFsdGVkKDApOworICAgIHNldFJl
bWFpbmluZ0J5dGVzKGxlbik7CiAgICAgcmV0dXJuIGZhbHNlOwogfQorCit2b2lkIEdJRkltYWdl
UmVhZGVyOjpzZXRSZW1haW5pbmdCeXRlcyh1bnNpZ25lZCByZW1haW5pbmdCeXRlcykKK3sKKyAg
ICBBU1NFUlQocmVtYWluaW5nQnl0ZXMgPD0gbV9kYXRhLT5zaXplKCkpOworICAgIG1fYnl0ZXNS
ZWFkID0gbV9kYXRhLT5zaXplKCkgLSByZW1haW5pbmdCeXRlczsKK30KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVh
ZGVyLmgKaW5kZXggYzA4MjkxOGM0MzE2NmIzODAyOWViZGY0ZjI0Y2YzNGRlNjlkNzQ5Yi4uOTk4
Y2QwZWMyMDllM2UxOWU1NDE0NDA2OTYzODAxNWQ1OWNkNDlmYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVh
ZGVyLmgKQEAgLTQxLDExICs0MSwxMiBAQAogLy8gRGVmaW5lIG91cnNlbHZlcyBhcyB0aGUgY2xp
ZW50UHRyLiAgTW96aWxsYSBqdXN0IGhhY2tlZCB0aGVpciBDKysgY2FsbGJhY2sgY2xhc3MgaW50
byB0aGlzIG9sZCBDIGRlY29kZXIsCiAvLyBzbyB3ZSB3aWxsIHRvby4KICNpbmNsdWRlICJHSUZJ
bWFnZURlY29kZXIuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKIAogI2RlZmluZSBNQVhf
TFpXX0JJVFMgICAgICAgICAgMTIKICNkZWZpbmUgTUFYX0JJVFMgICAgICAgICAgICA0MDk3IC8q
IDJeTUFYX0xaV19CSVRTKzEgKi8KICNkZWZpbmUgTUFYX0NPTE9SUyAgICAgICAgICAgMjU2Ci0j
ZGVmaW5lIE1BWF9IT0xEX1NJWkUgICAgICAgIDI1NgorI2RlZmluZSBHSUZfQ09MT1JTICAgICAg
ICAgICAgIDMKIAogY29uc3QgaW50IGNMb29wQ291bnROb3RTZWVuID0gLTI7CiAKQEAgLTEwMyw3
ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaGVpZ2h0OwogICAgIGludCB0cGl4ZWw7
IC8vIEluZGV4IG9mIHRyYW5zcGFyZW50IHBpeGVsLgogICAgIFdlYkNvcmU6OkltYWdlRnJhbWU6
OkZyYW1lRGlzcG9zYWxNZXRob2QgZGlzcG9zYWxNZXRob2Q7IC8vIFJlc3RvcmUgdG8gYmFja2dy
b3VuZCwgbGVhdmUgaW4gcGxhY2UsIGV0Yy4KLSAgICB1bnNpZ25lZCBjaGFyICpsb2NhbENvbG9y
bWFwOyAvLyBQZXItaW1hZ2UgY29sb3JtYXAuCisgICAgdW5zaWduZWQgbG9jYWxDb2xvcm1hcFBv
c2l0aW9uOyAvLyBQZXItaW1hZ2UgY29sb3JtYXAuCiAgICAgaW50IGxvY2FsQ29sb3JtYXBTaXpl
OyAvLyBTaXplIG9mIGxvY2FsIGNvbG9ybWFwIGFycmF5LgogICAgIAogICAgIGJvb2wgaXNMb2Nh
bENvbG9ybWFwRGVmaW5lZCA6IDE7CkBAIC0xNDAsNyArMTQxLDcgQEAgcHVibGljOgogICAgICAg
ICAsIGhlaWdodCgwKQogICAgICAgICAsIHRwaXhlbCgwKQogICAgICAgICAsIGRpc3Bvc2FsTWV0
aG9kKFdlYkNvcmU6OkltYWdlRnJhbWU6OkRpc3Bvc2VOb3RTcGVjaWZpZWQpCi0gICAgICAgICwg
bG9jYWxDb2xvcm1hcCgwKQorICAgICAgICAsIGxvY2FsQ29sb3JtYXBQb3NpdGlvbigwKQogICAg
ICAgICAsIGxvY2FsQ29sb3JtYXBTaXplKDApCiAgICAgICAgICwgaXNMb2NhbENvbG9ybWFwRGVm
aW5lZChmYWxzZSkKICAgICAgICAgLCBwcm9ncmVzc2l2ZURpc3BsYXkoZmFsc2UpCkBAIC0xNTYs
NyArMTU3LDYgQEAgcHVibGljOgogICAgIH5HSUZGcmFtZUNvbnRleHQoKQogICAgIHsKICAgICAg
ICAgZGVsZXRlIFtdIHJvd2J1ZjsKLSAgICAgICAgZGVsZXRlIFtdIGxvY2FsQ29sb3JtYXA7CiAg
ICAgICAgIGRlbGV0ZSBbXSBwcmVmaXg7CiAgICAgICAgIGRlbGV0ZSBbXSBzdWZmaXg7CiAgICAg
ICAgIGRlbGV0ZSBbXSBzdGFjazsKQEAgLTE2OSw2NiArMTY5LDkzIEBAIHB1YmxpYzoKICAgICBH
SUZJbWFnZVJlYWRlcihXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIGNsaWVudCA9IDApCiAgICAg
ICAgIDogbV9jbGllbnQoY2xpZW50KQogICAgICAgICAsIG1fc3RhdGUoR0lGVHlwZSkKLSAgICAg
ICAgLCBtX2J5dGVzVG9Db25zdW1lKDYpCi0gICAgICAgICwgbV9ieXRlc0luSG9sZCgwKQotICAg
ICAgICAsIG1fZ2xvYmFsQ29sb3JtYXAoMCkKKyAgICAgICAgLCBtX2J5dGVzSW5OZXh0QmxvY2so
NikgLy8gTnVtYmVyIG9mIGJ5dGVzIGZvciB0aGUgZmlyc3QgcmVhZC4KKyAgICAgICAgLCBtX2J5
dGVzUmVhZCgwKQogICAgICAgICAsIG1fc2NyZWVuQmdjb2xvcigwKQogICAgICAgICAsIG1fdmVy
c2lvbigwKQogICAgICAgICAsIG1fc2NyZWVuV2lkdGgoMCkKICAgICAgICAgLCBtX3NjcmVlbkhl
aWdodCgwKQorICAgICAgICAsIG1fZ2xvYmFsQ29sb3JtYXBQb3NpdGlvbigwKQogICAgICAgICAs
IG1fZ2xvYmFsQ29sb3JtYXBTaXplKDApCiAgICAgICAgICwgbV9pbWFnZXNEZWNvZGVkKDApCiAg
ICAgICAgICwgbV9pbWFnZXNDb3VudCgwKQogICAgICAgICAsIG1fbG9vcENvdW50KGNMb29wQ291
bnROb3RTZWVuKQotICAgICAgICAsIG1fY291bnQoMCkKICAgICAgICAgLCBtX2ZyYW1lQ29udGV4
dCgwKQogICAgIHsKICAgICB9CiAKICAgICB+R0lGSW1hZ2VSZWFkZXIoKQogICAgIHsKLSAgICAg
ICAgZGVsZXRlIFtdIG1fZ2xvYmFsQ29sb3JtYXA7Ci0gICAgICAgIG1fZ2xvYmFsQ29sb3JtYXAg
PSAwOwotCiAgICAgICAgIGRlbGV0ZSBtX2ZyYW1lQ29udGV4dDsKICAgICAgICAgbV9mcmFtZUNv
bnRleHQgPSAwOwogICAgIH0KIAotICAgIGJvb2wgcmVhZChjb25zdCB1bnNpZ25lZCBjaGFyKiBi
dWYsIHVuc2lnbmVkIG51bWJ5dGVzLCBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5
ID0gV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZGdWxsUXVlcnksIHVuc2lnbmVkIGhhbHRB
dEZyYW1lID0gLTEpOworICAgIHZvaWQgc2V0RGF0YShQYXNzUmVmUHRyPFdlYkNvcmU6OlNoYXJl
ZEJ1ZmZlcj4gZGF0YSkgeyBtX2RhdGEgPSBkYXRhOyB9CisgICAgYm9vbCBkZWNvZGUoV2ViQ29y
ZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSwgaW50IGhhbHRBdEZyYW1lKTsKIAogICAgIGlu
dCBpbWFnZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VzQ291bnQ7IH0KICAgICBpbnQg
bG9vcENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9sb29wQ291bnQ7IH0KLSAgICB1bnNpZ25lZCBj
aGFyKiBnbG9iYWxDb2xvcm1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsQ29sb3JtYXA7IH0K
KworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGdsb2JhbENvbG9ybWFwKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBjb2xvcm1hcChtX2dsb2JhbENvbG9ybWFwUG9zaXRpb24sIG1fZ2xv
YmFsQ29sb3JtYXBTaXplKTsKKyAgICB9CiAgICAgaW50IGdsb2JhbENvbG9ybWFwU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZ2xvYmFsQ29sb3JtYXBTaXplOyB9CisKKyAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBsb2NhbENvbG9ybWFwKGNvbnN0IEdJRkZyYW1lQ29udGV4dCogZnJhbWUpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAoIWZyYW1lLT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVkKQorICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBjb2xvcm1hcChmcmFtZS0+bG9jYWxD
b2xvcm1hcFBvc2l0aW9uLCBmcmFtZS0+bG9jYWxDb2xvcm1hcFNpemUpOworICAgIH0KKyAgICBp
bnQgbG9jYWxDb2xvcm1hcFNpemUoY29uc3QgR0lGRnJhbWVDb250ZXh0KiBmcmFtZSkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmICghZnJhbWUtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQpCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGZyYW1lLT5sb2NhbENvbG9ybWFwU2l6
ZTsKKyAgICB9CisKICAgICBjb25zdCBHSUZGcmFtZUNvbnRleHQqIGZyYW1lQ29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fZnJhbWVDb250ZXh0OyB9CiAKIHByaXZhdGU6CisgICAgYm9vbCBkZWNv
ZGVJbnRlcm5hbCh1bnNpZ25lZCBkYXRhUG9zaXRpb24sIHVuc2lnbmVkIGxlbiwgV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSA9IFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lG
RnVsbFF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSA9IC0xKTsKICAgICBib29sIG91dHB1dFJv
dygpOwotICAgIGJvb2wgZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciAqcSk7CisgICAgYm9vbCBk
b0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkKTsKKyAgICB2b2lkIHNldFJlbWFp
bmluZ0J5dGVzKHVuc2lnbmVkKTsKKworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEodW5z
aWduZWQgZGF0YVBvc2l0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KG1fZGF0YS0+ZGF0YSgpKSArIGRhdGFQb3Np
dGlvbjsKKyAgICB9CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBjb2xvcm1hcCh1bnNpZ25l
ZCBwb3NpdGlvbiwgaW50IHNpemUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAocG9zaXRpb24g
KyBzaXplICogR0lGX0NPTE9SUyA+IG1fZGF0YS0+c2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIHJldHVybiBkYXRhKHBvc2l0aW9uKTsKKyAgICB9CiAKICAgICBXZWJDb3Jl
OjpHSUZJbWFnZURlY29kZXIqIG1fY2xpZW50OwogCiAgICAgLy8gUGFyc2luZyBzdGF0ZSBtYWNo
aW5lLgogICAgIEdJRlN0YXRlIG1fc3RhdGU7IC8vIEN1cnJlbnQgZGVjb2RlciBtYXN0ZXIgc3Rh
dGUuCi0gICAgdW5zaWduZWQgbV9ieXRlc1RvQ29uc3VtZTsgLy8gTnVtYmVyIG9mIGJ5dGVzIHRv
IGFjY3VtdWxhdGUuCi0gICAgdW5zaWduZWQgbV9ieXRlc0luSG9sZDsgLy8gYnl0ZXMgYWNjdW11
bGF0ZWQgc28gZmFyLgotICAgIHVuc2lnbmVkIGNoYXIgbV9ob2xkW01BWF9IT0xEX1NJWkVdOyAv
LyBBY2N1bXVsYXRpb24gYnVmZmVyLgotICAgIHVuc2lnbmVkIGNoYXIqIG1fZ2xvYmFsQ29sb3Jt
YXA7IC8vICgzKiBNQVhfQ09MT1JTIGluIHNpemUpIERlZmF1bHQgY29sb3JtYXAgaWYgbG9jYWwg
bm90IHN1cHBsaWVkLCAzIGJ5dGVzIGZvciBlYWNoIGNvbG9yLgorICAgIHVuc2lnbmVkIG1fYnl0
ZXNJbk5leHRCbG9jazsgLy8gTnVtYmVyIG9mIGJ5dGVzIHRvIGFjY3VtdWxhdGUuCisgICAgdW5z
aWduZWQgbV9ieXRlc1JlYWQ7IC8vIE51bWJlciBvZiBieXRlcyBwcm9jZXNzZWQuCiAgICAgCiAg
ICAgLy8gR2xvYmFsIChtdWx0aS1pbWFnZSkgc3RhdGUuCiAgICAgaW50IG1fc2NyZWVuQmdjb2xv
cjsgLy8gTG9naWNhbCBzY3JlZW4gYmFja2dyb3VuZCBjb2xvci4KICAgICBpbnQgbV92ZXJzaW9u
OyAvLyBFaXRoZXIgODkgZm9yIEdJRjg5IG9yIDg3IGZvciBHSUY4Ny4KICAgICB1bnNpZ25lZCBt
X3NjcmVlbldpZHRoOyAvLyBMb2dpY2FsIHNjcmVlbiB3aWR0aCAmIGhlaWdodC4KICAgICB1bnNp
Z25lZCBtX3NjcmVlbkhlaWdodDsKKyAgICB1bnNpZ25lZCBtX2dsb2JhbENvbG9ybWFwUG9zaXRp
b247IC8vICgzKiBNQVhfQ09MT1JTIGluIHNpemUpIERlZmF1bHQgY29sb3JtYXAgaWYgbG9jYWwg
bm90IHN1cHBsaWVkLCAzIGJ5dGVzIGZvciBlYWNoIGNvbG9yLgogICAgIGludCBtX2dsb2JhbENv
bG9ybWFwU2l6ZTsgLy8gU2l6ZSBvZiBnbG9iYWwgY29sb3JtYXAgYXJyYXkuCiAgICAgdW5zaWdu
ZWQgbV9pbWFnZXNEZWNvZGVkOyAvLyBDb3VudHMgY29tcGxldGVkIGZyYW1lcyBmb3IgYW5pbWF0
ZWQgR0lGcy4KICAgICBpbnQgbV9pbWFnZXNDb3VudDsgLy8gQ291bnRlZCBhbGwgZnJhbWVzIHNl
ZW4gc28gZmFyIChpbmNsdWRpbmcgaW5jb21wbGV0ZSBmcmFtZXMpLgogICAgIGludCBtX2xvb3BD
b3VudDsgLy8gTmV0c2NhcGUgc3BlY2lmaWMgZXh0ZW5zaW9uIGJsb2NrIHRvIGNvbnRyb2wgdGhl
IG51bWJlciBvZiBhbmltYXRpb24gbG9vcHMgYSBHSUYgcmVuZGVycy4KICAgICAKLSAgICAvLyBO
b3QgcmVhbGx5IGdsb2JhbCwgYnV0IGNvbnZlbmllbnQgdG8gbG9jYXRlIGhlcmUuCi0gICAgaW50
IG1fY291bnQ7IC8vIFJlbWFpbmluZyAjIGJ5dGVzIGluIHN1Yi1ibG9jay4KLSAgICAKICAgICBH
SUZGcmFtZUNvbnRleHQqIG1fZnJhbWVDb250ZXh0OworCisgICAgUmVmUHRyPFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcj4gbV9kYXRhOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXAKaW5kZXggYWExNDE1ZjQyNzFjOTI5OWU5NWQwZjM5NzNjM2E1MGM2YmUxYzdmZS4uZjA0ZWJh
ZDdmYjE2MjVkMmRlNzc0NTI0NzVhN2VhMDQ5OGE4ZWNjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cApAQCAtNjQxLDYgKzY0MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICMgV2Ugc2hvdWxkIG5vdCBpbmNsdWRlIGZpbGVzIGRlcGVuZGluZyBvbiB3ZWJraXRfc3Vw
cG9ydC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGVzZSB0ZXN0cyBkZXBl
bmQgb24gd2Via2l0X3N1cHBvcnQgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICMgZnVuY3Rpb25zIGRlZmluZWQgb25seSBpbiAhV0VCS0lUX0lNUExFTUVOVEFUSU9OLgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvR0lGSW1hZ2VEZWNvZGVyVGVzdC5j
cHAnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGVzdHMvTGV2ZWxEQlRlc3Qu
Y3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdjb25kaXRpb25zJzogWwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5k
ZXggZDU4MTEyODhjZmU0Y2YzMzdhZTQ3NmEzZDU3Mjg3YTFhMTMzMWMyOS4uM2IwYTdhNTNlNTgy
M2M3MWNiZTY4MmI1NzA3NGRmNTZmMTQxMGMxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5n
eXBpCkBAIC03Miw2ICs3Miw3IEBACiAgICAgICAgICAgICAndGVzdHMvRnJhbWVMb2FkZXJDbGll
bnRJbXBsVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ZyYW1lVGVzdEhlbHBlcnMuY3Bw
JywKICAgICAgICAgICAgICd0ZXN0cy9GcmFtZVRlc3RIZWxwZXJzLmgnLAorICAgICAgICAgICAg
J3Rlc3RzL0dJRkltYWdlRGVjb2RlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9HcmFw
aGljc0xheWVyQ2hyb21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURCQWJvcnRP
bkNvcnJ1cHRUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURCQmluZGluZ1V0aWxpdGll
c1Rlc3QuY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR0lG
SW1hZ2VEZWNvZGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dJRklt
YWdlRGVjb2RlclRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRkNTQ3ZTlhZGNjMDAwYWEyOTE0ZmQwZGJm
N2NiNGZjMjUzY2VlOTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3Rlc3RzL0dJRkltYWdlRGVjb2RlclRlc3QuY3BwCkBAIC0wLDAgKzEsMTg3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaW5jbHVkZSAiR0lGSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlICJG
aWxlU3lzdGVtLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8Z3Rlc3Qv
Z3Rlc3QuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViRGF0YS5oPgorI2luY2x1ZGUgPHB1YmxpYy9X
ZWJTaXplLmg+CisjaW5jbHVkZSA8d2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaD4KKyNp
bmNsdWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3Bh
Y2UgeworCitzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWRCdWZmZXI+IHJlYWRGaWxlKGNvbnN0IGNo
YXIqIGZpbGVOYW1lKQoreworICAgIFN0cmluZyBmaWxlUGF0aCA9IHdlYmtpdF9zdXBwb3J0OjpH
ZXRXZWJLaXRSb290RGlyKCk7CisgICAgZmlsZVBhdGguYXBwZW5kKGZpbGVOYW1lKTsKKworICAg
IGxvbmcgbG9uZyBmaWxlU2l6ZTsKKyAgICBpZiAoIWdldEZpbGVTaXplKGZpbGVQYXRoLCBmaWxl
U2l6ZSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRs
ZSA9IG9wZW5GaWxlKGZpbGVQYXRoLCBPcGVuRm9yUmVhZCk7CisgICAgaW50IGZpbGVMZW5ndGgg
PSBzdGF0aWNfY2FzdDxpbnQ+KGZpbGVTaXplKTsKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyKGZp
bGVMZW5ndGgpOworICAgIHJlYWRGcm9tRmlsZShoYW5kbGUsIGJ1ZmZlci5kYXRhKCksIGZpbGVM
ZW5ndGgpOworICAgIGNsb3NlRmlsZShoYW5kbGUpOworICAgIHJldHVybiBTaGFyZWRCdWZmZXI6
OmFkb3B0VmVjdG9yKGJ1ZmZlcik7Cit9CisKK1RFU1QoR0lGSW1hZ2VEZWNvZGVyVGVzdCwgZGVj
b2RlVHdvRnJhbWVzKQoreworICAgIE93blB0cjxHSUZJbWFnZURlY29kZXI+IGRlY29kZXIoYWRv
cHRQdHIobmV3IEdJRkltYWdlRGVjb2RlcihJbWFnZVNvdXJjZTo6QWxwaGFOb3RQcmVtdWx0aXBs
aWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKSkpOworCisgICAg
UmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IHJlYWRGaWxlKCIvTGF5b3V0VGVzdHMvZmFzdC9p
bWFnZXMvcmVzb3VyY2VzL2FuaW1hdGVkLmdpZiIpOworICAgIEFTU0VSVF9UUlVFKGRhdGEuZ2V0
KCkpOworICAgIGRlY29kZXItPnNldERhdGEoZGF0YS5nZXQoKSwgdHJ1ZSk7CisgICAgRVhQRUNU
X0VRKGNBbmltYXRpb25Mb29wT25jZSwgZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkpOworCisg
ICAgSW1hZ2VGcmFtZSogZnJhbWUgPSBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7Cisg
ICAgRVhQRUNUX0VRKEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUsIGZyYW1lLT5zdGF0dXMoKSk7
CisgICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+Z2V0U2tCaXRtYXAoKS53aWR0aCgpKTsKKyAgICBF
WFBFQ1RfRVEoMTYsIGZyYW1lLT5nZXRTa0JpdG1hcCgpLmhlaWdodCgpKTsKKworICAgIGZyYW1l
ID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDEpOworICAgIEVYUEVDVF9FUShJbWFnZUZy
YW1lOjpGcmFtZUNvbXBsZXRlLCBmcmFtZS0+c3RhdHVzKCkpOworICAgIEVYUEVDVF9FUSgxNiwg
ZnJhbWUtPmdldFNrQml0bWFwKCkud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+
Z2V0U2tCaXRtYXAoKS5oZWlnaHQoKSk7CisKKyAgICBFWFBFQ1RfRVEoMnUsIGRlY29kZXItPmZy
YW1lQ291bnQoKSk7CisgICAgRVhQRUNUX0VRKGNBbmltYXRpb25Mb29wSW5maW5pdGUsIGRlY29k
ZXItPnJlcGV0aXRpb25Db3VudCgpKTsKK30KKworVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBw
YXJzZUFuZERlY29kZSkKK3sKKyAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGFk
b3B0UHRyKG5ldyBHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlw
bGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkpKTsKKworICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSByZWFkRmlsZSgiL0xheW91dFRlc3RzL2Zhc3Qv
aW1hZ2VzL3Jlc291cmNlcy9hbmltYXRlZC5naWYiKTsKKyAgICBBU1NFUlRfVFJVRShkYXRhLmdl
dCgpKTsKKyAgICBkZWNvZGVyLT5zZXREYXRhKGRhdGEuZ2V0KCksIHRydWUpOworICAgIEVYUEVD
VF9FUShjQW5pbWF0aW9uTG9vcE9uY2UsIGRlY29kZXItPnJlcGV0aXRpb25Db3VudCgpKTsKKwor
ICAgIC8vIFRoaXMgY2FsbCB3aWxsIHBhcnNlIHRoZSBlbnRpcmUgZmlsZS4KKyAgICBFWFBFQ1Rf
RVEoMnUsIGRlY29kZXItPmZyYW1lQ291bnQoKSk7CisKKyAgICBJbWFnZUZyYW1lKiBmcmFtZSA9
IGRlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKTsKKyAgICBFWFBFQ1RfRVEoSW1hZ2VGcmFt
ZTo6RnJhbWVDb21wbGV0ZSwgZnJhbWUtPnN0YXR1cygpKTsKKyAgICBFWFBFQ1RfRVEoMTYsIGZy
YW1lLT5nZXRTa0JpdG1hcCgpLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgxNiwgZnJhbWUtPmdl
dFNrQml0bWFwKCkuaGVpZ2h0KCkpOworCisgICAgZnJhbWUgPSBkZWNvZGVyLT5mcmFtZUJ1ZmZl
ckF0SW5kZXgoMSk7CisgICAgRVhQRUNUX0VRKEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUsIGZy
YW1lLT5zdGF0dXMoKSk7CisgICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+Z2V0U2tCaXRtYXAoKS53
aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTYsIGZyYW1lLT5nZXRTa0JpdG1hcCgpLmhlaWdodCgp
KTsKKyAgICBFWFBFQ1RfRVEoY0FuaW1hdGlvbkxvb3BJbmZpbml0ZSwgZGVjb2Rlci0+cmVwZXRp
dGlvbkNvdW50KCkpOworfQorCitURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIHBhcnNlQnl0ZUJ5
Qnl0ZSkKK3sKKyAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGFkb3B0UHRyKG5l
dyBHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwgSW1h
Z2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkpKTsKKworICAgIFJlZlB0cjxT
aGFyZWRCdWZmZXI+IGRhdGEgPSByZWFkRmlsZSgiL0xheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL3Jl
c291cmNlcy9hbmltYXRlZC5naWYiKTsKKyAgICBBU1NFUlRfVFJVRShkYXRhLmdldCgpKTsKKwor
ICAgIHNpemVfdCBmcmFtZUNvdW50ID0gMDsKKworICAgIC8vIFBhc3MgZGF0YSB0byBkZWNvZGVy
IGJ5dGUgYnkgYnl0ZS4KKyAgICBmb3IgKHVuc2lnbmVkIGxlbmd0aCA9IDE7IGxlbmd0aCA8PSBk
YXRhLT5zaXplKCk7ICsrbGVuZ3RoKSB7CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHRl
bXBEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YS0+ZGF0YSgpLCBsZW5ndGgpOworICAg
ICAgICBkZWNvZGVyLT5zZXREYXRhKHRlbXBEYXRhLmdldCgpLCBsZW5ndGggPT0gZGF0YS0+c2l6
ZSgpKTsKKworICAgICAgICBFWFBFQ1RfTEUoZnJhbWVDb3VudCwgZGVjb2Rlci0+ZnJhbWVDb3Vu
dCgpKTsKKyAgICAgICAgZnJhbWVDb3VudCA9IGRlY29kZXItPmZyYW1lQ291bnQoKTsKKyAgICB9
CisKKyAgICBFWFBFQ1RfRVEoMnUsIGRlY29kZXItPmZyYW1lQ291bnQoKSk7CisKKyAgICBkZWNv
ZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7CisgICAgZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdElu
ZGV4KDEpOworICAgIEVYUEVDVF9FUShjQW5pbWF0aW9uTG9vcEluZmluaXRlLCBkZWNvZGVyLT5y
ZXBldGl0aW9uQ291bnQoKSk7Cit9CisKK1RFU1QoR0lGSW1hZ2VEZWNvZGVyVGVzdCwgcGFyc2VB
bmREZWNvZGVCeXRlQnlCeXRlKQoreworICAgIE93blB0cjxHSUZJbWFnZURlY29kZXI+IGRlY29k
ZXIoYWRvcHRQdHIobmV3IEdJRkltYWdlRGVjb2RlcihJbWFnZVNvdXJjZTo6QWxwaGFOb3RQcmVt
dWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKSkpOwor
CisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IHJlYWRGaWxlKCIvTGF5b3V0VGVzdHMv
ZmFzdC9pbWFnZXMvcmVzb3VyY2VzL2FuaW1hdGVkLWdpZi13aXRoLW9mZnNldHMuZ2lmIik7Cisg
ICAgQVNTRVJUX1RSVUUoZGF0YS5nZXQoKSk7CisKKyAgICBzaXplX3QgZnJhbWVDb3VudCA9IDA7
CisgICAgc2l6ZV90IGZyYW1lc0RlY29kZWQgPSAwOworCisgICAgLy8gUGFzcyBkYXRhIHRvIGRl
Y29kZXIgYnl0ZSBieSBieXRlLgorICAgIGZvciAodW5zaWduZWQgbGVuZ3RoID0gMTsgbGVuZ3Ro
IDw9IGRhdGEtPnNpemUoKTsgKytsZW5ndGgpIHsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gdGVtcERhdGEgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRhLT5kYXRhKCksIGxlbmd0aCk7
CisgICAgICAgIGRlY29kZXItPnNldERhdGEodGVtcERhdGEuZ2V0KCksIGxlbmd0aCA9PSBkYXRh
LT5zaXplKCkpOworCisgICAgICAgIEVYUEVDVF9MRShmcmFtZUNvdW50LCBkZWNvZGVyLT5mcmFt
ZUNvdW50KCkpOworICAgICAgICBmcmFtZUNvdW50ID0gZGVjb2Rlci0+ZnJhbWVDb3VudCgpOwor
CisgICAgICAgIEltYWdlRnJhbWUqIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4
KGZyYW1lQ291bnQgLSAxKTsKKyAgICAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5zdGF0dXMoKSA9
PSBJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlICYmIGZyYW1lc0RlY29kZWQgPCBmcmFtZUNvdW50
KQorICAgICAgICAgICAgKytmcmFtZXNEZWNvZGVkOworICAgIH0KKworICAgIEVYUEVDVF9FUSg1
dSwgZGVjb2Rlci0+ZnJhbWVDb3VudCgpKTsKKyAgICBFWFBFQ1RfRVEoNXUsIGZyYW1lc0RlY29k
ZWQpOworICAgIEVYUEVDVF9FUShjQW5pbWF0aW9uTG9vcEluZmluaXRlLCBkZWNvZGVyLT5yZXBl
dGl0aW9uQ291bnQoKSk7Cit9CisKKy8vIFNlY29uZCBmcmFtZSBpbiB0aGUgZmlsZSBpcyBicm9r
ZW4gYnV0IHRlc3QgdGhhdCBmaXJzdCBmcmFtZSBjYW4gYmUgZGVjb2RlZC4KK1RFU1QoR0lGSW1h
Z2VEZWNvZGVyVGVzdCwgYnJva2VuU2Vjb25kRnJhbWUpCit7CisgICAgT3duUHRyPEdJRkltYWdl
RGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihuZXcgR0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNl
OjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmls
ZUFwcGxpZWQpKSk7CisKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gcmVhZEZpbGUo
Ii9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvYnJva2VuLmdpZiIpOworICAgIEFT
U0VSVF9UUlVFKGRhdGEuZ2V0KCkpOworICAgIGRlY29kZXItPnNldERhdGEoZGF0YS5nZXQoKSwg
dHJ1ZSk7CisKKyAgICBFWFBFQ1RfRVEoMXUsIGRlY29kZXItPmZyYW1lQ291bnQoKSk7CisKKyAg
ICBJbWFnZUZyYW1lKiBmcmFtZSA9IGRlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKTsKKyAg
ICBFWFBFQ1RfRVEoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSwgZnJhbWUtPnN0YXR1cygpKTsK
KyAgICBFWFBFQ1RfRVEoMTYsIGZyYW1lLT5nZXRTa0JpdG1hcCgpLndpZHRoKCkpOworICAgIEVY
UEVDVF9FUSgxNiwgZnJhbWUtPmdldFNrQml0bWFwKCkuaGVpZ2h0KCkpOworCisgICAgZnJhbWUg
PSBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMSk7CisgICAgRVhQRUNUX0ZBTFNFKGZyYW1l
KTsKKyAgICBFWFBFQ1RfRVEoY0FuaW1hdGlvbkxvb3BPbmNlLCBkZWNvZGVyLT5yZXBldGl0aW9u
Q291bnQoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL2RhdGEvYnJva2VuLmdpZiBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvZGF0YS9icm9rZW4uZ2lmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzYTdjNGViZTdkOWJlYTk4Mzk3NWY4
MjlhMmVkYzhlNTVkMWY3NmQKR0lUIGJpbmFyeSBwYXRjaApsaXRlcmFsIDkwNgp6Y21aP3diaEVI
YjZrcmZ3X3xDdzxrZH02YVZKNDZzMSowSl8weipMWUtld04yTlUqYkdmVUErNzBXJXtvMm8hJl4K
enV6KjVCMlNrOWYyP0t7TDEyY3o9JEEkJDVuPm1FRlZvcSNXYyhgM2EqPXZyKyN6alhQODV1ITM/
JXc0R1lQIURgCktPJmNSVlpQb3lQKEl2ZUEKCmxpdGVyYWwgMApIY21WP2QwMDAwMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189388</attachid>
            <date>2013-02-20 15:01:08 -0800</date>
            <delta_ts>2013-02-25 07:45:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109662-20130220145730.patch</filename>
            <type>text/plain</type>
            <size>37774</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyODUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjc1Y2IzYjYxMzgyYTk1
MGY1MTNlYzZmMzE3MTgwNjZmMmRhNWVjZC4uOWZhM2RjMWNlYTRmYmY0ODcyZTUzYmViOWIwM2Ey
OGUxYjFkODhjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEzLTAyLTIwICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgdG8g
cmVhZCBmcm9tIHNvdXJjZSBkYXRhIGRpcmVjdGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk2NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBwYXRjaCB0byBpbXByb3Zl
IEdJRiBpbWFnZSBkZWNvZGluZy4KKworICAgICAgICBHSUZJbWFnZVJlYWRlciBoYXMgYW4gaW50
ZXJuYWwgMjU2IGJ5dGVzIGJ1ZmZlciB0byBzYXZpbmcgaW5jb21pbmcKKyAgICAgICAgYnl0ZXMu
IFRoaXMgbWVjaGFuaXNtIGlzIG91dC1kYXRlZCBiZWNhdXNlIFdlYktpdCBob2xkcyB0aGUgZW50
aXJlCisgICAgICAgIGZpbGUgaW4gbWVtb3J5IGFuZCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGhv
bGQgZGF0YSBpbiBhbiBpbnRlcm1lZGlhdGUKKyAgICAgICAgYnVmZmVyLgorCisgICAgICAgIFRo
aXMgaXMgYWxzbyBhIGJsb2NrZXIgZm9yIGxhdGVyIHdvcmsgdG8gcGFyc2UgYW5kIGRlY29kZSBH
SUYKKyAgICAgICAgaW5jcmVtZW50YWxseS4KKworICAgICAgICBUaGlzIGNoYW5nZSByZW1vdmVk
IHRoZSBpbXRlcm1lZGlhdGUgJ2hvbGQnIGJ1ZmZlciBhbmQgdXNlcyBhbiBpbmRleAorICAgICAg
ICBmb3IgZGF0YSBwb3NpdGlvbiB0byBrZWVwIHRyYWNrIG9mIHBhcnNpbmcgb2YgdGhlIEdJRiBm
aWxlLiBCdWZmZXIgZm9yCisgICAgICAgIGdsb2JhbCBjb2xvcm1hcCBhbmQgbG9jYWwgY29sb3Jt
YXAgYXJlIGFsc28gcmVtb3ZlZCBiZWNhdXNlIHRoZXkgY2FuIGJlCisgICAgICAgIHJlZmVyZW5j
ZWQgZnJvbSB0aGUgZGF0YSBzdHJlYW0uCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgaXMgdGVzdGVk
IGJ5OgorCisgICAgICAgIExheW91dCB0ZXN0cworICAgICAgICBBbGwgdGVzdHMgcGFzc2VkIHVu
ZGVyIGZhc3QvaW1hZ2VzLgorCisgICAgICAgIFVuaXQgdGVzdHMKKyAgICAgICAgQWRkZWQgR0lG
SW1hZ2VEZWNvZGVyVGVzdCBmb3IgQ2hyb21pdW0uCisKKyAgICAgICAgTG9jYWwgdGVzdGluZwor
ICAgICAgICBJIHRlc3RlZCB0aGlzIGltcGxlbWVudGF0aW9uIGFnYWluc3QgYSBzZXQgb2YgNTBr
IEdJRiBpbWFnZXMgYW5kCisgICAgICAgIHRoZXJlJ3Mgbm8gY3Jhc2hlcyBhbmQgcHJvZHVjZXMg
Yml0LWV4YWN0IHJlc3VsdHMgYXMgcHJldmlvdXMgY29kZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R0lGSW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdl
RGVjb2Rlcjo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6
OmhhdmVEZWNvZGVkUm93KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZGVj
b2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFk
ZXIuY3BwOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmRvTFpXKToKKyAgICAgICAgKEdJRklt
YWdlUmVhZGVyOjpkZWNvZGUpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVy
bmFsKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpzZXRSZW1haW5pbmdCeXRlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmg6CisgICAg
ICAgIChHSUZGcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0OjpHSUZGcmFt
ZUNvbnRleHQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0Ojp+R0lGRnJhbWVDb250ZXh0KToK
KyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpHSUZJbWFnZVJlYWRlcik6CisgICAgICAgIChHSUZJ
bWFnZVJlYWRlcjo6fkdJRkltYWdlUmVhZGVyKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpz
ZXREYXRhKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyKToKKyAgICAgICAgKEdJRkltYWdlUmVh
ZGVyOjpnbG9iYWxDb2xvcm1hcCk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6bG9jYWxDb2xv
cm1hcCk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6bG9jYWxDb2xvcm1hcFNpemUpOgorICAg
ICAgICAoR0lGSW1hZ2VSZWFkZXI6OmRhdGEpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmNv
bG9ybWFwKToKKwogMjAxMy0wMi0xMyAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW1Y4XSBHZW5lcmF0ZSB3cmFwcGVyIG1ldGhvZHMgZm9yIGN1c3RvbSBt
ZXRob2RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGExYWZhZmJmZTY5N2ZjYmNkYjQ4
OWE0MmEzZGE3MGIwZWUxMDgzMWIuLmNiY2ZhMDg5NTNhZmJkNTk1YWU0NDVmOGVmYTNlZDIwM2Y5
Mjc1NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTMt
MDItMjAgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBHSUZJbWFn
ZVJlYWRlciB0byByZWFkIGZyb20gc291cmNlIGRhdGEgZGlyZWN0bHkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTY2MgorCisgICAgICAgIEFkZGVk
IHRoZSBmb2xsb3dpbmcgdW5pdCB0ZXN0cyB0byB0ZXN0IG5ldyBsb2dpYyBpbiBHSUZJbWFnZURl
Y29kZXI6CisKKyAgICAgICAgR0lGSW1hZ2VEZWNvZGVyVGVzdC5kZWNvZGVUd29GcmFtZXMKKyAg
ICAgICAgVGVzdCB0aGF0IGl0IGNhbiBkZWNvZGUgYSBtdWx0aS1mcmFtZSBHSUYgaW1hZ2UgY29y
cmVjdGx5LgorCisgICAgICAgIEdJRkltYWdlRGVjb2RlclRlc3QucGFyc2VBbmREZWNvZGUKKyAg
ICAgICAgRmlyc3QgcGVyZm9ybSBhIHBhcnNlIG9wZXJhdGlvbiBhbmQgdGhlbiBhIGRlY29kZSBv
cGVyYXRpb24uIEV4cGVjdAorICAgICAgICB0aGF0IHBhcnNlIGFuZCBkZWNvZGUgb3BlcmF0ZXMg
Y29ycmVjdGx5LgorCisgICAgICAgIEdJRkltYWdlRGVjb2RlclRlc3QucGFyc2VCeXRlQnlCeXRl
CisgICAgICAgIFRlc3QgdGhhdCBtdWx0aS1mcmFtZSBHSUYgaW1hZ2UgY2FuIGJlIHBhcnNlZCBj
b3JyZWN0bHkgYnl0ZSBieSBieXRlLgorCisgICAgICAgIEdJRkltYWdlRGVjb2RlclRlc3QucGFy
c2VBbmREZWNvZGVCeXRlQnlCeXRlCisgICAgICAgIFJ1biBhIGxvb3AgdG8gZmVlZCBkZWNvZGVy
IGJ5dGUgYnkgYnl0ZSwgcGVyZm9ybSBhIHBhcnNlIGFuZCB0aGVuCisgICAgICAgIGRlY29kZSBv
cGVyYXRpb24gYW5kIG1ha2Ugc3VyZSBmcmFtZXMgYXJlIGRlY29kZWQgY29ycmVjdGx5LgorCisg
ICAgICAgIEdJRkltYWdlRGVjb2RlclRlc3QuYnJva2VuU2Vjb25kRnJhbWUKKyAgICAgICAgRGVj
b2RlIGEgR0lGIGltYWdlIHdpdGggc2Vjb25kIGZyYW1lIGJyb2tlbi4gRXhwZWN0IHRoYXQgdGhl
IGZpcnN0CisgICAgICAgIGZyYW1lIGNhbiBiZSBkZWNvZGVkIGNvcnJlY3RseS4KKworICAgICAg
ICAqIFdlYktpdC5neXA6CisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMv
R0lGSW1hZ2VEZWNvZGVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYktpdDo6cmVhZEZpbGUpOgorICAgICAgICAoV2ViS2l0OjpURVNUKToKKyAgICAgICAg
KiB0ZXN0cy9kYXRhL2Jyb2tlbi5naWY6IEFkZGVkLgorCiAyMDEzLTAyLTEzICBNYXggVnVqb3Zp
YyAgPG12dWpvdmljQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTIEZpbHRlcnNdIFJlZmFjdG9y
IGZpbHRlciBvdXRzZXRzIGludG8gYSBjbGFzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcApp
bmRleCAwY2IyMjg4NWNlYjNkNmIxNmIyMzVmODE5Yjk4YTI1YjkzYmFmZDhiLi42YTUxNDA5ODQ2
YzAwNTAwMGM5MjcwYTNmY2E1ODk4Mjg5NzVhM2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVy
LmNwcApAQCAtMzcsNyArMzcsNiBAQCBHSUZJbWFnZURlY29kZXI6OkdJRkltYWdlRGVjb2RlcihJ
bWFnZVNvdXJjZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRpb24sCiAgICAgOiBJbWFnZURlY29kZXIo
YWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQogICAgICwgbV9hbHJlYWR5
U2Nhbm5lZFRoaXNEYXRhRm9yRnJhbWVDb3VudCh0cnVlKQogICAgICwgbV9yZXBldGl0aW9uQ291
bnQoY0FuaW1hdGlvbkxvb3BPbmNlKQotICAgICwgbV9yZWFkT2Zmc2V0KDApCiB7CiB9CiAKQEAg
LTUxLDYgKzUwLDggQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZmVy
KiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW1h
Z2VEZWNvZGVyOjpzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CisgICAgaWYgKG1fcmVh
ZGVyKQorICAgICAgICBtX3JlYWRlci0+c2V0RGF0YShkYXRhKTsKIAogICAgIC8vIFdlIG5lZWQg
dG8gcmVzY2FuIHRoZSBmcmFtZSBjb3VudCwgYXMgdGhlIG5ldyBkYXRhIG1heSBoYXZlIGNoYW5n
ZWQgaXQuCiAgICAgbV9hbHJlYWR5U2Nhbm5lZFRoaXNEYXRhRm9yRnJhbWVDb3VudCA9IGZhbHNl
OwpAQCAtODUsNyArODYsOCBAQCBzaXplX3QgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KCkK
ICAgICAgICAgLy8gYWxsIHRoZSBkYXRhLiAgTm90ZSB0aGF0IHRoaXMgaXMgbm8gd29yc2UgdGhh
biB3aGF0IEltYWdlSU8gZG9lcyBvbgogICAgICAgICAvLyBNYWMgcmlnaHQgbm93IChpdCBhbHNv
IGNyYXdscyBhbGwgdGhlIGRhdGEgYWdhaW4pLgogICAgICAgICBHSUZJbWFnZVJlYWRlciByZWFk
ZXIoMCk7Ci0gICAgICAgIHJlYWRlci5yZWFkKChjb25zdCB1bnNpZ25lZCBjaGFyKiltX2RhdGEt
PmRhdGEoKSwgbV9kYXRhLT5zaXplKCksIEdJRkZyYW1lQ291bnRRdWVyeSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KC0xKSk7CisgICAgICAgIHJlYWRlci5zZXREYXRhKG1fZGF0YSk7CisgICAgICAg
IHJlYWRlci5kZWNvZGUoR0lGRnJhbWVDb3VudFF1ZXJ5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
LTEpKTsKICAgICAgICAgbV9hbHJlYWR5U2Nhbm5lZFRoaXNEYXRhRm9yRnJhbWVDb3VudCA9IHRy
dWU7CiAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUocmVhZGVyLmltYWdlc0NvdW50
KCkpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlYWRlci5pbWFnZXNDb3VudCgpOyAr
K2kpCkBAIC0xOTEsMTEgKzE5Myw2IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1l
QnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCiAgICAgfQogfQogCi12b2lkIEdJ
RkltYWdlRGVjb2Rlcjo6ZGVjb2RpbmdIYWx0ZWQodW5zaWduZWQgYnl0ZXNMZWZ0KQotewotICAg
IG1fcmVhZE9mZnNldCA9IG1fZGF0YS0+c2l6ZSgpIC0gYnl0ZXNMZWZ0OwotfQotCiBib29sIEdJ
RkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWdu
ZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCBjaGFyKiByb3dFbmQsIHVuc2lnbmVkIHJvd051
bWJlciwgdW5zaWduZWQgcmVwZWF0Q291bnQsIGJvb2wgd3JpdGVUcmFuc3BhcmVudFBpeGVscykK
IHsKICAgICBjb25zdCBHSUZGcmFtZUNvbnRleHQqIGZyYW1lQ29udGV4dCA9IG1fcmVhZGVyLT5m
cmFtZUNvbnRleHQoKTsKQEAgLTIxNiw4ICsyMTMsOCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6
aGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgY2hhciogcm93QnVm
ZgogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvbG9yTWFwOwogICAgIHVuc2lnbmVkIGNvbG9y
TWFwU2l6ZTsKICAgICBpZiAoZnJhbWVDb250ZXh0LT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVkKSB7
Ci0gICAgICAgIGNvbG9yTWFwID0gZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFwOwotICAgICAg
ICBjb2xvck1hcFNpemUgPSAodW5zaWduZWQpZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFwU2l6
ZTsKKyAgICAgICAgY29sb3JNYXAgPSBtX3JlYWRlci0+bG9jYWxDb2xvcm1hcChmcmFtZUNvbnRl
eHQpOworICAgICAgICBjb2xvck1hcFNpemUgPSBtX3JlYWRlci0+bG9jYWxDb2xvcm1hcFNpemUo
ZnJhbWVDb250ZXh0KTsKICAgICB9IGVsc2UgewogICAgICAgICBjb2xvck1hcCA9IG1fcmVhZGVy
LT5nbG9iYWxDb2xvcm1hcCgpOwogICAgICAgICBjb2xvck1hcFNpemUgPSBtX3JlYWRlci0+Z2xv
YmFsQ29sb3JtYXBTaXplKCk7CkBAIC0zMTksMTIgKzMxNiwxNCBAQCB2b2lkIEdJRkltYWdlRGVj
b2Rlcjo6ZGVjb2RlKHVuc2lnbmVkIGhhbHRBdEZyYW1lLCBHSUZRdWVyeSBxdWVyeSkKICAgICBp
ZiAoZmFpbGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9yZWFkZXIpCisgICAg
aWYgKCFtX3JlYWRlcikgewogICAgICAgICBtX3JlYWRlciA9IGFkb3B0UHRyKG5ldyBHSUZJbWFn
ZVJlYWRlcih0aGlzKSk7CisgICAgICAgIG1fcmVhZGVyLT5zZXREYXRhKG1fZGF0YSk7CisgICAg
fQogCiAgICAgLy8gSWYgd2UgY291bGRuJ3QgZGVjb2RlIHRoZSBpbWFnZSBidXQgd2UndmUgcmVj
ZWl2ZWQgYWxsIHRoZSBkYXRhLCBkZWNvZGluZwogICAgIC8vIGhhcyBmYWlsZWQuCi0gICAgaWYg
KCFtX3JlYWRlci0+cmVhZCgoY29uc3QgdW5zaWduZWQgY2hhciopbV9kYXRhLT5kYXRhKCkgKyBt
X3JlYWRPZmZzZXQsIG1fZGF0YS0+c2l6ZSgpIC0gbV9yZWFkT2Zmc2V0LCBxdWVyeSwgaGFsdEF0
RnJhbWUpICYmIGlzQWxsRGF0YVJlY2VpdmVkKCkpCisgICAgaWYgKCFtX3JlYWRlci0+ZGVjb2Rl
KHF1ZXJ5LCBoYWx0QXRGcmFtZSkgJiYgaXNBbGxEYXRhUmVjZWl2ZWQoKSkKICAgICAgICAgc2V0
RmFpbGVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAppbmRleCA3YmRhOTk0MzgyOGQ4
NGUyYmI5NGEyNzVjZTViOTEwYWE1Y2QyYjExLi45OTgyYTQ0ZTE4Nzc5Y2NmYWJlM2Y1ODQyNTg0
Y2M4MTBhMTI1MTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCkBAIC01Niw3ICs1Niw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyRnJhbWVCdWZm
ZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSk7CiAKICAgICAgICAgLy8gQ2FsbGJhY2tz
IGZyb20gdGhlIEdJRiByZWFkZXIuCi0gICAgICAgIHZvaWQgZGVjb2RpbmdIYWx0ZWQodW5zaWdu
ZWQgYnl0ZXNMZWZ0KTsKICAgICAgICAgYm9vbCBoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFt
ZUluZGV4LCB1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIGNoYXIqIHJvd0VuZCwg
dW5zaWduZWQgcm93TnVtYmVyLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgYm9vbCB3cml0ZVRyYW5z
cGFyZW50UGl4ZWxzKTsKICAgICAgICAgYm9vbCBmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1l
SW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sIEltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxN
ZXRob2QgZGlzcG9zYWxNZXRob2QpOwogICAgICAgICB2b2lkIGdpZkNvbXBsZXRlKCk7CkBAIC03
Nyw3ICs3Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2N1cnJlbnRC
dWZmZXJTYXdBbHBoYTsKICAgICAgICAgbXV0YWJsZSBpbnQgbV9yZXBldGl0aW9uQ291bnQ7CiAg
ICAgICAgIE93blB0cjxHSUZJbWFnZVJlYWRlcj4gbV9yZWFkZXI7Ci0gICAgICAgIHVuc2lnbmVk
IG1fcmVhZE9mZnNldDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VS
ZWFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJ
RkltYWdlUmVhZGVyLmNwcAppbmRleCA2OTlkM2M0N2ZiNDRhZjJjODI0ZmE1OWIwM2I0MmY1MTA2
NjBlZWZiLi44YmZhMTA1NzlkMzc0ODA5Njk5ZmM2NzMyNjY2OGNmYjQ0MTNkYmVlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VS
ZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dp
Zi9HSUZJbWFnZVJlYWRlci5jcHAKQEAgLTIwMSw3ICsyMDEsNyBAQCBib29sIEdJRkltYWdlUmVh
ZGVyOjpvdXRwdXRSb3coKQogfQogCiAvLyBQZXJmb3JtIExlbXBlbC1aaXYtV2VsY2ggZGVjb2Rp
bmcuCi1ib29sIEdJRkltYWdlUmVhZGVyOjpkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyICpxKQor
Ym9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciogYmxvY2ssIHNp
emVfdCBieXRlc0luQmxvY2spCiB7CiAgICAgaWYgKCFtX2ZyYW1lQ29udGV4dCkKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0yMTUsNyArMjE1LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9M
WlcoY29uc3QgdW5zaWduZWQgY2hhciAqcSkKICAgICAvLyBiYWNrIGludG8gdGhlIEdJRiBkZWNv
ZGVyIHN0cnVjdHVyZSB3aGVuIHdlIGV4aXQuCiAgICAgaW50IGF2YWlsID0gbV9mcmFtZUNvbnRl
eHQtPmF2YWlsOwogICAgIGludCBiaXRzID0gbV9mcmFtZUNvbnRleHQtPmJpdHM7Ci0gICAgaW50
IGNudCA9IG1fY291bnQ7CisgICAgc2l6ZV90IGNudCA9IGJ5dGVzSW5CbG9jazsKICAgICBpbnQg
Y29kZXNpemUgPSBtX2ZyYW1lQ29udGV4dC0+Y29kZXNpemU7CiAgICAgaW50IGNvZGVtYXNrID0g
bV9mcmFtZUNvbnRleHQtPmNvZGVtYXNrOwogICAgIGludCBvbGRjb2RlID0gbV9mcmFtZUNvbnRl
eHQtPm9sZGNvZGU7CkBAIC0yNDksNyArMjQ5LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9M
WlcoY29uc3QgdW5zaWduZWQgY2hhciAqcSkKICAgICAgICAgICAgIGdvdG8gRU5EOyBcCiAgICAg
fSB3aGlsZSAoMCkKIAotICAgIGZvciAoY2ggPSBxOyBjbnQtLSA+IDA7IGNoKyspIHsKKyAgICBm
b3IgKGNoID0gYmxvY2s7IGNudC0tID4gMDsgY2grKykgewogICAgICAgICAvLyBGZWVkIHRoZSBu
ZXh0IGJ5dGUgaW50byB0aGUgZGVjb2RlcidzIDMyLWJpdCBpbnB1dCBidWZmZXIuCiAgICAgICAg
IGRhdHVtICs9ICgoaW50KSAqY2gpIDw8IGJpdHM7CiAgICAgICAgIGJpdHMgKz0gODsKQEAgLTM0
NCw3ICszNDQsNiBAQCBFTkQ6CiAgICAgbV9mcmFtZUNvbnRleHQtPmJpdHMgPSBiaXRzOwogICAg
IG1fZnJhbWVDb250ZXh0LT5jb2Rlc2l6ZSA9IGNvZGVzaXplOwogICAgIG1fZnJhbWVDb250ZXh0
LT5jb2RlbWFzayA9IGNvZGVtYXNrOwotICAgIG1fY291bnQgPSBjbnQ7CiAgICAgbV9mcmFtZUNv
bnRleHQtPm9sZGNvZGUgPSBvbGRjb2RlOwogICAgIG1fZnJhbWVDb250ZXh0LT5maXJzdGNoYXIg
PSBmaXJzdGNoYXI7CiAgICAgbV9mcmFtZUNvbnRleHQtPmRhdHVtID0gZGF0dW07CkBAIC0zNTQs
NjggKzM1Myw0MCBAQCBFTkQ6CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgR0lGSW1hZ2VS
ZWFkZXI6OmRlY29kZShHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCBpbnQgaGFsdEF0
RnJhbWUpCit7CisgICAgaWYgKG1fYnl0ZXNSZWFkID4gbV9kYXRhLT5zaXplKCkpCisgICAgICAg
IHJldHVybiBtX2NsaWVudC0+c2V0RmFpbGVkKCk7CisgICAgcmV0dXJuIGRlY29kZUludGVybmFs
KG1fYnl0ZXNSZWFkLCBtX2RhdGEtPnNpemUoKSAtIG1fYnl0ZXNSZWFkLCBxdWVyeSwgaGFsdEF0
RnJhbWUpOworfQogCiAvLyBQcm9jZXNzIGRhdGEgYXJyaXZpbmcgZnJvbSB0aGUgc3RyZWFtIGZv
ciB0aGUgZ2lmIGRlY29kZXIuCi1ib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2ln
bmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1
ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSkKK2Jvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUlu
dGVybmFsKHVuc2lnbmVkIGRhdGFQb3NpdGlvbiwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURlY29k
ZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSkKIHsKICAgICBpZiAoIWxl
bikgewogICAgICAgICAvLyBObyBuZXcgZGF0YSBoYXMgY29tZSBpbiBzaW5jZSB0aGUgbGFzdCBj
YWxsLCBqdXN0IGlnbm9yZSB0aGlzIGNhbGwuCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEgPSBidWY7Ci0KLSAgICAvLyBBZGQgd2hhdCB3
ZSBoYXZlIHNvIGZhciB0byB0aGUgYmxvY2suCi0gICAgLy8gSWYgcHJldmlvdXMgY2FsbCB0byBt
ZSBsZWZ0IHNvbWV0aGluZyBpbiB0aGUgaG9sZCBmaXJzdCBjb21wbGV0ZSBjdXJyZW50IGJsb2Nr
Ci0gICAgLy8gb3IgaWYgd2UgYXJlIGZpbGxpbmcgdGhlIGNvbG9ybWFwcywgZmlyc3QgY29tcGxl
dGUgdGhlIGNvbG9ybWFwLgotICAgIHVuc2lnbmVkIGNoYXIqIHAgPSAwOwotICAgIGlmIChtX3N0
YXRlID09IEdJRkdsb2JhbENvbG9ybWFwKQotICAgICAgICBwID0gbV9nbG9iYWxDb2xvcm1hcDsK
LSAgICBlbHNlIGlmIChtX3N0YXRlID09IEdJRkltYWdlQ29sb3JtYXApCi0gICAgICAgIHAgPSBt
X2ZyYW1lQ29udGV4dCA/IG1fZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFwIDogMDsKLSAgICBl
bHNlIGlmIChtX2J5dGVzSW5Ib2xkKQotICAgICAgICBwID0gbV9ob2xkOwotICAgIGVsc2UKLSAg
ICAgICAgcCA9IDA7Ci0KLSAgICBpZiAocCB8fCAobV9zdGF0ZSA9PSBHSUZHbG9iYWxDb2xvcm1h
cCkgfHwgKG1fc3RhdGUgPT0gR0lGSW1hZ2VDb2xvcm1hcCkpIHsKLSAgICAgICAgLy8gQWRkIHdo
YXQgd2UgaGF2ZSBzb2ZhciB0byB0aGUgYmxvY2sKLSAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
bGVuIDwgbV9ieXRlc1RvQ29uc3VtZSA/IGxlbiA6IG1fYnl0ZXNUb0NvbnN1bWU7Ci0gICAgICAg
IGlmIChwKQotICAgICAgICAgICAgbWVtY3B5KHAgKyBtX2J5dGVzSW5Ib2xkLCBidWYsIGxlbmd0
aCk7Ci0KLSAgICAgICAgaWYgKGxlbmd0aCA8IG1fYnl0ZXNUb0NvbnN1bWUpIHsKLSAgICAgICAg
ICAgIC8vIE5vdCBlbm91Z2ggaW4gJ2J1ZicgdG8gY29tcGxldGUgY3VycmVudCBibG9jaywgZ2V0
IG1vcmUKLSAgICAgICAgICAgIG1fYnl0ZXNJbkhvbGQgKz0gbGVuZ3RoOwotICAgICAgICAgICAg
bV9ieXRlc1RvQ29uc3VtZSAtPSBsZW5ndGg7Ci0gICAgICAgICAgICBpZiAobV9jbGllbnQpCi0g
ICAgICAgICAgICAgICAgbV9jbGllbnQtPmRlY29kaW5nSGFsdGVkKDApOwotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gUmVzZXQgaG9sZCBidWZmZXIg
Y291bnQKLSAgICAgICAgbV9ieXRlc0luSG9sZCA9IDA7CisgICAgLy8gSWYgdGhlcmUncyBub3Qg
ZW5vdWdoIGJ5dGVzIGZvciBwYXJzaW5nIHRoaXMgY29tcG9uZW50IHRoZW4gcmV0dXJuLgorICAg
IGlmIChsZW4gPCBtX2J5dGVzVG9Db25zdW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICAgICAgLy8gUG9pbnQgJ3EnIHRvIGNvbXBsZXRlIGJsb2NrIGluIGhvbGQgKG9yIGluIGNvbG9y
bWFwKQotICAgICAgICBxID0gcDsKLSAgICB9CisgICAgLy8gVGhpcyBsb29wIHJlYWRzIGFzIG1h
bnkgY29tcG9uZW50cyBmcm9tIHxtX2RhdGF8IGFzIHBvc3NpYmxlLgorICAgIC8vIEJlZ2lubmlu
ZyBvZiBlYWNoIGl0ZXJhdGlvbiBkYXRhUG9zaXRpb24gd2lsbCBiZSBhZHZhbmNlZCBieSBtX2J5
dGVzVG9Db25zdW1lIHRvIHBvaW50CisgICAgLy8gdG8gdGhlIG5leHQgY29tcG9uZW50LCBsZW4g
aXMgZGVjcmVtZW50ZWQgYWNjb3JkaW5nbHkuCisgICAgd2hpbGUgKGxlbiA+PSBtX2J5dGVzVG9D
b25zdW1lKSB7CisgICAgICAgIC8vIEZJWE1FOiBSZW5hbWUgdGhpcyB2YXJpYWJsZSB0byBjdXJy
ZW50Q29tcG9uZW50LgorICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBxID0gZGF0YShkYXRh
UG9zaXRpb24pOwogCi0gICAgLy8gSW52YXJpYW50OgotICAgIC8vICAgICdxJyBpcyBzdGFydCBv
ZiBjdXJyZW50IHRvIGJlIHByb2Nlc3NlZCBibG9jayAoaG9sZCwgY29sb3JtYXAgb3IgYnVmKQot
ICAgIC8vICAgICdtX2J5dGVzVG9Db25zdW1lJyBpcyBudW1iZXIgb2YgYnl0ZXMgdG8gY29uc3Vt
ZSBmcm9tICdidWYnCi0gICAgLy8gICAgJ2J1ZicgcG9pbnRzIHRvIHRoZSBieXRlcyB0byBiZSBj
b25zdW1lZCBmcm9tIHRoZSBpbnB1dCBidWZmZXIKLSAgICAvLyAgICAnbGVuJyBpcyBudW1iZXIg
b2YgYnl0ZXMgbGVmdCBpbiBpbnB1dCBidWZmZXIgZnJvbSBwb3NpdGlvbiAnYnVmJy4KLSAgICAv
LyAgICBBdCBlbnRyYW5jZSBvZiB0aGUgZm9yIGxvb3Agd2lsbCAnYnVmJyB3aWxsIGJlIG1vdmVk
ICdtX2J5dGVzVG9Db25zdW1lJwotICAgIC8vICAgIHRvIHBvaW50IHRvIG5leHQgYnVmZmVyLCAn
bGVuJyBpcyBhZGp1c3RlZCBhY2NvcmRpbmdseS4KLSAgICAvLyAgICBTbyB0aGF0IG5leHQgcm91
bmQgaW4gZm9yIGxvb3AsIHEgZ2V0cyBwb2ludGVkIHRvIHRoZSBuZXh0IGJ1ZmZlci4KLSAgICBm
b3IgKDtsZW4gPj0gbV9ieXRlc1RvQ29uc3VtZTsgcSA9IGJ1ZikgewotICAgICAgICAvLyBFYXQg
dGhlIGN1cnJlbnQgYmxvY2sgZnJvbSB0aGUgYnVmZmVyLCBxIGtlZXBzIHBvaW50ZWQgYXQgY3Vy
cmVudCBibG9jay4KLSAgICAgICAgYnVmICs9IG1fYnl0ZXNUb0NvbnN1bWU7CisgICAgICAgIC8v
IEVhdCB0aGUgY3VycmVudCBjb21wb25lbnQgZnJvbSB0aGUgYnVmZmVyLCBxIGtlZXBzIHBvaW50
ZWQgYXQgY3VycmVudCBjb21wb25lbnQuCisgICAgICAgIGRhdGFQb3NpdGlvbiArPSBtX2J5dGVz
VG9Db25zdW1lOwogICAgICAgICBsZW4gLT0gbV9ieXRlc1RvQ29uc3VtZTsKIAogICAgICAgICBz
d2l0Y2ggKG1fc3RhdGUpIHsKICAgICAgICAgY2FzZSBHSUZMWlc6Ci0gICAgICAgICAgICBpZiAo
IWRvTFpXKHEpKQorICAgICAgICAgICAgLy8gbV9ieXRlc1RvQ29uc3VtZSBpcyB0aGUgY3VycmVu
dCBjb21wb25lbnQgc2l6ZSBiZWNhdXNlIGl0IGhhc24ndCBiZWVuIHVwZGF0ZWQuCisgICAgICAg
ICAgICBpZiAoIWRvTFpXKHEsIG1fYnl0ZXNUb0NvbnN1bWUpKQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gSWYgZG9MWlcoKSBlbmNvdW50ZXJlZCBhbiBlcnJvciwgaXQgaGFzIGFs
cmVhZHkgY2FsbGVkIG1fY2xpZW50LT5zZXRGYWlsZWQoKS4KICAgICAgICAgICAgIEdFVE4oMSwg
R0lGU3ViQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CkBAIC00ODgsMjMgKzQ1OSwxOCBAQCBi
b29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWdu
ZWQgbGVuLCBHSUZJbWFnZURlY29kZQogCiAgICAgICAgICAgICBpZiAoKHFbNF0gJiAweDgwKSAm
JiBtX2dsb2JhbENvbG9ybWFwU2l6ZSA+IDApIHsgLyogZ2xvYmFsIG1hcCAqLwogICAgICAgICAg
ICAgICAgIC8vIEdldCB0aGUgZ2xvYmFsIGNvbG9ybWFwCi0gICAgICAgICAgICAgICAgY29uc3Qg
dW5zaWduZWQgc2l6ZSA9IDMqbV9nbG9iYWxDb2xvcm1hcFNpemU7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBNYWxsb2MgdGhlIGNvbG9yIG1hcCwgYnV0IG9ubHkgaWYgd2UncmUgbm90IGp1c3QgY291
bnRpbmcgZnJhbWVzLgotICAgICAgICAgICAgICAgIGlmIChxdWVyeSAhPSBHSUZJbWFnZURlY29k
ZXI6OkdJRkZyYW1lQ291bnRRdWVyeSkKLSAgICAgICAgICAgICAgICAgICAgbV9nbG9iYWxDb2xv
cm1hcCA9IG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdOworICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGdsb2JhbENvbG9ybWFwQnl0ZXMgPSAzICogbV9nbG9iYWxDb2xvcm1hcFNpemU7Cisg
ICAgICAgICAgICAgICAgbV9nbG9iYWxDb2xvcm1hcFBvc2l0aW9uID0gZGF0YVBvc2l0aW9uOwog
Ci0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IHNpemUpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gVXNlICdob2xkJyBwYXR0ZXJuIHRvIGdldCB0aGUgZ2xvYmFsIGNvbG9ybWFwCi0gICAgICAg
ICAgICAgICAgICAgIEdFVE4oc2l6ZSwgR0lGR2xvYmFsQ29sb3JtYXApOworICAgICAgICAgICAg
ICAgIGlmIChsZW4gPCBnbG9iYWxDb2xvcm1hcEJ5dGVzKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIE5vdCBlbm91Z2ggYnl0ZXMgdG8gcmVhZCB0aGUgZW50aXJlIGdsb2JhbCBjb2xvcm1hcCB0
aGlzIHRpbWUgc28gcmVhZCBpdCBuZXh0LgorICAgICAgICAgICAgICAgICAgICBHRVROKGdsb2Jh
bENvbG9ybWFwQnl0ZXMsIEdJRkdsb2JhbENvbG9ybWFwKTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgLy8gQ29weSBldmVy
eXRoaW5nIGFuZCBnbyBkaXJlY3RseSB0byBHSUZJbWFnZV9zdGFydC4KLSAgICAgICAgICAgICAg
ICBpZiAobV9nbG9iYWxDb2xvcm1hcCkKLSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KG1fZ2xv
YmFsQ29sb3JtYXAsIGJ1Ziwgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnVmICs9IHNpemU7Ci0g
ICAgICAgICAgICAgICAgbGVuIC09IHNpemU7CisgICAgICAgICAgICAgICAgbV9pc0dsb2JhbENv
bG9ybWFwRGVmaW5lZCA9IHRydWU7CisgICAgICAgICAgICAgICAgZGF0YVBvc2l0aW9uICs9IGds
b2JhbENvbG9ybWFwQnl0ZXM7CisgICAgICAgICAgICAgICAgbGVuIC09IGdsb2JhbENvbG9ybWFw
Qnl0ZXM7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEdFVE4oMSwgR0lGSW1hZ2VTdGFy
dCk7CkBAIC01MTYsNyArNDgyLDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1
bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgR0lGSW1hZ2VEZWNvZGUKICAgICAgICAg
fQogCiAgICAgICAgIGNhc2UgR0lGR2xvYmFsQ29sb3JtYXA6IHsKLSAgICAgICAgICAgIC8vIEV2
ZXJ5dGhpbmcgaXMgYWxyZWFkeSBjb3BpZWQgaW50byBtX2dsb2JhbENvbG9ybWFwCisgICAgICAg
ICAgICBtX2lzR2xvYmFsQ29sb3JtYXBEZWZpbmVkID0gdHJ1ZTsKICAgICAgICAgICAgIEdFVE4o
MSwgR0lGSW1hZ2VTdGFydCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTQ1
LDcgKzUxMSw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hh
ciAqYnVmLCB1bnNpZ25lZCBsZW4sIEdJRkltYWdlRGVjb2RlCiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIEdJRkV4dGVuc2lvbjogewotICAgICAgICAgICAgbV9jb3VudCA9IHFbMV07CisgICAg
ICAgICAgICB1bnNpZ25lZCBieXRlc0luQmxvY2sgPSBxWzFdOwogICAgICAgICAgICAgR0lGU3Rh
dGUgZXMgPSBHSUZTa2lwQmxvY2s7CiAKICAgICAgICAgICAgIC8vIFRoZSBHSUYgc3BlYyBtYW5k
YXRlcyBsZW5ndGhzIGZvciB0aHJlZSBvZiB0aGUgZXh0ZW5zaW9ucyBiZWxvdy4KQEAgLTU2Niwx
NyArNTMyLDE3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hh
ciAqYnVmLCB1bnNpZ25lZCBsZW4sIEdJRkltYWdlRGVjb2RlCiAgICAgICAgICAgICBzd2l0Y2gg
KCpxKSB7CiAgICAgICAgICAgICBjYXNlIDB4Zjk6CiAgICAgICAgICAgICAgICAgZXMgPSBHSUZD
b250cm9sRXh0ZW5zaW9uOwotICAgICAgICAgICAgICAgIG1fY291bnQgPSBzdGQ6Om1heChtX2Nv
dW50LCA0KTsKKyAgICAgICAgICAgICAgICBieXRlc0luQmxvY2sgPSBzdGQ6Om1heChieXRlc0lu
QmxvY2ssIDR1KTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSAw
eDAxOgogICAgICAgICAgICAgICAgIC8vIGlnbm9yaW5nIHBsYWluIHRleHQgZXh0ZW5zaW9uCi0g
ICAgICAgICAgICAgICAgbV9jb3VudCA9IHN0ZDo6bWF4KG1fY291bnQsIDEyKTsKKyAgICAgICAg
ICAgICAgICBieXRlc0luQmxvY2sgPSBzdGQ6Om1heChieXRlc0luQmxvY2ssIDEydSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgMHhmZjoKICAgICAgICAgICAg
ICAgICBlcyA9IEdJRkFwcGxpY2F0aW9uRXh0ZW5zaW9uOwotICAgICAgICAgICAgICAgIG1fY291
bnQgPSBzdGQ6Om1heChtX2NvdW50LCAxMSk7CisgICAgICAgICAgICAgICAgYnl0ZXNJbkJsb2Nr
ID0gc3RkOjptYXgoYnl0ZXNJbkJsb2NrLCAxMXUpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
CiAgICAgICAgICAgICBjYXNlIDB4ZmU6CkBAIC01ODQsOCArNTUwLDggQEAgYm9vbCBHSUZJbWFn
ZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgR0lG
SW1hZ2VEZWNvZGUKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAotICAg
ICAgICAgICAgaWYgKG1fY291bnQpCi0gICAgICAgICAgICAgICAgR0VUTihtX2NvdW50LCBlcyk7
CisgICAgICAgICAgICBpZiAoYnl0ZXNJbkJsb2NrKQorICAgICAgICAgICAgICAgIEdFVE4oYnl0
ZXNJbkJsb2NrLCBlcyk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgR0VUTigx
LCBHSUZJbWFnZVN0YXJ0KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzI5LDggKzY5NSw3IEBA
IGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNp
Z25lZCBsZW4sIEdJRkltYWdlRGVjb2RlCiAgICAgICAgICAgICBpZiAocXVlcnkgPT0gR0lGSW1h
Z2VEZWNvZGVyOjpHSUZTaXplUXVlcnkgfHwgaGFsdEF0RnJhbWUgPT0gbV9pbWFnZXNEZWNvZGVk
KSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIGRlY29kZXIgbmVlZHMgdG8gc3RvcC4gSGFuZCBi
YWNrIHRoZSBudW1iZXIgb2YgYnl0ZXMgd2UgY29uc3VtZWQgZnJvbQogICAgICAgICAgICAgICAg
IC8vIGJ1ZmZlciBtaW51cyA5ICh0aGUgYW1vdW50IHdlIGNvbnN1bWVkIHRvIHJlYWQgdGhlIGhl
YWRlcikuCi0gICAgICAgICAgICAgICAgaWYgKG1fY2xpZW50KQotICAgICAgICAgICAgICAgICAg
ICBtX2NsaWVudC0+ZGVjb2RpbmdIYWx0ZWQobGVuICsgOSk7CisgICAgICAgICAgICAgICAgc2V0
UmVtYWluaW5nQnl0ZXMobGVuICsgOSk7CiAgICAgICAgICAgICAgICAgR0VUTig5LCBHSUZJbWFn
ZUhlYWRlcik7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CkBA
IC03OTQsMzMgKzc1OSwyNCBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2ln
bmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURlY29kZQogICAgICAgICAgICAg
Ly8gaGFzIGEgbG9jYWwgY29sb3JtYXA/CiAgICAgICAgICAgICBpZiAocVs4XSAmIDB4ODApIHsK
ICAgICAgICAgICAgICAgICBpbnQgbnVtQ29sb3JzID0gMiA8PCAocVs4XSAmIDB4Nyk7Ci0gICAg
ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2l6ZSA9IDMgKiBudW1Db2xvcnM7Ci0gICAgICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciAqbWFwID0gbV9mcmFtZUNvbnRleHQgPyBtX2ZyYW1lQ29u
dGV4dC0+bG9jYWxDb2xvcm1hcCA6IDA7Ci0gICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250
ZXh0ICYmICghbWFwIHx8IChudW1Db2xvcnMgPiBtX2ZyYW1lQ29udGV4dC0+bG9jYWxDb2xvcm1h
cFNpemUpKSkgewotICAgICAgICAgICAgICAgICAgICBkZWxldGUgW11tYXA7Ci0gICAgICAgICAg
ICAgICAgICAgIG1hcCA9IG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoIW1hcCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2NsaWVudCA/
IG1fY2xpZW50LT5zZXRGYWlsZWQoKSA6IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBsb2NhbENvbG9ybWFwQnl0ZXMgPSAzICogbnVtQ29s
b3JzOwogCiAgICAgICAgICAgICAgICAgLy8gU3dpdGNoIHRvIHRoZSBuZXcgbG9jYWwgcGFsZXR0
ZSBhZnRlciBpdCBsb2FkcwogICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkgewot
ICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+bG9jYWxDb2xvcm1hcCA9IG1hcDsK
KyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXBQb3NpdGlv
biA9IGRhdGFQb3NpdGlvbjsKICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmxv
Y2FsQ29sb3JtYXBTaXplID0gbnVtQ29sb3JzOwotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1l
Q29udGV4dC0+aXNMb2NhbENvbG9ybWFwRGVmaW5lZCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IHNpemUpIHsKLSAgICAgICAgICAgICAgICAg
ICAgLy8gVXNlICdob2xkJyBwYXR0ZXJuIHRvIGdldCB0aGUgaW1hZ2UgY29sb3JtYXAKLSAgICAg
ICAgICAgICAgICAgICAgR0VUTihzaXplLCBHSUZJbWFnZUNvbG9ybWFwKTsKKyAgICAgICAgICAg
ICAgICBpZiAobGVuIDwgbG9jYWxDb2xvcm1hcEJ5dGVzKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIE5vdCBlbm91Z2ggYnl0ZXMgdG8gcmVhZCB0aGUgZW50aXJlIGdsb2JhbCBjb2xvcm1hcCB0
aGlzIHRpbWUgc28gcmVhZCBpdCBuZXh0LgorICAgICAgICAgICAgICAgICAgICBHRVROKGxvY2Fs
Q29sb3JtYXBCeXRlcywgR0lGSW1hZ2VDb2xvcm1hcCk7CiAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIC8vIENvcHkgZXZlcnl0
aGluZyBhbmQgZGlyZWN0bHkgZ28gdG8gR0lGTFpXU3RhcnQKICAgICAgICAgICAgICAgICBpZiAo
bV9mcmFtZUNvbnRleHQpCi0gICAgICAgICAgICAgICAgICAgIG1lbWNweShtX2ZyYW1lQ29udGV4
dC0+bG9jYWxDb2xvcm1hcCwgYnVmLCBzaXplKTsKLSAgICAgICAgICAgICAgICBidWYgKz0gc2l6
ZTsKLSAgICAgICAgICAgICAgICBsZW4gLT0gc2l6ZTsKKyAgICAgICAgICAgICAgICAgICAgbV9m
cmFtZUNvbnRleHQtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGRhdGFQb3NpdGlvbiArPSBsb2NhbENvbG9ybWFwQnl0ZXM7CisgICAgICAgICAgICAgICAg
bGVuIC09IGxvY2FsQ29sb3JtYXBCeXRlczsKICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9mcmFt
ZUNvbnRleHQpIHsKICAgICAgICAgICAgICAgICAvLyBTd2l0Y2ggYmFjayB0byB0aGUgZ2xvYmFs
IHBhbGV0dGUKICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+aXNMb2NhbENvbG9ybWFw
RGVmaW5lZCA9IGZhbHNlOwpAQCAtODMwLDIxICs3ODYsMjMgQEAgYm9vbCBHSUZJbWFnZVJlYWRl
cjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgR0lGSW1hZ2VE
ZWNvZGUKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgR0lGSW1hZ2VDb2xvcm1hcDogewotICAg
ICAgICAgICAgLy8gRXZlcnl0aGluZyBpcyBhbHJlYWR5IGNvcGllZCBpbnRvIGxvY2FsQ29sb3Jt
YXAKKyAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkKKyAgICAgICAgICAgICAgICBtX2Zy
YW1lQ29udGV4dC0+aXNMb2NhbENvbG9ybWFwRGVmaW5lZCA9IHRydWU7CiAgICAgICAgICAgICBH
RVROKDEsIEdJRkxaV1N0YXJ0KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBHSUZTdWJCbG9jazogewogICAgICAgICAgICAgLy8gU3RpbGwgd29ya2luZyBv
biB0aGUgc2FtZSBpbWFnZTogUHJvY2VzcyBuZXh0IExaVyBkYXRhIGJsb2NrLgotICAgICAgICAg
ICAgaWYgKChtX2NvdW50ID0gKnEpKSB7CisgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBieXRl
c0luQmxvY2sgPSAqcTsKKyAgICAgICAgICAgIGlmIChieXRlc0luQmxvY2spIHsKICAgICAgICAg
ICAgICAgICAvLyBNYWtlIHN1cmUgdGhlcmUgYXJlIHN0aWxsIHJvd3MgbGVmdC4gSWYgdGhlIEdJ
RiBkYXRhCiAgICAgICAgICAgICAgICAgLy8gaXMgY29ycnVwdCwgd2UgbWF5IG5vdCBnZXQgYW4g
ZXhwbGljaXQgdGVybWluYXRvci4KICAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQg
JiYgIW1fZnJhbWVDb250ZXh0LT5yb3dzUmVtYWluaW5nKSB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIFRoaXMgaXMgYW4gaWxsZWdhbCBHSUYsIGJ1dCB3ZSByZW1haW4gdG9sZXJhbnQuCiAgICAg
ICAgICAgICAgICAgICAgIEdFVE4oMSwgR0lGU3ViQmxvY2spOwogICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICBHRVROKG1fY291bnQsIEdJRkxaVyk7CisgICAgICAgICAgICAgICAg
R0VUTihieXRlc0luQmxvY2ssIEdJRkxaVyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgIC8vIFNlZSBpZiB0aGVyZSBhcmUgYW55IG1vcmUgaW1hZ2VzIGluIHRoaXMgc2Vx
dWVuY2UuCiAgICAgICAgICAgICAgICAgbV9pbWFnZXNEZWNvZGVkKys7CkBAIC04NzcsMjMgKzgz
NSwxMiBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1
ZiwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURlY29kZQogICAgICAgICB9CiAgICAgfQogCi0gICAg
Ly8gQ29weSB0aGUgbGVmdG92ZXIgaW50byBtX2ZyYW1lQ29udGV4dC0+bV9ob2xkCi0gICAgbV9i
eXRlc0luSG9sZCA9IGxlbjsKLSAgICBpZiAobGVuKSB7Ci0gICAgICAgIC8vIEFkZCB3aGF0IHdl
IGhhdmUgc29mYXIgdG8gdGhlIGJsb2NrCi0gICAgICAgIHVuc2lnbmVkIGNoYXIqIHA7Ci0gICAg
ICAgIGlmIChtX3N0YXRlID09IEdJRkdsb2JhbENvbG9ybWFwKQotICAgICAgICAgICAgcCA9IG1f
Z2xvYmFsQ29sb3JtYXA7Ci0gICAgICAgIGVsc2UgaWYgKG1fc3RhdGUgPT0gR0lGSW1hZ2VDb2xv
cm1hcCkKLSAgICAgICAgICAgIHAgPSBtX2ZyYW1lQ29udGV4dCA/IG1fZnJhbWVDb250ZXh0LT5s
b2NhbENvbG9ybWFwIDogMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcCA9IG1faG9sZDsK
LSAgICAgICAgaWYgKHApCi0gICAgICAgICAgICBtZW1jcHkocCwgYnVmLCBsZW4pOwotICAgICAg
ICBtX2J5dGVzVG9Db25zdW1lIC09IGxlbjsKLSAgICB9Ci0KLSAgICBpZiAobV9jbGllbnQpCi0g
ICAgICAgIG1fY2xpZW50LT5kZWNvZGluZ0hhbHRlZCgwKTsKKyAgICBzZXRSZW1haW5pbmdCeXRl
cyhsZW4pOwogICAgIHJldHVybiBmYWxzZTsKIH0KKwordm9pZCBHSUZJbWFnZVJlYWRlcjo6c2V0
UmVtYWluaW5nQnl0ZXModW5zaWduZWQgcmVtYWluaW5nQnl0ZXMpCit7CisgICAgQVNTRVJUKHJl
bWFpbmluZ0J5dGVzIDw9IG1fZGF0YS0+c2l6ZSgpKTsKKyAgICBtX2J5dGVzUmVhZCA9IG1fZGF0
YS0+c2l6ZSgpIC0gcmVtYWluaW5nQnl0ZXM7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCmluZGV4
IGMwODI5MThjNDMxNjZiMzgwMjllYmRmNGYyNGNmMzRkZTY5ZDc0OWIuLmUzZDQ3MmI4MDFjOTkx
ODZjZTgzODkyYmYwYWY2NmZkZDc2Y2I4NzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCkBAIC00
MSwxMSArNDEsMTIgQEAKIC8vIERlZmluZSBvdXJzZWx2ZXMgYXMgdGhlIGNsaWVudFB0ci4gIE1v
emlsbGEganVzdCBoYWNrZWQgdGhlaXIgQysrIGNhbGxiYWNrIGNsYXNzIGludG8gdGhpcyBvbGQg
QyBkZWNvZGVyLAogLy8gc28gd2Ugd2lsbCB0b28uCiAjaW5jbHVkZSAiR0lGSW1hZ2VEZWNvZGVy
LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKICNkZWZpbmUgTUFYX0xaV19CSVRTICAg
ICAgICAgIDEyCiAjZGVmaW5lIE1BWF9CSVRTICAgICAgICAgICAgNDA5NyAvKiAyXk1BWF9MWldf
QklUUysxICovCiAjZGVmaW5lIE1BWF9DT0xPUlMgICAgICAgICAgIDI1NgotI2RlZmluZSBNQVhf
SE9MRF9TSVpFICAgICAgICAyNTYKKyNkZWZpbmUgR0lGX0NPTE9SUyAgICAgICAgICAgICAzCiAK
IGNvbnN0IGludCBjTG9vcENvdW50Tm90U2VlbiA9IC0yOwogCkBAIC0xMDMsNyArMTA0LDcgQEAg
cHVibGljOgogICAgIHVuc2lnbmVkIGhlaWdodDsKICAgICBpbnQgdHBpeGVsOyAvLyBJbmRleCBv
ZiB0cmFuc3BhcmVudCBwaXhlbC4KICAgICBXZWJDb3JlOjpJbWFnZUZyYW1lOjpGcmFtZURpc3Bv
c2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kOyAvLyBSZXN0b3JlIHRvIGJhY2tncm91bmQsIGxlYXZl
IGluIHBsYWNlLCBldGMuCi0gICAgdW5zaWduZWQgY2hhciAqbG9jYWxDb2xvcm1hcDsgLy8gUGVy
LWltYWdlIGNvbG9ybWFwLgorICAgIHVuc2lnbmVkIGxvY2FsQ29sb3JtYXBQb3NpdGlvbjsgLy8g
UGVyLWltYWdlIGNvbG9ybWFwLgogICAgIGludCBsb2NhbENvbG9ybWFwU2l6ZTsgLy8gU2l6ZSBv
ZiBsb2NhbCBjb2xvcm1hcCBhcnJheS4KICAgICAKICAgICBib29sIGlzTG9jYWxDb2xvcm1hcERl
ZmluZWQgOiAxOwpAQCAtMTQwLDcgKzE0MSw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBoZWlnaHQo
MCkKICAgICAgICAgLCB0cGl4ZWwoMCkKICAgICAgICAgLCBkaXNwb3NhbE1ldGhvZChXZWJDb3Jl
OjpJbWFnZUZyYW1lOjpEaXNwb3NlTm90U3BlY2lmaWVkKQotICAgICAgICAsIGxvY2FsQ29sb3Jt
YXAoMCkKKyAgICAgICAgLCBsb2NhbENvbG9ybWFwUG9zaXRpb24oMCkKICAgICAgICAgLCBsb2Nh
bENvbG9ybWFwU2l6ZSgwKQogICAgICAgICAsIGlzTG9jYWxDb2xvcm1hcERlZmluZWQoZmFsc2Up
CiAgICAgICAgICwgcHJvZ3Jlc3NpdmVEaXNwbGF5KGZhbHNlKQpAQCAtMTU2LDcgKzE1Nyw2IEBA
IHB1YmxpYzoKICAgICB+R0lGRnJhbWVDb250ZXh0KCkKICAgICB7CiAgICAgICAgIGRlbGV0ZSBb
XSByb3didWY7Ci0gICAgICAgIGRlbGV0ZSBbXSBsb2NhbENvbG9ybWFwOwogICAgICAgICBkZWxl
dGUgW10gcHJlZml4OwogICAgICAgICBkZWxldGUgW10gc3VmZml4OwogICAgICAgICBkZWxldGUg
W10gc3RhY2s7CkBAIC0xNjksNjYgKzE2OSw5NSBAQCBwdWJsaWM6CiAgICAgR0lGSW1hZ2VSZWFk
ZXIoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyKiBjbGllbnQgPSAwKQogICAgICAgICA6IG1fY2xp
ZW50KGNsaWVudCkKICAgICAgICAgLCBtX3N0YXRlKEdJRlR5cGUpCi0gICAgICAgICwgbV9ieXRl
c1RvQ29uc3VtZSg2KQotICAgICAgICAsIG1fYnl0ZXNJbkhvbGQoMCkKLSAgICAgICAgLCBtX2ds
b2JhbENvbG9ybWFwKDApCisgICAgICAgICwgbV9ieXRlc1RvQ29uc3VtZSg2KSAvLyBOdW1iZXIg
b2YgYnl0ZXMgZm9yIHRoZSBmaXJzdCByZWFkLgorICAgICAgICAsIG1fYnl0ZXNSZWFkKDApCiAg
ICAgICAgICwgbV9zY3JlZW5CZ2NvbG9yKDApCiAgICAgICAgICwgbV92ZXJzaW9uKDApCiAgICAg
ICAgICwgbV9zY3JlZW5XaWR0aCgwKQogICAgICAgICAsIG1fc2NyZWVuSGVpZ2h0KDApCisgICAg
ICAgICwgbV9pc0dsb2JhbENvbG9ybWFwRGVmaW5lZChmYWxzZSkKKyAgICAgICAgLCBtX2dsb2Jh
bENvbG9ybWFwUG9zaXRpb24oMCkKICAgICAgICAgLCBtX2dsb2JhbENvbG9ybWFwU2l6ZSgwKQog
ICAgICAgICAsIG1faW1hZ2VzRGVjb2RlZCgwKQogICAgICAgICAsIG1faW1hZ2VzQ291bnQoMCkK
ICAgICAgICAgLCBtX2xvb3BDb3VudChjTG9vcENvdW50Tm90U2VlbikKLSAgICAgICAgLCBtX2Nv
dW50KDApCiAgICAgICAgICwgbV9mcmFtZUNvbnRleHQoMCkKICAgICB7CiAgICAgfQogCiAgICAg
fkdJRkltYWdlUmVhZGVyKCkKICAgICB7Ci0gICAgICAgIGRlbGV0ZSBbXSBtX2dsb2JhbENvbG9y
bWFwOwotICAgICAgICBtX2dsb2JhbENvbG9ybWFwID0gMDsKLQogICAgICAgICBkZWxldGUgbV9m
cmFtZUNvbnRleHQ7CiAgICAgICAgIG1fZnJhbWVDb250ZXh0ID0gMDsKICAgICB9CiAKLSAgICBi
b29sIHJlYWQoY29uc3QgdW5zaWduZWQgY2hhciogYnVmLCB1bnNpZ25lZCBudW1ieXRlcywgV2Vi
Q29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSA9IFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rl
cjo6R0lGRnVsbFF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSA9IC0xKTsKKyAgICB2b2lkIHNl
dERhdGEoUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGRhdGEpIHsgbV9kYXRhID0g
ZGF0YTsgfQorICAgIGJvb2wgZGVjb2RlKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGUXVl
cnksIGludCBoYWx0QXRGcmFtZSk7CiAKICAgICBpbnQgaW1hZ2VzQ291bnQoKSBjb25zdCB7IHJl
dHVybiBtX2ltYWdlc0NvdW50OyB9CiAgICAgaW50IGxvb3BDb3VudCgpIGNvbnN0IHsgcmV0dXJu
IG1fbG9vcENvdW50OyB9Ci0gICAgdW5zaWduZWQgY2hhciogZ2xvYmFsQ29sb3JtYXAoKSBjb25z
dCB7IHJldHVybiBtX2dsb2JhbENvbG9ybWFwOyB9Ci0gICAgaW50IGdsb2JhbENvbG9ybWFwU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsQ29sb3JtYXBTaXplOyB9CisKKyAgICBjb25zdCB1
bnNpZ25lZCBjaGFyKiBnbG9iYWxDb2xvcm1hcCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
IW1faXNHbG9iYWxDb2xvcm1hcERlZmluZWQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgcmV0dXJuIGRhdGEobV9nbG9iYWxDb2xvcm1hcFBvc2l0aW9uKTsKKyAgICB9CisgICAgaW50
IGdsb2JhbENvbG9ybWFwU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIW1faXNHbG9i
YWxDb2xvcm1hcERlZmluZWQpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJu
IG1fZ2xvYmFsQ29sb3JtYXBTaXplOworICAgIH0KKworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIq
IGxvY2FsQ29sb3JtYXAoY29uc3QgR0lGRnJhbWVDb250ZXh0KiBmcmFtZSkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghZnJhbWUtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQpCisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIGRhdGEoZnJhbWUtPmxvY2FsQ29sb3JtYXBQb3Np
dGlvbik7CisgICAgfQorICAgIGludCBsb2NhbENvbG9ybWFwU2l6ZShjb25zdCBHSUZGcmFtZUNv
bnRleHQqIGZyYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFmcmFtZS0+aXNMb2NhbENv
bG9ybWFwRGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gZnJh
bWUtPmxvY2FsQ29sb3JtYXBTaXplOworICAgIH0KKwogICAgIGNvbnN0IEdJRkZyYW1lQ29udGV4
dCogZnJhbWVDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUNvbnRleHQ7IH0KIAogcHJp
dmF0ZToKKyAgICBib29sIGRlY29kZUludGVybmFsKHVuc2lnbmVkIGRhdGFQb3NpdGlvbiwgdW5z
aWduZWQgbGVuLCBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5ID0gV2ViQ29yZTo6
R0lGSW1hZ2VEZWNvZGVyOjpHSUZGdWxsUXVlcnksIHVuc2lnbmVkIGhhbHRBdEZyYW1lID0gLTEp
OwogICAgIGJvb2wgb3V0cHV0Um93KCk7Ci0gICAgYm9vbCBkb0xaVyhjb25zdCB1bnNpZ25lZCBj
aGFyICpxKTsKKyAgICBib29sIGRvTFpXKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgc2l6ZV90KTsK
KyAgICB2b2lkIHNldFJlbWFpbmluZ0J5dGVzKHVuc2lnbmVkKTsKKworICAgIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIGRhdGEodW5zaWduZWQgZGF0YVBvc2l0aW9uKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KG1fZGF0YS0+
ZGF0YSgpKSArIGRhdGFQb3NpdGlvbjsKKyAgICB9CiAKICAgICBXZWJDb3JlOjpHSUZJbWFnZURl
Y29kZXIqIG1fY2xpZW50OwogCiAgICAgLy8gUGFyc2luZyBzdGF0ZSBtYWNoaW5lLgogICAgIEdJ
RlN0YXRlIG1fc3RhdGU7IC8vIEN1cnJlbnQgZGVjb2RlciBtYXN0ZXIgc3RhdGUuCi0gICAgdW5z
aWduZWQgbV9ieXRlc1RvQ29uc3VtZTsgLy8gTnVtYmVyIG9mIGJ5dGVzIHRvIGFjY3VtdWxhdGUu
Ci0gICAgdW5zaWduZWQgbV9ieXRlc0luSG9sZDsgLy8gYnl0ZXMgYWNjdW11bGF0ZWQgc28gZmFy
LgotICAgIHVuc2lnbmVkIGNoYXIgbV9ob2xkW01BWF9IT0xEX1NJWkVdOyAvLyBBY2N1bXVsYXRp
b24gYnVmZmVyLgotICAgIHVuc2lnbmVkIGNoYXIqIG1fZ2xvYmFsQ29sb3JtYXA7IC8vICgzKiBN
QVhfQ09MT1JTIGluIHNpemUpIERlZmF1bHQgY29sb3JtYXAgaWYgbG9jYWwgbm90IHN1cHBsaWVk
LCAzIGJ5dGVzIGZvciBlYWNoIGNvbG9yLgorICAgIHVuc2lnbmVkIG1fYnl0ZXNUb0NvbnN1bWU7
IC8vIE51bWJlciBvZiBieXRlcyB0byBjb25zdW1lIGZvciBuZXh0IHN0YWdlIG9mIHBhcnNpbmcu
CisgICAgdW5zaWduZWQgbV9ieXRlc1JlYWQ7IC8vIE51bWJlciBvZiBieXRlcyBwcm9jZXNzZWQu
CiAgICAgCiAgICAgLy8gR2xvYmFsIChtdWx0aS1pbWFnZSkgc3RhdGUuCiAgICAgaW50IG1fc2Ny
ZWVuQmdjb2xvcjsgLy8gTG9naWNhbCBzY3JlZW4gYmFja2dyb3VuZCBjb2xvci4KICAgICBpbnQg
bV92ZXJzaW9uOyAvLyBFaXRoZXIgODkgZm9yIEdJRjg5IG9yIDg3IGZvciBHSUY4Ny4KICAgICB1
bnNpZ25lZCBtX3NjcmVlbldpZHRoOyAvLyBMb2dpY2FsIHNjcmVlbiB3aWR0aCAmIGhlaWdodC4K
ICAgICB1bnNpZ25lZCBtX3NjcmVlbkhlaWdodDsKKyAgICBib29sIG1faXNHbG9iYWxDb2xvcm1h
cERlZmluZWQ7CisgICAgdW5zaWduZWQgbV9nbG9iYWxDb2xvcm1hcFBvc2l0aW9uOyAvLyAoMyog
TUFYX0NPTE9SUyBpbiBzaXplKSBEZWZhdWx0IGNvbG9ybWFwIGlmIGxvY2FsIG5vdCBzdXBwbGll
ZCwgMyBieXRlcyBmb3IgZWFjaCBjb2xvci4KICAgICBpbnQgbV9nbG9iYWxDb2xvcm1hcFNpemU7
IC8vIFNpemUgb2YgZ2xvYmFsIGNvbG9ybWFwIGFycmF5LgogICAgIHVuc2lnbmVkIG1faW1hZ2Vz
RGVjb2RlZDsgLy8gQ291bnRzIGNvbXBsZXRlZCBmcmFtZXMgZm9yIGFuaW1hdGVkIEdJRnMuCiAg
ICAgaW50IG1faW1hZ2VzQ291bnQ7IC8vIENvdW50ZWQgYWxsIGZyYW1lcyBzZWVuIHNvIGZhciAo
aW5jbHVkaW5nIGluY29tcGxldGUgZnJhbWVzKS4KICAgICBpbnQgbV9sb29wQ291bnQ7IC8vIE5l
dHNjYXBlIHNwZWNpZmljIGV4dGVuc2lvbiBibG9jayB0byBjb250cm9sIHRoZSBudW1iZXIgb2Yg
YW5pbWF0aW9uIGxvb3BzIGEgR0lGIHJlbmRlcnMuCiAgICAgCi0gICAgLy8gTm90IHJlYWxseSBn
bG9iYWwsIGJ1dCBjb252ZW5pZW50IHRvIGxvY2F0ZSBoZXJlLgotICAgIGludCBtX2NvdW50OyAv
LyBSZW1haW5pbmcgIyBieXRlcyBpbiBzdWItYmxvY2suCi0gICAgCiAgICAgR0lGRnJhbWVDb250
ZXh0KiBtX2ZyYW1lQ29udGV4dDsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+
IG1fZGF0YTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IGFh
MTQxNWY0MjcxYzkyOTllOTVkMGYzOTczYzNhNTBjNmJlMWM3ZmUuLmYwNGViYWQ3ZmIxNjI1ZDJk
ZTc3NDUyNDc1YTdlYTA0OThhOGVjY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAg
LTY0MSw2ICs2NDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFdlIHNo
b3VsZCBub3QgaW5jbHVkZSBmaWxlcyBkZXBlbmRpbmcgb24gd2Via2l0X3N1cHBvcnQuCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhlc2UgdGVzdHMgZGVwZW5kIG9uIHdlYmtp
dF9zdXBwb3J0IGFuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZ1bmN0aW9u
cyBkZWZpbmVkIG9ubHkgaW4gIVdFQktJVF9JTVBMRU1FTlRBVElPTi4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0dJRkltYWdlRGVjb2RlclRlc3QuY3BwJywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0xldmVsREJUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
Y29uZGl0aW9ucyc6IFsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0
Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCmluZGV4IGQ1ODExMjg4
Y2ZlNGNmMzM3YWU0NzZhM2Q1NzI4N2ExYTEzMzFjMjkuLjNiMGE3YTUzZTU4MjNjNzFjYmU2ODJi
NTcwNzRkZjU2ZjE0MTBjMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQpAQCAtNzIs
NiArNzIsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0ZyYW1lTG9hZGVyQ2xpZW50SW1wbFRlc3Qu
Y3BwJywKICAgICAgICAgICAgICd0ZXN0cy9GcmFtZVRlc3RIZWxwZXJzLmNwcCcsCiAgICAgICAg
ICAgICAndGVzdHMvRnJhbWVUZXN0SGVscGVycy5oJywKKyAgICAgICAgICAgICd0ZXN0cy9HSUZJ
bWFnZURlY29kZXJUZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvR3JhcGhpY3NMYXllckNo
cm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQkFib3J0T25Db3JydXB0VGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQkJpbmRpbmdVdGlsaXRpZXNUZXN0LmNwcCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dJRkltYWdlRGVjb2Rl
clRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HSUZJbWFnZURlY29kZXJU
ZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40ZDU0N2U5YWRjYzAwMGFhMjkxNGZkMGRiZjdjYjRmYzI1M2Nl
ZTk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HSUZJ
bWFnZURlY29kZXJUZXN0LmNwcApAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisg
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAor
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIkdJRkltYWdlRGVjb2Rlci5oIgorCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5o
IgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+Cisj
aW5jbHVkZSA8cHVibGljL1dlYkRhdGEuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViU2l6ZS5oPgor
I2luY2x1ZGUgPHdlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0Lmg+CisjaW5jbHVkZSA8d3Rm
L093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisKK3VzaW5nIG5hbWVzcGFj
ZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNwYWNlIHsKKworc3Rh
dGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiByZWFkRmlsZShjb25zdCBjaGFyKiBmaWxlTmFt
ZSkKK3sKKyAgICBTdHJpbmcgZmlsZVBhdGggPSB3ZWJraXRfc3VwcG9ydDo6R2V0V2ViS2l0Um9v
dERpcigpOworICAgIGZpbGVQYXRoLmFwcGVuZChmaWxlTmFtZSk7CisKKyAgICBsb25nIGxvbmcg
ZmlsZVNpemU7CisgICAgaWYgKCFnZXRGaWxlU2l6ZShmaWxlUGF0aCwgZmlsZVNpemUpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUgPSBvcGVuRmls
ZShmaWxlUGF0aCwgT3BlbkZvclJlYWQpOworICAgIGludCBmaWxlTGVuZ3RoID0gc3RhdGljX2Nh
c3Q8aW50PihmaWxlU2l6ZSk7CisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcihmaWxlTGVuZ3RoKTsK
KyAgICByZWFkRnJvbUZpbGUoaGFuZGxlLCBidWZmZXIuZGF0YSgpLCBmaWxlTGVuZ3RoKTsKKyAg
ICBjbG9zZUZpbGUoaGFuZGxlKTsKKyAgICByZXR1cm4gU2hhcmVkQnVmZmVyOjphZG9wdFZlY3Rv
cihidWZmZXIpOworfQorCitURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIGRlY29kZVR3b0ZyYW1l
cykKK3sKKyAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGFkb3B0UHRyKG5ldyBH
SUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwgSW1hZ2VT
b3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkpKTsKKworICAgIFJlZlB0cjxTaGFy
ZWRCdWZmZXI+IGRhdGEgPSByZWFkRmlsZSgiL0xheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL3Jlc291
cmNlcy9hbmltYXRlZC5naWYiKTsKKyAgICBBU1NFUlRfVFJVRShkYXRhLmdldCgpKTsKKyAgICBk
ZWNvZGVyLT5zZXREYXRhKGRhdGEuZ2V0KCksIHRydWUpOworICAgIEVYUEVDVF9FUShjQW5pbWF0
aW9uTG9vcE9uY2UsIGRlY29kZXItPnJlcGV0aXRpb25Db3VudCgpKTsKKworICAgIEltYWdlRnJh
bWUqIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDApOworICAgIEVYUEVDVF9F
UShJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlLCBmcmFtZS0+c3RhdHVzKCkpOworICAgIEVYUEVD
VF9FUSgxNiwgZnJhbWUtPmdldFNrQml0bWFwKCkud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDE2
LCBmcmFtZS0+Z2V0U2tCaXRtYXAoKS5oZWlnaHQoKSk7CisKKyAgICBmcmFtZSA9IGRlY29kZXIt
PmZyYW1lQnVmZmVyQXRJbmRleCgxKTsKKyAgICBFWFBFQ1RfRVEoSW1hZ2VGcmFtZTo6RnJhbWVD
b21wbGV0ZSwgZnJhbWUtPnN0YXR1cygpKTsKKyAgICBFWFBFQ1RfRVEoMTYsIGZyYW1lLT5nZXRT
a0JpdG1hcCgpLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgxNiwgZnJhbWUtPmdldFNrQml0bWFw
KCkuaGVpZ2h0KCkpOworCisgICAgRVhQRUNUX0VRKDJ1LCBkZWNvZGVyLT5mcmFtZUNvdW50KCkp
OworICAgIEVYUEVDVF9FUShjQW5pbWF0aW9uTG9vcEluZmluaXRlLCBkZWNvZGVyLT5yZXBldGl0
aW9uQ291bnQoKSk7Cit9CisKK1RFU1QoR0lGSW1hZ2VEZWNvZGVyVGVzdCwgcGFyc2VBbmREZWNv
ZGUpCit7CisgICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihuZXcg
R0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIEltYWdl
U291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CisKKyAgICBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBkYXRhID0gcmVhZEZpbGUoIi9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9yZXNv
dXJjZXMvYW5pbWF0ZWQuZ2lmIik7CisgICAgQVNTRVJUX1RSVUUoZGF0YS5nZXQoKSk7CisgICAg
ZGVjb2Rlci0+c2V0RGF0YShkYXRhLmdldCgpLCB0cnVlKTsKKyAgICBFWFBFQ1RfRVEoY0FuaW1h
dGlvbkxvb3BPbmNlLCBkZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSk7CisKKyAgICAvLyBUaGlz
IGNhbGwgd2lsbCBwYXJzZSB0aGUgZW50aXJlIGZpbGUuCisgICAgRVhQRUNUX0VRKDJ1LCBkZWNv
ZGVyLT5mcmFtZUNvdW50KCkpOworCisgICAgSW1hZ2VGcmFtZSogZnJhbWUgPSBkZWNvZGVyLT5m
cmFtZUJ1ZmZlckF0SW5kZXgoMCk7CisgICAgRVhQRUNUX0VRKEltYWdlRnJhbWU6OkZyYW1lQ29t
cGxldGUsIGZyYW1lLT5zdGF0dXMoKSk7CisgICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+Z2V0U2tC
aXRtYXAoKS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTYsIGZyYW1lLT5nZXRTa0JpdG1hcCgp
LmhlaWdodCgpKTsKKworICAgIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDEp
OworICAgIEVYUEVDVF9FUShJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlLCBmcmFtZS0+c3RhdHVz
KCkpOworICAgIEVYUEVDVF9FUSgxNiwgZnJhbWUtPmdldFNrQml0bWFwKCkud2lkdGgoKSk7Cisg
ICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+Z2V0U2tCaXRtYXAoKS5oZWlnaHQoKSk7CisgICAgRVhQ
RUNUX0VRKGNBbmltYXRpb25Mb29wSW5maW5pdGUsIGRlY29kZXItPnJlcGV0aXRpb25Db3VudCgp
KTsKK30KKworVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBwYXJzZUJ5dGVCeUJ5dGUpCit7Cisg
ICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihuZXcgR0lGSW1hZ2VE
ZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIEltYWdlU291cmNlOjpH
YW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CisKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBkYXRhID0gcmVhZEZpbGUoIi9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9yZXNvdXJjZXMvYW5p
bWF0ZWQuZ2lmIik7CisgICAgQVNTRVJUX1RSVUUoZGF0YS5nZXQoKSk7CisKKyAgICBzaXplX3Qg
ZnJhbWVDb3VudCA9IDA7CisKKyAgICAvLyBQYXNzIGRhdGEgdG8gZGVjb2RlciBieXRlIGJ5IGJ5
dGUuCisgICAgZm9yICh1bnNpZ25lZCBsZW5ndGggPSAxOyBsZW5ndGggPD0gZGF0YS0+c2l6ZSgp
OyArK2xlbmd0aCkgeworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiB0ZW1wRGF0YSA9IFNo
YXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEtPmRhdGEoKSwgbGVuZ3RoKTsKKyAgICAgICAgZGVjb2Rl
ci0+c2V0RGF0YSh0ZW1wRGF0YS5nZXQoKSwgbGVuZ3RoID09IGRhdGEtPnNpemUoKSk7CisKKyAg
ICAgICAgRVhQRUNUX0xFKGZyYW1lQ291bnQsIGRlY29kZXItPmZyYW1lQ291bnQoKSk7CisgICAg
ICAgIGZyYW1lQ291bnQgPSBkZWNvZGVyLT5mcmFtZUNvdW50KCk7CisgICAgfQorCisgICAgRVhQ
RUNUX0VRKDJ1LCBkZWNvZGVyLT5mcmFtZUNvdW50KCkpOworCisgICAgZGVjb2Rlci0+ZnJhbWVC
dWZmZXJBdEluZGV4KDApOworICAgIGRlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgxKTsKKyAg
ICBFWFBFQ1RfRVEoY0FuaW1hdGlvbkxvb3BJbmZpbml0ZSwgZGVjb2Rlci0+cmVwZXRpdGlvbkNv
dW50KCkpOworfQorCitURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIHBhcnNlQW5kRGVjb2RlQnl0
ZUJ5Qnl0ZSkKK3sKKyAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGFkb3B0UHRy
KG5ldyBHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlwbGllZCwg
SW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkpKTsKKworICAgIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSByZWFkRmlsZSgiL0xheW91dFRlc3RzL2Zhc3QvaW1hZ2Vz
L3Jlc291cmNlcy9hbmltYXRlZC1naWYtd2l0aC1vZmZzZXRzLmdpZiIpOworICAgIEFTU0VSVF9U
UlVFKGRhdGEuZ2V0KCkpOworCisgICAgc2l6ZV90IGZyYW1lQ291bnQgPSAwOworICAgIHNpemVf
dCBmcmFtZXNEZWNvZGVkID0gMDsKKworICAgIC8vIFBhc3MgZGF0YSB0byBkZWNvZGVyIGJ5dGUg
YnkgYnl0ZS4KKyAgICBmb3IgKHVuc2lnbmVkIGxlbmd0aCA9IDE7IGxlbmd0aCA8PSBkYXRhLT5z
aXplKCk7ICsrbGVuZ3RoKSB7CisgICAgICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IHRlbXBEYXRh
ID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YS0+ZGF0YSgpLCBsZW5ndGgpOworICAgICAgICBk
ZWNvZGVyLT5zZXREYXRhKHRlbXBEYXRhLmdldCgpLCBsZW5ndGggPT0gZGF0YS0+c2l6ZSgpKTsK
KworICAgICAgICBFWFBFQ1RfTEUoZnJhbWVDb3VudCwgZGVjb2Rlci0+ZnJhbWVDb3VudCgpKTsK
KyAgICAgICAgZnJhbWVDb3VudCA9IGRlY29kZXItPmZyYW1lQ291bnQoKTsKKworICAgICAgICBJ
bWFnZUZyYW1lKiBmcmFtZSA9IGRlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleChmcmFtZUNvdW50
IC0gMSk7CisgICAgICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFt
ZTo6RnJhbWVDb21wbGV0ZSAmJiBmcmFtZXNEZWNvZGVkIDwgZnJhbWVDb3VudCkKKyAgICAgICAg
ICAgICsrZnJhbWVzRGVjb2RlZDsKKyAgICB9CisKKyAgICBFWFBFQ1RfRVEoNXUsIGRlY29kZXIt
PmZyYW1lQ291bnQoKSk7CisgICAgRVhQRUNUX0VRKDV1LCBmcmFtZXNEZWNvZGVkKTsKKyAgICBF
WFBFQ1RfRVEoY0FuaW1hdGlvbkxvb3BJbmZpbml0ZSwgZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50
KCkpOworfQorCisvLyBTZWNvbmQgZnJhbWUgaW4gdGhlIGZpbGUgaXMgYnJva2VuIGJ1dCB0ZXN0
IHRoYXQgZmlyc3QgZnJhbWUgY2FuIGJlIGRlY29kZWQuCitURVNUKEdJRkltYWdlRGVjb2RlclRl
c3QsIGJyb2tlblNlY29uZEZyYW1lKQoreworICAgIE93blB0cjxHSUZJbWFnZURlY29kZXI+IGRl
Y29kZXIoYWRvcHRQdHIobmV3IEdJRkltYWdlRGVjb2RlcihJbWFnZVNvdXJjZTo6QWxwaGFOb3RQ
cmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKSkp
OworCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9IHJlYWRGaWxlKCIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2Jyb2tlbi5naWYiKTsKKyAgICBBU1NFUlRfVFJVRShk
YXRhLmdldCgpKTsKKyAgICBkZWNvZGVyLT5zZXREYXRhKGRhdGEuZ2V0KCksIHRydWUpOworCisg
ICAgRVhQRUNUX0VRKDF1LCBkZWNvZGVyLT5mcmFtZUNvdW50KCkpOworCisgICAgSW1hZ2VGcmFt
ZSogZnJhbWUgPSBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7CisgICAgRVhQRUNUX0VR
KEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUsIGZyYW1lLT5zdGF0dXMoKSk7CisgICAgRVhQRUNU
X0VRKDE2LCBmcmFtZS0+Z2V0U2tCaXRtYXAoKS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTYs
IGZyYW1lLT5nZXRTa0JpdG1hcCgpLmhlaWdodCgpKTsKKworICAgIGZyYW1lID0gZGVjb2Rlci0+
ZnJhbWVCdWZmZXJBdEluZGV4KDEpOworICAgIEVYUEVDVF9GQUxTRShmcmFtZSk7CisgICAgRVhQ
RUNUX0VRKGNBbmltYXRpb25Mb29wT25jZSwgZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9kYXRhL2Jyb2tlbi5naWYgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEv
YnJva2VuLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lM2E3YzRlYmU3ZDliZWE5ODM5NzVmODI5YTJlZGM4ZTU1
ZDFmNzZkCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA5MDYKemNtWj93YmhFSGI2a3Jmd198Q3c8
a2R9NmFWSjQ2czEqMEpfMHoqTFlLZXdOMk5VKmJHZlVBKzcwVyV7bzJvISZeCnp1eio1QjJTazlm
Mj9Le0wxMmN6PSRBJCQ1bj5tRUZWb3EjV2MoYDNhKj12cisjempYUDg1dSEzPyV3NEdZUCFEYApL
TyZjUlZaUG95UChJdmVBCgpsaXRlcmFsIDAKSGNtVj9kMDAwMDEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>189557</attachid>
            <date>2013-02-21 10:58:13 -0800</date>
            <delta_ts>2013-02-25 07:45:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109662-20130221105433.patch</filename>
            <type>text/plain</type>
            <size>37604</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyODUxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjc1Y2IzYjYxMzgyYTk1
MGY1MTNlYzZmMzE3MTgwNjZmMmRhNWVjZC4uOWZhM2RjMWNlYTRmYmY0ODcyZTUzYmViOWIwM2Ey
OGUxYjFkODhjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEzLTAyLTIwICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgdG8g
cmVhZCBmcm9tIHNvdXJjZSBkYXRhIGRpcmVjdGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk2NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBwYXRjaCB0byBpbXByb3Zl
IEdJRiBpbWFnZSBkZWNvZGluZy4KKworICAgICAgICBHSUZJbWFnZVJlYWRlciBoYXMgYW4gaW50
ZXJuYWwgMjU2IGJ5dGVzIGJ1ZmZlciB0byBzYXZpbmcgaW5jb21pbmcKKyAgICAgICAgYnl0ZXMu
IFRoaXMgbWVjaGFuaXNtIGlzIG91dC1kYXRlZCBiZWNhdXNlIFdlYktpdCBob2xkcyB0aGUgZW50
aXJlCisgICAgICAgIGZpbGUgaW4gbWVtb3J5IGFuZCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGhv
bGQgZGF0YSBpbiBhbiBpbnRlcm1lZGlhdGUKKyAgICAgICAgYnVmZmVyLgorCisgICAgICAgIFRo
aXMgaXMgYWxzbyBhIGJsb2NrZXIgZm9yIGxhdGVyIHdvcmsgdG8gcGFyc2UgYW5kIGRlY29kZSBH
SUYKKyAgICAgICAgaW5jcmVtZW50YWxseS4KKworICAgICAgICBUaGlzIGNoYW5nZSByZW1vdmVk
IHRoZSBpbXRlcm1lZGlhdGUgJ2hvbGQnIGJ1ZmZlciBhbmQgdXNlcyBhbiBpbmRleAorICAgICAg
ICBmb3IgZGF0YSBwb3NpdGlvbiB0byBrZWVwIHRyYWNrIG9mIHBhcnNpbmcgb2YgdGhlIEdJRiBm
aWxlLiBCdWZmZXIgZm9yCisgICAgICAgIGdsb2JhbCBjb2xvcm1hcCBhbmQgbG9jYWwgY29sb3Jt
YXAgYXJlIGFsc28gcmVtb3ZlZCBiZWNhdXNlIHRoZXkgY2FuIGJlCisgICAgICAgIHJlZmVyZW5j
ZWQgZnJvbSB0aGUgZGF0YSBzdHJlYW0uCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgaXMgdGVzdGVk
IGJ5OgorCisgICAgICAgIExheW91dCB0ZXN0cworICAgICAgICBBbGwgdGVzdHMgcGFzc2VkIHVu
ZGVyIGZhc3QvaW1hZ2VzLgorCisgICAgICAgIFVuaXQgdGVzdHMKKyAgICAgICAgQWRkZWQgR0lG
SW1hZ2VEZWNvZGVyVGVzdCBmb3IgQ2hyb21pdW0uCisKKyAgICAgICAgTG9jYWwgdGVzdGluZwor
ICAgICAgICBJIHRlc3RlZCB0aGlzIGltcGxlbWVudGF0aW9uIGFnYWluc3QgYSBzZXQgb2YgNTBr
IEdJRiBpbWFnZXMgYW5kCisgICAgICAgIHRoZXJlJ3Mgbm8gY3Jhc2hlcyBhbmQgcHJvZHVjZXMg
Yml0LWV4YWN0IHJlc3VsdHMgYXMgcHJldmlvdXMgY29kZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R0lGSW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdl
RGVjb2Rlcjo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6
OmhhdmVEZWNvZGVkUm93KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZGVj
b2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFk
ZXIuY3BwOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmRvTFpXKToKKyAgICAgICAgKEdJRklt
YWdlUmVhZGVyOjpkZWNvZGUpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVy
bmFsKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpzZXRSZW1haW5pbmdCeXRlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmg6CisgICAg
ICAgIChHSUZGcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0OjpHSUZGcmFt
ZUNvbnRleHQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0Ojp+R0lGRnJhbWVDb250ZXh0KToK
KyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpHSUZJbWFnZVJlYWRlcik6CisgICAgICAgIChHSUZJ
bWFnZVJlYWRlcjo6fkdJRkltYWdlUmVhZGVyKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpz
ZXREYXRhKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyKToKKyAgICAgICAgKEdJRkltYWdlUmVh
ZGVyOjpnbG9iYWxDb2xvcm1hcCk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6bG9jYWxDb2xv
cm1hcCk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6bG9jYWxDb2xvcm1hcFNpemUpOgorICAg
ICAgICAoR0lGSW1hZ2VSZWFkZXI6OmRhdGEpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmNv
bG9ybWFwKToKKwogMjAxMy0wMi0xMyAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW1Y4XSBHZW5lcmF0ZSB3cmFwcGVyIG1ldGhvZHMgZm9yIGN1c3RvbSBt
ZXRob2RzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmluZGV4IGExYWZhZmJmZTY5N2ZjYmNkYjQ4
OWE0MmEzZGE3MGIwZWUxMDgzMWIuLmNiY2ZhMDg5NTNhZmJkNTk1YWU0NDVmOGVmYTNlZDIwM2Y5
Mjc1NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAKKzIwMTMt
MDItMjAgIEFscGhhIExhbSAgPGhjbGFtQGNocm9taXVtLm9yZz4KKworICAgICAgICBHSUZJbWFn
ZVJlYWRlciB0byByZWFkIGZyb20gc291cmNlIGRhdGEgZGlyZWN0bHkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwOTY2MgorCisgICAgICAgIEFkZGVk
IHRoZSBmb2xsb3dpbmcgdW5pdCB0ZXN0cyB0byB0ZXN0IG5ldyBsb2dpYyBpbiBHSUZJbWFnZURl
Y29kZXI6CisKKyAgICAgICAgR0lGSW1hZ2VEZWNvZGVyVGVzdC5kZWNvZGVUd29GcmFtZXMKKyAg
ICAgICAgVGVzdCB0aGF0IGl0IGNhbiBkZWNvZGUgYSBtdWx0aS1mcmFtZSBHSUYgaW1hZ2UgY29y
cmVjdGx5LgorCisgICAgICAgIEdJRkltYWdlRGVjb2RlclRlc3QucGFyc2VBbmREZWNvZGUKKyAg
ICAgICAgRmlyc3QgcGVyZm9ybSBhIHBhcnNlIG9wZXJhdGlvbiBhbmQgdGhlbiBhIGRlY29kZSBv
cGVyYXRpb24uIEV4cGVjdAorICAgICAgICB0aGF0IHBhcnNlIGFuZCBkZWNvZGUgb3BlcmF0ZXMg
Y29ycmVjdGx5LgorCisgICAgICAgIEdJRkltYWdlRGVjb2RlclRlc3QucGFyc2VCeXRlQnlCeXRl
CisgICAgICAgIFRlc3QgdGhhdCBtdWx0aS1mcmFtZSBHSUYgaW1hZ2UgY2FuIGJlIHBhcnNlZCBj
b3JyZWN0bHkgYnl0ZSBieSBieXRlLgorCisgICAgICAgIEdJRkltYWdlRGVjb2RlclRlc3QucGFy
c2VBbmREZWNvZGVCeXRlQnlCeXRlCisgICAgICAgIFJ1biBhIGxvb3AgdG8gZmVlZCBkZWNvZGVy
IGJ5dGUgYnkgYnl0ZSwgcGVyZm9ybSBhIHBhcnNlIGFuZCB0aGVuCisgICAgICAgIGRlY29kZSBv
cGVyYXRpb24gYW5kIG1ha2Ugc3VyZSBmcmFtZXMgYXJlIGRlY29kZWQgY29ycmVjdGx5LgorCisg
ICAgICAgIEdJRkltYWdlRGVjb2RlclRlc3QuYnJva2VuU2Vjb25kRnJhbWUKKyAgICAgICAgRGVj
b2RlIGEgR0lGIGltYWdlIHdpdGggc2Vjb25kIGZyYW1lIGJyb2tlbi4gRXhwZWN0IHRoYXQgdGhl
IGZpcnN0CisgICAgICAgIGZyYW1lIGNhbiBiZSBkZWNvZGVkIGNvcnJlY3RseS4KKworICAgICAg
ICAqIFdlYktpdC5neXA6CisgICAgICAgICogV2ViS2l0Lmd5cGk6CisgICAgICAgICogdGVzdHMv
R0lGSW1hZ2VEZWNvZGVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0KToKKyAgICAg
ICAgKFdlYktpdDo6cmVhZEZpbGUpOgorICAgICAgICAoV2ViS2l0OjpURVNUKToKKyAgICAgICAg
KiB0ZXN0cy9kYXRhL2Jyb2tlbi5naWY6IEFkZGVkLgorCiAyMDEzLTAyLTEzICBNYXggVnVqb3Zp
YyAgPG12dWpvdmljQGFkb2JlLmNvbT4KIAogICAgICAgICBbQ1NTIEZpbHRlcnNdIFJlZmFjdG9y
IGZpbHRlciBvdXRzZXRzIGludG8gYSBjbGFzcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcApp
bmRleCAwY2IyMjg4NWNlYjNkNmIxNmIyMzVmODE5Yjk4YTI1YjkzYmFmZDhiLi42YTUxNDA5ODQ2
YzAwNTAwMGM5MjcwYTNmY2E1ODk4Mjg5NzVhM2QyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVy
LmNwcApAQCAtMzcsNyArMzcsNiBAQCBHSUZJbWFnZURlY29kZXI6OkdJRkltYWdlRGVjb2RlcihJ
bWFnZVNvdXJjZTo6QWxwaGFPcHRpb24gYWxwaGFPcHRpb24sCiAgICAgOiBJbWFnZURlY29kZXIo
YWxwaGFPcHRpb24sIGdhbW1hQW5kQ29sb3JQcm9maWxlT3B0aW9uKQogICAgICwgbV9hbHJlYWR5
U2Nhbm5lZFRoaXNEYXRhRm9yRnJhbWVDb3VudCh0cnVlKQogICAgICwgbV9yZXBldGl0aW9uQ291
bnQoY0FuaW1hdGlvbkxvb3BPbmNlKQotICAgICwgbV9yZWFkT2Zmc2V0KDApCiB7CiB9CiAKQEAg
LTUxLDYgKzUwLDggQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OnNldERhdGEoU2hhcmVkQnVmZmVy
KiBkYXRhLCBib29sIGFsbERhdGFSZWNlaXZlZCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgSW1h
Z2VEZWNvZGVyOjpzZXREYXRhKGRhdGEsIGFsbERhdGFSZWNlaXZlZCk7CisgICAgaWYgKG1fcmVh
ZGVyKQorICAgICAgICBtX3JlYWRlci0+c2V0RGF0YShkYXRhKTsKIAogICAgIC8vIFdlIG5lZWQg
dG8gcmVzY2FuIHRoZSBmcmFtZSBjb3VudCwgYXMgdGhlIG5ldyBkYXRhIG1heSBoYXZlIGNoYW5n
ZWQgaXQuCiAgICAgbV9hbHJlYWR5U2Nhbm5lZFRoaXNEYXRhRm9yRnJhbWVDb3VudCA9IGZhbHNl
OwpAQCAtODUsNyArODYsOCBAQCBzaXplX3QgR0lGSW1hZ2VEZWNvZGVyOjpmcmFtZUNvdW50KCkK
ICAgICAgICAgLy8gYWxsIHRoZSBkYXRhLiAgTm90ZSB0aGF0IHRoaXMgaXMgbm8gd29yc2UgdGhh
biB3aGF0IEltYWdlSU8gZG9lcyBvbgogICAgICAgICAvLyBNYWMgcmlnaHQgbm93IChpdCBhbHNv
IGNyYXdscyBhbGwgdGhlIGRhdGEgYWdhaW4pLgogICAgICAgICBHSUZJbWFnZVJlYWRlciByZWFk
ZXIoMCk7Ci0gICAgICAgIHJlYWRlci5yZWFkKChjb25zdCB1bnNpZ25lZCBjaGFyKiltX2RhdGEt
PmRhdGEoKSwgbV9kYXRhLT5zaXplKCksIEdJRkZyYW1lQ291bnRRdWVyeSwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KC0xKSk7CisgICAgICAgIHJlYWRlci5zZXREYXRhKG1fZGF0YSk7CisgICAgICAg
IHJlYWRlci5kZWNvZGUoR0lGRnJhbWVDb3VudFF1ZXJ5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
LTEpKTsKICAgICAgICAgbV9hbHJlYWR5U2Nhbm5lZFRoaXNEYXRhRm9yRnJhbWVDb3VudCA9IHRy
dWU7CiAgICAgICAgIG1fZnJhbWVCdWZmZXJDYWNoZS5yZXNpemUocmVhZGVyLmltYWdlc0NvdW50
KCkpOwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHJlYWRlci5pbWFnZXNDb3VudCgpOyAr
K2kpCkBAIC0xOTEsMTEgKzE5Myw2IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpjbGVhckZyYW1l
QnVmZmVyQ2FjaGUoc2l6ZV90IGNsZWFyQmVmb3JlRnJhbWUpCiAgICAgfQogfQogCi12b2lkIEdJ
RkltYWdlRGVjb2Rlcjo6ZGVjb2RpbmdIYWx0ZWQodW5zaWduZWQgYnl0ZXNMZWZ0KQotewotICAg
IG1fcmVhZE9mZnNldCA9IG1fZGF0YS0+c2l6ZSgpIC0gYnl0ZXNMZWZ0OwotfQotCiBib29sIEdJ
RkltYWdlRGVjb2Rlcjo6aGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWdu
ZWQgY2hhciogcm93QnVmZmVyLCB1bnNpZ25lZCBjaGFyKiByb3dFbmQsIHVuc2lnbmVkIHJvd051
bWJlciwgdW5zaWduZWQgcmVwZWF0Q291bnQsIGJvb2wgd3JpdGVUcmFuc3BhcmVudFBpeGVscykK
IHsKICAgICBjb25zdCBHSUZGcmFtZUNvbnRleHQqIGZyYW1lQ29udGV4dCA9IG1fcmVhZGVyLT5m
cmFtZUNvbnRleHQoKTsKQEAgLTIxNiw4ICsyMTMsOCBAQCBib29sIEdJRkltYWdlRGVjb2Rlcjo6
aGF2ZURlY29kZWRSb3codW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgY2hhciogcm93QnVm
ZgogICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGNvbG9yTWFwOwogICAgIHVuc2lnbmVkIGNvbG9y
TWFwU2l6ZTsKICAgICBpZiAoZnJhbWVDb250ZXh0LT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVkKSB7
Ci0gICAgICAgIGNvbG9yTWFwID0gZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFwOwotICAgICAg
ICBjb2xvck1hcFNpemUgPSAodW5zaWduZWQpZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFwU2l6
ZTsKKyAgICAgICAgY29sb3JNYXAgPSBtX3JlYWRlci0+bG9jYWxDb2xvcm1hcChmcmFtZUNvbnRl
eHQpOworICAgICAgICBjb2xvck1hcFNpemUgPSBtX3JlYWRlci0+bG9jYWxDb2xvcm1hcFNpemUo
ZnJhbWVDb250ZXh0KTsKICAgICB9IGVsc2UgewogICAgICAgICBjb2xvck1hcCA9IG1fcmVhZGVy
LT5nbG9iYWxDb2xvcm1hcCgpOwogICAgICAgICBjb2xvck1hcFNpemUgPSBtX3JlYWRlci0+Z2xv
YmFsQ29sb3JtYXBTaXplKCk7CkBAIC0zMTksMTIgKzMxNiwxNCBAQCB2b2lkIEdJRkltYWdlRGVj
b2Rlcjo6ZGVjb2RlKHVuc2lnbmVkIGhhbHRBdEZyYW1lLCBHSUZRdWVyeSBxdWVyeSkKICAgICBp
ZiAoZmFpbGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghbV9yZWFkZXIpCisgICAg
aWYgKCFtX3JlYWRlcikgewogICAgICAgICBtX3JlYWRlciA9IGFkb3B0UHRyKG5ldyBHSUZJbWFn
ZVJlYWRlcih0aGlzKSk7CisgICAgICAgIG1fcmVhZGVyLT5zZXREYXRhKG1fZGF0YSk7CisgICAg
fQogCiAgICAgLy8gSWYgd2UgY291bGRuJ3QgZGVjb2RlIHRoZSBpbWFnZSBidXQgd2UndmUgcmVj
ZWl2ZWQgYWxsIHRoZSBkYXRhLCBkZWNvZGluZwogICAgIC8vIGhhcyBmYWlsZWQuCi0gICAgaWYg
KCFtX3JlYWRlci0+cmVhZCgoY29uc3QgdW5zaWduZWQgY2hhciopbV9kYXRhLT5kYXRhKCkgKyBt
X3JlYWRPZmZzZXQsIG1fZGF0YS0+c2l6ZSgpIC0gbV9yZWFkT2Zmc2V0LCBxdWVyeSwgaGFsdEF0
RnJhbWUpICYmIGlzQWxsRGF0YVJlY2VpdmVkKCkpCisgICAgaWYgKCFtX3JlYWRlci0+ZGVjb2Rl
KHF1ZXJ5LCBoYWx0QXRGcmFtZSkgJiYgaXNBbGxEYXRhUmVjZWl2ZWQoKSkKICAgICAgICAgc2V0
RmFpbGVkKCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAppbmRleCA3YmRhOTk0MzgyOGQ4
NGUyYmI5NGEyNzVjZTViOTEwYWE1Y2QyYjExLi45OTgyYTQ0ZTE4Nzc5Y2NmYWJlM2Y1ODQyNTg0
Y2M4MTBhMTI1MTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCkBAIC01Niw3ICs1Niw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGNsZWFyRnJhbWVCdWZm
ZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSk7CiAKICAgICAgICAgLy8gQ2FsbGJhY2tz
IGZyb20gdGhlIEdJRiByZWFkZXIuCi0gICAgICAgIHZvaWQgZGVjb2RpbmdIYWx0ZWQodW5zaWdu
ZWQgYnl0ZXNMZWZ0KTsKICAgICAgICAgYm9vbCBoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFt
ZUluZGV4LCB1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIGNoYXIqIHJvd0VuZCwg
dW5zaWduZWQgcm93TnVtYmVyLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgYm9vbCB3cml0ZVRyYW5z
cGFyZW50UGl4ZWxzKTsKICAgICAgICAgYm9vbCBmcmFtZUNvbXBsZXRlKHVuc2lnbmVkIGZyYW1l
SW5kZXgsIHVuc2lnbmVkIGZyYW1lRHVyYXRpb24sIEltYWdlRnJhbWU6OkZyYW1lRGlzcG9zYWxN
ZXRob2QgZGlzcG9zYWxNZXRob2QpOwogICAgICAgICB2b2lkIGdpZkNvbXBsZXRlKCk7CkBAIC03
Nyw3ICs3Niw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2N1cnJlbnRC
dWZmZXJTYXdBbHBoYTsKICAgICAgICAgbXV0YWJsZSBpbnQgbV9yZXBldGl0aW9uQ291bnQ7CiAg
ICAgICAgIE93blB0cjxHSUZJbWFnZVJlYWRlcj4gbV9yZWFkZXI7Ci0gICAgICAgIHVuc2lnbmVk
IG1fcmVhZE9mZnNldDsKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VS
ZWFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJ
RkltYWdlUmVhZGVyLmNwcAppbmRleCA2OTlkM2M0N2ZiNDRhZjJjODI0ZmE1OWIwM2I0MmY1MTA2
NjBlZWZiLi5jY2UwNjlmZTJjNDkxNDQwNzgwOGY1YWZjNGYyNTFiM2E0ODQxYzczIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VS
ZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dp
Zi9HSUZJbWFnZVJlYWRlci5jcHAKQEAgLTIwMSw3ICsyMDEsNyBAQCBib29sIEdJRkltYWdlUmVh
ZGVyOjpvdXRwdXRSb3coKQogfQogCiAvLyBQZXJmb3JtIExlbXBlbC1aaXYtV2VsY2ggZGVjb2Rp
bmcuCi1ib29sIEdJRkltYWdlUmVhZGVyOjpkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyICpxKQor
Ym9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciogYmxvY2ssIHNp
emVfdCBieXRlc0luQmxvY2spCiB7CiAgICAgaWYgKCFtX2ZyYW1lQ29udGV4dCkKICAgICAgICAg
cmV0dXJuIHRydWU7CkBAIC0yMTUsNyArMjE1LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9M
WlcoY29uc3QgdW5zaWduZWQgY2hhciAqcSkKICAgICAvLyBiYWNrIGludG8gdGhlIEdJRiBkZWNv
ZGVyIHN0cnVjdHVyZSB3aGVuIHdlIGV4aXQuCiAgICAgaW50IGF2YWlsID0gbV9mcmFtZUNvbnRl
eHQtPmF2YWlsOwogICAgIGludCBiaXRzID0gbV9mcmFtZUNvbnRleHQtPmJpdHM7Ci0gICAgaW50
IGNudCA9IG1fY291bnQ7CisgICAgc2l6ZV90IGNudCA9IGJ5dGVzSW5CbG9jazsKICAgICBpbnQg
Y29kZXNpemUgPSBtX2ZyYW1lQ29udGV4dC0+Y29kZXNpemU7CiAgICAgaW50IGNvZGVtYXNrID0g
bV9mcmFtZUNvbnRleHQtPmNvZGVtYXNrOwogICAgIGludCBvbGRjb2RlID0gbV9mcmFtZUNvbnRl
eHQtPm9sZGNvZGU7CkBAIC0yNDksNyArMjQ5LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZG9M
WlcoY29uc3QgdW5zaWduZWQgY2hhciAqcSkKICAgICAgICAgICAgIGdvdG8gRU5EOyBcCiAgICAg
fSB3aGlsZSAoMCkKIAotICAgIGZvciAoY2ggPSBxOyBjbnQtLSA+IDA7IGNoKyspIHsKKyAgICBm
b3IgKGNoID0gYmxvY2s7IGNudC0tID4gMDsgY2grKykgewogICAgICAgICAvLyBGZWVkIHRoZSBu
ZXh0IGJ5dGUgaW50byB0aGUgZGVjb2RlcidzIDMyLWJpdCBpbnB1dCBidWZmZXIuCiAgICAgICAg
IGRhdHVtICs9ICgoaW50KSAqY2gpIDw8IGJpdHM7CiAgICAgICAgIGJpdHMgKz0gODsKQEAgLTM0
NCw3ICszNDQsNiBAQCBFTkQ6CiAgICAgbV9mcmFtZUNvbnRleHQtPmJpdHMgPSBiaXRzOwogICAg
IG1fZnJhbWVDb250ZXh0LT5jb2Rlc2l6ZSA9IGNvZGVzaXplOwogICAgIG1fZnJhbWVDb250ZXh0
LT5jb2RlbWFzayA9IGNvZGVtYXNrOwotICAgIG1fY291bnQgPSBjbnQ7CiAgICAgbV9mcmFtZUNv
bnRleHQtPm9sZGNvZGUgPSBvbGRjb2RlOwogICAgIG1fZnJhbWVDb250ZXh0LT5maXJzdGNoYXIg
PSBmaXJzdGNoYXI7CiAgICAgbV9mcmFtZUNvbnRleHQtPmRhdHVtID0gZGF0dW07CkBAIC0zNTQs
NjggKzM1MywzOSBAQCBFTkQ6CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgR0lGSW1hZ2VS
ZWFkZXI6OmRlY29kZShHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25lZCBo
YWx0QXRGcmFtZSkKK3sKKyAgICBBU1NFUlQobV9ieXRlc1JlYWQgPD0gbV9kYXRhLT5zaXplKCkp
OworICAgIHJldHVybiBkZWNvZGVJbnRlcm5hbChtX2J5dGVzUmVhZCwgbV9kYXRhLT5zaXplKCkg
LSBtX2J5dGVzUmVhZCwgcXVlcnksIGhhbHRBdEZyYW1lKTsKK30KIAogLy8gUHJvY2VzcyBkYXRh
IGFycml2aW5nIGZyb20gdGhlIHN0cmVhbSBmb3IgdGhlIGdpZiBkZWNvZGVyLgotYm9vbCBHSUZJ
bWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwg
R0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSBxdWVyeSwgdW5zaWduZWQgaGFsdEF0RnJhbWUpCiti
b29sIEdJRkltYWdlUmVhZGVyOjpkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9uLCBz
aXplX3QgbGVuLCBHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25lZCBoYWx0
QXRGcmFtZSkKIHsKICAgICBpZiAoIWxlbikgewogICAgICAgICAvLyBObyBuZXcgZGF0YSBoYXMg
Y29tZSBpbiBzaW5jZSB0aGUgbGFzdCBjYWxsLCBqdXN0IGlnbm9yZSB0aGlzIGNhbGwuCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEgPSBi
dWY7Ci0KLSAgICAvLyBBZGQgd2hhdCB3ZSBoYXZlIHNvIGZhciB0byB0aGUgYmxvY2suCi0gICAg
Ly8gSWYgcHJldmlvdXMgY2FsbCB0byBtZSBsZWZ0IHNvbWV0aGluZyBpbiB0aGUgaG9sZCBmaXJz
dCBjb21wbGV0ZSBjdXJyZW50IGJsb2NrCi0gICAgLy8gb3IgaWYgd2UgYXJlIGZpbGxpbmcgdGhl
IGNvbG9ybWFwcywgZmlyc3QgY29tcGxldGUgdGhlIGNvbG9ybWFwLgotICAgIHVuc2lnbmVkIGNo
YXIqIHAgPSAwOwotICAgIGlmIChtX3N0YXRlID09IEdJRkdsb2JhbENvbG9ybWFwKQotICAgICAg
ICBwID0gbV9nbG9iYWxDb2xvcm1hcDsKLSAgICBlbHNlIGlmIChtX3N0YXRlID09IEdJRkltYWdl
Q29sb3JtYXApCi0gICAgICAgIHAgPSBtX2ZyYW1lQ29udGV4dCA/IG1fZnJhbWVDb250ZXh0LT5s
b2NhbENvbG9ybWFwIDogMDsKLSAgICBlbHNlIGlmIChtX2J5dGVzSW5Ib2xkKQotICAgICAgICBw
ID0gbV9ob2xkOwotICAgIGVsc2UKLSAgICAgICAgcCA9IDA7Ci0KLSAgICBpZiAocCB8fCAobV9z
dGF0ZSA9PSBHSUZHbG9iYWxDb2xvcm1hcCkgfHwgKG1fc3RhdGUgPT0gR0lGSW1hZ2VDb2xvcm1h
cCkpIHsKLSAgICAgICAgLy8gQWRkIHdoYXQgd2UgaGF2ZSBzb2ZhciB0byB0aGUgYmxvY2sKLSAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gbGVuIDwgbV9ieXRlc1RvQ29uc3VtZSA/IGxlbiA6IG1f
Ynl0ZXNUb0NvbnN1bWU7Ci0gICAgICAgIGlmIChwKQotICAgICAgICAgICAgbWVtY3B5KHAgKyBt
X2J5dGVzSW5Ib2xkLCBidWYsIGxlbmd0aCk7Ci0KLSAgICAgICAgaWYgKGxlbmd0aCA8IG1fYnl0
ZXNUb0NvbnN1bWUpIHsKLSAgICAgICAgICAgIC8vIE5vdCBlbm91Z2ggaW4gJ2J1ZicgdG8gY29t
cGxldGUgY3VycmVudCBibG9jaywgZ2V0IG1vcmUKLSAgICAgICAgICAgIG1fYnl0ZXNJbkhvbGQg
Kz0gbGVuZ3RoOwotICAgICAgICAgICAgbV9ieXRlc1RvQ29uc3VtZSAtPSBsZW5ndGg7Ci0gICAg
ICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICAgICAgbV9jbGllbnQtPmRlY29kaW5n
SGFsdGVkKDApOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gUmVzZXQgaG9sZCBidWZmZXIgY291bnQKLSAgICAgICAgbV9ieXRlc0luSG9sZCA9IDA7
CisgICAgaWYgKGxlbiA8IG1fYnl0ZXNUb0NvbnN1bWUpCisgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgICAgICAvLyBQb2ludCAncScgdG8gY29tcGxldGUgYmxvY2sgaW4gaG9sZCAob3IgaW4g
Y29sb3JtYXApCi0gICAgICAgIHEgPSBwOwotICAgIH0KKyAgICAvLyBUaGlzIGxvb3AgcmVhZHMg
YXMgbWFueSBjb21wb25lbnRzIGZyb20gfG1fZGF0YXwgYXMgcG9zc2libGUuCisgICAgLy8gQXQg
dGhlIGJlZ2lubmluZyBvZiBlYWNoIGl0ZXJhdGlvbiwgZGF0YVBvc2l0aW9uIHdpbGwgYmUgYWR2
YW5jZWQgYnkgbV9ieXRlc1RvQ29uc3VtZSB0bworICAgIC8vIHBvaW50IHRvIHRoZSBuZXh0IGNv
bXBvbmVudC4gbGVuIHdpbGwgYmUgZGVjcmVtZW50ZWQgYWNjb3JkaW5nbHkuCisgICAgd2hpbGUg
KGxlbiA+PSBtX2J5dGVzVG9Db25zdW1lKSB7CisgICAgICAgIC8vIEZJWE1FOiBSZW5hbWUgdGhp
cyB2YXJpYWJsZSB0byBjdXJyZW50Q29tcG9uZW50LgorICAgICAgICBjb25zdCB1bnNpZ25lZCBj
aGFyKiBxID0gZGF0YShkYXRhUG9zaXRpb24pOwogCi0gICAgLy8gSW52YXJpYW50OgotICAgIC8v
ICAgICdxJyBpcyBzdGFydCBvZiBjdXJyZW50IHRvIGJlIHByb2Nlc3NlZCBibG9jayAoaG9sZCwg
Y29sb3JtYXAgb3IgYnVmKQotICAgIC8vICAgICdtX2J5dGVzVG9Db25zdW1lJyBpcyBudW1iZXIg
b2YgYnl0ZXMgdG8gY29uc3VtZSBmcm9tICdidWYnCi0gICAgLy8gICAgJ2J1ZicgcG9pbnRzIHRv
IHRoZSBieXRlcyB0byBiZSBjb25zdW1lZCBmcm9tIHRoZSBpbnB1dCBidWZmZXIKLSAgICAvLyAg
ICAnbGVuJyBpcyBudW1iZXIgb2YgYnl0ZXMgbGVmdCBpbiBpbnB1dCBidWZmZXIgZnJvbSBwb3Np
dGlvbiAnYnVmJy4KLSAgICAvLyAgICBBdCBlbnRyYW5jZSBvZiB0aGUgZm9yIGxvb3Agd2lsbCAn
YnVmJyB3aWxsIGJlIG1vdmVkICdtX2J5dGVzVG9Db25zdW1lJwotICAgIC8vICAgIHRvIHBvaW50
IHRvIG5leHQgYnVmZmVyLCAnbGVuJyBpcyBhZGp1c3RlZCBhY2NvcmRpbmdseS4KLSAgICAvLyAg
ICBTbyB0aGF0IG5leHQgcm91bmQgaW4gZm9yIGxvb3AsIHEgZ2V0cyBwb2ludGVkIHRvIHRoZSBu
ZXh0IGJ1ZmZlci4KLSAgICBmb3IgKDtsZW4gPj0gbV9ieXRlc1RvQ29uc3VtZTsgcSA9IGJ1Zikg
ewotICAgICAgICAvLyBFYXQgdGhlIGN1cnJlbnQgYmxvY2sgZnJvbSB0aGUgYnVmZmVyLCBxIGtl
ZXBzIHBvaW50ZWQgYXQgY3VycmVudCBibG9jay4KLSAgICAgICAgYnVmICs9IG1fYnl0ZXNUb0Nv
bnN1bWU7CisgICAgICAgIC8vIE1hcmsgdGhlIGN1cnJlbnQgY29tcG9uZW50IGFzIGNvbnN1bWVk
LiBOb3RlIHRoYXQgcSB3aWxsIHJlbWFpbiBwb2ludGVkIGF0IHRoaXMKKyAgICAgICAgLy8gY29t
cG9uZW50IHVudGlsIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uLgorICAgICAgICBkYXRhUG9zaXRp
b24gKz0gbV9ieXRlc1RvQ29uc3VtZTsKICAgICAgICAgbGVuIC09IG1fYnl0ZXNUb0NvbnN1bWU7
CiAKICAgICAgICAgc3dpdGNoIChtX3N0YXRlKSB7CiAgICAgICAgIGNhc2UgR0lGTFpXOgotICAg
ICAgICAgICAgaWYgKCFkb0xaVyhxKSkKKyAgICAgICAgICAgIC8vIG1fYnl0ZXNUb0NvbnN1bWUg
aXMgdGhlIGN1cnJlbnQgY29tcG9uZW50IHNpemUgYmVjYXVzZSBpdCBoYXNuJ3QgYmVlbiB1cGRh
dGVkLgorICAgICAgICAgICAgaWYgKCFkb0xaVyhxLCBtX2J5dGVzVG9Db25zdW1lKSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIElmIGRvTFpXKCkgZW5jb3VudGVyZWQgYW4gZXJy
b3IsIGl0IGhhcyBhbHJlYWR5IGNhbGxlZCBtX2NsaWVudC0+c2V0RmFpbGVkKCkuCiAgICAgICAg
ICAgICBHRVROKDEsIEdJRlN1YkJsb2NrKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDg4LDIz
ICs0NTgsMTggQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFy
ICpidWYsIHVuc2lnbmVkIGxlbiwgR0lGSW1hZ2VEZWNvZGUKIAogICAgICAgICAgICAgaWYgKChx
WzRdICYgMHg4MCkgJiYgbV9nbG9iYWxDb2xvcm1hcFNpemUgPiAwKSB7IC8qIGdsb2JhbCBtYXAg
Ki8KICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGdsb2JhbCBjb2xvcm1hcAotICAgICAgICAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIHNpemUgPSAzKm1fZ2xvYmFsQ29sb3JtYXBTaXplOwotCi0g
ICAgICAgICAgICAgICAgLy8gTWFsbG9jIHRoZSBjb2xvciBtYXAsIGJ1dCBvbmx5IGlmIHdlJ3Jl
IG5vdCBqdXN0IGNvdW50aW5nIGZyYW1lcy4KLSAgICAgICAgICAgICAgICBpZiAocXVlcnkgIT0g
R0lGSW1hZ2VEZWNvZGVyOjpHSUZGcmFtZUNvdW50UXVlcnkpCi0gICAgICAgICAgICAgICAgICAg
IG1fZ2xvYmFsQ29sb3JtYXAgPSBuZXcgdW5zaWduZWQgY2hhcltzaXplXTsKKyAgICAgICAgICAg
ICAgICBjb25zdCBzaXplX3QgZ2xvYmFsQ29sb3JtYXBCeXRlcyA9IDMgKiBtX2dsb2JhbENvbG9y
bWFwU2l6ZTsKKyAgICAgICAgICAgICAgICBtX2dsb2JhbENvbG9ybWFwUG9zaXRpb24gPSBkYXRh
UG9zaXRpb247CiAKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwgc2l6ZSkgewotICAgICAgICAg
ICAgICAgICAgICAvLyBVc2UgJ2hvbGQnIHBhdHRlcm4gdG8gZ2V0IHRoZSBnbG9iYWwgY29sb3Jt
YXAKLSAgICAgICAgICAgICAgICAgICAgR0VUTihzaXplLCBHSUZHbG9iYWxDb2xvcm1hcCk7Cisg
ICAgICAgICAgICAgICAgaWYgKGxlbiA8IGdsb2JhbENvbG9ybWFwQnl0ZXMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gV2FpdCB1bnRpbCB3ZSBoYXZlIGVub3VnaCBieXRlcyB0byBjb25zdW1l
IHRoZSBlbnRpcmUgY29sb3JtYXAgYXQgb25jZS4KKyAgICAgICAgICAgICAgICAgICAgR0VUTihn
bG9iYWxDb2xvcm1hcEJ5dGVzLCBHSUZHbG9iYWxDb2xvcm1hcCk7CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIC8vIENvcHkg
ZXZlcnl0aGluZyBhbmQgZ28gZGlyZWN0bHkgdG8gR0lGSW1hZ2Vfc3RhcnQuCi0gICAgICAgICAg
ICAgICAgaWYgKG1fZ2xvYmFsQ29sb3JtYXApCi0gICAgICAgICAgICAgICAgICAgIG1lbWNweSht
X2dsb2JhbENvbG9ybWFwLCBidWYsIHNpemUpOwotICAgICAgICAgICAgICAgIGJ1ZiArPSBzaXpl
OwotICAgICAgICAgICAgICAgIGxlbiAtPSBzaXplOworICAgICAgICAgICAgICAgIG1faXNHbG9i
YWxDb2xvcm1hcERlZmluZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGRhdGFQb3NpdGlvbiAr
PSBnbG9iYWxDb2xvcm1hcEJ5dGVzOworICAgICAgICAgICAgICAgIGxlbiAtPSBnbG9iYWxDb2xv
cm1hcEJ5dGVzOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBHRVROKDEsIEdJRkltYWdl
U3RhcnQpOwpAQCAtNTE2LDcgKzQ4MSw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29u
c3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIEdJRkltYWdlRGVjb2RlCiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIEdJRkdsb2JhbENvbG9ybWFwOiB7Ci0gICAgICAgICAgICAv
LyBFdmVyeXRoaW5nIGlzIGFscmVhZHkgY29waWVkIGludG8gbV9nbG9iYWxDb2xvcm1hcAorICAg
ICAgICAgICAgbV9pc0dsb2JhbENvbG9ybWFwRGVmaW5lZCA9IHRydWU7CiAgICAgICAgICAgICBH
RVROKDEsIEdJRkltYWdlU3RhcnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAg
LTU0NSw3ICs1MTAsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVk
IGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURlY29kZQogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBHSUZFeHRlbnNpb246IHsKLSAgICAgICAgICAgIG1fY291bnQgPSBxWzFdOwor
ICAgICAgICAgICAgc2l6ZV90IGJ5dGVzSW5CbG9jayA9IHFbMV07CiAgICAgICAgICAgICBHSUZT
dGF0ZSBlcyA9IEdJRlNraXBCbG9jazsKIAogICAgICAgICAgICAgLy8gVGhlIEdJRiBzcGVjIG1h
bmRhdGVzIGxlbmd0aHMgZm9yIHRocmVlIG9mIHRoZSBleHRlbnNpb25zIGJlbG93LgpAQCAtNTY2
LDE3ICs1MzEsMTcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBj
aGFyICpidWYsIHVuc2lnbmVkIGxlbiwgR0lGSW1hZ2VEZWNvZGUKICAgICAgICAgICAgIHN3aXRj
aCAoKnEpIHsKICAgICAgICAgICAgIGNhc2UgMHhmOToKICAgICAgICAgICAgICAgICBlcyA9IEdJ
RkNvbnRyb2xFeHRlbnNpb247Ci0gICAgICAgICAgICAgICAgbV9jb3VudCA9IHN0ZDo6bWF4KG1f
Y291bnQsIDQpOworICAgICAgICAgICAgICAgIGJ5dGVzSW5CbG9jayA9IHN0ZDo6bWF4KGJ5dGVz
SW5CbG9jaywgc3RhdGljX2Nhc3Q8c2l6ZV90Pig0KSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAKICAgICAgICAgICAgIGNhc2UgMHgwMToKICAgICAgICAgICAgICAgICAvLyBpZ25vcmluZyBw
bGFpbiB0ZXh0IGV4dGVuc2lvbgotICAgICAgICAgICAgICAgIG1fY291bnQgPSBzdGQ6Om1heCht
X2NvdW50LCAxMik7CisgICAgICAgICAgICAgICAgYnl0ZXNJbkJsb2NrID0gc3RkOjptYXgoYnl0
ZXNJbkJsb2NrLCBzdGF0aWNfY2FzdDxzaXplX3Q+KDEyKSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgICAgIGNhc2UgMHhmZjoKICAgICAgICAgICAgICAgICBlcyA9IEdJRkFw
cGxpY2F0aW9uRXh0ZW5zaW9uOwotICAgICAgICAgICAgICAgIG1fY291bnQgPSBzdGQ6Om1heCht
X2NvdW50LCAxMSk7CisgICAgICAgICAgICAgICAgYnl0ZXNJbkJsb2NrID0gc3RkOjptYXgoYnl0
ZXNJbkJsb2NrLCBzdGF0aWNfY2FzdDxzaXplX3Q+KDExKSk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAKICAgICAgICAgICAgIGNhc2UgMHhmZToKQEAgLTU4NCw4ICs1NDksOCBAQCBib29sIEdJ
RkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVu
LCBHSUZJbWFnZURlY29kZQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBpZiAobV9jb3VudCkKLSAgICAgICAgICAgICAgICBHRVROKG1fY291bnQs
IGVzKTsKKyAgICAgICAgICAgIGlmIChieXRlc0luQmxvY2spCisgICAgICAgICAgICAgICAgR0VU
TihieXRlc0luQmxvY2ssIGVzKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBH
RVROKDEsIEdJRkltYWdlU3RhcnQpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC03MjksOCArNjk0
LDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYs
IHVuc2lnbmVkIGxlbiwgR0lGSW1hZ2VEZWNvZGUKICAgICAgICAgICAgIGlmIChxdWVyeSA9PSBH
SUZJbWFnZURlY29kZXI6OkdJRlNpemVRdWVyeSB8fCBoYWx0QXRGcmFtZSA9PSBtX2ltYWdlc0Rl
Y29kZWQpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgZGVjb2RlciBuZWVkcyB0byBzdG9wLiBI
YW5kIGJhY2sgdGhlIG51bWJlciBvZiBieXRlcyB3ZSBjb25zdW1lZCBmcm9tCiAgICAgICAgICAg
ICAgICAgLy8gYnVmZmVyIG1pbnVzIDkgKHRoZSBhbW91bnQgd2UgY29uc3VtZWQgdG8gcmVhZCB0
aGUgaGVhZGVyKS4KLSAgICAgICAgICAgICAgICBpZiAobV9jbGllbnQpCi0gICAgICAgICAgICAg
ICAgICAgIG1fY2xpZW50LT5kZWNvZGluZ0hhbHRlZChsZW4gKyA5KTsKKyAgICAgICAgICAgICAg
ICBzZXRSZW1haW5pbmdCeXRlcyhsZW4gKyA5KTsKICAgICAgICAgICAgICAgICBHRVROKDksIEdJ
RkltYWdlSGVhZGVyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAg
IH0KQEAgLTc5NCwzMyArNzU4LDI0IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3Qg
dW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIEdJRkltYWdlRGVjb2RlCiAgICAgICAg
ICAgICAvLyBoYXMgYSBsb2NhbCBjb2xvcm1hcD8KICAgICAgICAgICAgIGlmIChxWzhdICYgMHg4
MCkgewogICAgICAgICAgICAgICAgIGludCBudW1Db2xvcnMgPSAyIDw8IChxWzhdICYgMHg3KTsK
LSAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBzaXplID0gMyAqIG51bUNvbG9yczsKLSAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICptYXAgPSBtX2ZyYW1lQ29udGV4dCA/IG1fZnJh
bWVDb250ZXh0LT5sb2NhbENvbG9ybWFwIDogMDsKLSAgICAgICAgICAgICAgICBpZiAobV9mcmFt
ZUNvbnRleHQgJiYgKCFtYXAgfHwgKG51bUNvbG9ycyA+IG1fZnJhbWVDb250ZXh0LT5sb2NhbENv
bG9ybWFwU2l6ZSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBbXW1hcDsKLSAgICAg
ICAgICAgICAgICAgICAgbWFwID0gbmV3IHVuc2lnbmVkIGNoYXJbc2l6ZV07Ci0gICAgICAgICAg
ICAgICAgICAgIGlmICghbWFwKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2xp
ZW50ID8gbV9jbGllbnQtPnNldEZhaWxlZCgpIDogZmFsc2U7Ci0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBsb2NhbENvbG9ybWFwQnl0ZXMgPSAzICogbnVt
Q29sb3JzOwogCiAgICAgICAgICAgICAgICAgLy8gU3dpdGNoIHRvIHRoZSBuZXcgbG9jYWwgcGFs
ZXR0ZSBhZnRlciBpdCBsb2FkcwogICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCkg
ewotICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+bG9jYWxDb2xvcm1hcCA9IG1h
cDsKKyAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXBQb3Np
dGlvbiA9IGRhdGFQb3NpdGlvbjsKICAgICAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQt
PmxvY2FsQ29sb3JtYXBTaXplID0gbnVtQ29sb3JzOwotICAgICAgICAgICAgICAgICAgICBtX2Zy
YW1lQ29udGV4dC0+aXNMb2NhbENvbG9ybWFwRGVmaW5lZCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICAgICAgaWYgKGxlbiA8IHNpemUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gVXNlICdob2xkJyBwYXR0ZXJuIHRvIGdldCB0aGUgaW1hZ2UgY29sb3JtYXAKLSAg
ICAgICAgICAgICAgICAgICAgR0VUTihzaXplLCBHSUZJbWFnZUNvbG9ybWFwKTsKKyAgICAgICAg
ICAgICAgICBpZiAobGVuIDwgbG9jYWxDb2xvcm1hcEJ5dGVzKSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFdhaXQgdW50aWwgd2UgaGF2ZSBlbm91Z2ggYnl0ZXMgdG8gY29uc3VtZSB0aGUgZW50
aXJlIGNvbG9ybWFwIGF0IG9uY2UuCisgICAgICAgICAgICAgICAgICAgIEdFVE4obG9jYWxDb2xv
cm1hcEJ5dGVzLCBHSUZJbWFnZUNvbG9ybWFwKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgLy8gQ29weSBldmVyeXRoaW5n
IGFuZCBkaXJlY3RseSBnbyB0byBHSUZMWldTdGFydAogICAgICAgICAgICAgICAgIGlmIChtX2Zy
YW1lQ29udGV4dCkKLSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KG1fZnJhbWVDb250ZXh0LT5s
b2NhbENvbG9ybWFwLCBidWYsIHNpemUpOwotICAgICAgICAgICAgICAgIGJ1ZiArPSBzaXplOwot
ICAgICAgICAgICAgICAgIGxlbiAtPSBzaXplOworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1l
Q29udGV4dC0+aXNMb2NhbENvbG9ybWFwRGVmaW5lZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ZGF0YVBvc2l0aW9uICs9IGxvY2FsQ29sb3JtYXBCeXRlczsKKyAgICAgICAgICAgICAgICBsZW4g
LT0gbG9jYWxDb2xvcm1hcEJ5dGVzOwogICAgICAgICAgICAgfSBlbHNlIGlmIChtX2ZyYW1lQ29u
dGV4dCkgewogICAgICAgICAgICAgICAgIC8vIFN3aXRjaCBiYWNrIHRvIHRoZSBnbG9iYWwgcGFs
ZXR0ZQogICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc0xvY2FsQ29sb3JtYXBEZWZp
bmVkID0gZmFsc2U7CkBAIC04MzAsMjEgKzc4NSwyMyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpy
ZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURlY29k
ZQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBHSUZJbWFnZUNvbG9ybWFwOiB7Ci0gICAgICAg
ICAgICAvLyBFdmVyeXRoaW5nIGlzIGFscmVhZHkgY29waWVkIGludG8gbG9jYWxDb2xvcm1hcAor
ICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0KQorICAgICAgICAgICAgICAgIG1fZnJhbWVD
b250ZXh0LT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVkID0gdHJ1ZTsKICAgICAgICAgICAgIEdFVE4o
MSwgR0lGTFpXU3RhcnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAg
ICBjYXNlIEdJRlN1YkJsb2NrOiB7CiAgICAgICAgICAgICAvLyBTdGlsbCB3b3JraW5nIG9uIHRo
ZSBzYW1lIGltYWdlOiBQcm9jZXNzIG5leHQgTFpXIGRhdGEgYmxvY2suCi0gICAgICAgICAgICBp
ZiAoKG1fY291bnQgPSAqcSkpIHsKKyAgICAgICAgICAgIGNvbnN0IHNpemVfdCBieXRlc0luQmxv
Y2sgPSAqcTsKKyAgICAgICAgICAgIGlmIChieXRlc0luQmxvY2spIHsKICAgICAgICAgICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhlcmUgYXJlIHN0aWxsIHJvd3MgbGVmdC4gSWYgdGhlIEdJRiBkYXRh
CiAgICAgICAgICAgICAgICAgLy8gaXMgY29ycnVwdCwgd2UgbWF5IG5vdCBnZXQgYW4gZXhwbGlj
aXQgdGVybWluYXRvci4KICAgICAgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQgJiYgIW1f
ZnJhbWVDb250ZXh0LT5yb3dzUmVtYWluaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRo
aXMgaXMgYW4gaWxsZWdhbCBHSUYsIGJ1dCB3ZSByZW1haW4gdG9sZXJhbnQuCiAgICAgICAgICAg
ICAgICAgICAgIEdFVE4oMSwgR0lGU3ViQmxvY2spOwogICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICBHRVROKG1fY291bnQsIEdJRkxaVyk7CisgICAgICAgICAgICAgICAgR0VUTihi
eXRlc0luQmxvY2ssIEdJRkxaVyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIC8vIFNlZSBpZiB0aGVyZSBhcmUgYW55IG1vcmUgaW1hZ2VzIGluIHRoaXMgc2VxdWVuY2Uu
CiAgICAgICAgICAgICAgICAgbV9pbWFnZXNEZWNvZGVkKys7CkBAIC04NzcsMjMgKzgzNCwxMiBA
QCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5z
aWduZWQgbGVuLCBHSUZJbWFnZURlY29kZQogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gQ29w
eSB0aGUgbGVmdG92ZXIgaW50byBtX2ZyYW1lQ29udGV4dC0+bV9ob2xkCi0gICAgbV9ieXRlc0lu
SG9sZCA9IGxlbjsKLSAgICBpZiAobGVuKSB7Ci0gICAgICAgIC8vIEFkZCB3aGF0IHdlIGhhdmUg
c29mYXIgdG8gdGhlIGJsb2NrCi0gICAgICAgIHVuc2lnbmVkIGNoYXIqIHA7Ci0gICAgICAgIGlm
IChtX3N0YXRlID09IEdJRkdsb2JhbENvbG9ybWFwKQotICAgICAgICAgICAgcCA9IG1fZ2xvYmFs
Q29sb3JtYXA7Ci0gICAgICAgIGVsc2UgaWYgKG1fc3RhdGUgPT0gR0lGSW1hZ2VDb2xvcm1hcCkK
LSAgICAgICAgICAgIHAgPSBtX2ZyYW1lQ29udGV4dCA/IG1fZnJhbWVDb250ZXh0LT5sb2NhbENv
bG9ybWFwIDogMDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcCA9IG1faG9sZDsKLSAgICAg
ICAgaWYgKHApCi0gICAgICAgICAgICBtZW1jcHkocCwgYnVmLCBsZW4pOwotICAgICAgICBtX2J5
dGVzVG9Db25zdW1lIC09IGxlbjsKLSAgICB9Ci0KLSAgICBpZiAobV9jbGllbnQpCi0gICAgICAg
IG1fY2xpZW50LT5kZWNvZGluZ0hhbHRlZCgwKTsKKyAgICBzZXRSZW1haW5pbmdCeXRlcyhsZW4p
OwogICAgIHJldHVybiBmYWxzZTsKIH0KKwordm9pZCBHSUZJbWFnZVJlYWRlcjo6c2V0UmVtYWlu
aW5nQnl0ZXMoc2l6ZV90IHJlbWFpbmluZ0J5dGVzKQoreworICAgIEFTU0VSVChyZW1haW5pbmdC
eXRlcyA8PSBtX2RhdGEtPnNpemUoKSk7CisgICAgbV9ieXRlc1JlYWQgPSBtX2RhdGEtPnNpemUo
KSAtIHJlbWFpbmluZ0J5dGVzOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaAppbmRleCBjMDgyOTE4
YzQzMTY2YjM4MDI5ZWJkZjRmMjRjZjM0ZGU2OWQ3NDliLi5jMmUzM2UxNzIzOGM0Y2E4YmJmMDE4
NzBjNjYxYWY1YTc3YzE5MGRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaApAQCAtNDEsMTEgKzQx
LDEyIEBACiAvLyBEZWZpbmUgb3Vyc2VsdmVzIGFzIHRoZSBjbGllbnRQdHIuICBNb3ppbGxhIGp1
c3QgaGFja2VkIHRoZWlyIEMrKyBjYWxsYmFjayBjbGFzcyBpbnRvIHRoaXMgb2xkIEMgZGVjb2Rl
ciwKIC8vIHNvIHdlIHdpbGwgdG9vLgogI2luY2x1ZGUgIkdJRkltYWdlRGVjb2Rlci5oIgorI2lu
Y2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogCiAjZGVmaW5lIE1BWF9MWldfQklUUyAgICAgICAgICAx
MgogI2RlZmluZSBNQVhfQklUUyAgICAgICAgICAgIDQwOTcgLyogMl5NQVhfTFpXX0JJVFMrMSAq
LwogI2RlZmluZSBNQVhfQ09MT1JTICAgICAgICAgICAyNTYKLSNkZWZpbmUgTUFYX0hPTERfU0la
RSAgICAgICAgMjU2CisjZGVmaW5lIEdJRl9DT0xPUlMgICAgICAgICAgICAgMwogCiBjb25zdCBp
bnQgY0xvb3BDb3VudE5vdFNlZW4gPSAtMjsKIApAQCAtMTAzLDcgKzEwNCw3IEBAIHB1YmxpYzoK
ICAgICB1bnNpZ25lZCBoZWlnaHQ7CiAgICAgaW50IHRwaXhlbDsgLy8gSW5kZXggb2YgdHJhbnNw
YXJlbnQgcGl4ZWwuCiAgICAgV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhv
ZCBkaXNwb3NhbE1ldGhvZDsgLy8gUmVzdG9yZSB0byBiYWNrZ3JvdW5kLCBsZWF2ZSBpbiBwbGFj
ZSwgZXRjLgotICAgIHVuc2lnbmVkIGNoYXIgKmxvY2FsQ29sb3JtYXA7IC8vIFBlci1pbWFnZSBj
b2xvcm1hcC4KKyAgICBzaXplX3QgbG9jYWxDb2xvcm1hcFBvc2l0aW9uOyAvLyBQZXItaW1hZ2Ug
Y29sb3JtYXAuCiAgICAgaW50IGxvY2FsQ29sb3JtYXBTaXplOyAvLyBTaXplIG9mIGxvY2FsIGNv
bG9ybWFwIGFycmF5LgogICAgIAogICAgIGJvb2wgaXNMb2NhbENvbG9ybWFwRGVmaW5lZCA6IDE7
CkBAIC0xNDAsNyArMTQxLDcgQEAgcHVibGljOgogICAgICAgICAsIGhlaWdodCgwKQogICAgICAg
ICAsIHRwaXhlbCgwKQogICAgICAgICAsIGRpc3Bvc2FsTWV0aG9kKFdlYkNvcmU6OkltYWdlRnJh
bWU6OkRpc3Bvc2VOb3RTcGVjaWZpZWQpCi0gICAgICAgICwgbG9jYWxDb2xvcm1hcCgwKQorICAg
ICAgICAsIGxvY2FsQ29sb3JtYXBQb3NpdGlvbigwKQogICAgICAgICAsIGxvY2FsQ29sb3JtYXBT
aXplKDApCiAgICAgICAgICwgaXNMb2NhbENvbG9ybWFwRGVmaW5lZChmYWxzZSkKICAgICAgICAg
LCBwcm9ncmVzc2l2ZURpc3BsYXkoZmFsc2UpCkBAIC0xNTYsNyArMTU3LDYgQEAgcHVibGljOgog
ICAgIH5HSUZGcmFtZUNvbnRleHQoKQogICAgIHsKICAgICAgICAgZGVsZXRlIFtdIHJvd2J1ZjsK
LSAgICAgICAgZGVsZXRlIFtdIGxvY2FsQ29sb3JtYXA7CiAgICAgICAgIGRlbGV0ZSBbXSBwcmVm
aXg7CiAgICAgICAgIGRlbGV0ZSBbXSBzdWZmaXg7CiAgICAgICAgIGRlbGV0ZSBbXSBzdGFjazsK
QEAgLTE2OSw2NiArMTY5LDg3IEBAIHB1YmxpYzoKICAgICBHSUZJbWFnZVJlYWRlcihXZWJDb3Jl
OjpHSUZJbWFnZURlY29kZXIqIGNsaWVudCA9IDApCiAgICAgICAgIDogbV9jbGllbnQoY2xpZW50
KQogICAgICAgICAsIG1fc3RhdGUoR0lGVHlwZSkKLSAgICAgICAgLCBtX2J5dGVzVG9Db25zdW1l
KDYpCi0gICAgICAgICwgbV9ieXRlc0luSG9sZCgwKQotICAgICAgICAsIG1fZ2xvYmFsQ29sb3Jt
YXAoMCkKKyAgICAgICAgLCBtX2J5dGVzVG9Db25zdW1lKDYpIC8vIE51bWJlciBvZiBieXRlcyBm
b3IgR0lGIHR5cGUsIGVpdGhlciAiR0lGODdhIiBvciAiR0lGODlhIi4KKyAgICAgICAgLCBtX2J5
dGVzUmVhZCgwKQogICAgICAgICAsIG1fc2NyZWVuQmdjb2xvcigwKQogICAgICAgICAsIG1fdmVy
c2lvbigwKQogICAgICAgICAsIG1fc2NyZWVuV2lkdGgoMCkKICAgICAgICAgLCBtX3NjcmVlbkhl
aWdodCgwKQorICAgICAgICAsIG1faXNHbG9iYWxDb2xvcm1hcERlZmluZWQoZmFsc2UpCisgICAg
ICAgICwgbV9nbG9iYWxDb2xvcm1hcFBvc2l0aW9uKDApCiAgICAgICAgICwgbV9nbG9iYWxDb2xv
cm1hcFNpemUoMCkKICAgICAgICAgLCBtX2ltYWdlc0RlY29kZWQoMCkKICAgICAgICAgLCBtX2lt
YWdlc0NvdW50KDApCiAgICAgICAgICwgbV9sb29wQ291bnQoY0xvb3BDb3VudE5vdFNlZW4pCi0g
ICAgICAgICwgbV9jb3VudCgwKQogICAgICAgICAsIG1fZnJhbWVDb250ZXh0KDApCiAgICAgewog
ICAgIH0KIAogICAgIH5HSUZJbWFnZVJlYWRlcigpCiAgICAgewotICAgICAgICBkZWxldGUgW10g
bV9nbG9iYWxDb2xvcm1hcDsKLSAgICAgICAgbV9nbG9iYWxDb2xvcm1hcCA9IDA7Ci0KICAgICAg
ICAgZGVsZXRlIG1fZnJhbWVDb250ZXh0OwogICAgICAgICBtX2ZyYW1lQ29udGV4dCA9IDA7CiAg
ICAgfQogCi0gICAgYm9vbCByZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGJ1ZiwgdW5zaWduZWQg
bnVtYnl0ZXMsIFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgPSBXZWJDb3JlOjpH
SUZJbWFnZURlY29kZXI6OkdJRkZ1bGxRdWVyeSwgdW5zaWduZWQgaGFsdEF0RnJhbWUgPSAtMSk7
CisgICAgdm9pZCBzZXREYXRhKFBhc3NSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVyPiBkYXRh
KSB7IG1fZGF0YSA9IGRhdGE7IH0KKyAgICBib29sIGRlY29kZShXZWJDb3JlOjpHSUZJbWFnZURl
Y29kZXI6OkdJRlF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSk7CiAKICAgICBpbnQgaW1hZ2Vz
Q291bnQoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlc0NvdW50OyB9CiAgICAgaW50IGxvb3BDb3Vu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fbG9vcENvdW50OyB9Ci0gICAgdW5zaWduZWQgY2hhciogZ2xv
YmFsQ29sb3JtYXAoKSBjb25zdCB7IHJldHVybiBtX2dsb2JhbENvbG9ybWFwOyB9Ci0gICAgaW50
IGdsb2JhbENvbG9ybWFwU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsQ29sb3JtYXBTaXpl
OyB9CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBnbG9iYWxDb2xvcm1hcCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9pc0dsb2JhbENvbG9ybWFwRGVmaW5lZCA/IGRhdGEobV9n
bG9iYWxDb2xvcm1hcFBvc2l0aW9uKSA6IDA7CisgICAgfQorICAgIGludCBnbG9iYWxDb2xvcm1h
cFNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faXNHbG9iYWxDb2xvcm1hcERl
ZmluZWQgPyBtX2dsb2JhbENvbG9ybWFwU2l6ZSA6IDA7CisgICAgfQorCisgICAgY29uc3QgdW5z
aWduZWQgY2hhciogbG9jYWxDb2xvcm1hcChjb25zdCBHSUZGcmFtZUNvbnRleHQqIGZyYW1lKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyYW1lLT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVk
ID8gZGF0YShmcmFtZS0+bG9jYWxDb2xvcm1hcFBvc2l0aW9uKSA6IDA7CisgICAgfQorICAgIGlu
dCBsb2NhbENvbG9ybWFwU2l6ZShjb25zdCBHSUZGcmFtZUNvbnRleHQqIGZyYW1lKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGZyYW1lLT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVkID8gZnJh
bWUtPmxvY2FsQ29sb3JtYXBTaXplIDogMDsKKyAgICB9CisKICAgICBjb25zdCBHSUZGcmFtZUNv
bnRleHQqIGZyYW1lQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVDb250ZXh0OyB9CiAK
IHByaXZhdGU6CisgICAgYm9vbCBkZWNvZGVJbnRlcm5hbChzaXplX3QgZGF0YVBvc2l0aW9uLCBz
aXplX3QgbGVuLCBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5LCB1bnNpZ25lZCBo
YWx0QXRGcmFtZSk7CiAgICAgYm9vbCBvdXRwdXRSb3coKTsKLSAgICBib29sIGRvTFpXKGNvbnN0
IHVuc2lnbmVkIGNoYXIgKnEpOworICAgIGJvb2wgZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciAq
LCBzaXplX3QpOworICAgIHZvaWQgc2V0UmVtYWluaW5nQnl0ZXMoc2l6ZV90KTsKKworICAgIGNv
bnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEoc2l6ZV90IGRhdGFQb3NpdGlvbikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IHVuc2lnbmVkIGNoYXIqPiht
X2RhdGEtPmRhdGEoKSkgKyBkYXRhUG9zaXRpb247CisgICAgfQogCiAgICAgV2ViQ29yZTo6R0lG
SW1hZ2VEZWNvZGVyKiBtX2NsaWVudDsKIAogICAgIC8vIFBhcnNpbmcgc3RhdGUgbWFjaGluZS4K
ICAgICBHSUZTdGF0ZSBtX3N0YXRlOyAvLyBDdXJyZW50IGRlY29kZXIgbWFzdGVyIHN0YXRlLgot
ICAgIHVuc2lnbmVkIG1fYnl0ZXNUb0NvbnN1bWU7IC8vIE51bWJlciBvZiBieXRlcyB0byBhY2N1
bXVsYXRlLgotICAgIHVuc2lnbmVkIG1fYnl0ZXNJbkhvbGQ7IC8vIGJ5dGVzIGFjY3VtdWxhdGVk
IHNvIGZhci4KLSAgICB1bnNpZ25lZCBjaGFyIG1faG9sZFtNQVhfSE9MRF9TSVpFXTsgLy8gQWNj
dW11bGF0aW9uIGJ1ZmZlci4KLSAgICB1bnNpZ25lZCBjaGFyKiBtX2dsb2JhbENvbG9ybWFwOyAv
LyAoMyogTUFYX0NPTE9SUyBpbiBzaXplKSBEZWZhdWx0IGNvbG9ybWFwIGlmIGxvY2FsIG5vdCBz
dXBwbGllZCwgMyBieXRlcyBmb3IgZWFjaCBjb2xvci4KKyAgICBzaXplX3QgbV9ieXRlc1RvQ29u
c3VtZTsgLy8gTnVtYmVyIG9mIGJ5dGVzIHRvIGNvbnN1bWUgZm9yIG5leHQgc3RhZ2Ugb2YgcGFy
c2luZy4KKyAgICBzaXplX3QgbV9ieXRlc1JlYWQ7IC8vIE51bWJlciBvZiBieXRlcyBwcm9jZXNz
ZWQuCiAgICAgCiAgICAgLy8gR2xvYmFsIChtdWx0aS1pbWFnZSkgc3RhdGUuCiAgICAgaW50IG1f
c2NyZWVuQmdjb2xvcjsgLy8gTG9naWNhbCBzY3JlZW4gYmFja2dyb3VuZCBjb2xvci4KICAgICBp
bnQgbV92ZXJzaW9uOyAvLyBFaXRoZXIgODkgZm9yIEdJRjg5IG9yIDg3IGZvciBHSUY4Ny4KICAg
ICB1bnNpZ25lZCBtX3NjcmVlbldpZHRoOyAvLyBMb2dpY2FsIHNjcmVlbiB3aWR0aCAmIGhlaWdo
dC4KICAgICB1bnNpZ25lZCBtX3NjcmVlbkhlaWdodDsKKyAgICBib29sIG1faXNHbG9iYWxDb2xv
cm1hcERlZmluZWQ7CisgICAgc2l6ZV90IG1fZ2xvYmFsQ29sb3JtYXBQb3NpdGlvbjsgLy8gKDMq
IE1BWF9DT0xPUlMgaW4gc2l6ZSkgRGVmYXVsdCBjb2xvcm1hcCBpZiBsb2NhbCBub3Qgc3VwcGxp
ZWQsIDMgYnl0ZXMgZm9yIGVhY2ggY29sb3IuCiAgICAgaW50IG1fZ2xvYmFsQ29sb3JtYXBTaXpl
OyAvLyBTaXplIG9mIGdsb2JhbCBjb2xvcm1hcCBhcnJheS4KICAgICB1bnNpZ25lZCBtX2ltYWdl
c0RlY29kZWQ7IC8vIENvdW50cyBjb21wbGV0ZWQgZnJhbWVzIGZvciBhbmltYXRlZCBHSUZzLgog
ICAgIGludCBtX2ltYWdlc0NvdW50OyAvLyBDb3VudGVkIGFsbCBmcmFtZXMgc2VlbiBzbyBmYXIg
KGluY2x1ZGluZyBpbmNvbXBsZXRlIGZyYW1lcykuCiAgICAgaW50IG1fbG9vcENvdW50OyAvLyBO
ZXRzY2FwZSBzcGVjaWZpYyBleHRlbnNpb24gYmxvY2sgdG8gY29udHJvbCB0aGUgbnVtYmVyIG9m
IGFuaW1hdGlvbiBsb29wcyBhIEdJRiByZW5kZXJzLgogICAgIAotICAgIC8vIE5vdCByZWFsbHkg
Z2xvYmFsLCBidXQgY29udmVuaWVudCB0byBsb2NhdGUgaGVyZS4KLSAgICBpbnQgbV9jb3VudDsg
Ly8gUmVtYWluaW5nICMgYnl0ZXMgaW4gc3ViLWJsb2NrLgotICAgIAogICAgIEdJRkZyYW1lQ29u
dGV4dCogbV9mcmFtZUNvbnRleHQ7CisKKyAgICBSZWZQdHI8V2ViQ29yZTo6U2hhcmVkQnVmZmVy
PiBtX2RhdGE7CiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vV2ViS2l0Lmd5cCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCBh
YTE0MTVmNDI3MWM5Mjk5ZTk1ZDBmMzk3M2MzYTUwYzZiZTFjN2ZlLi5mMDRlYmFkN2ZiMTYyNWQy
ZGU3NzQ1MjQ3NWE3ZWEwNDk4YThlY2NmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBA
IC02NDEsNiArNjQxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBXZSBz
aG91bGQgbm90IGluY2x1ZGUgZmlsZXMgZGVwZW5kaW5nIG9uIHdlYmtpdF9zdXBwb3J0LgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoZXNlIHRlc3RzIGRlcGVuZCBvbiB3ZWJr
aXRfc3VwcG9ydCBhbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmdW5jdGlv
bnMgZGVmaW5lZCBvbmx5IGluICFXRUJLSVRfSU1QTEVNRU5UQVRJT04uCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICd0ZXN0cy9HSUZJbWFnZURlY29kZXJUZXN0LmNwcCcsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0ZXN0cy9MZXZlbERCVGVzdC5jcHAnLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J2NvbmRpdGlvbnMnOiBbCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXBpIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwaQppbmRleCBkNTgxMTI4
OGNmZTRjZjMzN2FlNDc2YTNkNTcyODdhMWExMzMxYzI5Li4zYjBhN2E1M2U1ODIzYzcxY2JlNjgy
YjU3MDc0ZGY1NmYxNDEwYzFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXBpCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKQEAgLTcy
LDYgKzcyLDcgQEAKICAgICAgICAgICAgICd0ZXN0cy9GcmFtZUxvYWRlckNsaWVudEltcGxUZXN0
LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvRnJhbWVUZXN0SGVscGVycy5jcHAnLAogICAgICAg
ICAgICAgJ3Rlc3RzL0ZyYW1lVGVzdEhlbHBlcnMuaCcsCisgICAgICAgICAgICAndGVzdHMvR0lG
SW1hZ2VEZWNvZGVyVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0dyYXBoaWNzTGF5ZXJD
aHJvbWl1bVRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JREJBYm9ydE9uQ29ycnVwdFRl
c3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9JREJCaW5kaW5nVXRpbGl0aWVzVGVzdC5jcHAn
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9HSUZJbWFnZURlY29k
ZXJUZXN0LmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR0lGSW1hZ2VEZWNvZGVy
VGVzdC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNGQ1NDdlOWFkY2MwMDBhYTI5MTRmZDBkYmY3Y2I0ZmMyNTNj
ZWU5NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR0lG
SW1hZ2VEZWNvZGVyVGVzdC5jcHAKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpbmNsdWRlICJHSUZJbWFnZURlY29kZXIuaCIKKworI2luY2x1ZGUgIkZpbGVTeXN0ZW0u
aCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKyNpbmNsdWRlIDxndGVzdC9ndGVzdC5oPgor
I2luY2x1ZGUgPHB1YmxpYy9XZWJEYXRhLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlNpemUuaD4K
KyNpbmNsdWRlIDx3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oPgorI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25hbWVzcGFjZSB7CisKK3N0
YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gcmVhZEZpbGUoY29uc3QgY2hhciogZmlsZU5h
bWUpCit7CisgICAgU3RyaW5nIGZpbGVQYXRoID0gd2Via2l0X3N1cHBvcnQ6OkdldFdlYktpdFJv
b3REaXIoKTsKKyAgICBmaWxlUGF0aC5hcHBlbmQoZmlsZU5hbWUpOworCisgICAgbG9uZyBsb25n
IGZpbGVTaXplOworICAgIGlmICghZ2V0RmlsZVNpemUoZmlsZVBhdGgsIGZpbGVTaXplKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlID0gb3BlbkZp
bGUoZmlsZVBhdGgsIE9wZW5Gb3JSZWFkKTsKKyAgICBpbnQgZmlsZUxlbmd0aCA9IHN0YXRpY19j
YXN0PGludD4oZmlsZVNpemUpOworICAgIFZlY3RvcjxjaGFyPiBidWZmZXIoZmlsZUxlbmd0aCk7
CisgICAgcmVhZEZyb21GaWxlKGhhbmRsZSwgYnVmZmVyLmRhdGEoKSwgZmlsZUxlbmd0aCk7Cisg
ICAgY2xvc2VGaWxlKGhhbmRsZSk7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0
b3IoYnVmZmVyKTsKK30KKworVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBkZWNvZGVUd29GcmFt
ZXMpCit7CisgICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihuZXcg
R0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIEltYWdl
U291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CisKKyAgICBSZWZQdHI8U2hh
cmVkQnVmZmVyPiBkYXRhID0gcmVhZEZpbGUoIi9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9yZXNv
dXJjZXMvYW5pbWF0ZWQuZ2lmIik7CisgICAgQVNTRVJUX1RSVUUoZGF0YS5nZXQoKSk7CisgICAg
ZGVjb2Rlci0+c2V0RGF0YShkYXRhLmdldCgpLCB0cnVlKTsKKyAgICBFWFBFQ1RfRVEoY0FuaW1h
dGlvbkxvb3BPbmNlLCBkZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSk7CisKKyAgICBJbWFnZUZy
YW1lKiBmcmFtZSA9IGRlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKTsKKyAgICBFWFBFQ1Rf
RVEoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSwgZnJhbWUtPnN0YXR1cygpKTsKKyAgICBFWFBF
Q1RfRVEoMTYsIGZyYW1lLT5nZXRTa0JpdG1hcCgpLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgx
NiwgZnJhbWUtPmdldFNrQml0bWFwKCkuaGVpZ2h0KCkpOworCisgICAgZnJhbWUgPSBkZWNvZGVy
LT5mcmFtZUJ1ZmZlckF0SW5kZXgoMSk7CisgICAgRVhQRUNUX0VRKEltYWdlRnJhbWU6OkZyYW1l
Q29tcGxldGUsIGZyYW1lLT5zdGF0dXMoKSk7CisgICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+Z2V0
U2tCaXRtYXAoKS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTYsIGZyYW1lLT5nZXRTa0JpdG1h
cCgpLmhlaWdodCgpKTsKKworICAgIEVYUEVDVF9FUSgydSwgZGVjb2Rlci0+ZnJhbWVDb3VudCgp
KTsKKyAgICBFWFBFQ1RfRVEoY0FuaW1hdGlvbkxvb3BJbmZpbml0ZSwgZGVjb2Rlci0+cmVwZXRp
dGlvbkNvdW50KCkpOworfQorCitURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIHBhcnNlQW5kRGVj
b2RlKQoreworICAgIE93blB0cjxHSUZJbWFnZURlY29kZXI+IGRlY29kZXIoYWRvcHRQdHIobmV3
IEdJRkltYWdlRGVjb2RlcihJbWFnZVNvdXJjZTo6QWxwaGFOb3RQcmVtdWx0aXBsaWVkLCBJbWFn
ZVNvdXJjZTo6R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKSkpOworCisgICAgUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gZGF0YSA9IHJlYWRGaWxlKCIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcmVz
b3VyY2VzL2FuaW1hdGVkLmdpZiIpOworICAgIEFTU0VSVF9UUlVFKGRhdGEuZ2V0KCkpOworICAg
IGRlY29kZXItPnNldERhdGEoZGF0YS5nZXQoKSwgdHJ1ZSk7CisgICAgRVhQRUNUX0VRKGNBbmlt
YXRpb25Mb29wT25jZSwgZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkpOworCisgICAgLy8gVGhp
cyBjYWxsIHdpbGwgcGFyc2UgdGhlIGVudGlyZSBmaWxlLgorICAgIEVYUEVDVF9FUSgydSwgZGVj
b2Rlci0+ZnJhbWVDb3VudCgpKTsKKworICAgIEltYWdlRnJhbWUqIGZyYW1lID0gZGVjb2Rlci0+
ZnJhbWVCdWZmZXJBdEluZGV4KDApOworICAgIEVYUEVDVF9FUShJbWFnZUZyYW1lOjpGcmFtZUNv
bXBsZXRlLCBmcmFtZS0+c3RhdHVzKCkpOworICAgIEVYUEVDVF9FUSgxNiwgZnJhbWUtPmdldFNr
Qml0bWFwKCkud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+Z2V0U2tCaXRtYXAo
KS5oZWlnaHQoKSk7CisKKyAgICBmcmFtZSA9IGRlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgx
KTsKKyAgICBFWFBFQ1RfRVEoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSwgZnJhbWUtPnN0YXR1
cygpKTsKKyAgICBFWFBFQ1RfRVEoMTYsIGZyYW1lLT5nZXRTa0JpdG1hcCgpLndpZHRoKCkpOwor
ICAgIEVYUEVDVF9FUSgxNiwgZnJhbWUtPmdldFNrQml0bWFwKCkuaGVpZ2h0KCkpOworICAgIEVY
UEVDVF9FUShjQW5pbWF0aW9uTG9vcEluZmluaXRlLCBkZWNvZGVyLT5yZXBldGl0aW9uQ291bnQo
KSk7Cit9CisKK1RFU1QoR0lGSW1hZ2VEZWNvZGVyVGVzdCwgcGFyc2VCeXRlQnlCeXRlKQorewor
ICAgIE93blB0cjxHSUZJbWFnZURlY29kZXI+IGRlY29kZXIoYWRvcHRQdHIobmV3IEdJRkltYWdl
RGVjb2RlcihJbWFnZVNvdXJjZTo6QWxwaGFOb3RQcmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6
R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKSkpOworCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gZGF0YSA9IHJlYWRGaWxlKCIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcmVzb3VyY2VzL2Fu
aW1hdGVkLmdpZiIpOworICAgIEFTU0VSVF9UUlVFKGRhdGEuZ2V0KCkpOworCisgICAgc2l6ZV90
IGZyYW1lQ291bnQgPSAwOworCisgICAgLy8gUGFzcyBkYXRhIHRvIGRlY29kZXIgYnl0ZSBieSBi
eXRlLgorICAgIGZvciAodW5zaWduZWQgbGVuZ3RoID0gMTsgbGVuZ3RoIDw9IGRhdGEtPnNpemUo
KTsgKytsZW5ndGgpIHsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdGVtcERhdGEgPSBT
aGFyZWRCdWZmZXI6OmNyZWF0ZShkYXRhLT5kYXRhKCksIGxlbmd0aCk7CisgICAgICAgIGRlY29k
ZXItPnNldERhdGEodGVtcERhdGEuZ2V0KCksIGxlbmd0aCA9PSBkYXRhLT5zaXplKCkpOworCisg
ICAgICAgIEVYUEVDVF9MRShmcmFtZUNvdW50LCBkZWNvZGVyLT5mcmFtZUNvdW50KCkpOworICAg
ICAgICBmcmFtZUNvdW50ID0gZGVjb2Rlci0+ZnJhbWVDb3VudCgpOworICAgIH0KKworICAgIEVY
UEVDVF9FUSgydSwgZGVjb2Rlci0+ZnJhbWVDb3VudCgpKTsKKworICAgIGRlY29kZXItPmZyYW1l
QnVmZmVyQXRJbmRleCgwKTsKKyAgICBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMSk7Cisg
ICAgRVhQRUNUX0VRKGNBbmltYXRpb25Mb29wSW5maW5pdGUsIGRlY29kZXItPnJlcGV0aXRpb25D
b3VudCgpKTsKK30KKworVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBwYXJzZUFuZERlY29kZUJ5
dGVCeUJ5dGUpCit7CisgICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0
cihuZXcgR0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQs
IEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CisKKyAgICBSZWZQ
dHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gcmVhZEZpbGUoIi9MYXlvdXRUZXN0cy9mYXN0L2ltYWdl
cy9yZXNvdXJjZXMvYW5pbWF0ZWQtZ2lmLXdpdGgtb2Zmc2V0cy5naWYiKTsKKyAgICBBU1NFUlRf
VFJVRShkYXRhLmdldCgpKTsKKworICAgIHNpemVfdCBmcmFtZUNvdW50ID0gMDsKKyAgICBzaXpl
X3QgZnJhbWVzRGVjb2RlZCA9IDA7CisKKyAgICAvLyBQYXNzIGRhdGEgdG8gZGVjb2RlciBieXRl
IGJ5IGJ5dGUuCisgICAgZm9yICh1bnNpZ25lZCBsZW5ndGggPSAxOyBsZW5ndGggPD0gZGF0YS0+
c2l6ZSgpOyArK2xlbmd0aCkgeworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiB0ZW1wRGF0
YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEtPmRhdGEoKSwgbGVuZ3RoKTsKKyAgICAgICAg
ZGVjb2Rlci0+c2V0RGF0YSh0ZW1wRGF0YS5nZXQoKSwgbGVuZ3RoID09IGRhdGEtPnNpemUoKSk7
CisKKyAgICAgICAgRVhQRUNUX0xFKGZyYW1lQ291bnQsIGRlY29kZXItPmZyYW1lQ291bnQoKSk7
CisgICAgICAgIGZyYW1lQ291bnQgPSBkZWNvZGVyLT5mcmFtZUNvdW50KCk7CisKKyAgICAgICAg
SW1hZ2VGcmFtZSogZnJhbWUgPSBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoZnJhbWVDb3Vu
dCAtIDEpOworICAgICAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPnN0YXR1cygpID09IEltYWdlRnJh
bWU6OkZyYW1lQ29tcGxldGUgJiYgZnJhbWVzRGVjb2RlZCA8IGZyYW1lQ291bnQpCisgICAgICAg
ICAgICArK2ZyYW1lc0RlY29kZWQ7CisgICAgfQorCisgICAgRVhQRUNUX0VRKDV1LCBkZWNvZGVy
LT5mcmFtZUNvdW50KCkpOworICAgIEVYUEVDVF9FUSg1dSwgZnJhbWVzRGVjb2RlZCk7CisgICAg
RVhQRUNUX0VRKGNBbmltYXRpb25Mb29wSW5maW5pdGUsIGRlY29kZXItPnJlcGV0aXRpb25Db3Vu
dCgpKTsKK30KKworLy8gU2Vjb25kIGZyYW1lIGluIHRoZSBmaWxlIGlzIGJyb2tlbiBidXQgdGVz
dCB0aGF0IGZpcnN0IGZyYW1lIGNhbiBiZSBkZWNvZGVkLgorVEVTVChHSUZJbWFnZURlY29kZXJU
ZXN0LCBicm9rZW5TZWNvbmRGcmFtZSkKK3sKKyAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBk
ZWNvZGVyKGFkb3B0UHRyKG5ldyBHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhTm90
UHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkp
KTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSByZWFkRmlsZSgiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0YS9icm9rZW4uZ2lmIik7CisgICAgQVNTRVJUX1RSVUUo
ZGF0YS5nZXQoKSk7CisgICAgZGVjb2Rlci0+c2V0RGF0YShkYXRhLmdldCgpLCB0cnVlKTsKKwor
ICAgIEVYUEVDVF9FUSgxdSwgZGVjb2Rlci0+ZnJhbWVDb3VudCgpKTsKKworICAgIEltYWdlRnJh
bWUqIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDApOworICAgIEVYUEVDVF9F
UShJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlLCBmcmFtZS0+c3RhdHVzKCkpOworICAgIEVYUEVD
VF9FUSgxNiwgZnJhbWUtPmdldFNrQml0bWFwKCkud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDE2
LCBmcmFtZS0+Z2V0U2tCaXRtYXAoKS5oZWlnaHQoKSk7CisKKyAgICBmcmFtZSA9IGRlY29kZXIt
PmZyYW1lQnVmZmVyQXRJbmRleCgxKTsKKyAgICBFWFBFQ1RfRkFMU0UoZnJhbWUpOworICAgIEVY
UEVDVF9FUShjQW5pbWF0aW9uTG9vcE9uY2UsIGRlY29kZXItPnJlcGV0aXRpb25Db3VudCgpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvZGF0YS9icm9rZW4uZ2lmIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRh
L2Jyb2tlbi5naWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTNhN2M0ZWJlN2Q5YmVhOTgzOTc1ZjgyOWEyZWRjOGU1
NWQxZjc2ZApHSVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgOTA2CnpjbVo/d2JoRUhiNmtyZndffEN3
PGtkfTZhVko0NnMxKjBKXzB6KkxZS2V3TjJOVSpiR2ZVQSs3MFcle28ybyEmXgp6dXoqNUIyU2s5
ZjI/S3tMMTJjej0kQSQkNW4+bUVGVm9xI1djKGAzYSo9dnIrI3pqWFA4NXUhMz8ldzRHWVAhRGAK
S08mY1JWWlBveVAoSXZlQQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190059</attachid>
            <date>2013-02-25 07:45:15 -0800</date>
            <delta_ts>2013-02-25 16:58:42 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-109662-20130225074131.patch</filename>
            <type>text/plain</type>
            <size>37684</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzOTIzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmVlZGZmYTkzY2VjNGU2
MDU4MWQwZTFjODI1ZmU5ODU1ODcxYWM1OS4uMDViNzY4N2YzNmJjZDY0OTY3NWNlYjg3M2MzYzNl
MWRiNjQ1N2JlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEzLTAyLTIwICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgdG8g
cmVhZCBmcm9tIHNvdXJjZSBkYXRhIGRpcmVjdGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk2NjIKKworICAgICAgICBSZXZpZXdlZCBieSBTdGVw
aGVuIFdoaXRlLgorCisgICAgICAgIFRoaXMgaXMgdGhlIGZpcnN0IHBhdGNoIHRvIGltcHJvdmUg
R0lGIGltYWdlIGRlY29kaW5nLgorCisgICAgICAgIEdJRkltYWdlUmVhZGVyIGhhcyBhbiBpbnRl
cm5hbCAyNTYgYnl0ZXMgYnVmZmVyIHRvIHNhdmluZyBpbmNvbWluZworICAgICAgICBieXRlcy4g
VGhpcyBtZWNoYW5pc20gaXMgb3V0LWRhdGVkIGJlY2F1c2UgV2ViS2l0IGhvbGRzIHRoZSBlbnRp
cmUKKyAgICAgICAgZmlsZSBpbiBtZW1vcnkgYW5kIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gaG9s
ZCBkYXRhIGluIGFuIGludGVybWVkaWF0ZQorICAgICAgICBidWZmZXIuCisKKyAgICAgICAgVGhp
cyBpcyBhbHNvIGEgYmxvY2tlciBmb3IgbGF0ZXIgd29yayB0byBwYXJzZSBhbmQgZGVjb2RlIEdJ
RgorICAgICAgICBpbmNyZW1lbnRhbGx5LgorCisgICAgICAgIFRoaXMgY2hhbmdlIHJlbW92ZWQg
dGhlIGltdGVybWVkaWF0ZSAnaG9sZCcgYnVmZmVyIGFuZCB1c2VzIGFuIGluZGV4CisgICAgICAg
IGZvciBkYXRhIHBvc2l0aW9uIHRvIGtlZXAgdHJhY2sgb2YgcGFyc2luZyBvZiB0aGUgR0lGIGZp
bGUuIEJ1ZmZlciBmb3IKKyAgICAgICAgZ2xvYmFsIGNvbG9ybWFwIGFuZCBsb2NhbCBjb2xvcm1h
cCBhcmUgYWxzbyByZW1vdmVkIGJlY2F1c2UgdGhleSBjYW4gYmUKKyAgICAgICAgcmVmZXJlbmNl
ZCBmcm9tIHRoZSBkYXRhIHN0cmVhbS4KKworICAgICAgICBUaGlzIGNoYW5nZSBpcyB0ZXN0ZWQg
Ynk6CisKKyAgICAgICAgTGF5b3V0IHRlc3RzCisgICAgICAgIEFsbCB0ZXN0cyBwYXNzZWQgdW5k
ZXIgZmFzdC9pbWFnZXMuCisKKyAgICAgICAgVW5pdCB0ZXN0cworICAgICAgICBBZGRlZCBHSUZJ
bWFnZURlY29kZXJUZXN0IGZvciBDaHJvbWl1bS4KKworICAgICAgICBMb2NhbCB0ZXN0aW5nCisg
ICAgICAgIEkgdGVzdGVkIHRoaXMgaW1wbGVtZW50YXRpb24gYWdhaW5zdCBhIHNldCBvZiA1MGsg
R0lGIGltYWdlcyBhbmQKKyAgICAgICAgdGhlcmUncyBubyBjcmFzaGVzIGFuZCBwcm9kdWNlcyBi
aXQtZXhhY3QgcmVzdWx0cyBhcyBwcmV2aW91cyBjb2RlLgorCisgICAgICAgICogcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHSUZJbWFnZURlY29kZXI6OnNldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VE
ZWNvZGVyOjpmcmFtZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6
aGF2ZURlY29kZWRSb3cpOgorICAgICAgICAoV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpkZWNv
ZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRl
ci5jcHA6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6ZG9MWlcpOgorICAgICAgICAoR0lGSW1h
Z2VSZWFkZXI6OmRlY29kZSk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlSW50ZXJu
YWwpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OnNldFJlbWFpbmluZ0J5dGVzKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaDoKKyAgICAg
ICAgKEdJRkZyYW1lQ29udGV4dCk6CisgICAgICAgIChHSUZGcmFtZUNvbnRleHQ6OkdJRkZyYW1l
Q29udGV4dCk6CisgICAgICAgIChHSUZGcmFtZUNvbnRleHQ6On5HSUZGcmFtZUNvbnRleHQpOgor
ICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OkdJRkltYWdlUmVhZGVyKToKKyAgICAgICAgKEdJRklt
YWdlUmVhZGVyOjp+R0lGSW1hZ2VSZWFkZXIpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OnNl
dERhdGEpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXIpOgorICAgICAgICAoR0lGSW1hZ2VSZWFk
ZXI6Omdsb2JhbENvbG9ybWFwKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpsb2NhbENvbG9y
bWFwKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpsb2NhbENvbG9ybWFwU2l6ZSk6CisgICAg
ICAgIChHSUZJbWFnZVJlYWRlcjo6ZGF0YSk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6Y29s
b3JtYXApOgorCiAyMDEzLTAyLTI1ICBBbGV4ZWkgRmlsaXBwb3YgIDxhbHBoQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBSZW1vdmUgQ1BVIHByb2ZpbGUgZnJvbSBhIGdy
b3VwIGNhdXNlcyBleGNlcHRpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggMWI5ZWJl
ZWY4NzJlMzI5MjU4NDZjYjFlYjFkMTE5OTljMjA4Y2ViMy4uMzc5NGI5NmVjMzg5M2E1ZGMzMDUz
YmEzOThmNzA1YzA1MTE0YzMwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwzOCBAQAorMjAxMy0wMi0yMCAgQWxwaGEgTGFtICA8aGNsYW1AY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIEdJRkltYWdlUmVhZGVyIHRvIHJlYWQgZnJvbSBzb3VyY2UgZGF0YSBkaXJlY3RseQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5NjYyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgU3RlcGhlbiBXaGl0ZS4KKworICAgICAgICBBZGRlZCB0aGUg
Zm9sbG93aW5nIHVuaXQgdGVzdHMgdG8gdGVzdCBuZXcgbG9naWMgaW4gR0lGSW1hZ2VEZWNvZGVy
OgorCisgICAgICAgIEdJRkltYWdlRGVjb2RlclRlc3QuZGVjb2RlVHdvRnJhbWVzCisgICAgICAg
IFRlc3QgdGhhdCBpdCBjYW4gZGVjb2RlIGEgbXVsdGktZnJhbWUgR0lGIGltYWdlIGNvcnJlY3Rs
eS4KKworICAgICAgICBHSUZJbWFnZURlY29kZXJUZXN0LnBhcnNlQW5kRGVjb2RlCisgICAgICAg
IEZpcnN0IHBlcmZvcm0gYSBwYXJzZSBvcGVyYXRpb24gYW5kIHRoZW4gYSBkZWNvZGUgb3BlcmF0
aW9uLiBFeHBlY3QKKyAgICAgICAgdGhhdCBwYXJzZSBhbmQgZGVjb2RlIG9wZXJhdGVzIGNvcnJl
Y3RseS4KKworICAgICAgICBHSUZJbWFnZURlY29kZXJUZXN0LnBhcnNlQnl0ZUJ5Qnl0ZQorICAg
ICAgICBUZXN0IHRoYXQgbXVsdGktZnJhbWUgR0lGIGltYWdlIGNhbiBiZSBwYXJzZWQgY29ycmVj
dGx5IGJ5dGUgYnkgYnl0ZS4KKworICAgICAgICBHSUZJbWFnZURlY29kZXJUZXN0LnBhcnNlQW5k
RGVjb2RlQnl0ZUJ5Qnl0ZQorICAgICAgICBSdW4gYSBsb29wIHRvIGZlZWQgZGVjb2RlciBieXRl
IGJ5IGJ5dGUsIHBlcmZvcm0gYSBwYXJzZSBhbmQgdGhlbgorICAgICAgICBkZWNvZGUgb3BlcmF0
aW9uIGFuZCBtYWtlIHN1cmUgZnJhbWVzIGFyZSBkZWNvZGVkIGNvcnJlY3RseS4KKworICAgICAg
ICBHSUZJbWFnZURlY29kZXJUZXN0LmJyb2tlblNlY29uZEZyYW1lCisgICAgICAgIERlY29kZSBh
IEdJRiBpbWFnZSB3aXRoIHNlY29uZCBmcmFtZSBicm9rZW4uIEV4cGVjdCB0aGF0IHRoZSBmaXJz
dAorICAgICAgICBmcmFtZSBjYW4gYmUgZGVjb2RlZCBjb3JyZWN0bHkuCisKKyAgICAgICAgKiBX
ZWJLaXQuZ3lwOgorICAgICAgICAqIFdlYktpdC5neXBpOgorICAgICAgICAqIHRlc3RzL0dJRklt
YWdlRGVjb2RlclRlc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChX
ZWJLaXQ6OnJlYWRGaWxlKToKKyAgICAgICAgKFdlYktpdDo6VEVTVCk6CisgICAgICAgICogdGVz
dHMvZGF0YS9icm9rZW4uZ2lmOiBBZGRlZC4KKwogMjAxMy0wMi0yNSAgQW5kcmV5IEtvc3lha292
ICA8Y2FzZXFAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgZm9sbG93LXVwIHRv
IHIxNDM3MjUsIHJlZHVjZSBjaGFuY2VzIHRlc3QgZmxha2VzIG9uIGEgc2xvdyBib3guCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1h
Z2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dp
Zi9HSUZJbWFnZURlY29kZXIuY3BwCmluZGV4IDBjYjIyODg1Y2ViM2Q2YjE2YjIzNWY4MTliOThh
MjViOTNiYWZkOGIuLjZhNTE0MDk4NDZjMDA1MDAwYzkyNzBhM2ZjYTU4OTgyODk3NWEzZDIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJ
bWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29k
ZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCkBAIC0zNyw3ICszNyw2IEBAIEdJRkltYWdlRGVj
b2Rlcjo6R0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU9wdGlvbiBhbHBoYU9wdGlv
biwKICAgICA6IEltYWdlRGVjb2RlcihhbHBoYU9wdGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVP
cHRpb24pCiAgICAgLCBtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50KHRydWUp
CiAgICAgLCBtX3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTG9vcE9uY2UpCi0gICAgLCBtX3Jl
YWRPZmZzZXQoMCkKIHsKIH0KIApAQCAtNTEsNiArNTAsOCBAQCB2b2lkIEdJRkltYWdlRGVjb2Rl
cjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEsIGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogICAg
ICAgICByZXR1cm47CiAKICAgICBJbWFnZURlY29kZXI6OnNldERhdGEoZGF0YSwgYWxsRGF0YVJl
Y2VpdmVkKTsKKyAgICBpZiAobV9yZWFkZXIpCisgICAgICAgIG1fcmVhZGVyLT5zZXREYXRhKGRh
dGEpOwogCiAgICAgLy8gV2UgbmVlZCB0byByZXNjYW4gdGhlIGZyYW1lIGNvdW50LCBhcyB0aGUg
bmV3IGRhdGEgbWF5IGhhdmUgY2hhbmdlZCBpdC4KICAgICBtX2FscmVhZHlTY2FubmVkVGhpc0Rh
dGFGb3JGcmFtZUNvdW50ID0gZmFsc2U7CkBAIC04NSw3ICs4Niw4IEBAIHNpemVfdCBHSUZJbWFn
ZURlY29kZXI6OmZyYW1lQ291bnQoKQogICAgICAgICAvLyBhbGwgdGhlIGRhdGEuICBOb3RlIHRo
YXQgdGhpcyBpcyBubyB3b3JzZSB0aGFuIHdoYXQgSW1hZ2VJTyBkb2VzIG9uCiAgICAgICAgIC8v
IE1hYyByaWdodCBub3cgKGl0IGFsc28gY3Jhd2xzIGFsbCB0aGUgZGF0YSBhZ2FpbikuCiAgICAg
ICAgIEdJRkltYWdlUmVhZGVyIHJlYWRlcigwKTsKLSAgICAgICAgcmVhZGVyLnJlYWQoKGNvbnN0
IHVuc2lnbmVkIGNoYXIqKW1fZGF0YS0+ZGF0YSgpLCBtX2RhdGEtPnNpemUoKSwgR0lGRnJhbWVD
b3VudFF1ZXJ5LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLTEpKTsKKyAgICAgICAgcmVhZGVyLnNl
dERhdGEobV9kYXRhKTsKKyAgICAgICAgcmVhZGVyLmRlY29kZShHSUZGcmFtZUNvdW50UXVlcnks
IHN0YXRpY19jYXN0PHVuc2lnbmVkPigtMSkpOwogICAgICAgICBtX2FscmVhZHlTY2FubmVkVGhp
c0RhdGFGb3JGcmFtZUNvdW50ID0gdHJ1ZTsKICAgICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJl
c2l6ZShyZWFkZXIuaW1hZ2VzQ291bnQoKSk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
cmVhZGVyLmltYWdlc0NvdW50KCk7ICsraSkKQEAgLTE5MSwxMSArMTkzLDYgQEAgdm9pZCBHSUZJ
bWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJDYWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFt
ZSkKICAgICB9CiB9CiAKLXZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGluZ0hhbHRlZCh1bnNp
Z25lZCBieXRlc0xlZnQpCi17Ci0gICAgbV9yZWFkT2Zmc2V0ID0gbV9kYXRhLT5zaXplKCkgLSBi
eXRlc0xlZnQ7Ci19Ci0KIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNp
Z25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBjaGFyKiByb3dCdWZmZXIsIHVuc2lnbmVkIGNoYXIq
IHJvd0VuZCwgdW5zaWduZWQgcm93TnVtYmVyLCB1bnNpZ25lZCByZXBlYXRDb3VudCwgYm9vbCB3
cml0ZVRyYW5zcGFyZW50UGl4ZWxzKQogewogICAgIGNvbnN0IEdJRkZyYW1lQ29udGV4dCogZnJh
bWVDb250ZXh0ID0gbV9yZWFkZXItPmZyYW1lQ29udGV4dCgpOwpAQCAtMjE2LDggKzIxMyw4IEBA
IGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4
LCB1bnNpZ25lZCBjaGFyKiByb3dCdWZmCiAgICAgY29uc3QgdW5zaWduZWQgY2hhciogY29sb3JN
YXA7CiAgICAgdW5zaWduZWQgY29sb3JNYXBTaXplOwogICAgIGlmIChmcmFtZUNvbnRleHQtPmlz
TG9jYWxDb2xvcm1hcERlZmluZWQpIHsKLSAgICAgICAgY29sb3JNYXAgPSBmcmFtZUNvbnRleHQt
PmxvY2FsQ29sb3JtYXA7Ci0gICAgICAgIGNvbG9yTWFwU2l6ZSA9ICh1bnNpZ25lZClmcmFtZUNv
bnRleHQtPmxvY2FsQ29sb3JtYXBTaXplOworICAgICAgICBjb2xvck1hcCA9IG1fcmVhZGVyLT5s
b2NhbENvbG9ybWFwKGZyYW1lQ29udGV4dCk7CisgICAgICAgIGNvbG9yTWFwU2l6ZSA9IG1fcmVh
ZGVyLT5sb2NhbENvbG9ybWFwU2l6ZShmcmFtZUNvbnRleHQpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGNvbG9yTWFwID0gbV9yZWFkZXItPmdsb2JhbENvbG9ybWFwKCk7CiAgICAgICAgIGNvbG9y
TWFwU2l6ZSA9IG1fcmVhZGVyLT5nbG9iYWxDb2xvcm1hcFNpemUoKTsKQEAgLTMxOSwxMiArMzE2
LDE0IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpkZWNvZGUodW5zaWduZWQgaGFsdEF0RnJhbWUs
IEdJRlF1ZXJ5IHF1ZXJ5KQogICAgIGlmIChmYWlsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKCFtX3JlYWRlcikKKyAgICBpZiAoIW1fcmVhZGVyKSB7CiAgICAgICAgIG1fcmVhZGVy
ID0gYWRvcHRQdHIobmV3IEdJRkltYWdlUmVhZGVyKHRoaXMpKTsKKyAgICAgICAgbV9yZWFkZXIt
PnNldERhdGEobV9kYXRhKTsKKyAgICB9CiAKICAgICAvLyBJZiB3ZSBjb3VsZG4ndCBkZWNvZGUg
dGhlIGltYWdlIGJ1dCB3ZSd2ZSByZWNlaXZlZCBhbGwgdGhlIGRhdGEsIGRlY29kaW5nCiAgICAg
Ly8gaGFzIGZhaWxlZC4KLSAgICBpZiAoIW1fcmVhZGVyLT5yZWFkKChjb25zdCB1bnNpZ25lZCBj
aGFyKiltX2RhdGEtPmRhdGEoKSArIG1fcmVhZE9mZnNldCwgbV9kYXRhLT5zaXplKCkgLSBtX3Jl
YWRPZmZzZXQsIHF1ZXJ5LCBoYWx0QXRGcmFtZSkgJiYgaXNBbGxEYXRhUmVjZWl2ZWQoKSkKKyAg
ICBpZiAoIW1fcmVhZGVyLT5kZWNvZGUocXVlcnksIGhhbHRBdEZyYW1lKSAmJiBpc0FsbERhdGFS
ZWNlaXZlZCgpKQogICAgICAgICBzZXRGYWlsZWQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rl
ci5oCmluZGV4IDdiZGE5OTQzODI4ZDg0ZTJiYjk0YTI3NWNlNWI5MTBhYTVjZDJiMTEuLjk5ODJh
NDRlMTg3NzljY2ZhYmUzZjU4NDI1ODRjYzgxMGExMjUxNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNv
ZGVyLmgKQEAgLTU2LDcgKzU2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0
dWFsIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hlKHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKTsK
IAogICAgICAgICAvLyBDYWxsYmFja3MgZnJvbSB0aGUgR0lGIHJlYWRlci4KLSAgICAgICAgdm9p
ZCBkZWNvZGluZ0hhbHRlZCh1bnNpZ25lZCBieXRlc0xlZnQpOwogICAgICAgICBib29sIGhhdmVE
ZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgsIHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwg
dW5zaWduZWQgY2hhciogcm93RW5kLCB1bnNpZ25lZCByb3dOdW1iZXIsIHVuc2lnbmVkIHJlcGVh
dENvdW50LCBib29sIHdyaXRlVHJhbnNwYXJlbnRQaXhlbHMpOwogICAgICAgICBib29sIGZyYW1l
Q29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwgdW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgSW1h
Z2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZCBkaXNwb3NhbE1ldGhvZCk7CiAgICAgICAgIHZv
aWQgZ2lmQ29tcGxldGUoKTsKQEAgLTc3LDcgKzc2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBib29sIG1fY3VycmVudEJ1ZmZlclNhd0FscGhhOwogICAgICAgICBtdXRhYmxlIGlu
dCBtX3JlcGV0aXRpb25Db3VudDsKICAgICAgICAgT3duUHRyPEdJRkltYWdlUmVhZGVyPiBtX3Jl
YWRlcjsKLSAgICAgICAgdW5zaWduZWQgbV9yZWFkT2Zmc2V0OwogICAgIH07CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuY3BwCmluZGV4IDY5OWQzYzQ3ZmI0
NGFmMmM4MjRmYTU5YjAzYjQyZjUxMDY2MGVlZmIuLmNjZTA2OWZlMmM0OTE0NDA3ODA4ZjVhZmM0
ZjI1MWIzYTQ4NDFjNzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmNwcApAQCAtMjAxLDcgKzIw
MSw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6Om91dHB1dFJvdygpCiB9CiAKIC8vIFBlcmZvcm0g
TGVtcGVsLVppdi1XZWxjaCBkZWNvZGluZy4KLWJvb2wgR0lGSW1hZ2VSZWFkZXI6OmRvTFpXKGNv
bnN0IHVuc2lnbmVkIGNoYXIgKnEpCitib29sIEdJRkltYWdlUmVhZGVyOjpkb0xaVyhjb25zdCB1
bnNpZ25lZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5dGVzSW5CbG9jaykKIHsKICAgICBpZiAoIW1f
ZnJhbWVDb250ZXh0KQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTIxNSw3ICsyMTUsNyBAQCBi
b29sIEdJRkltYWdlUmVhZGVyOjpkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyICpxKQogICAgIC8v
IGJhY2sgaW50byB0aGUgR0lGIGRlY29kZXIgc3RydWN0dXJlIHdoZW4gd2UgZXhpdC4KICAgICBp
bnQgYXZhaWwgPSBtX2ZyYW1lQ29udGV4dC0+YXZhaWw7CiAgICAgaW50IGJpdHMgPSBtX2ZyYW1l
Q29udGV4dC0+Yml0czsKLSAgICBpbnQgY250ID0gbV9jb3VudDsKKyAgICBzaXplX3QgY250ID0g
Ynl0ZXNJbkJsb2NrOwogICAgIGludCBjb2Rlc2l6ZSA9IG1fZnJhbWVDb250ZXh0LT5jb2Rlc2l6
ZTsKICAgICBpbnQgY29kZW1hc2sgPSBtX2ZyYW1lQ29udGV4dC0+Y29kZW1hc2s7CiAgICAgaW50
IG9sZGNvZGUgPSBtX2ZyYW1lQ29udGV4dC0+b2xkY29kZTsKQEAgLTI0OSw3ICsyNDksNyBAQCBi
b29sIEdJRkltYWdlUmVhZGVyOjpkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyICpxKQogICAgICAg
ICAgICAgZ290byBFTkQ7IFwKICAgICB9IHdoaWxlICgwKQogCi0gICAgZm9yIChjaCA9IHE7IGNu
dC0tID4gMDsgY2grKykgeworICAgIGZvciAoY2ggPSBibG9jazsgY250LS0gPiAwOyBjaCsrKSB7
CiAgICAgICAgIC8vIEZlZWQgdGhlIG5leHQgYnl0ZSBpbnRvIHRoZSBkZWNvZGVyJ3MgMzItYml0
IGlucHV0IGJ1ZmZlci4KICAgICAgICAgZGF0dW0gKz0gKChpbnQpICpjaCkgPDwgYml0czsKICAg
ICAgICAgYml0cyArPSA4OwpAQCAtMzQ0LDcgKzM0NCw2IEBAIEVORDoKICAgICBtX2ZyYW1lQ29u
dGV4dC0+Yml0cyA9IGJpdHM7CiAgICAgbV9mcmFtZUNvbnRleHQtPmNvZGVzaXplID0gY29kZXNp
emU7CiAgICAgbV9mcmFtZUNvbnRleHQtPmNvZGVtYXNrID0gY29kZW1hc2s7Ci0gICAgbV9jb3Vu
dCA9IGNudDsKICAgICBtX2ZyYW1lQ29udGV4dC0+b2xkY29kZSA9IG9sZGNvZGU7CiAgICAgbV9m
cmFtZUNvbnRleHQtPmZpcnN0Y2hhciA9IGZpcnN0Y2hhcjsKICAgICBtX2ZyYW1lQ29udGV4dC0+
ZGF0dW0gPSBkYXR1bTsKQEAgLTM1NCw2OCArMzUzLDM5IEBAIEVORDoKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAorYm9vbCBHSUZJbWFnZVJlYWRlcjo6ZGVjb2RlKEdJRkltYWdlRGVjb2Rlcjo6R0lG
UXVlcnkgcXVlcnksIHVuc2lnbmVkIGhhbHRBdEZyYW1lKQoreworICAgIEFTU0VSVChtX2J5dGVz
UmVhZCA8PSBtX2RhdGEtPnNpemUoKSk7CisgICAgcmV0dXJuIGRlY29kZUludGVybmFsKG1fYnl0
ZXNSZWFkLCBtX2RhdGEtPnNpemUoKSAtIG1fYnl0ZXNSZWFkLCBxdWVyeSwgaGFsdEF0RnJhbWUp
OworfQogCiAvLyBQcm9jZXNzIGRhdGEgYXJyaXZpbmcgZnJvbSB0aGUgc3RyZWFtIGZvciB0aGUg
Z2lmIGRlY29kZXIuCi1ib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNo
YXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCB1
bnNpZ25lZCBoYWx0QXRGcmFtZSkKK2Jvb2wgR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVybmFs
KHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIEdJRkltYWdlRGVjb2Rlcjo6R0lGUXVl
cnkgcXVlcnksIHVuc2lnbmVkIGhhbHRBdEZyYW1lKQogewogICAgIGlmICghbGVuKSB7CiAgICAg
ICAgIC8vIE5vIG5ldyBkYXRhIGhhcyBjb21lIGluIHNpbmNlIHRoZSBsYXN0IGNhbGwsIGp1c3Qg
aWdub3JlIHRoaXMgY2FsbC4KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCi0gICAgY29u
c3QgdW5zaWduZWQgY2hhciAqcSA9IGJ1ZjsKLQotICAgIC8vIEFkZCB3aGF0IHdlIGhhdmUgc28g
ZmFyIHRvIHRoZSBibG9jay4KLSAgICAvLyBJZiBwcmV2aW91cyBjYWxsIHRvIG1lIGxlZnQgc29t
ZXRoaW5nIGluIHRoZSBob2xkIGZpcnN0IGNvbXBsZXRlIGN1cnJlbnQgYmxvY2sKLSAgICAvLyBv
ciBpZiB3ZSBhcmUgZmlsbGluZyB0aGUgY29sb3JtYXBzLCBmaXJzdCBjb21wbGV0ZSB0aGUgY29s
b3JtYXAuCi0gICAgdW5zaWduZWQgY2hhciogcCA9IDA7Ci0gICAgaWYgKG1fc3RhdGUgPT0gR0lG
R2xvYmFsQ29sb3JtYXApCi0gICAgICAgIHAgPSBtX2dsb2JhbENvbG9ybWFwOwotICAgIGVsc2Ug
aWYgKG1fc3RhdGUgPT0gR0lGSW1hZ2VDb2xvcm1hcCkKLSAgICAgICAgcCA9IG1fZnJhbWVDb250
ZXh0ID8gbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXAgOiAwOwotICAgIGVsc2UgaWYgKG1f
Ynl0ZXNJbkhvbGQpCi0gICAgICAgIHAgPSBtX2hvbGQ7Ci0gICAgZWxzZQotICAgICAgICBwID0g
MDsKLQotICAgIGlmIChwIHx8IChtX3N0YXRlID09IEdJRkdsb2JhbENvbG9ybWFwKSB8fCAobV9z
dGF0ZSA9PSBHSUZJbWFnZUNvbG9ybWFwKSkgewotICAgICAgICAvLyBBZGQgd2hhdCB3ZSBoYXZl
IHNvZmFyIHRvIHRoZSBibG9jawotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBsZW4gPCBtX2J5
dGVzVG9Db25zdW1lID8gbGVuIDogbV9ieXRlc1RvQ29uc3VtZTsKLSAgICAgICAgaWYgKHApCi0g
ICAgICAgICAgICBtZW1jcHkocCArIG1fYnl0ZXNJbkhvbGQsIGJ1ZiwgbGVuZ3RoKTsKLQotICAg
ICAgICBpZiAobGVuZ3RoIDwgbV9ieXRlc1RvQ29uc3VtZSkgewotICAgICAgICAgICAgLy8gTm90
IGVub3VnaCBpbiAnYnVmJyB0byBjb21wbGV0ZSBjdXJyZW50IGJsb2NrLCBnZXQgbW9yZQotICAg
ICAgICAgICAgbV9ieXRlc0luSG9sZCArPSBsZW5ndGg7Ci0gICAgICAgICAgICBtX2J5dGVzVG9D
b25zdW1lIC09IGxlbmd0aDsKLSAgICAgICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgICAg
ICAgICBtX2NsaWVudC0+ZGVjb2RpbmdIYWx0ZWQoMCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBSZXNldCBob2xkIGJ1ZmZlciBjb3VudAotICAg
ICAgICBtX2J5dGVzSW5Ib2xkID0gMDsKKyAgICBpZiAobGVuIDwgbV9ieXRlc1RvQ29uc3VtZSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIC8vIFBvaW50ICdxJyB0byBjb21wbGV0
ZSBibG9jayBpbiBob2xkIChvciBpbiBjb2xvcm1hcCkKLSAgICAgICAgcSA9IHA7Ci0gICAgfQor
ICAgIC8vIFRoaXMgbG9vcCByZWFkcyBhcyBtYW55IGNvbXBvbmVudHMgZnJvbSB8bV9kYXRhfCBh
cyBwb3NzaWJsZS4KKyAgICAvLyBBdCB0aGUgYmVnaW5uaW5nIG9mIGVhY2ggaXRlcmF0aW9uLCBk
YXRhUG9zaXRpb24gd2lsbCBiZSBhZHZhbmNlZCBieSBtX2J5dGVzVG9Db25zdW1lIHRvCisgICAg
Ly8gcG9pbnQgdG8gdGhlIG5leHQgY29tcG9uZW50LiBsZW4gd2lsbCBiZSBkZWNyZW1lbnRlZCBh
Y2NvcmRpbmdseS4KKyAgICB3aGlsZSAobGVuID49IG1fYnl0ZXNUb0NvbnN1bWUpIHsKKyAgICAg
ICAgLy8gRklYTUU6IFJlbmFtZSB0aGlzIHZhcmlhYmxlIHRvIGN1cnJlbnRDb21wb25lbnQuCisg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHEgPSBkYXRhKGRhdGFQb3NpdGlvbik7CiAKLSAg
ICAvLyBJbnZhcmlhbnQ6Ci0gICAgLy8gICAgJ3EnIGlzIHN0YXJ0IG9mIGN1cnJlbnQgdG8gYmUg
cHJvY2Vzc2VkIGJsb2NrIChob2xkLCBjb2xvcm1hcCBvciBidWYpCi0gICAgLy8gICAgJ21fYnl0
ZXNUb0NvbnN1bWUnIGlzIG51bWJlciBvZiBieXRlcyB0byBjb25zdW1lIGZyb20gJ2J1ZicKLSAg
ICAvLyAgICAnYnVmJyBwb2ludHMgdG8gdGhlIGJ5dGVzIHRvIGJlIGNvbnN1bWVkIGZyb20gdGhl
IGlucHV0IGJ1ZmZlcgotICAgIC8vICAgICdsZW4nIGlzIG51bWJlciBvZiBieXRlcyBsZWZ0IGlu
IGlucHV0IGJ1ZmZlciBmcm9tIHBvc2l0aW9uICdidWYnLgotICAgIC8vICAgIEF0IGVudHJhbmNl
IG9mIHRoZSBmb3IgbG9vcCB3aWxsICdidWYnIHdpbGwgYmUgbW92ZWQgJ21fYnl0ZXNUb0NvbnN1
bWUnCi0gICAgLy8gICAgdG8gcG9pbnQgdG8gbmV4dCBidWZmZXIsICdsZW4nIGlzIGFkanVzdGVk
IGFjY29yZGluZ2x5LgotICAgIC8vICAgIFNvIHRoYXQgbmV4dCByb3VuZCBpbiBmb3IgbG9vcCwg
cSBnZXRzIHBvaW50ZWQgdG8gdGhlIG5leHQgYnVmZmVyLgotICAgIGZvciAoO2xlbiA+PSBtX2J5
dGVzVG9Db25zdW1lOyBxID0gYnVmKSB7Ci0gICAgICAgIC8vIEVhdCB0aGUgY3VycmVudCBibG9j
ayBmcm9tIHRoZSBidWZmZXIsIHEga2VlcHMgcG9pbnRlZCBhdCBjdXJyZW50IGJsb2NrLgotICAg
ICAgICBidWYgKz0gbV9ieXRlc1RvQ29uc3VtZTsKKyAgICAgICAgLy8gTWFyayB0aGUgY3VycmVu
dCBjb21wb25lbnQgYXMgY29uc3VtZWQuIE5vdGUgdGhhdCBxIHdpbGwgcmVtYWluIHBvaW50ZWQg
YXQgdGhpcworICAgICAgICAvLyBjb21wb25lbnQgdW50aWwgdGhlIG5leHQgbG9vcCBpdGVyYXRp
b24uCisgICAgICAgIGRhdGFQb3NpdGlvbiArPSBtX2J5dGVzVG9Db25zdW1lOwogICAgICAgICBs
ZW4gLT0gbV9ieXRlc1RvQ29uc3VtZTsKIAogICAgICAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKICAg
ICAgICAgY2FzZSBHSUZMWlc6Ci0gICAgICAgICAgICBpZiAoIWRvTFpXKHEpKQorICAgICAgICAg
ICAgLy8gbV9ieXRlc1RvQ29uc3VtZSBpcyB0aGUgY3VycmVudCBjb21wb25lbnQgc2l6ZSBiZWNh
dXNlIGl0IGhhc24ndCBiZWVuIHVwZGF0ZWQuCisgICAgICAgICAgICBpZiAoIWRvTFpXKHEsIG1f
Ynl0ZXNUb0NvbnN1bWUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gSWYgZG9M
WlcoKSBlbmNvdW50ZXJlZCBhbiBlcnJvciwgaXQgaGFzIGFscmVhZHkgY2FsbGVkIG1fY2xpZW50
LT5zZXRGYWlsZWQoKS4KICAgICAgICAgICAgIEdFVE4oMSwgR0lGU3ViQmxvY2spOwogICAgICAg
ICAgICAgYnJlYWs7CkBAIC00ODgsMjMgKzQ1OCwxOCBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpy
ZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURlY29k
ZQogCiAgICAgICAgICAgICBpZiAoKHFbNF0gJiAweDgwKSAmJiBtX2dsb2JhbENvbG9ybWFwU2l6
ZSA+IDApIHsgLyogZ2xvYmFsIG1hcCAqLwogICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgZ2xv
YmFsIGNvbG9ybWFwCi0gICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2l6ZSA9IDMqbV9n
bG9iYWxDb2xvcm1hcFNpemU7Ci0KLSAgICAgICAgICAgICAgICAvLyBNYWxsb2MgdGhlIGNvbG9y
IG1hcCwgYnV0IG9ubHkgaWYgd2UncmUgbm90IGp1c3QgY291bnRpbmcgZnJhbWVzLgotICAgICAg
ICAgICAgICAgIGlmIChxdWVyeSAhPSBHSUZJbWFnZURlY29kZXI6OkdJRkZyYW1lQ291bnRRdWVy
eSkKLSAgICAgICAgICAgICAgICAgICAgbV9nbG9iYWxDb2xvcm1hcCA9IG5ldyB1bnNpZ25lZCBj
aGFyW3NpemVdOworICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBnbG9iYWxDb2xvcm1hcEJ5
dGVzID0gMyAqIG1fZ2xvYmFsQ29sb3JtYXBTaXplOworICAgICAgICAgICAgICAgIG1fZ2xvYmFs
Q29sb3JtYXBQb3NpdGlvbiA9IGRhdGFQb3NpdGlvbjsKIAotICAgICAgICAgICAgICAgIGlmIChs
ZW4gPCBzaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFVzZSAnaG9sZCcgcGF0dGVybiB0
byBnZXQgdGhlIGdsb2JhbCBjb2xvcm1hcAotICAgICAgICAgICAgICAgICAgICBHRVROKHNpemUs
IEdJRkdsb2JhbENvbG9ybWFwKTsKKyAgICAgICAgICAgICAgICBpZiAobGVuIDwgZ2xvYmFsQ29s
b3JtYXBCeXRlcykgeworICAgICAgICAgICAgICAgICAgICAvLyBXYWl0IHVudGlsIHdlIGhhdmUg
ZW5vdWdoIGJ5dGVzIHRvIGNvbnN1bWUgdGhlIGVudGlyZSBjb2xvcm1hcCBhdCBvbmNlLgorICAg
ICAgICAgICAgICAgICAgICBHRVROKGdsb2JhbENvbG9ybWFwQnl0ZXMsIEdJRkdsb2JhbENvbG9y
bWFwKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICAgICAgLy8gQ29weSBldmVyeXRoaW5nIGFuZCBnbyBkaXJlY3RseSB0byBHSUZJ
bWFnZV9zdGFydC4KLSAgICAgICAgICAgICAgICBpZiAobV9nbG9iYWxDb2xvcm1hcCkKLSAgICAg
ICAgICAgICAgICAgICAgbWVtY3B5KG1fZ2xvYmFsQ29sb3JtYXAsIGJ1Ziwgc2l6ZSk7Ci0gICAg
ICAgICAgICAgICAgYnVmICs9IHNpemU7Ci0gICAgICAgICAgICAgICAgbGVuIC09IHNpemU7Cisg
ICAgICAgICAgICAgICAgbV9pc0dsb2JhbENvbG9ybWFwRGVmaW5lZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgZGF0YVBvc2l0aW9uICs9IGdsb2JhbENvbG9ybWFwQnl0ZXM7CisgICAgICAgICAg
ICAgICAgbGVuIC09IGdsb2JhbENvbG9ybWFwQnl0ZXM7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIEdFVE4oMSwgR0lGSW1hZ2VTdGFydCk7CkBAIC01MTYsNyArNDgxLDcgQEAgYm9vbCBH
SUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxl
biwgR0lGSW1hZ2VEZWNvZGUKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgR0lGR2xvYmFsQ29s
b3JtYXA6IHsKLSAgICAgICAgICAgIC8vIEV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBjb3BpZWQgaW50
byBtX2dsb2JhbENvbG9ybWFwCisgICAgICAgICAgICBtX2lzR2xvYmFsQ29sb3JtYXBEZWZpbmVk
ID0gdHJ1ZTsKICAgICAgICAgICAgIEdFVE4oMSwgR0lGSW1hZ2VTdGFydCk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQpAQCAtNTQ1LDcgKzUxMCw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFk
ZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIEdJRkltYWdl
RGVjb2RlCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEdJRkV4dGVuc2lvbjogewotICAgICAg
ICAgICAgbV9jb3VudCA9IHFbMV07CisgICAgICAgICAgICBzaXplX3QgYnl0ZXNJbkJsb2NrID0g
cVsxXTsKICAgICAgICAgICAgIEdJRlN0YXRlIGVzID0gR0lGU2tpcEJsb2NrOwogCiAgICAgICAg
ICAgICAvLyBUaGUgR0lGIHNwZWMgbWFuZGF0ZXMgbGVuZ3RocyBmb3IgdGhyZWUgb2YgdGhlIGV4
dGVuc2lvbnMgYmVsb3cuCkBAIC01NjYsMTcgKzUzMSwxNyBAQCBib29sIEdJRkltYWdlUmVhZGVy
OjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURl
Y29kZQogICAgICAgICAgICAgc3dpdGNoICgqcSkgewogICAgICAgICAgICAgY2FzZSAweGY5Ogog
ICAgICAgICAgICAgICAgIGVzID0gR0lGQ29udHJvbEV4dGVuc2lvbjsKLSAgICAgICAgICAgICAg
ICBtX2NvdW50ID0gc3RkOjptYXgobV9jb3VudCwgNCk7CisgICAgICAgICAgICAgICAgYnl0ZXNJ
bkJsb2NrID0gc3RkOjptYXgoYnl0ZXNJbkJsb2NrLCBzdGF0aWNfY2FzdDxzaXplX3Q+KDQpKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSAweDAxOgogICAgICAg
ICAgICAgICAgIC8vIGlnbm9yaW5nIHBsYWluIHRleHQgZXh0ZW5zaW9uCi0gICAgICAgICAgICAg
ICAgbV9jb3VudCA9IHN0ZDo6bWF4KG1fY291bnQsIDEyKTsKKyAgICAgICAgICAgICAgICBieXRl
c0luQmxvY2sgPSBzdGQ6Om1heChieXRlc0luQmxvY2ssIHN0YXRpY19jYXN0PHNpemVfdD4oMTIp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSAweGZmOgogICAg
ICAgICAgICAgICAgIGVzID0gR0lGQXBwbGljYXRpb25FeHRlbnNpb247Ci0gICAgICAgICAgICAg
ICAgbV9jb3VudCA9IHN0ZDo6bWF4KG1fY291bnQsIDExKTsKKyAgICAgICAgICAgICAgICBieXRl
c0luQmxvY2sgPSBzdGQ6Om1heChieXRlc0luQmxvY2ssIHN0YXRpY19jYXN0PHNpemVfdD4oMTEp
KTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSAweGZlOgpAQCAt
NTg0LDggKzU0OSw4IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQg
Y2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIEdJRkltYWdlRGVjb2RlCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChtX2NvdW50KQotICAgICAg
ICAgICAgICAgIEdFVE4obV9jb3VudCwgZXMpOworICAgICAgICAgICAgaWYgKGJ5dGVzSW5CbG9j
aykKKyAgICAgICAgICAgICAgICBHRVROKGJ5dGVzSW5CbG9jaywgZXMpOwogICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgIEdFVE4oMSwgR0lGSW1hZ2VTdGFydCk7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTcyOSw4ICs2OTQsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNv
bnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURlY29kZQogICAg
ICAgICAgICAgaWYgKHF1ZXJ5ID09IEdJRkltYWdlRGVjb2Rlcjo6R0lGU2l6ZVF1ZXJ5IHx8IGhh
bHRBdEZyYW1lID09IG1faW1hZ2VzRGVjb2RlZCkgewogICAgICAgICAgICAgICAgIC8vIFRoZSBk
ZWNvZGVyIG5lZWRzIHRvIHN0b3AuIEhhbmQgYmFjayB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGNv
bnN1bWVkIGZyb20KICAgICAgICAgICAgICAgICAvLyBidWZmZXIgbWludXMgOSAodGhlIGFtb3Vu
dCB3ZSBjb25zdW1lZCB0byByZWFkIHRoZSBoZWFkZXIpLgotICAgICAgICAgICAgICAgIGlmICht
X2NsaWVudCkKLSAgICAgICAgICAgICAgICAgICAgbV9jbGllbnQtPmRlY29kaW5nSGFsdGVkKGxl
biArIDkpOworICAgICAgICAgICAgICAgIHNldFJlbWFpbmluZ0J5dGVzKGxlbiArIDkpOwogICAg
ICAgICAgICAgICAgIEdFVE4oOSwgR0lGSW1hZ2VIZWFkZXIpOwogICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICAgICAgfQpAQCAtNzk0LDMzICs3NTgsMjQgQEAgYm9vbCBHSUZJ
bWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwg
R0lGSW1hZ2VEZWNvZGUKICAgICAgICAgICAgIC8vIGhhcyBhIGxvY2FsIGNvbG9ybWFwPwogICAg
ICAgICAgICAgaWYgKHFbOF0gJiAweDgwKSB7CiAgICAgICAgICAgICAgICAgaW50IG51bUNvbG9y
cyA9IDIgPDwgKHFbOF0gJiAweDcpOwotICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNp
emUgPSAzICogbnVtQ29sb3JzOwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm1hcCA9
IG1fZnJhbWVDb250ZXh0ID8gbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXAgOiAwOwotICAg
ICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCAmJiAoIW1hcCB8fCAobnVtQ29sb3JzID4g
bV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXBTaXplKSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgZGVsZXRlIFtdbWFwOwotICAgICAgICAgICAgICAgICAgICBtYXAgPSBuZXcgdW5zaWduZWQg
Y2hhcltzaXplXTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXApCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBtX2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxz
ZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGxvY2Fs
Q29sb3JtYXBCeXRlcyA9IDMgKiBudW1Db2xvcnM7CiAKICAgICAgICAgICAgICAgICAvLyBTd2l0
Y2ggdG8gdGhlIG5ldyBsb2NhbCBwYWxldHRlIGFmdGVyIGl0IGxvYWRzCiAgICAgICAgICAgICAg
ICAgaWYgKG1fZnJhbWVDb250ZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250
ZXh0LT5sb2NhbENvbG9ybWFwID0gbWFwOworICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29u
dGV4dC0+bG9jYWxDb2xvcm1hcFBvc2l0aW9uID0gZGF0YVBvc2l0aW9uOwogICAgICAgICAgICAg
ICAgICAgICBtX2ZyYW1lQ29udGV4dC0+bG9jYWxDb2xvcm1hcFNpemUgPSBudW1Db2xvcnM7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAobGVuIDwg
c2l6ZSkgewotICAgICAgICAgICAgICAgICAgICAvLyBVc2UgJ2hvbGQnIHBhdHRlcm4gdG8gZ2V0
IHRoZSBpbWFnZSBjb2xvcm1hcAotICAgICAgICAgICAgICAgICAgICBHRVROKHNpemUsIEdJRklt
YWdlQ29sb3JtYXApOworICAgICAgICAgICAgICAgIGlmIChsZW4gPCBsb2NhbENvbG9ybWFwQnl0
ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gV2FpdCB1bnRpbCB3ZSBoYXZlIGVub3VnaCBi
eXRlcyB0byBjb25zdW1lIHRoZSBlbnRpcmUgY29sb3JtYXAgYXQgb25jZS4KKyAgICAgICAgICAg
ICAgICAgICAgR0VUTihsb2NhbENvbG9ybWFwQnl0ZXMsIEdJRkltYWdlQ29sb3JtYXApOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICAvLyBDb3B5IGV2ZXJ5dGhpbmcgYW5kIGRpcmVjdGx5IGdvIHRvIEdJRkxaV1N0YXJ0CiAg
ICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0KQotICAgICAgICAgICAgICAgICAgICBt
ZW1jcHkobV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXAsIGJ1Ziwgc2l6ZSk7Ci0gICAgICAg
ICAgICAgICAgYnVmICs9IHNpemU7Ci0gICAgICAgICAgICAgICAgbGVuIC09IHNpemU7CisgICAg
ICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVkID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICBkYXRhUG9zaXRpb24gKz0gbG9jYWxDb2xvcm1hcEJ5dGVz
OworICAgICAgICAgICAgICAgIGxlbiAtPSBsb2NhbENvbG9ybWFwQnl0ZXM7CiAgICAgICAgICAg
ICB9IGVsc2UgaWYgKG1fZnJhbWVDb250ZXh0KSB7CiAgICAgICAgICAgICAgICAgLy8gU3dpdGNo
IGJhY2sgdG8gdGhlIGdsb2JhbCBwYWxldHRlCiAgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRl
eHQtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSBmYWxzZTsKQEAgLTgzMCwyMSArNzg1LDIzIEBA
IGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNp
Z25lZCBsZW4sIEdJRkltYWdlRGVjb2RlCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIEdJRklt
YWdlQ29sb3JtYXA6IHsKLSAgICAgICAgICAgIC8vIEV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBjb3Bp
ZWQgaW50byBsb2NhbENvbG9ybWFwCisgICAgICAgICAgICBpZiAobV9mcmFtZUNvbnRleHQpCisg
ICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSB0
cnVlOwogICAgICAgICAgICAgR0VUTigxLCBHSUZMWldTdGFydCk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgR0lGU3ViQmxvY2s6IHsKICAgICAgICAgICAg
IC8vIFN0aWxsIHdvcmtpbmcgb24gdGhlIHNhbWUgaW1hZ2U6IFByb2Nlc3MgbmV4dCBMWlcgZGF0
YSBibG9jay4KLSAgICAgICAgICAgIGlmICgobV9jb3VudCA9ICpxKSkgeworICAgICAgICAgICAg
Y29uc3Qgc2l6ZV90IGJ5dGVzSW5CbG9jayA9ICpxOworICAgICAgICAgICAgaWYgKGJ5dGVzSW5C
bG9jaykgewogICAgICAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGVyZSBhcmUgc3RpbGwgcm93
cyBsZWZ0LiBJZiB0aGUgR0lGIGRhdGEKICAgICAgICAgICAgICAgICAvLyBpcyBjb3JydXB0LCB3
ZSBtYXkgbm90IGdldCBhbiBleHBsaWNpdCB0ZXJtaW5hdG9yLgogICAgICAgICAgICAgICAgIGlm
IChtX2ZyYW1lQ29udGV4dCAmJiAhbV9mcmFtZUNvbnRleHQtPnJvd3NSZW1haW5pbmcpIHsKICAg
ICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBpbGxlZ2FsIEdJRiwgYnV0IHdlIHJlbWFp
biB0b2xlcmFudC4KICAgICAgICAgICAgICAgICAgICAgR0VUTigxLCBHSUZTdWJCbG9jayk7CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIEdFVE4obV9jb3VudCwgR0lGTFpXKTsK
KyAgICAgICAgICAgICAgICBHRVROKGJ5dGVzSW5CbG9jaywgR0lGTFpXKTsKICAgICAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGFyZSBhbnkgbW9yZSBp
bWFnZXMgaW4gdGhpcyBzZXF1ZW5jZS4KICAgICAgICAgICAgICAgICBtX2ltYWdlc0RlY29kZWQr
KzsKQEAgLTg3NywyMyArODM0LDEyIEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3Qg
dW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIEdJRkltYWdlRGVjb2RlCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICAvLyBDb3B5IHRoZSBsZWZ0b3ZlciBpbnRvIG1fZnJhbWVDb250ZXh0
LT5tX2hvbGQKLSAgICBtX2J5dGVzSW5Ib2xkID0gbGVuOwotICAgIGlmIChsZW4pIHsKLSAgICAg
ICAgLy8gQWRkIHdoYXQgd2UgaGF2ZSBzb2ZhciB0byB0aGUgYmxvY2sKLSAgICAgICAgdW5zaWdu
ZWQgY2hhciogcDsKLSAgICAgICAgaWYgKG1fc3RhdGUgPT0gR0lGR2xvYmFsQ29sb3JtYXApCi0g
ICAgICAgICAgICBwID0gbV9nbG9iYWxDb2xvcm1hcDsKLSAgICAgICAgZWxzZSBpZiAobV9zdGF0
ZSA9PSBHSUZJbWFnZUNvbG9ybWFwKQotICAgICAgICAgICAgcCA9IG1fZnJhbWVDb250ZXh0ID8g
bV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXAgOiAwOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBwID0gbV9ob2xkOwotICAgICAgICBpZiAocCkKLSAgICAgICAgICAgIG1lbWNweShwLCBi
dWYsIGxlbik7Ci0gICAgICAgIG1fYnl0ZXNUb0NvbnN1bWUgLT0gbGVuOwotICAgIH0KLQotICAg
IGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGllbnQtPmRlY29kaW5nSGFsdGVkKDApOworICAg
IHNldFJlbWFpbmluZ0J5dGVzKGxlbik7CiAgICAgcmV0dXJuIGZhbHNlOwogfQorCit2b2lkIEdJ
RkltYWdlUmVhZGVyOjpzZXRSZW1haW5pbmdCeXRlcyhzaXplX3QgcmVtYWluaW5nQnl0ZXMpCit7
CisgICAgQVNTRVJUKHJlbWFpbmluZ0J5dGVzIDw9IG1fZGF0YS0+c2l6ZSgpKTsKKyAgICBtX2J5
dGVzUmVhZCA9IG1fZGF0YS0+c2l6ZSgpIC0gcmVtYWluaW5nQnl0ZXM7Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFk
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZVJlYWRlci5oCmluZGV4IGMwODI5MThjNDMxNjZiMzgwMjllYmRmNGYyNGNmMzRkZTY5ZDc0OWIu
LmMyZTMzZTE3MjM4YzRjYThiYmYwMTg3MGM2NjFhZjVhNzdjMTkwZGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFn
ZVJlYWRlci5oCkBAIC00MSwxMSArNDEsMTIgQEAKIC8vIERlZmluZSBvdXJzZWx2ZXMgYXMgdGhl
IGNsaWVudFB0ci4gIE1vemlsbGEganVzdCBoYWNrZWQgdGhlaXIgQysrIGNhbGxiYWNrIGNsYXNz
IGludG8gdGhpcyBvbGQgQyBkZWNvZGVyLAogLy8gc28gd2Ugd2lsbCB0b28uCiAjaW5jbHVkZSAi
R0lGSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAKICNkZWZpbmUg
TUFYX0xaV19CSVRTICAgICAgICAgIDEyCiAjZGVmaW5lIE1BWF9CSVRTICAgICAgICAgICAgNDA5
NyAvKiAyXk1BWF9MWldfQklUUysxICovCiAjZGVmaW5lIE1BWF9DT0xPUlMgICAgICAgICAgIDI1
NgotI2RlZmluZSBNQVhfSE9MRF9TSVpFICAgICAgICAyNTYKKyNkZWZpbmUgR0lGX0NPTE9SUyAg
ICAgICAgICAgICAzCiAKIGNvbnN0IGludCBjTG9vcENvdW50Tm90U2VlbiA9IC0yOwogCkBAIC0x
MDMsNyArMTA0LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGhlaWdodDsKICAgICBpbnQgdHBp
eGVsOyAvLyBJbmRleCBvZiB0cmFuc3BhcmVudCBwaXhlbC4KICAgICBXZWJDb3JlOjpJbWFnZUZy
YW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bvc2FsTWV0aG9kOyAvLyBSZXN0b3JlIHRvIGJh
Y2tncm91bmQsIGxlYXZlIGluIHBsYWNlLCBldGMuCi0gICAgdW5zaWduZWQgY2hhciAqbG9jYWxD
b2xvcm1hcDsgLy8gUGVyLWltYWdlIGNvbG9ybWFwLgorICAgIHNpemVfdCBsb2NhbENvbG9ybWFw
UG9zaXRpb247IC8vIFBlci1pbWFnZSBjb2xvcm1hcC4KICAgICBpbnQgbG9jYWxDb2xvcm1hcFNp
emU7IC8vIFNpemUgb2YgbG9jYWwgY29sb3JtYXAgYXJyYXkuCiAgICAgCiAgICAgYm9vbCBpc0xv
Y2FsQ29sb3JtYXBEZWZpbmVkIDogMTsKQEAgLTE0MCw3ICsxNDEsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICwgaGVpZ2h0KDApCiAgICAgICAgICwgdHBpeGVsKDApCiAgICAgICAgICwgZGlzcG9zYWxN
ZXRob2QoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RGlzcG9zZU5vdFNwZWNpZmllZCkKLSAgICAgICAg
LCBsb2NhbENvbG9ybWFwKDApCisgICAgICAgICwgbG9jYWxDb2xvcm1hcFBvc2l0aW9uKDApCiAg
ICAgICAgICwgbG9jYWxDb2xvcm1hcFNpemUoMCkKICAgICAgICAgLCBpc0xvY2FsQ29sb3JtYXBE
ZWZpbmVkKGZhbHNlKQogICAgICAgICAsIHByb2dyZXNzaXZlRGlzcGxheShmYWxzZSkKQEAgLTE1
Niw3ICsxNTcsNiBAQCBwdWJsaWM6CiAgICAgfkdJRkZyYW1lQ29udGV4dCgpCiAgICAgewogICAg
ICAgICBkZWxldGUgW10gcm93YnVmOwotICAgICAgICBkZWxldGUgW10gbG9jYWxDb2xvcm1hcDsK
ICAgICAgICAgZGVsZXRlIFtdIHByZWZpeDsKICAgICAgICAgZGVsZXRlIFtdIHN1ZmZpeDsKICAg
ICAgICAgZGVsZXRlIFtdIHN0YWNrOwpAQCAtMTY5LDY2ICsxNjksODcgQEAgcHVibGljOgogICAg
IEdJRkltYWdlUmVhZGVyKFdlYkNvcmU6OkdJRkltYWdlRGVjb2RlciogY2xpZW50ID0gMCkKICAg
ICAgICAgOiBtX2NsaWVudChjbGllbnQpCiAgICAgICAgICwgbV9zdGF0ZShHSUZUeXBlKQotICAg
ICAgICAsIG1fYnl0ZXNUb0NvbnN1bWUoNikKLSAgICAgICAgLCBtX2J5dGVzSW5Ib2xkKDApCi0g
ICAgICAgICwgbV9nbG9iYWxDb2xvcm1hcCgwKQorICAgICAgICAsIG1fYnl0ZXNUb0NvbnN1bWUo
NikgLy8gTnVtYmVyIG9mIGJ5dGVzIGZvciBHSUYgdHlwZSwgZWl0aGVyICJHSUY4N2EiIG9yICJH
SUY4OWEiLgorICAgICAgICAsIG1fYnl0ZXNSZWFkKDApCiAgICAgICAgICwgbV9zY3JlZW5CZ2Nv
bG9yKDApCiAgICAgICAgICwgbV92ZXJzaW9uKDApCiAgICAgICAgICwgbV9zY3JlZW5XaWR0aCgw
KQogICAgICAgICAsIG1fc2NyZWVuSGVpZ2h0KDApCisgICAgICAgICwgbV9pc0dsb2JhbENvbG9y
bWFwRGVmaW5lZChmYWxzZSkKKyAgICAgICAgLCBtX2dsb2JhbENvbG9ybWFwUG9zaXRpb24oMCkK
ICAgICAgICAgLCBtX2dsb2JhbENvbG9ybWFwU2l6ZSgwKQogICAgICAgICAsIG1faW1hZ2VzRGVj
b2RlZCgwKQogICAgICAgICAsIG1faW1hZ2VzQ291bnQoMCkKICAgICAgICAgLCBtX2xvb3BDb3Vu
dChjTG9vcENvdW50Tm90U2VlbikKLSAgICAgICAgLCBtX2NvdW50KDApCiAgICAgICAgICwgbV9m
cmFtZUNvbnRleHQoMCkKICAgICB7CiAgICAgfQogCiAgICAgfkdJRkltYWdlUmVhZGVyKCkKICAg
ICB7Ci0gICAgICAgIGRlbGV0ZSBbXSBtX2dsb2JhbENvbG9ybWFwOwotICAgICAgICBtX2dsb2Jh
bENvbG9ybWFwID0gMDsKLQogICAgICAgICBkZWxldGUgbV9mcmFtZUNvbnRleHQ7CiAgICAgICAg
IG1fZnJhbWVDb250ZXh0ID0gMDsKICAgICB9CiAKLSAgICBib29sIHJlYWQoY29uc3QgdW5zaWdu
ZWQgY2hhciogYnVmLCB1bnNpZ25lZCBudW1ieXRlcywgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVy
OjpHSUZRdWVyeSA9IFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5LCB1bnNp
Z25lZCBoYWx0QXRGcmFtZSA9IC0xKTsKKyAgICB2b2lkIHNldERhdGEoUGFzc1JlZlB0cjxXZWJD
b3JlOjpTaGFyZWRCdWZmZXI+IGRhdGEpIHsgbV9kYXRhID0gZGF0YTsgfQorICAgIGJvb2wgZGVj
b2RlKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnksIHVuc2lnbmVkIGhhbHRBdEZy
YW1lKTsKIAogICAgIGludCBpbWFnZXNDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VzQ291
bnQ7IH0KICAgICBpbnQgbG9vcENvdW50KCkgY29uc3QgeyByZXR1cm4gbV9sb29wQ291bnQ7IH0K
LSAgICB1bnNpZ25lZCBjaGFyKiBnbG9iYWxDb2xvcm1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xv
YmFsQ29sb3JtYXA7IH0KLSAgICBpbnQgZ2xvYmFsQ29sb3JtYXBTaXplKCkgY29uc3QgeyByZXR1
cm4gbV9nbG9iYWxDb2xvcm1hcFNpemU7IH0KKworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGds
b2JhbENvbG9ybWFwKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lzR2xvYmFsQ29s
b3JtYXBEZWZpbmVkID8gZGF0YShtX2dsb2JhbENvbG9ybWFwUG9zaXRpb24pIDogMDsKKyAgICB9
CisgICAgaW50IGdsb2JhbENvbG9ybWFwU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9pc0dsb2JhbENvbG9ybWFwRGVmaW5lZCA/IG1fZ2xvYmFsQ29sb3JtYXBTaXplIDogMDsK
KyAgICB9CisKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBsb2NhbENvbG9ybWFwKGNvbnN0IEdJ
RkZyYW1lQ29udGV4dCogZnJhbWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZnJhbWUt
PmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPyBkYXRhKGZyYW1lLT5sb2NhbENvbG9ybWFwUG9zaXRp
b24pIDogMDsKKyAgICB9CisgICAgaW50IGxvY2FsQ29sb3JtYXBTaXplKGNvbnN0IEdJRkZyYW1l
Q29udGV4dCogZnJhbWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZnJhbWUtPmlzTG9j
YWxDb2xvcm1hcERlZmluZWQgPyBmcmFtZS0+bG9jYWxDb2xvcm1hcFNpemUgOiAwOworICAgIH0K
KwogICAgIGNvbnN0IEdJRkZyYW1lQ29udGV4dCogZnJhbWVDb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9mcmFtZUNvbnRleHQ7IH0KIAogcHJpdmF0ZToKKyAgICBib29sIGRlY29kZUludGVybmFs
KHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBsZW4sIFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rl
cjo6R0lGUXVlcnksIHVuc2lnbmVkIGhhbHRBdEZyYW1lKTsKICAgICBib29sIG91dHB1dFJvdygp
OwotICAgIGJvb2wgZG9MWlcoY29uc3QgdW5zaWduZWQgY2hhciAqcSk7CisgICAgYm9vbCBkb0xa
Vyhjb25zdCB1bnNpZ25lZCBjaGFyICosIHNpemVfdCk7CisgICAgdm9pZCBzZXRSZW1haW5pbmdC
eXRlcyhzaXplX3QpOworCisgICAgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YShzaXplX3QgZGF0
YVBvc2l0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgdW5zaWduZWQgY2hhcio+KG1fZGF0YS0+ZGF0YSgpKSArIGRhdGFQb3NpdGlvbjsKKyAg
ICB9CiAKICAgICBXZWJDb3JlOjpHSUZJbWFnZURlY29kZXIqIG1fY2xpZW50OwogCiAgICAgLy8g
UGFyc2luZyBzdGF0ZSBtYWNoaW5lLgogICAgIEdJRlN0YXRlIG1fc3RhdGU7IC8vIEN1cnJlbnQg
ZGVjb2RlciBtYXN0ZXIgc3RhdGUuCi0gICAgdW5zaWduZWQgbV9ieXRlc1RvQ29uc3VtZTsgLy8g
TnVtYmVyIG9mIGJ5dGVzIHRvIGFjY3VtdWxhdGUuCi0gICAgdW5zaWduZWQgbV9ieXRlc0luSG9s
ZDsgLy8gYnl0ZXMgYWNjdW11bGF0ZWQgc28gZmFyLgotICAgIHVuc2lnbmVkIGNoYXIgbV9ob2xk
W01BWF9IT0xEX1NJWkVdOyAvLyBBY2N1bXVsYXRpb24gYnVmZmVyLgotICAgIHVuc2lnbmVkIGNo
YXIqIG1fZ2xvYmFsQ29sb3JtYXA7IC8vICgzKiBNQVhfQ09MT1JTIGluIHNpemUpIERlZmF1bHQg
Y29sb3JtYXAgaWYgbG9jYWwgbm90IHN1cHBsaWVkLCAzIGJ5dGVzIGZvciBlYWNoIGNvbG9yLgor
ICAgIHNpemVfdCBtX2J5dGVzVG9Db25zdW1lOyAvLyBOdW1iZXIgb2YgYnl0ZXMgdG8gY29uc3Vt
ZSBmb3IgbmV4dCBzdGFnZSBvZiBwYXJzaW5nLgorICAgIHNpemVfdCBtX2J5dGVzUmVhZDsgLy8g
TnVtYmVyIG9mIGJ5dGVzIHByb2Nlc3NlZC4KICAgICAKICAgICAvLyBHbG9iYWwgKG11bHRpLWlt
YWdlKSBzdGF0ZS4KICAgICBpbnQgbV9zY3JlZW5CZ2NvbG9yOyAvLyBMb2dpY2FsIHNjcmVlbiBi
YWNrZ3JvdW5kIGNvbG9yLgogICAgIGludCBtX3ZlcnNpb247IC8vIEVpdGhlciA4OSBmb3IgR0lG
ODkgb3IgODcgZm9yIEdJRjg3LgogICAgIHVuc2lnbmVkIG1fc2NyZWVuV2lkdGg7IC8vIExvZ2lj
YWwgc2NyZWVuIHdpZHRoICYgaGVpZ2h0LgogICAgIHVuc2lnbmVkIG1fc2NyZWVuSGVpZ2h0Owor
ICAgIGJvb2wgbV9pc0dsb2JhbENvbG9ybWFwRGVmaW5lZDsKKyAgICBzaXplX3QgbV9nbG9iYWxD
b2xvcm1hcFBvc2l0aW9uOyAvLyAoMyogTUFYX0NPTE9SUyBpbiBzaXplKSBEZWZhdWx0IGNvbG9y
bWFwIGlmIGxvY2FsIG5vdCBzdXBwbGllZCwgMyBieXRlcyBmb3IgZWFjaCBjb2xvci4KICAgICBp
bnQgbV9nbG9iYWxDb2xvcm1hcFNpemU7IC8vIFNpemUgb2YgZ2xvYmFsIGNvbG9ybWFwIGFycmF5
LgogICAgIHVuc2lnbmVkIG1faW1hZ2VzRGVjb2RlZDsgLy8gQ291bnRzIGNvbXBsZXRlZCBmcmFt
ZXMgZm9yIGFuaW1hdGVkIEdJRnMuCiAgICAgaW50IG1faW1hZ2VzQ291bnQ7IC8vIENvdW50ZWQg
YWxsIGZyYW1lcyBzZWVuIHNvIGZhciAoaW5jbHVkaW5nIGluY29tcGxldGUgZnJhbWVzKS4KICAg
ICBpbnQgbV9sb29wQ291bnQ7IC8vIE5ldHNjYXBlIHNwZWNpZmljIGV4dGVuc2lvbiBibG9jayB0
byBjb250cm9sIHRoZSBudW1iZXIgb2YgYW5pbWF0aW9uIGxvb3BzIGEgR0lGIHJlbmRlcnMuCiAg
ICAgCi0gICAgLy8gTm90IHJlYWxseSBnbG9iYWwsIGJ1dCBjb252ZW5pZW50IHRvIGxvY2F0ZSBo
ZXJlLgotICAgIGludCBtX2NvdW50OyAvLyBSZW1haW5pbmcgIyBieXRlcyBpbiBzdWItYmxvY2su
Ci0gICAgCiAgICAgR0lGRnJhbWVDb250ZXh0KiBtX2ZyYW1lQ29udGV4dDsKKworICAgIFJlZlB0
cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IG1fZGF0YTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwCmluZGV4IDgyMjU5YzIwZTM0NmY4MWNkZDlhYWM4N2E1ZTUwNzNhNGZh
YzllMmEuLjdhMTgyNWQzOGUyMTg0NjE3ZDYxNzE0ZjIyOTc5NDM4YzhlMGM0OGMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTY0Myw2ICs2NDMsNyBAQAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAjIFdlIHNob3VsZCBub3QgaW5jbHVkZSBmaWxlcyBkZXBlbmRpbmcg
b24gd2Via2l0X3N1cHBvcnQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhl
c2UgdGVzdHMgZGVwZW5kIG9uIHdlYmtpdF9zdXBwb3J0IGFuZAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAjIGZ1bmN0aW9ucyBkZWZpbmVkIG9ubHkgaW4gIVdFQktJVF9JTVBMRU1F
TlRBVElPTi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3RzL0dJRkltYWdl
RGVjb2RlclRlc3QuY3BwJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Rlc3Rz
L0xldmVsREJUZXN0LmNwcCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dl
YktpdC5neXBpCmluZGV4IGQ1ODExMjg4Y2ZlNGNmMzM3YWU0NzZhM2Q1NzI4N2ExYTEzMzFjMjku
LjNiMGE3YTUzZTU4MjNjNzFjYmU2ODJiNTcwNzRkZjU2ZjE0MTBjMWYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9XZWJLaXQuZ3lwaQpAQCAtNzIsNiArNzIsNyBAQAogICAgICAgICAgICAgJ3Rlc3RzL0Zy
YW1lTG9hZGVyQ2xpZW50SW1wbFRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9GcmFtZVRl
c3RIZWxwZXJzLmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvRnJhbWVUZXN0SGVscGVycy5oJywK
KyAgICAgICAgICAgICd0ZXN0cy9HSUZJbWFnZURlY29kZXJUZXN0LmNwcCcsCiAgICAgICAgICAg
ICAndGVzdHMvR3JhcGhpY3NMYXllckNocm9taXVtVGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rl
c3RzL0lEQkFib3J0T25Db3JydXB0VGVzdC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0lEQkJp
bmRpbmdVdGlsaXRpZXNUZXN0LmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0dJRkltYWdlRGVjb2RlclRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9HSUZJbWFnZURlY29kZXJUZXN0LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZDU0N2U5YWRjYzAw
MGFhMjkxNGZkMGRiZjdjYjRmYzI1M2NlZTk2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS90ZXN0cy9HSUZJbWFnZURlY29kZXJUZXN0LmNwcApAQCAtMCwwICsxLDE4
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoK
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAor
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkdJRkltYWdlRGVjb2Rlci5oIgor
CisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorI2lu
Y2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8cHVibGljL1dlYkRhdGEuaD4KKyNpbmNs
dWRlIDxwdWJsaWMvV2ViU2l6ZS5oPgorI2luY2x1ZGUgPHdlYmtpdC9zdXBwb3J0L3dlYmtpdF9z
dXBwb3J0Lmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzT3du
UHRyLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktp
dDsKKworbmFtZXNwYWNlIHsKKworc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiByZWFk
RmlsZShjb25zdCBjaGFyKiBmaWxlTmFtZSkKK3sKKyAgICBTdHJpbmcgZmlsZVBhdGggPSB3ZWJr
aXRfc3VwcG9ydDo6R2V0V2ViS2l0Um9vdERpcigpOworICAgIGZpbGVQYXRoLmFwcGVuZChmaWxl
TmFtZSk7CisKKyAgICBsb25nIGxvbmcgZmlsZVNpemU7CisgICAgaWYgKCFnZXRGaWxlU2l6ZShm
aWxlUGF0aCwgZmlsZVNpemUpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFBsYXRmb3JtRmls
ZUhhbmRsZSBoYW5kbGUgPSBvcGVuRmlsZShmaWxlUGF0aCwgT3BlbkZvclJlYWQpOworICAgIGlu
dCBmaWxlTGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50PihmaWxlU2l6ZSk7CisgICAgVmVjdG9yPGNo
YXI+IGJ1ZmZlcihmaWxlTGVuZ3RoKTsKKyAgICByZWFkRnJvbUZpbGUoaGFuZGxlLCBidWZmZXIu
ZGF0YSgpLCBmaWxlTGVuZ3RoKTsKKyAgICBjbG9zZUZpbGUoaGFuZGxlKTsKKyAgICByZXR1cm4g
U2hhcmVkQnVmZmVyOjphZG9wdFZlY3RvcihidWZmZXIpOworfQorCitURVNUKEdJRkltYWdlRGVj
b2RlclRlc3QsIGRlY29kZVR3b0ZyYW1lcykKK3sKKyAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVy
PiBkZWNvZGVyKGFkb3B0UHRyKG5ldyBHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhh
Tm90UHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGll
ZCkpKTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSByZWFkRmlsZSgiL0xheW91
dFRlc3RzL2Zhc3QvaW1hZ2VzL3Jlc291cmNlcy9hbmltYXRlZC5naWYiKTsKKyAgICBBU1NFUlRf
VFJVRShkYXRhLmdldCgpKTsKKyAgICBkZWNvZGVyLT5zZXREYXRhKGRhdGEuZ2V0KCksIHRydWUp
OworICAgIEVYUEVDVF9FUShjQW5pbWF0aW9uTG9vcE9uY2UsIGRlY29kZXItPnJlcGV0aXRpb25D
b3VudCgpKTsKKworICAgIEltYWdlRnJhbWUqIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJB
dEluZGV4KDApOworICAgIEVYUEVDVF9FUShJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlLCBmcmFt
ZS0+c3RhdHVzKCkpOworICAgIEVYUEVDVF9FUSgxNiwgZnJhbWUtPmdldFNrQml0bWFwKCkud2lk
dGgoKSk7CisgICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+Z2V0U2tCaXRtYXAoKS5oZWlnaHQoKSk7
CisKKyAgICBmcmFtZSA9IGRlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgxKTsKKyAgICBFWFBF
Q1RfRVEoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSwgZnJhbWUtPnN0YXR1cygpKTsKKyAgICBF
WFBFQ1RfRVEoMTYsIGZyYW1lLT5nZXRTa0JpdG1hcCgpLndpZHRoKCkpOworICAgIEVYUEVDVF9F
USgxNiwgZnJhbWUtPmdldFNrQml0bWFwKCkuaGVpZ2h0KCkpOworCisgICAgRVhQRUNUX0VRKDJ1
LCBkZWNvZGVyLT5mcmFtZUNvdW50KCkpOworICAgIEVYUEVDVF9FUShjQW5pbWF0aW9uTG9vcElu
ZmluaXRlLCBkZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSk7Cit9CisKK1RFU1QoR0lGSW1hZ2VE
ZWNvZGVyVGVzdCwgcGFyc2VBbmREZWNvZGUpCit7CisgICAgT3duUHRyPEdJRkltYWdlRGVjb2Rl
cj4gZGVjb2RlcihhZG9wdFB0cihuZXcgR0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBo
YU5vdFByZW11bHRpcGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxp
ZWQpKSk7CisKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gcmVhZEZpbGUoIi9MYXlv
dXRUZXN0cy9mYXN0L2ltYWdlcy9yZXNvdXJjZXMvYW5pbWF0ZWQuZ2lmIik7CisgICAgQVNTRVJU
X1RSVUUoZGF0YS5nZXQoKSk7CisgICAgZGVjb2Rlci0+c2V0RGF0YShkYXRhLmdldCgpLCB0cnVl
KTsKKyAgICBFWFBFQ1RfRVEoY0FuaW1hdGlvbkxvb3BPbmNlLCBkZWNvZGVyLT5yZXBldGl0aW9u
Q291bnQoKSk7CisKKyAgICAvLyBUaGlzIGNhbGwgd2lsbCBwYXJzZSB0aGUgZW50aXJlIGZpbGUu
CisgICAgRVhQRUNUX0VRKDJ1LCBkZWNvZGVyLT5mcmFtZUNvdW50KCkpOworCisgICAgSW1hZ2VG
cmFtZSogZnJhbWUgPSBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMCk7CisgICAgRVhQRUNU
X0VRKEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUsIGZyYW1lLT5zdGF0dXMoKSk7CisgICAgRVhQ
RUNUX0VRKDE2LCBmcmFtZS0+Z2V0U2tCaXRtYXAoKS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEo
MTYsIGZyYW1lLT5nZXRTa0JpdG1hcCgpLmhlaWdodCgpKTsKKworICAgIGZyYW1lID0gZGVjb2Rl
ci0+ZnJhbWVCdWZmZXJBdEluZGV4KDEpOworICAgIEVYUEVDVF9FUShJbWFnZUZyYW1lOjpGcmFt
ZUNvbXBsZXRlLCBmcmFtZS0+c3RhdHVzKCkpOworICAgIEVYUEVDVF9FUSgxNiwgZnJhbWUtPmdl
dFNrQml0bWFwKCkud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+Z2V0U2tCaXRt
YXAoKS5oZWlnaHQoKSk7CisgICAgRVhQRUNUX0VRKGNBbmltYXRpb25Mb29wSW5maW5pdGUsIGRl
Y29kZXItPnJlcGV0aXRpb25Db3VudCgpKTsKK30KKworVEVTVChHSUZJbWFnZURlY29kZXJUZXN0
LCBwYXJzZUJ5dGVCeUJ5dGUpCit7CisgICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2Rl
cihhZG9wdFB0cihuZXcgR0lGSW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11
bHRpcGxpZWQsIEltYWdlU291cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CisK
KyAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiBkYXRhID0gcmVhZEZpbGUoIi9MYXlvdXRUZXN0cy9m
YXN0L2ltYWdlcy9yZXNvdXJjZXMvYW5pbWF0ZWQuZ2lmIik7CisgICAgQVNTRVJUX1RSVUUoZGF0
YS5nZXQoKSk7CisKKyAgICBzaXplX3QgZnJhbWVDb3VudCA9IDA7CisKKyAgICAvLyBQYXNzIGRh
dGEgdG8gZGVjb2RlciBieXRlIGJ5IGJ5dGUuCisgICAgZm9yICh1bnNpZ25lZCBsZW5ndGggPSAx
OyBsZW5ndGggPD0gZGF0YS0+c2l6ZSgpOyArK2xlbmd0aCkgeworICAgICAgICBSZWZQdHI8U2hh
cmVkQnVmZmVyPiB0ZW1wRGF0YSA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEtPmRhdGEoKSwg
bGVuZ3RoKTsKKyAgICAgICAgZGVjb2Rlci0+c2V0RGF0YSh0ZW1wRGF0YS5nZXQoKSwgbGVuZ3Ro
ID09IGRhdGEtPnNpemUoKSk7CisKKyAgICAgICAgRVhQRUNUX0xFKGZyYW1lQ291bnQsIGRlY29k
ZXItPmZyYW1lQ291bnQoKSk7CisgICAgICAgIGZyYW1lQ291bnQgPSBkZWNvZGVyLT5mcmFtZUNv
dW50KCk7CisgICAgfQorCisgICAgRVhQRUNUX0VRKDJ1LCBkZWNvZGVyLT5mcmFtZUNvdW50KCkp
OworCisgICAgZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDApOworICAgIGRlY29kZXItPmZy
YW1lQnVmZmVyQXRJbmRleCgxKTsKKyAgICBFWFBFQ1RfRVEoY0FuaW1hdGlvbkxvb3BJbmZpbml0
ZSwgZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkpOworfQorCitURVNUKEdJRkltYWdlRGVjb2Rl
clRlc3QsIHBhcnNlQW5kRGVjb2RlQnl0ZUJ5Qnl0ZSkKK3sKKyAgICBPd25QdHI8R0lGSW1hZ2VE
ZWNvZGVyPiBkZWNvZGVyKGFkb3B0UHRyKG5ldyBHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6
OkFscGhhTm90UHJlbXVsdGlwbGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxl
QXBwbGllZCkpKTsKKworICAgIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSByZWFkRmlsZSgi
L0xheW91dFRlc3RzL2Zhc3QvaW1hZ2VzL3Jlc291cmNlcy9hbmltYXRlZC1naWYtd2l0aC1vZmZz
ZXRzLmdpZiIpOworICAgIEFTU0VSVF9UUlVFKGRhdGEuZ2V0KCkpOworCisgICAgc2l6ZV90IGZy
YW1lQ291bnQgPSAwOworICAgIHNpemVfdCBmcmFtZXNEZWNvZGVkID0gMDsKKworICAgIC8vIFBh
c3MgZGF0YSB0byBkZWNvZGVyIGJ5dGUgYnkgYnl0ZS4KKyAgICBmb3IgKHVuc2lnbmVkIGxlbmd0
aCA9IDE7IGxlbmd0aCA8PSBkYXRhLT5zaXplKCk7ICsrbGVuZ3RoKSB7CisgICAgICAgIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IHRlbXBEYXRhID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YS0+ZGF0
YSgpLCBsZW5ndGgpOworICAgICAgICBkZWNvZGVyLT5zZXREYXRhKHRlbXBEYXRhLmdldCgpLCBs
ZW5ndGggPT0gZGF0YS0+c2l6ZSgpKTsKKworICAgICAgICBFWFBFQ1RfTEUoZnJhbWVDb3VudCwg
ZGVjb2Rlci0+ZnJhbWVDb3VudCgpKTsKKyAgICAgICAgZnJhbWVDb3VudCA9IGRlY29kZXItPmZy
YW1lQ291bnQoKTsKKworICAgICAgICBJbWFnZUZyYW1lKiBmcmFtZSA9IGRlY29kZXItPmZyYW1l
QnVmZmVyQXRJbmRleChmcmFtZUNvdW50IC0gMSk7CisgICAgICAgIGlmIChmcmFtZSAmJiBmcmFt
ZS0+c3RhdHVzKCkgPT0gSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSAmJiBmcmFtZXNEZWNvZGVk
IDwgZnJhbWVDb3VudCkKKyAgICAgICAgICAgICsrZnJhbWVzRGVjb2RlZDsKKyAgICB9CisKKyAg
ICBFWFBFQ1RfRVEoNXUsIGRlY29kZXItPmZyYW1lQ291bnQoKSk7CisgICAgRVhQRUNUX0VRKDV1
LCBmcmFtZXNEZWNvZGVkKTsKKyAgICBFWFBFQ1RfRVEoY0FuaW1hdGlvbkxvb3BJbmZpbml0ZSwg
ZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkpOworfQorCisvLyBTZWNvbmQgZnJhbWUgaW4gdGhl
IGZpbGUgaXMgYnJva2VuIGJ1dCB0ZXN0IHRoYXQgZmlyc3QgZnJhbWUgY2FuIGJlIGRlY29kZWQu
CitURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIGJyb2tlblNlY29uZEZyYW1lKQoreworICAgIE93
blB0cjxHSUZJbWFnZURlY29kZXI+IGRlY29kZXIoYWRvcHRQdHIobmV3IEdJRkltYWdlRGVjb2Rl
cihJbWFnZVNvdXJjZTo6QWxwaGFOb3RQcmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFB
bmRDb2xvclByb2ZpbGVBcHBsaWVkKSkpOworCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0
YSA9IHJlYWRGaWxlKCIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2Jyb2tlbi5n
aWYiKTsKKyAgICBBU1NFUlRfVFJVRShkYXRhLmdldCgpKTsKKyAgICBkZWNvZGVyLT5zZXREYXRh
KGRhdGEuZ2V0KCksIHRydWUpOworCisgICAgRVhQRUNUX0VRKDF1LCBkZWNvZGVyLT5mcmFtZUNv
dW50KCkpOworCisgICAgSW1hZ2VGcmFtZSogZnJhbWUgPSBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0
SW5kZXgoMCk7CisgICAgRVhQRUNUX0VRKEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUsIGZyYW1l
LT5zdGF0dXMoKSk7CisgICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+Z2V0U2tCaXRtYXAoKS53aWR0
aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTYsIGZyYW1lLT5nZXRTa0JpdG1hcCgpLmhlaWdodCgpKTsK
KworICAgIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDEpOworICAgIEVYUEVD
VF9GQUxTRShmcmFtZSk7CisgICAgRVhQRUNUX0VRKGNBbmltYXRpb25Mb29wT25jZSwgZGVjb2Rl
ci0+cmVwZXRpdGlvbkNvdW50KCkpOworfQorCit9IC8vIG5hbWVzcGFjZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2Jyb2tlbi5naWYgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3Rlc3RzL2RhdGEvYnJva2VuLmdpZgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lM2E3YzRlYmU3
ZDliZWE5ODM5NzVmODI5YTJlZGM4ZTU1ZDFmNzZkCkdJVCBiaW5hcnkgcGF0Y2gKbGl0ZXJhbCA5
MDYKemNtWj93YmhFSGI2a3Jmd198Q3c8a2R9NmFWSjQ2czEqMEpfMHoqTFlLZXdOMk5VKmJHZlVB
KzcwVyV7bzJvISZeCnp1eio1QjJTazlmMj9Le0wxMmN6PSRBJCQ1bj5tRUZWb3EjV2MoYDNhKj12
cisjempYUDg1dSEzPyV3NEdZUCFEYApLTyZjUlZaUG95UChJdmVBCgpsaXRlcmFsIDAKSGNtVj9k
MDAwMDEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>190158</attachid>
            <date>2013-02-25 16:58:44 -0800</date>
            <delta_ts>2013-02-26 11:51:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109662-20130225165500.patch</filename>
            <type>text/plain</type>
            <size>36911</size>
            <attacher name="Hin-Chung Lam">hclam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQzOTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTFkMzUxMmNkNDEyYzAx
MTE3YzdlN2FlMjc4ZTYwNmQ4YmYzNGVlZS4uYjdjNmU0NGJlNDIyMDFkYjk4ZjA0MjA1OWRlOTFh
MjhiNjQ0NjViZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEzLTAyLTIwICBBbHBo
YSBMYW0gIDxoY2xhbUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgdG8g
cmVhZCBmcm9tIHNvdXJjZSBkYXRhIGRpcmVjdGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk2NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHRoZSBmaXJzdCBwYXRjaCB0byBpbXByb3Zl
IEdJRiBpbWFnZSBkZWNvZGluZy4KKworICAgICAgICBHSUZJbWFnZVJlYWRlciBoYXMgYW4gaW50
ZXJuYWwgMjU2IGJ5dGVzIGJ1ZmZlciB0byBzYXZpbmcgaW5jb21pbmcKKyAgICAgICAgYnl0ZXMu
IFRoaXMgbWVjaGFuaXNtIGlzIG91dC1kYXRlZCBiZWNhdXNlIFdlYktpdCBob2xkcyB0aGUgZW50
aXJlCisgICAgICAgIGZpbGUgaW4gbWVtb3J5IGFuZCBpdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGhv
bGQgZGF0YSBpbiBhbiBpbnRlcm1lZGlhdGUKKyAgICAgICAgYnVmZmVyLgorCisgICAgICAgIFRo
aXMgaXMgYWxzbyBhIGJsb2NrZXIgZm9yIGxhdGVyIHdvcmsgdG8gcGFyc2UgYW5kIGRlY29kZSBH
SUYKKyAgICAgICAgaW5jcmVtZW50YWxseS4KKworICAgICAgICBUaGlzIGNoYW5nZSByZW1vdmVk
IHRoZSBpbXRlcm1lZGlhdGUgJ2hvbGQnIGJ1ZmZlciBhbmQgdXNlcyBhbiBpbmRleAorICAgICAg
ICBmb3IgZGF0YSBwb3NpdGlvbiB0byBrZWVwIHRyYWNrIG9mIHBhcnNpbmcgb2YgdGhlIEdJRiBm
aWxlLiBCdWZmZXIgZm9yCisgICAgICAgIGdsb2JhbCBjb2xvcm1hcCBhbmQgbG9jYWwgY29sb3Jt
YXAgYXJlIGFsc28gcmVtb3ZlZCBiZWNhdXNlIHRoZXkgY2FuIGJlCisgICAgICAgIHJlZmVyZW5j
ZWQgZnJvbSB0aGUgZGF0YSBzdHJlYW0uCisKKyAgICAgICAgVGhpcyBjaGFuZ2UgaXMgdGVzdGVk
IGJ5OgorCisgICAgICAgIExheW91dCB0ZXN0cworICAgICAgICBBbGwgdGVzdHMgcGFzc2VkIHVu
ZGVyIGZhc3QvaW1hZ2VzLgorCisgICAgICAgIFVuaXQgdGVzdHMKKyAgICAgICAgQWRkZWQgR0lG
SW1hZ2VEZWNvZGVyVGVzdCBmb3IgQ2hyb21pdW0uCisKKyAgICAgICAgTG9jYWwgdGVzdGluZwor
ICAgICAgICBJIHRlc3RlZCB0aGlzIGltcGxlbWVudGF0aW9uIGFnYWluc3QgYSBzZXQgb2YgNTBr
IEdJRiBpbWFnZXMgYW5kCisgICAgICAgIHRoZXJlJ3Mgbm8gY3Jhc2hlcyBhbmQgcHJvZHVjZXMg
Yml0LWV4YWN0IHJlc3VsdHMgYXMgcHJldmlvdXMgY29kZS4KKworICAgICAgICAqIHBsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R0lGSW1hZ2VEZWNvZGVyOjpzZXREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdl
RGVjb2Rlcjo6ZnJhbWVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpHSUZJbWFnZURlY29kZXI6
OmhhdmVEZWNvZGVkUm93KToKKyAgICAgICAgKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6ZGVj
b2RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFk
ZXIuY3BwOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmRvTFpXKToKKyAgICAgICAgKEdJRklt
YWdlUmVhZGVyOjpkZWNvZGUpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmRlY29kZUludGVy
bmFsKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpzZXRSZW1haW5pbmdCeXRlcyk6CisgICAg
ICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRkltYWdlUmVhZGVyLmg6CisgICAg
ICAgIChHSUZGcmFtZUNvbnRleHQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0OjpHSUZGcmFt
ZUNvbnRleHQpOgorICAgICAgICAoR0lGRnJhbWVDb250ZXh0Ojp+R0lGRnJhbWVDb250ZXh0KToK
KyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpHSUZJbWFnZVJlYWRlcik6CisgICAgICAgIChHSUZJ
bWFnZVJlYWRlcjo6fkdJRkltYWdlUmVhZGVyKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyOjpz
ZXREYXRhKToKKyAgICAgICAgKEdJRkltYWdlUmVhZGVyKToKKyAgICAgICAgKEdJRkltYWdlUmVh
ZGVyOjpnbG9iYWxDb2xvcm1hcCk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6bG9jYWxDb2xv
cm1hcCk6CisgICAgICAgIChHSUZJbWFnZVJlYWRlcjo6bG9jYWxDb2xvcm1hcFNpemUpOgorICAg
ICAgICAoR0lGSW1hZ2VSZWFkZXI6OmRhdGEpOgorICAgICAgICAoR0lGSW1hZ2VSZWFkZXI6OmNv
bG9ybWFwKToKKwogMjAxMy0wMi0yNSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4K
IAogICAgICAgICBOb3JtYWxpemUgRU5BQkxFX0VOQ1JZUFRFRF9NRURJQSBkZWZpbml0aW9ucyBh
Y3Jvc3MgYWxsIEZlYXR1cmVEZWZpbmVzIGZpbGVzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpp
bmRleCAzM2FjYTY1YTk2MTU4NzhjNWMyM2FhNzM2OGZhMzY1MWY3NjhhNDlkLi4wYzU5NWY5NDFk
OGM2NGMwOGNkODVlNmRiMTAyZGJkMGMzOTllNmM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDM1IEBACisyMDEzLTAyLTIwICBBbHBoYSBMYW0gIDxoY2xhbUBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgR0lGSW1hZ2VSZWFkZXIgdG8gcmVhZCBmcm9tIHNvdXJjZSBkYXRh
IGRpcmVjdGx5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMDk2NjIKKworICAgICAgICBBZGRlZCB0aGUgZm9sbG93aW5nIHVuaXQgdGVzdHMgdG8gdGVz
dCBuZXcgbG9naWMgaW4gR0lGSW1hZ2VEZWNvZGVyOgorCisgICAgICAgIEdJRkltYWdlRGVjb2Rl
clRlc3QuZGVjb2RlVHdvRnJhbWVzCisgICAgICAgIFRlc3QgdGhhdCBpdCBjYW4gZGVjb2RlIGEg
bXVsdGktZnJhbWUgR0lGIGltYWdlIGNvcnJlY3RseS4KKworICAgICAgICBHSUZJbWFnZURlY29k
ZXJUZXN0LnBhcnNlQW5kRGVjb2RlCisgICAgICAgIEZpcnN0IHBlcmZvcm0gYSBwYXJzZSBvcGVy
YXRpb24gYW5kIHRoZW4gYSBkZWNvZGUgb3BlcmF0aW9uLiBFeHBlY3QKKyAgICAgICAgdGhhdCBw
YXJzZSBhbmQgZGVjb2RlIG9wZXJhdGVzIGNvcnJlY3RseS4KKworICAgICAgICBHSUZJbWFnZURl
Y29kZXJUZXN0LnBhcnNlQnl0ZUJ5Qnl0ZQorICAgICAgICBUZXN0IHRoYXQgbXVsdGktZnJhbWUg
R0lGIGltYWdlIGNhbiBiZSBwYXJzZWQgY29ycmVjdGx5IGJ5dGUgYnkgYnl0ZS4KKworICAgICAg
ICBHSUZJbWFnZURlY29kZXJUZXN0LnBhcnNlQW5kRGVjb2RlQnl0ZUJ5Qnl0ZQorICAgICAgICBS
dW4gYSBsb29wIHRvIGZlZWQgZGVjb2RlciBieXRlIGJ5IGJ5dGUsIHBlcmZvcm0gYSBwYXJzZSBh
bmQgdGhlbgorICAgICAgICBkZWNvZGUgb3BlcmF0aW9uIGFuZCBtYWtlIHN1cmUgZnJhbWVzIGFy
ZSBkZWNvZGVkIGNvcnJlY3RseS4KKworICAgICAgICBHSUZJbWFnZURlY29kZXJUZXN0LmJyb2tl
blNlY29uZEZyYW1lCisgICAgICAgIERlY29kZSBhIEdJRiBpbWFnZSB3aXRoIHNlY29uZCBmcmFt
ZSBicm9rZW4uIEV4cGVjdCB0aGF0IHRoZSBmaXJzdAorICAgICAgICBmcmFtZSBjYW4gYmUgZGVj
b2RlZCBjb3JyZWN0bHkuCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwaToKKyAgICAgICAgKiB0ZXN0
cy9HSUZJbWFnZURlY29kZXJUZXN0LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQpOgorICAg
ICAgICAoV2ViS2l0OjpyZWFkRmlsZSk6CisgICAgICAgIChXZWJLaXQ6OlRFU1QpOgorICAgICAg
ICAqIHRlc3RzL2RhdGEvYnJva2VuLmdpZjogQWRkZWQuCisKIDIwMTMtMDItMjUgIFNoZXJpZmYg
Qm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHIxNDM5MzYuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCmluZGV4IDBj
YjIyODg1Y2ViM2Q2YjE2YjIzNWY4MTliOThhMjViOTNiYWZkOGIuLjZhNTE0MDk4NDZjMDA1MDAw
YzkyNzBhM2ZjYTU4OTgyODk3NWEzZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZURlY29kZXIuY3BwCkBA
IC0zNyw3ICszNyw2IEBAIEdJRkltYWdlRGVjb2Rlcjo6R0lGSW1hZ2VEZWNvZGVyKEltYWdlU291
cmNlOjpBbHBoYU9wdGlvbiBhbHBoYU9wdGlvbiwKICAgICA6IEltYWdlRGVjb2RlcihhbHBoYU9w
dGlvbiwgZ2FtbWFBbmRDb2xvclByb2ZpbGVPcHRpb24pCiAgICAgLCBtX2FscmVhZHlTY2FubmVk
VGhpc0RhdGFGb3JGcmFtZUNvdW50KHRydWUpCiAgICAgLCBtX3JlcGV0aXRpb25Db3VudChjQW5p
bWF0aW9uTG9vcE9uY2UpCi0gICAgLCBtX3JlYWRPZmZzZXQoMCkKIHsKIH0KIApAQCAtNTEsNiAr
NTAsOCBAQCB2b2lkIEdJRkltYWdlRGVjb2Rlcjo6c2V0RGF0YShTaGFyZWRCdWZmZXIqIGRhdGEs
IGJvb2wgYWxsRGF0YVJlY2VpdmVkKQogICAgICAgICByZXR1cm47CiAKICAgICBJbWFnZURlY29k
ZXI6OnNldERhdGEoZGF0YSwgYWxsRGF0YVJlY2VpdmVkKTsKKyAgICBpZiAobV9yZWFkZXIpCisg
ICAgICAgIG1fcmVhZGVyLT5zZXREYXRhKGRhdGEpOwogCiAgICAgLy8gV2UgbmVlZCB0byByZXNj
YW4gdGhlIGZyYW1lIGNvdW50LCBhcyB0aGUgbmV3IGRhdGEgbWF5IGhhdmUgY2hhbmdlZCBpdC4K
ICAgICBtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50ID0gZmFsc2U7CkBAIC04
NSw3ICs4Niw4IEBAIHNpemVfdCBHSUZJbWFnZURlY29kZXI6OmZyYW1lQ291bnQoKQogICAgICAg
ICAvLyBhbGwgdGhlIGRhdGEuICBOb3RlIHRoYXQgdGhpcyBpcyBubyB3b3JzZSB0aGFuIHdoYXQg
SW1hZ2VJTyBkb2VzIG9uCiAgICAgICAgIC8vIE1hYyByaWdodCBub3cgKGl0IGFsc28gY3Jhd2xz
IGFsbCB0aGUgZGF0YSBhZ2FpbikuCiAgICAgICAgIEdJRkltYWdlUmVhZGVyIHJlYWRlcigwKTsK
LSAgICAgICAgcmVhZGVyLnJlYWQoKGNvbnN0IHVuc2lnbmVkIGNoYXIqKW1fZGF0YS0+ZGF0YSgp
LCBtX2RhdGEtPnNpemUoKSwgR0lGRnJhbWVDb3VudFF1ZXJ5LCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oLTEpKTsKKyAgICAgICAgcmVhZGVyLnNldERhdGEobV9kYXRhKTsKKyAgICAgICAgcmVhZGVy
LmRlY29kZShHSUZGcmFtZUNvdW50UXVlcnksIHN0YXRpY19jYXN0PHVuc2lnbmVkPigtMSkpOwog
ICAgICAgICBtX2FscmVhZHlTY2FubmVkVGhpc0RhdGFGb3JGcmFtZUNvdW50ID0gdHJ1ZTsKICAg
ICAgICAgbV9mcmFtZUJ1ZmZlckNhY2hlLnJlc2l6ZShyZWFkZXIuaW1hZ2VzQ291bnQoKSk7CiAg
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcmVhZGVyLmltYWdlc0NvdW50KCk7ICsraSkKQEAg
LTE5MSwxMSArMTkzLDYgQEAgdm9pZCBHSUZJbWFnZURlY29kZXI6OmNsZWFyRnJhbWVCdWZmZXJD
YWNoZShzaXplX3QgY2xlYXJCZWZvcmVGcmFtZSkKICAgICB9CiB9CiAKLXZvaWQgR0lGSW1hZ2VE
ZWNvZGVyOjpkZWNvZGluZ0hhbHRlZCh1bnNpZ25lZCBieXRlc0xlZnQpCi17Ci0gICAgbV9yZWFk
T2Zmc2V0ID0gbV9kYXRhLT5zaXplKCkgLSBieXRlc0xlZnQ7Ci19Ci0KIGJvb2wgR0lGSW1hZ2VE
ZWNvZGVyOjpoYXZlRGVjb2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBjaGFy
KiByb3dCdWZmZXIsIHVuc2lnbmVkIGNoYXIqIHJvd0VuZCwgdW5zaWduZWQgcm93TnVtYmVyLCB1
bnNpZ25lZCByZXBlYXRDb3VudCwgYm9vbCB3cml0ZVRyYW5zcGFyZW50UGl4ZWxzKQogewogICAg
IGNvbnN0IEdJRkZyYW1lQ29udGV4dCogZnJhbWVDb250ZXh0ID0gbV9yZWFkZXItPmZyYW1lQ29u
dGV4dCgpOwpAQCAtMjE2LDggKzIxMyw4IEBAIGJvb2wgR0lGSW1hZ2VEZWNvZGVyOjpoYXZlRGVj
b2RlZFJvdyh1bnNpZ25lZCBmcmFtZUluZGV4LCB1bnNpZ25lZCBjaGFyKiByb3dCdWZmCiAgICAg
Y29uc3QgdW5zaWduZWQgY2hhciogY29sb3JNYXA7CiAgICAgdW5zaWduZWQgY29sb3JNYXBTaXpl
OwogICAgIGlmIChmcmFtZUNvbnRleHQtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQpIHsKLSAgICAg
ICAgY29sb3JNYXAgPSBmcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXA7Ci0gICAgICAgIGNvbG9y
TWFwU2l6ZSA9ICh1bnNpZ25lZClmcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXBTaXplOworICAg
ICAgICBjb2xvck1hcCA9IG1fcmVhZGVyLT5sb2NhbENvbG9ybWFwKGZyYW1lQ29udGV4dCk7Cisg
ICAgICAgIGNvbG9yTWFwU2l6ZSA9IG1fcmVhZGVyLT5sb2NhbENvbG9ybWFwU2l6ZShmcmFtZUNv
bnRleHQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNvbG9yTWFwID0gbV9yZWFkZXItPmdsb2Jh
bENvbG9ybWFwKCk7CiAgICAgICAgIGNvbG9yTWFwU2l6ZSA9IG1fcmVhZGVyLT5nbG9iYWxDb2xv
cm1hcFNpemUoKTsKQEAgLTMxOSwxMiArMzE2LDE0IEBAIHZvaWQgR0lGSW1hZ2VEZWNvZGVyOjpk
ZWNvZGUodW5zaWduZWQgaGFsdEF0RnJhbWUsIEdJRlF1ZXJ5IHF1ZXJ5KQogICAgIGlmIChmYWls
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFtX3JlYWRlcikKKyAgICBpZiAoIW1f
cmVhZGVyKSB7CiAgICAgICAgIG1fcmVhZGVyID0gYWRvcHRQdHIobmV3IEdJRkltYWdlUmVhZGVy
KHRoaXMpKTsKKyAgICAgICAgbV9yZWFkZXItPnNldERhdGEobV9kYXRhKTsKKyAgICB9CiAKICAg
ICAvLyBJZiB3ZSBjb3VsZG4ndCBkZWNvZGUgdGhlIGltYWdlIGJ1dCB3ZSd2ZSByZWNlaXZlZCBh
bGwgdGhlIGRhdGEsIGRlY29kaW5nCiAgICAgLy8gaGFzIGZhaWxlZC4KLSAgICBpZiAoIW1fcmVh
ZGVyLT5yZWFkKChjb25zdCB1bnNpZ25lZCBjaGFyKiltX2RhdGEtPmRhdGEoKSArIG1fcmVhZE9m
ZnNldCwgbV9kYXRhLT5zaXplKCkgLSBtX3JlYWRPZmZzZXQsIHF1ZXJ5LCBoYWx0QXRGcmFtZSkg
JiYgaXNBbGxEYXRhUmVjZWl2ZWQoKSkKKyAgICBpZiAoIW1fcmVhZGVyLT5kZWNvZGUocXVlcnks
IGhhbHRBdEZyYW1lKSAmJiBpc0FsbERhdGFSZWNlaXZlZCgpKQogICAgICAgICBzZXRGYWlsZWQo
KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2Ut
ZGVjb2RlcnMvZ2lmL0dJRkltYWdlRGVjb2Rlci5oCmluZGV4IDdiZGE5OTQzODI4ZDg0ZTJiYjk0
YTI3NWNlNWI5MTBhYTVjZDJiMTEuLjk5ODJhNDRlMTg3NzljY2ZhYmUzZjU4NDI1ODRjYzgxMGEx
MjUxNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJz
L2dpZi9HSUZJbWFnZURlY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VEZWNvZGVyLmgKQEAgLTU2LDcgKzU2LDYgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJGcmFtZUJ1ZmZlckNhY2hl
KHNpemVfdCBjbGVhckJlZm9yZUZyYW1lKTsKIAogICAgICAgICAvLyBDYWxsYmFja3MgZnJvbSB0
aGUgR0lGIHJlYWRlci4KLSAgICAgICAgdm9pZCBkZWNvZGluZ0hhbHRlZCh1bnNpZ25lZCBieXRl
c0xlZnQpOwogICAgICAgICBib29sIGhhdmVEZWNvZGVkUm93KHVuc2lnbmVkIGZyYW1lSW5kZXgs
IHVuc2lnbmVkIGNoYXIqIHJvd0J1ZmZlciwgdW5zaWduZWQgY2hhciogcm93RW5kLCB1bnNpZ25l
ZCByb3dOdW1iZXIsIHVuc2lnbmVkIHJlcGVhdENvdW50LCBib29sIHdyaXRlVHJhbnNwYXJlbnRQ
aXhlbHMpOwogICAgICAgICBib29sIGZyYW1lQ29tcGxldGUodW5zaWduZWQgZnJhbWVJbmRleCwg
dW5zaWduZWQgZnJhbWVEdXJhdGlvbiwgSW1hZ2VGcmFtZTo6RnJhbWVEaXNwb3NhbE1ldGhvZCBk
aXNwb3NhbE1ldGhvZCk7CiAgICAgICAgIHZvaWQgZ2lmQ29tcGxldGUoKTsKQEAgLTc3LDcgKzc2
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1fY3VycmVudEJ1ZmZlclNh
d0FscGhhOwogICAgICAgICBtdXRhYmxlIGludCBtX3JlcGV0aXRpb25Db3VudDsKICAgICAgICAg
T3duUHRyPEdJRkltYWdlUmVhZGVyPiBtX3JlYWRlcjsKLSAgICAgICAgdW5zaWduZWQgbV9yZWFk
T2Zmc2V0OwogICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VS
ZWFkZXIuY3BwCmluZGV4IDY5OWQzYzQ3ZmI0NGFmMmM4MjRmYTU5YjAzYjQyZjUxMDY2MGVlZmIu
LmNjZTA2OWZlMmM0OTE0NDA3ODA4ZjVhZmM0ZjI1MWIzYTQ4NDFjNzMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvZ2lmL0dJRklt
YWdlUmVhZGVyLmNwcApAQCAtMjAxLDcgKzIwMSw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6Om91
dHB1dFJvdygpCiB9CiAKIC8vIFBlcmZvcm0gTGVtcGVsLVppdi1XZWxjaCBkZWNvZGluZy4KLWJv
b2wgR0lGSW1hZ2VSZWFkZXI6OmRvTFpXKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnEpCitib29sIEdJ
RkltYWdlUmVhZGVyOjpkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyKiBibG9jaywgc2l6ZV90IGJ5
dGVzSW5CbG9jaykKIHsKICAgICBpZiAoIW1fZnJhbWVDb250ZXh0KQogICAgICAgICByZXR1cm4g
dHJ1ZTsKQEAgLTIxNSw3ICsyMTUsNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkb0xaVyhjb25z
dCB1bnNpZ25lZCBjaGFyICpxKQogICAgIC8vIGJhY2sgaW50byB0aGUgR0lGIGRlY29kZXIgc3Ry
dWN0dXJlIHdoZW4gd2UgZXhpdC4KICAgICBpbnQgYXZhaWwgPSBtX2ZyYW1lQ29udGV4dC0+YXZh
aWw7CiAgICAgaW50IGJpdHMgPSBtX2ZyYW1lQ29udGV4dC0+Yml0czsKLSAgICBpbnQgY250ID0g
bV9jb3VudDsKKyAgICBzaXplX3QgY250ID0gYnl0ZXNJbkJsb2NrOwogICAgIGludCBjb2Rlc2l6
ZSA9IG1fZnJhbWVDb250ZXh0LT5jb2Rlc2l6ZTsKICAgICBpbnQgY29kZW1hc2sgPSBtX2ZyYW1l
Q29udGV4dC0+Y29kZW1hc2s7CiAgICAgaW50IG9sZGNvZGUgPSBtX2ZyYW1lQ29udGV4dC0+b2xk
Y29kZTsKQEAgLTI0OSw3ICsyNDksNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpkb0xaVyhjb25z
dCB1bnNpZ25lZCBjaGFyICpxKQogICAgICAgICAgICAgZ290byBFTkQ7IFwKICAgICB9IHdoaWxl
ICgwKQogCi0gICAgZm9yIChjaCA9IHE7IGNudC0tID4gMDsgY2grKykgeworICAgIGZvciAoY2gg
PSBibG9jazsgY250LS0gPiAwOyBjaCsrKSB7CiAgICAgICAgIC8vIEZlZWQgdGhlIG5leHQgYnl0
ZSBpbnRvIHRoZSBkZWNvZGVyJ3MgMzItYml0IGlucHV0IGJ1ZmZlci4KICAgICAgICAgZGF0dW0g
Kz0gKChpbnQpICpjaCkgPDwgYml0czsKICAgICAgICAgYml0cyArPSA4OwpAQCAtMzQ0LDcgKzM0
NCw2IEBAIEVORDoKICAgICBtX2ZyYW1lQ29udGV4dC0+Yml0cyA9IGJpdHM7CiAgICAgbV9mcmFt
ZUNvbnRleHQtPmNvZGVzaXplID0gY29kZXNpemU7CiAgICAgbV9mcmFtZUNvbnRleHQtPmNvZGVt
YXNrID0gY29kZW1hc2s7Ci0gICAgbV9jb3VudCA9IGNudDsKICAgICBtX2ZyYW1lQ29udGV4dC0+
b2xkY29kZSA9IG9sZGNvZGU7CiAgICAgbV9mcmFtZUNvbnRleHQtPmZpcnN0Y2hhciA9IGZpcnN0
Y2hhcjsKICAgICBtX2ZyYW1lQ29udGV4dC0+ZGF0dW0gPSBkYXR1bTsKQEAgLTM1NCw2OCArMzUz
LDM5IEBAIEVORDoKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBHSUZJbWFnZVJlYWRlcjo6
ZGVjb2RlKEdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgcXVlcnksIHVuc2lnbmVkIGhhbHRBdEZy
YW1lKQoreworICAgIEFTU0VSVChtX2J5dGVzUmVhZCA8PSBtX2RhdGEtPnNpemUoKSk7CisgICAg
cmV0dXJuIGRlY29kZUludGVybmFsKG1fYnl0ZXNSZWFkLCBtX2RhdGEtPnNpemUoKSAtIG1fYnl0
ZXNSZWFkLCBxdWVyeSwgaGFsdEF0RnJhbWUpOworfQogCiAvLyBQcm9jZXNzIGRhdGEgYXJyaXZp
bmcgZnJvbSB0aGUgc3RyZWFtIGZvciB0aGUgZ2lmIGRlY29kZXIuCi1ib29sIEdJRkltYWdlUmVh
ZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgbGVuLCBHSUZJbWFn
ZURlY29kZXI6OkdJRlF1ZXJ5IHF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSkKK2Jvb2wgR0lG
SW1hZ2VSZWFkZXI6OmRlY29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBs
ZW4sIEdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnkgcXVlcnksIHVuc2lnbmVkIGhhbHRBdEZyYW1l
KQogewogICAgIGlmICghbGVuKSB7CiAgICAgICAgIC8vIE5vIG5ldyBkYXRhIGhhcyBjb21lIGlu
IHNpbmNlIHRoZSBsYXN0IGNhbGwsIGp1c3QgaWdub3JlIHRoaXMgY2FsbC4KICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCi0gICAgY29uc3QgdW5zaWduZWQgY2hhciAqcSA9IGJ1ZjsKLQot
ICAgIC8vIEFkZCB3aGF0IHdlIGhhdmUgc28gZmFyIHRvIHRoZSBibG9jay4KLSAgICAvLyBJZiBw
cmV2aW91cyBjYWxsIHRvIG1lIGxlZnQgc29tZXRoaW5nIGluIHRoZSBob2xkIGZpcnN0IGNvbXBs
ZXRlIGN1cnJlbnQgYmxvY2sKLSAgICAvLyBvciBpZiB3ZSBhcmUgZmlsbGluZyB0aGUgY29sb3Jt
YXBzLCBmaXJzdCBjb21wbGV0ZSB0aGUgY29sb3JtYXAuCi0gICAgdW5zaWduZWQgY2hhciogcCA9
IDA7Ci0gICAgaWYgKG1fc3RhdGUgPT0gR0lGR2xvYmFsQ29sb3JtYXApCi0gICAgICAgIHAgPSBt
X2dsb2JhbENvbG9ybWFwOwotICAgIGVsc2UgaWYgKG1fc3RhdGUgPT0gR0lGSW1hZ2VDb2xvcm1h
cCkKLSAgICAgICAgcCA9IG1fZnJhbWVDb250ZXh0ID8gbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29s
b3JtYXAgOiAwOwotICAgIGVsc2UgaWYgKG1fYnl0ZXNJbkhvbGQpCi0gICAgICAgIHAgPSBtX2hv
bGQ7Ci0gICAgZWxzZQotICAgICAgICBwID0gMDsKLQotICAgIGlmIChwIHx8IChtX3N0YXRlID09
IEdJRkdsb2JhbENvbG9ybWFwKSB8fCAobV9zdGF0ZSA9PSBHSUZJbWFnZUNvbG9ybWFwKSkgewot
ICAgICAgICAvLyBBZGQgd2hhdCB3ZSBoYXZlIHNvZmFyIHRvIHRoZSBibG9jawotICAgICAgICB1
bnNpZ25lZCBsZW5ndGggPSBsZW4gPCBtX2J5dGVzVG9Db25zdW1lID8gbGVuIDogbV9ieXRlc1Rv
Q29uc3VtZTsKLSAgICAgICAgaWYgKHApCi0gICAgICAgICAgICBtZW1jcHkocCArIG1fYnl0ZXNJ
bkhvbGQsIGJ1ZiwgbGVuZ3RoKTsKLQotICAgICAgICBpZiAobGVuZ3RoIDwgbV9ieXRlc1RvQ29u
c3VtZSkgewotICAgICAgICAgICAgLy8gTm90IGVub3VnaCBpbiAnYnVmJyB0byBjb21wbGV0ZSBj
dXJyZW50IGJsb2NrLCBnZXQgbW9yZQotICAgICAgICAgICAgbV9ieXRlc0luSG9sZCArPSBsZW5n
dGg7Ci0gICAgICAgICAgICBtX2J5dGVzVG9Db25zdW1lIC09IGxlbmd0aDsKLSAgICAgICAgICAg
IGlmIChtX2NsaWVudCkKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+ZGVjb2RpbmdIYWx0ZWQo
MCk7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBS
ZXNldCBob2xkIGJ1ZmZlciBjb3VudAotICAgICAgICBtX2J5dGVzSW5Ib2xkID0gMDsKKyAgICBp
ZiAobGVuIDwgbV9ieXRlc1RvQ29uc3VtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
ICAgIC8vIFBvaW50ICdxJyB0byBjb21wbGV0ZSBibG9jayBpbiBob2xkIChvciBpbiBjb2xvcm1h
cCkKLSAgICAgICAgcSA9IHA7Ci0gICAgfQorICAgIC8vIFRoaXMgbG9vcCByZWFkcyBhcyBtYW55
IGNvbXBvbmVudHMgZnJvbSB8bV9kYXRhfCBhcyBwb3NzaWJsZS4KKyAgICAvLyBBdCB0aGUgYmVn
aW5uaW5nIG9mIGVhY2ggaXRlcmF0aW9uLCBkYXRhUG9zaXRpb24gd2lsbCBiZSBhZHZhbmNlZCBi
eSBtX2J5dGVzVG9Db25zdW1lIHRvCisgICAgLy8gcG9pbnQgdG8gdGhlIG5leHQgY29tcG9uZW50
LiBsZW4gd2lsbCBiZSBkZWNyZW1lbnRlZCBhY2NvcmRpbmdseS4KKyAgICB3aGlsZSAobGVuID49
IG1fYnl0ZXNUb0NvbnN1bWUpIHsKKyAgICAgICAgLy8gRklYTUU6IFJlbmFtZSB0aGlzIHZhcmlh
YmxlIHRvIGN1cnJlbnRDb21wb25lbnQuCisgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIHEg
PSBkYXRhKGRhdGFQb3NpdGlvbik7CiAKLSAgICAvLyBJbnZhcmlhbnQ6Ci0gICAgLy8gICAgJ3En
IGlzIHN0YXJ0IG9mIGN1cnJlbnQgdG8gYmUgcHJvY2Vzc2VkIGJsb2NrIChob2xkLCBjb2xvcm1h
cCBvciBidWYpCi0gICAgLy8gICAgJ21fYnl0ZXNUb0NvbnN1bWUnIGlzIG51bWJlciBvZiBieXRl
cyB0byBjb25zdW1lIGZyb20gJ2J1ZicKLSAgICAvLyAgICAnYnVmJyBwb2ludHMgdG8gdGhlIGJ5
dGVzIHRvIGJlIGNvbnN1bWVkIGZyb20gdGhlIGlucHV0IGJ1ZmZlcgotICAgIC8vICAgICdsZW4n
IGlzIG51bWJlciBvZiBieXRlcyBsZWZ0IGluIGlucHV0IGJ1ZmZlciBmcm9tIHBvc2l0aW9uICdi
dWYnLgotICAgIC8vICAgIEF0IGVudHJhbmNlIG9mIHRoZSBmb3IgbG9vcCB3aWxsICdidWYnIHdp
bGwgYmUgbW92ZWQgJ21fYnl0ZXNUb0NvbnN1bWUnCi0gICAgLy8gICAgdG8gcG9pbnQgdG8gbmV4
dCBidWZmZXIsICdsZW4nIGlzIGFkanVzdGVkIGFjY29yZGluZ2x5LgotICAgIC8vICAgIFNvIHRo
YXQgbmV4dCByb3VuZCBpbiBmb3IgbG9vcCwgcSBnZXRzIHBvaW50ZWQgdG8gdGhlIG5leHQgYnVm
ZmVyLgotICAgIGZvciAoO2xlbiA+PSBtX2J5dGVzVG9Db25zdW1lOyBxID0gYnVmKSB7Ci0gICAg
ICAgIC8vIEVhdCB0aGUgY3VycmVudCBibG9jayBmcm9tIHRoZSBidWZmZXIsIHEga2VlcHMgcG9p
bnRlZCBhdCBjdXJyZW50IGJsb2NrLgotICAgICAgICBidWYgKz0gbV9ieXRlc1RvQ29uc3VtZTsK
KyAgICAgICAgLy8gTWFyayB0aGUgY3VycmVudCBjb21wb25lbnQgYXMgY29uc3VtZWQuIE5vdGUg
dGhhdCBxIHdpbGwgcmVtYWluIHBvaW50ZWQgYXQgdGhpcworICAgICAgICAvLyBjb21wb25lbnQg
dW50aWwgdGhlIG5leHQgbG9vcCBpdGVyYXRpb24uCisgICAgICAgIGRhdGFQb3NpdGlvbiArPSBt
X2J5dGVzVG9Db25zdW1lOwogICAgICAgICBsZW4gLT0gbV9ieXRlc1RvQ29uc3VtZTsKIAogICAg
ICAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKICAgICAgICAgY2FzZSBHSUZMWlc6Ci0gICAgICAgICAg
ICBpZiAoIWRvTFpXKHEpKQorICAgICAgICAgICAgLy8gbV9ieXRlc1RvQ29uc3VtZSBpcyB0aGUg
Y3VycmVudCBjb21wb25lbnQgc2l6ZSBiZWNhdXNlIGl0IGhhc24ndCBiZWVuIHVwZGF0ZWQuCisg
ICAgICAgICAgICBpZiAoIWRvTFpXKHEsIG1fYnl0ZXNUb0NvbnN1bWUpKQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gSWYgZG9MWlcoKSBlbmNvdW50ZXJlZCBhbiBlcnJvciwgaXQg
aGFzIGFscmVhZHkgY2FsbGVkIG1fY2xpZW50LT5zZXRGYWlsZWQoKS4KICAgICAgICAgICAgIEdF
VE4oMSwgR0lGU3ViQmxvY2spOwogICAgICAgICAgICAgYnJlYWs7CkBAIC00ODgsMjMgKzQ1OCwx
OCBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1Ziwg
dW5zaWduZWQgbGVuLCBHSUZJbWFnZURlY29kZQogCiAgICAgICAgICAgICBpZiAoKHFbNF0gJiAw
eDgwKSAmJiBtX2dsb2JhbENvbG9ybWFwU2l6ZSA+IDApIHsgLyogZ2xvYmFsIG1hcCAqLwogICAg
ICAgICAgICAgICAgIC8vIEdldCB0aGUgZ2xvYmFsIGNvbG9ybWFwCi0gICAgICAgICAgICAgICAg
Y29uc3QgdW5zaWduZWQgc2l6ZSA9IDMqbV9nbG9iYWxDb2xvcm1hcFNpemU7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBNYWxsb2MgdGhlIGNvbG9yIG1hcCwgYnV0IG9ubHkgaWYgd2UncmUgbm90IGp1
c3QgY291bnRpbmcgZnJhbWVzLgotICAgICAgICAgICAgICAgIGlmIChxdWVyeSAhPSBHSUZJbWFn
ZURlY29kZXI6OkdJRkZyYW1lQ291bnRRdWVyeSkKLSAgICAgICAgICAgICAgICAgICAgbV9nbG9i
YWxDb2xvcm1hcCA9IG5ldyB1bnNpZ25lZCBjaGFyW3NpemVdOworICAgICAgICAgICAgICAgIGNv
bnN0IHNpemVfdCBnbG9iYWxDb2xvcm1hcEJ5dGVzID0gMyAqIG1fZ2xvYmFsQ29sb3JtYXBTaXpl
OworICAgICAgICAgICAgICAgIG1fZ2xvYmFsQ29sb3JtYXBQb3NpdGlvbiA9IGRhdGFQb3NpdGlv
bjsKIAotICAgICAgICAgICAgICAgIGlmIChsZW4gPCBzaXplKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIC8vIFVzZSAnaG9sZCcgcGF0dGVybiB0byBnZXQgdGhlIGdsb2JhbCBjb2xvcm1hcAotICAg
ICAgICAgICAgICAgICAgICBHRVROKHNpemUsIEdJRkdsb2JhbENvbG9ybWFwKTsKKyAgICAgICAg
ICAgICAgICBpZiAobGVuIDwgZ2xvYmFsQ29sb3JtYXBCeXRlcykgeworICAgICAgICAgICAgICAg
ICAgICAvLyBXYWl0IHVudGlsIHdlIGhhdmUgZW5vdWdoIGJ5dGVzIHRvIGNvbnN1bWUgdGhlIGVu
dGlyZSBjb2xvcm1hcCBhdCBvbmNlLgorICAgICAgICAgICAgICAgICAgICBHRVROKGdsb2JhbENv
bG9ybWFwQnl0ZXMsIEdJRkdsb2JhbENvbG9ybWFwKTsKICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgLy8gQ29weSBldmVyeXRo
aW5nIGFuZCBnbyBkaXJlY3RseSB0byBHSUZJbWFnZV9zdGFydC4KLSAgICAgICAgICAgICAgICBp
ZiAobV9nbG9iYWxDb2xvcm1hcCkKLSAgICAgICAgICAgICAgICAgICAgbWVtY3B5KG1fZ2xvYmFs
Q29sb3JtYXAsIGJ1Ziwgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnVmICs9IHNpemU7Ci0gICAg
ICAgICAgICAgICAgbGVuIC09IHNpemU7CisgICAgICAgICAgICAgICAgbV9pc0dsb2JhbENvbG9y
bWFwRGVmaW5lZCA9IHRydWU7CisgICAgICAgICAgICAgICAgZGF0YVBvc2l0aW9uICs9IGdsb2Jh
bENvbG9ybWFwQnl0ZXM7CisgICAgICAgICAgICAgICAgbGVuIC09IGdsb2JhbENvbG9ybWFwQnl0
ZXM7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIEdFVE4oMSwgR0lGSW1hZ2VTdGFydCk7
CkBAIC01MTYsNyArNDgxLDcgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNp
Z25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgR0lGSW1hZ2VEZWNvZGUKICAgICAgICAgfQog
CiAgICAgICAgIGNhc2UgR0lGR2xvYmFsQ29sb3JtYXA6IHsKLSAgICAgICAgICAgIC8vIEV2ZXJ5
dGhpbmcgaXMgYWxyZWFkeSBjb3BpZWQgaW50byBtX2dsb2JhbENvbG9ybWFwCisgICAgICAgICAg
ICBtX2lzR2xvYmFsQ29sb3JtYXBEZWZpbmVkID0gdHJ1ZTsKICAgICAgICAgICAgIEdFVE4oMSwg
R0lGSW1hZ2VTdGFydCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTQ1LDcg
KzUxMCw3IEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAq
YnVmLCB1bnNpZ25lZCBsZW4sIEdJRkltYWdlRGVjb2RlCiAgICAgICAgIH0KIAogICAgICAgICBj
YXNlIEdJRkV4dGVuc2lvbjogewotICAgICAgICAgICAgbV9jb3VudCA9IHFbMV07CisgICAgICAg
ICAgICBzaXplX3QgYnl0ZXNJbkJsb2NrID0gcVsxXTsKICAgICAgICAgICAgIEdJRlN0YXRlIGVz
ID0gR0lGU2tpcEJsb2NrOwogCiAgICAgICAgICAgICAvLyBUaGUgR0lGIHNwZWMgbWFuZGF0ZXMg
bGVuZ3RocyBmb3IgdGhyZWUgb2YgdGhlIGV4dGVuc2lvbnMgYmVsb3cuCkBAIC01NjYsMTcgKzUz
MSwxNyBAQCBib29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1
ZiwgdW5zaWduZWQgbGVuLCBHSUZJbWFnZURlY29kZQogICAgICAgICAgICAgc3dpdGNoICgqcSkg
ewogICAgICAgICAgICAgY2FzZSAweGY5OgogICAgICAgICAgICAgICAgIGVzID0gR0lGQ29udHJv
bEV4dGVuc2lvbjsKLSAgICAgICAgICAgICAgICBtX2NvdW50ID0gc3RkOjptYXgobV9jb3VudCwg
NCk7CisgICAgICAgICAgICAgICAgYnl0ZXNJbkJsb2NrID0gc3RkOjptYXgoYnl0ZXNJbkJsb2Nr
LCBzdGF0aWNfY2FzdDxzaXplX3Q+KDQpKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAg
ICAgICAgICAgY2FzZSAweDAxOgogICAgICAgICAgICAgICAgIC8vIGlnbm9yaW5nIHBsYWluIHRl
eHQgZXh0ZW5zaW9uCi0gICAgICAgICAgICAgICAgbV9jb3VudCA9IHN0ZDo6bWF4KG1fY291bnQs
IDEyKTsKKyAgICAgICAgICAgICAgICBieXRlc0luQmxvY2sgPSBzdGQ6Om1heChieXRlc0luQmxv
Y2ssIHN0YXRpY19jYXN0PHNpemVfdD4oMTIpKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICAgICAgY2FzZSAweGZmOgogICAgICAgICAgICAgICAgIGVzID0gR0lGQXBwbGljYXRp
b25FeHRlbnNpb247Ci0gICAgICAgICAgICAgICAgbV9jb3VudCA9IHN0ZDo6bWF4KG1fY291bnQs
IDExKTsKKyAgICAgICAgICAgICAgICBieXRlc0luQmxvY2sgPSBzdGQ6Om1heChieXRlc0luQmxv
Y2ssIHN0YXRpY19jYXN0PHNpemVfdD4oMTEpKTsKICAgICAgICAgICAgICAgICBicmVhazsKIAog
ICAgICAgICAgICAgY2FzZSAweGZlOgpAQCAtNTg0LDggKzU0OSw4IEBAIGJvb2wgR0lGSW1hZ2VS
ZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIEdJRklt
YWdlRGVjb2RlCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGlmIChtX2NvdW50KQotICAgICAgICAgICAgICAgIEdFVE4obV9jb3VudCwgZXMpOwor
ICAgICAgICAgICAgaWYgKGJ5dGVzSW5CbG9jaykKKyAgICAgICAgICAgICAgICBHRVROKGJ5dGVz
SW5CbG9jaywgZXMpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIEdFVE4oMSwg
R0lGSW1hZ2VTdGFydCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTcyOSw4ICs2OTQsNyBAQCBi
b29sIEdJRkltYWdlUmVhZGVyOjpyZWFkKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWdu
ZWQgbGVuLCBHSUZJbWFnZURlY29kZQogICAgICAgICAgICAgaWYgKHF1ZXJ5ID09IEdJRkltYWdl
RGVjb2Rlcjo6R0lGU2l6ZVF1ZXJ5IHx8IGhhbHRBdEZyYW1lID09IG1faW1hZ2VzRGVjb2RlZCkg
ewogICAgICAgICAgICAgICAgIC8vIFRoZSBkZWNvZGVyIG5lZWRzIHRvIHN0b3AuIEhhbmQgYmFj
ayB0aGUgbnVtYmVyIG9mIGJ5dGVzIHdlIGNvbnN1bWVkIGZyb20KICAgICAgICAgICAgICAgICAv
LyBidWZmZXIgbWludXMgOSAodGhlIGFtb3VudCB3ZSBjb25zdW1lZCB0byByZWFkIHRoZSBoZWFk
ZXIpLgotICAgICAgICAgICAgICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgICAgICAgICAgICAg
bV9jbGllbnQtPmRlY29kaW5nSGFsdGVkKGxlbiArIDkpOworICAgICAgICAgICAgICAgIHNldFJl
bWFpbmluZ0J5dGVzKGxlbiArIDkpOwogICAgICAgICAgICAgICAgIEdFVE4oOSwgR0lGSW1hZ2VI
ZWFkZXIpOwogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpAQCAt
Nzk0LDMzICs3NTgsMjQgQEAgYm9vbCBHSUZJbWFnZVJlYWRlcjo6cmVhZChjb25zdCB1bnNpZ25l
ZCBjaGFyICpidWYsIHVuc2lnbmVkIGxlbiwgR0lGSW1hZ2VEZWNvZGUKICAgICAgICAgICAgIC8v
IGhhcyBhIGxvY2FsIGNvbG9ybWFwPwogICAgICAgICAgICAgaWYgKHFbOF0gJiAweDgwKSB7CiAg
ICAgICAgICAgICAgICAgaW50IG51bUNvbG9ycyA9IDIgPDwgKHFbOF0gJiAweDcpOwotICAgICAg
ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNpemUgPSAzICogbnVtQ29sb3JzOwotICAgICAgICAg
ICAgICAgIHVuc2lnbmVkIGNoYXIgKm1hcCA9IG1fZnJhbWVDb250ZXh0ID8gbV9mcmFtZUNvbnRl
eHQtPmxvY2FsQ29sb3JtYXAgOiAwOwotICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4
dCAmJiAoIW1hcCB8fCAobnVtQ29sb3JzID4gbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXBT
aXplKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZGVsZXRlIFtdbWFwOwotICAgICAgICAgICAg
ICAgICAgICBtYXAgPSBuZXcgdW5zaWduZWQgY2hhcltzaXplXTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFtYXApCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV9jbGllbnQgPyBt
X2NsaWVudC0+c2V0RmFpbGVkKCkgOiBmYWxzZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgY29uc3Qgc2l6ZV90IGxvY2FsQ29sb3JtYXBCeXRlcyA9IDMgKiBudW1Db2xvcnM7
CiAKICAgICAgICAgICAgICAgICAvLyBTd2l0Y2ggdG8gdGhlIG5ldyBsb2NhbCBwYWxldHRlIGFm
dGVyIGl0IGxvYWRzCiAgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250ZXh0KSB7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0LT5sb2NhbENvbG9ybWFwID0gbWFwOworICAg
ICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+bG9jYWxDb2xvcm1hcFBvc2l0aW9uID0g
ZGF0YVBvc2l0aW9uOwogICAgICAgICAgICAgICAgICAgICBtX2ZyYW1lQ29udGV4dC0+bG9jYWxD
b2xvcm1hcFNpemUgPSBudW1Db2xvcnM7Ci0gICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250
ZXh0LT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICBpZiAobGVuIDwgc2l6ZSkgewotICAgICAgICAgICAgICAgICAgICAv
LyBVc2UgJ2hvbGQnIHBhdHRlcm4gdG8gZ2V0IHRoZSBpbWFnZSBjb2xvcm1hcAotICAgICAgICAg
ICAgICAgICAgICBHRVROKHNpemUsIEdJRkltYWdlQ29sb3JtYXApOworICAgICAgICAgICAgICAg
IGlmIChsZW4gPCBsb2NhbENvbG9ybWFwQnl0ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
V2FpdCB1bnRpbCB3ZSBoYXZlIGVub3VnaCBieXRlcyB0byBjb25zdW1lIHRoZSBlbnRpcmUgY29s
b3JtYXAgYXQgb25jZS4KKyAgICAgICAgICAgICAgICAgICAgR0VUTihsb2NhbENvbG9ybWFwQnl0
ZXMsIEdJRkltYWdlQ29sb3JtYXApOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAvLyBDb3B5IGV2ZXJ5dGhpbmcgYW5kIGRp
cmVjdGx5IGdvIHRvIEdJRkxaV1N0YXJ0CiAgICAgICAgICAgICAgICAgaWYgKG1fZnJhbWVDb250
ZXh0KQotICAgICAgICAgICAgICAgICAgICBtZW1jcHkobV9mcmFtZUNvbnRleHQtPmxvY2FsQ29s
b3JtYXAsIGJ1Ziwgc2l6ZSk7Ci0gICAgICAgICAgICAgICAgYnVmICs9IHNpemU7Ci0gICAgICAg
ICAgICAgICAgbGVuIC09IHNpemU7CisgICAgICAgICAgICAgICAgICAgIG1fZnJhbWVDb250ZXh0
LT5pc0xvY2FsQ29sb3JtYXBEZWZpbmVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBkYXRhUG9z
aXRpb24gKz0gbG9jYWxDb2xvcm1hcEJ5dGVzOworICAgICAgICAgICAgICAgIGxlbiAtPSBsb2Nh
bENvbG9ybWFwQnl0ZXM7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fZnJhbWVDb250ZXh0KSB7
CiAgICAgICAgICAgICAgICAgLy8gU3dpdGNoIGJhY2sgdG8gdGhlIGdsb2JhbCBwYWxldHRlCiAg
ICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSBm
YWxzZTsKQEAgLTgzMCwyMSArNzg1LDIzIEBAIGJvb2wgR0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29u
c3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBsZW4sIEdJRkltYWdlRGVjb2RlCiAgICAg
ICAgIH0KIAogICAgICAgICBjYXNlIEdJRkltYWdlQ29sb3JtYXA6IHsKLSAgICAgICAgICAgIC8v
IEV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBjb3BpZWQgaW50byBsb2NhbENvbG9ybWFwCisgICAgICAg
ICAgICBpZiAobV9mcmFtZUNvbnRleHQpCisgICAgICAgICAgICAgICAgbV9mcmFtZUNvbnRleHQt
PmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPSB0cnVlOwogICAgICAgICAgICAgR0VUTigxLCBHSUZM
WldTdGFydCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ug
R0lGU3ViQmxvY2s6IHsKICAgICAgICAgICAgIC8vIFN0aWxsIHdvcmtpbmcgb24gdGhlIHNhbWUg
aW1hZ2U6IFByb2Nlc3MgbmV4dCBMWlcgZGF0YSBibG9jay4KLSAgICAgICAgICAgIGlmICgobV9j
b3VudCA9ICpxKSkgeworICAgICAgICAgICAgY29uc3Qgc2l6ZV90IGJ5dGVzSW5CbG9jayA9ICpx
OworICAgICAgICAgICAgaWYgKGJ5dGVzSW5CbG9jaykgewogICAgICAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGVyZSBhcmUgc3RpbGwgcm93cyBsZWZ0LiBJZiB0aGUgR0lGIGRhdGEKICAgICAg
ICAgICAgICAgICAvLyBpcyBjb3JydXB0LCB3ZSBtYXkgbm90IGdldCBhbiBleHBsaWNpdCB0ZXJt
aW5hdG9yLgogICAgICAgICAgICAgICAgIGlmIChtX2ZyYW1lQ29udGV4dCAmJiAhbV9mcmFtZUNv
bnRleHQtPnJvd3NSZW1haW5pbmcpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBh
biBpbGxlZ2FsIEdJRiwgYnV0IHdlIHJlbWFpbiB0b2xlcmFudC4KICAgICAgICAgICAgICAgICAg
ICAgR0VUTigxLCBHSUZTdWJCbG9jayk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIEdFVE4obV9jb3VudCwgR0lGTFpXKTsKKyAgICAgICAgICAgICAgICBHRVROKGJ5dGVzSW5C
bG9jaywgR0lGTFpXKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8g
U2VlIGlmIHRoZXJlIGFyZSBhbnkgbW9yZSBpbWFnZXMgaW4gdGhpcyBzZXF1ZW5jZS4KICAgICAg
ICAgICAgICAgICBtX2ltYWdlc0RlY29kZWQrKzsKQEAgLTg3NywyMyArODM0LDEyIEBAIGJvb2wg
R0lGSW1hZ2VSZWFkZXI6OnJlYWQoY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCB1bnNpZ25lZCBs
ZW4sIEdJRkltYWdlRGVjb2RlCiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBDb3B5IHRoZSBs
ZWZ0b3ZlciBpbnRvIG1fZnJhbWVDb250ZXh0LT5tX2hvbGQKLSAgICBtX2J5dGVzSW5Ib2xkID0g
bGVuOwotICAgIGlmIChsZW4pIHsKLSAgICAgICAgLy8gQWRkIHdoYXQgd2UgaGF2ZSBzb2ZhciB0
byB0aGUgYmxvY2sKLSAgICAgICAgdW5zaWduZWQgY2hhciogcDsKLSAgICAgICAgaWYgKG1fc3Rh
dGUgPT0gR0lGR2xvYmFsQ29sb3JtYXApCi0gICAgICAgICAgICBwID0gbV9nbG9iYWxDb2xvcm1h
cDsKLSAgICAgICAgZWxzZSBpZiAobV9zdGF0ZSA9PSBHSUZJbWFnZUNvbG9ybWFwKQotICAgICAg
ICAgICAgcCA9IG1fZnJhbWVDb250ZXh0ID8gbV9mcmFtZUNvbnRleHQtPmxvY2FsQ29sb3JtYXAg
OiAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwID0gbV9ob2xkOwotICAgICAgICBpZiAo
cCkKLSAgICAgICAgICAgIG1lbWNweShwLCBidWYsIGxlbik7Ci0gICAgICAgIG1fYnl0ZXNUb0Nv
bnN1bWUgLT0gbGVuOwotICAgIH0KLQotICAgIGlmIChtX2NsaWVudCkKLSAgICAgICAgbV9jbGll
bnQtPmRlY29kaW5nSGFsdGVkKDApOworICAgIHNldFJlbWFpbmluZ0J5dGVzKGxlbik7CiAgICAg
cmV0dXJuIGZhbHNlOwogfQorCit2b2lkIEdJRkltYWdlUmVhZGVyOjpzZXRSZW1haW5pbmdCeXRl
cyhzaXplX3QgcmVtYWluaW5nQnl0ZXMpCit7CisgICAgQVNTRVJUKHJlbWFpbmluZ0J5dGVzIDw9
IG1fZGF0YS0+c2l6ZSgpKTsKKyAgICBtX2J5dGVzUmVhZCA9IG1fZGF0YS0+c2l6ZSgpIC0gcmVt
YWluaW5nQnl0ZXM7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pbWFn
ZS1kZWNvZGVycy9naWYvR0lGSW1hZ2VSZWFkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCmluZGV4IGMwODI5MThjNDMxNjZi
MzgwMjllYmRmNGYyNGNmMzRkZTY5ZDc0OWIuLmMyZTMzZTE3MjM4YzRjYThiYmYwMTg3MGM2NjFh
ZjVhNzdjMTkwZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2ltYWdlLWRlY29kZXJzL2dpZi9HSUZJbWFnZVJlYWRlci5oCkBAIC00MSwxMSArNDEsMTIgQEAK
IC8vIERlZmluZSBvdXJzZWx2ZXMgYXMgdGhlIGNsaWVudFB0ci4gIE1vemlsbGEganVzdCBoYWNr
ZWQgdGhlaXIgQysrIGNhbGxiYWNrIGNsYXNzIGludG8gdGhpcyBvbGQgQyBkZWNvZGVyLAogLy8g
c28gd2Ugd2lsbCB0b28uCiAjaW5jbHVkZSAiR0lGSW1hZ2VEZWNvZGVyLmgiCisjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCiAKICNkZWZpbmUgTUFYX0xaV19CSVRTICAgICAgICAgIDEyCiAjZGVm
aW5lIE1BWF9CSVRTICAgICAgICAgICAgNDA5NyAvKiAyXk1BWF9MWldfQklUUysxICovCiAjZGVm
aW5lIE1BWF9DT0xPUlMgICAgICAgICAgIDI1NgotI2RlZmluZSBNQVhfSE9MRF9TSVpFICAgICAg
ICAyNTYKKyNkZWZpbmUgR0lGX0NPTE9SUyAgICAgICAgICAgICAzCiAKIGNvbnN0IGludCBjTG9v
cENvdW50Tm90U2VlbiA9IC0yOwogCkBAIC0xMDMsNyArMTA0LDcgQEAgcHVibGljOgogICAgIHVu
c2lnbmVkIGhlaWdodDsKICAgICBpbnQgdHBpeGVsOyAvLyBJbmRleCBvZiB0cmFuc3BhcmVudCBw
aXhlbC4KICAgICBXZWJDb3JlOjpJbWFnZUZyYW1lOjpGcmFtZURpc3Bvc2FsTWV0aG9kIGRpc3Bv
c2FsTWV0aG9kOyAvLyBSZXN0b3JlIHRvIGJhY2tncm91bmQsIGxlYXZlIGluIHBsYWNlLCBldGMu
Ci0gICAgdW5zaWduZWQgY2hhciAqbG9jYWxDb2xvcm1hcDsgLy8gUGVyLWltYWdlIGNvbG9ybWFw
LgorICAgIHNpemVfdCBsb2NhbENvbG9ybWFwUG9zaXRpb247IC8vIFBlci1pbWFnZSBjb2xvcm1h
cC4KICAgICBpbnQgbG9jYWxDb2xvcm1hcFNpemU7IC8vIFNpemUgb2YgbG9jYWwgY29sb3JtYXAg
YXJyYXkuCiAgICAgCiAgICAgYm9vbCBpc0xvY2FsQ29sb3JtYXBEZWZpbmVkIDogMTsKQEAgLTE0
MCw3ICsxNDEsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgaGVpZ2h0KDApCiAgICAgICAgICwgdHBp
eGVsKDApCiAgICAgICAgICwgZGlzcG9zYWxNZXRob2QoV2ViQ29yZTo6SW1hZ2VGcmFtZTo6RGlz
cG9zZU5vdFNwZWNpZmllZCkKLSAgICAgICAgLCBsb2NhbENvbG9ybWFwKDApCisgICAgICAgICwg
bG9jYWxDb2xvcm1hcFBvc2l0aW9uKDApCiAgICAgICAgICwgbG9jYWxDb2xvcm1hcFNpemUoMCkK
ICAgICAgICAgLCBpc0xvY2FsQ29sb3JtYXBEZWZpbmVkKGZhbHNlKQogICAgICAgICAsIHByb2dy
ZXNzaXZlRGlzcGxheShmYWxzZSkKQEAgLTE1Niw3ICsxNTcsNiBAQCBwdWJsaWM6CiAgICAgfkdJ
RkZyYW1lQ29udGV4dCgpCiAgICAgewogICAgICAgICBkZWxldGUgW10gcm93YnVmOwotICAgICAg
ICBkZWxldGUgW10gbG9jYWxDb2xvcm1hcDsKICAgICAgICAgZGVsZXRlIFtdIHByZWZpeDsKICAg
ICAgICAgZGVsZXRlIFtdIHN1ZmZpeDsKICAgICAgICAgZGVsZXRlIFtdIHN0YWNrOwpAQCAtMTY5
LDY2ICsxNjksODcgQEAgcHVibGljOgogICAgIEdJRkltYWdlUmVhZGVyKFdlYkNvcmU6OkdJRklt
YWdlRGVjb2RlciogY2xpZW50ID0gMCkKICAgICAgICAgOiBtX2NsaWVudChjbGllbnQpCiAgICAg
ICAgICwgbV9zdGF0ZShHSUZUeXBlKQotICAgICAgICAsIG1fYnl0ZXNUb0NvbnN1bWUoNikKLSAg
ICAgICAgLCBtX2J5dGVzSW5Ib2xkKDApCi0gICAgICAgICwgbV9nbG9iYWxDb2xvcm1hcCgwKQor
ICAgICAgICAsIG1fYnl0ZXNUb0NvbnN1bWUoNikgLy8gTnVtYmVyIG9mIGJ5dGVzIGZvciBHSUYg
dHlwZSwgZWl0aGVyICJHSUY4N2EiIG9yICJHSUY4OWEiLgorICAgICAgICAsIG1fYnl0ZXNSZWFk
KDApCiAgICAgICAgICwgbV9zY3JlZW5CZ2NvbG9yKDApCiAgICAgICAgICwgbV92ZXJzaW9uKDAp
CiAgICAgICAgICwgbV9zY3JlZW5XaWR0aCgwKQogICAgICAgICAsIG1fc2NyZWVuSGVpZ2h0KDAp
CisgICAgICAgICwgbV9pc0dsb2JhbENvbG9ybWFwRGVmaW5lZChmYWxzZSkKKyAgICAgICAgLCBt
X2dsb2JhbENvbG9ybWFwUG9zaXRpb24oMCkKICAgICAgICAgLCBtX2dsb2JhbENvbG9ybWFwU2l6
ZSgwKQogICAgICAgICAsIG1faW1hZ2VzRGVjb2RlZCgwKQogICAgICAgICAsIG1faW1hZ2VzQ291
bnQoMCkKICAgICAgICAgLCBtX2xvb3BDb3VudChjTG9vcENvdW50Tm90U2VlbikKLSAgICAgICAg
LCBtX2NvdW50KDApCiAgICAgICAgICwgbV9mcmFtZUNvbnRleHQoMCkKICAgICB7CiAgICAgfQog
CiAgICAgfkdJRkltYWdlUmVhZGVyKCkKICAgICB7Ci0gICAgICAgIGRlbGV0ZSBbXSBtX2dsb2Jh
bENvbG9ybWFwOwotICAgICAgICBtX2dsb2JhbENvbG9ybWFwID0gMDsKLQogICAgICAgICBkZWxl
dGUgbV9mcmFtZUNvbnRleHQ7CiAgICAgICAgIG1fZnJhbWVDb250ZXh0ID0gMDsKICAgICB9CiAK
LSAgICBib29sIHJlYWQoY29uc3QgdW5zaWduZWQgY2hhciogYnVmLCB1bnNpZ25lZCBudW1ieXRl
cywgV2ViQ29yZTo6R0lGSW1hZ2VEZWNvZGVyOjpHSUZRdWVyeSA9IFdlYkNvcmU6OkdJRkltYWdl
RGVjb2Rlcjo6R0lGRnVsbFF1ZXJ5LCB1bnNpZ25lZCBoYWx0QXRGcmFtZSA9IC0xKTsKKyAgICB2
b2lkIHNldERhdGEoUGFzc1JlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IGRhdGEpIHsgbV9k
YXRhID0gZGF0YTsgfQorICAgIGJvb2wgZGVjb2RlKFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6
R0lGUXVlcnksIHVuc2lnbmVkIGhhbHRBdEZyYW1lKTsKIAogICAgIGludCBpbWFnZXNDb3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1faW1hZ2VzQ291bnQ7IH0KICAgICBpbnQgbG9vcENvdW50KCkgY29u
c3QgeyByZXR1cm4gbV9sb29wQ291bnQ7IH0KLSAgICB1bnNpZ25lZCBjaGFyKiBnbG9iYWxDb2xv
cm1hcCgpIGNvbnN0IHsgcmV0dXJuIG1fZ2xvYmFsQ29sb3JtYXA7IH0KLSAgICBpbnQgZ2xvYmFs
Q29sb3JtYXBTaXplKCkgY29uc3QgeyByZXR1cm4gbV9nbG9iYWxDb2xvcm1hcFNpemU7IH0KKwor
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGdsb2JhbENvbG9ybWFwKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2lzR2xvYmFsQ29sb3JtYXBEZWZpbmVkID8gZGF0YShtX2dsb2JhbENv
bG9ybWFwUG9zaXRpb24pIDogMDsKKyAgICB9CisgICAgaW50IGdsb2JhbENvbG9ybWFwU2l6ZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pc0dsb2JhbENvbG9ybWFwRGVmaW5lZCA/
IG1fZ2xvYmFsQ29sb3JtYXBTaXplIDogMDsKKyAgICB9CisKKyAgICBjb25zdCB1bnNpZ25lZCBj
aGFyKiBsb2NhbENvbG9ybWFwKGNvbnN0IEdJRkZyYW1lQ29udGV4dCogZnJhbWUpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gZnJhbWUtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPyBkYXRh
KGZyYW1lLT5sb2NhbENvbG9ybWFwUG9zaXRpb24pIDogMDsKKyAgICB9CisgICAgaW50IGxvY2Fs
Q29sb3JtYXBTaXplKGNvbnN0IEdJRkZyYW1lQ29udGV4dCogZnJhbWUpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gZnJhbWUtPmlzTG9jYWxDb2xvcm1hcERlZmluZWQgPyBmcmFtZS0+bG9j
YWxDb2xvcm1hcFNpemUgOiAwOworICAgIH0KKwogICAgIGNvbnN0IEdJRkZyYW1lQ29udGV4dCog
ZnJhbWVDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZUNvbnRleHQ7IH0KIAogcHJpdmF0
ZToKKyAgICBib29sIGRlY29kZUludGVybmFsKHNpemVfdCBkYXRhUG9zaXRpb24sIHNpemVfdCBs
ZW4sIFdlYkNvcmU6OkdJRkltYWdlRGVjb2Rlcjo6R0lGUXVlcnksIHVuc2lnbmVkIGhhbHRBdEZy
YW1lKTsKICAgICBib29sIG91dHB1dFJvdygpOwotICAgIGJvb2wgZG9MWlcoY29uc3QgdW5zaWdu
ZWQgY2hhciAqcSk7CisgICAgYm9vbCBkb0xaVyhjb25zdCB1bnNpZ25lZCBjaGFyICosIHNpemVf
dCk7CisgICAgdm9pZCBzZXRSZW1haW5pbmdCeXRlcyhzaXplX3QpOworCisgICAgY29uc3QgdW5z
aWduZWQgY2hhciogZGF0YShzaXplX3QgZGF0YVBvc2l0aW9uKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KG1fZGF0YS0+
ZGF0YSgpKSArIGRhdGFQb3NpdGlvbjsKKyAgICB9CiAKICAgICBXZWJDb3JlOjpHSUZJbWFnZURl
Y29kZXIqIG1fY2xpZW50OwogCiAgICAgLy8gUGFyc2luZyBzdGF0ZSBtYWNoaW5lLgogICAgIEdJ
RlN0YXRlIG1fc3RhdGU7IC8vIEN1cnJlbnQgZGVjb2RlciBtYXN0ZXIgc3RhdGUuCi0gICAgdW5z
aWduZWQgbV9ieXRlc1RvQ29uc3VtZTsgLy8gTnVtYmVyIG9mIGJ5dGVzIHRvIGFjY3VtdWxhdGUu
Ci0gICAgdW5zaWduZWQgbV9ieXRlc0luSG9sZDsgLy8gYnl0ZXMgYWNjdW11bGF0ZWQgc28gZmFy
LgotICAgIHVuc2lnbmVkIGNoYXIgbV9ob2xkW01BWF9IT0xEX1NJWkVdOyAvLyBBY2N1bXVsYXRp
b24gYnVmZmVyLgotICAgIHVuc2lnbmVkIGNoYXIqIG1fZ2xvYmFsQ29sb3JtYXA7IC8vICgzKiBN
QVhfQ09MT1JTIGluIHNpemUpIERlZmF1bHQgY29sb3JtYXAgaWYgbG9jYWwgbm90IHN1cHBsaWVk
LCAzIGJ5dGVzIGZvciBlYWNoIGNvbG9yLgorICAgIHNpemVfdCBtX2J5dGVzVG9Db25zdW1lOyAv
LyBOdW1iZXIgb2YgYnl0ZXMgdG8gY29uc3VtZSBmb3IgbmV4dCBzdGFnZSBvZiBwYXJzaW5nLgor
ICAgIHNpemVfdCBtX2J5dGVzUmVhZDsgLy8gTnVtYmVyIG9mIGJ5dGVzIHByb2Nlc3NlZC4KICAg
ICAKICAgICAvLyBHbG9iYWwgKG11bHRpLWltYWdlKSBzdGF0ZS4KICAgICBpbnQgbV9zY3JlZW5C
Z2NvbG9yOyAvLyBMb2dpY2FsIHNjcmVlbiBiYWNrZ3JvdW5kIGNvbG9yLgogICAgIGludCBtX3Zl
cnNpb247IC8vIEVpdGhlciA4OSBmb3IgR0lGODkgb3IgODcgZm9yIEdJRjg3LgogICAgIHVuc2ln
bmVkIG1fc2NyZWVuV2lkdGg7IC8vIExvZ2ljYWwgc2NyZWVuIHdpZHRoICYgaGVpZ2h0LgogICAg
IHVuc2lnbmVkIG1fc2NyZWVuSGVpZ2h0OworICAgIGJvb2wgbV9pc0dsb2JhbENvbG9ybWFwRGVm
aW5lZDsKKyAgICBzaXplX3QgbV9nbG9iYWxDb2xvcm1hcFBvc2l0aW9uOyAvLyAoMyogTUFYX0NP
TE9SUyBpbiBzaXplKSBEZWZhdWx0IGNvbG9ybWFwIGlmIGxvY2FsIG5vdCBzdXBwbGllZCwgMyBi
eXRlcyBmb3IgZWFjaCBjb2xvci4KICAgICBpbnQgbV9nbG9iYWxDb2xvcm1hcFNpemU7IC8vIFNp
emUgb2YgZ2xvYmFsIGNvbG9ybWFwIGFycmF5LgogICAgIHVuc2lnbmVkIG1faW1hZ2VzRGVjb2Rl
ZDsgLy8gQ291bnRzIGNvbXBsZXRlZCBmcmFtZXMgZm9yIGFuaW1hdGVkIEdJRnMuCiAgICAgaW50
IG1faW1hZ2VzQ291bnQ7IC8vIENvdW50ZWQgYWxsIGZyYW1lcyBzZWVuIHNvIGZhciAoaW5jbHVk
aW5nIGluY29tcGxldGUgZnJhbWVzKS4KICAgICBpbnQgbV9sb29wQ291bnQ7IC8vIE5ldHNjYXBl
IHNwZWNpZmljIGV4dGVuc2lvbiBibG9jayB0byBjb250cm9sIHRoZSBudW1iZXIgb2YgYW5pbWF0
aW9uIGxvb3BzIGEgR0lGIHJlbmRlcnMuCiAgICAgCi0gICAgLy8gTm90IHJlYWxseSBnbG9iYWws
IGJ1dCBjb252ZW5pZW50IHRvIGxvY2F0ZSBoZXJlLgotICAgIGludCBtX2NvdW50OyAvLyBSZW1h
aW5pbmcgIyBieXRlcyBpbiBzdWItYmxvY2suCi0gICAgCiAgICAgR0lGRnJhbWVDb250ZXh0KiBt
X2ZyYW1lQ29udGV4dDsKKworICAgIFJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZmZXI+IG1fZGF0
YTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwaSBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cGkKaW5kZXggZDU4MTEy
ODhjZmU0Y2YzMzdhZTQ3NmEzZDU3Mjg3YTFhMTMzMWMyOS4uM2IwYTdhNTNlNTgyM2M3MWNiZTY4
MmI1NzA3NGRmNTZmMTQxMGMxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwaQorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXBpCkBAIC03
Miw2ICs3Miw3IEBACiAgICAgICAgICAgICAndGVzdHMvRnJhbWVMb2FkZXJDbGllbnRJbXBsVGVz
dC5jcHAnLAogICAgICAgICAgICAgJ3Rlc3RzL0ZyYW1lVGVzdEhlbHBlcnMuY3BwJywKICAgICAg
ICAgICAgICd0ZXN0cy9GcmFtZVRlc3RIZWxwZXJzLmgnLAorICAgICAgICAgICAgJ3Rlc3RzL0dJ
RkltYWdlRGVjb2RlclRlc3QuY3BwJywKICAgICAgICAgICAgICd0ZXN0cy9HcmFwaGljc0xheWVy
Q2hyb21pdW1UZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURCQWJvcnRPbkNvcnJ1cHRU
ZXN0LmNwcCcsCiAgICAgICAgICAgICAndGVzdHMvSURCQmluZGluZ1V0aWxpdGllc1Rlc3QuY3Bw
JywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvR0lGSW1hZ2VEZWNv
ZGVyVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dJRkltYWdlRGVjb2Rl
clRlc3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFmODE1ZTIyYTllNDM2YWU2NTZiYjRiNTFkOWQ5NjRmODAw
Y2UwNzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0dJ
RkltYWdlRGVjb2RlclRlc3QuY3BwCkBAIC0wLDAgKzEsMTg4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaW5jbHVkZSAiR0lGSW1hZ2VEZWNvZGVyLmgiCisKKyNpbmNsdWRlICJGaWxlU3lzdGVt
LmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3QuaD4K
KyNpbmNsdWRlIDxwdWJsaWMvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViRGF0YS5o
PgorI2luY2x1ZGUgPHB1YmxpYy9XZWJTaXplLmg+CisjaW5jbHVkZSA8cHVibGljL1dlYlVuaXRU
ZXN0U3VwcG9ydC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFz
c093blB0ci5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJLaXQ7CisKK25hbWVzcGFjZSB7CisKK3N0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEJ1ZmZlcj4g
cmVhZEZpbGUoY29uc3QgY2hhciogZmlsZU5hbWUpCit7CisgICAgU3RyaW5nIGZpbGVQYXRoID0g
UGxhdGZvcm06OmN1cnJlbnQoKS0+dW5pdFRlc3RTdXBwb3J0KCktPndlYktpdFJvb3REaXIoKTsK
KyAgICBmaWxlUGF0aC5hcHBlbmQoZmlsZU5hbWUpOworCisgICAgbG9uZyBsb25nIGZpbGVTaXpl
OworICAgIGlmICghZ2V0RmlsZVNpemUoZmlsZVBhdGgsIGZpbGVTaXplKSkKKyAgICAgICAgcmV0
dXJuIDA7CisKKyAgICBQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlID0gb3BlbkZpbGUoZmlsZVBh
dGgsIE9wZW5Gb3JSZWFkKTsKKyAgICBpbnQgZmlsZUxlbmd0aCA9IHN0YXRpY19jYXN0PGludD4o
ZmlsZVNpemUpOworICAgIFZlY3RvcjxjaGFyPiBidWZmZXIoZmlsZUxlbmd0aCk7CisgICAgcmVh
ZEZyb21GaWxlKGhhbmRsZSwgYnVmZmVyLmRhdGEoKSwgZmlsZUxlbmd0aCk7CisgICAgY2xvc2VG
aWxlKGhhbmRsZSk7CisgICAgcmV0dXJuIFNoYXJlZEJ1ZmZlcjo6YWRvcHRWZWN0b3IoYnVmZmVy
KTsKK30KKworVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBkZWNvZGVUd29GcmFtZXMpCit7Cisg
ICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihuZXcgR0lGSW1hZ2VE
ZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIEltYWdlU291cmNlOjpH
YW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CisKKyAgICBSZWZQdHI8U2hhcmVkQnVmZmVy
PiBkYXRhID0gcmVhZEZpbGUoIi9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9yZXNvdXJjZXMvYW5p
bWF0ZWQuZ2lmIik7CisgICAgQVNTRVJUX1RSVUUoZGF0YS5nZXQoKSk7CisgICAgZGVjb2Rlci0+
c2V0RGF0YShkYXRhLmdldCgpLCB0cnVlKTsKKyAgICBFWFBFQ1RfRVEoY0FuaW1hdGlvbkxvb3BP
bmNlLCBkZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSk7CisKKyAgICBJbWFnZUZyYW1lKiBmcmFt
ZSA9IGRlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgwKTsKKyAgICBFWFBFQ1RfRVEoSW1hZ2VG
cmFtZTo6RnJhbWVDb21wbGV0ZSwgZnJhbWUtPnN0YXR1cygpKTsKKyAgICBFWFBFQ1RfRVEoMTYs
IGZyYW1lLT5nZXRTa0JpdG1hcCgpLndpZHRoKCkpOworICAgIEVYUEVDVF9FUSgxNiwgZnJhbWUt
PmdldFNrQml0bWFwKCkuaGVpZ2h0KCkpOworCisgICAgZnJhbWUgPSBkZWNvZGVyLT5mcmFtZUJ1
ZmZlckF0SW5kZXgoMSk7CisgICAgRVhQRUNUX0VRKEltYWdlRnJhbWU6OkZyYW1lQ29tcGxldGUs
IGZyYW1lLT5zdGF0dXMoKSk7CisgICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+Z2V0U2tCaXRtYXAo
KS53aWR0aCgpKTsKKyAgICBFWFBFQ1RfRVEoMTYsIGZyYW1lLT5nZXRTa0JpdG1hcCgpLmhlaWdo
dCgpKTsKKworICAgIEVYUEVDVF9FUSgydSwgZGVjb2Rlci0+ZnJhbWVDb3VudCgpKTsKKyAgICBF
WFBFQ1RfRVEoY0FuaW1hdGlvbkxvb3BJbmZpbml0ZSwgZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50
KCkpOworfQorCitURVNUKEdJRkltYWdlRGVjb2RlclRlc3QsIHBhcnNlQW5kRGVjb2RlKQorewor
ICAgIE93blB0cjxHSUZJbWFnZURlY29kZXI+IGRlY29kZXIoYWRvcHRQdHIobmV3IEdJRkltYWdl
RGVjb2RlcihJbWFnZVNvdXJjZTo6QWxwaGFOb3RQcmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6
R2FtbWFBbmRDb2xvclByb2ZpbGVBcHBsaWVkKSkpOworCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZl
cj4gZGF0YSA9IHJlYWRGaWxlKCIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcmVzb3VyY2VzL2Fu
aW1hdGVkLmdpZiIpOworICAgIEFTU0VSVF9UUlVFKGRhdGEuZ2V0KCkpOworICAgIGRlY29kZXIt
PnNldERhdGEoZGF0YS5nZXQoKSwgdHJ1ZSk7CisgICAgRVhQRUNUX0VRKGNBbmltYXRpb25Mb29w
T25jZSwgZGVjb2Rlci0+cmVwZXRpdGlvbkNvdW50KCkpOworCisgICAgLy8gVGhpcyBjYWxsIHdp
bGwgcGFyc2UgdGhlIGVudGlyZSBmaWxlLgorICAgIEVYUEVDVF9FUSgydSwgZGVjb2Rlci0+ZnJh
bWVDb3VudCgpKTsKKworICAgIEltYWdlRnJhbWUqIGZyYW1lID0gZGVjb2Rlci0+ZnJhbWVCdWZm
ZXJBdEluZGV4KDApOworICAgIEVYUEVDVF9FUShJbWFnZUZyYW1lOjpGcmFtZUNvbXBsZXRlLCBm
cmFtZS0+c3RhdHVzKCkpOworICAgIEVYUEVDVF9FUSgxNiwgZnJhbWUtPmdldFNrQml0bWFwKCku
d2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+Z2V0U2tCaXRtYXAoKS5oZWlnaHQo
KSk7CisKKyAgICBmcmFtZSA9IGRlY29kZXItPmZyYW1lQnVmZmVyQXRJbmRleCgxKTsKKyAgICBF
WFBFQ1RfRVEoSW1hZ2VGcmFtZTo6RnJhbWVDb21wbGV0ZSwgZnJhbWUtPnN0YXR1cygpKTsKKyAg
ICBFWFBFQ1RfRVEoMTYsIGZyYW1lLT5nZXRTa0JpdG1hcCgpLndpZHRoKCkpOworICAgIEVYUEVD
VF9FUSgxNiwgZnJhbWUtPmdldFNrQml0bWFwKCkuaGVpZ2h0KCkpOworICAgIEVYUEVDVF9FUShj
QW5pbWF0aW9uTG9vcEluZmluaXRlLCBkZWNvZGVyLT5yZXBldGl0aW9uQ291bnQoKSk7Cit9CisK
K1RFU1QoR0lGSW1hZ2VEZWNvZGVyVGVzdCwgcGFyc2VCeXRlQnlCeXRlKQoreworICAgIE93blB0
cjxHSUZJbWFnZURlY29kZXI+IGRlY29kZXIoYWRvcHRQdHIobmV3IEdJRkltYWdlRGVjb2RlcihJ
bWFnZVNvdXJjZTo6QWxwaGFOb3RQcmVtdWx0aXBsaWVkLCBJbWFnZVNvdXJjZTo6R2FtbWFBbmRD
b2xvclByb2ZpbGVBcHBsaWVkKSkpOworCisgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gZGF0YSA9
IHJlYWRGaWxlKCIvTGF5b3V0VGVzdHMvZmFzdC9pbWFnZXMvcmVzb3VyY2VzL2FuaW1hdGVkLmdp
ZiIpOworICAgIEFTU0VSVF9UUlVFKGRhdGEuZ2V0KCkpOworCisgICAgc2l6ZV90IGZyYW1lQ291
bnQgPSAwOworCisgICAgLy8gUGFzcyBkYXRhIHRvIGRlY29kZXIgYnl0ZSBieSBieXRlLgorICAg
IGZvciAodW5zaWduZWQgbGVuZ3RoID0gMTsgbGVuZ3RoIDw9IGRhdGEtPnNpemUoKTsgKytsZW5n
dGgpIHsKKyAgICAgICAgUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gdGVtcERhdGEgPSBTaGFyZWRCdWZm
ZXI6OmNyZWF0ZShkYXRhLT5kYXRhKCksIGxlbmd0aCk7CisgICAgICAgIGRlY29kZXItPnNldERh
dGEodGVtcERhdGEuZ2V0KCksIGxlbmd0aCA9PSBkYXRhLT5zaXplKCkpOworCisgICAgICAgIEVY
UEVDVF9MRShmcmFtZUNvdW50LCBkZWNvZGVyLT5mcmFtZUNvdW50KCkpOworICAgICAgICBmcmFt
ZUNvdW50ID0gZGVjb2Rlci0+ZnJhbWVDb3VudCgpOworICAgIH0KKworICAgIEVYUEVDVF9FUSgy
dSwgZGVjb2Rlci0+ZnJhbWVDb3VudCgpKTsKKworICAgIGRlY29kZXItPmZyYW1lQnVmZmVyQXRJ
bmRleCgwKTsKKyAgICBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoMSk7CisgICAgRVhQRUNU
X0VRKGNBbmltYXRpb25Mb29wSW5maW5pdGUsIGRlY29kZXItPnJlcGV0aXRpb25Db3VudCgpKTsK
K30KKworVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBwYXJzZUFuZERlY29kZUJ5dGVCeUJ5dGUp
Cit7CisgICAgT3duUHRyPEdJRkltYWdlRGVjb2Rlcj4gZGVjb2RlcihhZG9wdFB0cihuZXcgR0lG
SW1hZ2VEZWNvZGVyKEltYWdlU291cmNlOjpBbHBoYU5vdFByZW11bHRpcGxpZWQsIEltYWdlU291
cmNlOjpHYW1tYUFuZENvbG9yUHJvZmlsZUFwcGxpZWQpKSk7CisKKyAgICBSZWZQdHI8U2hhcmVk
QnVmZmVyPiBkYXRhID0gcmVhZEZpbGUoIi9MYXlvdXRUZXN0cy9mYXN0L2ltYWdlcy9yZXNvdXJj
ZXMvYW5pbWF0ZWQtZ2lmLXdpdGgtb2Zmc2V0cy5naWYiKTsKKyAgICBBU1NFUlRfVFJVRShkYXRh
LmdldCgpKTsKKworICAgIHNpemVfdCBmcmFtZUNvdW50ID0gMDsKKyAgICBzaXplX3QgZnJhbWVz
RGVjb2RlZCA9IDA7CisKKyAgICAvLyBQYXNzIGRhdGEgdG8gZGVjb2RlciBieXRlIGJ5IGJ5dGUu
CisgICAgZm9yICh1bnNpZ25lZCBsZW5ndGggPSAxOyBsZW5ndGggPD0gZGF0YS0+c2l6ZSgpOyAr
K2xlbmd0aCkgeworICAgICAgICBSZWZQdHI8U2hhcmVkQnVmZmVyPiB0ZW1wRGF0YSA9IFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEtPmRhdGEoKSwgbGVuZ3RoKTsKKyAgICAgICAgZGVjb2Rlci0+
c2V0RGF0YSh0ZW1wRGF0YS5nZXQoKSwgbGVuZ3RoID09IGRhdGEtPnNpemUoKSk7CisKKyAgICAg
ICAgRVhQRUNUX0xFKGZyYW1lQ291bnQsIGRlY29kZXItPmZyYW1lQ291bnQoKSk7CisgICAgICAg
IGZyYW1lQ291bnQgPSBkZWNvZGVyLT5mcmFtZUNvdW50KCk7CisKKyAgICAgICAgSW1hZ2VGcmFt
ZSogZnJhbWUgPSBkZWNvZGVyLT5mcmFtZUJ1ZmZlckF0SW5kZXgoZnJhbWVDb3VudCAtIDEpOwor
ICAgICAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPnN0YXR1cygpID09IEltYWdlRnJhbWU6OkZyYW1l
Q29tcGxldGUgJiYgZnJhbWVzRGVjb2RlZCA8IGZyYW1lQ291bnQpCisgICAgICAgICAgICArK2Zy
YW1lc0RlY29kZWQ7CisgICAgfQorCisgICAgRVhQRUNUX0VRKDV1LCBkZWNvZGVyLT5mcmFtZUNv
dW50KCkpOworICAgIEVYUEVDVF9FUSg1dSwgZnJhbWVzRGVjb2RlZCk7CisgICAgRVhQRUNUX0VR
KGNBbmltYXRpb25Mb29wSW5maW5pdGUsIGRlY29kZXItPnJlcGV0aXRpb25Db3VudCgpKTsKK30K
KworLy8gU2Vjb25kIGZyYW1lIGluIHRoZSBmaWxlIGlzIGJyb2tlbiBidXQgdGVzdCB0aGF0IGZp
cnN0IGZyYW1lIGNhbiBiZSBkZWNvZGVkLgorVEVTVChHSUZJbWFnZURlY29kZXJUZXN0LCBicm9r
ZW5TZWNvbmRGcmFtZSkKK3sKKyAgICBPd25QdHI8R0lGSW1hZ2VEZWNvZGVyPiBkZWNvZGVyKGFk
b3B0UHRyKG5ldyBHSUZJbWFnZURlY29kZXIoSW1hZ2VTb3VyY2U6OkFscGhhTm90UHJlbXVsdGlw
bGllZCwgSW1hZ2VTb3VyY2U6OkdhbW1hQW5kQ29sb3JQcm9maWxlQXBwbGllZCkpKTsKKworICAg
IFJlZlB0cjxTaGFyZWRCdWZmZXI+IGRhdGEgPSByZWFkRmlsZSgiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvZGF0YS9icm9rZW4uZ2lmIik7CisgICAgQVNTRVJUX1RSVUUoZGF0YS5nZXQo
KSk7CisgICAgZGVjb2Rlci0+c2V0RGF0YShkYXRhLmdldCgpLCB0cnVlKTsKKworICAgIEVYUEVD
VF9FUSgxdSwgZGVjb2Rlci0+ZnJhbWVDb3VudCgpKTsKKworICAgIEltYWdlRnJhbWUqIGZyYW1l
ID0gZGVjb2Rlci0+ZnJhbWVCdWZmZXJBdEluZGV4KDApOworICAgIEVYUEVDVF9FUShJbWFnZUZy
YW1lOjpGcmFtZUNvbXBsZXRlLCBmcmFtZS0+c3RhdHVzKCkpOworICAgIEVYUEVDVF9FUSgxNiwg
ZnJhbWUtPmdldFNrQml0bWFwKCkud2lkdGgoKSk7CisgICAgRVhQRUNUX0VRKDE2LCBmcmFtZS0+
Z2V0U2tCaXRtYXAoKS5oZWlnaHQoKSk7CisKKyAgICBmcmFtZSA9IGRlY29kZXItPmZyYW1lQnVm
ZmVyQXRJbmRleCgxKTsKKyAgICBFWFBFQ1RfRkFMU0UoZnJhbWUpOworICAgIEVYUEVDVF9FUShj
QW5pbWF0aW9uTG9vcE9uY2UsIGRlY29kZXItPnJlcGV0aXRpb25Db3VudCgpKTsKK30KKworfSAv
LyBuYW1lc3BhY2UKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvZGF0
YS9icm9rZW4uZ2lmIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9kYXRhL2Jyb2tlbi5n
aWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZTNhN2M0ZWJlN2Q5YmVhOTgzOTc1ZjgyOWEyZWRjOGU1NWQxZjc2ZApH
SVQgYmluYXJ5IHBhdGNoCmxpdGVyYWwgOTA2CnpjbVo/d2JoRUhiNmtyZndffEN3PGtkfTZhVko0
NnMxKjBKXzB6KkxZS2V3TjJOVSpiR2ZVQSs3MFcle28ybyEmXgp6dXoqNUIyU2s5ZjI/S3tMMTJj
ej0kQSQkNW4+bUVGVm9xI1djKGAzYSo9dnIrI3pqWFA4NXUhMz8ldzRHWVAhRGAKS08mY1JWWlBv
eVAoSXZlQQoKbGl0ZXJhbCAwCkhjbVY/ZDAwMDAxCgo=
</data>
<flag name="review"
          id="210779"
          type_id="1"
          status="+"
          setter="senorblanco"
    />
          </attachment>
      

    </bug>

</bugzilla>