<?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>62997</bug_id>
          
          <creation_ts>2011-06-20 10:04:13 -0700</creation_ts>
          <short_desc>[Qt] Add shadowblur support</short_desc>
          <delta_ts>2011-07-05 14:30:03 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Igor Trindade Oliveira">igor.oliveira</reporter>
          <assigned_to name="Igor Trindade Oliveira">igor.oliveira</assigned_to>
          <cc>ariya.hidayat</cc>
    
    <cc>benjamin</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>kling</cc>
    
    <cc>mrobinson</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>423724</commentid>
    <comment_count>0</comment_count>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2011-06-20 10:04:13 -0700</bug_when>
    <thetext>We should update the shadow code to use ShadowBlur which has platform independent code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423725</commentid>
    <comment_count>1</comment_count>
      <attachid>97817</attachid>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2011-06-20 10:05:04 -0700</bug_when>
    <thetext>Created attachment 97817
WIP patch

This patch is a working in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425604</commentid>
    <comment_count>2</comment_count>
      <attachid>98244</attachid>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2011-06-22 14:34:46 -0700</bug_when>
    <thetext>Created attachment 98244
Patch WIP

Working in progress patch v2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427519</commentid>
    <comment_count>3</comment_count>
      <attachid>98622</attachid>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2011-06-26 07:49:50 -0700</bug_when>
    <thetext>Created attachment 98622
Patch

Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427520</commentid>
    <comment_count>4</comment_count>
      <attachid>98622</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-06-26 08:08:49 -0700</bug_when>
    <thetext>Comment on attachment 98622
Patch

Attachment 98622 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/8946077</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427580</commentid>
    <comment_count>5</comment_count>
      <attachid>98640</attachid>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2011-06-26 15:32:23 -0700</bug_when>
    <thetext>Created attachment 98640
Patch

Proposed patch. fix gtk build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427658</commentid>
    <comment_count>6</comment_count>
      <attachid>98640</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-06-26 22:47:36 -0700</bug_when>
    <thetext>Comment on attachment 98640
Patch

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

&gt; Source/WebCore/ChangeLog:39
&gt; +        Use ShadowBlur instead of ContextShadow to handle canvas and css shadows. ShadowBlur is
&gt; +        a newer and platform independent shadow implementation.
&gt; +
&gt; +        * WebCore.pro:
&gt; +        * platform/graphics/GraphicsContext.cpp:
&gt; +        * platform/graphics/GraphicsContext.h:
&gt; +        * platform/graphics/ShadowBlur.cpp:
&gt; +        (WebCore::ShadowBlur::ShadowBlur):
&gt; +        (WebCore::ShadowBlur::mustUseShadowBlur):
&gt; +        (WebCore::ShadowBlur::clear):
&gt; +        (WebCore::ShadowBlur::blurAndColorShadowBuffer):
&gt; +        (WebCore::ShadowBlur::beginShadowLayer):
&gt; +        (WebCore::ShadowBlur::endShadowLayer):
&gt; +        * platform/graphics/ShadowBlur.h:
&gt; +        (WebCore::ShadowBlur::type):
&gt; +        * platform/graphics/qt/ContextShadowQt.cpp: Removed.
&gt; +        * platform/graphics/qt/FontQt.cpp:
&gt; +        (WebCore::drawTextCommon):
&gt; +        (WebCore::Font::drawGlyphs):
&gt; +        * platform/graphics/qt/GraphicsContextQt.cpp:
&gt; +        (WebCore::GraphicsContext::restorePlatformState):
&gt; +        (WebCore::GraphicsContext::fillPath):
&gt; +        (WebCore::GraphicsContext::strokePath):
&gt; +        (WebCore::GraphicsContext::fillRect):
&gt; +        (WebCore::GraphicsContext::fillRoundedRect):
&gt; +        (WebCore::GraphicsContext::shadowBlur):
&gt; +        (WebCore::GraphicsContext::clipBounds):
&gt; +        (WebCore::GraphicsContext::setPlatformShadow):
&gt; +        * platform/graphics/qt/ImageQt.cpp:
&gt; +        (WebCore::BitmapImage::draw):
&gt; +        * platform/graphics/qt/StillImageQt.cpp:
&gt; +        (WebCore::StillImage::draw):

This should say more about what you changed. Why do you have to touch ShadowBlur code at all?

&gt; Source/WebCore/platform/graphics/ShadowBlur.h:66
&gt; +    bool mustUseShadowBlur(GraphicsContext*);

This should be const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427871</commentid>
    <comment_count>7</comment_count>
      <attachid>98709</attachid>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2011-06-27 05:39:49 -0700</bug_when>
    <thetext>Created attachment 98709
Patch

Proposed patch. Update ChangeLog and constify mustUseShadowBlur method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427970</commentid>
    <comment_count>8</comment_count>
      <attachid>98709</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-06-27 08:45:18 -0700</bug_when>
    <thetext>Comment on attachment 98709
Patch

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

&gt; Source/WebCore/platform/graphics/ShadowBlur.cpp:262
&gt; +bool ShadowBlur::mustUseShadowBlur(GraphicsContext* context) const
&gt; +{
&gt; +    // We can&apos;t avoid ShadowBlur, since the shadow has blur.
&gt; +    if (m_type == ShadowBlur::BlurShadow)
&gt; +        return true;
&gt; +    // We can avoid ShadowBlur and optimize, since we&apos;re not drawing on a
&gt; +    // canvas and box shadows are affected by the transformation matrix.
&gt; +    if (!shadowsIgnoreTransforms())
&gt; +        return false;
&gt; +    // We can avoid ShadowBlur, since there are no transformations to apply to the canvas.
&gt; +    if (context-&gt;getCTM().isIdentity())
&gt; +        return false;
&gt; +    // Otherwise, no chance avoiding ShadowBlur.
&gt; +    return true;
&gt; +}

This code doesn&apos;t belong here. It&apos;s asking Qt-specific questions. I see no reason why some other class can&apos;t ask the same questions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427983</commentid>
    <comment_count>9</comment_count>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2011-06-27 08:54:49 -0700</bug_when>
    <thetext>GraphicsContextCG.cpp has a static function called hasBlurredShadow() and it has the same behavior of mustUseShadowBlur my idea was put this function on ShadowBlur so Qt and CG can use it.

(In reply to comment #8)
&gt; (From update of attachment 98709 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98709&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ShadowBlur.cpp:262
&gt; &gt; +bool ShadowBlur::mustUseShadowBlur(GraphicsContext* context) const
&gt; &gt; +{
&gt; &gt; +    // We can&apos;t avoid ShadowBlur, since the shadow has blur.
&gt; &gt; +    if (m_type == ShadowBlur::BlurShadow)
&gt; &gt; +        return true;
&gt; &gt; +    // We can avoid ShadowBlur and optimize, since we&apos;re not drawing on a
&gt; &gt; +    // canvas and box shadows are affected by the transformation matrix.
&gt; &gt; +    if (!shadowsIgnoreTransforms())
&gt; &gt; +        return false;
&gt; &gt; +    // We can avoid ShadowBlur, since there are no transformations to apply to the canvas.
&gt; &gt; +    if (context-&gt;getCTM().isIdentity())
&gt; &gt; +        return false;
&gt; &gt; +    // Otherwise, no chance avoiding ShadowBlur.
&gt; &gt; +    return true;
&gt; &gt; +}
&gt; 
&gt; This code doesn&apos;t belong here. It&apos;s asking Qt-specific questions. I see no reason why some other class can&apos;t ask the same questions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427994</commentid>
    <comment_count>10</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-06-27 09:14:29 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; GraphicsContextCG.cpp has a static function called hasBlurredShadow() and it has the same behavior of mustUseShadowBlur my idea was put this function on ShadowBlur so Qt and CG can use it.

Cairo will also need this logic when it switches to ShadowBlur. Even if it should go in some other class, that class should be shared.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428073</commentid>
    <comment_count>11</comment_count>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2011-06-27 10:34:28 -0700</bug_when>
    <thetext>I can rename the mustUseShadowBlur to hasBlurredShadow() because it is a better name and it can be reused by Qt, Cairo and CG. Simon, Martin what do you think?

(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; GraphicsContextCG.cpp has a static function called hasBlurredShadow() and it has the same behavior of mustUseShadowBlur my idea was put this function on ShadowBlur so Qt and CG can use it.
&gt; 
&gt; Cairo will also need this logic when it switches to ShadowBlur. Even if it should go in some other class, that class should be shared.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428079</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-06-27 10:38:58 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; I can rename the mustUseShadowBlur to hasBlurredShadow() because it is a better name and it can be reused by Qt, Cairo and CG. Simon, Martin what do you think?

That doesn&apos;t cover the shadowsIgnoreTransforms() or getCTM().isIdentity() tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428093</commentid>
    <comment_count>13</comment_count>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2011-06-27 10:52:56 -0700</bug_when>
    <thetext>Yeah, you are right. Updating the patch.
 
(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; I can rename the mustUseShadowBlur to hasBlurredShadow() because it is a better name and it can be reused by Qt, Cairo and CG. Simon, Martin what do you think?
&gt; 
&gt; That doesn&apos;t cover the shadowsIgnoreTransforms() or getCTM().isIdentity() tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428164</commentid>
    <comment_count>14</comment_count>
      <attachid>98761</attachid>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2011-06-27 12:07:55 -0700</bug_when>
    <thetext>Created attachment 98761
Patch

Proposed patch. Remove mustUseShadowBlur method from ShadowBlur class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428181</commentid>
    <comment_count>15</comment_count>
      <attachid>98761</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-06-27 12:26:17 -0700</bug_when>
    <thetext>Comment on attachment 98761
Patch

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

&gt; Source/WebCore/platform/graphics/ShadowBlur.h:-45
&gt;  class ShadowBlur {
&gt; -    WTF_MAKE_NONCOPYABLE(ShadowBlur);

Why does it have to be copyable? This worries me, because it could result in two objects trashing the same m_layerImage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428198</commentid>
    <comment_count>16</comment_count>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2011-06-27 12:50:37 -0700</bug_when>
    <thetext>Qt uses ShadowBlur for CSS and Canvas shadows. For canvas when GraphicsContext::save is called we push the current ShadowBlur(it is an instance object) to a list and in GraphicsContext::restore we pop the object(GraphicsContextQt.cpp:330)so we need to be able to copy the object. This behavior was inherited from ContextShadow implementation.


(In reply to comment #15)
&gt; (From update of attachment 98761 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98761&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ShadowBlur.h:-45
&gt; &gt;  class ShadowBlur {
&gt; &gt; -    WTF_MAKE_NONCOPYABLE(ShadowBlur);
&gt; 
&gt; Why does it have to be copyable? This worries me, because it could result in two objects trashing the same m_layerImage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428217</commentid>
    <comment_count>17</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-06-27 13:17:02 -0700</bug_when>
    <thetext>Is ShadowBlur just being push/popped to store the shadow state (blur radius etc), or will ShadowBlurs on the state stack also be holding onto live buffers?

I think you should implement a copy ctor that asserts that m_bufferImage is null then. Otherwise, make a helper class that you can push/pop to store the shadow state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428310</commentid>
    <comment_count>18</comment_count>
      <attachid>98786</attachid>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2011-06-27 14:30:02 -0700</bug_when>
    <thetext>Created attachment 98786
Patch

Proposed patch. Implement copy ctor that asserts that m_layerImage is null.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428322</commentid>
    <comment_count>19</comment_count>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2011-06-27 14:39:15 -0700</bug_when>
    <thetext>We have a little bit complicated use case. Specially because we need ShadowBlur also to draw shadow on fonts. What i think could be done is to create setters for some ShadowBlur attributes and QtWebKit will have just one ShadowBlur object changing these attributes when the context is restored.

(In reply to comment #17)
&gt; Is ShadowBlur just being push/popped to store the shadow state (blur radius etc), or will ShadowBlurs on the state stack also be holding onto live buffers?
&gt; 
&gt; I think you should implement a copy ctor that asserts that m_bufferImage is null then. Otherwise, make a helper class that you can push/pop to store the shadow state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428771</commentid>
    <comment_count>20</comment_count>
      <attachid>98890</attachid>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2011-06-28 02:58:14 -0700</bug_when>
    <thetext>Created attachment 98890
Patch

Proposed patch. Fix assert.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428835</commentid>
    <comment_count>21</comment_count>
      <attachid>98890</attachid>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2011-06-28 06:20:13 -0700</bug_when>
    <thetext>Comment on attachment 98890
Patch

After look the bug https://bugs.webkit.org/show_bug.cgi?id=49917 we shouldn&apos;t be creating ShadowBlur when unnecessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428870</commentid>
    <comment_count>22</comment_count>
      <attachid>98918</attachid>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2011-06-28 07:36:39 -0700</bug_when>
    <thetext>Created attachment 98918
Patch

Proposed patch. Use the GC state saved to restore the shadow state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428892</commentid>
    <comment_count>23</comment_count>
      <attachid>98918</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-06-28 08:17:54 -0700</bug_when>
    <thetext>Comment on attachment 98918
Patch

The ShadowBlur changes look OK to me in this one. I did not review the rest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429019</commentid>
    <comment_count>24</comment_count>
      <attachid>98949</attachid>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2011-06-28 11:23:40 -0700</bug_when>
    <thetext>Created attachment 98949
Patch.

Proposed patch. Fix crash when using inspector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431682</commentid>
    <comment_count>25</comment_count>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2011-07-02 22:16:32 -0700</bug_when>
    <thetext>Does it take into account that endianness? See also https://bugs.webkit.org/show_bug.cgi?id=55180</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431696</commentid>
    <comment_count>26</comment_count>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2011-07-03 04:49:59 -0700</bug_when>
    <thetext>Good catch.
(In reply to comment #25)
&gt; Does it take into account that endianness? See also https://bugs.webkit.org/show_bug.cgi?id=55180</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431863</commentid>
    <comment_count>27</comment_count>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2011-07-04 02:54:24 -0700</bug_when>
    <thetext>We are not blurring the ImageBuffer directly, so probably the fix done by bug https://bugs.webkit.org/show_bug.cgi?id=55180 is enough.

(In reply to comment #25)
&gt; Does it take into account that endianness? See also https://bugs.webkit.org/show_bug.cgi?id=55180</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431948</commentid>
    <comment_count>28</comment_count>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2011-07-04 08:52:15 -0700</bug_when>
    <thetext>&gt; We are not blurring the ImageBuffer directly, so probably the fix done by bug https://bugs.webkit.org/show_bug.cgi?id=55180 is enough.

Which means it is rather scary. Consider this, on X11 we&apos;ll use QPixmap (via ImageBuffer, and thus ScratchBuffer). Before blurring, we get the pixel data by converting to QImage. Looks like a lot of round-trip and defeats the purpose of having the scratch buffer at the first place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>431968</commentid>
    <comment_count>29</comment_count>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2011-07-04 09:54:25 -0700</bug_when>
    <thetext>Yeah I agree. ShadowBlur with raster paint engine will be a problem. But the advantages of moving to ShadowBlur also is satisfactory. We can have just one shadow implementation and all bug fixes and future optimizations done for a platform is shared between all platforms.
IMHO we could move to ShadowBlur and open a bug about ShadowBlur optimization.

(In reply to comment #28)
&gt; &gt; We are not blurring the ImageBuffer directly, so probably the fix done by bug https://bugs.webkit.org/show_bug.cgi?id=55180 is enough.
&gt; 
&gt; Which means it is rather scary. Consider this, on X11 we&apos;ll use QPixmap (via ImageBuffer, and thus ScratchBuffer). Before blurring, we get the pixel data by converting to QImage. Looks like a lot of round-trip and defeats the purpose of having the scratch buffer at the first place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432074</commentid>
    <comment_count>30</comment_count>
    <who name="Ariya Hidayat">ariya.hidayat</who>
    <bug_when>2011-07-04 18:25:08 -0700</bug_when>
    <thetext>One way to avoid performance regression: force ImageBuffer to use QImage as the back-end when used with ScratchBuffer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432211</commentid>
    <comment_count>31</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2011-07-05 04:35:28 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; &gt; We are not blurring the ImageBuffer directly, so probably the fix done by bug https://bugs.webkit.org/show_bug.cgi?id=55180 is enough.
&gt; 
&gt; Which means it is rather scary. Consider this, on X11 we&apos;ll use QPixmap (via ImageBuffer, and thus ScratchBuffer). Before blurring, we get the pixel data by converting to QImage. Looks like a lot of round-trip and defeats the purpose of having the scratch buffer at the first place.

Raster is now the default on X11.
We basically say raster graphic system is the only way to get correct rendering with QtWebKit.

We prefer QPixmap over QImage to enjoy some optimizations on ARM at the moment (like 16 bits color depth in some case, faster image conversion, etc.)

I would say it is ok to use QPixmap here for consistency with what is in WebCore. We plan to move to QImage explicitely for Qt 5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432277</commentid>
    <comment_count>32</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-07-05 08:02:16 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #28)
&gt; &gt; &gt; We are not blurring the ImageBuffer directly, so probably the fix done by bug https://bugs.webkit.org/show_bug.cgi?id=55180 is enough.
&gt; &gt; 
&gt; &gt; Which means it is rather scary. Consider this, on X11 we&apos;ll use QPixmap (via ImageBuffer, and thus ScratchBuffer). Before blurring, we get the pixel data by converting to QImage. Looks like a lot of round-trip and defeats the purpose of having the scratch buffer at the first place.

We don&apos;t blur the ImageBuffer directly.  We get the data into a ByteArray and blur that, then put it back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432349</commentid>
    <comment_count>33</comment_count>
      <attachid>98949</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-07-05 11:26:01 -0700</bug_when>
    <thetext>Comment on attachment 98949
Patch.

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

r=me, but please fix GraphicsContext::clipBounds() before landing.

Also, are there really no changes to the pixel results of canvas and CSS shadow tests?

&gt; Source/WebCore/platform/graphics/qt/GraphicsContextQt.cpp:818
&gt; +    return IntRect(clipRect.x(), clipRect.y(), clipRect.width(), clipRect.height());

This should be return enclosingIntRect(clipRect); or we may get 1px rounding errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432363</commentid>
    <comment_count>34</comment_count>
      <attachid>99735</attachid>
    <who name="Igor Trindade Oliveira">igor.oliveira</who>
    <bug_when>2011-07-05 12:23:16 -0700</bug_when>
    <thetext>Created attachment 99735
Patch.

Proposed patch. Update clipBounds to use enclosingIntRect.
The ShadowBlur and ContextShadow share the same algorithm with minor modifications so the LayoutTests has the same results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432408</commentid>
    <comment_count>35</comment_count>
      <attachid>99735</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-05 14:29:55 -0700</bug_when>
    <thetext>Comment on attachment 99735
Patch.

Clearing flags on attachment: 99735

Committed r90406: &lt;http://trac.webkit.org/changeset/90406&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>432409</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-05 14:30:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97817</attachid>
            <date>2011-06-20 10:05:04 -0700</date>
            <delta_ts>2011-06-22 14:34:46 -0700</delta_ts>
            <desc>WIP patch</desc>
            <filename>0001-WIP.patch</filename>
            <type>text/plain</type>
            <size>38313</size>
            <attacher name="Igor Trindade Oliveira">igor.oliveira</attacher>
            
              <data encoding="base64">RnJvbSAzNTdmZmRhNTAwMGJkODk1MDViM2IyMjM0OTBlMGYwZmJkODg2NTg2IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBJZ29yIE9saXZlaXJhIDxpZ29yLm9saXZlaXJhQG9wZW5ib3Nz
YS5vcmc+CkRhdGU6IE1vbiwgMjAgSnVuIDIwMTEgMTE6NTg6MTUgLTA0MDAKU3ViamVjdDogW1BB
VENIXSBXSVAKCi0tLQogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgICA1ICstCiAuLi4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwICB8ICAgIDIgKy0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5oIHwgICAgNyArLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2hhZG93Qmx1ci5jcHAgICAgfCAgIDU0ICsrKysrKysKIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaCAgICAgIHwgICAzOCArKysrLQogLi4uL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3dRdC5jcHAgICAgICAgfCAgMTY4IC0tLS0tLS0t
LS0tLS0tLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQu
Y3BwICAgICB8ICAgNjIgKysrKy0tLS0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0NvbnRleHRRdC5jcHAgICAgIHwgIDEwNyArKysrKysrKy0tLS0tCiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcCAgICB8ICAgIDggKy0KIC4uLi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAgIHwgICAgOCArLQogMTAgZmls
ZXMgY2hhbmdlZCwgMjAxIGluc2VydGlvbnMoKyksIDI1OCBkZWxldGlvbnMoLSkKIGRlbGV0ZSBt
b2RlIDEwMDY0NCBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hh
ZG93UXQuY3BwCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCAwOTg4MjhjLi44NjllNzc0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LnBybwpAQCAtOTc2LDcgKzk3Niw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRGYW1pbHkuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5j
cHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcCBcCi0gICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29udGV4dFNoYWRvdy5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0Js
dXIuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwIFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
RmxvYXRRdWFkLmNwcCBcCkBAIC0xOTI1LDcgKzE5MjUsNyBAQCBIRUFERVJTICs9IFwKICAgICBw
bGF0Zm9ybS9tb2NrL1NwZWVjaElucHV0Q2xpZW50TW9jay5oIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9CaXRtYXBJbWFnZS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oIFwKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmggXAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL1NoYWRvd0JsdXIuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5k
LmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaCBcCkBAIC0y
NDk5LDcgKzI0OTksNiBAQCBTT1VSQ0VTICs9IFwKICAgICBwYWdlL3F0L0ZyYW1lUXQuY3BwIFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFF0LmNwcCBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29sb3JRdC5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3F0L0NvbnRleHRTaGFkb3dRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0Zv
bnRRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5j
cHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0Zsb2F0UG9pbnRRdC5jcHAgXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAK
aW5kZXggMWMwODdhMi4uMmJjYWVhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC01ODUsNyArNTg1LDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBidWZmZXIs
IGNvbnN0IEZsb2F0UmVjdCYgcmUKICAgICBidWZmZXItPmNsaXAodGhpcywgcmVjdCk7CiB9CiAK
LSNpZiAhVVNFKENHKQorI2lmICFVU0UoQ0cpICYmICFQTEFURk9STShRVCkKIEludFJlY3QgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgKaW5kZXggZmVlNGFkZC4uYzg0MWI0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTU0LDYgKzU0LDcgQEAg
dHlwZWRlZiBjbGFzcyBXZWJDb3JlOjpTdXJmYWNlT3BlblZHIFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0OwogI2luY2x1ZGUgPFFQYWludGVyPgogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ29u
dGV4dFNoYWRvdzsKK2NsYXNzIFNoYWRvd0JsdXI7CiB9CiB0eXBlZGVmIFFQYWludGVyIFBsYXRm
b3JtR3JhcGhpY3NDb250ZXh0OwogI2VsaWYgUExBVEZPUk0oV1gpCkBAIC00ODQsMTAgKzQ4NSwx
NCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgdGFrZU93bmVyc2hpcE9mUGxh
dGZvcm1Db250ZXh0KCk7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFFUKSB8fCBVU0UoQ0FJUk8p
CisjaWYgVVNFKENBSVJPKQogICAgICAgICBDb250ZXh0U2hhZG93KiBjb250ZXh0U2hhZG93KCk7
CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFFUKQorICAgICAgICBTaGFkb3dCbHVyKiBzaGFkb3dC
bHVyKCk7CisjZW5kaWYKKwogI2lmIFVTRShDQUlSTykKICAgICAgICAgR3JhcGhpY3NDb250ZXh0
KGNhaXJvX3QqKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmNwcAppbmRleCAyNWZjOWFhLi41ODRmYjcwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApAQCAtMjM3LDYgKzIzNywz
MCBAQCBzdGF0aWMgdm9pZCBjYWxjdWxhdGVMb2JlcyhpbnQgbG9iZXNbXVsyXSwgZmxvYXQgYmx1
clJhZGl1cywgYm9vbCBzaGFkb3dzSWdub3JlVAogICAgIH0KIH0KIAorYm9vbCBTaGFkb3dCbHVy
OjptdXN0VXNlU2hhZG93Qmx1cihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgLy8g
V2UgY2FuJ3QgYXZvaWQgU2hhZG93Qmx1ciwgc2luY2UgdGhlIHNoYWRvdyBoYXMgYmx1ci4KKyAg
ICBpZiAobV90eXBlID09IFNoYWRvd0JsdXI6OkJsdXJTaGFkb3cpCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIC8vIFdlIGNhbiBhdm9pZCBTaGFkb3dCbHVyIGFuZCBvcHRpbWl6ZSwgc2luY2Ug
d2UncmUgbm90IGRyYXdpbmcgb24gYQorICAgIC8vIGNhbnZhcyBhbmQgYm94IHNoYWRvd3MgYXJl
IGFmZmVjdGVkIGJ5IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguCisgICAgaWYgKCFzaGFkb3dz
SWdub3JlVHJhbnNmb3JtcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gV2UgY2Fu
IGF2b2lkIFNoYWRvd0JsdXIsIHNpbmNlIHRoZXJlIGFyZSBubyB0cmFuc2Zvcm1hdGlvbnMgdG8g
YXBwbHkgdG8gdGhlIGNhbnZhcy4KKyAgICBpZiAoY29udGV4dC0+Z2V0Q1RNKCkuaXNJZGVudGl0
eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gT3RoZXJ3aXNlLCBubyBjaGFuY2Ug
YXZvaWRpbmcgU2hhZG93Qmx1ci4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTaGFkb3dC
bHVyOjpjbGVhcigpCit7CisgICAgbV90eXBlID0gTm9TaGFkb3c7CisgICAgbV9jb2xvciA9IENv
bG9yKCk7CisgICAgbV9ibHVyUmFkaXVzID0gRmxvYXRTaXplKCk7CisgICAgbV9vZmZzZXQgPSBG
bG9hdFNpemUoKTsKK30KKwogdm9pZCBTaGFkb3dCbHVyOjpibHVyTGF5ZXJJbWFnZSh1bnNpZ25l
ZCBjaGFyKiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGludCByb3dTdHJpZGUpCiB7
CiAgICAgY29uc3QgaW50IGNoYW5uZWxzWzRdID0geyAzLCAwLCAxLCAzIH07CkBAIC04MzMsNCAr
ODU3LDM0IEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckFuZENvbG9yU2hhZG93QnVmZmVyKGNvbnN0
IEludFNpemUmIHRlbXBsYXRlU2l6ZSkKICAgICBzaGFkb3dDb250ZXh0LT5maWxsUmVjdChGbG9h
dFJlY3QoMCwgMCwgdGVtcGxhdGVTaXplLndpZHRoKCksIHRlbXBsYXRlU2l6ZS5oZWlnaHQoKSkp
OwogfQogCitQbGF0Zm9ybUNvbnRleHQgU2hhZG93Qmx1cjo6YmVnaW5TaGFkb3dMYXllcihHcmFw
aGljc0NvbnRleHQgKmNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgbGF5ZXJBcmVhKQoreworICAg
IGFkanVzdEJsdXJSYWRpdXMoY29udGV4dCk7CisKKyAgICBJbnRSZWN0IGxheWVyUmVjdCA9IGNh
bGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0KGNvbnRleHQsIGxheWVyQXJlYSwgY29udGV4dC0+Y2xp
cEJvdW5kcygpKTsKKworICAgIGlmIChsYXllclJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIG1fbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLmdldFNj
cmF0Y2hCdWZmZXIobGF5ZXJSZWN0LnNpemUoKSk7CisKKyAgICBHcmFwaGljc0NvbnRleHQqIHNo
YWRvd0NvbnRleHQgPSBtX2xheWVySW1hZ2UtPmNvbnRleHQoKTsKKyAgICBzaGFkb3dDb250ZXh0
LT5zYXZlKCk7CisgICAgc2hhZG93Q29udGV4dC0+Y2xlYXJSZWN0KEZsb2F0UmVjdCgwLCAwLCBt
X2xheWVyU2l6ZS53aWR0aCgpLCBtX2xheWVyU2l6ZS5oZWlnaHQoKSkpOworICAgIHNoYWRvd0Nv
bnRleHQtPnRyYW5zbGF0ZShtX2xheWVyQ29udGV4dFRyYW5zbGF0aW9uKTsKKyAgICBtX2xheWVy
Q29udGV4dCA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOworCisgICAgcmV0dXJu
IG1fbGF5ZXJDb250ZXh0OworfQorCit2b2lkIFNoYWRvd0JsdXI6OmVuZFNoYWRvd0xheWVyKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBtX2xheWVySW1hZ2UtPmNvbnRleHQoKS0+
cmVzdG9yZSgpOworCisgICAgYmx1clNoYWRvd0J1ZmZlcihleHBhbmRlZEludFNpemUobV9sYXll
clNpemUpKTsKKyAgICBkcmF3U2hhZG93QnVmZmVyKGNvbnRleHQpOworCisgICAgU2NyYXRjaEJ1
ZmZlcjo6c2hhcmVkKCkuc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2hhZG93Qmx1ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hh
ZG93Qmx1ci5oCmluZGV4IDIwMmZmM2QuLmNiMjgyODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmgKQEAgLTM1LDI1ICszNSw1NiBAQAogI2luY2x1
ZGUgIlJvdW5kZWRJbnRSZWN0LmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKKyNp
ZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxRSW1hZ2U+CitRVF9CRUdJTl9OQU1FU1BBQ0UKK2Ns
YXNzIFFQYWludGVyOworUVRfRU5EX05BTUVTUEFDRQorI2VuZGlmCisKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7
CiBjbGFzcyBJbWFnZUJ1ZmZlcjsKIAorI2lmIFBMQVRGT1JNKFFUKQordHlwZWRlZiBRSW1hZ2Ug
UGxhdGZvcm1JbWFnZTsKK3R5cGVkZWYgUVBhaW50ZXIqIFBsYXRmb3JtQ29udGV4dDsKKyNlbHNl
Cit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtSW1hZ2U7Cit0eXBlZGVmIHZvaWQqIFBsYXRmb3JtQ29u
dGV4dDsKKyNlbmRpZgorCisKIGNsYXNzIFNoYWRvd0JsdXIgewogICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFNoYWRvd0JsdXIpOwogcHVibGljOgorICAgIGVudW0gU2hhZG93VHlwZSB7CisgICAg
ICAgIE5vU2hhZG93LAorICAgICAgICBTb2xpZFNoYWRvdywKKyAgICAgICAgQmx1clNoYWRvdwor
ICAgIH07CisKICAgICBTaGFkb3dCbHVyKGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBG
bG9hdFNpemUmIG9mZnNldCwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKIAogICAgIHZvaWQg
c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBpZ25vcmVUcmFuc2Zvcm1zKSB7IG1fc2hh
ZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBpZ25vcmVUcmFuc2Zvcm1zOyB9CiAgICAgYm9vbCBzaGFk
b3dzSWdub3JlVHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93c0lnbm9yZVRyYW5z
Zm9ybXM7IH0KIAorICAgIFBsYXRmb3JtQ29udGV4dCBiZWdpblNoYWRvd0xheWVyKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgbGF5ZXJBcmVhKTsKKyAgICB2b2lkIGVuZFNoYWRv
d0xheWVyKEdyYXBoaWNzQ29udGV4dCopOworCiAgICAgdm9pZCBkcmF3UmVjdFNoYWRvdyhHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBSb3VuZGVkSW50UmVjdDo6UmFk
aWkmKTsKICAgICB2b2lkIGRyYXdJbnNldFNoYWRvdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBG
bG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmIGhvbGVSZWN0LCBjb25zdCBSb3VuZGVkSW50UmVj
dDo6UmFkaWkmIGhvbGVSYWRpaSk7CiAKICAgICB2b2lkIGJsdXJMYXllckltYWdlKHVuc2lnbmVk
IGNoYXIqLCBjb25zdCBJbnRTaXplJiwgaW50IHN0cmlkZSk7CiAKKyAgICBib29sIG11c3RVc2VT
aGFkb3dCbHVyKEdyYXBoaWNzQ29udGV4dCopOworCisgICAgdm9pZCBjbGVhcigpOworCisgICAg
U2hhZG93VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiBwcml2YXRlOgogICAg
IHZvaWQgZHJhd1NoYWRvd0J1ZmZlcihHcmFwaGljc0NvbnRleHQqKTsKIApAQCAtODAsMTEgKzEx
MSw2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgSW50U2l6ZSBibHVycmVkRWRnZVNpemUoKSBjb25z
dDsKICAgICAKLSAgICBlbnVtIFNoYWRvd1R5cGUgewotICAgICAgICBOb1NoYWRvdywKLSAgICAg
ICAgU29saWRTaGFkb3csCi0gICAgICAgIEJsdXJTaGFkb3cKLSAgICB9OwogICAgIAogICAgIFNo
YWRvd1R5cGUgbV90eXBlOwogCkBAIC0xMDAsNiArMTI2LDggQEAgcHJpdmF0ZToKICAgICBGbG9h
dFNpemUgbV9sYXllclNpemU7IC8vIFNpemUgb2YgbV9sYXllckltYWdlIHBpeGVscyB0aGF0IG5l
ZWQgYmx1cnJpbmcuCiAgICAgRmxvYXRTaXplIG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb247IC8v
IFRyYW5zbGF0aW9uIHRvIGFwcGx5IHRvIG1fbGF5ZXJDb250ZXh0IGZvciB0aGUgc2hhZG93IHRv
IGJlIGNvcnJlY3RseSBjbGlwcGVkLgogCisgICAgUGxhdGZvcm1Db250ZXh0IG1fbGF5ZXJDb250
ZXh0OworCiAgICAgYm9vbCBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvd1F0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3dR
dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYjMxYTcuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvd1F0LmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIFNlbmNoYSwgSW5jLgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvbnRleHRTaGFkb3cuaCIKLQotI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgPFFQYWludGVyPgotI2luY2x1ZGUgPFFUaW1lckV2ZW50PgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLS8vIENvbnRleHRTaGFkb3cgbmVlZHMgYSBzY3JhdGNoIGltYWdlIGFzIHRoZSBidWZm
ZXIgZm9yIHRoZSBibHVyIGZpbHRlci4KLS8vIEluc3RlYWQgb2YgY3JlYXRpbmcgYW5kIGRlc3Ry
b3lpbmcgdGhlIGJ1ZmZlciBmb3IgZXZlcnkgb3BlcmF0aW9uLAotLy8gd2UgY3JlYXRlIGEgYnVm
ZmVyIHdoaWNoIHdpbGwgYmUgYXV0b21hdGljYWxseSBwdXJnZWQgdmlhIGEgdGltZXIuCi0KLWNs
YXNzIFNoYWRvd0J1ZmZlcjogcHVibGljIFFPYmplY3QgewotcHVibGljOgotICAgIFNoYWRvd0J1
ZmZlcihRT2JqZWN0KiBwYXJlbnQgPSAwKTsKLQotICAgIFFJbWFnZSogc2NyYXRjaEltYWdlKGNv
bnN0IFFTaXplJiBzaXplKTsKLQotICAgIHZvaWQgc2NoZWR1bGVQdXJnZSgpOwotCi1wcm90ZWN0
ZWQ6Ci0gICAgdm9pZCB0aW1lckV2ZW50KFFUaW1lckV2ZW50KiBldmVudCk7Ci0KLXByaXZhdGU6
Ci0gICAgUUltYWdlIGltYWdlOwotICAgIGludCB0aW1lcklkOwotfTsKLQotU2hhZG93QnVmZmVy
OjpTaGFkb3dCdWZmZXIoUU9iamVjdCogcGFyZW50KQotICAgIDogUU9iamVjdChwYXJlbnQpCi0g
ICAgLCB0aW1lcklkKC0xKQotewotfQotCi1RSW1hZ2UqIFNoYWRvd0J1ZmZlcjo6c2NyYXRjaElt
YWdlKGNvbnN0IFFTaXplJiBzaXplKQotewotICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsK
LSAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKLQotICAgIC8vIFdlIGRvIG5vdCBuZWVk
IHRvIHJlY3JlYXRlIHRoZSBidWZmZXIgaWYgdGhlIGJ1ZmZlciBpcyByZWFzb25hYmx5Ci0gICAg
Ly8gbGFyZ2VyIHRoYW4gdGhlIHJlcXVlc3RlZCBzaXplLiBIb3dldmVyLCBpZiB0aGUgcmVxdWVz
dGVkIHNpemUgaXMKLSAgICAvLyBtdWNoIHNtYWxsZXIgdGhhbiBvdXIgYnVmZmVyLCByZWR1Y2Ug
b3VyIGJ1ZmZlciBzbyB0aGF0IHdlIHdpbGwgbm90Ci0gICAgLy8ga2VlcCB0b28gbWFueSBhbGxv
Y2F0ZWQgcGl4ZWxzIGZvciB0b28gbG9uZy4KLSAgICBpZiAoIWltYWdlLmlzTnVsbCgpICYmIChp
bWFnZS53aWR0aCgpID4gd2lkdGgpICYmIChpbWFnZS5oZWlnaHQoKSA+IGhlaWdodCkpCi0gICAg
ICAgIGlmICgoKDIgKiB3aWR0aCkgPiBpbWFnZS53aWR0aCgpKSAmJiAoKDIgKiBoZWlnaHQpID4g
aW1hZ2UuaGVpZ2h0KCkpKSB7Ci0gICAgICAgICAgICBpbWFnZS5maWxsKDApOwotICAgICAgICAg
ICAgcmV0dXJuICZpbWFnZTsKLSAgICAgICAgfQotCi0gICAgLy8gUm91bmQgdG8gdGhlIG5lYXJl
c3QgMzIgcGl4ZWxzIHNvIHdlIGRvIG5vdCBncm93IHRoZSBidWZmZXIgZXZlcnl0aW1lCi0gICAg
Ly8gdGhlcmUgaXMgbGFyZ2VyIHJlcXVlc3QgYnkgMSBwaXhlbC4KLSAgICB3aWR0aCA9ICgxICsg
KHdpZHRoID4+IDUpKSA8PCA1OwotICAgIGhlaWdodCA9ICgxICsgKGhlaWdodCA+PiA1KSkgPDwg
NTsKLQotICAgIGltYWdlID0gUUltYWdlKHdpZHRoLCBoZWlnaHQsIFFJbWFnZTo6Rm9ybWF0X0FS
R0IzMl9QcmVtdWx0aXBsaWVkKTsKLSAgICBpbWFnZS5maWxsKDApOwotICAgIHJldHVybiAmaW1h
Z2U7Ci19Ci0KLXZvaWQgU2hhZG93QnVmZmVyOjpzY2hlZHVsZVB1cmdlKCkKLXsKLSAgICBzdGF0
aWMgY29uc3QgZG91YmxlIEJ1ZmZlclB1cmdlRGVsYXkgPSAyOyAvLyBzZWNvbmRzCi0gICAgaWYg
KHRpbWVySWQgPj0gMCkKLSAgICAgICAga2lsbFRpbWVyKHRpbWVySWQpOwotICAgIHRpbWVySWQg
PSBzdGFydFRpbWVyKEJ1ZmZlclB1cmdlRGVsYXkgKiAxMDAwKTsKLX0KLQotdm9pZCBTaGFkb3dC
dWZmZXI6OnRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqIGV2ZW50KQotewotICAgIGlmIChldmVudC0+
dGltZXJJZCgpID09IHRpbWVySWQpIHsKLSAgICAgICAga2lsbFRpbWVyKHRpbWVySWQpOwotICAg
ICAgICBpbWFnZSA9IFFJbWFnZSgpOwotICAgIH0KLSAgICBRT2JqZWN0Ojp0aW1lckV2ZW50KGV2
ZW50KTsKLX0KLQotUV9HTE9CQUxfU1RBVElDKFNoYWRvd0J1ZmZlciwgc2NyYXRjaFNoYWRvd0J1
ZmZlcikKLQotUGxhdGZvcm1Db250ZXh0IENvbnRleHRTaGFkb3c6OmJlZ2luU2hhZG93TGF5ZXIo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGxheWVyQXJlYSkKLXsK
LSAgICAvLyBTZXQgbV9ibHVyRGlzdGFuY2UuCi0gICAgYWRqdXN0Qmx1ckRpc3RhbmNlKGNvbnRl
eHQpOwotCi0gICAgUGxhdGZvcm1Db250ZXh0IHAgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKLQotICAgIFFSZWN0IGNsaXBSZWN0OwotICAgIGlmIChwLT5oYXNDbGlwcGluZygpKQotI2lm
IFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA4LCAwKQotICAgICAgICBjbGlwUmVj
dCA9IHAtPmNsaXBCb3VuZGluZ1JlY3QoKS50b0FsaWduZWRSZWN0KCk7Ci0jZWxzZQotICAgICAg
ICBjbGlwUmVjdCA9IHAtPmNsaXBSZWdpb24oKS5ib3VuZGluZ1JlY3QoKTsKLSNlbmRpZgotICAg
IGVsc2UKLSAgICAgICAgY2xpcFJlY3QgPSBwLT50cmFuc2Zvcm0oKS5pbnZlcnRlZCgpLm1hcFJl
Y3QocC0+d2luZG93KCkpOwotCi0gICAgLy8gU2V0IG1fbGF5ZXJPcmlnaW4sIG1fbGF5ZXJDb250
ZXh0VHJhbnNsYXRpb24sIG1fc291cmNlUmVjdC4KLSAgICBJbnRSZWN0IGNsaXAoY2xpcFJlY3Qu
eCgpLCBjbGlwUmVjdC55KCksIGNsaXBSZWN0LndpZHRoKCksIGNsaXBSZWN0LmhlaWdodCgpKTsK
LSAgICBJbnRSZWN0IGxheWVyUmVjdCA9IGNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0KGNvbnRl
eHQsIGxheWVyQXJlYSwgY2xpcCk7Ci0KLSAgICAvLyBEb24ndCBwYWludCBpZiB3ZSBhcmUgdG90
YWxseSBvdXRzaWRlIHRoZSBjbGlwIHJlZ2lvbi4KLSAgICBpZiAobGF5ZXJSZWN0LmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBTaGFkb3dCdWZmZXIqIHNoYWRvd0J1ZmZlciA9
IHNjcmF0Y2hTaGFkb3dCdWZmZXIoKTsKLSAgICBRSW1hZ2UqIHNoYWRvd0ltYWdlID0gc2hhZG93
QnVmZmVyLT5zY3JhdGNoSW1hZ2UobGF5ZXJSZWN0LnNpemUoKSk7Ci0gICAgbV9sYXllckltYWdl
ID0gUUltYWdlKCpzaGFkb3dJbWFnZSk7Ci0KLSAgICBtX2xheWVyQ29udGV4dCA9IG5ldyBRUGFp
bnRlcjsKLSAgICBtX2xheWVyQ29udGV4dC0+YmVnaW4oJm1fbGF5ZXJJbWFnZSk7Ci0gICAgbV9s
YXllckNvbnRleHQtPnNldEZvbnQocC0+Zm9udCgpKTsKLSAgICBtX2xheWVyQ29udGV4dC0+dHJh
bnNsYXRlKG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb24pOwotICAgIHJldHVybiBtX2xheWVyQ29u
dGV4dDsKLX0KLQotdm9pZCBDb250ZXh0U2hhZG93OjplbmRTaGFkb3dMYXllcihHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQpCi17Ci0gICAgbV9sYXllckNvbnRleHQtPmVuZCgpOwotICAgIGRlbGV0
ZSBtX2xheWVyQ29udGV4dDsKLSAgICBtX2xheWVyQ29udGV4dCA9IDA7Ci0KLSAgICBpZiAobV90
eXBlID09IEJsdXJTaGFkb3cpIHsKLSAgICAgICAgYmx1ckxheWVySW1hZ2UobV9sYXllckltYWdl
LmJpdHMoKSwgSW50U2l6ZShtX2xheWVySW1hZ2Uud2lkdGgoKSwgbV9sYXllckltYWdlLmhlaWdo
dCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgbV9sYXllckltYWdlLmJ5dGVzUGVyTGluZSgp
KTsKLSAgICB9Ci0KLSAgICBpZiAobV90eXBlICE9IE5vU2hhZG93KSB7Ci0gICAgICAgIC8vICJD
b2xvcml6ZSIgd2l0aCB0aGUgcmlnaHQgc2hhZG93IGNvbG9yLgotICAgICAgICBRUGFpbnRlciBw
KCZtX2xheWVySW1hZ2UpOwotICAgICAgICBwLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6
Q29tcG9zaXRpb25Nb2RlX1NvdXJjZUluKTsKLSAgICAgICAgcC5maWxsUmVjdChtX2xheWVySW1h
Z2UucmVjdCgpLCBtX2NvbG9yLnJnYigpKTsKLSAgICAgICAgcC5lbmQoKTsKLSAgICB9Ci0KLSAg
ICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd0ltYWdlKG1fbGF5ZXJPcmlnaW4sIG1f
bGF5ZXJJbWFnZSwgbV9zb3VyY2VSZWN0KTsKLQotICAgIHNjcmF0Y2hTaGFkb3dCdWZmZXIoKS0+
c2NoZWR1bGVQdXJnZSgpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvRm9udFF0LmNwcAppbmRleCBhMWE1MzlkLi45YmZkOTA5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAKQEAgLTIzLDcgKzIzLDYg
QEAKICNpbmNsdWRlICJGb250LmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNp
bmNsdWRlICJDb250ZXh0U2hhZG93LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAj
aW5jbHVkZSAiRm9udEZhbGxiYWNrTGlzdC5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgpA
QCAtMzQsNiArMzMsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgorI2luY2x1ZGUgIlNoYWRv
d0JsdXIuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAKICNpbmNsdWRlIDxRQnJ1c2g+CkBAIC0x
NDIsMzIgKzE0MiwzMyBAQCBzdGF0aWMgdm9pZCBkcmF3VGV4dENvbW1vbihHcmFwaGljc0NvbnRl
eHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdAogICAgICAgICAgICAgUVJl
Y3RGIGJvdW5kaW5nUmVjdChwb2ludC54KCkgKyB4MSwgcG9pbnQueSgpIC0gYXNjZW50LCB4MiAt
IHgxLCBmbS5oZWlnaHQoKSk7CiAgICAgICAgICAgICBRUmVjdEYgY2xpcCA9IGJvdW5kaW5nUmVj
dDsKIAotICAgICAgICAgICAgQ29udGV4dFNoYWRvdyogY3R4U2hhZG93ID0gY3R4LT5jb250ZXh0
U2hhZG93KCk7Ci0KLSAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0
U2hhZG93OjpOb1NoYWRvdykgeworICAgICAgICAgICAgU2hhZG93Qmx1ciogY3R4U2hhZG93ID0g
Y3R4LT5zaGFkb3dCbHVyKCk7CisgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0g
U2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnRGIHNo
YWRvd09mZnNldChjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0eC0+c3RhdGUo
KS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIHFyZWFsIGR4MSA9IDAs
IGR4MiA9IDAsIGR5MSA9IDAsIGR5MiA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eFNoYWRv
dy0+b2Zmc2V0KCkueCgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgZHgyID0gY3R4U2hhZG93
LT5vZmZzZXQoKS54KCk7CisgICAgICAgICAgICAgICAgaWYgKHNoYWRvd09mZnNldC54KCkgPiAw
KQorICAgICAgICAgICAgICAgICAgICBkeDIgPSBzaGFkb3dPZmZzZXQueCgpOwogICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZHgxID0gLWN0eFNoYWRvdy0+b2Zmc2V0
KCkueCgpOwotICAgICAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPm9mZnNldCgpLnkoKSA+IDAp
Ci0gICAgICAgICAgICAgICAgICAgIGR5MiA9IGN0eFNoYWRvdy0+b2Zmc2V0KCkueSgpOworICAg
ICAgICAgICAgICAgICAgICBkeDEgPSAtc2hhZG93T2Zmc2V0LngoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoc2hhZG93T2Zmc2V0LnkoKSA+IDApCisgICAgICAgICAgICAgICAgICAgIGR5MiA9IHNo
YWRvd09mZnNldC55KCk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBkeTEgPSAtY3R4U2hhZG93LT5vZmZzZXQoKS55KCk7CisgICAgICAgICAgICAgICAgICAgIGR5
MSA9IC1zaGFkb3dPZmZzZXQueSgpOwogICAgICAgICAgICAgICAgIC8vIGV4cGFuZCB0aGUgY2xp
cCByZWN0IHRvIGluY2x1ZGUgdGhlIHRleHQgc2hhZG93IGFzIHdlbGwKKyAgICAgICAgICAgICAg
ICBjb25zdCBmbG9hdCBibHVyRGlzdGFuY2UgPSBjdHgtPnN0YXRlKCkuc2hhZG93Qmx1cjsKICAg
ICAgICAgICAgICAgICBjbGlwLmFkanVzdChkeDEsIGR4MiwgZHkxLCBkeTIpOwotICAgICAgICAg
ICAgICAgIGNsaXAuYWRqdXN0KC1jdHhTaGFkb3ctPm1fYmx1ckRpc3RhbmNlLCAtY3R4U2hhZG93
LT5tX2JsdXJEaXN0YW5jZSwgY3R4U2hhZG93LT5tX2JsdXJEaXN0YW5jZSwgY3R4U2hhZG93LT5t
X2JsdXJEaXN0YW5jZSk7CisgICAgICAgICAgICAgICAgY2xpcC5hZGp1c3QoLWJsdXJEaXN0YW5j
ZSwgLWJsdXJEaXN0YW5jZSwgYmx1ckRpc3RhbmNlLCBibHVyRGlzdGFuY2UpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgcC0+c2F2ZSgpOwogICAgICAgICAgICAgcC0+c2V0Q2xpcFJlY3Qo
Y2xpcC50b1JlY3QoKSwgUXQ6OkludGVyc2VjdENsaXApOwogICAgICAgICAgICAgcHQuc2V0WShw
dC55KCkgLSBhc2NlbnQpOwogCi0gICAgICAgICAgICBpZiAoY3R4U2hhZG93LT5tX3R5cGUgIT0g
Q29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpIHsKLSAgICAgICAgICAgICAgICBDb250ZXh0U2hhZG93
KiBjdHhTaGFkb3cgPSBjdHgtPmNvbnRleHRTaGFkb3coKTsKLSAgICAgICAgICAgICAgICBpZiAo
IWN0eFNoYWRvdy0+bXVzdFVzZUNvbnRleHRTaGFkb3coY3R4KSkgeworICAgICAgICAgICAgaWYg
KGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6Ok5vU2hhZG93KSB7CisgICAgICAgICAg
ICAgICAgU2hhZG93Qmx1ciogY3R4U2hhZG93ID0gY3R4LT5zaGFkb3dCbHVyKCk7CisgICAgICAg
ICAgICAgICAgaWYgKCFjdHhTaGFkb3ctPm11c3RVc2VTaGFkb3dCbHVyKGN0eCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgcC0+c2F2ZSgpOwotICAgICAgICAgICAgICAgICAgICBwLT5zZXRQZW4o
Y3R4U2hhZG93LT5tX2NvbG9yKTsKLSAgICAgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKGN0
eFNoYWRvdy0+b2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICBwLT5zZXRQZW4oY3R4LT5z
dGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKFFQ
b2ludEYoY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpLCBjdHgtPnN0YXRlKCkuc2hh
ZG93T2Zmc2V0LmhlaWdodCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGxpbmUuZHJhdyhwLCBw
dCk7CiAgICAgICAgICAgICAgICAgICAgIHAtPnJlc3RvcmUoKTsKICAgICAgICAgICAgICAgICB9
IGVsc2UgewpAQCAtMTc1LDcgKzE3Niw3IEBAIHN0YXRpYyB2b2lkIGRyYXdUZXh0Q29tbW9uKEdy
YXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0CiAgICAg
ICAgICAgICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQgYW55d2F5LCB3ZSBkb24ndCBjYXJlIGFi
b3V0IHJlbmRlciBoaW50cy4KICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXIt
PnNldEZvbnQocC0+Zm9udCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50
ZXItPnNldFBlbihjdHhTaGFkb3ctPm1fY29sb3IpOworICAgICAgICAgICAgICAgICAgICAgICAg
c2hhZG93UGFpbnRlci0+c2V0UGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBsaW5lLmRyYXcoc2hhZG93UGFpbnRlciwgcHQpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgY3R4U2hhZG93LT5lbmRTaGFkb3dMYXllcihjdHgpOwogICAgICAgICAg
ICAgICAgICAgICB9CkBAIC0yMDEsMTMgKzIwMiwxMyBAQCBzdGF0aWMgdm9pZCBkcmF3VGV4dENv
bW1vbihHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9h
dAogICAgIGlmIChjdHgtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVTdHJva2UpCiAgICAg
ICAgIHRleHRTdHJva2VQYXRoLmFkZFRleHQocHQsIGZvbnQsIHN0cmluZyk7CiAKLSAgICBDb250
ZXh0U2hhZG93KiBjdHhTaGFkb3cgPSBjdHgtPmNvbnRleHRTaGFkb3coKTsKLSAgICBpZiAoY3R4
U2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpIHsKKyAgICBTaGFkb3dC
bHVyKiBjdHhTaGFkb3cgPSBjdHgtPnNoYWRvd0JsdXIoKTsKKyAgICBpZiAoY3R4LT5oYXNTaGFk
b3coKSAmJiBjdHhTaGFkb3ctPnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpOb1NoYWRvdykgewogICAg
ICAgICBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlRmlsbCkgewotICAgICAg
ICAgICAgaWYgKGN0eFNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6OkJsdXJTaGFkb3cp
IHsKKyAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpCbHVy
U2hhZG93KSB7CiAgICAgICAgICAgICAgICAgcC0+c2F2ZSgpOwotICAgICAgICAgICAgICAgIHAt
PnNldFBlbihjdHhTaGFkb3ctPm1fY29sb3IpOwotICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0
ZShjdHhTaGFkb3ctPm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBwLT5zZXRQZW4oY3R4LT5z
dGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoUVBvaW50
RihjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0eC0+c3RhdGUoKS5zaGFkb3dP
ZmZzZXQuaGVpZ2h0KCkpKTsKICAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dChwdCwgc3RyaW5n
LCBmbGFncywgcnVuLmV4cGFuc2lvbigpKTsKICAgICAgICAgICAgICAgICBwLT5yZXN0b3JlKCk7
CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjE3LDE2ICsyMTgsMTcgQEAgc3RhdGljIHZvaWQg
ZHJhd1RleHRDb21tb24oR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRmxvYXQKICAgICAgICAgICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewogICAgICAg
ICAgICAgICAgICAgICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQgYW55d2F5LCB3ZSBkb24n
dCBjYXJlIGFib3V0IHJlbmRlciBoaW50cy4KICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFp
bnRlci0+c2V0Rm9udChwLT5mb250KCkpOwotICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWlu
dGVyLT5zZXRQZW4oY3R4U2hhZG93LT5tX2NvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgc2hh
ZG93UGFpbnRlci0+c2V0UGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7CiAgICAgICAgICAg
ICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmRyYXdUZXh0KHB0LCBzdHJpbmcsIGZsYWdzLCBydW4u
ZXhwYW5zaW9uKCkpOwogICAgICAgICAgICAgICAgICAgICBjdHhTaGFkb3ctPmVuZFNoYWRvd0xh
eWVyKGN0eCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkgewotICAgICAg
ICAgICAgaWYgKGN0eFNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6OkJsdXJTaGFkb3cp
IHsKLSAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoY3R4U2hhZG93LT5vZmZzZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgcC0+c3Ryb2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBlbihjdHhTaGFk
b3ctPm1fY29sb3IpKTsKLSAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoLWN0eFNoYWRvdy0+
b2Zmc2V0KCkpOworICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0Js
dXI6OkJsdXJTaGFkb3cpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnRGIHNoYWRvd09m
ZnNldChjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0eC0+c3RhdGUoKS5zaGFk
b3dPZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShzaGFkb3dP
ZmZzZXQpOworICAgICAgICAgICAgICAgIHAtPnN0cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgsIFFQ
ZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKSk7CisgICAgICAgICAgICAgICAgcC0+dHJhbnNs
YXRlKC1zaGFkb3dPZmZzZXQpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICBRRm9udE1ldHJpY3MgZm0oZm9udCk7CiAgICAgICAgICAgICAgICAgUVJlY3RGIGJvdW5kaW5n
UmVjdChwdC54KCksIHBvaW50LnkoKSAtIGZtLmFzY2VudCgpLCBmbS53aWR0aChzdHJpbmcsIC0x
LCBmbGFncyksIGZtLmhlaWdodCgpKTsKQEAgLTIzNCw3ICsyMzYsNyBAQCBzdGF0aWMgdm9pZCBk
cmF3VGV4dENvbW1vbihHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBj
b25zdCBGbG9hdAogICAgICAgICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CiAgICAgICAg
ICAgICAgICAgICAgIC8vIFNpbmNlIGl0IHdpbGwgYmUgYmx1cnJlZCBhbnl3YXksIHdlIGRvbid0
IGNhcmUgYWJvdXQgcmVuZGVyIGhpbnRzLgogICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWlu
dGVyLT5zZXRGb250KHAtPmZvbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50
ZXItPnN0cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgsIFFQZW4oY3R4U2hhZG93LT5tX2NvbG9yKSk7
CisgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnN0cm9rZVBhdGgodGV4dFN0cm9r
ZVBhdGgsIFFQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGN0eFNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY3R4KTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICB9CkBAIC0zMjgsNyArMzMwLDcgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLAog
ICAgIEFTU0VSVCghc2hvdWxkU3Ryb2tlKTsKIAogICAgIC8vIFNoYWRvd2VkIHRleHQgc2hvdWxk
IGFsd2F5cyB0YWtlIHRoZSBjb21wbGV4IHBhdGguCi0gICAgQVNTRVJUKGNvbnRleHQtPmNvbnRl
eHRTaGFkb3coKS0+bV90eXBlID09IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KTsKKyAgICBBU1NF
UlQoY29udGV4dC0+Y29udGV4dFNoYWRvdygpLT50eXBlKCkgPT0gU2hhZG93Qmx1cjo6Tm9TaGFk
b3cpOwogCiAgICAgaWYgKCFzaG91bGRGaWxsICYmICFzaG91bGRTdHJva2UpCiAgICAgICAgIHJl
dHVybjsKQEAgLTM2MSw3ICszNjMsNyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsCiAgICAgUVBh
aW50ZXIqIHBhaW50ZXIgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIENvbnRl
eHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHQtPmNvbnRleHRTaGFkb3coKTsKLSAgICBzd2l0Y2gg
KHNoYWRvdy0+bV90eXBlKSB7CisgICAgc3dpdGNoIChzaGFkb3ctPnR5cGUoKSkgewogICAgIGNh
c2UgQ29udGV4dFNoYWRvdzo6U29saWRTaGFkb3c6IHsKICAgICAgICAgUVBlbiBwcmV2aW91c1Bl
biA9IHBhaW50ZXItPnBlbigpOwogICAgICAgICBwYWludGVyLT5zZXRQZW4oc2hhZG93LT5tX2Nv
bG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzQ29udGV4dFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzQ29udGV4dFF0LmNwcAppbmRleCA3OTNjZGUwLi45MTQyZjdmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250
ZXh0UXQuY3BwCkBAIC00NCwxMyArNDQsMTMgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiQ29udGV4dFNoYWRvdy5oIgogI2lu
Y2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJJ
bWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0
aC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCiAjaW5j
bHVkZSAiVHJhbnNwYXJlbmN5TGF5ZXIuaCIKIAogI2luY2x1ZGUgPFFCcnVzaD4KQEAgLTE5Niw4
ICsxOTYsOCBAQCBwdWJsaWM6CiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eTsKICAgICBib29sIGluaXRpYWxTbW9vdGhQaXhtYXBUcmFuc2Zvcm1IaW50
OwogCi0gICAgQ29udGV4dFNoYWRvdyBzaGFkb3c7Ci0gICAgUVN0YWNrPENvbnRleHRTaGFkb3c+
IHNoYWRvd1N0YWNrOworICAgIFNoYWRvd0JsdXIqIHNoYWRvdzsKKyAgICBRU3RhY2s8U2hhZG93
Qmx1cio+IHNoYWRvd1N0YWNrOwogCiAgICAgUVJlY3RGIGNsaXBCb3VuZGluZ1JlY3QoKSBjb25z
dAogICAgIHsKQEAgLTI3Nyw2ICsyNzcsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnBsYXRm
b3JtRGVzdHJveSgpCiAgICAgd2hpbGUgKCFtX2RhdGEtPmxheWVycy5pc0VtcHR5KCkpCiAgICAg
ICAgIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAKKyAgICB3aGlsZSAoIW1fZGF0YS0+c2hhZG93
U3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgIFNoYWRvd0JsdXIgKnNoYWRvdyA9IG1fZGF0YS0+
c2hhZG93U3RhY2sucG9wKCk7CisgICAgICAgIGRlbGV0ZSBzaGFkb3c7CisgICAgfQorCisgICAg
aWYgKGhhc1NoYWRvdygpKQorICAgICAgICBkZWxldGUgbV9kYXRhLT5zaGFkb3c7CiAgICAgZGVs
ZXRlIG1fZGF0YTsKIH0KIApAQCAtMzA5LDcgKzMxNiw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSgpCiAgICAgbV9kYXRhLT5wKCktPnJlc3RvcmUoKTsKIAog
ICAgIGlmIChtX2RhdGEtPnNoYWRvd1N0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgbV9kYXRhLT5z
aGFkb3cgPSBDb250ZXh0U2hhZG93KCk7CisgICAgICAgIG1fZGF0YS0+c2hhZG93ID0gbmV3IFNo
YWRvd0JsdXIoRmxvYXRTaXplKG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dCbHVy
KSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93Q29sb3IsIG1fc3RhdGUuc2hh
ZG93Q29sb3JTcGFjZSk7CiAgICAgZWxzZQogICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IG1fZGF0
YS0+c2hhZG93U3RhY2sucG9wKCk7CiB9CkBAIC00OTUsMzEgKzUwMiwzMSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBwbGF0Zm9ybVBhdGgu
c2V0RmlsbFJ1bGUodG9RdEZpbGxSdWxlKGZpbGxSdWxlKCkpKTsKIAogICAgIGlmIChoYXNTaGFk
b3coKSkgewotICAgICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7
Ci0gICAgICAgIGlmIChzaGFkb3ctPm11c3RVc2VDb250ZXh0U2hhZG93KHRoaXMpIHx8IG1fc3Rh
dGUuZmlsbFBhdHRlcm4gfHwgbV9zdGF0ZS5maWxsR3JhZGllbnQpCisgICAgICAgIFNoYWRvd0Js
dXIqIHNoYWRvdyA9IHNoYWRvd0JsdXIoKTsKKyAgICAgICAgaWYgKHNoYWRvdy0+bXVzdFVzZVNo
YWRvd0JsdXIodGhpcykgfHwgbV9zdGF0ZS5maWxsUGF0dGVybiB8fCBtX3N0YXRlLmZpbGxHcmFk
aWVudCkKICAgICAgICAgewogICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBz
aGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgcGxhdGZvcm1QYXRoLmNvbnRyb2xQb2ludFJl
Y3QoKSk7CiAgICAgICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewogICAgICAgICAgICAgICAg
IGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CiAgICAgICAgICAgICAgICAgICAgIEFmZmluZVRy
YW5zZm9ybSBhZmZpbmU7Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldE9w
YWNpdHkoc3RhdGljX2Nhc3Q8cXJlYWw+KHNoYWRvdy0+bV9jb2xvci5hbHBoYSgpKSAvIDI1NSk7
CisgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldE9wYWNpdHkoc3RhdGljX2Nh
c3Q8cXJlYWw+KG1fc3RhdGUuc2hhZG93Q29sb3IuYWxwaGEoKSkgLyAyNTUpOwogICAgICAgICAg
ICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIFFCcnVzaCht
X3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSkpOwogICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKICAgICAgICAg
ICAgICAgICAgICAgUUJydXNoIGJydXNoKCptX3N0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1H
cmFkaWVudCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJ1c2guc2V0VHJhbnNmb3JtKG1fc3Rh
dGUuZmlsbEdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOwotICAgICAgICAgICAg
ICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPihzaGFk
b3ctPm1fY29sb3IuYWxwaGEoKSkgLyAyNTUpOworICAgICAgICAgICAgICAgICAgICBzaGFkb3dQ
YWludGVyLT5zZXRPcGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPihtX3N0YXRlLnNoYWRvd0NvbG9y
LmFscGhhKCkpIC8gMjU1KTsKICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+Zmls
bFBhdGgocGxhdGZvcm1QYXRoLCBicnVzaCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gc2hhZG93LT5tX2NvbG9yOwor
ICAgICAgICAgICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBtX3N0YXRlLnNoYWRvd0Nv
bG9yOwogICAgICAgICAgICAgICAgICAgICBzaGFkb3dDb2xvci5zZXRBbHBoYUYoc2hhZG93Q29s
b3IuYWxwaGFGKCkgKiBwLT5icnVzaCgpLmNvbG9yKCkuYWxwaGFGKCkpOwogICAgICAgICAgICAg
ICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIHNoYWRvd0NvbG9y
KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dM
YXllcih0aGlzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IFFQb2ludEYgb2Zmc2V0ID0gc2hhZG93LT5vZmZzZXQoKTsKKyAgICAgICAgICAgIFFQb2ludEYg
b2Zmc2V0KG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCksIG1fc3RhdGUuc2hhZG93T2Zmc2V0
LmhlaWdodCgpKTsKICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShvZmZzZXQpOwotICAgICAgICAg
ICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gc2hhZG93LT5tX2NvbG9yOworICAgICAgICAgICAgUUNv
bG9yIHNoYWRvd0NvbG9yID0gbV9zdGF0ZS5zaGFkb3dDb2xvcjsKICAgICAgICAgICAgIHNoYWRv
d0NvbG9yLnNldEFscGhhRihzaGFkb3dDb2xvci5hbHBoYUYoKSAqIHAtPmJydXNoKCkuY29sb3Io
KS5hbHBoYUYoKSk7CiAgICAgICAgICAgICBwLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIHNoYWRv
d0NvbG9yKTsKICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZSgtb2Zmc2V0KTsKQEAgLTU0Nyw4ICs1
NTQsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRo
KQogICAgIHBsYXRmb3JtUGF0aC5zZXRGaWxsUnVsZSh0b1F0RmlsbFJ1bGUoZmlsbFJ1bGUoKSkp
OwogCiAgICAgaWYgKGhhc1NoYWRvdygpKSB7Ci0gICAgICAgIENvbnRleHRTaGFkb3cqIHNoYWRv
dyA9IGNvbnRleHRTaGFkb3coKTsKLSAgICAgICAgaWYgKHNoYWRvdy0+bXVzdFVzZUNvbnRleHRT
aGFkb3codGhpcykgfHwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuIHx8IG1fc3RhdGUuc3Ryb2tlR3Jh
ZGllbnQpCisgICAgICAgIFNoYWRvd0JsdXIqIHNoYWRvdyA9IHNoYWRvd0JsdXIoKTsKKyAgICAg
ICAgaWYgKHNoYWRvdy0+bXVzdFVzZVNoYWRvd0JsdXIodGhpcykgfHwgbV9zdGF0ZS5zdHJva2VQ
YXR0ZXJuIHx8IG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpCiAgICAgICAgIHsKICAgICAgICAgICAg
IEZsb2F0UmVjdCBib3VuZGluZ1JlY3QgPSBwbGF0Zm9ybVBhdGguY29udHJvbFBvaW50UmVjdCgp
OwogICAgICAgICAgICAgYm91bmRpbmdSZWN0LmluZmxhdGUocGVuLm1pdGVyTGltaXQoKSArIHBl
bi53aWR0aEYoKSk7CkBAIC01NTksMTggKzU2NiwxOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgICAgICAgICAgICAgICAgICBicnVzaC5z
ZXRUcmFuc2Zvcm0obV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9y
bSgpKTsKICAgICAgICAgICAgICAgICAgICAgUVBlbiBzaGFkb3dQZW4ocGVuKTsKICAgICAgICAg
ICAgICAgICAgICAgc2hhZG93UGVuLnNldEJydXNoKGJydXNoKTsKLSAgICAgICAgICAgICAgICAg
ICAgc2hhZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVhbD4oc2hhZG93LT5t
X2NvbG9yLmFscGhhKCkpIC8gMjU1KTsKKyAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRl
ci0+c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVhbD4obV9zdGF0ZS5zaGFkb3dDb2xvci5hbHBo
YSgpKSAvIDI1NSk7CiAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnN0cm9rZVBh
dGgocGxhdGZvcm1QYXRoLCBzaGFkb3dQZW4pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldE9wYWNpdHkoc3RhdGljX2Nhc3Q8
cXJlYWw+KG1fZGF0YS0+c2hhZG93Lm1fY29sb3IuYWxwaGEoKSkgLyAyNTUpOworICAgICAgICAg
ICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPiht
X3N0YXRlLnNoYWRvd0NvbG9yLmFscGhhKCkpIC8gMjU1KTsKICAgICAgICAgICAgICAgICAgICAg
c2hhZG93UGFpbnRlci0+c3Ryb2tlUGF0aChwbGF0Zm9ybVBhdGgsIHBlbik7CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIodGhpcyk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBRUG9pbnRGIG9mZnNl
dCA9IHNoYWRvdy0+b2Zmc2V0KCk7CisgICAgICAgICAgICBRUG9pbnRGIG9mZnNldChtX3N0YXRl
LnNoYWRvd09mZnNldC53aWR0aCgpLCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7CiAg
ICAgICAgICAgICBwLT50cmFuc2xhdGUob2Zmc2V0KTsKLSAgICAgICAgICAgIFFDb2xvciBzaGFk
b3dDb2xvciA9IHNoYWRvdy0+bV9jb2xvcjsKKyAgICAgICAgICAgIFFDb2xvciBzaGFkb3dDb2xv
ciA9IG1fc3RhdGUuc2hhZG93Q29sb3I7CiAgICAgICAgICAgICBzaGFkb3dDb2xvci5zZXRBbHBo
YUYoc2hhZG93Q29sb3IuYWxwaGFGKCkgKiBwZW4uY29sb3IoKS5hbHBoYUYoKSk7CiAgICAgICAg
ICAgICBRUGVuIHNoYWRvd1BlbihwZW4pOwogICAgICAgICAgICAgc2hhZG93UGVuLnNldENvbG9y
KHNoYWRvd0NvbG9yKTsKQEAgLTY2OCw3ICs2NzUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogCiAgICAgUVBhaW50ZXIqIHAgPSBtX2Rh
dGEtPnAoKTsKICAgICBRUmVjdEYgbm9ybWFsaXplZFJlY3QgPSByZWN0Lm5vcm1hbGl6ZWQoKTsK
LSAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7CisgICAgU2hhZG93
Qmx1ciogc2hhZG93ID0gc2hhZG93Qmx1cigpOwogCiAgICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRl
cm4pIHsKICAgICAgICAgUVBpeG1hcCogaW1hZ2UgPSBtX3N0YXRlLmZpbGxQYXR0ZXJuLT50aWxl
SW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKQEAgLTY3Niw3ICs2ODMsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQog
ICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewogICAgICAgICAgICAgZHJhd1JlcGVhdFBhdHRl
cm4oc2hhZG93UGFpbnRlciwgaW1hZ2UsIG5vcm1hbGl6ZWRSZWN0LCBtX3N0YXRlLmZpbGxQYXR0
ZXJuLT5yZXBlYXRYKCksIG1fc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFkoKSk7CiAgICAgICAg
ICAgICBzaGFkb3dQYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0
aW9uTW9kZV9Tb3VyY2VJbik7Ci0gICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChu
b3JtYWxpemVkUmVjdCwgc2hhZG93LT5tX2NvbG9yKTsKKyAgICAgICAgICAgIHNoYWRvd1BhaW50
ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsKICAgICAg
ICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIodGhpcyk7CiAgICAgICAgIH0KICAgICAgICAg
ZHJhd1JlcGVhdFBhdHRlcm4ocCwgaW1hZ2UsIG5vcm1hbGl6ZWRSZWN0LCBtX3N0YXRlLmZpbGxQ
YXR0ZXJuLT5yZXBlYXRYKCksIG1fc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFkoKSk7CkBAIC02
ODcsMjUgKzY5NCwyNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxv
YXRSZWN0JiByZWN0KQogICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewogICAgICAgICAgICAg
c2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIGJydXNoKTsKICAgICAgICAg
ICAgIHNoYWRvd1BhaW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRp
b25Nb2RlX1NvdXJjZUluKTsKLSAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5v
cm1hbGl6ZWRSZWN0LCBzaGFkb3ctPm1fY29sb3IpOworICAgICAgICAgICAgc2hhZG93UGFpbnRl
ci0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwogICAgICAg
ICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcih0aGlzKTsKICAgICAgICAgfQogICAgICAgICBw
LT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwgYnJ1c2gpOwogICAgIH0gZWxzZSB7CiAgICAgICAg
IGlmIChoYXNTaGFkb3coKSkgewotICAgICAgICAgICAgaWYgKHNoYWRvdy0+bXVzdFVzZUNvbnRl
eHRTaGFkb3codGhpcykpIHsKKyAgICAgICAgICAgIGlmIChzaGFkb3ctPm11c3RVc2VTaGFkb3dC
bHVyKHRoaXMpKSB7CiAgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBz
aGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgbm9ybWFsaXplZFJlY3QpOwogICAgICAgICAg
ICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1Bh
aW50ZXItPnNldE9wYWNpdHkoc3RhdGljX2Nhc3Q8cXJlYWw+KHNoYWRvdy0+bV9jb2xvci5hbHBo
YSgpKSAvIDI1NSk7CisgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldE9wYWNp
dHkoc3RhdGljX2Nhc3Q8cXJlYWw+KG1fc3RhdGUuc2hhZG93Q29sb3IuYWxwaGEoKSkgLyAyNTUp
OwogICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3JtYWxpemVk
UmVjdCwgcC0+YnJ1c2goKSk7CiAgICAgICAgICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93
TGF5ZXIodGhpcyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAvLyBTb2xpZCByZWN0YW5nbGUgZmlsbCB3aXRoIG5vIGJsdXIgc2hhZG93
IG9yIHRyYW5zZm9ybWF0aW9ucyBhcHBsaWVkIGNhbiBiZSBkb25lCiAgICAgICAgICAgICAgICAg
Ly8gZmFzdGVyIHdpdGhvdXQgdXNpbmcgdGhlIHNoYWRvdyBsYXllciBhdCBhbGwuCi0gICAgICAg
ICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gc2hhZG93LT5tX2NvbG9yOworICAgICAgICAg
ICAgICAgIFFDb2xvciBzaGFkb3dDb2xvciA9IG1fc3RhdGUuc2hhZG93Q29sb3I7CiAgICAgICAg
ICAgICAgICAgc2hhZG93Q29sb3Iuc2V0QWxwaGFGKHNoYWRvd0NvbG9yLmFscGhhRigpICogcC0+
YnJ1c2goKS5jb2xvcigpLmFscGhhRigpKTsKLSAgICAgICAgICAgICAgICBwLT5maWxsUmVjdChu
b3JtYWxpemVkUmVjdC50cmFuc2xhdGVkKHNoYWRvdy0+b2Zmc2V0KCkpLCBzaGFkb3dDb2xvcik7
CisgICAgICAgICAgICAgICAgcC0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QudHJhbnNsYXRlZChR
UG9pbnRGKG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCksIG1fc3RhdGUuc2hhZG93T2Zmc2V0
LmhlaWdodCgpKSksIHNoYWRvd0NvbG9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBA
IC03MjQsMTYgKzczMSwxNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yUwogICAgIFFSZWN0RiBu
b3JtYWxpemVkUmVjdCA9IHJlY3Qubm9ybWFsaXplZCgpOwogCiAgICAgaWYgKGhhc1NoYWRvdygp
KSB7Ci0gICAgICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHRTaGFkb3coKTsKLSAg
ICAgICAgaWYgKHNoYWRvdy0+bXVzdFVzZUNvbnRleHRTaGFkb3codGhpcykpIHsKKyAgICAgICAg
U2hhZG93Qmx1ciogc2hhZG93ID0gc2hhZG93Qmx1cigpOworICAgICAgICBpZiAoc2hhZG93LT5t
dXN0VXNlU2hhZG93Qmx1cih0aGlzKSkgewogICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1Bh
aW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgbm9ybWFsaXplZFJlY3QpOwog
ICAgICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKICAgICAgICAgICAgICAgICBzaGFkb3dQ
YWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3Vy
Y2UpOwotICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRS
ZWN0LCBzaGFkb3ctPm1fY29sb3IpOworICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZp
bGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsKICAgICAgICAgICAg
ICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKHRoaXMpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LnRyYW5zbGF0
ZWQoc2hhZG93LT5vZmZzZXQoKSksIHNoYWRvdy0+bV9jb2xvcik7CisgICAgICAgICAgICBwLT5m
aWxsUmVjdChub3JtYWxpemVkUmVjdC50cmFuc2xhdGVkKFFQb2ludEYobV9zdGF0ZS5zaGFkb3dP
ZmZzZXQud2lkdGgoKSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpKSwgbV9zdGF0ZS5z
aGFkb3dDb2xvcik7CiAgICAgfQogCiAgICAgcC0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIG1f
ZGF0YS0+c29saWRDb2xvcik7CkBAIC03NDgsMTggKzc1NSwxOSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUm
IHRvcExlZgogICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQs
IGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKICAgICBRUGFpbnRlciogcCA9IG1fZGF0YS0+cCgp
OwogICAgIGlmIChoYXNTaGFkb3coKSkgewotICAgICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cg
PSBjb250ZXh0U2hhZG93KCk7Ci0gICAgICAgIGlmIChzaGFkb3ctPm11c3RVc2VDb250ZXh0U2hh
ZG93KHRoaXMpKSB7CisgICAgICAgIFNoYWRvd0JsdXIqIHNoYWRvdyA9IHNoYWRvd0JsdXIoKTsK
KyAgICAgICAgaWYgKHNoYWRvdy0+bXVzdFVzZVNoYWRvd0JsdXIodGhpcykpIHsKICAgICAgICAg
ICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRo
aXMsIHJlY3QpOwogICAgICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKICAgICAgICAgICAg
ICAgICBzaGFkb3dQYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0
aW9uTW9kZV9Tb3VyY2UpOwotICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxQYXRo
KHBhdGgucGxhdGZvcm1QYXRoKCksIFFDb2xvcihtX2RhdGEtPnNoYWRvdy5tX2NvbG9yKSk7Cisg
ICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFBhdGgocGF0aC5wbGF0Zm9ybVBhdGgo
KSwgUUNvbG9yKG1fc3RhdGUuc2hhZG93Q29sb3IpKTsKICAgICAgICAgICAgICAgICBzaGFkb3ct
PmVuZFNoYWRvd0xheWVyKHRoaXMpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgcC0+dHJhbnNsYXRlKG1fZGF0YS0+c2hhZG93Lm9mZnNldCgpKTsKLSAgICAg
ICAgICAgIHAtPmZpbGxQYXRoKHBhdGgucGxhdGZvcm1QYXRoKCksIFFDb2xvcihtX2RhdGEtPnNo
YWRvdy5tX2NvbG9yKSk7Ci0gICAgICAgICAgICBwLT50cmFuc2xhdGUoLW1fZGF0YS0+c2hhZG93
Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIGNvbnN0IFFQb2ludEYgc2hhZG93T2Zmc2V0KG1fc3Rh
dGUuc2hhZG93T2Zmc2V0LndpZHRoKCksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsK
KyAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShzaGFkb3dPZmZzZXQpOworICAgICAgICAgICAgcC0+
ZmlsbFBhdGgocGF0aC5wbGF0Zm9ybVBhdGgoKSwgUUNvbG9yKG1fc3RhdGUuc2hhZG93Q29sb3Ip
KTsKKyAgICAgICAgICAgIHAtPnRyYW5zbGF0ZSgtc2hhZG93T2Zmc2V0KTsKICAgICAgICAgfQog
ICAgIH0KICAgICBwLT5maWxsUGF0aChwYXRoLnBsYXRmb3JtUGF0aCgpLCBRQ29sb3IoY29sb3Ip
KTsKQEAgLTc3MCw5ICs3NzgsOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dDo6aW5UcmFuc3BhcmVu
Y3lMYXllcigpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGF0YS0+bGF5ZXJDb3VudDsKIH0KIAotQ29u
dGV4dFNoYWRvdyogR3JhcGhpY3NDb250ZXh0Ojpjb250ZXh0U2hhZG93KCkKK1NoYWRvd0JsdXIq
IEdyYXBoaWNzQ29udGV4dDo6c2hhZG93Qmx1cigpCiB7Ci0gICAgcmV0dXJuICZtX2RhdGEtPnNo
YWRvdzsKKyAgICByZXR1cm4gbV9kYXRhLT5zaGFkb3c7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwKGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC03OTAsNiArNzk4LDIyIEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIAogICAgIG1fZGF0
YS0+cCgpLT5zZXRDbGlwUmVjdChyZWN0LCBRdDo6SW50ZXJzZWN0Q2xpcCk7CiB9CitJbnRSZWN0
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0Cit7CisgICAgUVBhaW50ZXIgKnAg
PSBtX2RhdGEtPnAoKTsKKyAgICBRUmVjdCBjbGlwUmVjdDsKKworICAgIGlmIChwLT5oYXNDbGlw
cGluZygpKQorI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA4LCAwKQorICAg
ICAgICBjbGlwUmVjdCA9IHAtPmNsaXBCb3VuZGluZ1JlY3QoKS50b0FsaWduZWRSZWN0KCk7Cisj
ZWxzZQorICAgICAgICBjbGlwUmVjdCA9IHAtPmNsaXBSZWdpb24oKS5ib3VuZGluZ1JlY3QoKTsK
KyNlbmRpZgorICAgIGVsc2UKKyAgICAgICAgY2xpcFJlY3QgPSBwLT50cmFuc2Zvcm0oKS5pbnZl
cnRlZCgpLm1hcFJlY3QocC0+d2luZG93KCkpOworCisgICAgcmV0dXJuIEludFJlY3QoY2xpcFJl
Y3QueCgpLCBjbGlwUmVjdC55KCksIGNsaXBSZWN0LndpZHRoKCksIGNsaXBSZWN0LmhlaWdodCgp
KTsKK30KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgs
IFdpbmRSdWxlIGNsaXBSdWxlKQogewpAQCAtOTI2LDcgKzk1MCw3IEBAIEZsb2F0UmVjdCBHcmFw
aGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMoY29uc3QgRmxvYXRSZWN0JiBmcmVjdCwg
Um91bmRpbmdNCiAgICAgcmV0dXJuIEZsb2F0UmVjdChyb3VuZGVkT3JpZ2luLCByb3VuZGVkTG93
ZXJSaWdodCAtIHJvdW5kZWRPcmlnaW4pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCBibHVyLCBjb25zdCBD
b2xvciYgY29sb3IsIENvbG9yU3BhY2UpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYg
Y29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICAvLyBRdCBkb2Vzbid0IHN1cHBv
cnQgc2hhZG93cyBuYXRpdmVseSwgdGhleSBhcmUgZHJhd24gbWFudWFsbHkgaW4gdGhlIGRyYXcq
CiAgICAgLy8gZnVuY3Rpb25zCkBAIC05MzUsMTYgKzk1OSwxNSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCBibHVy
LCBjb25zdAogICAgICAgICAvLyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlz
IGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmluZ0NvbnRleHQKICAgICAgICAgLy8gV2Ug
ZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZ
IGF4aXMKICAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoc2l6ZS53aWR0
aCgpLCAtc2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNo
YWRvdyhjb2xvciwgYmx1ciwgRmxvYXRTaXplKHNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkp
KTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBDb250ZXh0U2hhZG93KGNv
bG9yLCBibHVyLCBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CisgICAg
fQogCi0gICAgbV9kYXRhLT5zaGFkb3cuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0
ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CisgICAgbV9kYXRhLT5zaGFkb3cgPSBuZXcgU2hh
ZG93Qmx1cihGbG9hdFNpemUobV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0JsdXIp
LCBtX3N0YXRlLnNoYWRvd09mZnNldCwgY29sb3IsIGNvbG9yU3BhY2UpOworICAgIG1fZGF0YS0+
c2hhZG93LT5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX3N0YXRlLnNoYWRvd3NJZ25vcmVU
cmFuc2Zvcm1zKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFyUGxhdGZvcm1TaGFk
b3coKQogewotICAgIG1fZGF0YS0+c2hhZG93LmNsZWFyKCk7CisgICAgbV9kYXRhLT5zaGFkb3ct
PmNsZWFyKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwdXNoVHJhbnNwYXJlbmN5TGF5
ZXJJbnRlcm5hbChjb25zdCBRUmVjdCAmcmVjdCwgcXJlYWwgb3BhY2l0eSwgUVBpeG1hcCYgYWxw
aGFNYXNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
SW1hZ2VRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0
LmNwcAppbmRleCAwYzhjZTllLi5kZGUzZTVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcApAQCAtMzQsMTEgKzM0LDExIEBACiAKICNpbmNs
dWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1
ZGUgIkNvbnRleHRTaGFkb3cuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCiAjaW5jbHVkZSAiU3Rp
bGxJbWFnZVF0LmgiCiAjaW5jbHVkZSAicXdlYnNldHRpbmdzLmgiCiAKQEAgLTIyNCwxMSArMjI0
LDExIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25z
dCBGbG9hdFJlY3QmIGRzdCwKICAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9y
ID0gY3R4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCk7CiAgICAgY3R4dC0+c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKCFpbWFnZS0+aGFzQWxwaGEoKSAmJiBvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyID8g
Q29tcG9zaXRlQ29weSA6IG9wKTsKIAotICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGN0eHQt
PmNvbnRleHRTaGFkb3coKTsKLSAgICBpZiAoc2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRv
dzo6Tm9TaGFkb3cpIHsKKyAgICBpZiAoY3R4dC0+aGFzU2hhZG93KCkpIHsKKyAgICAgICAgU2hh
ZG93Qmx1ciogc2hhZG93ID0gY3R4dC0+c2hhZG93Qmx1cigpOwogICAgICAgICBRUGFpbnRlciog
c2hhZG93UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHh0LCBub3JtYWxpemVk
RHN0KTsKICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKLSAgICAgICAgICAgIHNoYWRvd1Bh
aW50ZXItPnNldE9wYWNpdHkoc3RhdGljX2Nhc3Q8cXJlYWw+KHNoYWRvdy0+bV9jb2xvci5hbHBo
YSgpKSAvIDI1NSk7CisgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRp
Y19jYXN0PHFyZWFsPihjdHh0LT5zdGF0ZSgpLnNoYWRvd0NvbG9yLmFscGhhKCkpIC8gMjU1KTsK
ICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmRyYXdQaXhtYXAobm9ybWFsaXplZERzdCwgKmlt
YWdlLCBub3JtYWxpemVkU3JjKTsKICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIo
Y3R4dCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9TdGlsbEltYWdlUXQuY3BwCmluZGV4IDNiMDg5OTUuLjJlNDgyNTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNw
cApAQCAtMjgsOSArMjgsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0aWxs
SW1hZ2VRdC5oIgogCi0jaW5jbHVkZSAiQ29udGV4dFNoYWRvdy5oIgogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTaGFkb3dCbHVy
LmgiCiAKICNpbmNsdWRlIDxRUGFpbnRlcj4KIApAQCAtNzQsMTEgKzc0LDExIEBAIHZvaWQgU3Rp
bGxJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0
LAogICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBjdHh0LT5jb21wb3Np
dGVPcGVyYXRpb24oKTsKICAgICBjdHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOwogCi0g
ICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY3R4dC0+Y29udGV4dFNoYWRvdygpOwotICAgIGlm
IChzaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpOb1NoYWRvdykgeworICAgIGlmIChj
dHh0LT5oYXNTaGFkb3coKSkgeworICAgICAgICBTaGFkb3dCbHVyKiBzaGFkb3cgPSBjdHh0LT5z
aGFkb3dCbHVyKCk7CiAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5i
ZWdpblNoYWRvd0xheWVyKGN0eHQsIG5vcm1hbGl6ZWREc3QpOwogICAgICAgICBpZiAoc2hhZG93
UGFpbnRlcikgewotICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNf
Y2FzdDxxcmVhbD4oc2hhZG93LT5tX2NvbG9yLmFscGhhKCkpIC8gMjU1KTsKKyAgICAgICAgICAg
IHNoYWRvd1BhaW50ZXItPnNldE9wYWNpdHkoc3RhdGljX2Nhc3Q8cXJlYWw+KGN0eHQtPnN0YXRl
KCkuc2hhZG93Q29sb3IuYWxwaGEoKSkgLyAyNTUpOwogICAgICAgICAgICAgc2hhZG93UGFpbnRl
ci0+ZHJhd1BpeG1hcChub3JtYWxpemVkRHN0LCAqbV9waXhtYXAsIG5vcm1hbGl6ZWRTcmMpOwog
ICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcihjdHh0KTsKICAgICAgICAgfQotLSAK
MS43LjQuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98244</attachid>
            <date>2011-06-22 14:34:46 -0700</date>
            <delta_ts>2011-06-26 07:49:50 -0700</delta_ts>
            <desc>Patch WIP</desc>
            <filename>0001-WIP1.patch</filename>
            <type>text/plain</type>
            <size>38950</size>
            <attacher name="Igor Trindade Oliveira">igor.oliveira</attacher>
            
              <data encoding="base64">RnJvbSBjYmEwOWY3MDQyNjhjZDk5ZjZhYjQ3NGYxNzU4MTM5ZGM3YjRlMGYwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBJZ29yIE9saXZlaXJhIDxpZ29yLm9saXZlaXJhQG9wZW5ib3Nz
YS5vcmc+CkRhdGU6IFdlZCwgMjIgSnVuIDIwMTEgMTU6NTQ6NTIgLTA0MDAKU3ViamVjdDogW1BB
VENIXSBXSVAxCgotLS0KIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgICAgNSArLQogLi4uL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmNwcCAgfCAgICAyICstCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaCB8ICAgIDcgKy0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NoYWRvd0JsdXIuY3BwICAgIHwgICA2NSArKysrKysrKwogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oICAgICAgfCAgIDQwICsrKystCiAuLi4vcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvd1F0LmNwcCAgICAgICB8ICAxNjggLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRR
dC5jcHAgICAgIHwgICA2MiArKysrLS0tLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBo
aWNzQ29udGV4dFF0LmNwcCAgICAgfCAgIDk0ICsrKysrKystLS0tLQogLi4uL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VCdWZmZXJRdC5jcHAgfCAgICA0ICsKIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwICAgIHwgICAgOCArLQogLi4uL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcCAgfCAgICA4ICstCiAx
MSBmaWxlcyBjaGFuZ2VkLCAyMDcgaW5zZXJ0aW9ucygrKSwgMjU2IGRlbGV0aW9ucygtKQogZGVs
ZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRl
eHRTaGFkb3dRdC5jcHAKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDA5ODgyOGMuLjg2OWU3NzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJvCkBAIC05NzYsNyArOTc2LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udEZhbWlseS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcElt
YWdlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIFwKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2hh
ZG93Qmx1ci5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAgXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFF1YWQuY3BwIFwKQEAgLTE5MjUsNyArMTkyNSw3IEBAIEhFQURFUlMgKz0gXAog
ICAgIHBsYXRmb3JtL21vY2svU3BlZWNoSW5wdXRDbGllbnRNb2NrLmggXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0JpdG1hcEltYWdlLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgg
XAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuaCBcCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
QmxlbmQuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4Lmgg
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oIFwK
QEAgLTI0OTksNyArMjQ5OSw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHBhZ2UvcXQvRnJhbWVRdC5j
cHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Db2xvclF0LmNwcCBcCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvd1F0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRm9udFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0
YVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRmxvYXRQb2ludFF0LmNwcCBcCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmNwcAppbmRleCAxYzA4N2EyLi4yYmNhZWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTU4NSw3ICs1ODUsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIGJ1
ZmZlciwgY29uc3QgRmxvYXRSZWN0JiByZQogICAgIGJ1ZmZlci0+Y2xpcCh0aGlzLCByZWN0KTsK
IH0KIAotI2lmICFVU0UoQ0cpCisjaWYgIVVTRShDRykgJiYgIVBMQVRGT1JNKFFUKQogSW50UmVj
dCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAogewogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaAppbmRleCBmZWU0YWRkLi5jODQxYjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtNTQsNiArNTQs
NyBAQCB0eXBlZGVmIGNsYXNzIFdlYkNvcmU6OlN1cmZhY2VPcGVuVkcgUGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQ7CiAjaW5jbHVkZSA8UVBhaW50ZXI+CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBDb250ZXh0U2hhZG93OworY2xhc3MgU2hhZG93Qmx1cjsKIH0KIHR5cGVkZWYgUVBhaW50ZXIg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7CiAjZWxpZiBQTEFURk9STShXWCkKQEAgLTQ4NCwxMCAr
NDg1LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB0YWtlT3duZXJzaGlw
T2ZQbGF0Zm9ybUNvbnRleHQoKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oUVQpIHx8IFVTRShD
QUlSTykKKyNpZiBVU0UoQ0FJUk8pCiAgICAgICAgIENvbnRleHRTaGFkb3cqIGNvbnRleHRTaGFk
b3coKTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oUVQpCisgICAgICAgIFNoYWRvd0JsdXIqIHNo
YWRvd0JsdXIoKTsKKyNlbmRpZgorCiAjaWYgVVNFKENBSVJPKQogICAgICAgICBHcmFwaGljc0Nv
bnRleHQoY2Fpcm9fdCopOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NoYWRvd0JsdXIuY3BwCmluZGV4IDI1ZmM5YWEuLmVkYmEyMDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC0xOTIsNiAr
MTkyLDE1IEBAIFNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgRmxvYXRTaXplJiByYWRpdXMs
IGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25zdCBDCiAgICAgfSBlbHNlCiAgICAgICAgIG1f
dHlwZSA9IFNvbGlkU2hhZG93OwogfQorU2hhZG93Qmx1cjo6U2hhZG93Qmx1cigpCisgICAgOiBt
X3R5cGUoTm9TaGFkb3cpCisgICAgLCBtX2JsdXJSYWRpdXMoMCwgMCkKKyAgICAsIG1fbGF5ZXJD
b250ZXh0KDApCisgICAgLCBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGZhbHNlKQoreworfQor
CisKIAogLy8gSW5zdGVhZCBvZiBpbnRlZ2VyIGRpdmlzaW9uLCB3ZSB1c2UgMTcuMTUgZm9yIGZp
eGVkLXBvaW50IGRpdmlzaW9uLgogc3RhdGljIGNvbnN0IGludCBibHVyU3VtU2hpZnQgPSAxNTsK
QEAgLTIzNyw2ICsyNDYsMzAgQEAgc3RhdGljIHZvaWQgY2FsY3VsYXRlTG9iZXMoaW50IGxvYmVz
W11bMl0sIGZsb2F0IGJsdXJSYWRpdXMsIGJvb2wgc2hhZG93c0lnbm9yZVQKICAgICB9CiB9CiAK
K2Jvb2wgU2hhZG93Qmx1cjo6bXVzdFVzZVNoYWRvd0JsdXIoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0KQoreworICAgIC8vIFdlIGNhbid0IGF2b2lkIFNoYWRvd0JsdXIsIHNpbmNlIHRoZSBzaGFk
b3cgaGFzIGJsdXIuCisgICAgaWYgKG1fdHlwZSA9PSBTaGFkb3dCbHVyOjpCbHVyU2hhZG93KQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAvLyBXZSBjYW4gYXZvaWQgU2hhZG93Qmx1ciBhbmQg
b3B0aW1pemUsIHNpbmNlIHdlJ3JlIG5vdCBkcmF3aW5nIG9uIGEKKyAgICAvLyBjYW52YXMgYW5k
IGJveCBzaGFkb3dzIGFyZSBhZmZlY3RlZCBieSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4Lgor
ICAgIGlmICghc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIC8vIFdlIGNhbiBhdm9pZCBTaGFkb3dCbHVyLCBzaW5jZSB0aGVyZSBhcmUgbm8gdHJh
bnNmb3JtYXRpb25zIHRvIGFwcGx5IHRvIHRoZSBjYW52YXMuCisgICAgaWYgKGNvbnRleHQtPmdl
dENUTSgpLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIE90aGVy
d2lzZSwgbm8gY2hhbmNlIGF2b2lkaW5nIFNoYWRvd0JsdXIuCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgU2hhZG93Qmx1cjo6Y2xlYXIoKQoreworICAgIG1fdHlwZSA9IE5vU2hhZG93Owor
ICAgIG1fY29sb3IgPSBDb2xvcigpOworICAgIG1fYmx1clJhZGl1cyA9IEZsb2F0U2l6ZSgpOwor
ICAgIG1fb2Zmc2V0ID0gRmxvYXRTaXplKCk7Cit9CisKIHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckxh
eWVySW1hZ2UodW5zaWduZWQgY2hhciogaW1hZ2VEYXRhLCBjb25zdCBJbnRTaXplJiBzaXplLCBp
bnQgcm93U3RyaWRlKQogewogICAgIGNvbnN0IGludCBjaGFubmVsc1s0XSA9IHsgMywgMCwgMSwg
MyB9OwpAQCAtODMzLDQgKzg2NiwzNiBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRDb2xvclNo
YWRvd0J1ZmZlcihjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUpCiAgICAgc2hhZG93Q29udGV4
dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KDAsIDAsIHRlbXBsYXRlU2l6ZS53aWR0aCgpLCB0ZW1wbGF0
ZVNpemUuaGVpZ2h0KCkpKTsKIH0KIAorUGxhdGZvcm1Db250ZXh0IFNoYWRvd0JsdXI6OmJlZ2lu
U2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0ICpjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGxh
eWVyQXJlYSkKK3sKKyAgICBhZGp1c3RCbHVyUmFkaXVzKGNvbnRleHQpOworCisgICAgSW50UmVj
dCBsYXllclJlY3QgPSBjYWxjdWxhdGVMYXllckJvdW5kaW5nUmVjdChjb250ZXh0LCBsYXllckFy
ZWEsIGNvbnRleHQtPmNsaXBCb3VuZHMoKSk7CisKKyAgICBpZiAobGF5ZXJSZWN0LmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX2xheWVySW1hZ2UgPSBTY3JhdGNoQnVmZmVy
OjpzaGFyZWQoKS5nZXRTY3JhdGNoQnVmZmVyKGxheWVyUmVjdC5zaXplKCkpOworCisgICAgR3Jh
cGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gbV9sYXllckltYWdlLT5jb250ZXh0KCk7Cisg
ICAgc2hhZG93Q29udGV4dC0+c2F2ZSgpOworICAgIHNoYWRvd0NvbnRleHQtPmNsZWFyUmVjdChG
bG9hdFJlY3QoMCwgMCwgbV9sYXllclNpemUud2lkdGgoKSwgbV9sYXllclNpemUuaGVpZ2h0KCkp
KTsKKworICAgIHNoYWRvd0NvbnRleHQtPnRyYW5zbGF0ZShtX2xheWVyQ29udGV4dFRyYW5zbGF0
aW9uKTsKKyAgICBtX2xheWVyQ29udGV4dCA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpOworCisgICAgcmV0dXJuIG1fbGF5ZXJDb250ZXh0OworfQorCit2b2lkIFNoYWRvd0JsdXI6
OmVuZFNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBtX2xheWVy
SW1hZ2UtPmNvbnRleHQoKS0+cmVzdG9yZSgpOworCisgICAgYmx1clNoYWRvd0J1ZmZlcihleHBh
bmRlZEludFNpemUobV9sYXllclNpemUpKTsKKyAgICBkcmF3U2hhZG93QnVmZmVyKGNvbnRleHQp
OworCisgICAgbV9sYXllckltYWdlID0gMDsKKyAgICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5z
Y2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmgKaW5kZXgg
MjAyZmYzZC4uYjQ4NzNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2hhZG93Qmx1ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NoYWRvd0JsdXIuaApAQCAtMzUsMjUgKzM1LDU2IEBACiAjaW5jbHVkZSAiUm91bmRlZEludFJl
Y3QuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAorI2lmIFBMQVRGT1JNKFFUKQor
I2luY2x1ZGUgPFFJbWFnZT4KK1FUX0JFR0lOX05BTUVTUEFDRQorY2xhc3MgUVBhaW50ZXI7CitR
VF9FTkRfTkFNRVNQQUNFCisjZW5kaWYKKworCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEFmZmluZVRyYW5zZm9ybTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEltYWdlQnVm
ZmVyOwogCisjaWYgUExBVEZPUk0oUVQpCit0eXBlZGVmIFFJbWFnZSBQbGF0Zm9ybUltYWdlOwor
dHlwZWRlZiBRUGFpbnRlciogUGxhdGZvcm1Db250ZXh0OworI2Vsc2UKK3R5cGVkZWYgdm9pZCog
UGxhdGZvcm1JbWFnZTsKK3R5cGVkZWYgdm9pZCogUGxhdGZvcm1Db250ZXh0OworI2VuZGlmCisK
KwogY2xhc3MgU2hhZG93Qmx1ciB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU2hhZG93Qmx1
cik7CiBwdWJsaWM6CisgICAgZW51bSBTaGFkb3dUeXBlIHsKKyAgICAgICAgTm9TaGFkb3csCisg
ICAgICAgIFNvbGlkU2hhZG93LAorICAgICAgICBCbHVyU2hhZG93CisgICAgfTsKKwogICAgIFNo
YWRvd0JsdXIoY29uc3QgRmxvYXRTaXplJiByYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0
LCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOworICAgIFNoYWRvd0JsdXIoKTsKIAogICAgIHZv
aWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBpZ25vcmVUcmFuc2Zvcm1zKSB7IG1f
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBpZ25vcmVUcmFuc2Zvcm1zOyB9CiAgICAgYm9vbCBz
aGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIGNvbnN0IHsgcmV0dXJuIG1fc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXM7IH0KIAorICAgIFBsYXRmb3JtQ29udGV4dCBiZWdpblNoYWRvd0xheWVyKEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgbGF5ZXJBcmVhKTsKKyAgICB2b2lkIGVuZFNo
YWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCopOworCiAgICAgdm9pZCBkcmF3UmVjdFNoYWRvdyhH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBSb3VuZGVkSW50UmVjdDo6
UmFkaWkmKTsKICAgICB2b2lkIGRyYXdJbnNldFNoYWRvdyhHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmIGhvbGVSZWN0LCBjb25zdCBSb3VuZGVkSW50
UmVjdDo6UmFkaWkmIGhvbGVSYWRpaSk7CiAKICAgICB2b2lkIGJsdXJMYXllckltYWdlKHVuc2ln
bmVkIGNoYXIqLCBjb25zdCBJbnRTaXplJiwgaW50IHN0cmlkZSk7CiAKKyAgICBib29sIG11c3RV
c2VTaGFkb3dCbHVyKEdyYXBoaWNzQ29udGV4dCopOworCisgICAgdm9pZCBjbGVhcigpOworCisg
ICAgU2hhZG93VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiBwcml2YXRlOgog
ICAgIHZvaWQgZHJhd1NoYWRvd0J1ZmZlcihHcmFwaGljc0NvbnRleHQqKTsKIApAQCAtODAsMTEg
KzExMSw2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgSW50U2l6ZSBibHVycmVkRWRnZVNpemUoKSBj
b25zdDsKICAgICAKLSAgICBlbnVtIFNoYWRvd1R5cGUgewotICAgICAgICBOb1NoYWRvdywKLSAg
ICAgICAgU29saWRTaGFkb3csCi0gICAgICAgIEJsdXJTaGFkb3cKLSAgICB9OwogICAgIAogICAg
IFNoYWRvd1R5cGUgbV90eXBlOwogCkBAIC0xMDAsNiArMTI2LDggQEAgcHJpdmF0ZToKICAgICBG
bG9hdFNpemUgbV9sYXllclNpemU7IC8vIFNpemUgb2YgbV9sYXllckltYWdlIHBpeGVscyB0aGF0
IG5lZWQgYmx1cnJpbmcuCiAgICAgRmxvYXRTaXplIG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb247
IC8vIFRyYW5zbGF0aW9uIHRvIGFwcGx5IHRvIG1fbGF5ZXJDb250ZXh0IGZvciB0aGUgc2hhZG93
IHRvIGJlIGNvcnJlY3RseSBjbGlwcGVkLgogCisgICAgUGxhdGZvcm1Db250ZXh0IG1fbGF5ZXJD
b250ZXh0OworCiAgICAgYm9vbCBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwogfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRv
d1F0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFk
b3dRdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYjMxYTcuLjAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvd1F0
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEwIFNlbmNoYSwgSW5jLgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvbnRleHRTaGFkb3cuaCIKLQotI2luY2x1
ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgPFFQYWludGVyPgotI2luY2x1ZGUgPFFUaW1lckV2ZW50PgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLS8vIENvbnRleHRTaGFkb3cgbmVlZHMgYSBzY3JhdGNoIGltYWdlIGFzIHRoZSBi
dWZmZXIgZm9yIHRoZSBibHVyIGZpbHRlci4KLS8vIEluc3RlYWQgb2YgY3JlYXRpbmcgYW5kIGRl
c3Ryb3lpbmcgdGhlIGJ1ZmZlciBmb3IgZXZlcnkgb3BlcmF0aW9uLAotLy8gd2UgY3JlYXRlIGEg
YnVmZmVyIHdoaWNoIHdpbGwgYmUgYXV0b21hdGljYWxseSBwdXJnZWQgdmlhIGEgdGltZXIuCi0K
LWNsYXNzIFNoYWRvd0J1ZmZlcjogcHVibGljIFFPYmplY3QgewotcHVibGljOgotICAgIFNoYWRv
d0J1ZmZlcihRT2JqZWN0KiBwYXJlbnQgPSAwKTsKLQotICAgIFFJbWFnZSogc2NyYXRjaEltYWdl
KGNvbnN0IFFTaXplJiBzaXplKTsKLQotICAgIHZvaWQgc2NoZWR1bGVQdXJnZSgpOwotCi1wcm90
ZWN0ZWQ6Ci0gICAgdm9pZCB0aW1lckV2ZW50KFFUaW1lckV2ZW50KiBldmVudCk7Ci0KLXByaXZh
dGU6Ci0gICAgUUltYWdlIGltYWdlOwotICAgIGludCB0aW1lcklkOwotfTsKLQotU2hhZG93QnVm
ZmVyOjpTaGFkb3dCdWZmZXIoUU9iamVjdCogcGFyZW50KQotICAgIDogUU9iamVjdChwYXJlbnQp
Ci0gICAgLCB0aW1lcklkKC0xKQotewotfQotCi1RSW1hZ2UqIFNoYWRvd0J1ZmZlcjo6c2NyYXRj
aEltYWdlKGNvbnN0IFFTaXplJiBzaXplKQotewotICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgo
KTsKLSAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKLQotICAgIC8vIFdlIGRvIG5vdCBu
ZWVkIHRvIHJlY3JlYXRlIHRoZSBidWZmZXIgaWYgdGhlIGJ1ZmZlciBpcyByZWFzb25hYmx5Ci0g
ICAgLy8gbGFyZ2VyIHRoYW4gdGhlIHJlcXVlc3RlZCBzaXplLiBIb3dldmVyLCBpZiB0aGUgcmVx
dWVzdGVkIHNpemUgaXMKLSAgICAvLyBtdWNoIHNtYWxsZXIgdGhhbiBvdXIgYnVmZmVyLCByZWR1
Y2Ugb3VyIGJ1ZmZlciBzbyB0aGF0IHdlIHdpbGwgbm90Ci0gICAgLy8ga2VlcCB0b28gbWFueSBh
bGxvY2F0ZWQgcGl4ZWxzIGZvciB0b28gbG9uZy4KLSAgICBpZiAoIWltYWdlLmlzTnVsbCgpICYm
IChpbWFnZS53aWR0aCgpID4gd2lkdGgpICYmIChpbWFnZS5oZWlnaHQoKSA+IGhlaWdodCkpCi0g
ICAgICAgIGlmICgoKDIgKiB3aWR0aCkgPiBpbWFnZS53aWR0aCgpKSAmJiAoKDIgKiBoZWlnaHQp
ID4gaW1hZ2UuaGVpZ2h0KCkpKSB7Ci0gICAgICAgICAgICBpbWFnZS5maWxsKDApOwotICAgICAg
ICAgICAgcmV0dXJuICZpbWFnZTsKLSAgICAgICAgfQotCi0gICAgLy8gUm91bmQgdG8gdGhlIG5l
YXJlc3QgMzIgcGl4ZWxzIHNvIHdlIGRvIG5vdCBncm93IHRoZSBidWZmZXIgZXZlcnl0aW1lCi0g
ICAgLy8gdGhlcmUgaXMgbGFyZ2VyIHJlcXVlc3QgYnkgMSBwaXhlbC4KLSAgICB3aWR0aCA9ICgx
ICsgKHdpZHRoID4+IDUpKSA8PCA1OwotICAgIGhlaWdodCA9ICgxICsgKGhlaWdodCA+PiA1KSkg
PDwgNTsKLQotICAgIGltYWdlID0gUUltYWdlKHdpZHRoLCBoZWlnaHQsIFFJbWFnZTo6Rm9ybWF0
X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKLSAgICBpbWFnZS5maWxsKDApOwotICAgIHJldHVybiAm
aW1hZ2U7Ci19Ci0KLXZvaWQgU2hhZG93QnVmZmVyOjpzY2hlZHVsZVB1cmdlKCkKLXsKLSAgICBz
dGF0aWMgY29uc3QgZG91YmxlIEJ1ZmZlclB1cmdlRGVsYXkgPSAyOyAvLyBzZWNvbmRzCi0gICAg
aWYgKHRpbWVySWQgPj0gMCkKLSAgICAgICAga2lsbFRpbWVyKHRpbWVySWQpOwotICAgIHRpbWVy
SWQgPSBzdGFydFRpbWVyKEJ1ZmZlclB1cmdlRGVsYXkgKiAxMDAwKTsKLX0KLQotdm9pZCBTaGFk
b3dCdWZmZXI6OnRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqIGV2ZW50KQotewotICAgIGlmIChldmVu
dC0+dGltZXJJZCgpID09IHRpbWVySWQpIHsKLSAgICAgICAga2lsbFRpbWVyKHRpbWVySWQpOwot
ICAgICAgICBpbWFnZSA9IFFJbWFnZSgpOwotICAgIH0KLSAgICBRT2JqZWN0Ojp0aW1lckV2ZW50
KGV2ZW50KTsKLX0KLQotUV9HTE9CQUxfU1RBVElDKFNoYWRvd0J1ZmZlciwgc2NyYXRjaFNoYWRv
d0J1ZmZlcikKLQotUGxhdGZvcm1Db250ZXh0IENvbnRleHRTaGFkb3c6OmJlZ2luU2hhZG93TGF5
ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGxheWVyQXJlYSkK
LXsKLSAgICAvLyBTZXQgbV9ibHVyRGlzdGFuY2UuCi0gICAgYWRqdXN0Qmx1ckRpc3RhbmNlKGNv
bnRleHQpOwotCi0gICAgUGxhdGZvcm1Db250ZXh0IHAgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKTsKLQotICAgIFFSZWN0IGNsaXBSZWN0OwotICAgIGlmIChwLT5oYXNDbGlwcGluZygpKQot
I2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA4LCAwKQotICAgICAgICBjbGlw
UmVjdCA9IHAtPmNsaXBCb3VuZGluZ1JlY3QoKS50b0FsaWduZWRSZWN0KCk7Ci0jZWxzZQotICAg
ICAgICBjbGlwUmVjdCA9IHAtPmNsaXBSZWdpb24oKS5ib3VuZGluZ1JlY3QoKTsKLSNlbmRpZgot
ICAgIGVsc2UKLSAgICAgICAgY2xpcFJlY3QgPSBwLT50cmFuc2Zvcm0oKS5pbnZlcnRlZCgpLm1h
cFJlY3QocC0+d2luZG93KCkpOwotCi0gICAgLy8gU2V0IG1fbGF5ZXJPcmlnaW4sIG1fbGF5ZXJD
b250ZXh0VHJhbnNsYXRpb24sIG1fc291cmNlUmVjdC4KLSAgICBJbnRSZWN0IGNsaXAoY2xpcFJl
Y3QueCgpLCBjbGlwUmVjdC55KCksIGNsaXBSZWN0LndpZHRoKCksIGNsaXBSZWN0LmhlaWdodCgp
KTsKLSAgICBJbnRSZWN0IGxheWVyUmVjdCA9IGNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0KGNv
bnRleHQsIGxheWVyQXJlYSwgY2xpcCk7Ci0KLSAgICAvLyBEb24ndCBwYWludCBpZiB3ZSBhcmUg
dG90YWxseSBvdXRzaWRlIHRoZSBjbGlwIHJlZ2lvbi4KLSAgICBpZiAobGF5ZXJSZWN0LmlzRW1w
dHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBTaGFkb3dCdWZmZXIqIHNoYWRvd0J1ZmZl
ciA9IHNjcmF0Y2hTaGFkb3dCdWZmZXIoKTsKLSAgICBRSW1hZ2UqIHNoYWRvd0ltYWdlID0gc2hh
ZG93QnVmZmVyLT5zY3JhdGNoSW1hZ2UobGF5ZXJSZWN0LnNpemUoKSk7Ci0gICAgbV9sYXllcklt
YWdlID0gUUltYWdlKCpzaGFkb3dJbWFnZSk7Ci0KLSAgICBtX2xheWVyQ29udGV4dCA9IG5ldyBR
UGFpbnRlcjsKLSAgICBtX2xheWVyQ29udGV4dC0+YmVnaW4oJm1fbGF5ZXJJbWFnZSk7Ci0gICAg
bV9sYXllckNvbnRleHQtPnNldEZvbnQocC0+Zm9udCgpKTsKLSAgICBtX2xheWVyQ29udGV4dC0+
dHJhbnNsYXRlKG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb24pOwotICAgIHJldHVybiBtX2xheWVy
Q29udGV4dDsKLX0KLQotdm9pZCBDb250ZXh0U2hhZG93OjplbmRTaGFkb3dMYXllcihHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgbV9sYXllckNvbnRleHQtPmVuZCgpOwotICAgIGRl
bGV0ZSBtX2xheWVyQ29udGV4dDsKLSAgICBtX2xheWVyQ29udGV4dCA9IDA7Ci0KLSAgICBpZiAo
bV90eXBlID09IEJsdXJTaGFkb3cpIHsKLSAgICAgICAgYmx1ckxheWVySW1hZ2UobV9sYXllcklt
YWdlLmJpdHMoKSwgSW50U2l6ZShtX2xheWVySW1hZ2Uud2lkdGgoKSwgbV9sYXllckltYWdlLmhl
aWdodCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgbV9sYXllckltYWdlLmJ5dGVzUGVyTGlu
ZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAobV90eXBlICE9IE5vU2hhZG93KSB7Ci0gICAgICAgIC8v
ICJDb2xvcml6ZSIgd2l0aCB0aGUgcmlnaHQgc2hhZG93IGNvbG9yLgotICAgICAgICBRUGFpbnRl
ciBwKCZtX2xheWVySW1hZ2UpOwotICAgICAgICBwLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRl
cjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZUluKTsKLSAgICAgICAgcC5maWxsUmVjdChtX2xheWVy
SW1hZ2UucmVjdCgpLCBtX2NvbG9yLnJnYigpKTsKLSAgICAgICAgcC5lbmQoKTsKLSAgICB9Ci0K
LSAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd0ltYWdlKG1fbGF5ZXJPcmlnaW4s
IG1fbGF5ZXJJbWFnZSwgbV9zb3VyY2VSZWN0KTsKLQotICAgIHNjcmF0Y2hTaGFkb3dCdWZmZXIo
KS0+c2NoZWR1bGVQdXJnZSgpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvRm9udFF0LmNwcAppbmRleCBhMWE1MzlkLi45YmZkOTA5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAKQEAgLTIzLDcgKzIz
LDYgQEAKICNpbmNsdWRlICJGb250LmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIK
LSNpbmNsdWRlICJDb250ZXh0U2hhZG93LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgi
CiAjaW5jbHVkZSAiRm9udEZhbGxiYWNrTGlzdC5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5o
IgpAQCAtMzQsNiArMzMsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgorI2luY2x1ZGUgIlNo
YWRvd0JsdXIuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAKICNpbmNsdWRlIDxRQnJ1c2g+CkBA
IC0xNDIsMzIgKzE0MiwzMyBAQCBzdGF0aWMgdm9pZCBkcmF3VGV4dENvbW1vbihHcmFwaGljc0Nv
bnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdAogICAgICAgICAgICAg
UVJlY3RGIGJvdW5kaW5nUmVjdChwb2ludC54KCkgKyB4MSwgcG9pbnQueSgpIC0gYXNjZW50LCB4
MiAtIHgxLCBmbS5oZWlnaHQoKSk7CiAgICAgICAgICAgICBRUmVjdEYgY2xpcCA9IGJvdW5kaW5n
UmVjdDsKIAotICAgICAgICAgICAgQ29udGV4dFNoYWRvdyogY3R4U2hhZG93ID0gY3R4LT5jb250
ZXh0U2hhZG93KCk7Ci0KLSAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPm1fdHlwZSAhPSBDb250
ZXh0U2hhZG93OjpOb1NoYWRvdykgeworICAgICAgICAgICAgU2hhZG93Qmx1ciogY3R4U2hhZG93
ID0gY3R4LT5zaGFkb3dCbHVyKCk7CisgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkg
IT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnRG
IHNoYWRvd09mZnNldChjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0eC0+c3Rh
dGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIHFyZWFsIGR4MSA9
IDAsIGR4MiA9IDAsIGR5MSA9IDAsIGR5MiA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eFNo
YWRvdy0+b2Zmc2V0KCkueCgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgZHgyID0gY3R4U2hh
ZG93LT5vZmZzZXQoKS54KCk7CisgICAgICAgICAgICAgICAgaWYgKHNoYWRvd09mZnNldC54KCkg
PiAwKQorICAgICAgICAgICAgICAgICAgICBkeDIgPSBzaGFkb3dPZmZzZXQueCgpOwogICAgICAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZHgxID0gLWN0eFNoYWRvdy0+b2Zm
c2V0KCkueCgpOwotICAgICAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPm9mZnNldCgpLnkoKSA+
IDApCi0gICAgICAgICAgICAgICAgICAgIGR5MiA9IGN0eFNoYWRvdy0+b2Zmc2V0KCkueSgpOwor
ICAgICAgICAgICAgICAgICAgICBkeDEgPSAtc2hhZG93T2Zmc2V0LngoKTsKKyAgICAgICAgICAg
ICAgICBpZiAoc2hhZG93T2Zmc2V0LnkoKSA+IDApCisgICAgICAgICAgICAgICAgICAgIGR5MiA9
IHNoYWRvd09mZnNldC55KCk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
ICAgICBkeTEgPSAtY3R4U2hhZG93LT5vZmZzZXQoKS55KCk7CisgICAgICAgICAgICAgICAgICAg
IGR5MSA9IC1zaGFkb3dPZmZzZXQueSgpOwogICAgICAgICAgICAgICAgIC8vIGV4cGFuZCB0aGUg
Y2xpcCByZWN0IHRvIGluY2x1ZGUgdGhlIHRleHQgc2hhZG93IGFzIHdlbGwKKyAgICAgICAgICAg
ICAgICBjb25zdCBmbG9hdCBibHVyRGlzdGFuY2UgPSBjdHgtPnN0YXRlKCkuc2hhZG93Qmx1cjsK
ICAgICAgICAgICAgICAgICBjbGlwLmFkanVzdChkeDEsIGR4MiwgZHkxLCBkeTIpOwotICAgICAg
ICAgICAgICAgIGNsaXAuYWRqdXN0KC1jdHhTaGFkb3ctPm1fYmx1ckRpc3RhbmNlLCAtY3R4U2hh
ZG93LT5tX2JsdXJEaXN0YW5jZSwgY3R4U2hhZG93LT5tX2JsdXJEaXN0YW5jZSwgY3R4U2hhZG93
LT5tX2JsdXJEaXN0YW5jZSk7CisgICAgICAgICAgICAgICAgY2xpcC5hZGp1c3QoLWJsdXJEaXN0
YW5jZSwgLWJsdXJEaXN0YW5jZSwgYmx1ckRpc3RhbmNlLCBibHVyRGlzdGFuY2UpOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgcC0+c2F2ZSgpOwogICAgICAgICAgICAgcC0+c2V0Q2xpcFJl
Y3QoY2xpcC50b1JlY3QoKSwgUXQ6OkludGVyc2VjdENsaXApOwogICAgICAgICAgICAgcHQuc2V0
WShwdC55KCkgLSBhc2NlbnQpOwogCi0gICAgICAgICAgICBpZiAoY3R4U2hhZG93LT5tX3R5cGUg
IT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpIHsKLSAgICAgICAgICAgICAgICBDb250ZXh0U2hh
ZG93KiBjdHhTaGFkb3cgPSBjdHgtPmNvbnRleHRTaGFkb3coKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIWN0eFNoYWRvdy0+bXVzdFVzZUNvbnRleHRTaGFkb3coY3R4KSkgeworICAgICAgICAgICAg
aWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6Ok5vU2hhZG93KSB7CisgICAgICAg
ICAgICAgICAgU2hhZG93Qmx1ciogY3R4U2hhZG93ID0gY3R4LT5zaGFkb3dCbHVyKCk7CisgICAg
ICAgICAgICAgICAgaWYgKCFjdHhTaGFkb3ctPm11c3RVc2VTaGFkb3dCbHVyKGN0eCkpIHsKICAg
ICAgICAgICAgICAgICAgICAgcC0+c2F2ZSgpOwotICAgICAgICAgICAgICAgICAgICBwLT5zZXRQ
ZW4oY3R4U2hhZG93LT5tX2NvbG9yKTsKLSAgICAgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRl
KGN0eFNoYWRvdy0+b2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICBwLT5zZXRQZW4oY3R4
LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRl
KFFQb2ludEYoY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpLCBjdHgtPnN0YXRlKCku
c2hhZG93T2Zmc2V0LmhlaWdodCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGxpbmUuZHJhdyhw
LCBwdCk7CiAgICAgICAgICAgICAgICAgICAgIHAtPnJlc3RvcmUoKTsKICAgICAgICAgICAgICAg
ICB9IGVsc2UgewpAQCAtMTc1LDcgKzE3Niw3IEBAIHN0YXRpYyB2b2lkIGRyYXdUZXh0Q29tbW9u
KEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQgYW55d2F5LCB3ZSBkb24ndCBjYXJl
IGFib3V0IHJlbmRlciBoaW50cy4KICAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50
ZXItPnNldEZvbnQocC0+Zm9udCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1Bh
aW50ZXItPnNldFBlbihjdHhTaGFkb3ctPm1fY29sb3IpOworICAgICAgICAgICAgICAgICAgICAg
ICAgc2hhZG93UGFpbnRlci0+c2V0UGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBsaW5lLmRyYXcoc2hhZG93UGFpbnRlciwgcHQpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgY3R4U2hhZG93LT5lbmRTaGFkb3dMYXllcihjdHgpOwogICAgICAg
ICAgICAgICAgICAgICB9CkBAIC0yMDEsMTMgKzIwMiwxMyBAQCBzdGF0aWMgdm9pZCBkcmF3VGV4
dENvbW1vbihHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdAogICAgIGlmIChjdHgtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVTdHJva2UpCiAg
ICAgICAgIHRleHRTdHJva2VQYXRoLmFkZFRleHQocHQsIGZvbnQsIHN0cmluZyk7CiAKLSAgICBD
b250ZXh0U2hhZG93KiBjdHhTaGFkb3cgPSBjdHgtPmNvbnRleHRTaGFkb3coKTsKLSAgICBpZiAo
Y3R4U2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpIHsKKyAgICBTaGFk
b3dCbHVyKiBjdHhTaGFkb3cgPSBjdHgtPnNoYWRvd0JsdXIoKTsKKyAgICBpZiAoY3R4LT5oYXNT
aGFkb3coKSAmJiBjdHhTaGFkb3ctPnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpOb1NoYWRvdykgewog
ICAgICAgICBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlRmlsbCkgewotICAg
ICAgICAgICAgaWYgKGN0eFNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6OkJsdXJTaGFk
b3cpIHsKKyAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpC
bHVyU2hhZG93KSB7CiAgICAgICAgICAgICAgICAgcC0+c2F2ZSgpOwotICAgICAgICAgICAgICAg
IHAtPnNldFBlbihjdHhTaGFkb3ctPm1fY29sb3IpOwotICAgICAgICAgICAgICAgIHAtPnRyYW5z
bGF0ZShjdHhTaGFkb3ctPm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBwLT5zZXRQZW4oY3R4
LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoUVBv
aW50RihjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0eC0+c3RhdGUoKS5zaGFk
b3dPZmZzZXQuaGVpZ2h0KCkpKTsKICAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dChwdCwgc3Ry
aW5nLCBmbGFncywgcnVuLmV4cGFuc2lvbigpKTsKICAgICAgICAgICAgICAgICBwLT5yZXN0b3Jl
KCk7CiAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMjE3LDE2ICsyMTgsMTcgQEAgc3RhdGljIHZv
aWQgZHJhd1RleHRDb21tb24oR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1
biwgY29uc3QgRmxvYXQKICAgICAgICAgICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewogICAg
ICAgICAgICAgICAgICAgICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQgYW55d2F5LCB3ZSBk
b24ndCBjYXJlIGFib3V0IHJlbmRlciBoaW50cy4KICAgICAgICAgICAgICAgICAgICAgc2hhZG93
UGFpbnRlci0+c2V0Rm9udChwLT5mb250KCkpOwotICAgICAgICAgICAgICAgICAgICBzaGFkb3dQ
YWludGVyLT5zZXRQZW4oY3R4U2hhZG93LT5tX2NvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAg
c2hhZG93UGFpbnRlci0+c2V0UGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7CiAgICAgICAg
ICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmRyYXdUZXh0KHB0LCBzdHJpbmcsIGZsYWdzLCBy
dW4uZXhwYW5zaW9uKCkpOwogICAgICAgICAgICAgICAgICAgICBjdHhTaGFkb3ctPmVuZFNoYWRv
d0xheWVyKGN0eCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkgewotICAg
ICAgICAgICAgaWYgKGN0eFNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6OkJsdXJTaGFk
b3cpIHsKLSAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoY3R4U2hhZG93LT5vZmZzZXQoKSk7
Ci0gICAgICAgICAgICAgICAgcC0+c3Ryb2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBlbihjdHhT
aGFkb3ctPm1fY29sb3IpKTsKLSAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoLWN0eFNoYWRv
dy0+b2Zmc2V0KCkpOworICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRv
d0JsdXI6OkJsdXJTaGFkb3cpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnRGIHNoYWRv
d09mZnNldChjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0eC0+c3RhdGUoKS5z
aGFkb3dPZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShzaGFk
b3dPZmZzZXQpOworICAgICAgICAgICAgICAgIHAtPnN0cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgs
IFFQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKSk7CisgICAgICAgICAgICAgICAgcC0+dHJh
bnNsYXRlKC1zaGFkb3dPZmZzZXQpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAg
ICAgICBRRm9udE1ldHJpY3MgZm0oZm9udCk7CiAgICAgICAgICAgICAgICAgUVJlY3RGIGJvdW5k
aW5nUmVjdChwdC54KCksIHBvaW50LnkoKSAtIGZtLmFzY2VudCgpLCBmbS53aWR0aChzdHJpbmcs
IC0xLCBmbGFncyksIGZtLmhlaWdodCgpKTsKQEAgLTIzNCw3ICsyMzYsNyBAQCBzdGF0aWMgdm9p
ZCBkcmF3VGV4dENvbW1vbihHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBGbG9hdAogICAgICAgICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIFNpbmNlIGl0IHdpbGwgYmUgYmx1cnJlZCBhbnl3YXksIHdlIGRv
bid0IGNhcmUgYWJvdXQgcmVuZGVyIGhpbnRzLgogICAgICAgICAgICAgICAgICAgICBzaGFkb3dQ
YWludGVyLT5zZXRGb250KHAtPmZvbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1Bh
aW50ZXItPnN0cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgsIFFQZW4oY3R4U2hhZG93LT5tX2NvbG9y
KSk7CisgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnN0cm9rZVBhdGgodGV4dFN0
cm9rZVBhdGgsIFFQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKSk7CiAgICAgICAgICAgICAg
ICAgICAgIGN0eFNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY3R4KTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CkBAIC0zMjgsNyArMzMwLDcgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhz
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRh
LAogICAgIEFTU0VSVCghc2hvdWxkU3Ryb2tlKTsKIAogICAgIC8vIFNoYWRvd2VkIHRleHQgc2hv
dWxkIGFsd2F5cyB0YWtlIHRoZSBjb21wbGV4IHBhdGguCi0gICAgQVNTRVJUKGNvbnRleHQtPmNv
bnRleHRTaGFkb3coKS0+bV90eXBlID09IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KTsKKyAgICBB
U1NFUlQoY29udGV4dC0+Y29udGV4dFNoYWRvdygpLT50eXBlKCkgPT0gU2hhZG93Qmx1cjo6Tm9T
aGFkb3cpOwogCiAgICAgaWYgKCFzaG91bGRGaWxsICYmICFzaG91bGRTdHJva2UpCiAgICAgICAg
IHJldHVybjsKQEAgLTM2MSw3ICszNjMsNyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsCiAgICAg
UVBhaW50ZXIqIHBhaW50ZXIgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIENv
bnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHQtPmNvbnRleHRTaGFkb3coKTsKLSAgICBzd2l0
Y2ggKHNoYWRvdy0+bV90eXBlKSB7CisgICAgc3dpdGNoIChzaGFkb3ctPnR5cGUoKSkgewogICAg
IGNhc2UgQ29udGV4dFNoYWRvdzo6U29saWRTaGFkb3c6IHsKICAgICAgICAgUVBlbiBwcmV2aW91
c1BlbiA9IHBhaW50ZXItPnBlbigpOwogICAgICAgICBwYWludGVyLT5zZXRQZW4oc2hhZG93LT5t
X2NvbG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzQ29udGV4dFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAppbmRleCA3OTNjZGUwLi44ZGNhNDY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRR
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3ND
b250ZXh0UXQuY3BwCkBAIC00NCwxMyArNDQsMTMgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiQ29udGV4dFNoYWRvdy5oIgog
I2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAi
UGF0aC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCiAj
aW5jbHVkZSAiVHJhbnNwYXJlbmN5TGF5ZXIuaCIKIAogI2luY2x1ZGUgPFFCcnVzaD4KQEAgLTE5
Niw4ICsxOTYsOCBAQCBwdWJsaWM6CiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eTsKICAgICBib29sIGluaXRpYWxTbW9vdGhQaXhtYXBUcmFuc2Zvcm1I
aW50OwogCi0gICAgQ29udGV4dFNoYWRvdyBzaGFkb3c7Ci0gICAgUVN0YWNrPENvbnRleHRTaGFk
b3c+IHNoYWRvd1N0YWNrOworICAgIFNoYWRvd0JsdXIgc2hhZG93OworICAgIFFTdGFjazxTaGFk
b3dCbHVyPiBzaGFkb3dTdGFjazsKIAogICAgIFFSZWN0RiBjbGlwQm91bmRpbmdSZWN0KCkgY29u
c3QKICAgICB7CkBAIC0zMDksNyArMzA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3Rv
cmVQbGF0Zm9ybVN0YXRlKCkKICAgICBtX2RhdGEtPnAoKS0+cmVzdG9yZSgpOwogCiAgICAgaWYg
KG1fZGF0YS0+c2hhZG93U3RhY2suaXNFbXB0eSgpKQotICAgICAgICBtX2RhdGEtPnNoYWRvdyA9
IENvbnRleHRTaGFkb3coKTsKKyAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBTaGFkb3dCbHVyKEZs
b2F0U2l6ZShtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Qmx1ciksIG1fc3RhdGUu
c2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd0NvbG9yU3Bh
Y2UpOwogICAgIGVsc2UKICAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBtX2RhdGEtPnNoYWRvd1N0
YWNrLnBvcCgpOwogfQpAQCAtNDk1LDMxICs0OTUsMzEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgcGxhdGZvcm1QYXRoLnNldEZpbGxSdWxl
KHRvUXRGaWxsUnVsZShmaWxsUnVsZSgpKSk7CiAKICAgICBpZiAoaGFzU2hhZG93KCkpIHsKLSAg
ICAgICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY29udGV4dFNoYWRvdygpOwotICAgICAgICBp
ZiAoc2hhZG93LT5tdXN0VXNlQ29udGV4dFNoYWRvdyh0aGlzKSB8fCBtX3N0YXRlLmZpbGxQYXR0
ZXJuIHx8IG1fc3RhdGUuZmlsbEdyYWRpZW50KQorICAgICAgICBTaGFkb3dCbHVyKiBzaGFkb3cg
PSBzaGFkb3dCbHVyKCk7CisgICAgICAgIGlmIChzaGFkb3ctPm11c3RVc2VTaGFkb3dCbHVyKHRo
aXMpIHx8IG1fc3RhdGUuZmlsbFBhdHRlcm4gfHwgbV9zdGF0ZS5maWxsR3JhZGllbnQpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5iZWdp
blNoYWRvd0xheWVyKHRoaXMsIHBsYXRmb3JtUGF0aC5jb250cm9sUG9pbnRSZWN0KCkpOwogICAg
ICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKICAgICAgICAgICAgICAgICBpZiAobV9zdGF0
ZS5maWxsUGF0dGVybikgewogICAgICAgICAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZm
aW5lOwotICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRp
Y19jYXN0PHFyZWFsPihzaGFkb3ctPm1fY29sb3IuYWxwaGEoKSkgLyAyNTUpOworICAgICAgICAg
ICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPiht
X3N0YXRlLnNoYWRvd0NvbG9yLmFscGhhKCkpIC8gMjU1KTsKICAgICAgICAgICAgICAgICAgICAg
c2hhZG93UGFpbnRlci0+ZmlsbFBhdGgocGxhdGZvcm1QYXRoLCBRQnJ1c2gobV9zdGF0ZS5maWxs
UGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSkpKTsKICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KSB7CiAgICAgICAgICAgICAgICAgICAg
IFFCcnVzaCBicnVzaCgqbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7
CiAgICAgICAgICAgICAgICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShtX3N0YXRlLmZpbGxHcmFk
aWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKLSAgICAgICAgICAgICAgICAgICAgc2hh
ZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVhbD4oc2hhZG93LT5tX2NvbG9y
LmFscGhhKCkpIC8gMjU1KTsKKyAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0
T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVhbD4obV9zdGF0ZS5zaGFkb3dDb2xvci5hbHBoYSgpKSAv
IDI1NSk7CiAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxQYXRoKHBsYXRm
b3JtUGF0aCwgYnJ1c2gpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIFFDb2xvciBzaGFkb3dDb2xvciA9IHNoYWRvdy0+bV9jb2xvcjsKKyAgICAgICAgICAg
ICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gbV9zdGF0ZS5zaGFkb3dDb2xvcjsKICAgICAg
ICAgICAgICAgICAgICAgc2hhZG93Q29sb3Iuc2V0QWxwaGFGKHNoYWRvd0NvbG9yLmFscGhhRigp
ICogcC0+YnJ1c2goKS5jb2xvcigpLmFscGhhRigpKTsKICAgICAgICAgICAgICAgICAgICAgc2hh
ZG93UGFpbnRlci0+ZmlsbFBhdGgocGxhdGZvcm1QYXRoLCBzaGFkb3dDb2xvcik7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIodGhpcyk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBRUG9pbnRGIG9m
ZnNldCA9IHNoYWRvdy0+b2Zmc2V0KCk7CisgICAgICAgICAgICBRUG9pbnRGIG9mZnNldChtX3N0
YXRlLnNoYWRvd09mZnNldC53aWR0aCgpLCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7
CiAgICAgICAgICAgICBwLT50cmFuc2xhdGUob2Zmc2V0KTsKLSAgICAgICAgICAgIFFDb2xvciBz
aGFkb3dDb2xvciA9IHNoYWRvdy0+bV9jb2xvcjsKKyAgICAgICAgICAgIFFDb2xvciBzaGFkb3dD
b2xvciA9IG1fc3RhdGUuc2hhZG93Q29sb3I7CiAgICAgICAgICAgICBzaGFkb3dDb2xvci5zZXRB
bHBoYUYoc2hhZG93Q29sb3IuYWxwaGFGKCkgKiBwLT5icnVzaCgpLmNvbG9yKCkuYWxwaGFGKCkp
OwogICAgICAgICAgICAgcC0+ZmlsbFBhdGgocGxhdGZvcm1QYXRoLCBzaGFkb3dDb2xvcik7CiAg
ICAgICAgICAgICBwLT50cmFuc2xhdGUoLW9mZnNldCk7CkBAIC01NDcsOCArNTQ3LDggQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBwbGF0
Zm9ybVBhdGguc2V0RmlsbFJ1bGUodG9RdEZpbGxSdWxlKGZpbGxSdWxlKCkpKTsKIAogICAgIGlm
IChoYXNTaGFkb3coKSkgewotICAgICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0
U2hhZG93KCk7Ci0gICAgICAgIGlmIChzaGFkb3ctPm11c3RVc2VDb250ZXh0U2hhZG93KHRoaXMp
IHx8IG1fc3RhdGUuc3Ryb2tlUGF0dGVybiB8fCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50KQorICAg
ICAgICBTaGFkb3dCbHVyKiBzaGFkb3cgPSBzaGFkb3dCbHVyKCk7CisgICAgICAgIGlmIChzaGFk
b3ctPm11c3RVc2VTaGFkb3dCbHVyKHRoaXMpIHx8IG1fc3RhdGUuc3Ryb2tlUGF0dGVybiB8fCBt
X3N0YXRlLnN0cm9rZUdyYWRpZW50KQogICAgICAgICB7CiAgICAgICAgICAgICBGbG9hdFJlY3Qg
Ym91bmRpbmdSZWN0ID0gcGxhdGZvcm1QYXRoLmNvbnRyb2xQb2ludFJlY3QoKTsKICAgICAgICAg
ICAgIGJvdW5kaW5nUmVjdC5pbmZsYXRlKHBlbi5taXRlckxpbWl0KCkgKyBwZW4ud2lkdGhGKCkp
OwpAQCAtNTU5LDE4ICs1NTksMTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAgICAgICAgICAgICAgYnJ1c2guc2V0VHJhbnNmb3Jt
KG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAg
ICAgICAgICAgICAgICAgIFFQZW4gc2hhZG93UGVuKHBlbik7CiAgICAgICAgICAgICAgICAgICAg
IHNoYWRvd1Blbi5zZXRCcnVzaChicnVzaCk7Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1Bh
aW50ZXItPnNldE9wYWNpdHkoc3RhdGljX2Nhc3Q8cXJlYWw+KHNoYWRvdy0+bV9jb2xvci5hbHBo
YSgpKSAvIDI1NSk7CisgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldE9wYWNp
dHkoc3RhdGljX2Nhc3Q8cXJlYWw+KG1fc3RhdGUuc2hhZG93Q29sb3IuYWxwaGEoKSkgLyAyNTUp
OwogICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zdHJva2VQYXRoKHBsYXRmb3Jt
UGF0aCwgc2hhZG93UGVuKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPihtX2Rh
dGEtPnNoYWRvdy5tX2NvbG9yLmFscGhhKCkpIC8gMjU1KTsKKyAgICAgICAgICAgICAgICAgICAg
c2hhZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVhbD4obV9zdGF0ZS5zaGFk
b3dDb2xvci5hbHBoYSgpKSAvIDI1NSk7CiAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50
ZXItPnN0cm9rZVBhdGgocGxhdGZvcm1QYXRoLCBwZW4pOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKHRoaXMpOwogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUVBvaW50RiBvZmZzZXQgPSBzaGFkb3ct
Pm9mZnNldCgpOworICAgICAgICAgICAgUVBvaW50RiBvZmZzZXQobV9zdGF0ZS5zaGFkb3dPZmZz
ZXQud2lkdGgoKSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICAgICAg
cC0+dHJhbnNsYXRlKG9mZnNldCk7Ci0gICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBz
aGFkb3ctPm1fY29sb3I7CisgICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBtX3N0YXRl
LnNoYWRvd0NvbG9yOwogICAgICAgICAgICAgc2hhZG93Q29sb3Iuc2V0QWxwaGFGKHNoYWRvd0Nv
bG9yLmFscGhhRigpICogcGVuLmNvbG9yKCkuYWxwaGFGKCkpOwogICAgICAgICAgICAgUVBlbiBz
aGFkb3dQZW4ocGVuKTsKICAgICAgICAgICAgIHNoYWRvd1Blbi5zZXRDb2xvcihzaGFkb3dDb2xv
cik7CkBAIC02NjgsNyArNjY4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKIAogICAgIFFQYWludGVyKiBwID0gbV9kYXRhLT5wKCk7CiAg
ICAgUVJlY3RGIG5vcm1hbGl6ZWRSZWN0ID0gcmVjdC5ub3JtYWxpemVkKCk7Ci0gICAgQ29udGV4
dFNoYWRvdyogc2hhZG93ID0gY29udGV4dFNoYWRvdygpOworICAgIFNoYWRvd0JsdXIqIHNoYWRv
dyA9IHNoYWRvd0JsdXIoKTsKIAogICAgIGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CiAgICAg
ICAgIFFQaXhtYXAqIGltYWdlID0gbV9zdGF0ZS5maWxsUGF0dGVybi0+dGlsZUltYWdlKCktPm5h
dGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CkBAIC02NzYsNyArNjc2LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgaWYg
KHNoYWRvd1BhaW50ZXIpIHsKICAgICAgICAgICAgIGRyYXdSZXBlYXRQYXR0ZXJuKHNoYWRvd1Bh
aW50ZXIsIGltYWdlLCBub3JtYWxpemVkUmVjdCwgbV9zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0
WCgpLCBtX3N0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRZKCkpOwogICAgICAgICAgICAgc2hhZG93
UGFpbnRlci0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291
cmNlSW4pOwotICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFsaXplZFJl
Y3QsIHNoYWRvdy0+bV9jb2xvcik7CisgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVj
dChub3JtYWxpemVkUmVjdCwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CiAgICAgICAgICAgICBzaGFk
b3ctPmVuZFNoYWRvd0xheWVyKHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIGRyYXdSZXBlYXRQ
YXR0ZXJuKHAsIGltYWdlLCBub3JtYWxpemVkUmVjdCwgbV9zdGF0ZS5maWxsUGF0dGVybi0+cmVw
ZWF0WCgpLCBtX3N0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRZKCkpOwpAQCAtNjg3LDI1ICs2ODcs
MjUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKICAgICAgICAgICAgIHNoYWRvd1BhaW50
ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBicnVzaCk7CiAgICAgICAgICAgICBzaGFkb3dQ
YWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3Vy
Y2VJbik7Ci0gICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3JtYWxpemVkUmVj
dCwgc2hhZG93LT5tX2NvbG9yKTsKKyAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0
KG5vcm1hbGl6ZWRSZWN0LCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsKICAgICAgICAgICAgIHNoYWRv
dy0+ZW5kU2hhZG93TGF5ZXIodGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcC0+ZmlsbFJlY3Qo
bm9ybWFsaXplZFJlY3QsIGJydXNoKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoaGFzU2hh
ZG93KCkpIHsKLSAgICAgICAgICAgIGlmIChzaGFkb3ctPm11c3RVc2VDb250ZXh0U2hhZG93KHRo
aXMpKSB7CisgICAgICAgICAgICBpZiAoc2hhZG93LT5tdXN0VXNlU2hhZG93Qmx1cih0aGlzKSkg
ewogICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5iZWdp
blNoYWRvd0xheWVyKHRoaXMsIG5vcm1hbGl6ZWRSZWN0KTsKICAgICAgICAgICAgICAgICBpZiAo
c2hhZG93UGFpbnRlcikgewotICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRP
cGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPihzaGFkb3ctPm1fY29sb3IuYWxwaGEoKSkgLyAyNTUp
OworICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRpY19j
YXN0PHFyZWFsPihtX3N0YXRlLnNoYWRvd0NvbG9yLmFscGhhKCkpIC8gMjU1KTsKICAgICAgICAg
ICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIHAtPmJy
dXNoKCkpOwogICAgICAgICAgICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKHRoaXMp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgLy8gU29saWQgcmVjdGFuZ2xlIGZpbGwgd2l0aCBubyBibHVyIHNoYWRvdyBvciB0cmFuc2Zv
cm1hdGlvbnMgYXBwbGllZCBjYW4gYmUgZG9uZQogICAgICAgICAgICAgICAgIC8vIGZhc3RlciB3
aXRob3V0IHVzaW5nIHRoZSBzaGFkb3cgbGF5ZXIgYXQgYWxsLgotICAgICAgICAgICAgICAgIFFD
b2xvciBzaGFkb3dDb2xvciA9IHNoYWRvdy0+bV9jb2xvcjsKKyAgICAgICAgICAgICAgICBRQ29s
b3Igc2hhZG93Q29sb3IgPSBtX3N0YXRlLnNoYWRvd0NvbG9yOwogICAgICAgICAgICAgICAgIHNo
YWRvd0NvbG9yLnNldEFscGhhRihzaGFkb3dDb2xvci5hbHBoYUYoKSAqIHAtPmJydXNoKCkuY29s
b3IoKS5hbHBoYUYoKSk7Ci0gICAgICAgICAgICAgICAgcC0+ZmlsbFJlY3Qobm9ybWFsaXplZFJl
Y3QudHJhbnNsYXRlZChzaGFkb3ctPm9mZnNldCgpKSwgc2hhZG93Q29sb3IpOworICAgICAgICAg
ICAgICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LnRyYW5zbGF0ZWQoUVBvaW50RihtX3N0
YXRlLnNoYWRvd09mZnNldC53aWR0aCgpLCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSkp
LCBzaGFkb3dDb2xvcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtNzI0LDE2ICs3
MjQsMTYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclMKICAgICBRUmVjdEYgbm9ybWFsaXplZFJl
Y3QgPSByZWN0Lm5vcm1hbGl6ZWQoKTsKIAogICAgIGlmIChoYXNTaGFkb3coKSkgewotICAgICAg
ICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7Ci0gICAgICAgIGlmIChz
aGFkb3ctPm11c3RVc2VDb250ZXh0U2hhZG93KHRoaXMpKSB7CisgICAgICAgIFNoYWRvd0JsdXIq
IHNoYWRvdyA9IHNoYWRvd0JsdXIoKTsKKyAgICAgICAgaWYgKHNoYWRvdy0+bXVzdFVzZVNoYWRv
d0JsdXIodGhpcykpIHsKICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hh
ZG93LT5iZWdpblNoYWRvd0xheWVyKHRoaXMsIG5vcm1hbGl6ZWRSZWN0KTsKICAgICAgICAgICAg
IGlmIChzaGFkb3dQYWludGVyKSB7CiAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0
Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKLSAgICAg
ICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwgc2hhZG93
LT5tX2NvbG9yKTsKKyAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3Jt
YWxpemVkUmVjdCwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CiAgICAgICAgICAgICAgICAgc2hhZG93
LT5lbmRTaGFkb3dMYXllcih0aGlzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlCi0g
ICAgICAgICAgICBwLT5maWxsUmVjdChub3JtYWxpemVkUmVjdC50cmFuc2xhdGVkKHNoYWRvdy0+
b2Zmc2V0KCkpLCBzaGFkb3ctPm1fY29sb3IpOworICAgICAgICAgICAgcC0+ZmlsbFJlY3Qobm9y
bWFsaXplZFJlY3QudHJhbnNsYXRlZChRUG9pbnRGKG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRo
KCksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LmhlaWdodCgpKSksIG1fc3RhdGUuc2hhZG93Q29sb3Ip
OwogICAgIH0KIAogICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBtX2RhdGEtPnNvbGlk
Q29sb3IpOwpAQCAtNzQ4LDE4ICs3NDgsMTkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
b3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWYKICAg
ICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0
LCBib3R0b21SaWdodCk7CiAgICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKICAgICBpZiAo
aGFzU2hhZG93KCkpIHsKLSAgICAgICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY29udGV4dFNo
YWRvdygpOwotICAgICAgICBpZiAoc2hhZG93LT5tdXN0VXNlQ29udGV4dFNoYWRvdyh0aGlzKSkg
eworICAgICAgICBTaGFkb3dCbHVyKiBzaGFkb3cgPSBzaGFkb3dCbHVyKCk7CisgICAgICAgIGlm
IChzaGFkb3ctPm11c3RVc2VTaGFkb3dCbHVyKHRoaXMpKSB7CiAgICAgICAgICAgICBRUGFpbnRl
ciogc2hhZG93UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCByZWN0KTsK
ICAgICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CiAgICAgICAgICAgICAgICAgc2hhZG93
UGFpbnRlci0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291
cmNlKTsKLSAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUGF0aChwYXRoLnBsYXRm
b3JtUGF0aCgpLCBRQ29sb3IobV9kYXRhLT5zaGFkb3cubV9jb2xvcikpOworICAgICAgICAgICAg
ICAgIHNoYWRvd1BhaW50ZXItPmZpbGxQYXRoKHBhdGgucGxhdGZvcm1QYXRoKCksIFFDb2xvciht
X3N0YXRlLnNoYWRvd0NvbG9yKSk7CiAgICAgICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dM
YXllcih0aGlzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IHAtPnRyYW5zbGF0ZShtX2RhdGEtPnNoYWRvdy5vZmZzZXQoKSk7Ci0gICAgICAgICAgICBwLT5m
aWxsUGF0aChwYXRoLnBsYXRmb3JtUGF0aCgpLCBRQ29sb3IobV9kYXRhLT5zaGFkb3cubV9jb2xv
cikpOwotICAgICAgICAgICAgcC0+dHJhbnNsYXRlKC1tX2RhdGEtPnNoYWRvdy5vZmZzZXQoKSk7
CisgICAgICAgICAgICBjb25zdCBRUG9pbnRGIHNoYWRvd09mZnNldChtX3N0YXRlLnNoYWRvd09m
ZnNldC53aWR0aCgpLCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7CisgICAgICAgICAg
ICBwLT50cmFuc2xhdGUoc2hhZG93T2Zmc2V0KTsKKyAgICAgICAgICAgIHAtPmZpbGxQYXRoKHBh
dGgucGxhdGZvcm1QYXRoKCksIFFDb2xvcihtX3N0YXRlLnNoYWRvd0NvbG9yKSk7CisgICAgICAg
ICAgICBwLT50cmFuc2xhdGUoLXNoYWRvd09mZnNldCk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
cC0+ZmlsbFBhdGgocGF0aC5wbGF0Zm9ybVBhdGgoKSwgUUNvbG9yKGNvbG9yKSk7CkBAIC03NzAs
NyArNzcxLDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQ6OmluVHJhbnNwYXJlbmN5TGF5ZXIoKSBj
b25zdAogICAgIHJldHVybiBtX2RhdGEtPmxheWVyQ291bnQ7CiB9CiAKLUNvbnRleHRTaGFkb3cq
IEdyYXBoaWNzQ29udGV4dDo6Y29udGV4dFNoYWRvdygpCitTaGFkb3dCbHVyKiBHcmFwaGljc0Nv
bnRleHQ6OnNoYWRvd0JsdXIoKQogewogICAgIHJldHVybiAmbV9kYXRhLT5zaGFkb3c7CiB9CkBA
IC03OTAsNiArNzkxLDIyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIAogICAgIG1fZGF0YS0+cCgpLT5zZXRDbGlwUmVjdChyZWN0LCBRdDo6SW50
ZXJzZWN0Q2xpcCk7CiB9CitJbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNv
bnN0Cit7CisgICAgUVBhaW50ZXIgKnAgPSBtX2RhdGEtPnAoKTsKKyAgICBRUmVjdCBjbGlwUmVj
dDsKKworICAgIGlmIChwLT5oYXNDbGlwcGluZygpKQorI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVS
U0lPTl9DSEVDSyg0LCA4LCAwKQorICAgICAgICBjbGlwUmVjdCA9IHAtPmNsaXBCb3VuZGluZ1Jl
Y3QoKS50b0FsaWduZWRSZWN0KCk7CisjZWxzZQorICAgICAgICBjbGlwUmVjdCA9IHAtPmNsaXBS
ZWdpb24oKS5ib3VuZGluZ1JlY3QoKTsKKyNlbmRpZgorICAgIGVsc2UKKyAgICAgICAgY2xpcFJl
Y3QgPSBwLT50cmFuc2Zvcm0oKS5pbnZlcnRlZCgpLm1hcFJlY3QocC0+d2luZG93KCkpOworCisg
ICAgcmV0dXJuIEludFJlY3QoY2xpcFJlY3QueCgpLCBjbGlwUmVjdC55KCksIGNsaXBSZWN0Lndp
ZHRoKCksIGNsaXBSZWN0LmhlaWdodCgpKTsKK30KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogewpAQCAtOTI2LDcg
Kzk0Myw3IEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiBmcmVjdCwgUm91bmRpbmdNCiAgICAgcmV0dXJuIEZsb2F0UmVjdChy
b3VuZGVkT3JpZ2luLCByb3VuZGVkTG93ZXJSaWdodCAtIHJvdW5kZWRPcmlnaW4pOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBz
aXplLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBzaXplLCBm
bG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsK
ICAgICAvLyBRdCBkb2Vzbid0IHN1cHBvcnQgc2hhZG93cyBuYXRpdmVseSwgdGhleSBhcmUgZHJh
d24gbWFudWFsbHkgaW4gdGhlIGRyYXcqCiAgICAgLy8gZnVuY3Rpb25zCkBAIC05MzUsMTAgKzk1
Miw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9h
dFNpemUmIHNpemUsIGZsb2F0IGJsdXIsIGNvbnN0CiAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0
aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dAogICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1
IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwogICAgICAgICBtX3N0YXRlLnNoYWRvd09mZnNl
dCA9IEZsb2F0U2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKTsKLSAgICAgICAgbV9k
YXRhLT5zaGFkb3cgPSBDb250ZXh0U2hhZG93KGNvbG9yLCBibHVyLCBGbG9hdFNpemUoc2l6ZS53
aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSkpOwotICAgIH0gZWxzZQotICAgICAgICBtX2RhdGEtPnNo
YWRvdyA9IENvbnRleHRTaGFkb3coY29sb3IsIGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpKTsKKyAgICB9CiAKKyAgICBtX2RhdGEtPnNoYWRvdyA9IFNoYWRvd0Js
dXIoRmxvYXRTaXplKG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dCbHVyKSwgbV9z
dGF0ZS5zaGFkb3dPZmZzZXQsIGNvbG9yLCBjb2xvclNwYWNlKTsKICAgICBtX2RhdGEtPnNoYWRv
dy5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvSW1hZ2VCdWZmZXJRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9JbWFnZUJ1ZmZlclF0LmNwcAppbmRleCBkNjBkZGEzLi5kZTYyNDBiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZUJ1ZmZlclF0LmNwcApA
QCAtMTY0LDYgKzE2NCwxMCBAQCB2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBmbG9hdFJlY3QpIGNvbgogICAgIGlmIChhbHBo
YU1hc2sud2lkdGgoKSAhPSByZWN0LndpZHRoKCkgfHwgYWxwaGFNYXNrLmhlaWdodCgpICE9IHJl
Y3QuaGVpZ2h0KCkpCiAgICAgICAgIGFscGhhTWFzayA9IGFscGhhTWFzay5zY2FsZWQocmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKIAorICAgIFFSZWN0RiBkZXZpY2VDbGlwID0gY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCktPnRyYW5zZm9ybSgpLm1hcFJlY3QoZmxvYXRSZWN0KTsKKyAg
ICBpZiAoYWxwaGFNYXNrLndpZHRoKCkgIT0gZGV2aWNlQ2xpcC53aWR0aCgpIHx8IGFscGhhTWFz
ay5oZWlnaHQoKSAhPSBkZXZpY2VDbGlwLmhlaWdodCgpKQorICAgICAgICBhbHBoYU1hc2sgPSBh
bHBoYU1hc2suc2NhbGVkKGRldmljZUNsaXAud2lkdGgoKSwgZGV2aWNlQ2xpcC5oZWlnaHQoKSk7
CisKICAgICBjb250ZXh0LT5wdXNoVHJhbnNwYXJlbmN5TGF5ZXJJbnRlcm5hbChyZWN0LCAxLjAs
IGFscGhhTWFzayk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0ltYWdlUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvSW1hZ2VRdC5jcHAKaW5kZXggMGM4Y2U5ZS4uZGRlM2U1ZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKQEAgLTM0LDExICszNCwxMSBA
QAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2Uu
aCIKLSNpbmNsdWRlICJDb250ZXh0U2hhZG93LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgogI2lu
Y2x1ZGUgIlN0aWxsSW1hZ2VRdC5oIgogI2luY2x1ZGUgInF3ZWJzZXR0aW5ncy5oIgogCkBAIC0y
MjQsMTEgKzIyNCwxMSBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCog
Y3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsCiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlv
dXNPcGVyYXRvciA9IGN0eHQtPmNvbXBvc2l0ZU9wZXJhdGlvbigpOwogICAgIGN0eHQtPnNldENv
bXBvc2l0ZU9wZXJhdGlvbighaW1hZ2UtPmhhc0FscGhhKCkgJiYgb3AgPT0gQ29tcG9zaXRlU291
cmNlT3ZlciA/IENvbXBvc2l0ZUNvcHkgOiBvcCk7CiAKLSAgICBDb250ZXh0U2hhZG93KiBzaGFk
b3cgPSBjdHh0LT5jb250ZXh0U2hhZG93KCk7Ci0gICAgaWYgKHNoYWRvdy0+bV90eXBlICE9IENv
bnRleHRTaGFkb3c6Ok5vU2hhZG93KSB7CisgICAgaWYgKGN0eHQtPmhhc1NoYWRvdygpKSB7Cisg
ICAgICAgIFNoYWRvd0JsdXIqIHNoYWRvdyA9IGN0eHQtPnNoYWRvd0JsdXIoKTsKICAgICAgICAg
UVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4dCwg
bm9ybWFsaXplZERzdCk7CiAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7Ci0gICAgICAgICAg
ICBzaGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPihzaGFkb3ctPm1f
Y29sb3IuYWxwaGEoKSkgLyAyNTUpOworICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0T3Bh
Y2l0eShzdGF0aWNfY2FzdDxxcmVhbD4oY3R4dC0+c3RhdGUoKS5zaGFkb3dDb2xvci5hbHBoYSgp
KSAvIDI1NSk7CiAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5kcmF3UGl4bWFwKG5vcm1hbGl6
ZWREc3QsICppbWFnZSwgbm9ybWFsaXplZFNyYyk7CiAgICAgICAgICAgICBzaGFkb3ctPmVuZFNo
YWRvd0xheWVyKGN0eHQpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcAppbmRleCAzYjA4OTk1Li4yZTQ4MjU4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbElt
YWdlUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxs
SW1hZ2VRdC5jcHAKQEAgLTI4LDkgKzI4LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJTdGlsbEltYWdlUXQuaCIKIAotI2luY2x1ZGUgIkNvbnRleHRTaGFkb3cuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAi
U2hhZG93Qmx1ci5oIgogCiAjaW5jbHVkZSA8UVBhaW50ZXI+CiAKQEAgLTc0LDExICs3NCwxMSBA
QCB2b2lkIFN0aWxsSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9h
dFJlY3QmIGRzdCwKICAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY3R4
dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCk7CiAgICAgY3R4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9u
KG9wKTsKIAotICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGN0eHQtPmNvbnRleHRTaGFkb3co
KTsKLSAgICBpZiAoc2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpIHsK
KyAgICBpZiAoY3R4dC0+aGFzU2hhZG93KCkpIHsKKyAgICAgICAgU2hhZG93Qmx1ciogc2hhZG93
ID0gY3R4dC0+c2hhZG93Qmx1cigpOwogICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9
IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHh0LCBub3JtYWxpemVkRHN0KTsKICAgICAgICAg
aWYgKHNoYWRvd1BhaW50ZXIpIHsKLSAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldE9wYWNp
dHkoc3RhdGljX2Nhc3Q8cXJlYWw+KHNoYWRvdy0+bV9jb2xvci5hbHBoYSgpKSAvIDI1NSk7Cisg
ICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPihj
dHh0LT5zdGF0ZSgpLnNoYWRvd0NvbG9yLmFscGhhKCkpIC8gMjU1KTsKICAgICAgICAgICAgIHNo
YWRvd1BhaW50ZXItPmRyYXdQaXhtYXAobm9ybWFsaXplZERzdCwgKm1fcGl4bWFwLCBub3JtYWxp
emVkU3JjKTsKICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY3R4dCk7CiAgICAg
ICAgIH0KLS0gCjEuNy40LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98622</attachid>
            <date>2011-06-26 07:49:50 -0700</date>
            <delta_ts>2011-06-26 15:32:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Qt-Add-ShadowBlur-support.patch</filename>
            <type>text/plain</type>
            <size>40011</size>
            <attacher name="Igor Trindade Oliveira">igor.oliveira</attacher>
            
              <data encoding="base64">RnJvbSAwNDNhNTA0ZDE2MmJhMDFhM2RmYWVhOWI0Y2ZmOTJiMGUxYTBjYzI4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBJZ29yIE9saXZlaXJhIDxpZ29yLm9saXZlaXJhQG9wZW5ib3Nz
YS5vcmc+CkRhdGU6IFN1biwgMjYgSnVuIDIwMTEgMTA6MTk6MzYgLTA0MDAKU3ViamVjdDogW1BB
VENIXSBbUXRdIEFkZCBTaGFkb3dCbHVyIHN1cHBvcnQKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQwICsrKysrCiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnBybyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KIC4uLi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgIHwgICAgMiArLQog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggfCAgICA3
ICstCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCAgICB8
ICAgNjkgKysrKysrKysKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0Js
dXIuaCAgICAgIHwgICA0MCArKysrLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRT
aGFkb3dRdC5jcHAgICAgICAgfCAgMTY4IC0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwICAgICB8ICAgNjIgKysrKy0tLS0K
IC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAgICAgIHwgICA5
MyArKysrKystLS0tLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VR
dC5jcHAgICAgfCAgICA3ICstCiAuLi4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGls
bEltYWdlUXQuY3BwICB8ICAgIDcgKy0KIDExIGZpbGVzIGNoYW5nZWQsIDIzOSBpbnNlcnRpb25z
KCspLCAyNjEgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvd1F0LmNwcAoKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBj
OTRiYzVhLi45YWVmYjkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDYtMjYg
IElnb3IgT2xpdmVpcmEgIDxpZ29yLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBBZGQgU2hhZG93Qmx1
ciBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02Mjk5NworCisgICAgICAgIFVzZSBTaGFkb3dCbHVyIGluc3RlYWQgb2YgQ29udGV4dFNoYWRv
dyB0byBoYW5kbGUgY2FudmFzIGFuZCBjc3Mgc2hhZG93cy4gU2hhZG93Qmx1ciBpcworICAgICAg
ICBhIG5ld2VyIGFuZCBwbGF0Zm9ybSBpbmRlcGVuZGVudCBzaGFkb3cgaW1wbGVtZW50YXRpb24u
CisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6U2hhZG93Qmx1cik6CisgICAgICAgIChXZWJD
b3JlOjpTaGFkb3dCbHVyOjptdXN0VXNlU2hhZG93Qmx1cik6CisgICAgICAgIChXZWJDb3JlOjpT
aGFkb3dCbHVyOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpibHVyQW5k
Q29sb3JTaGFkb3dCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6YmVnaW5T
aGFkb3dMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjplbmRTaGFkb3dMYXll
cik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oOgorICAgICAgICAo
V2ViQ29yZTo6U2hhZG93Qmx1cjo6dHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvQ29udGV4dFNoYWRvd1F0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9Gb250UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd1RleHRDb21tb24pOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRS
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hhZG93Qmx1cik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRt
YXBJbWFnZTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFn
ZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmRyYXcpOgorCiAyMDExLTA2
LTI1ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUucHJvIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggYWUxZTY4MC4uYjhkY2Nj
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8KQEAgLTk4MCw3ICs5ODAsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9Gb250RmFtaWx5LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Qml0bWFwSW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgXAotICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNE
LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UXVhZC5jcHAgXApAQCAtMTk0Miw3ICsxOTQyLDcgQEAgSEVBREVS
UyArPSBcCiAgICAgcGxhdGZvcm0vbW9jay9TcGVlY2hJbnB1dENsaWVudE1vY2suaCBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Q29sb3IuaCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5oIFwKKyAgICBw
bGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVCbGVuZC5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JN
YXRyaXguaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5z
ZmVyLmggXApAQCAtMjUyMSw3ICsyNTIxLDYgQEAgU09VUkNFUyArPSBcCiAgICAgcGFnZS9xdC9G
cmFtZVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNmb3JtYXRpb25NYXRy
aXhRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbG9yUXQuY3BwIFwKLSAgICBw
bGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9Gb250UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxh
dGZvcm1EYXRhUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFBvaW50UXQu
Y3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCmluZGV4IDNiNzdiOWYuLmYzZjk5ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtNTg1LDcg
KzU4NSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1
ZmZlciogYnVmZmVyLCBjb25zdCBGbG9hdFJlY3QmIHJlCiAgICAgYnVmZmVyLT5jbGlwKHRoaXMs
IHJlY3QpOwogfQogCi0jaWYgIVVTRShDRykKKyNpZiAhVVNFKENHKSAmJiAhUExBVEZPUk0oUVQp
CiBJbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7CiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDQ5ZGU0MWYuLmVlMGFlNzIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC01
NCw2ICs1NCw3IEBAIHR5cGVkZWYgY2xhc3MgV2ViQ29yZTo6U3VyZmFjZU9wZW5WRyBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDsKICNpbmNsdWRlIDxRUGFpbnRlcj4KIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIENvbnRleHRTaGFkb3c7CitjbGFzcyBTaGFkb3dCbHVyOwogfQogdHlwZWRlZiBR
UGFpbnRlciBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKICNlbGlmIFBMQVRGT1JNKFdYKQpAQCAt
NDg1LDEwICs0ODYsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHRha2VP
d25lcnNoaXBPZlBsYXRmb3JtQ29udGV4dCgpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShRVCkg
fHwgVVNFKENBSVJPKQorI2lmIFVTRShDQUlSTykKICAgICAgICAgQ29udGV4dFNoYWRvdyogY29u
dGV4dFNoYWRvdygpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShRVCkKKyAgICAgICAgU2hhZG93
Qmx1ciogc2hhZG93Qmx1cigpOworI2VuZGlmCisKICNpZiBVU0UoQ0FJUk8pCiAgICAgICAgIEdy
YXBoaWNzQ29udGV4dChjYWlyb190Kik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKaW5kZXggMjVmYzlhYS4uNzY2MWRmZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAg
LTE5Miw2ICsxOTIsMTUgQEAgU2hhZG93Qmx1cjo6U2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUm
IHJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IEMKICAgICB9IGVsc2UKICAg
ICAgICAgbV90eXBlID0gU29saWRTaGFkb3c7CiB9CitTaGFkb3dCbHVyOjpTaGFkb3dCbHVyKCkK
KyAgICA6IG1fdHlwZShOb1NoYWRvdykKKyAgICAsIG1fYmx1clJhZGl1cygwLCAwKQorICAgICwg
bV9sYXllckNvbnRleHQoMCkKKyAgICAsIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoZmFsc2Up
Cit7Cit9CisKKwogCiAvLyBJbnN0ZWFkIG9mIGludGVnZXIgZGl2aXNpb24sIHdlIHVzZSAxNy4x
NSBmb3IgZml4ZWQtcG9pbnQgZGl2aXNpb24uCiBzdGF0aWMgY29uc3QgaW50IGJsdXJTdW1TaGlm
dCA9IDE1OwpAQCAtMjM3LDYgKzI0NiwzMCBAQCBzdGF0aWMgdm9pZCBjYWxjdWxhdGVMb2Jlcyhp
bnQgbG9iZXNbXVsyXSwgZmxvYXQgYmx1clJhZGl1cywgYm9vbCBzaGFkb3dzSWdub3JlVAogICAg
IH0KIH0KIAorYm9vbCBTaGFkb3dCbHVyOjptdXN0VXNlU2hhZG93Qmx1cihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQpCit7CisgICAgLy8gV2UgY2FuJ3QgYXZvaWQgU2hhZG93Qmx1ciwgc2luY2Ug
dGhlIHNoYWRvdyBoYXMgYmx1ci4KKyAgICBpZiAobV90eXBlID09IFNoYWRvd0JsdXI6OkJsdXJT
aGFkb3cpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIC8vIFdlIGNhbiBhdm9pZCBTaGFkb3dC
bHVyIGFuZCBvcHRpbWl6ZSwgc2luY2Ugd2UncmUgbm90IGRyYXdpbmcgb24gYQorICAgIC8vIGNh
bnZhcyBhbmQgYm94IHNoYWRvd3MgYXJlIGFmZmVjdGVkIGJ5IHRoZSB0cmFuc2Zvcm1hdGlvbiBt
YXRyaXguCisgICAgaWYgKCFzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgLy8gV2UgY2FuIGF2b2lkIFNoYWRvd0JsdXIsIHNpbmNlIHRoZXJlIGFy
ZSBubyB0cmFuc2Zvcm1hdGlvbnMgdG8gYXBwbHkgdG8gdGhlIGNhbnZhcy4KKyAgICBpZiAoY29u
dGV4dC0+Z2V0Q1RNKCkuaXNJZGVudGl0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
Ly8gT3RoZXJ3aXNlLCBubyBjaGFuY2UgYXZvaWRpbmcgU2hhZG93Qmx1ci4KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBTaGFkb3dCbHVyOjpjbGVhcigpCit7CisgICAgbV90eXBlID0gTm9T
aGFkb3c7CisgICAgbV9jb2xvciA9IENvbG9yKCk7CisgICAgbV9ibHVyUmFkaXVzID0gRmxvYXRT
aXplKCk7CisgICAgbV9vZmZzZXQgPSBGbG9hdFNpemUoKTsKK30KKwogdm9pZCBTaGFkb3dCbHVy
OjpibHVyTGF5ZXJJbWFnZSh1bnNpZ25lZCBjaGFyKiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUm
IHNpemUsIGludCByb3dTdHJpZGUpCiB7CiAgICAgY29uc3QgaW50IGNoYW5uZWxzWzRdID0geyAz
LCAwLCAxLCAzIH07CkBAIC04MjgsOSArODYxLDQ1IEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckFu
ZENvbG9yU2hhZG93QnVmZmVyKGNvbnN0IEludFNpemUmIHRlbXBsYXRlU2l6ZSkKIAogICAgIC8v
IE1hc2sgdGhlIGltYWdlIHdpdGggdGhlIHNoYWRvdyBjb2xvci4KICAgICBHcmFwaGljc0NvbnRl
eHQqIHNoYWRvd0NvbnRleHQgPSBtX2xheWVySW1hZ2UtPmNvbnRleHQoKTsKKyAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnNoYWRvd0NvbnRleHQpOwogICAgIHNoYWRv
d0NvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VJbik7CiAgICAg
c2hhZG93Q29udGV4dC0+c2V0RmlsbENvbG9yKG1fY29sb3IsIG1fY29sb3JTcGFjZSk7CiAgICAg
c2hhZG93Q29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KDAsIDAsIHRlbXBsYXRlU2l6ZS53aWR0
aCgpLCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkpKTsKIH0KIAorUGxhdGZvcm1Db250ZXh0IFNoYWRv
d0JsdXI6OmJlZ2luU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0ICpjb250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGxheWVyQXJlYSkKK3sKKyAgICBhZGp1c3RCbHVyUmFkaXVzKGNvbnRleHQpOwor
CisgICAgSW50UmVjdCBsYXllclJlY3QgPSBjYWxjdWxhdGVMYXllckJvdW5kaW5nUmVjdChjb250
ZXh0LCBsYXllckFyZWEsIGNvbnRleHQtPmNsaXBCb3VuZHMoKSk7CisKKyAgICBpZiAobGF5ZXJS
ZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX2xheWVySW1hZ2UgPSBT
Y3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5nZXRTY3JhdGNoQnVmZmVyKGxheWVyUmVjdC5zaXplKCkp
OworCisgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gbV9sYXllckltYWdlLT5j
b250ZXh0KCk7CisgICAgc2hhZG93Q29udGV4dC0+c2F2ZSgpOworICAgIHNoYWRvd0NvbnRleHQt
PmNsZWFyUmVjdChGbG9hdFJlY3QoMCwgMCwgbV9sYXllclNpemUud2lkdGgoKSwgbV9sYXllclNp
emUuaGVpZ2h0KCkpKTsKKworICAgIHNoYWRvd0NvbnRleHQtPnRyYW5zbGF0ZShtX2xheWVyQ29u
dGV4dFRyYW5zbGF0aW9uKTsKKyAgICBtX2xheWVyQ29udGV4dCA9IHNoYWRvd0NvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpOworCisgICAgcmV0dXJuIG1fbGF5ZXJDb250ZXh0OworfQorCit2b2lk
IFNoYWRvd0JsdXI6OmVuZFNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sK
KyAgICBtX2xheWVySW1hZ2UtPmNvbnRleHQoKS0+cmVzdG9yZSgpOworCisgICAgYmx1ckFuZENv
bG9yU2hhZG93QnVmZmVyKGV4cGFuZGVkSW50U2l6ZShtX2xheWVyU2l6ZSkpOworICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlKCpjb250ZXh0KTsKKworICAgIGNvbnRleHQt
PmNsZWFyU2hhZG93KCk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1fbGF5ZXJJbWFn
ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgcm91bmRlZEludFBvaW50KG1fbGF5ZXJPcmlnaW4pLCBJ
bnRSZWN0KDAsIDAsIG1fbGF5ZXJTaXplLndpZHRoKCksIG1fbGF5ZXJTaXplLmhlaWdodCgpKSwg
Y29udGV4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCkpOworCisgICAgbV9sYXllckltYWdlID0gMDsK
KyAgICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TaGFkb3dCbHVyLmgKaW5kZXggMjAyZmYzZC4uYjQ4NzNiZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaApAQCAtMzUsMjUgKzM1
LDU2IEBACiAjaW5jbHVkZSAiUm91bmRlZEludFJlY3QuaCIKICNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KIAorI2lmIFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPFFJbWFnZT4KK1FUX0JFR0lO
X05BTUVTUEFDRQorY2xhc3MgUVBhaW50ZXI7CitRVF9FTkRfTkFNRVNQQUNFCisjZW5kaWYKKwor
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDsKIGNsYXNzIEltYWdlQnVmZmVyOwogCisjaWYgUExBVEZPUk0oUVQpCit0
eXBlZGVmIFFJbWFnZSBQbGF0Zm9ybUltYWdlOwordHlwZWRlZiBRUGFpbnRlciogUGxhdGZvcm1D
b250ZXh0OworI2Vsc2UKK3R5cGVkZWYgdm9pZCogUGxhdGZvcm1JbWFnZTsKK3R5cGVkZWYgdm9p
ZCogUGxhdGZvcm1Db250ZXh0OworI2VuZGlmCisKKwogY2xhc3MgU2hhZG93Qmx1ciB7Ci0gICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoU2hhZG93Qmx1cik7CiBwdWJsaWM6CisgICAgZW51bSBTaGFk
b3dUeXBlIHsKKyAgICAgICAgTm9TaGFkb3csCisgICAgICAgIFNvbGlkU2hhZG93LAorICAgICAg
ICBCbHVyU2hhZG93CisgICAgfTsKKwogICAgIFNoYWRvd0JsdXIoY29uc3QgRmxvYXRTaXplJiBy
YWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2Up
OworICAgIFNoYWRvd0JsdXIoKTsKIAogICAgIHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMoYm9vbCBpZ25vcmVUcmFuc2Zvcm1zKSB7IG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBp
Z25vcmVUcmFuc2Zvcm1zOyB9CiAgICAgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIGNv
bnN0IHsgcmV0dXJuIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IH0KIAorICAgIFBsYXRmb3Jt
Q29udGV4dCBiZWdpblNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVj
dCYgbGF5ZXJBcmVhKTsKKyAgICB2b2lkIGVuZFNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCop
OworCiAgICAgdm9pZCBkcmF3UmVjdFNoYWRvdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBSb3VuZGVkSW50UmVjdDo6UmFkaWkmKTsKICAgICB2b2lkIGRyYXdJbnNl
dFNoYWRvdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJl
Y3QmIGhvbGVSZWN0LCBjb25zdCBSb3VuZGVkSW50UmVjdDo6UmFkaWkmIGhvbGVSYWRpaSk7CiAK
ICAgICB2b2lkIGJsdXJMYXllckltYWdlKHVuc2lnbmVkIGNoYXIqLCBjb25zdCBJbnRTaXplJiwg
aW50IHN0cmlkZSk7CiAKKyAgICBib29sIG11c3RVc2VTaGFkb3dCbHVyKEdyYXBoaWNzQ29udGV4
dCopOworCisgICAgdm9pZCBjbGVhcigpOworCisgICAgU2hhZG93VHlwZSB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlOyB9CiBwcml2YXRlOgogICAgIHZvaWQgZHJhd1NoYWRvd0J1ZmZlcihH
cmFwaGljc0NvbnRleHQqKTsKIApAQCAtODAsMTEgKzExMSw2IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgSW50U2l6ZSBibHVycmVkRWRnZVNpemUoKSBjb25zdDsKICAgICAKLSAgICBlbnVtIFNoYWRv
d1R5cGUgewotICAgICAgICBOb1NoYWRvdywKLSAgICAgICAgU29saWRTaGFkb3csCi0gICAgICAg
IEJsdXJTaGFkb3cKLSAgICB9OwogICAgIAogICAgIFNoYWRvd1R5cGUgbV90eXBlOwogCkBAIC0x
MDAsNiArMTI2LDggQEAgcHJpdmF0ZToKICAgICBGbG9hdFNpemUgbV9sYXllclNpemU7IC8vIFNp
emUgb2YgbV9sYXllckltYWdlIHBpeGVscyB0aGF0IG5lZWQgYmx1cnJpbmcuCiAgICAgRmxvYXRT
aXplIG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb247IC8vIFRyYW5zbGF0aW9uIHRvIGFwcGx5IHRv
IG1fbGF5ZXJDb250ZXh0IGZvciB0aGUgc2hhZG93IHRvIGJlIGNvcnJlY3RseSBjbGlwcGVkLgog
CisgICAgUGxhdGZvcm1Db250ZXh0IG1fbGF5ZXJDb250ZXh0OworCiAgICAgYm9vbCBtX3NoYWRv
d3NJZ25vcmVUcmFuc2Zvcm1zOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvd1F0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3dRdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDllYjMxYTcuLjAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvd1F0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2
OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFNlbmNoYSwgSW5jLgotICoKLSAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkNvbnRleHRTaGFkb3cuaCIKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPFFQYWludGVyPgotI2luY2x1ZGUg
PFFUaW1lckV2ZW50PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIENvbnRleHRTaGFkb3cg
bmVlZHMgYSBzY3JhdGNoIGltYWdlIGFzIHRoZSBidWZmZXIgZm9yIHRoZSBibHVyIGZpbHRlci4K
LS8vIEluc3RlYWQgb2YgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgdGhlIGJ1ZmZlciBmb3IgZXZl
cnkgb3BlcmF0aW9uLAotLy8gd2UgY3JlYXRlIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYXV0b21h
dGljYWxseSBwdXJnZWQgdmlhIGEgdGltZXIuCi0KLWNsYXNzIFNoYWRvd0J1ZmZlcjogcHVibGlj
IFFPYmplY3QgewotcHVibGljOgotICAgIFNoYWRvd0J1ZmZlcihRT2JqZWN0KiBwYXJlbnQgPSAw
KTsKLQotICAgIFFJbWFnZSogc2NyYXRjaEltYWdlKGNvbnN0IFFTaXplJiBzaXplKTsKLQotICAg
IHZvaWQgc2NoZWR1bGVQdXJnZSgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCB0aW1lckV2ZW50
KFFUaW1lckV2ZW50KiBldmVudCk7Ci0KLXByaXZhdGU6Ci0gICAgUUltYWdlIGltYWdlOwotICAg
IGludCB0aW1lcklkOwotfTsKLQotU2hhZG93QnVmZmVyOjpTaGFkb3dCdWZmZXIoUU9iamVjdCog
cGFyZW50KQotICAgIDogUU9iamVjdChwYXJlbnQpCi0gICAgLCB0aW1lcklkKC0xKQotewotfQot
Ci1RSW1hZ2UqIFNoYWRvd0J1ZmZlcjo6c2NyYXRjaEltYWdlKGNvbnN0IFFTaXplJiBzaXplKQot
ewotICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5o
ZWlnaHQoKTsKLQotICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIHJlY3JlYXRlIHRoZSBidWZmZXIg
aWYgdGhlIGJ1ZmZlciBpcyByZWFzb25hYmx5Ci0gICAgLy8gbGFyZ2VyIHRoYW4gdGhlIHJlcXVl
c3RlZCBzaXplLiBIb3dldmVyLCBpZiB0aGUgcmVxdWVzdGVkIHNpemUgaXMKLSAgICAvLyBtdWNo
IHNtYWxsZXIgdGhhbiBvdXIgYnVmZmVyLCByZWR1Y2Ugb3VyIGJ1ZmZlciBzbyB0aGF0IHdlIHdp
bGwgbm90Ci0gICAgLy8ga2VlcCB0b28gbWFueSBhbGxvY2F0ZWQgcGl4ZWxzIGZvciB0b28gbG9u
Zy4KLSAgICBpZiAoIWltYWdlLmlzTnVsbCgpICYmIChpbWFnZS53aWR0aCgpID4gd2lkdGgpICYm
IChpbWFnZS5oZWlnaHQoKSA+IGhlaWdodCkpCi0gICAgICAgIGlmICgoKDIgKiB3aWR0aCkgPiBp
bWFnZS53aWR0aCgpKSAmJiAoKDIgKiBoZWlnaHQpID4gaW1hZ2UuaGVpZ2h0KCkpKSB7Ci0gICAg
ICAgICAgICBpbWFnZS5maWxsKDApOwotICAgICAgICAgICAgcmV0dXJuICZpbWFnZTsKLSAgICAg
ICAgfQotCi0gICAgLy8gUm91bmQgdG8gdGhlIG5lYXJlc3QgMzIgcGl4ZWxzIHNvIHdlIGRvIG5v
dCBncm93IHRoZSBidWZmZXIgZXZlcnl0aW1lCi0gICAgLy8gdGhlcmUgaXMgbGFyZ2VyIHJlcXVl
c3QgYnkgMSBwaXhlbC4KLSAgICB3aWR0aCA9ICgxICsgKHdpZHRoID4+IDUpKSA8PCA1OwotICAg
IGhlaWdodCA9ICgxICsgKGhlaWdodCA+PiA1KSkgPDwgNTsKLQotICAgIGltYWdlID0gUUltYWdl
KHdpZHRoLCBoZWlnaHQsIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKLSAg
ICBpbWFnZS5maWxsKDApOwotICAgIHJldHVybiAmaW1hZ2U7Ci19Ci0KLXZvaWQgU2hhZG93QnVm
ZmVyOjpzY2hlZHVsZVB1cmdlKCkKLXsKLSAgICBzdGF0aWMgY29uc3QgZG91YmxlIEJ1ZmZlclB1
cmdlRGVsYXkgPSAyOyAvLyBzZWNvbmRzCi0gICAgaWYgKHRpbWVySWQgPj0gMCkKLSAgICAgICAg
a2lsbFRpbWVyKHRpbWVySWQpOwotICAgIHRpbWVySWQgPSBzdGFydFRpbWVyKEJ1ZmZlclB1cmdl
RGVsYXkgKiAxMDAwKTsKLX0KLQotdm9pZCBTaGFkb3dCdWZmZXI6OnRpbWVyRXZlbnQoUVRpbWVy
RXZlbnQqIGV2ZW50KQotewotICAgIGlmIChldmVudC0+dGltZXJJZCgpID09IHRpbWVySWQpIHsK
LSAgICAgICAga2lsbFRpbWVyKHRpbWVySWQpOwotICAgICAgICBpbWFnZSA9IFFJbWFnZSgpOwot
ICAgIH0KLSAgICBRT2JqZWN0Ojp0aW1lckV2ZW50KGV2ZW50KTsKLX0KLQotUV9HTE9CQUxfU1RB
VElDKFNoYWRvd0J1ZmZlciwgc2NyYXRjaFNoYWRvd0J1ZmZlcikKLQotUGxhdGZvcm1Db250ZXh0
IENvbnRleHRTaGFkb3c6OmJlZ2luU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBGbG9hdFJlY3QmIGxheWVyQXJlYSkKLXsKLSAgICAvLyBTZXQgbV9ibHVyRGlzdGFu
Y2UuCi0gICAgYWRqdXN0Qmx1ckRpc3RhbmNlKGNvbnRleHQpOwotCi0gICAgUGxhdGZvcm1Db250
ZXh0IHAgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIFFSZWN0IGNsaXBSZWN0
OwotICAgIGlmIChwLT5oYXNDbGlwcGluZygpKQotI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lP
Tl9DSEVDSyg0LCA4LCAwKQotICAgICAgICBjbGlwUmVjdCA9IHAtPmNsaXBCb3VuZGluZ1JlY3Qo
KS50b0FsaWduZWRSZWN0KCk7Ci0jZWxzZQotICAgICAgICBjbGlwUmVjdCA9IHAtPmNsaXBSZWdp
b24oKS5ib3VuZGluZ1JlY3QoKTsKLSNlbmRpZgotICAgIGVsc2UKLSAgICAgICAgY2xpcFJlY3Qg
PSBwLT50cmFuc2Zvcm0oKS5pbnZlcnRlZCgpLm1hcFJlY3QocC0+d2luZG93KCkpOwotCi0gICAg
Ly8gU2V0IG1fbGF5ZXJPcmlnaW4sIG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb24sIG1fc291cmNl
UmVjdC4KLSAgICBJbnRSZWN0IGNsaXAoY2xpcFJlY3QueCgpLCBjbGlwUmVjdC55KCksIGNsaXBS
ZWN0LndpZHRoKCksIGNsaXBSZWN0LmhlaWdodCgpKTsKLSAgICBJbnRSZWN0IGxheWVyUmVjdCA9
IGNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0KGNvbnRleHQsIGxheWVyQXJlYSwgY2xpcCk7Ci0K
LSAgICAvLyBEb24ndCBwYWludCBpZiB3ZSBhcmUgdG90YWxseSBvdXRzaWRlIHRoZSBjbGlwIHJl
Z2lvbi4KLSAgICBpZiAobGF5ZXJSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBTaGFkb3dCdWZmZXIqIHNoYWRvd0J1ZmZlciA9IHNjcmF0Y2hTaGFkb3dCdWZmZXIoKTsK
LSAgICBRSW1hZ2UqIHNoYWRvd0ltYWdlID0gc2hhZG93QnVmZmVyLT5zY3JhdGNoSW1hZ2UobGF5
ZXJSZWN0LnNpemUoKSk7Ci0gICAgbV9sYXllckltYWdlID0gUUltYWdlKCpzaGFkb3dJbWFnZSk7
Ci0KLSAgICBtX2xheWVyQ29udGV4dCA9IG5ldyBRUGFpbnRlcjsKLSAgICBtX2xheWVyQ29udGV4
dC0+YmVnaW4oJm1fbGF5ZXJJbWFnZSk7Ci0gICAgbV9sYXllckNvbnRleHQtPnNldEZvbnQocC0+
Zm9udCgpKTsKLSAgICBtX2xheWVyQ29udGV4dC0+dHJhbnNsYXRlKG1fbGF5ZXJDb250ZXh0VHJh
bnNsYXRpb24pOwotICAgIHJldHVybiBtX2xheWVyQ29udGV4dDsKLX0KLQotdm9pZCBDb250ZXh0
U2hhZG93OjplbmRTaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAg
bV9sYXllckNvbnRleHQtPmVuZCgpOwotICAgIGRlbGV0ZSBtX2xheWVyQ29udGV4dDsKLSAgICBt
X2xheWVyQ29udGV4dCA9IDA7Ci0KLSAgICBpZiAobV90eXBlID09IEJsdXJTaGFkb3cpIHsKLSAg
ICAgICAgYmx1ckxheWVySW1hZ2UobV9sYXllckltYWdlLmJpdHMoKSwgSW50U2l6ZShtX2xheWVy
SW1hZ2Uud2lkdGgoKSwgbV9sYXllckltYWdlLmhlaWdodCgpKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgbV9sYXllckltYWdlLmJ5dGVzUGVyTGluZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAobV90
eXBlICE9IE5vU2hhZG93KSB7Ci0gICAgICAgIC8vICJDb2xvcml6ZSIgd2l0aCB0aGUgcmlnaHQg
c2hhZG93IGNvbG9yLgotICAgICAgICBRUGFpbnRlciBwKCZtX2xheWVySW1hZ2UpOwotICAgICAg
ICBwLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZUlu
KTsKLSAgICAgICAgcC5maWxsUmVjdChtX2xheWVySW1hZ2UucmVjdCgpLCBtX2NvbG9yLnJnYigp
KTsKLSAgICAgICAgcC5lbmQoKTsKLSAgICB9Ci0KLSAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKS0+ZHJhd0ltYWdlKG1fbGF5ZXJPcmlnaW4sIG1fbGF5ZXJJbWFnZSwgbV9zb3VyY2VSZWN0
KTsKLQotICAgIHNjcmF0Y2hTaGFkb3dCdWZmZXIoKS0+c2NoZWR1bGVQdXJnZSgpOwotfQotCi19
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcAppbmRl
eCBhNWExNmUwLi5iYmFiMWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9Gb250UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0ZvbnRRdC5jcHAKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNsdWRlICJGb250LmgiCiAK
ICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJDb250ZXh0U2hhZG93Lmgi
CiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRm9udEZhbGxiYWNrTGlz
dC5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgpAQCAtMzQsNiArMzMsNyBAQAogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5j
bHVkZSAiUGF0dGVybi5oIgorI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKICNpbmNsdWRlICJUZXh0
UnVuLmgiCiAKICNpbmNsdWRlIDxRQnJ1c2g+CkBAIC0xNDIsMzIgKzE0MiwzMyBAQCBzdGF0aWMg
dm9pZCBkcmF3VGV4dENvbW1vbihHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYg
cnVuLCBjb25zdCBGbG9hdAogICAgICAgICAgICAgUVJlY3RGIGJvdW5kaW5nUmVjdChwb2ludC54
KCkgKyB4MSwgcG9pbnQueSgpIC0gYXNjZW50LCB4MiAtIHgxLCBmbS5oZWlnaHQoKSk7CiAgICAg
ICAgICAgICBRUmVjdEYgY2xpcCA9IGJvdW5kaW5nUmVjdDsKIAotICAgICAgICAgICAgQ29udGV4
dFNoYWRvdyogY3R4U2hhZG93ID0gY3R4LT5jb250ZXh0U2hhZG93KCk7Ci0KLSAgICAgICAgICAg
IGlmIChjdHhTaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpOb1NoYWRvdykgeworICAg
ICAgICAgICAgU2hhZG93Qmx1ciogY3R4U2hhZG93ID0gY3R4LT5zaGFkb3dCbHVyKCk7CisgICAg
ICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsK
KyAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnRGIHNoYWRvd09mZnNldChjdHgtPnN0YXRlKCku
c2hhZG93T2Zmc2V0LndpZHRoKCksIGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkp
OwogICAgICAgICAgICAgICAgIHFyZWFsIGR4MSA9IDAsIGR4MiA9IDAsIGR5MSA9IDAsIGR5MiA9
IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+b2Zmc2V0KCkueCgpID4gMCkKLSAg
ICAgICAgICAgICAgICAgICAgZHgyID0gY3R4U2hhZG93LT5vZmZzZXQoKS54KCk7CisgICAgICAg
ICAgICAgICAgaWYgKHNoYWRvd09mZnNldC54KCkgPiAwKQorICAgICAgICAgICAgICAgICAgICBk
eDIgPSBzaGFkb3dPZmZzZXQueCgpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICAgICAgZHgxID0gLWN0eFNoYWRvdy0+b2Zmc2V0KCkueCgpOwotICAgICAgICAgICAgICAg
IGlmIChjdHhTaGFkb3ctPm9mZnNldCgpLnkoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIGR5
MiA9IGN0eFNoYWRvdy0+b2Zmc2V0KCkueSgpOworICAgICAgICAgICAgICAgICAgICBkeDEgPSAt
c2hhZG93T2Zmc2V0LngoKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hhZG93T2Zmc2V0LnkoKSA+
IDApCisgICAgICAgICAgICAgICAgICAgIGR5MiA9IHNoYWRvd09mZnNldC55KCk7CiAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBkeTEgPSAtY3R4U2hhZG93LT5vZmZz
ZXQoKS55KCk7CisgICAgICAgICAgICAgICAgICAgIGR5MSA9IC1zaGFkb3dPZmZzZXQueSgpOwog
ICAgICAgICAgICAgICAgIC8vIGV4cGFuZCB0aGUgY2xpcCByZWN0IHRvIGluY2x1ZGUgdGhlIHRl
eHQgc2hhZG93IGFzIHdlbGwKKyAgICAgICAgICAgICAgICBjb25zdCBmbG9hdCBibHVyRGlzdGFu
Y2UgPSBjdHgtPnN0YXRlKCkuc2hhZG93Qmx1cjsKICAgICAgICAgICAgICAgICBjbGlwLmFkanVz
dChkeDEsIGR4MiwgZHkxLCBkeTIpOwotICAgICAgICAgICAgICAgIGNsaXAuYWRqdXN0KC1jdHhT
aGFkb3ctPm1fYmx1ckRpc3RhbmNlLCAtY3R4U2hhZG93LT5tX2JsdXJEaXN0YW5jZSwgY3R4U2hh
ZG93LT5tX2JsdXJEaXN0YW5jZSwgY3R4U2hhZG93LT5tX2JsdXJEaXN0YW5jZSk7CisgICAgICAg
ICAgICAgICAgY2xpcC5hZGp1c3QoLWJsdXJEaXN0YW5jZSwgLWJsdXJEaXN0YW5jZSwgYmx1ckRp
c3RhbmNlLCBibHVyRGlzdGFuY2UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcC0+c2F2
ZSgpOwogICAgICAgICAgICAgcC0+c2V0Q2xpcFJlY3QoY2xpcC50b1JlY3QoKSwgUXQ6OkludGVy
c2VjdENsaXApOwogICAgICAgICAgICAgcHQuc2V0WShwdC55KCkgLSBhc2NlbnQpOwogCi0gICAg
ICAgICAgICBpZiAoY3R4U2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3cp
IHsKLSAgICAgICAgICAgICAgICBDb250ZXh0U2hhZG93KiBjdHhTaGFkb3cgPSBjdHgtPmNvbnRl
eHRTaGFkb3coKTsKLSAgICAgICAgICAgICAgICBpZiAoIWN0eFNoYWRvdy0+bXVzdFVzZUNvbnRl
eHRTaGFkb3coY3R4KSkgeworICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9IFNo
YWRvd0JsdXI6Ok5vU2hhZG93KSB7CisgICAgICAgICAgICAgICAgU2hhZG93Qmx1ciogY3R4U2hh
ZG93ID0gY3R4LT5zaGFkb3dCbHVyKCk7CisgICAgICAgICAgICAgICAgaWYgKCFjdHhTaGFkb3ct
Pm11c3RVc2VTaGFkb3dCbHVyKGN0eCkpIHsKICAgICAgICAgICAgICAgICAgICAgcC0+c2F2ZSgp
OwotICAgICAgICAgICAgICAgICAgICBwLT5zZXRQZW4oY3R4U2hhZG93LT5tX2NvbG9yKTsKLSAg
ICAgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKGN0eFNoYWRvdy0+b2Zmc2V0KCkpOworICAg
ICAgICAgICAgICAgICAgICBwLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAg
ICAgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKFFQb2ludEYoY3R4LT5zdGF0ZSgpLnNoYWRv
d09mZnNldC53aWR0aCgpLCBjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgpKSk7CiAg
ICAgICAgICAgICAgICAgICAgIGxpbmUuZHJhdyhwLCBwdCk7CiAgICAgICAgICAgICAgICAgICAg
IHAtPnJlc3RvcmUoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewpAQCAtMTc1LDcgKzE3Niw3
IEBAIHN0YXRpYyB2b2lkIGRyYXdUZXh0Q29tbW9uKEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0CiAgICAgICAgICAgICAgICAgICAgIGlmIChzaGFk
b3dQYWludGVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBpdCB3aWxsIGJl
IGJsdXJyZWQgYW55d2F5LCB3ZSBkb24ndCBjYXJlIGFib3V0IHJlbmRlciBoaW50cy4KICAgICAg
ICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldEZvbnQocC0+Zm9udCgpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldFBlbihjdHhTaGFkb3ctPm1f
Y29sb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0UGVuKGN0
eC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLmRy
YXcoc2hhZG93UGFpbnRlciwgcHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgY3R4U2hhZG93
LT5lbmRTaGFkb3dMYXllcihjdHgpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMDEsMTMg
KzIwMiwxMyBAQCBzdGF0aWMgdm9pZCBkcmF3VGV4dENvbW1vbihHcmFwaGljc0NvbnRleHQqIGN0
eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdAogICAgIGlmIChjdHgtPnRleHREcmF3
aW5nTW9kZSgpICYgVGV4dE1vZGVTdHJva2UpCiAgICAgICAgIHRleHRTdHJva2VQYXRoLmFkZFRl
eHQocHQsIGZvbnQsIHN0cmluZyk7CiAKLSAgICBDb250ZXh0U2hhZG93KiBjdHhTaGFkb3cgPSBj
dHgtPmNvbnRleHRTaGFkb3coKTsKLSAgICBpZiAoY3R4U2hhZG93LT5tX3R5cGUgIT0gQ29udGV4
dFNoYWRvdzo6Tm9TaGFkb3cpIHsKKyAgICBTaGFkb3dCbHVyKiBjdHhTaGFkb3cgPSBjdHgtPnNo
YWRvd0JsdXIoKTsKKyAgICBpZiAoY3R4LT5oYXNTaGFkb3coKSAmJiBjdHhTaGFkb3ctPnR5cGUo
KSAhPSBTaGFkb3dCbHVyOjpOb1NoYWRvdykgewogICAgICAgICBpZiAoY3R4LT50ZXh0RHJhd2lu
Z01vZGUoKSAmIFRleHRNb2RlRmlsbCkgewotICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+bV90
eXBlICE9IENvbnRleHRTaGFkb3c6OkJsdXJTaGFkb3cpIHsKKyAgICAgICAgICAgIGlmIChjdHhT
aGFkb3ctPnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpCbHVyU2hhZG93KSB7CiAgICAgICAgICAgICAg
ICAgcC0+c2F2ZSgpOwotICAgICAgICAgICAgICAgIHAtPnNldFBlbihjdHhTaGFkb3ctPm1fY29s
b3IpOwotICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShjdHhTaGFkb3ctPm9mZnNldCgpKTsK
KyAgICAgICAgICAgICAgICBwLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAg
ICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoUVBvaW50RihjdHgtPnN0YXRlKCkuc2hhZG93T2Zm
c2V0LndpZHRoKCksIGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpKTsKICAgICAg
ICAgICAgICAgICBwLT5kcmF3VGV4dChwdCwgc3RyaW5nLCBmbGFncywgcnVuLmV4cGFuc2lvbigp
KTsKICAgICAgICAgICAgICAgICBwLT5yZXN0b3JlKCk7CiAgICAgICAgICAgICB9IGVsc2UgewpA
QCAtMjE3LDE2ICsyMTgsMTcgQEAgc3RhdGljIHZvaWQgZHJhd1RleHRDb21tb24oR3JhcGhpY3ND
b250ZXh0KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXQKICAgICAgICAgICAg
ICAgICBpZiAoc2hhZG93UGFpbnRlcikgewogICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBp
dCB3aWxsIGJlIGJsdXJyZWQgYW55d2F5LCB3ZSBkb24ndCBjYXJlIGFib3V0IHJlbmRlciBoaW50
cy4KICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0Rm9udChwLT5mb250KCkp
OwotICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRQZW4oY3R4U2hhZG93LT5t
X2NvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0UGVuKGN0eC0+
c3RhdGUoKS5zaGFkb3dDb2xvcik7CiAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXIt
PmRyYXdUZXh0KHB0LCBzdHJpbmcsIGZsYWdzLCBydW4uZXhwYW5zaW9uKCkpOwogICAgICAgICAg
ICAgICAgICAgICBjdHhTaGFkb3ctPmVuZFNoYWRvd0xheWVyKGN0eCk7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGN0eC0+dGV4dERyYXdpbmdN
b2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkgewotICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+bV90
eXBlICE9IENvbnRleHRTaGFkb3c6OkJsdXJTaGFkb3cpIHsKLSAgICAgICAgICAgICAgICBwLT50
cmFuc2xhdGUoY3R4U2hhZG93LT5vZmZzZXQoKSk7Ci0gICAgICAgICAgICAgICAgcC0+c3Ryb2tl
UGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBlbihjdHhTaGFkb3ctPm1fY29sb3IpKTsKLSAgICAgICAg
ICAgICAgICBwLT50cmFuc2xhdGUoLWN0eFNoYWRvdy0+b2Zmc2V0KCkpOworICAgICAgICAgICAg
aWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6OkJsdXJTaGFkb3cpIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBRUG9pbnRGIHNoYWRvd09mZnNldChjdHgtPnN0YXRlKCkuc2hhZG93
T2Zmc2V0LndpZHRoKCksIGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOworICAg
ICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShzaGFkb3dPZmZzZXQpOworICAgICAgICAgICAgICAg
IHAtPnN0cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgsIFFQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0Nv
bG9yKSk7CisgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKC1zaGFkb3dPZmZzZXQpOwogICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBRRm9udE1ldHJpY3MgZm0oZm9udCk7
CiAgICAgICAgICAgICAgICAgUVJlY3RGIGJvdW5kaW5nUmVjdChwdC54KCksIHBvaW50LnkoKSAt
IGZtLmFzY2VudCgpLCBmbS53aWR0aChzdHJpbmcsIC0xLCBmbGFncyksIGZtLmhlaWdodCgpKTsK
QEAgLTIzNCw3ICsyMzYsNyBAQCBzdGF0aWMgdm9pZCBkcmF3VGV4dENvbW1vbihHcmFwaGljc0Nv
bnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdAogICAgICAgICAgICAg
ICAgIGlmIChzaGFkb3dQYWludGVyKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIGl0
IHdpbGwgYmUgYmx1cnJlZCBhbnl3YXksIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVuZGVyIGhpbnRz
LgogICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRGb250KHAtPmZvbnQoKSk7
Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnN0cm9rZVBhdGgodGV4dFN0cm9r
ZVBhdGgsIFFQZW4oY3R4U2hhZG93LT5tX2NvbG9yKSk7CisgICAgICAgICAgICAgICAgICAgIHNo
YWRvd1BhaW50ZXItPnN0cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgsIFFQZW4oY3R4LT5zdGF0ZSgp
LnNoYWRvd0NvbG9yKSk7CiAgICAgICAgICAgICAgICAgICAgIGN0eFNoYWRvdy0+ZW5kU2hhZG93
TGF5ZXIoY3R4KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMjgsNyAr
MzMwLDcgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLAogICAgIEFTU0VSVCghc2hvdWxkU3Ryb2tl
KTsKIAogICAgIC8vIFNoYWRvd2VkIHRleHQgc2hvdWxkIGFsd2F5cyB0YWtlIHRoZSBjb21wbGV4
IHBhdGguCi0gICAgQVNTRVJUKGNvbnRleHQtPmNvbnRleHRTaGFkb3coKS0+bV90eXBlID09IENv
bnRleHRTaGFkb3c6Ok5vU2hhZG93KTsKKyAgICBBU1NFUlQoY29udGV4dC0+Y29udGV4dFNoYWRv
dygpLT50eXBlKCkgPT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpOwogCiAgICAgaWYgKCFzaG91bGRG
aWxsICYmICFzaG91bGRTdHJva2UpCiAgICAgICAgIHJldHVybjsKQEAgLTM2MSw3ICszNjMsNyBA
QCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGEsCiAgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRl
eHQtPmNvbnRleHRTaGFkb3coKTsKLSAgICBzd2l0Y2ggKHNoYWRvdy0+bV90eXBlKSB7CisgICAg
c3dpdGNoIChzaGFkb3ctPnR5cGUoKSkgewogICAgIGNhc2UgQ29udGV4dFNoYWRvdzo6U29saWRT
aGFkb3c6IHsKICAgICAgICAgUVBlbiBwcmV2aW91c1BlbiA9IHBhaW50ZXItPnBlbigpOwogICAg
ICAgICBwYWludGVyLT5zZXRQZW4oc2hhZG93LT5tX2NvbG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcApp
bmRleCA3OTNjZGUwLi4zYWExNWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCkBAIC00NCwxMyArNDQs
MTMgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkNvbG9yLmgi
Ci0jaW5jbHVkZSAiQ29udGV4dFNoYWRvdy5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5o
IgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlBhdHRlcm4u
aCIKKyNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCiAjaW5jbHVkZSAiVHJhbnNwYXJlbmN5TGF5ZXIu
aCIKIAogI2luY2x1ZGUgPFFCcnVzaD4KQEAgLTE5Niw4ICsxOTYsOCBAQCBwdWJsaWM6CiAgICAg
SW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKICAgICBib29s
IGluaXRpYWxTbW9vdGhQaXhtYXBUcmFuc2Zvcm1IaW50OwogCi0gICAgQ29udGV4dFNoYWRvdyBz
aGFkb3c7Ci0gICAgUVN0YWNrPENvbnRleHRTaGFkb3c+IHNoYWRvd1N0YWNrOworICAgIFNoYWRv
d0JsdXIgc2hhZG93OworICAgIFFTdGFjazxTaGFkb3dCbHVyPiBzaGFkb3dTdGFjazsKIAogICAg
IFFSZWN0RiBjbGlwQm91bmRpbmdSZWN0KCkgY29uc3QKICAgICB7CkBAIC0zMDksNyArMzA5LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKICAgICBtX2Rh
dGEtPnAoKS0+cmVzdG9yZSgpOwogCiAgICAgaWYgKG1fZGF0YS0+c2hhZG93U3RhY2suaXNFbXB0
eSgpKQotICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRleHRTaGFkb3coKTsKKyAgICAgICAg
bV9kYXRhLT5zaGFkb3cgPSBTaGFkb3dCbHVyKEZsb2F0U2l6ZShtX3N0YXRlLnNoYWRvd0JsdXIs
IG1fc3RhdGUuc2hhZG93Qmx1ciksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRv
d0NvbG9yLCBtX3N0YXRlLnNoYWRvd0NvbG9yU3BhY2UpOwogICAgIGVsc2UKICAgICAgICAgbV9k
YXRhLT5zaGFkb3cgPSBtX2RhdGEtPnNoYWRvd1N0YWNrLnBvcCgpOwogfQpAQCAtNDk1LDMxICs0
OTUsMjggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgp
CiAgICAgcGxhdGZvcm1QYXRoLnNldEZpbGxSdWxlKHRvUXRGaWxsUnVsZShmaWxsUnVsZSgpKSk7
CiAKICAgICBpZiAoaGFzU2hhZG93KCkpIHsKLSAgICAgICAgQ29udGV4dFNoYWRvdyogc2hhZG93
ID0gY29udGV4dFNoYWRvdygpOwotICAgICAgICBpZiAoc2hhZG93LT5tdXN0VXNlQ29udGV4dFNo
YWRvdyh0aGlzKSB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuIHx8IG1fc3RhdGUuZmlsbEdyYWRpZW50
KQorICAgICAgICBTaGFkb3dCbHVyKiBzaGFkb3cgPSBzaGFkb3dCbHVyKCk7CisgICAgICAgIGlm
IChzaGFkb3ctPm11c3RVc2VTaGFkb3dCbHVyKHRoaXMpIHx8IG1fc3RhdGUuZmlsbFBhdHRlcm4g
fHwgbV9zdGF0ZS5maWxsR3JhZGllbnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIFFQYWludGVy
KiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRoaXMsIHBsYXRmb3Jt
UGF0aC5jb250cm9sUG9pbnRSZWN0KCkpOwogICAgICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIp
IHsKICAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikgewogICAgICAgICAg
ICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwotICAgICAgICAgICAgICAgICAgICBz
aGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPihzaGFkb3ctPm1fY29s
b3IuYWxwaGEoKSkgLyAyNTUpOwogICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5m
aWxsUGF0aChwbGF0Zm9ybVBhdGgsIFFCcnVzaChtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQ
bGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9z
dGF0ZS5maWxsR3JhZGllbnQpIHsKICAgICAgICAgICAgICAgICAgICAgUUJydXNoIGJydXNoKCpt
X3N0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKICAgICAgICAgICAgICAg
ICAgICAgYnJ1c2guc2V0VHJhbnNmb3JtKG1fc3RhdGUuZmlsbEdyYWRpZW50LT5ncmFkaWVudFNw
YWNlVHJhbnNmb3JtKCkpOwotICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRP
cGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPihzaGFkb3ctPm1fY29sb3IuYWxwaGEoKSkgLyAyNTUp
OwogICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUGF0aChwbGF0Zm9ybVBh
dGgsIGJydXNoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICBRQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPm1fY29sb3I7Ci0gICAgICAgICAgICAgICAg
ICAgIHNoYWRvd0NvbG9yLnNldEFscGhhRihzaGFkb3dDb2xvci5hbHBoYUYoKSAqIHAtPmJydXNo
KCkuY29sb3IoKS5hbHBoYUYoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXIt
PmZpbGxQYXRoKHBsYXRmb3JtUGF0aCwgc2hhZG93Q29sb3IpOworICAgICAgICAgICAgICAgICAg
ICBRQ29sb3Igc2hhZG93Q29sb3IgPSBtX3N0YXRlLnNoYWRvd0NvbG9yOworICAgICAgICAgICAg
ICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIHAtPmJydXNoKCku
Y29sb3IoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNoYWRvdy0+ZW5k
U2hhZG93TGF5ZXIodGhpcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBRUG9pbnRGIG9mZnNldCA9IHNoYWRvdy0+b2Zmc2V0KCk7CisgICAgICAgICAgICBR
UG9pbnRGIG9mZnNldChtX3N0YXRlLnNoYWRvd09mZnNldC53aWR0aCgpLCBtX3N0YXRlLnNoYWRv
d09mZnNldC5oZWlnaHQoKSk7CiAgICAgICAgICAgICBwLT50cmFuc2xhdGUob2Zmc2V0KTsKLSAg
ICAgICAgICAgIFFDb2xvciBzaGFkb3dDb2xvciA9IHNoYWRvdy0+bV9jb2xvcjsKKyAgICAgICAg
ICAgIFFDb2xvciBzaGFkb3dDb2xvciA9IG1fc3RhdGUuc2hhZG93Q29sb3I7CiAgICAgICAgICAg
ICBzaGFkb3dDb2xvci5zZXRBbHBoYUYoc2hhZG93Q29sb3IuYWxwaGFGKCkgKiBwLT5icnVzaCgp
LmNvbG9yKCkuYWxwaGFGKCkpOwogICAgICAgICAgICAgcC0+ZmlsbFBhdGgocGxhdGZvcm1QYXRo
LCBzaGFkb3dDb2xvcik7CiAgICAgICAgICAgICBwLT50cmFuc2xhdGUoLW9mZnNldCk7CkBAIC01
NDcsOCArNTQ0LDggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKICAgICBwbGF0Zm9ybVBhdGguc2V0RmlsbFJ1bGUodG9RdEZpbGxSdWxlKGZpbGxS
dWxlKCkpKTsKIAogICAgIGlmIChoYXNTaGFkb3coKSkgewotICAgICAgICBDb250ZXh0U2hhZG93
KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7Ci0gICAgICAgIGlmIChzaGFkb3ctPm11c3RVc2VD
b250ZXh0U2hhZG93KHRoaXMpIHx8IG1fc3RhdGUuc3Ryb2tlUGF0dGVybiB8fCBtX3N0YXRlLnN0
cm9rZUdyYWRpZW50KQorICAgICAgICBTaGFkb3dCbHVyKiBzaGFkb3cgPSBzaGFkb3dCbHVyKCk7
CisgICAgICAgIGlmIChzaGFkb3ctPm11c3RVc2VTaGFkb3dCbHVyKHRoaXMpIHx8IG1fc3RhdGUu
c3Ryb2tlUGF0dGVybiB8fCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50KQogICAgICAgICB7CiAgICAg
ICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcGxhdGZvcm1QYXRoLmNvbnRyb2xQb2lu
dFJlY3QoKTsKICAgICAgICAgICAgIGJvdW5kaW5nUmVjdC5pbmZsYXRlKHBlbi5taXRlckxpbWl0
KCkgKyBwZW4ud2lkdGhGKCkpOwpAQCAtNTU5LDE4ICs1NTYsMTYgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICAgICAgICAgICAgICAgICAg
YnJ1c2guc2V0VHJhbnNmb3JtKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmdyYWRpZW50U3BhY2VU
cmFuc2Zvcm0oKSk7CiAgICAgICAgICAgICAgICAgICAgIFFQZW4gc2hhZG93UGVuKHBlbik7CiAg
ICAgICAgICAgICAgICAgICAgIHNoYWRvd1Blbi5zZXRCcnVzaChicnVzaCk7Ci0gICAgICAgICAg
ICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldE9wYWNpdHkoc3RhdGljX2Nhc3Q8cXJlYWw+KHNo
YWRvdy0+bV9jb2xvci5hbHBoYSgpKSAvIDI1NSk7CiAgICAgICAgICAgICAgICAgICAgIHNoYWRv
d1BhaW50ZXItPnN0cm9rZVBhdGgocGxhdGZvcm1QYXRoLCBzaGFkb3dQZW4pOwogICAgICAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldE9w
YWNpdHkoc3RhdGljX2Nhc3Q8cXJlYWw+KG1fZGF0YS0+c2hhZG93Lm1fY29sb3IuYWxwaGEoKSkg
LyAyNTUpOwogICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zdHJva2VQYXRoKHBs
YXRmb3JtUGF0aCwgcGVuKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc2hh
ZG93LT5lbmRTaGFkb3dMYXllcih0aGlzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIFFQb2ludEYgb2Zmc2V0ID0gc2hhZG93LT5vZmZzZXQoKTsKKyAgICAg
ICAgICAgIFFQb2ludEYgb2Zmc2V0KG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCksIG1fc3Rh
dGUuc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsKICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShvZmZz
ZXQpOwotICAgICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gc2hhZG93LT5tX2NvbG9yOwor
ICAgICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gbV9zdGF0ZS5zaGFkb3dDb2xvcjsKICAg
ICAgICAgICAgIHNoYWRvd0NvbG9yLnNldEFscGhhRihzaGFkb3dDb2xvci5hbHBoYUYoKSAqIHBl
bi5jb2xvcigpLmFscGhhRigpKTsKICAgICAgICAgICAgIFFQZW4gc2hhZG93UGVuKHBlbik7CiAg
ICAgICAgICAgICBzaGFkb3dQZW4uc2V0Q29sb3Ioc2hhZG93Q29sb3IpOwpAQCAtNjY4LDE1ICs2
NjMsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKIAogICAgIFFQYWludGVyKiBwID0gbV9kYXRhLT5wKCk7CiAgICAgUVJlY3RGIG5vcm1h
bGl6ZWRSZWN0ID0gcmVjdC5ub3JtYWxpemVkKCk7Ci0gICAgQ29udGV4dFNoYWRvdyogc2hhZG93
ID0gY29udGV4dFNoYWRvdygpOworICAgIFNoYWRvd0JsdXIqIHNoYWRvdyA9IHNoYWRvd0JsdXIo
KTsKIAogICAgIGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CiAgICAgICAgIFFQaXhtYXAqIGlt
YWdlID0gbV9zdGF0ZS5maWxsUGF0dGVybi0+dGlsZUltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3Vy
cmVudEZyYW1lKCk7CiAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gaGFzU2hhZG93
KCkgPyBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgbm9ybWFsaXplZFJlY3QpIDogMDsK
ICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKICAgICAgICAgICAgIGRyYXdSZXBlYXRQYXR0
ZXJuKHNoYWRvd1BhaW50ZXIsIGltYWdlLCBub3JtYWxpemVkUmVjdCwgbV9zdGF0ZS5maWxsUGF0
dGVybi0+cmVwZWF0WCgpLCBtX3N0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRZKCkpOwotICAgICAg
ICAgICAgc2hhZG93UGFpbnRlci0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3Np
dGlvbk1vZGVfU291cmNlSW4pOwotICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qo
bm9ybWFsaXplZFJlY3QsIHNoYWRvdy0+bV9jb2xvcik7CiAgICAgICAgICAgICBzaGFkb3ctPmVu
ZFNoYWRvd0xheWVyKHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIGRyYXdSZXBlYXRQYXR0ZXJu
KHAsIGltYWdlLCBub3JtYWxpemVkUmVjdCwgbV9zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0WCgp
LCBtX3N0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRZKCkpOwpAQCAtNjg2LDI2ICs2NzksMjMgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAg
ICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBoYXNTaGFkb3coKSA/IHNoYWRvdy0+YmVn
aW5TaGFkb3dMYXllcih0aGlzLCBub3JtYWxpemVkUmVjdCkgOiAwOwogICAgICAgICBpZiAoc2hh
ZG93UGFpbnRlcikgewogICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFs
aXplZFJlY3QsIGJydXNoKTsKLSAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldENvbXBvc2l0
aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZUluKTsKLSAgICAgICAgICAg
IHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBzaGFkb3ctPm1fY29sb3Ip
OwogICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcih0aGlzKTsKICAgICAgICAgfQog
ICAgICAgICBwLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwgYnJ1c2gpOwogICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewotICAgICAgICAgICAgaWYgKHNoYWRvdy0+bXVz
dFVzZUNvbnRleHRTaGFkb3codGhpcykpIHsKKyAgICAgICAgICAgIGlmIChzaGFkb3ctPm11c3RV
c2VTaGFkb3dCbHVyKHRoaXMpKSB7CiAgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1Bh
aW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgbm9ybWFsaXplZFJlY3QpOwog
ICAgICAgICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHNoYWRvd1BhaW50ZXItPnNldE9wYWNpdHkoc3RhdGljX2Nhc3Q8cXJlYWw+KHNoYWRvdy0+bV9j
b2xvci5hbHBoYSgpKSAvIDI1NSk7CiAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXIt
PmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBwLT5icnVzaCgpKTsKICAgICAgICAgICAgICAgICAg
ICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcih0aGlzKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFNvbGlkIHJlY3RhbmdsZSBmaWxs
IHdpdGggbm8gYmx1ciBzaGFkb3cgb3IgdHJhbnNmb3JtYXRpb25zIGFwcGxpZWQgY2FuIGJlIGRv
bmUKICAgICAgICAgICAgICAgICAvLyBmYXN0ZXIgd2l0aG91dCB1c2luZyB0aGUgc2hhZG93IGxh
eWVyIGF0IGFsbC4KLSAgICAgICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ct
Pm1fY29sb3I7CisgICAgICAgICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gbV9zdGF0ZS5z
aGFkb3dDb2xvcjsKICAgICAgICAgICAgICAgICBzaGFkb3dDb2xvci5zZXRBbHBoYUYoc2hhZG93
Q29sb3IuYWxwaGFGKCkgKiBwLT5icnVzaCgpLmNvbG9yKCkuYWxwaGFGKCkpOwotICAgICAgICAg
ICAgICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LnRyYW5zbGF0ZWQoc2hhZG93LT5vZmZz
ZXQoKSksIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgICAgICBwLT5maWxsUmVjdChub3JtYWxp
emVkUmVjdC50cmFuc2xhdGVkKFFQb2ludEYobV9zdGF0ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSwg
bV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpKSwgc2hhZG93Q29sb3IpOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAKQEAgLTcyNCwxNiArNzE0LDE5IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwg
Q29sb3JTCiAgICAgUVJlY3RGIG5vcm1hbGl6ZWRSZWN0ID0gcmVjdC5ub3JtYWxpemVkKCk7CiAK
ICAgICBpZiAoaGFzU2hhZG93KCkpIHsKLSAgICAgICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0g
Y29udGV4dFNoYWRvdygpOwotICAgICAgICBpZiAoc2hhZG93LT5tdXN0VXNlQ29udGV4dFNoYWRv
dyh0aGlzKSkgeworICAgICAgICBTaGFkb3dCbHVyKiBzaGFkb3cgPSBzaGFkb3dCbHVyKCk7Cisg
ICAgICAgIGlmIChzaGFkb3ctPm11c3RVc2VTaGFkb3dCbHVyKHRoaXMpKSB7CiAgICAgICAgICAg
ICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlz
LCBub3JtYWxpemVkUmVjdCk7CiAgICAgICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewogICAg
ICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6
Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7Ci0gICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+
ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIHNoYWRvdy0+bV9jb2xvcik7CisgICAgICAgICAgICAg
ICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIG1fc3RhdGUuc2hhZG93
Q29sb3IpOwogICAgICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIodGhpcyk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcC0+ZmlsbFJlY3Qobm9y
bWFsaXplZFJlY3QudHJhbnNsYXRlZChzaGFkb3ctPm9mZnNldCgpKSwgc2hhZG93LT5tX2NvbG9y
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFFDb2xvciBzaGFkb3dDb2xvciA9IG1f
c3RhdGUuc2hhZG93Q29sb3I7CisgICAgICAgICAgICBzaGFkb3dDb2xvci5zZXRBbHBoYUYoc2hh
ZG93Q29sb3IuYWxwaGFGKCkgKiBwLT5icnVzaCgpLmNvbG9yKCkuYWxwaGFGKCkpOworICAgICAg
ICAgICAgcC0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QudHJhbnNsYXRlZChRUG9pbnRGKG1fc3Rh
dGUuc2hhZG93T2Zmc2V0LndpZHRoKCksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LmhlaWdodCgpKSks
IHNoYWRvd0NvbG9yKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHAtPmZpbGxSZWN0KG5vcm1h
bGl6ZWRSZWN0LCBtX2RhdGEtPnNvbGlkQ29sb3IpOwpAQCAtNzQ4LDE4ICs3NDEsMTkgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBj
b25zdCBJbnRTaXplJiB0b3BMZWYKICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QsIHRvcExl
ZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCk7CiAgICAgUVBhaW50ZXIqIHAg
PSBtX2RhdGEtPnAoKTsKICAgICBpZiAoaGFzU2hhZG93KCkpIHsKLSAgICAgICAgQ29udGV4dFNo
YWRvdyogc2hhZG93ID0gY29udGV4dFNoYWRvdygpOwotICAgICAgICBpZiAoc2hhZG93LT5tdXN0
VXNlQ29udGV4dFNoYWRvdyh0aGlzKSkgeworICAgICAgICBTaGFkb3dCbHVyKiBzaGFkb3cgPSBz
aGFkb3dCbHVyKCk7CisgICAgICAgIGlmIChzaGFkb3ctPm11c3RVc2VTaGFkb3dCbHVyKHRoaXMp
KSB7CiAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5T
aGFkb3dMYXllcih0aGlzLCByZWN0KTsKICAgICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7
CiAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWlu
dGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKLSAgICAgICAgICAgICAgICBzaGFkb3dQYWlu
dGVyLT5maWxsUGF0aChwYXRoLnBsYXRmb3JtUGF0aCgpLCBRQ29sb3IobV9kYXRhLT5zaGFkb3cu
bV9jb2xvcikpOworICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxQYXRoKHBhdGgu
cGxhdGZvcm1QYXRoKCksIFFDb2xvcihtX3N0YXRlLnNoYWRvd0NvbG9yKSk7CiAgICAgICAgICAg
ICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcih0aGlzKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShtX2RhdGEtPnNoYWRvdy5vZmZz
ZXQoKSk7Ci0gICAgICAgICAgICBwLT5maWxsUGF0aChwYXRoLnBsYXRmb3JtUGF0aCgpLCBRQ29s
b3IobV9kYXRhLT5zaGFkb3cubV9jb2xvcikpOwotICAgICAgICAgICAgcC0+dHJhbnNsYXRlKC1t
X2RhdGEtPnNoYWRvdy5vZmZzZXQoKSk7CisgICAgICAgICAgICBjb25zdCBRUG9pbnRGIHNoYWRv
d09mZnNldChtX3N0YXRlLnNoYWRvd09mZnNldC53aWR0aCgpLCBtX3N0YXRlLnNoYWRvd09mZnNl
dC5oZWlnaHQoKSk7CisgICAgICAgICAgICBwLT50cmFuc2xhdGUoc2hhZG93T2Zmc2V0KTsKKyAg
ICAgICAgICAgIHAtPmZpbGxQYXRoKHBhdGgucGxhdGZvcm1QYXRoKCksIFFDb2xvcihtX3N0YXRl
LnNoYWRvd0NvbG9yKSk7CisgICAgICAgICAgICBwLT50cmFuc2xhdGUoLXNoYWRvd09mZnNldCk7
CiAgICAgICAgIH0KICAgICB9CiAgICAgcC0+ZmlsbFBhdGgocGF0aC5wbGF0Zm9ybVBhdGgoKSwg
UUNvbG9yKGNvbG9yKSk7CkBAIC03NzAsNyArNzY0LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQ6
OmluVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdAogICAgIHJldHVybiBtX2RhdGEtPmxheWVyQ291
bnQ7CiB9CiAKLUNvbnRleHRTaGFkb3cqIEdyYXBoaWNzQ29udGV4dDo6Y29udGV4dFNoYWRvdygp
CitTaGFkb3dCbHVyKiBHcmFwaGljc0NvbnRleHQ6OnNoYWRvd0JsdXIoKQogewogICAgIHJldHVy
biAmbV9kYXRhLT5zaGFkb3c7CiB9CkBAIC03OTAsNiArNzg0LDE4IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIAogICAgIG1fZGF0YS0+cCgpLT5z
ZXRDbGlwUmVjdChyZWN0LCBRdDo6SW50ZXJzZWN0Q2xpcCk7CiB9CitJbnRSZWN0IEdyYXBoaWNz
Q29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0Cit7CisgICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEt
PnAoKTsKKyAgICBRUmVjdEYgY2xpcFJlY3Q7CisKKyAgICBpZiAocC0+aGFzQ2xpcHBpbmcoKSkK
KyAgICAgICAgY2xpcFJlY3QgPSBtX2RhdGEtPmNsaXBCb3VuZGluZ1JlY3QoKTsKKyAgICBlbHNl
CisgICAgICAgIGNsaXBSZWN0ID0gcC0+dHJhbnNmb3JtKCkuaW52ZXJ0ZWQoKS5tYXBSZWN0KHAt
PndpbmRvdygpKTsKKworICAgIHJldHVybiBJbnRSZWN0KGNsaXBSZWN0LngoKSwgY2xpcFJlY3Qu
eSgpLCBjbGlwUmVjdC53aWR0aCgpLCBjbGlwUmVjdC5oZWlnaHQoKSk7Cit9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVs
ZSkKIHsKQEAgLTkyNiw3ICs5MzIsNyBAQCBGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3Vu
ZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgZnJlY3QsIFJvdW5kaW5nTQogICAgIHJl
dHVybiBGbG9hdFJlY3Qocm91bmRlZE9yaWdpbiwgcm91bmRlZExvd2VyUmlnaHQgLSByb3VuZGVk
T3JpZ2luKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNv
bnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xv
clNwYWNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNl
IGNvbG9yU3BhY2UpCiB7CiAgICAgLy8gUXQgZG9lc24ndCBzdXBwb3J0IHNoYWRvd3MgbmF0aXZl
bHksIHRoZXkgYXJlIGRyYXduIG1hbnVhbGx5IGluIHRoZSBkcmF3KgogICAgIC8vIGZ1bmN0aW9u
cwpAQCAtOTM1LDEwICs5NDEsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
aGFkb3coY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCBibHVyLCBjb25zdAogICAgICAgICAv
LyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBh
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQKICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNp
bmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKICAgICAgICAgbV9z
dGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQo
KSk7Ci0gICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRvdyhjb2xvciwgYmx1ciwg
RmxvYXRTaXplKHNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpKTsKLSAgICB9IGVsc2UKLSAg
ICAgICAgbV9kYXRhLT5zaGFkb3cgPSBDb250ZXh0U2hhZG93KGNvbG9yLCBibHVyLCBGbG9hdFNp
emUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CisgICAgfQogCisgICAgbV9kYXRhLT5z
aGFkb3cgPSBTaGFkb3dCbHVyKEZsb2F0U2l6ZShtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUu
c2hhZG93Qmx1ciksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBjb2xvciwgY29sb3JTcGFjZSk7CiAg
ICAgbV9kYXRhLT5zaGFkb3cuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0ZS5zaGFk
b3dzSWdub3JlVHJhbnNmb3Jtcyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKaW5kZXggMGM4Y2U5ZS4uNGEyYmVmMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKQEAgLTM0LDEx
ICszNCwxMSBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQml0
bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJDb250ZXh0U2hhZG93LmgiCiAjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNl
cnZlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1
ci5oIgogI2luY2x1ZGUgIlN0aWxsSW1hZ2VRdC5oIgogI2luY2x1ZGUgInF3ZWJzZXR0aW5ncy5o
IgogCkBAIC0yMjQsMTEgKzIyNCwxMCBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNz
Q29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsCiAgICAgQ29tcG9zaXRlT3BlcmF0
b3IgcHJldmlvdXNPcGVyYXRvciA9IGN0eHQtPmNvbXBvc2l0ZU9wZXJhdGlvbigpOwogICAgIGN0
eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbighaW1hZ2UtPmhhc0FscGhhKCkgJiYgb3AgPT0gQ29t
cG9zaXRlU291cmNlT3ZlciA/IENvbXBvc2l0ZUNvcHkgOiBvcCk7CiAKLSAgICBDb250ZXh0U2hh
ZG93KiBzaGFkb3cgPSBjdHh0LT5jb250ZXh0U2hhZG93KCk7Ci0gICAgaWYgKHNoYWRvdy0+bV90
eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KSB7CisgICAgaWYgKGN0eHQtPmhhc1NoYWRv
dygpKSB7CisgICAgICAgIFNoYWRvd0JsdXIqIHNoYWRvdyA9IGN0eHQtPnNoYWRvd0JsdXIoKTsK
ICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5
ZXIoY3R4dCwgbm9ybWFsaXplZERzdCk7CiAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7Ci0g
ICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPihz
aGFkb3ctPm1fY29sb3IuYWxwaGEoKSkgLyAyNTUpOwogICAgICAgICAgICAgc2hhZG93UGFpbnRl
ci0+ZHJhd1BpeG1hcChub3JtYWxpemVkRHN0LCAqaW1hZ2UsIG5vcm1hbGl6ZWRTcmMpOwogICAg
ICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcihjdHh0KTsKICAgICAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAK
aW5kZXggM2IwODk5NS4uZmJiZTJkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwCkBAIC0yOCw5ICsyOCw5IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3RpbGxJbWFnZVF0LmgiCiAKLSNpbmNsdWRlICJD
b250ZXh0U2hhZG93LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SW50U2l6ZS5oIgorI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKIAogI2luY2x1ZGUgPFFQYWludGVy
PgogCkBAIC03NCwxMSArNzQsMTAgQEAgdm9pZCBTdGlsbEltYWdlOjpkcmF3KEdyYXBoaWNzQ29u
dGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsCiAgICAgQ29tcG9zaXRlT3BlcmF0b3Ig
cHJldmlvdXNPcGVyYXRvciA9IGN0eHQtPmNvbXBvc2l0ZU9wZXJhdGlvbigpOwogICAgIGN0eHQt
PnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7CiAKLSAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cg
PSBjdHh0LT5jb250ZXh0U2hhZG93KCk7Ci0gICAgaWYgKHNoYWRvdy0+bV90eXBlICE9IENvbnRl
eHRTaGFkb3c6Ok5vU2hhZG93KSB7CisgICAgaWYgKGN0eHQtPmhhc1NoYWRvdygpKSB7CisgICAg
ICAgIFNoYWRvd0JsdXIqIHNoYWRvdyA9IGN0eHQtPnNoYWRvd0JsdXIoKTsKICAgICAgICAgUVBh
aW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4dCwgbm9y
bWFsaXplZERzdCk7CiAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7Ci0gICAgICAgICAgICBz
aGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPihzaGFkb3ctPm1fY29s
b3IuYWxwaGEoKSkgLyAyNTUpOwogICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZHJhd1BpeG1h
cChub3JtYWxpemVkRHN0LCAqbV9waXhtYXAsIG5vcm1hbGl6ZWRTcmMpOwogICAgICAgICAgICAg
c2hhZG93LT5lbmRTaGFkb3dMYXllcihjdHh0KTsKICAgICAgICAgfQotLSAKMS43LjQuMQoK
</data>
<flag name="commit-queue"
          id="92882"
          type_id="3"
          status="-"
          setter="gustavo.noronha"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98640</attachid>
            <date>2011-06-26 15:32:23 -0700</date>
            <delta_ts>2011-06-27 05:39:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Qt-Add-ShadowBlur-support.patch</filename>
            <type>text/plain</type>
            <size>42912</size>
            <attacher name="Igor Trindade Oliveira">igor.oliveira</attacher>
            
              <data encoding="base64">RnJvbSA4MmE2NzE3ODNhZGE3ZTI1YzFjN2JiMjM2Zjk2ZjhkZjc1NzdiMTgzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBJZ29yIE9saXZlaXJhIDxpZ29yLm9saXZlaXJhQG9wZW5ib3Nz
YS5vcmc+CkRhdGU6IFN1biwgMjYgSnVuIDIwMTEgMTA6MTk6MzYgLTA0MDAKU3ViamVjdDogW1BB
VENIXSBbUXRdIEFkZCBTaGFkb3dCbHVyIHN1cHBvcnQKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQwICsrKysrCiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnBybyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KIC4uLi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgIHwgICAgMiArLQog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggfCAgICA3
ICstCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCAgICB8
ICAgNjYgKysrKysrKysKIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0Js
dXIuaCAgICAgIHwgICAyMSArKy0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hh
ZG93UXQuY3BwICAgICAgIHwgIDE2OCAtLS0tLS0tLS0tLS0tLS0tLS0tLQogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcCAgICAgfCAgIDgyICsrKysrLS0tLS0K
IC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAgICAgIHwgIDEy
OCArKysrKysrKy0tLS0tLS0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0lt
YWdlUXQuY3BwICAgIHwgICAxMiArLQogLi4uL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
U3RpbGxJbWFnZVF0LmNwcCAgfCAgIDEyICstCiAxMSBmaWxlcyBjaGFuZ2VkLCAyNTYgaW5zZXJ0
aW9ucygrKSwgMjg3IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3dRdC5jcHAKCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggYzk0YmM1YS4uOWFlZmI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDExLTA2
LTI2ICBJZ29yIE9saXZlaXJhICA8aWdvci5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gQWRkIFNoYWRv
d0JsdXIgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjI5OTcKKworICAgICAgICBVc2UgU2hhZG93Qmx1ciBpbnN0ZWFkIG9mIENvbnRleHRT
aGFkb3cgdG8gaGFuZGxlIGNhbnZhcyBhbmQgY3NzIHNoYWRvd3MuIFNoYWRvd0JsdXIgaXMKKyAg
ICAgICAgYSBuZXdlciBhbmQgcGxhdGZvcm0gaW5kZXBlbmRlbnQgc2hhZG93IGltcGxlbWVudGF0
aW9uLgorCisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OlNoYWRvd0JsdXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhZG93Qmx1cjo6bXVzdFVzZVNoYWRvd0JsdXIpOgorICAgICAgICAoV2ViQ29y
ZTo6U2hhZG93Qmx1cjo6Y2xlYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6Ymx1
ckFuZENvbG9yU2hhZG93QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJl
Z2luU2hhZG93TGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6ZW5kU2hhZG93
TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OnR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3F0L0NvbnRleHRTaGFkb3dRdC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvRm9udFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdUZXh0Q29tbW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3Vu
ZGVkUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd0JsdXIp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3cpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwSW1hZ2U6OmRyYXcpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxs
SW1hZ2VRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdGlsbEltYWdlOjpkcmF3KToKKwogMjAx
MS0wNi0yNSAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnBybyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGFlMWU2ODAuLmI4
ZGNjY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC05ODAsNyArOTgwLDcgQEAgU09VUkNFUyArPSBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbWlseS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0JpdG1hcEltYWdlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIFwK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmNwcCBcCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9p
bnQzRC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwIFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFF1YWQuY3BwIFwKQEAgLTE5NDIsNyArMTk0Miw3IEBAIEhF
QURFUlMgKz0gXAogICAgIHBsYXRmb3JtL21vY2svU3BlZWNoSW5wdXRDbGllbnRNb2NrLmggXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmggXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmggXAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuaCBcCisg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQmxlbmQuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNv
bG9yTWF0cml4LmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRU
cmFuc2Zlci5oIFwKQEAgLTI1MjEsNyArMjUyMSw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHBhZ2Uv
cXQvRnJhbWVRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zZm9ybWF0aW9u
TWF0cml4UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Db2xvclF0LmNwcCBcCi0g
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvd1F0LmNwcCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9u
dFBsYXRmb3JtRGF0YVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRmxvYXRQb2lu
dFF0LmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcAppbmRleCAzYjc3YjlmLi5mM2Y5OWU0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTU4
NSw3ICs1ODUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1h
Z2VCdWZmZXIqIGJ1ZmZlciwgY29uc3QgRmxvYXRSZWN0JiByZQogICAgIGJ1ZmZlci0+Y2xpcCh0
aGlzLCByZWN0KTsKIH0KIAotI2lmICFVU0UoQ0cpCisjaWYgIVVTRShDRykgJiYgIVBMQVRGT1JN
KFFUKQogSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAogewogICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCA0OWRlNDFmLi5lZTBhZTcyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApA
QCAtNTQsNiArNTQsNyBAQCB0eXBlZGVmIGNsYXNzIFdlYkNvcmU6OlN1cmZhY2VPcGVuVkcgUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQ7CiAjaW5jbHVkZSA8UVBhaW50ZXI+CiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBDb250ZXh0U2hhZG93OworY2xhc3MgU2hhZG93Qmx1cjsKIH0KIHR5cGVk
ZWYgUVBhaW50ZXIgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7CiAjZWxpZiBQTEFURk9STShXWCkK
QEAgLTQ4NSwxMCArNDg2LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB0
YWtlT3duZXJzaGlwT2ZQbGF0Zm9ybUNvbnRleHQoKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0o
UVQpIHx8IFVTRShDQUlSTykKKyNpZiBVU0UoQ0FJUk8pCiAgICAgICAgIENvbnRleHRTaGFkb3cq
IGNvbnRleHRTaGFkb3coKTsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oUVQpCisgICAgICAgIFNo
YWRvd0JsdXIqIHNoYWRvd0JsdXIoKTsKKyNlbmRpZgorCiAjaWYgVVNFKENBSVJPKQogICAgICAg
ICBHcmFwaGljc0NvbnRleHQoY2Fpcm9fdCopOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCmluZGV4IDI1ZmM5YWEuLjlhNzllMGQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3Bw
CkBAIC0xOTIsNiArMTkyLDE0IEBAIFNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgRmxvYXRT
aXplJiByYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25zdCBDCiAgICAgfSBlbHNl
CiAgICAgICAgIG1fdHlwZSA9IFNvbGlkU2hhZG93OwogfQorU2hhZG93Qmx1cjo6U2hhZG93Qmx1
cigpCisgICAgOiBtX3R5cGUoTm9TaGFkb3cpCisgICAgLCBtX2JsdXJSYWRpdXMoMCwgMCkKKyAg
ICAsIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoZmFsc2UpCit7Cit9CisKKwogCiAvLyBJbnN0
ZWFkIG9mIGludGVnZXIgZGl2aXNpb24sIHdlIHVzZSAxNy4xNSBmb3IgZml4ZWQtcG9pbnQgZGl2
aXNpb24uCiBzdGF0aWMgY29uc3QgaW50IGJsdXJTdW1TaGlmdCA9IDE1OwpAQCAtMjM3LDYgKzI0
NSwzMCBAQCBzdGF0aWMgdm9pZCBjYWxjdWxhdGVMb2JlcyhpbnQgbG9iZXNbXVsyXSwgZmxvYXQg
Ymx1clJhZGl1cywgYm9vbCBzaGFkb3dzSWdub3JlVAogICAgIH0KIH0KIAorYm9vbCBTaGFkb3dC
bHVyOjptdXN0VXNlU2hhZG93Qmx1cihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAg
Ly8gV2UgY2FuJ3QgYXZvaWQgU2hhZG93Qmx1ciwgc2luY2UgdGhlIHNoYWRvdyBoYXMgYmx1ci4K
KyAgICBpZiAobV90eXBlID09IFNoYWRvd0JsdXI6OkJsdXJTaGFkb3cpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIC8vIFdlIGNhbiBhdm9pZCBTaGFkb3dCbHVyIGFuZCBvcHRpbWl6ZSwgc2lu
Y2Ugd2UncmUgbm90IGRyYXdpbmcgb24gYQorICAgIC8vIGNhbnZhcyBhbmQgYm94IHNoYWRvd3Mg
YXJlIGFmZmVjdGVkIGJ5IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguCisgICAgaWYgKCFzaGFk
b3dzSWdub3JlVHJhbnNmb3JtcygpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gV2Ug
Y2FuIGF2b2lkIFNoYWRvd0JsdXIsIHNpbmNlIHRoZXJlIGFyZSBubyB0cmFuc2Zvcm1hdGlvbnMg
dG8gYXBwbHkgdG8gdGhlIGNhbnZhcy4KKyAgICBpZiAoY29udGV4dC0+Z2V0Q1RNKCkuaXNJZGVu
dGl0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gT3RoZXJ3aXNlLCBubyBjaGFu
Y2UgYXZvaWRpbmcgU2hhZG93Qmx1ci4KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBTaGFk
b3dCbHVyOjpjbGVhcigpCit7CisgICAgbV90eXBlID0gTm9TaGFkb3c7CisgICAgbV9jb2xvciA9
IENvbG9yKCk7CisgICAgbV9ibHVyUmFkaXVzID0gRmxvYXRTaXplKCk7CisgICAgbV9vZmZzZXQg
PSBGbG9hdFNpemUoKTsKK30KKwogdm9pZCBTaGFkb3dCbHVyOjpibHVyTGF5ZXJJbWFnZSh1bnNp
Z25lZCBjaGFyKiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUmIHNpemUsIGludCByb3dTdHJpZGUp
CiB7CiAgICAgY29uc3QgaW50IGNoYW5uZWxzWzRdID0geyAzLCAwLCAxLCAzIH07CkBAIC04Mjgs
OSArODYwLDQzIEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckFuZENvbG9yU2hhZG93QnVmZmVyKGNv
bnN0IEludFNpemUmIHRlbXBsYXRlU2l6ZSkKIAogICAgIC8vIE1hc2sgdGhlIGltYWdlIHdpdGgg
dGhlIHNoYWRvdyBjb2xvci4KICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBt
X2xheWVySW1hZ2UtPmNvbnRleHQoKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoKnNoYWRvd0NvbnRleHQpOwogICAgIHNoYWRvd0NvbnRleHQtPnNldENvbXBvc2l0
ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VJbik7CiAgICAgc2hhZG93Q29udGV4dC0+c2V0Rmls
bENvbG9yKG1fY29sb3IsIG1fY29sb3JTcGFjZSk7CiAgICAgc2hhZG93Q29udGV4dC0+ZmlsbFJl
Y3QoRmxvYXRSZWN0KDAsIDAsIHRlbXBsYXRlU2l6ZS53aWR0aCgpLCB0ZW1wbGF0ZVNpemUuaGVp
Z2h0KCkpKTsKIH0KIAorR3JhcGhpY3NDb250ZXh0KiBTaGFkb3dCbHVyOjpiZWdpblNoYWRvd0xh
eWVyKEdyYXBoaWNzQ29udGV4dCAqY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBsYXllckFyZWEp
Cit7CisgICAgYWRqdXN0Qmx1clJhZGl1cyhjb250ZXh0KTsKKworICAgIEludFJlY3QgbGF5ZXJS
ZWN0ID0gY2FsY3VsYXRlTGF5ZXJCb3VuZGluZ1JlY3QoY29udGV4dCwgbGF5ZXJBcmVhLCBjb250
ZXh0LT5jbGlwQm91bmRzKCkpOworCisgICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgbV9sYXllckltYWdlID0gU2NyYXRjaEJ1ZmZlcjo6c2hhcmVk
KCkuZ2V0U2NyYXRjaEJ1ZmZlcihsYXllclJlY3Quc2l6ZSgpKTsKKworICAgIEdyYXBoaWNzQ29u
dGV4dCogc2hhZG93Q29udGV4dCA9IG1fbGF5ZXJJbWFnZS0+Y29udGV4dCgpOworICAgIHNoYWRv
d0NvbnRleHQtPnNhdmUoKTsKKyAgICBzaGFkb3dDb250ZXh0LT5jbGVhclJlY3QoRmxvYXRSZWN0
KDAsIDAsIG1fbGF5ZXJTaXplLndpZHRoKCksIG1fbGF5ZXJTaXplLmhlaWdodCgpKSk7CisKKyAg
ICBzaGFkb3dDb250ZXh0LT50cmFuc2xhdGUobV9sYXllckNvbnRleHRUcmFuc2xhdGlvbik7Cisg
ICAgcmV0dXJuIHNoYWRvd0NvbnRleHQ7Cit9CisKK3ZvaWQgU2hhZG93Qmx1cjo6ZW5kU2hhZG93
TGF5ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQoreworICAgIG1fbGF5ZXJJbWFnZS0+Y29u
dGV4dCgpLT5yZXN0b3JlKCk7CisKKyAgICBibHVyQW5kQ29sb3JTaGFkb3dCdWZmZXIoZXhwYW5k
ZWRJbnRTaXplKG1fbGF5ZXJTaXplKSk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmUoKmNvbnRleHQpOworCisgICAgY29udGV4dC0+Y2xlYXJTaGFkb3coKTsKKyAgICBj
b250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9sYXllckltYWdlLCBDb2xvclNwYWNlRGV2aWNlUkdC
LCByb3VuZGVkSW50UG9pbnQobV9sYXllck9yaWdpbiksIEludFJlY3QoMCwgMCwgbV9sYXllclNp
emUud2lkdGgoKSwgbV9sYXllclNpemUuaGVpZ2h0KCkpLCBjb250ZXh0LT5jb21wb3NpdGVPcGVy
YXRpb24oKSk7CisKKyAgICBtX2xheWVySW1hZ2UgPSAwOworICAgIFNjcmF0Y2hCdWZmZXI6OnNo
YXJlZCgpLnNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIu
aAppbmRleCAyMDJmZjNkLi40MWJhNjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5oCkBAIC00MiwxOCArNDIsMzIgQEAgY2xhc3MgR3JhcGhpY3ND
b250ZXh0OwogY2xhc3MgSW1hZ2VCdWZmZXI7CiAKIGNsYXNzIFNoYWRvd0JsdXIgewotICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFNoYWRvd0JsdXIpOwogcHVibGljOgorICAgIGVudW0gU2hhZG93
VHlwZSB7CisgICAgICAgIE5vU2hhZG93LAorICAgICAgICBTb2xpZFNoYWRvdywKKyAgICAgICAg
Qmx1clNoYWRvdworICAgIH07CisKICAgICBTaGFkb3dCbHVyKGNvbnN0IEZsb2F0U2l6ZSYgcmFk
aXVzLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsK
KyAgICBTaGFkb3dCbHVyKCk7CiAKICAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KGJvb2wgaWdub3JlVHJhbnNmb3JtcykgeyBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gaWdu
b3JlVHJhbnNmb3JtczsgfQogICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSBjb25z
dCB7IHJldHVybiBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyB9CiAKKyAgICBHcmFwaGljc0Nv
bnRleHQqIGJlZ2luU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0
JiBsYXllckFyZWEpOworICAgIHZvaWQgZW5kU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0Kik7
CisKICAgICB2b2lkIGRyYXdSZWN0U2hhZG93KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IFJvdW5kZWRJbnRSZWN0OjpSYWRpaSYpOwogICAgIHZvaWQgZHJhd0luc2V0
U2hhZG93KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYgaG9sZVJlY3QsIGNvbnN0IFJvdW5kZWRJbnRSZWN0OjpSYWRpaSYgaG9sZVJhZGlpKTsKIAog
ICAgIHZvaWQgYmx1ckxheWVySW1hZ2UodW5zaWduZWQgY2hhciosIGNvbnN0IEludFNpemUmLCBp
bnQgc3RyaWRlKTsKIAorICAgIGJvb2wgbXVzdFVzZVNoYWRvd0JsdXIoR3JhcGhpY3NDb250ZXh0
Kik7CisKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBTaGFkb3dUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3U2hhZG93QnVmZmVyKEdy
YXBoaWNzQ29udGV4dCopOwogCkBAIC04MCwxMSArOTQsNiBAQCBwcml2YXRlOgogICAgIAogICAg
IEludFNpemUgYmx1cnJlZEVkZ2VTaXplKCkgY29uc3Q7CiAgICAgCi0gICAgZW51bSBTaGFkb3dU
eXBlIHsKLSAgICAgICAgTm9TaGFkb3csCi0gICAgICAgIFNvbGlkU2hhZG93LAotICAgICAgICBC
bHVyU2hhZG93Ci0gICAgfTsKICAgICAKICAgICBTaGFkb3dUeXBlIG1fdHlwZTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvd1F0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3dR
dC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYjMxYTcuLjAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvd1F0LmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEwIFNlbmNoYSwgSW5jLgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvbnRleHRTaGFkb3cuaCIKLQotI2luY2x1ZGUg
IkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1
ZGUgPFFQYWludGVyPgotI2luY2x1ZGUgPFFUaW1lckV2ZW50PgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLS8vIENvbnRleHRTaGFkb3cgbmVlZHMgYSBzY3JhdGNoIGltYWdlIGFzIHRoZSBidWZm
ZXIgZm9yIHRoZSBibHVyIGZpbHRlci4KLS8vIEluc3RlYWQgb2YgY3JlYXRpbmcgYW5kIGRlc3Ry
b3lpbmcgdGhlIGJ1ZmZlciBmb3IgZXZlcnkgb3BlcmF0aW9uLAotLy8gd2UgY3JlYXRlIGEgYnVm
ZmVyIHdoaWNoIHdpbGwgYmUgYXV0b21hdGljYWxseSBwdXJnZWQgdmlhIGEgdGltZXIuCi0KLWNs
YXNzIFNoYWRvd0J1ZmZlcjogcHVibGljIFFPYmplY3QgewotcHVibGljOgotICAgIFNoYWRvd0J1
ZmZlcihRT2JqZWN0KiBwYXJlbnQgPSAwKTsKLQotICAgIFFJbWFnZSogc2NyYXRjaEltYWdlKGNv
bnN0IFFTaXplJiBzaXplKTsKLQotICAgIHZvaWQgc2NoZWR1bGVQdXJnZSgpOwotCi1wcm90ZWN0
ZWQ6Ci0gICAgdm9pZCB0aW1lckV2ZW50KFFUaW1lckV2ZW50KiBldmVudCk7Ci0KLXByaXZhdGU6
Ci0gICAgUUltYWdlIGltYWdlOwotICAgIGludCB0aW1lcklkOwotfTsKLQotU2hhZG93QnVmZmVy
OjpTaGFkb3dCdWZmZXIoUU9iamVjdCogcGFyZW50KQotICAgIDogUU9iamVjdChwYXJlbnQpCi0g
ICAgLCB0aW1lcklkKC0xKQotewotfQotCi1RSW1hZ2UqIFNoYWRvd0J1ZmZlcjo6c2NyYXRjaElt
YWdlKGNvbnN0IFFTaXplJiBzaXplKQotewotICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsK
LSAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKLQotICAgIC8vIFdlIGRvIG5vdCBuZWVk
IHRvIHJlY3JlYXRlIHRoZSBidWZmZXIgaWYgdGhlIGJ1ZmZlciBpcyByZWFzb25hYmx5Ci0gICAg
Ly8gbGFyZ2VyIHRoYW4gdGhlIHJlcXVlc3RlZCBzaXplLiBIb3dldmVyLCBpZiB0aGUgcmVxdWVz
dGVkIHNpemUgaXMKLSAgICAvLyBtdWNoIHNtYWxsZXIgdGhhbiBvdXIgYnVmZmVyLCByZWR1Y2Ug
b3VyIGJ1ZmZlciBzbyB0aGF0IHdlIHdpbGwgbm90Ci0gICAgLy8ga2VlcCB0b28gbWFueSBhbGxv
Y2F0ZWQgcGl4ZWxzIGZvciB0b28gbG9uZy4KLSAgICBpZiAoIWltYWdlLmlzTnVsbCgpICYmIChp
bWFnZS53aWR0aCgpID4gd2lkdGgpICYmIChpbWFnZS5oZWlnaHQoKSA+IGhlaWdodCkpCi0gICAg
ICAgIGlmICgoKDIgKiB3aWR0aCkgPiBpbWFnZS53aWR0aCgpKSAmJiAoKDIgKiBoZWlnaHQpID4g
aW1hZ2UuaGVpZ2h0KCkpKSB7Ci0gICAgICAgICAgICBpbWFnZS5maWxsKDApOwotICAgICAgICAg
ICAgcmV0dXJuICZpbWFnZTsKLSAgICAgICAgfQotCi0gICAgLy8gUm91bmQgdG8gdGhlIG5lYXJl
c3QgMzIgcGl4ZWxzIHNvIHdlIGRvIG5vdCBncm93IHRoZSBidWZmZXIgZXZlcnl0aW1lCi0gICAg
Ly8gdGhlcmUgaXMgbGFyZ2VyIHJlcXVlc3QgYnkgMSBwaXhlbC4KLSAgICB3aWR0aCA9ICgxICsg
KHdpZHRoID4+IDUpKSA8PCA1OwotICAgIGhlaWdodCA9ICgxICsgKGhlaWdodCA+PiA1KSkgPDwg
NTsKLQotICAgIGltYWdlID0gUUltYWdlKHdpZHRoLCBoZWlnaHQsIFFJbWFnZTo6Rm9ybWF0X0FS
R0IzMl9QcmVtdWx0aXBsaWVkKTsKLSAgICBpbWFnZS5maWxsKDApOwotICAgIHJldHVybiAmaW1h
Z2U7Ci19Ci0KLXZvaWQgU2hhZG93QnVmZmVyOjpzY2hlZHVsZVB1cmdlKCkKLXsKLSAgICBzdGF0
aWMgY29uc3QgZG91YmxlIEJ1ZmZlclB1cmdlRGVsYXkgPSAyOyAvLyBzZWNvbmRzCi0gICAgaWYg
KHRpbWVySWQgPj0gMCkKLSAgICAgICAga2lsbFRpbWVyKHRpbWVySWQpOwotICAgIHRpbWVySWQg
PSBzdGFydFRpbWVyKEJ1ZmZlclB1cmdlRGVsYXkgKiAxMDAwKTsKLX0KLQotdm9pZCBTaGFkb3dC
dWZmZXI6OnRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqIGV2ZW50KQotewotICAgIGlmIChldmVudC0+
dGltZXJJZCgpID09IHRpbWVySWQpIHsKLSAgICAgICAga2lsbFRpbWVyKHRpbWVySWQpOwotICAg
ICAgICBpbWFnZSA9IFFJbWFnZSgpOwotICAgIH0KLSAgICBRT2JqZWN0Ojp0aW1lckV2ZW50KGV2
ZW50KTsKLX0KLQotUV9HTE9CQUxfU1RBVElDKFNoYWRvd0J1ZmZlciwgc2NyYXRjaFNoYWRvd0J1
ZmZlcikKLQotUGxhdGZvcm1Db250ZXh0IENvbnRleHRTaGFkb3c6OmJlZ2luU2hhZG93TGF5ZXIo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGxheWVyQXJlYSkKLXsK
LSAgICAvLyBTZXQgbV9ibHVyRGlzdGFuY2UuCi0gICAgYWRqdXN0Qmx1ckRpc3RhbmNlKGNvbnRl
eHQpOwotCi0gICAgUGxhdGZvcm1Db250ZXh0IHAgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKLQotICAgIFFSZWN0IGNsaXBSZWN0OwotICAgIGlmIChwLT5oYXNDbGlwcGluZygpKQotI2lm
IFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA4LCAwKQotICAgICAgICBjbGlwUmVj
dCA9IHAtPmNsaXBCb3VuZGluZ1JlY3QoKS50b0FsaWduZWRSZWN0KCk7Ci0jZWxzZQotICAgICAg
ICBjbGlwUmVjdCA9IHAtPmNsaXBSZWdpb24oKS5ib3VuZGluZ1JlY3QoKTsKLSNlbmRpZgotICAg
IGVsc2UKLSAgICAgICAgY2xpcFJlY3QgPSBwLT50cmFuc2Zvcm0oKS5pbnZlcnRlZCgpLm1hcFJl
Y3QocC0+d2luZG93KCkpOwotCi0gICAgLy8gU2V0IG1fbGF5ZXJPcmlnaW4sIG1fbGF5ZXJDb250
ZXh0VHJhbnNsYXRpb24sIG1fc291cmNlUmVjdC4KLSAgICBJbnRSZWN0IGNsaXAoY2xpcFJlY3Qu
eCgpLCBjbGlwUmVjdC55KCksIGNsaXBSZWN0LndpZHRoKCksIGNsaXBSZWN0LmhlaWdodCgpKTsK
LSAgICBJbnRSZWN0IGxheWVyUmVjdCA9IGNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0KGNvbnRl
eHQsIGxheWVyQXJlYSwgY2xpcCk7Ci0KLSAgICAvLyBEb24ndCBwYWludCBpZiB3ZSBhcmUgdG90
YWxseSBvdXRzaWRlIHRoZSBjbGlwIHJlZ2lvbi4KLSAgICBpZiAobGF5ZXJSZWN0LmlzRW1wdHko
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBTaGFkb3dCdWZmZXIqIHNoYWRvd0J1ZmZlciA9
IHNjcmF0Y2hTaGFkb3dCdWZmZXIoKTsKLSAgICBRSW1hZ2UqIHNoYWRvd0ltYWdlID0gc2hhZG93
QnVmZmVyLT5zY3JhdGNoSW1hZ2UobGF5ZXJSZWN0LnNpemUoKSk7Ci0gICAgbV9sYXllckltYWdl
ID0gUUltYWdlKCpzaGFkb3dJbWFnZSk7Ci0KLSAgICBtX2xheWVyQ29udGV4dCA9IG5ldyBRUGFp
bnRlcjsKLSAgICBtX2xheWVyQ29udGV4dC0+YmVnaW4oJm1fbGF5ZXJJbWFnZSk7Ci0gICAgbV9s
YXllckNvbnRleHQtPnNldEZvbnQocC0+Zm9udCgpKTsKLSAgICBtX2xheWVyQ29udGV4dC0+dHJh
bnNsYXRlKG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb24pOwotICAgIHJldHVybiBtX2xheWVyQ29u
dGV4dDsKLX0KLQotdm9pZCBDb250ZXh0U2hhZG93OjplbmRTaGFkb3dMYXllcihHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQpCi17Ci0gICAgbV9sYXllckNvbnRleHQtPmVuZCgpOwotICAgIGRlbGV0
ZSBtX2xheWVyQ29udGV4dDsKLSAgICBtX2xheWVyQ29udGV4dCA9IDA7Ci0KLSAgICBpZiAobV90
eXBlID09IEJsdXJTaGFkb3cpIHsKLSAgICAgICAgYmx1ckxheWVySW1hZ2UobV9sYXllckltYWdl
LmJpdHMoKSwgSW50U2l6ZShtX2xheWVySW1hZ2Uud2lkdGgoKSwgbV9sYXllckltYWdlLmhlaWdo
dCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgbV9sYXllckltYWdlLmJ5dGVzUGVyTGluZSgp
KTsKLSAgICB9Ci0KLSAgICBpZiAobV90eXBlICE9IE5vU2hhZG93KSB7Ci0gICAgICAgIC8vICJD
b2xvcml6ZSIgd2l0aCB0aGUgcmlnaHQgc2hhZG93IGNvbG9yLgotICAgICAgICBRUGFpbnRlciBw
KCZtX2xheWVySW1hZ2UpOwotICAgICAgICBwLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6
Q29tcG9zaXRpb25Nb2RlX1NvdXJjZUluKTsKLSAgICAgICAgcC5maWxsUmVjdChtX2xheWVySW1h
Z2UucmVjdCgpLCBtX2NvbG9yLnJnYigpKTsKLSAgICAgICAgcC5lbmQoKTsKLSAgICB9Ci0KLSAg
ICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd0ltYWdlKG1fbGF5ZXJPcmlnaW4sIG1f
bGF5ZXJJbWFnZSwgbV9zb3VyY2VSZWN0KTsKLQotICAgIHNjcmF0Y2hTaGFkb3dCdWZmZXIoKS0+
c2NoZWR1bGVQdXJnZSgpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvRm9udFF0LmNwcAppbmRleCBhNWExNmUwLi4xY2QyY2NjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAKQEAgLTIzLDcgKzIzLDYg
QEAKICNpbmNsdWRlICJGb250LmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNp
bmNsdWRlICJDb250ZXh0U2hhZG93LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAj
aW5jbHVkZSAiRm9udEZhbGxiYWNrTGlzdC5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgpA
QCAtMzQsNiArMzMsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUg
Ik5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgorI2luY2x1ZGUgIlNoYWRv
d0JsdXIuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAKICNpbmNsdWRlIDxRQnJ1c2g+CkBAIC0x
NDIsNDAgKzE0Miw0MiBAQCBzdGF0aWMgdm9pZCBkcmF3VGV4dENvbW1vbihHcmFwaGljc0NvbnRl
eHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdAogICAgICAgICAgICAgUVJl
Y3RGIGJvdW5kaW5nUmVjdChwb2ludC54KCkgKyB4MSwgcG9pbnQueSgpIC0gYXNjZW50LCB4MiAt
IHgxLCBmbS5oZWlnaHQoKSk7CiAgICAgICAgICAgICBRUmVjdEYgY2xpcCA9IGJvdW5kaW5nUmVj
dDsKIAotICAgICAgICAgICAgQ29udGV4dFNoYWRvdyogY3R4U2hhZG93ID0gY3R4LT5jb250ZXh0
U2hhZG93KCk7Ci0KLSAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0
U2hhZG93OjpOb1NoYWRvdykgeworICAgICAgICAgICAgU2hhZG93Qmx1ciogY3R4U2hhZG93ID0g
Y3R4LT5zaGFkb3dCbHVyKCk7CisgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0g
U2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnRGIHNo
YWRvd09mZnNldChjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0eC0+c3RhdGUo
KS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIHFyZWFsIGR4MSA9IDAs
IGR4MiA9IDAsIGR5MSA9IDAsIGR5MiA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eFNoYWRv
dy0+b2Zmc2V0KCkueCgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgZHgyID0gY3R4U2hhZG93
LT5vZmZzZXQoKS54KCk7CisgICAgICAgICAgICAgICAgaWYgKHNoYWRvd09mZnNldC54KCkgPiAw
KQorICAgICAgICAgICAgICAgICAgICBkeDIgPSBzaGFkb3dPZmZzZXQueCgpOwogICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZHgxID0gLWN0eFNoYWRvdy0+b2Zmc2V0
KCkueCgpOwotICAgICAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPm9mZnNldCgpLnkoKSA+IDAp
Ci0gICAgICAgICAgICAgICAgICAgIGR5MiA9IGN0eFNoYWRvdy0+b2Zmc2V0KCkueSgpOworICAg
ICAgICAgICAgICAgICAgICBkeDEgPSAtc2hhZG93T2Zmc2V0LngoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoc2hhZG93T2Zmc2V0LnkoKSA+IDApCisgICAgICAgICAgICAgICAgICAgIGR5MiA9IHNo
YWRvd09mZnNldC55KCk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAg
ICBkeTEgPSAtY3R4U2hhZG93LT5vZmZzZXQoKS55KCk7CisgICAgICAgICAgICAgICAgICAgIGR5
MSA9IC1zaGFkb3dPZmZzZXQueSgpOwogICAgICAgICAgICAgICAgIC8vIGV4cGFuZCB0aGUgY2xp
cCByZWN0IHRvIGluY2x1ZGUgdGhlIHRleHQgc2hhZG93IGFzIHdlbGwKKyAgICAgICAgICAgICAg
ICBjb25zdCBmbG9hdCBibHVyRGlzdGFuY2UgPSBjdHgtPnN0YXRlKCkuc2hhZG93Qmx1cjsKICAg
ICAgICAgICAgICAgICBjbGlwLmFkanVzdChkeDEsIGR4MiwgZHkxLCBkeTIpOwotICAgICAgICAg
ICAgICAgIGNsaXAuYWRqdXN0KC1jdHhTaGFkb3ctPm1fYmx1ckRpc3RhbmNlLCAtY3R4U2hhZG93
LT5tX2JsdXJEaXN0YW5jZSwgY3R4U2hhZG93LT5tX2JsdXJEaXN0YW5jZSwgY3R4U2hhZG93LT5t
X2JsdXJEaXN0YW5jZSk7CisgICAgICAgICAgICAgICAgY2xpcC5hZGp1c3QoLWJsdXJEaXN0YW5j
ZSwgLWJsdXJEaXN0YW5jZSwgYmx1ckRpc3RhbmNlLCBibHVyRGlzdGFuY2UpOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgcC0+c2F2ZSgpOwogICAgICAgICAgICAgcC0+c2V0Q2xpcFJlY3Qo
Y2xpcC50b1JlY3QoKSwgUXQ6OkludGVyc2VjdENsaXApOwogICAgICAgICAgICAgcHQuc2V0WShw
dC55KCkgLSBhc2NlbnQpOwogCi0gICAgICAgICAgICBpZiAoY3R4U2hhZG93LT5tX3R5cGUgIT0g
Q29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpIHsKLSAgICAgICAgICAgICAgICBDb250ZXh0U2hhZG93
KiBjdHhTaGFkb3cgPSBjdHgtPmNvbnRleHRTaGFkb3coKTsKLSAgICAgICAgICAgICAgICBpZiAo
IWN0eFNoYWRvdy0+bXVzdFVzZUNvbnRleHRTaGFkb3coY3R4KSkgeworICAgICAgICAgICAgaWYg
KGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6Ok5vU2hhZG93KSB7CisgICAgICAgICAg
ICAgICAgU2hhZG93Qmx1ciogY3R4U2hhZG93ID0gY3R4LT5zaGFkb3dCbHVyKCk7CisgICAgICAg
ICAgICAgICAgaWYgKCFjdHhTaGFkb3ctPm11c3RVc2VTaGFkb3dCbHVyKGN0eCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgcC0+c2F2ZSgpOwotICAgICAgICAgICAgICAgICAgICBwLT5zZXRQZW4o
Y3R4U2hhZG93LT5tX2NvbG9yKTsKLSAgICAgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKGN0
eFNoYWRvdy0+b2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICBwLT5zZXRQZW4oY3R4LT5z
dGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKFFQ
b2ludEYoY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpLCBjdHgtPnN0YXRlKCkuc2hh
ZG93T2Zmc2V0LmhlaWdodCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGxpbmUuZHJhdyhwLCBw
dCk7CiAgICAgICAgICAgICAgICAgICAgIHAtPnJlc3RvcmUoKTsKICAgICAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IGN0
eFNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHgsIGJvdW5kaW5nUmVjdCk7Ci0gICAgICAgICAg
ICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CisgICAgICAgICAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IGN0eFNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihj
dHgsIGJvdW5kaW5nUmVjdCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaGFkb3dDb250ZXh0
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNo
YWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gU2luY2UgaXQgd2lsbCBiZSBibHVycmVkIGFueXdheSwgd2UgZG9uJ3QgY2FyZSBhYm91dCBy
ZW5kZXIgaGludHMuCiAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRG
b250KHAtPmZvbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5z
ZXRQZW4oY3R4U2hhZG93LT5tX2NvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRv
d1BhaW50ZXItPnNldFBlbihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgbGluZS5kcmF3KHNoYWRvd1BhaW50ZXIsIHB0KTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGN0eFNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY3R4KTsKICAgICAgICAgICAgICAg
ICAgICAgfQpAQCAtMjAxLDQwICsyMDMsNDMgQEAgc3RhdGljIHZvaWQgZHJhd1RleHRDb21tb24o
R3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXQKICAg
ICBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKQogICAgICAgICB0
ZXh0U3Ryb2tlUGF0aC5hZGRUZXh0KHB0LCBmb250LCBzdHJpbmcpOwogCi0gICAgQ29udGV4dFNo
YWRvdyogY3R4U2hhZG93ID0gY3R4LT5jb250ZXh0U2hhZG93KCk7Ci0gICAgaWYgKGN0eFNoYWRv
dy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KSB7CisgICAgU2hhZG93Qmx1ciog
Y3R4U2hhZG93ID0gY3R4LT5zaGFkb3dCbHVyKCk7CisgICAgaWYgKGN0eC0+aGFzU2hhZG93KCkg
JiYgY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsKICAgICAgICAg
aWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGwpIHsKLSAgICAgICAgICAg
IGlmIChjdHhTaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpCbHVyU2hhZG93KSB7Cisg
ICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Qmx1clNoYWRv
dykgewogICAgICAgICAgICAgICAgIHAtPnNhdmUoKTsKLSAgICAgICAgICAgICAgICBwLT5zZXRQ
ZW4oY3R4U2hhZG93LT5tX2NvbG9yKTsKLSAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoY3R4
U2hhZG93LT5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgcC0+c2V0UGVuKGN0eC0+c3RhdGUo
KS5zaGFkb3dDb2xvcik7CisgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKFFQb2ludEYoY3R4
LT5zdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpLCBjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0
LmhlaWdodCgpKSk7CiAgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQocHQsIHN0cmluZywgZmxh
Z3MsIHJ1bi5leHBhbnNpb24oKSk7CiAgICAgICAgICAgICAgICAgcC0+cmVzdG9yZSgpOwogICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBRRm9udE1ldHJpY3MgZm0oZm9udCk7
CiAgICAgICAgICAgICAgICAgUVJlY3RGIGJvdW5kaW5nUmVjdChwdC54KCksIHBvaW50LnkoKSAt
IGZtLmFzY2VudCgpLCBmbS53aWR0aChzdHJpbmcsIC0xLCBmbGFncyksIGZtLmhlaWdodCgpKTsK
LSAgICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IGN0eFNoYWRvdy0+YmVn
aW5TaGFkb3dMYXllcihjdHgsIGJvdW5kaW5nUmVjdCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNo
YWRvd1BhaW50ZXIpIHsKKyAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0Nv
bnRleHQgPSBjdHhTaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4LCBib3VuZGluZ1JlY3QpOwor
ICAgICAgICAgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAg
IFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIGl0IHdpbGwgYmUgYmx1cnJlZCBhbnl3
YXksIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVuZGVyIGhpbnRzLgogICAgICAgICAgICAgICAgICAg
ICBzaGFkb3dQYWludGVyLT5zZXRGb250KHAtPmZvbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IHNoYWRvd1BhaW50ZXItPnNldFBlbihjdHhTaGFkb3ctPm1fY29sb3IpOworICAgICAgICAgICAg
ICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsK
ICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZHJhd1RleHQocHQsIHN0cmluZywg
ZmxhZ3MsIHJ1bi5leHBhbnNpb24oKSk7CiAgICAgICAgICAgICAgICAgICAgIGN0eFNoYWRvdy0+
ZW5kU2hhZG93TGF5ZXIoY3R4KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0gZWxzZSBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tl
KSB7Ci0gICAgICAgICAgICBpZiAoY3R4U2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6
Qmx1clNoYWRvdykgewotICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShjdHhTaGFkb3ctPm9m
ZnNldCgpKTsKLSAgICAgICAgICAgICAgICBwLT5zdHJva2VQYXRoKHRleHRTdHJva2VQYXRoLCBR
UGVuKGN0eFNoYWRvdy0+bV9jb2xvcikpOwotICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZSgt
Y3R4U2hhZG93LT5vZmZzZXQoKSk7CisgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkg
IT0gU2hhZG93Qmx1cjo6Qmx1clNoYWRvdykgeworICAgICAgICAgICAgICAgIGNvbnN0IFFQb2lu
dEYgc2hhZG93T2Zmc2V0KGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY3R4LT5z
dGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgcC0+dHJhbnNs
YXRlKHNoYWRvd09mZnNldCk7CisgICAgICAgICAgICAgICAgcC0+c3Ryb2tlUGF0aCh0ZXh0U3Ry
b2tlUGF0aCwgUVBlbihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpKTsKKyAgICAgICAgICAgICAg
ICBwLT50cmFuc2xhdGUoLXNoYWRvd09mZnNldCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgIFFGb250TWV0cmljcyBmbShmb250KTsKICAgICAgICAgICAgICAgICBRUmVj
dEYgYm91bmRpbmdSZWN0KHB0LngoKSwgcG9pbnQueSgpIC0gZm0uYXNjZW50KCksIGZtLndpZHRo
KHN0cmluZywgLTEsIGZsYWdzKSwgZm0uaGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgIFFQYWlu
dGVyKiBzaGFkb3dQYWludGVyID0gY3R4U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eCwgYm91
bmRpbmdSZWN0KTsKLSAgICAgICAgICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgeworICAgICAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IGN0eFNoYWRvdy0+YmVn
aW5TaGFkb3dMYXllcihjdHgsIGJvdW5kaW5nUmVjdCk7CisgICAgICAgICAgICAgICAgaWYgKHNo
YWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50
ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgICAgICAg
ICAgLy8gU2luY2UgaXQgd2lsbCBiZSBibHVycmVkIGFueXdheSwgd2UgZG9uJ3QgY2FyZSBhYm91
dCByZW5kZXIgaGludHMuCiAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldEZv
bnQocC0+Zm9udCgpKTsKLSAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c3Ryb2tl
UGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBlbihjdHhTaGFkb3ctPm1fY29sb3IpKTsKKyAgICAgICAg
ICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c3Ryb2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBl
bihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpKTsKICAgICAgICAgICAgICAgICAgICAgY3R4U2hh
ZG93LT5lbmRTaGFkb3dMYXllcihjdHgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KQEAgLTMyOCw3ICszMzMsNyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsCiAgICAgQVNTRVJU
KCFzaG91bGRTdHJva2UpOwogCiAgICAgLy8gU2hhZG93ZWQgdGV4dCBzaG91bGQgYWx3YXlzIHRh
a2UgdGhlIGNvbXBsZXggcGF0aC4KLSAgICBBU1NFUlQoY29udGV4dC0+Y29udGV4dFNoYWRvdygp
LT5tX3R5cGUgPT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpOworICAgIEFTU0VSVChjb250ZXh0
LT5jb250ZXh0U2hhZG93KCktPnR5cGUoKSA9PSBTaGFkb3dCbHVyOjpOb1NoYWRvdyk7CiAKICAg
ICBpZiAoIXNob3VsZEZpbGwgJiYgIXNob3VsZFN0cm9rZSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MzYxLDcgKzM2Niw3IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwKICAgICBRUGFpbnRlciogcGFp
bnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgQ29udGV4dFNoYWRvdyog
c2hhZG93ID0gY29udGV4dC0+Y29udGV4dFNoYWRvdygpOwotICAgIHN3aXRjaCAoc2hhZG93LT5t
X3R5cGUpIHsKKyAgICBzd2l0Y2ggKHNoYWRvdy0+dHlwZSgpKSB7CiAgICAgY2FzZSBDb250ZXh0
U2hhZG93OjpTb2xpZFNoYWRvdzogewogICAgICAgICBRUGVuIHByZXZpb3VzUGVuID0gcGFpbnRl
ci0+cGVuKCk7CiAgICAgICAgIHBhaW50ZXItPnNldFBlbihzaGFkb3ctPm1fY29sb3IpOwpAQCAt
Mzc0LDggKzM3OSw5IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwKICAgICBjYXNlIENvbnRleHRT
aGFkb3c6OkJsdXJTaGFkb3c6IHsKICAgICAgICAgcXJlYWwgaGVpZ2h0ID0gcmF3Rm9udC5hc2Nl
bnQoKSArIHJhd0ZvbnQuZGVzY2VudCgpICsgMTsKICAgICAgICAgUVJlY3RGIGJvdW5kaW5nUmVj
dChwb2ludC54KCksIHBvaW50LnkoKSAtIHJhd0ZvbnQuYXNjZW50KCksIHdpZHRoLCBoZWlnaHQp
OwotICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5TaGFkb3dM
YXllcihjb250ZXh0LCBib3VuZGluZ1JlY3QpOwotICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikg
eworICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2lu
U2hhZG93TGF5ZXIoY29udGV4dCwgYm91bmRpbmdSZWN0KTsKKyAgICAgICAgaWYgKHNoYWRvd0Nv
bnRleHQpIHsKKyAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRQ
ZW4oc2hhZG93LT5tX2NvbG9yKTsKICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmRyYXdHbHlw
aFJ1bihwb2ludCwgcXRHbHlwaHMpOwogICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXll
cihjb250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAppbmRleCA3OTNjZGUwLi44NDk5ZTY3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHRRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0UXQuY3BwCkBAIC00NCwxMyArNDQsMTMgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRy
YW5zZm9ybS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiQ29udGV4dFNoYWRvdy5o
IgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVk
ZSAiUGF0aC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNpbmNsdWRlICJTaGFkb3dCbHVyLmgi
CiAjaW5jbHVkZSAiVHJhbnNwYXJlbmN5TGF5ZXIuaCIKIAogI2luY2x1ZGUgPFFCcnVzaD4KQEAg
LTE5Niw4ICsxOTYsOCBAQCBwdWJsaWM6CiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eTsKICAgICBib29sIGluaXRpYWxTbW9vdGhQaXhtYXBUcmFuc2Zv
cm1IaW50OwogCi0gICAgQ29udGV4dFNoYWRvdyBzaGFkb3c7Ci0gICAgUVN0YWNrPENvbnRleHRT
aGFkb3c+IHNoYWRvd1N0YWNrOworICAgIFNoYWRvd0JsdXIgc2hhZG93OworICAgIFFTdGFjazxT
aGFkb3dCbHVyPiBzaGFkb3dTdGFjazsKIAogICAgIFFSZWN0RiBjbGlwQm91bmRpbmdSZWN0KCkg
Y29uc3QKICAgICB7CkBAIC0zMDksNyArMzA5LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJl
c3RvcmVQbGF0Zm9ybVN0YXRlKCkKICAgICBtX2RhdGEtPnAoKS0+cmVzdG9yZSgpOwogCiAgICAg
aWYgKG1fZGF0YS0+c2hhZG93U3RhY2suaXNFbXB0eSgpKQotICAgICAgICBtX2RhdGEtPnNoYWRv
dyA9IENvbnRleHRTaGFkb3coKTsKKyAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBTaGFkb3dCbHVy
KEZsb2F0U2l6ZShtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Qmx1ciksIG1fc3Rh
dGUuc2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd0NvbG9y
U3BhY2UpOwogICAgIGVsc2UKICAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBtX2RhdGEtPnNoYWRv
d1N0YWNrLnBvcCgpOwogfQpAQCAtNDk1LDMxICs0OTUsMjkgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgcGxhdGZvcm1QYXRoLnNldEZpbGxS
dWxlKHRvUXRGaWxsUnVsZShmaWxsUnVsZSgpKSk7CiAKICAgICBpZiAoaGFzU2hhZG93KCkpIHsK
LSAgICAgICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY29udGV4dFNoYWRvdygpOwotICAgICAg
ICBpZiAoc2hhZG93LT5tdXN0VXNlQ29udGV4dFNoYWRvdyh0aGlzKSB8fCBtX3N0YXRlLmZpbGxQ
YXR0ZXJuIHx8IG1fc3RhdGUuZmlsbEdyYWRpZW50KQorICAgICAgICBTaGFkb3dCbHVyKiBzaGFk
b3cgPSBzaGFkb3dCbHVyKCk7CisgICAgICAgIGlmIChzaGFkb3ctPm11c3RVc2VTaGFkb3dCbHVy
KHRoaXMpIHx8IG1fc3RhdGUuZmlsbFBhdHRlcm4gfHwgbV9zdGF0ZS5maWxsR3JhZGllbnQpCiAg
ICAgICAgIHsKLSAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5i
ZWdpblNoYWRvd0xheWVyKHRoaXMsIHBsYXRmb3JtUGF0aC5jb250cm9sUG9pbnRSZWN0KCkpOwot
ICAgICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dCogc2hhZG93Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCBwbGF0
Zm9ybVBhdGguY29udHJvbFBvaW50UmVjdCgpKTsKKyAgICAgICAgICAgIGlmIChzaGFkb3dDb250
ZXh0KSB7CisgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dD
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5m
aWxsUGF0dGVybikgewogICAgICAgICAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5l
OwotICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRpY19j
YXN0PHFyZWFsPihzaGFkb3ctPm1fY29sb3IuYWxwaGEoKSkgLyAyNTUpOwogICAgICAgICAgICAg
ICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIFFCcnVzaChtX3N0
YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSkpOwogICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKICAgICAgICAgICAg
ICAgICAgICAgUUJydXNoIGJydXNoKCptX3N0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFk
aWVudCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJ1c2guc2V0VHJhbnNmb3JtKG1fc3RhdGUu
ZmlsbEdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOwotICAgICAgICAgICAgICAg
ICAgICBzaGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPihzaGFkb3ct
Pm1fY29sb3IuYWxwaGEoKSkgLyAyNTUpOwogICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWlu
dGVyLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIGJydXNoKTsKICAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPm1f
Y29sb3I7Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd0NvbG9yLnNldEFscGhhRihzaGFkb3dD
b2xvci5hbHBoYUYoKSAqIHAtPmJydXNoKCkuY29sb3IoKS5hbHBoYUYoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxQYXRoKHBsYXRmb3JtUGF0aCwgc2hhZG93Q29s
b3IpOworICAgICAgICAgICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBtX3N0YXRlLnNo
YWRvd0NvbG9yOworICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUGF0aChw
bGF0Zm9ybVBhdGgsIHAtPmJydXNoKCkuY29sb3IoKSk7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIodGhpcyk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBRUG9pbnRGIG9mZnNldCA9IHNoYWRvdy0+
b2Zmc2V0KCk7CisgICAgICAgICAgICBRUG9pbnRGIG9mZnNldChtX3N0YXRlLnNoYWRvd09mZnNl
dC53aWR0aCgpLCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7CiAgICAgICAgICAgICBw
LT50cmFuc2xhdGUob2Zmc2V0KTsKLSAgICAgICAgICAgIFFDb2xvciBzaGFkb3dDb2xvciA9IHNo
YWRvdy0+bV9jb2xvcjsKKyAgICAgICAgICAgIFFDb2xvciBzaGFkb3dDb2xvciA9IG1fc3RhdGUu
c2hhZG93Q29sb3I7CiAgICAgICAgICAgICBzaGFkb3dDb2xvci5zZXRBbHBoYUYoc2hhZG93Q29s
b3IuYWxwaGFGKCkgKiBwLT5icnVzaCgpLmNvbG9yKCkuYWxwaGFGKCkpOwogICAgICAgICAgICAg
cC0+ZmlsbFBhdGgocGxhdGZvcm1QYXRoLCBzaGFkb3dDb2xvcik7CiAgICAgICAgICAgICBwLT50
cmFuc2xhdGUoLW9mZnNldCk7CkBAIC01NDcsMzAgKzU0NSwyOSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHBsYXRmb3JtUGF0aC5zZXRG
aWxsUnVsZSh0b1F0RmlsbFJ1bGUoZmlsbFJ1bGUoKSkpOwogCiAgICAgaWYgKGhhc1NoYWRvdygp
KSB7Ci0gICAgICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHRTaGFkb3coKTsKLSAg
ICAgICAgaWYgKHNoYWRvdy0+bXVzdFVzZUNvbnRleHRTaGFkb3codGhpcykgfHwgbV9zdGF0ZS5z
dHJva2VQYXR0ZXJuIHx8IG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpCisgICAgICAgIFNoYWRvd0Js
dXIqIHNoYWRvdyA9IHNoYWRvd0JsdXIoKTsKKyAgICAgICAgaWYgKHNoYWRvdy0+bXVzdFVzZVNo
YWRvd0JsdXIodGhpcykgfHwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuIHx8IG1fc3RhdGUuc3Ryb2tl
R3JhZGllbnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3Qg
PSBwbGF0Zm9ybVBhdGguY29udHJvbFBvaW50UmVjdCgpOwogICAgICAgICAgICAgYm91bmRpbmdS
ZWN0LmluZmxhdGUocGVuLm1pdGVyTGltaXQoKSArIHBlbi53aWR0aEYoKSk7Ci0gICAgICAgICAg
ICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlz
LCBib3VuZGluZ1JlY3QpOwotICAgICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKKyAgICAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFk
b3dMYXllcih0aGlzLCBib3VuZGluZ1JlY3QpOworICAgICAgICAgICAgaWYgKHNoYWRvd0NvbnRl
eHQpIHsKKyAgICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0Nv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlLnN0
cm9rZUdyYWRpZW50KSB7CiAgICAgICAgICAgICAgICAgICAgIFFCcnVzaCBicnVzaCgqbV9zdGF0
ZS5zdHJva2VHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKICAgICAgICAgICAgICAgICAg
ICAgYnJ1c2guc2V0VHJhbnNmb3JtKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmdyYWRpZW50U3Bh
Y2VUcmFuc2Zvcm0oKSk7CiAgICAgICAgICAgICAgICAgICAgIFFQZW4gc2hhZG93UGVuKHBlbik7
CiAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1Blbi5zZXRCcnVzaChicnVzaCk7Ci0gICAgICAg
ICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldE9wYWNpdHkoc3RhdGljX2Nhc3Q8cXJlYWw+
KHNoYWRvdy0+bV9jb2xvci5hbHBoYSgpKSAvIDI1NSk7CiAgICAgICAgICAgICAgICAgICAgIHNo
YWRvd1BhaW50ZXItPnN0cm9rZVBhdGgocGxhdGZvcm1QYXRoLCBzaGFkb3dQZW4pOwogICAgICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNl
dE9wYWNpdHkoc3RhdGljX2Nhc3Q8cXJlYWw+KG1fZGF0YS0+c2hhZG93Lm1fY29sb3IuYWxwaGEo
KSkgLyAyNTUpOwogICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zdHJva2VQYXRo
KHBsYXRmb3JtUGF0aCwgcGVuKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
c2hhZG93LT5lbmRTaGFkb3dMYXllcih0aGlzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIFFQb2ludEYgb2Zmc2V0ID0gc2hhZG93LT5vZmZzZXQoKTsKKyAg
ICAgICAgICAgIFFQb2ludEYgb2Zmc2V0KG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCksIG1f
c3RhdGUuc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsKICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShv
ZmZzZXQpOwotICAgICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gc2hhZG93LT5tX2NvbG9y
OworICAgICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gbV9zdGF0ZS5zaGFkb3dDb2xvcjsK
ICAgICAgICAgICAgIHNoYWRvd0NvbG9yLnNldEFscGhhRihzaGFkb3dDb2xvci5hbHBoYUYoKSAq
IHBlbi5jb2xvcigpLmFscGhhRigpKTsKICAgICAgICAgICAgIFFQZW4gc2hhZG93UGVuKHBlbik7
CiAgICAgICAgICAgICBzaGFkb3dQZW4uc2V0Q29sb3Ioc2hhZG93Q29sb3IpOwpAQCAtNjY4LDQ0
ICs2NjUsNDIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIAogICAgIFFQYWludGVyKiBwID0gbV9kYXRhLT5wKCk7CiAgICAgUVJlY3RGIG5v
cm1hbGl6ZWRSZWN0ID0gcmVjdC5ub3JtYWxpemVkKCk7Ci0gICAgQ29udGV4dFNoYWRvdyogc2hh
ZG93ID0gY29udGV4dFNoYWRvdygpOworICAgIFNoYWRvd0JsdXIqIHNoYWRvdyA9IHNoYWRvd0Js
dXIoKTsKIAogICAgIGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CiAgICAgICAgIFFQaXhtYXAq
IGltYWdlID0gbV9zdGF0ZS5maWxsUGF0dGVybi0+dGlsZUltYWdlKCktPm5hdGl2ZUltYWdlRm9y
Q3VycmVudEZyYW1lKCk7Ci0gICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gaGFzU2hh
ZG93KCkgPyBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgbm9ybWFsaXplZFJlY3QpIDog
MDsKLSAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
KiBzaGFkb3dDb250ZXh0ID0gaGFzU2hhZG93KCkgPyBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIo
dGhpcywgbm9ybWFsaXplZFJlY3QpIDogMDsKKyAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsK
KyAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAgICBkcmF3UmVwZWF0UGF0dGVybihzaGFkb3dQYWlu
dGVyLCBpbWFnZSwgbm9ybWFsaXplZFJlY3QsIG1fc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgo
KSwgbV9zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0WSgpKTsKLSAgICAgICAgICAgIHNoYWRvd1Bh
aW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJj
ZUluKTsKLSAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0
LCBzaGFkb3ctPm1fY29sb3IpOwogICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcih0
aGlzKTsKICAgICAgICAgfQogICAgICAgICBkcmF3UmVwZWF0UGF0dGVybihwLCBpbWFnZSwgbm9y
bWFsaXplZFJlY3QsIG1fc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgoKSwgbV9zdGF0ZS5maWxs
UGF0dGVybi0+cmVwZWF0WSgpKTsKICAgICB9IGVsc2UgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50
KSB7CiAgICAgICAgIFFCcnVzaCBicnVzaCgqbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3Jt
R3JhZGllbnQoKSk7CiAgICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShtX3N0YXRlLmZpbGxHcmFk
aWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKLSAgICAgICAgUVBhaW50ZXIqIHNoYWRv
d1BhaW50ZXIgPSBoYXNTaGFkb3coKSA/IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCBu
b3JtYWxpemVkUmVjdCkgOiAwOwotICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgeworICAgICAg
ICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBoYXNTaGFkb3coKSA/IHNoYWRvdy0+
YmVnaW5TaGFkb3dMYXllcih0aGlzLCBub3JtYWxpemVkUmVjdCkgOiAwOworICAgICAgICBpZiAo
c2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBz
aGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgIHNoYWRvd1BhaW50
ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBicnVzaCk7Ci0gICAgICAgICAgICBzaGFkb3dQ
YWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3Vy
Y2VJbik7Ci0gICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3JtYWxpemVkUmVj
dCwgc2hhZG93LT5tX2NvbG9yKTsKICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIo
dGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcC0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIGJy
dXNoKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoaGFzU2hhZG93KCkpIHsKLSAgICAgICAg
ICAgIGlmIChzaGFkb3ctPm11c3RVc2VDb250ZXh0U2hhZG93KHRoaXMpKSB7Ci0gICAgICAgICAg
ICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIo
dGhpcywgbm9ybWFsaXplZFJlY3QpOwotICAgICAgICAgICAgICAgIGlmIChzaGFkb3dQYWludGVy
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldE9wYWNpdHkoc3RhdGlj
X2Nhc3Q8cXJlYWw+KHNoYWRvdy0+bV9jb2xvci5hbHBoYSgpKSAvIDI1NSk7CisgICAgICAgICAg
ICBpZiAoc2hhZG93LT5tdXN0VXNlU2hhZG93Qmx1cih0aGlzKSkgeworICAgICAgICAgICAgICAg
IEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXll
cih0aGlzLCBub3JtYWxpemVkUmVjdCk7CisgICAgICAgICAgICAgICAgaWYgKHNoYWRvd0NvbnRl
eHQpIHsKKyAgICAgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFk
b3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgICAgICAgICAgc2hhZG93
UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIHAtPmJydXNoKCkpOwogICAgICAgICAg
ICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKHRoaXMpOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gU29saWQgcmVjdGFu
Z2xlIGZpbGwgd2l0aCBubyBibHVyIHNoYWRvdyBvciB0cmFuc2Zvcm1hdGlvbnMgYXBwbGllZCBj
YW4gYmUgZG9uZQogICAgICAgICAgICAgICAgIC8vIGZhc3RlciB3aXRob3V0IHVzaW5nIHRoZSBz
aGFkb3cgbGF5ZXIgYXQgYWxsLgotICAgICAgICAgICAgICAgIFFDb2xvciBzaGFkb3dDb2xvciA9
IHNoYWRvdy0+bV9jb2xvcjsKKyAgICAgICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBt
X3N0YXRlLnNoYWRvd0NvbG9yOwogICAgICAgICAgICAgICAgIHNoYWRvd0NvbG9yLnNldEFscGhh
RihzaGFkb3dDb2xvci5hbHBoYUYoKSAqIHAtPmJydXNoKCkuY29sb3IoKS5hbHBoYUYoKSk7Ci0g
ICAgICAgICAgICAgICAgcC0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QudHJhbnNsYXRlZChzaGFk
b3ctPm9mZnNldCgpKSwgc2hhZG93Q29sb3IpOworICAgICAgICAgICAgICAgIHAtPmZpbGxSZWN0
KG5vcm1hbGl6ZWRSZWN0LnRyYW5zbGF0ZWQoUVBvaW50RihtX3N0YXRlLnNoYWRvd09mZnNldC53
aWR0aCgpLCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSkpLCBzaGFkb3dDb2xvcik7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtNzI0LDE2ICs3MTksMjAgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yLCBDb2xvclMKICAgICBRUmVjdEYgbm9ybWFsaXplZFJlY3QgPSByZWN0Lm5vcm1hbGl6
ZWQoKTsKIAogICAgIGlmIChoYXNTaGFkb3coKSkgewotICAgICAgICBDb250ZXh0U2hhZG93KiBz
aGFkb3cgPSBjb250ZXh0U2hhZG93KCk7Ci0gICAgICAgIGlmIChzaGFkb3ctPm11c3RVc2VDb250
ZXh0U2hhZG93KHRoaXMpKSB7Ci0gICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9
IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCBub3JtYWxpemVkUmVjdCk7Ci0gICAgICAg
ICAgICBpZiAoc2hhZG93UGFpbnRlcikgeworICAgICAgICBTaGFkb3dCbHVyKiBzaGFkb3cgPSBz
aGFkb3dCbHVyKCk7CisgICAgICAgIGlmIChzaGFkb3ctPm11c3RVc2VTaGFkb3dCbHVyKHRoaXMp
KSB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ct
PmJlZ2luU2hhZG93TGF5ZXIodGhpcywgbm9ybWFsaXplZFJlY3QpOworICAgICAgICAgICAgaWYg
KHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRl
ciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICAgICAgICAgIHNo
YWRvd1BhaW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2Rl
X1NvdXJjZSk7Ci0gICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFs
aXplZFJlY3QsIHNoYWRvdy0+bV9jb2xvcik7CisgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRl
ci0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwogICAgICAg
ICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIodGhpcyk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcC0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QudHJh
bnNsYXRlZChzaGFkb3ctPm9mZnNldCgpKSwgc2hhZG93LT5tX2NvbG9yKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIFFDb2xvciBzaGFkb3dDb2xvciA9IG1fc3RhdGUuc2hhZG93Q29s
b3I7CisgICAgICAgICAgICBzaGFkb3dDb2xvci5zZXRBbHBoYUYoc2hhZG93Q29sb3IuYWxwaGFG
KCkgKiBwLT5icnVzaCgpLmNvbG9yKCkuYWxwaGFGKCkpOworICAgICAgICAgICAgcC0+ZmlsbFJl
Y3Qobm9ybWFsaXplZFJlY3QudHJhbnNsYXRlZChRUG9pbnRGKG1fc3RhdGUuc2hhZG93T2Zmc2V0
LndpZHRoKCksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LmhlaWdodCgpKSksIHNoYWRvd0NvbG9yKTsK
KyAgICAgICAgfQogICAgIH0KIAogICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBtX2Rh
dGEtPnNvbGlkQ29sb3IpOwpAQCAtNzQ4LDE4ICs3NDcsMjAgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0
b3BMZWYKICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBi
b3R0b21MZWZ0LCBib3R0b21SaWdodCk7CiAgICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsK
ICAgICBpZiAoaGFzU2hhZG93KCkpIHsKLSAgICAgICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0g
Y29udGV4dFNoYWRvdygpOwotICAgICAgICBpZiAoc2hhZG93LT5tdXN0VXNlQ29udGV4dFNoYWRv
dyh0aGlzKSkgewotICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ct
PmJlZ2luU2hhZG93TGF5ZXIodGhpcywgcmVjdCk7Ci0gICAgICAgICAgICBpZiAoc2hhZG93UGFp
bnRlcikgeworICAgICAgICBTaGFkb3dCbHVyKiBzaGFkb3cgPSBzaGFkb3dCbHVyKCk7CisgICAg
ICAgIGlmIChzaGFkb3ctPm11c3RVc2VTaGFkb3dCbHVyKHRoaXMpKSB7CisgICAgICAgICAgICBH
cmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIo
dGhpcywgcmVjdCk7CisgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAg
ICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCk7CiAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0Q29tcG9zaXRpb25N
b2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKLSAgICAgICAgICAgICAgICBz
aGFkb3dQYWludGVyLT5maWxsUGF0aChwYXRoLnBsYXRmb3JtUGF0aCgpLCBRQ29sb3IobV9kYXRh
LT5zaGFkb3cubV9jb2xvcikpOworICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxQ
YXRoKHBhdGgucGxhdGZvcm1QYXRoKCksIFFDb2xvcihtX3N0YXRlLnNoYWRvd0NvbG9yKSk7CiAg
ICAgICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcih0aGlzKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShtX2RhdGEtPnNo
YWRvdy5vZmZzZXQoKSk7Ci0gICAgICAgICAgICBwLT5maWxsUGF0aChwYXRoLnBsYXRmb3JtUGF0
aCgpLCBRQ29sb3IobV9kYXRhLT5zaGFkb3cubV9jb2xvcikpOwotICAgICAgICAgICAgcC0+dHJh
bnNsYXRlKC1tX2RhdGEtPnNoYWRvdy5vZmZzZXQoKSk7CisgICAgICAgICAgICBjb25zdCBRUG9p
bnRGIHNoYWRvd09mZnNldChtX3N0YXRlLnNoYWRvd09mZnNldC53aWR0aCgpLCBtX3N0YXRlLnNo
YWRvd09mZnNldC5oZWlnaHQoKSk7CisgICAgICAgICAgICBwLT50cmFuc2xhdGUoc2hhZG93T2Zm
c2V0KTsKKyAgICAgICAgICAgIHAtPmZpbGxQYXRoKHBhdGgucGxhdGZvcm1QYXRoKCksIFFDb2xv
cihtX3N0YXRlLnNoYWRvd0NvbG9yKSk7CisgICAgICAgICAgICBwLT50cmFuc2xhdGUoLXNoYWRv
d09mZnNldCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcC0+ZmlsbFBhdGgocGF0aC5wbGF0Zm9y
bVBhdGgoKSwgUUNvbG9yKGNvbG9yKSk7CkBAIC03NzAsNyArNzcxLDcgQEAgYm9vbCBHcmFwaGlj
c0NvbnRleHQ6OmluVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdAogICAgIHJldHVybiBtX2RhdGEt
PmxheWVyQ291bnQ7CiB9CiAKLUNvbnRleHRTaGFkb3cqIEdyYXBoaWNzQ29udGV4dDo6Y29udGV4
dFNoYWRvdygpCitTaGFkb3dCbHVyKiBHcmFwaGljc0NvbnRleHQ6OnNoYWRvd0JsdXIoKQogewog
ICAgIHJldHVybiAmbV9kYXRhLT5zaGFkb3c7CiB9CkBAIC03OTAsNiArNzkxLDE4IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIAogICAgIG1fZGF0
YS0+cCgpLT5zZXRDbGlwUmVjdChyZWN0LCBRdDo6SW50ZXJzZWN0Q2xpcCk7CiB9CitJbnRSZWN0
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0Cit7CisgICAgUVBhaW50ZXIqIHAg
PSBtX2RhdGEtPnAoKTsKKyAgICBRUmVjdEYgY2xpcFJlY3Q7CisKKyAgICBpZiAocC0+aGFzQ2xp
cHBpbmcoKSkKKyAgICAgICAgY2xpcFJlY3QgPSBtX2RhdGEtPmNsaXBCb3VuZGluZ1JlY3QoKTsK
KyAgICBlbHNlCisgICAgICAgIGNsaXBSZWN0ID0gcC0+dHJhbnNmb3JtKCkuaW52ZXJ0ZWQoKS5t
YXBSZWN0KHAtPndpbmRvdygpKTsKKworICAgIHJldHVybiBJbnRSZWN0KGNsaXBSZWN0LngoKSwg
Y2xpcFJlY3QueSgpLCBjbGlwUmVjdC53aWR0aCgpLCBjbGlwUmVjdC5oZWlnaHQoKSk7Cit9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVs
ZSBjbGlwUnVsZSkKIHsKQEAgLTkyNiw3ICs5MzksNyBAQCBGbG9hdFJlY3QgR3JhcGhpY3NDb250
ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgZnJlY3QsIFJvdW5kaW5n
TQogICAgIHJldHVybiBGbG9hdFJlY3Qocm91bmRlZE9yaWdpbiwgcm91bmRlZExvd2VyUmlnaHQg
LSByb3VuZGVkT3JpZ2luKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNv
bG9yLCBDb2xvclNwYWNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93
KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgLy8gUXQgZG9lc24ndCBzdXBwb3J0IHNoYWRv
d3MgbmF0aXZlbHksIHRoZXkgYXJlIGRyYXduIG1hbnVhbGx5IGluIHRoZSBkcmF3KgogICAgIC8v
IGZ1bmN0aW9ucwpAQCAtOTM1LDEwICs5NDgsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9hdCBibHVyLCBjb25zdAog
ICAgICAgICAvLyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0
ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmluZ0NvbnRleHQKICAgICAgICAgLy8gV2UgZmxpcCB0aGUg
aGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKICAg
ICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCAtc2l6
ZS5oZWlnaHQoKSk7Ci0gICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRvdyhjb2xv
ciwgYmx1ciwgRmxvYXRTaXplKHNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpKTsKLSAgICB9
IGVsc2UKLSAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBDb250ZXh0U2hhZG93KGNvbG9yLCBibHVy
LCBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7CisgICAgfQogCisgICAg
bV9kYXRhLT5zaGFkb3cgPSBTaGFkb3dCbHVyKEZsb2F0U2l6ZShtX3N0YXRlLnNoYWRvd0JsdXIs
IG1fc3RhdGUuc2hhZG93Qmx1ciksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBjb2xvciwgY29sb3JT
cGFjZSk7CiAgICAgbV9kYXRhLT5zaGFkb3cuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9z
dGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKaW5kZXggMGM4Y2U5ZS4uNDFmZjhhNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAK
QEAgLTM0LDExICszNCwxMSBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5j
bHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJDb250ZXh0U2hhZG93LmgiCiAjaW5jbHVk
ZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SW1hZ2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAi
U2hhZG93Qmx1ci5oIgogI2luY2x1ZGUgIlN0aWxsSW1hZ2VRdC5oIgogI2luY2x1ZGUgInF3ZWJz
ZXR0aW5ncy5oIgogCkBAIC0yMjQsMTEgKzIyNCwxMSBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3
KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsCiAgICAgQ29tcG9z
aXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IGN0eHQtPmNvbXBvc2l0ZU9wZXJhdGlvbigp
OwogICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbighaW1hZ2UtPmhhc0FscGhhKCkgJiYg
b3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciA/IENvbXBvc2l0ZUNvcHkgOiBvcCk7CiAKLSAgICBD
b250ZXh0U2hhZG93KiBzaGFkb3cgPSBjdHh0LT5jb250ZXh0U2hhZG93KCk7Ci0gICAgaWYgKHNo
YWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KSB7Ci0gICAgICAgIFFQYWlu
dGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eHQsIG5vcm1h
bGl6ZWREc3QpOwotICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewotICAgICAgICAgICAgc2hh
ZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVhbD4oc2hhZG93LT5tX2NvbG9y
LmFscGhhKCkpIC8gMjU1KTsKKyAgICBpZiAoY3R4dC0+aGFzU2hhZG93KCkpIHsKKyAgICAgICAg
U2hhZG93Qmx1ciogc2hhZG93ID0gY3R4dC0+c2hhZG93Qmx1cigpOworICAgICAgICBHcmFwaGlj
c0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4dCwg
bm9ybWFsaXplZERzdCk7CisgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7CisgICAgICAgICAg
ICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpOwogICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZHJhd1BpeG1hcChub3JtYWxpemVkRHN0
LCAqaW1hZ2UsIG5vcm1hbGl6ZWRTcmMpOwogICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dM
YXllcihjdHh0KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAKaW5kZXggM2IwODk5NS4uY2IyYTQ0MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdl
UXQuY3BwCkBAIC0yOCw5ICsyOCw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
U3RpbGxJbWFnZVF0LmgiCiAKLSNpbmNsdWRlICJDb250ZXh0U2hhZG93LmgiCiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlNoYWRv
d0JsdXIuaCIKIAogI2luY2x1ZGUgPFFQYWludGVyPgogCkBAIC03NCwxMSArNzQsMTEgQEAgdm9p
ZCBTdGlsbEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0
JiBkc3QsCiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IGN0eHQtPmNv
bXBvc2l0ZU9wZXJhdGlvbigpOwogICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7
CiAKLSAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjdHh0LT5jb250ZXh0U2hhZG93KCk7Ci0g
ICAgaWYgKHNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KSB7Ci0gICAg
ICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0
eHQsIG5vcm1hbGl6ZWREc3QpOwotICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewotICAgICAg
ICAgICAgc2hhZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVhbD4oc2hhZG93
LT5tX2NvbG9yLmFscGhhKCkpIC8gMjU1KTsKKyAgICBpZiAoY3R4dC0+aGFzU2hhZG93KCkpIHsK
KyAgICAgICAgU2hhZG93Qmx1ciogc2hhZG93ID0gY3R4dC0+c2hhZG93Qmx1cigpOworICAgICAg
ICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5
ZXIoY3R4dCwgbm9ybWFsaXplZERzdCk7CisgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7Cisg
ICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpOwogICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZHJhd1BpeG1hcChub3Jt
YWxpemVkRHN0LCAqbV9waXhtYXAsIG5vcm1hbGl6ZWRTcmMpOwogICAgICAgICAgICAgc2hhZG93
LT5lbmRTaGFkb3dMYXllcihjdHh0KTsKICAgICAgICAgfQotLSAKMS43LjQuMQoK
</data>
<flag name="commit-queue"
          id="92902"
          type_id="3"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98709</attachid>
            <date>2011-06-27 05:39:49 -0700</date>
            <delta_ts>2011-06-27 12:07:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Qt-Add-ShadowBlur-support.patch</filename>
            <type>text/plain</type>
            <size>43366</size>
            <attacher name="Igor Trindade Oliveira">igor.oliveira</attacher>
            
              <data encoding="base64">RnJvbSA0MzI2NWRiZTNiNzUzYmZhNWU0N2IxMjQ3MWYwYTQyMGFiN2RhMTNiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBJZ29yIE9saXZlaXJhIDxpZ29yLm9saXZlaXJhQG9wZW5ib3Nz
YS5vcmc+CkRhdGU6IFN1biwgMjYgSnVuIDIwMTEgMTA6MTk6MzYgLTA0MDAKU3ViamVjdDogW1BB
VENIXSBbUXRdIEFkZCBTaGFkb3dCbHVyIHN1cHBvcnQKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ1ICsrKysrKwogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8gICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICstCiAuLi4v
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwICB8ICAgIDIgKy0K
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIHwgICAg
NyArLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgICAg
fCAgIDY2ICsrKysrKysrCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dC
bHVyLmggICAgICB8ICAgMjEgKystCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNo
YWRvd1F0LmNwcCAgICAgICB8ICAxNjggLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAgICAgIHwgICA4MiArKysrKy0tLS0t
CiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwICAgICB8ICAx
MjggKysrKysrKystLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9J
bWFnZVF0LmNwcCAgICB8ICAgMTIgKy0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L1N0aWxsSW1hZ2VRdC5jcHAgIHwgICAxMiArLQogMTEgZmlsZXMgY2hhbmdlZCwgMjYxIGluc2Vy
dGlvbnMoKyksIDI4NyBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGM5NGJjNWEuLjI1N2JiYTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxMS0w
Ni0yNiAgSWdvciBPbGl2ZWlyYSAgPGlnb3Iub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEFkZCBTaGFk
b3dCbHVyIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTYyOTk3CisKKyAgICAgICAgVXNlIFNoYWRvd0JsdXIgaW5zdGVhZCBvZiBDb250ZXh0
U2hhZG93IHRvIGhhbmRsZSBjYW52YXMgYW5kIGNzcyBzaGFkb3dzLiBTaGFkb3dCbHVyIGlzCisg
ICAgICAgIGEgbmV3ZXIgYW5kIHBsYXRmb3JtIGluZGVwZW5kZW50IHNoYWRvdyBpbXBsZW1lbnRh
dGlvbi4KKyAgICAgICAgUXQgUVBhaW50ZXIgZG9lcyBub3QgaGF2ZSBzdXBwb3J0IGZvciBzaGFk
b3dzIHNvIGlzIG5lY2Vzc2FyeSB0byBjcmVhdGUgYSBsYXllciBzdXBwb3J0CisgICAgICAgIHRv
IGRyYXcgY29tcGxleCBzaGFwZXMgYW5kIGZvbnRzLiBUaGUgYmVnaW5TaGFkb3dMYXllciBjcmVh
dGVzIGEgdGVtcG9yYXJ5IHNoYWRvdyBidWZmZXIKKyAgICAgICAgd2hlcmUgdGhlIGNhbnZhcyBj
YW4gZHJhdyBvbnRvIGFuZCBlbmRTaGFkb3dMYXllciBhcHBsaWVzIHRoZSBibHVyIGZpbHRlciwg
Y29sb3JzIHRoZQorICAgICAgICBzaGFkb3cgYnVmZmVyIGFuZCBkcmF3IHRoZSBmaW5hbCBzaGFk
b3cgdG8gdGhlIGdyYXBoaWNzIGNvbnRleHQuCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6
U2hhZG93Qmx1cik6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjptdXN0VXNlU2hhZG93
Qmx1cik6IENoZWNrIGlmIGlzIG5lY2Vzc2FyeSBkcmF3IGEgYmx1ciBzaGFkb3cgaW5zdGVhZCBv
ZgorICAgICAgICBhIHNvbGlkIHNoYWRvdy4KKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6
OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJsdXJBbmRDb2xvclNoYWRv
d0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpiZWdpblNoYWRvd0xheWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmVuZFNoYWRvd0xheWVyKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmg6CisgICAgICAgIChXZWJDb3JlOjpT
aGFkb3dCbHVyOjp0eXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0
U2hhZG93UXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0Zv
bnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkcmF3VGV4dENvbW1vbik6CisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0NvbnRleHRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaGFkb3dCbHVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9JbWFnZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpk
cmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3RpbGxJbWFnZTo6ZHJhdyk6CisKIDIwMTEtMDYtMjUgIERpbWl0
cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBhZTFlNjgwLi5iOGRjY2NiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnBybwpAQCAtOTgwLDcgKzk4MCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRGYW1pbHkuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcCBcCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvQ29udGV4dFNoYWRvdy5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRv
d0JsdXIuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRRdWFkLmNwcCBcCkBAIC0xOTQyLDcgKzE5NDIsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBwbGF0Zm9ybS9tb2NrL1NwZWVjaElucHV0Q2xpZW50TW9jay5oIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oIFwK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmggXAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1NoYWRvd0JsdXIuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJs
ZW5kLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oIFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaCBcCkBA
IC0yNTIxLDcgKzI1MjEsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBwYWdlL3F0L0ZyYW1lUXQuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFF0LmNwcCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29sb3JRdC5jcHAgXAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0NvbnRleHRTaGFkb3dRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L0ZvbnRRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFR
dC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0Zsb2F0UG9pbnRRdC5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5j
cHAKaW5kZXggM2I3N2I5Zi4uZjNmOTllNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC01ODUsNyArNTg1LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBidWZm
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcmUKICAgICBidWZmZXItPmNsaXAodGhpcywgcmVjdCk7CiB9
CiAKLSNpZiAhVVNFKENHKQorI2lmICFVU0UoQ0cpICYmICFQTEFURk9STShRVCkKIEludFJlY3Qg
R3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKIHsKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmgKaW5kZXggNDlkZTQxZi4uZWUwYWU3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTU0LDYgKzU0LDcg
QEAgdHlwZWRlZiBjbGFzcyBXZWJDb3JlOjpTdXJmYWNlT3BlblZHIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0OwogI2luY2x1ZGUgPFFQYWludGVyPgogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
Q29udGV4dFNoYWRvdzsKK2NsYXNzIFNoYWRvd0JsdXI7CiB9CiB0eXBlZGVmIFFQYWludGVyIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0OwogI2VsaWYgUExBVEZPUk0oV1gpCkBAIC00ODUsMTAgKzQ4
NiwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgdGFrZU93bmVyc2hpcE9m
UGxhdGZvcm1Db250ZXh0KCk7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFFUKSB8fCBVU0UoQ0FJ
Uk8pCisjaWYgVVNFKENBSVJPKQogICAgICAgICBDb250ZXh0U2hhZG93KiBjb250ZXh0U2hhZG93
KCk7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFFUKQorICAgICAgICBTaGFkb3dCbHVyKiBzaGFk
b3dCbHVyKCk7CisjZW5kaWYKKwogI2lmIFVTRShDQUlSTykKICAgICAgICAgR3JhcGhpY3NDb250
ZXh0KGNhaXJvX3QqKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcAppbmRleCAyNWZjOWFhLi4zYTMxMTNmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApAQCAtMTkyLDYgKzE5
MiwxNCBAQCBTaGFkb3dCbHVyOjpTaGFkb3dCbHVyKGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBj
b25zdCBGbG9hdFNpemUmIG9mZnNldCwgY29uc3QgQwogICAgIH0gZWxzZQogICAgICAgICBtX3R5
cGUgPSBTb2xpZFNoYWRvdzsKIH0KK1NoYWRvd0JsdXI6OlNoYWRvd0JsdXIoKQorICAgIDogbV90
eXBlKE5vU2hhZG93KQorICAgICwgbV9ibHVyUmFkaXVzKDAsIDApCisgICAgLCBtX3NoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKGZhbHNlKQoreworfQorCisKIAogLy8gSW5zdGVhZCBvZiBpbnRlZ2Vy
IGRpdmlzaW9uLCB3ZSB1c2UgMTcuMTUgZm9yIGZpeGVkLXBvaW50IGRpdmlzaW9uLgogc3RhdGlj
IGNvbnN0IGludCBibHVyU3VtU2hpZnQgPSAxNTsKQEAgLTIzNyw2ICsyNDUsMzAgQEAgc3RhdGlj
IHZvaWQgY2FsY3VsYXRlTG9iZXMoaW50IGxvYmVzW11bMl0sIGZsb2F0IGJsdXJSYWRpdXMsIGJv
b2wgc2hhZG93c0lnbm9yZVQKICAgICB9CiB9CiAKK2Jvb2wgU2hhZG93Qmx1cjo6bXVzdFVzZVNo
YWRvd0JsdXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KSBjb25zdAoreworICAgIC8vIFdlIGNh
bid0IGF2b2lkIFNoYWRvd0JsdXIsIHNpbmNlIHRoZSBzaGFkb3cgaGFzIGJsdXIuCisgICAgaWYg
KG1fdHlwZSA9PSBTaGFkb3dCbHVyOjpCbHVyU2hhZG93KQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAvLyBXZSBjYW4gYXZvaWQgU2hhZG93Qmx1ciBhbmQgb3B0aW1pemUsIHNpbmNlIHdlJ3Jl
IG5vdCBkcmF3aW5nIG9uIGEKKyAgICAvLyBjYW52YXMgYW5kIGJveCBzaGFkb3dzIGFyZSBhZmZl
Y3RlZCBieSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LgorICAgIGlmICghc2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIFdlIGNhbiBhdm9p
ZCBTaGFkb3dCbHVyLCBzaW5jZSB0aGVyZSBhcmUgbm8gdHJhbnNmb3JtYXRpb25zIHRvIGFwcGx5
IHRvIHRoZSBjYW52YXMuCisgICAgaWYgKGNvbnRleHQtPmdldENUTSgpLmlzSWRlbnRpdHkoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIE90aGVyd2lzZSwgbm8gY2hhbmNlIGF2b2lk
aW5nIFNoYWRvd0JsdXIuCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgU2hhZG93Qmx1cjo6
Y2xlYXIoKQoreworICAgIG1fdHlwZSA9IE5vU2hhZG93OworICAgIG1fY29sb3IgPSBDb2xvcigp
OworICAgIG1fYmx1clJhZGl1cyA9IEZsb2F0U2l6ZSgpOworICAgIG1fb2Zmc2V0ID0gRmxvYXRT
aXplKCk7Cit9CisKIHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckxheWVySW1hZ2UodW5zaWduZWQgY2hh
ciogaW1hZ2VEYXRhLCBjb25zdCBJbnRTaXplJiBzaXplLCBpbnQgcm93U3RyaWRlKQogewogICAg
IGNvbnN0IGludCBjaGFubmVsc1s0XSA9IHsgMywgMCwgMSwgMyB9OwpAQCAtODI4LDkgKzg2MCw0
MyBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1ZmZlcihjb25zdCBJbnRT
aXplJiB0ZW1wbGF0ZVNpemUpCiAKICAgICAvLyBNYXNrIHRoZSBpbWFnZSB3aXRoIHRoZSBzaGFk
b3cgY29sb3IuCiAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gbV9sYXllcklt
YWdlLT5jb250ZXh0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVy
KCpzaGFkb3dDb250ZXh0KTsKICAgICBzaGFkb3dDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRp
b24oQ29tcG9zaXRlU291cmNlSW4pOwogICAgIHNoYWRvd0NvbnRleHQtPnNldEZpbGxDb2xvciht
X2NvbG9yLCBtX2NvbG9yU3BhY2UpOwogICAgIHNoYWRvd0NvbnRleHQtPmZpbGxSZWN0KEZsb2F0
UmVjdCgwLCAwLCB0ZW1wbGF0ZVNpemUud2lkdGgoKSwgdGVtcGxhdGVTaXplLmhlaWdodCgpKSk7
CiB9CiAKK0dyYXBoaWNzQ29udGV4dCogU2hhZG93Qmx1cjo6YmVnaW5TaGFkb3dMYXllcihHcmFw
aGljc0NvbnRleHQgKmNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgbGF5ZXJBcmVhKQoreworICAg
IGFkanVzdEJsdXJSYWRpdXMoY29udGV4dCk7CisKKyAgICBJbnRSZWN0IGxheWVyUmVjdCA9IGNh
bGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0KGNvbnRleHQsIGxheWVyQXJlYSwgY29udGV4dC0+Y2xp
cEJvdW5kcygpKTsKKworICAgIGlmIChsYXllclJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIG1fbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLmdldFNj
cmF0Y2hCdWZmZXIobGF5ZXJSZWN0LnNpemUoKSk7CisKKyAgICBHcmFwaGljc0NvbnRleHQqIHNo
YWRvd0NvbnRleHQgPSBtX2xheWVySW1hZ2UtPmNvbnRleHQoKTsKKyAgICBzaGFkb3dDb250ZXh0
LT5zYXZlKCk7CisgICAgc2hhZG93Q29udGV4dC0+Y2xlYXJSZWN0KEZsb2F0UmVjdCgwLCAwLCBt
X2xheWVyU2l6ZS53aWR0aCgpLCBtX2xheWVyU2l6ZS5oZWlnaHQoKSkpOworCisgICAgc2hhZG93
Q29udGV4dC0+dHJhbnNsYXRlKG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb24pOworICAgIHJldHVy
biBzaGFkb3dDb250ZXh0OworfQorCit2b2lkIFNoYWRvd0JsdXI6OmVuZFNoYWRvd0xheWVyKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBtX2xheWVySW1hZ2UtPmNvbnRleHQoKS0+
cmVzdG9yZSgpOworCisgICAgYmx1ckFuZENvbG9yU2hhZG93QnVmZmVyKGV4cGFuZGVkSW50U2l6
ZShtX2xheWVyU2l6ZSkpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZl
KCpjb250ZXh0KTsKKworICAgIGNvbnRleHQtPmNsZWFyU2hhZG93KCk7CisgICAgY29udGV4dC0+
ZHJhd0ltYWdlQnVmZmVyKG1fbGF5ZXJJbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgcm91bmRl
ZEludFBvaW50KG1fbGF5ZXJPcmlnaW4pLCBJbnRSZWN0KDAsIDAsIG1fbGF5ZXJTaXplLndpZHRo
KCksIG1fbGF5ZXJTaXplLmhlaWdodCgpKSwgY29udGV4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCkp
OworCisgICAgbV9sYXllckltYWdlID0gMDsKKyAgICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5z
Y2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmgKaW5kZXgg
MjAyZmYzZC4uY2Y2YjVlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2hhZG93Qmx1ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NoYWRvd0JsdXIuaApAQCAtNDIsMTggKzQyLDMyIEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsK
IGNsYXNzIEltYWdlQnVmZmVyOwogCiBjbGFzcyBTaGFkb3dCbHVyIHsKLSAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTaGFkb3dCbHVyKTsKIHB1YmxpYzoKKyAgICBlbnVtIFNoYWRvd1R5cGUgewor
ICAgICAgICBOb1NoYWRvdywKKyAgICAgICAgU29saWRTaGFkb3csCisgICAgICAgIEJsdXJTaGFk
b3cKKyAgICB9OworCiAgICAgU2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUmIHJhZGl1cywgY29u
c3QgRmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CisgICAgU2hh
ZG93Qmx1cigpOwogCiAgICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIGln
bm9yZVRyYW5zZm9ybXMpIHsgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IGlnbm9yZVRyYW5z
Zm9ybXM7IH0KICAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1
cm4gbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQogCisgICAgR3JhcGhpY3NDb250ZXh0KiBi
ZWdpblNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgbGF5ZXJB
cmVhKTsKKyAgICB2b2lkIGVuZFNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCopOworCiAgICAg
dm9pZCBkcmF3UmVjdFNoYWRvdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBj
b25zdCBSb3VuZGVkSW50UmVjdDo6UmFkaWkmKTsKICAgICB2b2lkIGRyYXdJbnNldFNoYWRvdyhH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmIGhvbGVS
ZWN0LCBjb25zdCBSb3VuZGVkSW50UmVjdDo6UmFkaWkmIGhvbGVSYWRpaSk7CiAKICAgICB2b2lk
IGJsdXJMYXllckltYWdlKHVuc2lnbmVkIGNoYXIqLCBjb25zdCBJbnRTaXplJiwgaW50IHN0cmlk
ZSk7CiAKKyAgICBib29sIG11c3RVc2VTaGFkb3dCbHVyKEdyYXBoaWNzQ29udGV4dCopIGNvbnN0
OworCisgICAgdm9pZCBjbGVhcigpOworCisgICAgU2hhZG93VHlwZSB0eXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV90eXBlOyB9CiBwcml2YXRlOgogICAgIHZvaWQgZHJhd1NoYWRvd0J1ZmZlcihHcmFw
aGljc0NvbnRleHQqKTsKIApAQCAtODAsMTEgKzk0LDYgQEAgcHJpdmF0ZToKICAgICAKICAgICBJ
bnRTaXplIGJsdXJyZWRFZGdlU2l6ZSgpIGNvbnN0OwogICAgIAotICAgIGVudW0gU2hhZG93VHlw
ZSB7Ci0gICAgICAgIE5vU2hhZG93LAotICAgICAgICBTb2xpZFNoYWRvdywKLSAgICAgICAgQmx1
clNoYWRvdwotICAgIH07CiAgICAgCiAgICAgU2hhZG93VHlwZSBtX3R5cGU7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3dRdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZWIzMWE3Li4wMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3dRdC5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MCBTZW5jaGEsIEluYy4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgot
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb250ZXh0U2hhZG93LmgiCi0KLSNpbmNsdWRlICJB
ZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
IDxRUGFpbnRlcj4KLSNpbmNsdWRlIDxRVGltZXJFdmVudD4KLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi0vLyBDb250ZXh0U2hhZG93IG5lZWRzIGEgc2NyYXRjaCBpbWFnZSBhcyB0aGUgYnVmZmVy
IGZvciB0aGUgYmx1ciBmaWx0ZXIuCi0vLyBJbnN0ZWFkIG9mIGNyZWF0aW5nIGFuZCBkZXN0cm95
aW5nIHRoZSBidWZmZXIgZm9yIGV2ZXJ5IG9wZXJhdGlvbiwKLS8vIHdlIGNyZWF0ZSBhIGJ1ZmZl
ciB3aGljaCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgcHVyZ2VkIHZpYSBhIHRpbWVyLgotCi1jbGFz
cyBTaGFkb3dCdWZmZXI6IHB1YmxpYyBRT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBTaGFkb3dCdWZm
ZXIoUU9iamVjdCogcGFyZW50ID0gMCk7Ci0KLSAgICBRSW1hZ2UqIHNjcmF0Y2hJbWFnZShjb25z
dCBRU2l6ZSYgc2l6ZSk7Ci0KLSAgICB2b2lkIHNjaGVkdWxlUHVyZ2UoKTsKLQotcHJvdGVjdGVk
OgotICAgIHZvaWQgdGltZXJFdmVudChRVGltZXJFdmVudCogZXZlbnQpOwotCi1wcml2YXRlOgot
ICAgIFFJbWFnZSBpbWFnZTsKLSAgICBpbnQgdGltZXJJZDsKLX07Ci0KLVNoYWRvd0J1ZmZlcjo6
U2hhZG93QnVmZmVyKFFPYmplY3QqIHBhcmVudCkKLSAgICA6IFFPYmplY3QocGFyZW50KQotICAg
ICwgdGltZXJJZCgtMSkKLXsKLX0KLQotUUltYWdlKiBTaGFkb3dCdWZmZXI6OnNjcmF0Y2hJbWFn
ZShjb25zdCBRU2l6ZSYgc2l6ZSkKLXsKLSAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7Ci0g
ICAgaW50IGhlaWdodCA9IHNpemUuaGVpZ2h0KCk7Ci0KLSAgICAvLyBXZSBkbyBub3QgbmVlZCB0
byByZWNyZWF0ZSB0aGUgYnVmZmVyIGlmIHRoZSBidWZmZXIgaXMgcmVhc29uYWJseQotICAgIC8v
IGxhcmdlciB0aGFuIHRoZSByZXF1ZXN0ZWQgc2l6ZS4gSG93ZXZlciwgaWYgdGhlIHJlcXVlc3Rl
ZCBzaXplIGlzCi0gICAgLy8gbXVjaCBzbWFsbGVyIHRoYW4gb3VyIGJ1ZmZlciwgcmVkdWNlIG91
ciBidWZmZXIgc28gdGhhdCB3ZSB3aWxsIG5vdAotICAgIC8vIGtlZXAgdG9vIG1hbnkgYWxsb2Nh
dGVkIHBpeGVscyBmb3IgdG9vIGxvbmcuCi0gICAgaWYgKCFpbWFnZS5pc051bGwoKSAmJiAoaW1h
Z2Uud2lkdGgoKSA+IHdpZHRoKSAmJiAoaW1hZ2UuaGVpZ2h0KCkgPiBoZWlnaHQpKQotICAgICAg
ICBpZiAoKCgyICogd2lkdGgpID4gaW1hZ2Uud2lkdGgoKSkgJiYgKCgyICogaGVpZ2h0KSA+IGlt
YWdlLmhlaWdodCgpKSkgewotICAgICAgICAgICAgaW1hZ2UuZmlsbCgwKTsKLSAgICAgICAgICAg
IHJldHVybiAmaW1hZ2U7Ci0gICAgICAgIH0KLQotICAgIC8vIFJvdW5kIHRvIHRoZSBuZWFyZXN0
IDMyIHBpeGVscyBzbyB3ZSBkbyBub3QgZ3JvdyB0aGUgYnVmZmVyIGV2ZXJ5dGltZQotICAgIC8v
IHRoZXJlIGlzIGxhcmdlciByZXF1ZXN0IGJ5IDEgcGl4ZWwuCi0gICAgd2lkdGggPSAoMSArICh3
aWR0aCA+PiA1KSkgPDwgNTsKLSAgICBoZWlnaHQgPSAoMSArIChoZWlnaHQgPj4gNSkpIDw8IDU7
Ci0KLSAgICBpbWFnZSA9IFFJbWFnZSh3aWR0aCwgaGVpZ2h0LCBRSW1hZ2U6OkZvcm1hdF9BUkdC
MzJfUHJlbXVsdGlwbGllZCk7Ci0gICAgaW1hZ2UuZmlsbCgwKTsKLSAgICByZXR1cm4gJmltYWdl
OwotfQotCi12b2lkIFNoYWRvd0J1ZmZlcjo6c2NoZWR1bGVQdXJnZSgpCi17Ci0gICAgc3RhdGlj
IGNvbnN0IGRvdWJsZSBCdWZmZXJQdXJnZURlbGF5ID0gMjsgLy8gc2Vjb25kcwotICAgIGlmICh0
aW1lcklkID49IDApCi0gICAgICAgIGtpbGxUaW1lcih0aW1lcklkKTsKLSAgICB0aW1lcklkID0g
c3RhcnRUaW1lcihCdWZmZXJQdXJnZURlbGF5ICogMTAwMCk7Ci19Ci0KLXZvaWQgU2hhZG93QnVm
ZmVyOjp0aW1lckV2ZW50KFFUaW1lckV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQtPnRp
bWVySWQoKSA9PSB0aW1lcklkKSB7Ci0gICAgICAgIGtpbGxUaW1lcih0aW1lcklkKTsKLSAgICAg
ICAgaW1hZ2UgPSBRSW1hZ2UoKTsKLSAgICB9Ci0gICAgUU9iamVjdDo6dGltZXJFdmVudChldmVu
dCk7Ci19Ci0KLVFfR0xPQkFMX1NUQVRJQyhTaGFkb3dCdWZmZXIsIHNjcmF0Y2hTaGFkb3dCdWZm
ZXIpCi0KLVBsYXRmb3JtQ29udGV4dCBDb250ZXh0U2hhZG93OjpiZWdpblNoYWRvd0xheWVyKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBsYXllckFyZWEpCi17Ci0g
ICAgLy8gU2V0IG1fYmx1ckRpc3RhbmNlLgotICAgIGFkanVzdEJsdXJEaXN0YW5jZShjb250ZXh0
KTsKLQotICAgIFBsYXRmb3JtQ29udGV4dCBwID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7
Ci0KLSAgICBRUmVjdCBjbGlwUmVjdDsKLSAgICBpZiAocC0+aGFzQ2xpcHBpbmcoKSkKLSNpZiBR
VF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNCwgOCwgMCkKLSAgICAgICAgY2xpcFJlY3Qg
PSBwLT5jbGlwQm91bmRpbmdSZWN0KCkudG9BbGlnbmVkUmVjdCgpOwotI2Vsc2UKLSAgICAgICAg
Y2xpcFJlY3QgPSBwLT5jbGlwUmVnaW9uKCkuYm91bmRpbmdSZWN0KCk7Ci0jZW5kaWYKLSAgICBl
bHNlCi0gICAgICAgIGNsaXBSZWN0ID0gcC0+dHJhbnNmb3JtKCkuaW52ZXJ0ZWQoKS5tYXBSZWN0
KHAtPndpbmRvdygpKTsKLQotICAgIC8vIFNldCBtX2xheWVyT3JpZ2luLCBtX2xheWVyQ29udGV4
dFRyYW5zbGF0aW9uLCBtX3NvdXJjZVJlY3QuCi0gICAgSW50UmVjdCBjbGlwKGNsaXBSZWN0Lngo
KSwgY2xpcFJlY3QueSgpLCBjbGlwUmVjdC53aWR0aCgpLCBjbGlwUmVjdC5oZWlnaHQoKSk7Ci0g
ICAgSW50UmVjdCBsYXllclJlY3QgPSBjYWxjdWxhdGVMYXllckJvdW5kaW5nUmVjdChjb250ZXh0
LCBsYXllckFyZWEsIGNsaXApOwotCi0gICAgLy8gRG9uJ3QgcGFpbnQgaWYgd2UgYXJlIHRvdGFs
bHkgb3V0c2lkZSB0aGUgY2xpcCByZWdpb24uCi0gICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiAwOwotCi0gICAgU2hhZG93QnVmZmVyKiBzaGFkb3dCdWZmZXIgPSBz
Y3JhdGNoU2hhZG93QnVmZmVyKCk7Ci0gICAgUUltYWdlKiBzaGFkb3dJbWFnZSA9IHNoYWRvd0J1
ZmZlci0+c2NyYXRjaEltYWdlKGxheWVyUmVjdC5zaXplKCkpOwotICAgIG1fbGF5ZXJJbWFnZSA9
IFFJbWFnZSgqc2hhZG93SW1hZ2UpOwotCi0gICAgbV9sYXllckNvbnRleHQgPSBuZXcgUVBhaW50
ZXI7Ci0gICAgbV9sYXllckNvbnRleHQtPmJlZ2luKCZtX2xheWVySW1hZ2UpOwotICAgIG1fbGF5
ZXJDb250ZXh0LT5zZXRGb250KHAtPmZvbnQoKSk7Ci0gICAgbV9sYXllckNvbnRleHQtPnRyYW5z
bGF0ZShtX2xheWVyQ29udGV4dFRyYW5zbGF0aW9uKTsKLSAgICByZXR1cm4gbV9sYXllckNvbnRl
eHQ7Ci19Ci0KLXZvaWQgQ29udGV4dFNoYWRvdzo6ZW5kU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0KQotewotICAgIG1fbGF5ZXJDb250ZXh0LT5lbmQoKTsKLSAgICBkZWxldGUg
bV9sYXllckNvbnRleHQ7Ci0gICAgbV9sYXllckNvbnRleHQgPSAwOwotCi0gICAgaWYgKG1fdHlw
ZSA9PSBCbHVyU2hhZG93KSB7Ci0gICAgICAgIGJsdXJMYXllckltYWdlKG1fbGF5ZXJJbWFnZS5i
aXRzKCksIEludFNpemUobV9sYXllckltYWdlLndpZHRoKCksIG1fbGF5ZXJJbWFnZS5oZWlnaHQo
KSksCi0gICAgICAgICAgICAgICAgICAgICAgIG1fbGF5ZXJJbWFnZS5ieXRlc1BlckxpbmUoKSk7
Ci0gICAgfQotCi0gICAgaWYgKG1fdHlwZSAhPSBOb1NoYWRvdykgewotICAgICAgICAvLyAiQ29s
b3JpemUiIHdpdGggdGhlIHJpZ2h0IHNoYWRvdyBjb2xvci4KLSAgICAgICAgUVBhaW50ZXIgcCgm
bV9sYXllckltYWdlKTsKLSAgICAgICAgcC5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNv
bXBvc2l0aW9uTW9kZV9Tb3VyY2VJbik7Ci0gICAgICAgIHAuZmlsbFJlY3QobV9sYXllckltYWdl
LnJlY3QoKSwgbV9jb2xvci5yZ2IoKSk7Ci0gICAgICAgIHAuZW5kKCk7Ci0gICAgfQotCi0gICAg
Y29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmRyYXdJbWFnZShtX2xheWVyT3JpZ2luLCBtX2xh
eWVySW1hZ2UsIG1fc291cmNlUmVjdCk7Ci0KLSAgICBzY3JhdGNoU2hhZG93QnVmZmVyKCktPnNj
aGVkdWxlUHVyZ2UoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0ZvbnRRdC5jcHAKaW5kZXggYTVhMTZlMC4uMWNkMmNjYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwCkBAIC0yMyw3ICsyMyw2IEBA
CiAjaW5jbHVkZSAiRm9udC5oIgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5j
bHVkZSAiQ29udGV4dFNoYWRvdy5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2lu
Y2x1ZGUgIkZvbnRGYWxsYmFja0xpc3QuaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKQEAg
LTM0LDYgKzMzLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNpbmNsdWRlICJTaGFkb3dC
bHVyLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogCiAjaW5jbHVkZSA8UUJydXNoPgpAQCAtMTQy
LDQwICsxNDIsNDIgQEAgc3RhdGljIHZvaWQgZHJhd1RleHRDb21tb24oR3JhcGhpY3NDb250ZXh0
KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXQKICAgICAgICAgICAgIFFSZWN0
RiBib3VuZGluZ1JlY3QocG9pbnQueCgpICsgeDEsIHBvaW50LnkoKSAtIGFzY2VudCwgeDIgLSB4
MSwgZm0uaGVpZ2h0KCkpOwogICAgICAgICAgICAgUVJlY3RGIGNsaXAgPSBib3VuZGluZ1JlY3Q7
CiAKLSAgICAgICAgICAgIENvbnRleHRTaGFkb3cqIGN0eFNoYWRvdyA9IGN0eC0+Y29udGV4dFNo
YWRvdygpOwotCi0gICAgICAgICAgICBpZiAoY3R4U2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNo
YWRvdzo6Tm9TaGFkb3cpIHsKKyAgICAgICAgICAgIFNoYWRvd0JsdXIqIGN0eFNoYWRvdyA9IGN0
eC0+c2hhZG93Qmx1cigpOworICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9IFNo
YWRvd0JsdXI6Ok5vU2hhZG93KSB7CisgICAgICAgICAgICAgICAgY29uc3QgUVBvaW50RiBzaGFk
b3dPZmZzZXQoY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpLCBjdHgtPnN0YXRlKCku
c2hhZG93T2Zmc2V0LmhlaWdodCgpKTsKICAgICAgICAgICAgICAgICBxcmVhbCBkeDEgPSAwLCBk
eDIgPSAwLCBkeTEgPSAwLCBkeTIgPSAwOwotICAgICAgICAgICAgICAgIGlmIChjdHhTaGFkb3ct
Pm9mZnNldCgpLngoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIGR4MiA9IGN0eFNoYWRvdy0+
b2Zmc2V0KCkueCgpOworICAgICAgICAgICAgICAgIGlmIChzaGFkb3dPZmZzZXQueCgpID4gMCkK
KyAgICAgICAgICAgICAgICAgICAgZHgyID0gc2hhZG93T2Zmc2V0LngoKTsKICAgICAgICAgICAg
ICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGR4MSA9IC1jdHhTaGFkb3ctPm9mZnNldCgp
LngoKTsKLSAgICAgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT5vZmZzZXQoKS55KCkgPiAwKQot
ICAgICAgICAgICAgICAgICAgICBkeTIgPSBjdHhTaGFkb3ctPm9mZnNldCgpLnkoKTsKKyAgICAg
ICAgICAgICAgICAgICAgZHgxID0gLXNoYWRvd09mZnNldC54KCk7CisgICAgICAgICAgICAgICAg
aWYgKHNoYWRvd09mZnNldC55KCkgPiAwKQorICAgICAgICAgICAgICAgICAgICBkeTIgPSBzaGFk
b3dPZmZzZXQueSgpOwogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAg
ZHkxID0gLWN0eFNoYWRvdy0+b2Zmc2V0KCkueSgpOworICAgICAgICAgICAgICAgICAgICBkeTEg
PSAtc2hhZG93T2Zmc2V0LnkoKTsKICAgICAgICAgICAgICAgICAvLyBleHBhbmQgdGhlIGNsaXAg
cmVjdCB0byBpbmNsdWRlIHRoZSB0ZXh0IHNoYWRvdyBhcyB3ZWxsCisgICAgICAgICAgICAgICAg
Y29uc3QgZmxvYXQgYmx1ckRpc3RhbmNlID0gY3R4LT5zdGF0ZSgpLnNoYWRvd0JsdXI7CiAgICAg
ICAgICAgICAgICAgY2xpcC5hZGp1c3QoZHgxLCBkeDIsIGR5MSwgZHkyKTsKLSAgICAgICAgICAg
ICAgICBjbGlwLmFkanVzdCgtY3R4U2hhZG93LT5tX2JsdXJEaXN0YW5jZSwgLWN0eFNoYWRvdy0+
bV9ibHVyRGlzdGFuY2UsIGN0eFNoYWRvdy0+bV9ibHVyRGlzdGFuY2UsIGN0eFNoYWRvdy0+bV9i
bHVyRGlzdGFuY2UpOworICAgICAgICAgICAgICAgIGNsaXAuYWRqdXN0KC1ibHVyRGlzdGFuY2Us
IC1ibHVyRGlzdGFuY2UsIGJsdXJEaXN0YW5jZSwgYmx1ckRpc3RhbmNlKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIHAtPnNhdmUoKTsKICAgICAgICAgICAgIHAtPnNldENsaXBSZWN0KGNs
aXAudG9SZWN0KCksIFF0OjpJbnRlcnNlY3RDbGlwKTsKICAgICAgICAgICAgIHB0LnNldFkocHQu
eSgpIC0gYXNjZW50KTsKIAotICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+bV90eXBlICE9IENv
bnRleHRTaGFkb3c6Ok5vU2hhZG93KSB7Ci0gICAgICAgICAgICAgICAgQ29udGV4dFNoYWRvdyog
Y3R4U2hhZG93ID0gY3R4LT5jb250ZXh0U2hhZG93KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFj
dHhTaGFkb3ctPm11c3RVc2VDb250ZXh0U2hhZG93KGN0eCkpIHsKKyAgICAgICAgICAgIGlmIChj
dHhTaGFkb3ctPnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpOb1NoYWRvdykgeworICAgICAgICAgICAg
ICAgIFNoYWRvd0JsdXIqIGN0eFNoYWRvdyA9IGN0eC0+c2hhZG93Qmx1cigpOworICAgICAgICAg
ICAgICAgIGlmICghY3R4U2hhZG93LT5tdXN0VXNlU2hhZG93Qmx1cihjdHgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIHAtPnNhdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgcC0+c2V0UGVuKGN0
eFNoYWRvdy0+bV9jb2xvcik7Ci0gICAgICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShjdHhT
aGFkb3ctPm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcC0+c2V0UGVuKGN0eC0+c3Rh
dGUoKS5zaGFkb3dDb2xvcik7CisgICAgICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShRUG9p
bnRGKGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY3R4LT5zdGF0ZSgpLnNoYWRv
d09mZnNldC5oZWlnaHQoKSkpOwogICAgICAgICAgICAgICAgICAgICBsaW5lLmRyYXcocCwgcHQp
OwogICAgICAgICAgICAgICAgICAgICBwLT5yZXN0b3JlKCk7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBjdHhT
aGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4LCBib3VuZGluZ1JlY3QpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgeworICAgICAgICAgICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBjdHhTaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4
LCBib3VuZGluZ1JlY3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFk
b3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFNpbmNlIGl0IHdpbGwgYmUgYmx1cnJlZCBhbnl3YXksIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVu
ZGVyIGhpbnRzLgogICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0Rm9u
dChwLT5mb250KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0
UGVuKGN0eFNoYWRvdy0+bV9jb2xvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dQ
YWludGVyLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmUuZHJhdyhzaGFkb3dQYWludGVyLCBwdCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjdHhTaGFkb3ctPmVuZFNoYWRvd0xheWVyKGN0eCk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KQEAgLTIwMSw0MCArMjAzLDQzIEBAIHN0YXRpYyB2b2lkIGRyYXdUZXh0Q29tbW9uKEdy
YXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0CiAgICAg
aWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkKICAgICAgICAgdGV4
dFN0cm9rZVBhdGguYWRkVGV4dChwdCwgZm9udCwgc3RyaW5nKTsKIAotICAgIENvbnRleHRTaGFk
b3cqIGN0eFNoYWRvdyA9IGN0eC0+Y29udGV4dFNoYWRvdygpOwotICAgIGlmIChjdHhTaGFkb3ct
Pm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpOb1NoYWRvdykgeworICAgIFNoYWRvd0JsdXIqIGN0
eFNoYWRvdyA9IGN0eC0+c2hhZG93Qmx1cigpOworICAgIGlmIChjdHgtPmhhc1NoYWRvdygpICYm
IGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6Ok5vU2hhZG93KSB7CiAgICAgICAgIGlm
IChjdHgtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVGaWxsKSB7Ci0gICAgICAgICAgICBp
ZiAoY3R4U2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Qmx1clNoYWRvdykgeworICAg
ICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6OkJsdXJTaGFkb3cp
IHsKICAgICAgICAgICAgICAgICBwLT5zYXZlKCk7Ci0gICAgICAgICAgICAgICAgcC0+c2V0UGVu
KGN0eFNoYWRvdy0+bV9jb2xvcik7Ci0gICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKGN0eFNo
YWRvdy0+b2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIHAtPnNldFBlbihjdHgtPnN0YXRlKCku
c2hhZG93Q29sb3IpOworICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShRUG9pbnRGKGN0eC0+
c3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5o
ZWlnaHQoKSkpOwogICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KHB0LCBzdHJpbmcsIGZsYWdz
LCBydW4uZXhwYW5zaW9uKCkpOwogICAgICAgICAgICAgICAgIHAtPnJlc3RvcmUoKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgUUZvbnRNZXRyaWNzIGZtKGZvbnQpOwog
ICAgICAgICAgICAgICAgIFFSZWN0RiBib3VuZGluZ1JlY3QocHQueCgpLCBwb2ludC55KCkgLSBm
bS5hc2NlbnQoKSwgZm0ud2lkdGgoc3RyaW5nLCAtMSwgZmxhZ3MpLCBmbS5oZWlnaHQoKSk7Ci0g
ICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBjdHhTaGFkb3ctPmJlZ2lu
U2hhZG93TGF5ZXIoY3R4LCBib3VuZGluZ1JlY3QpOwotICAgICAgICAgICAgICAgIGlmIChzaGFk
b3dQYWludGVyKSB7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250
ZXh0ID0gY3R4U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eCwgYm91bmRpbmdSZWN0KTsKKyAg
ICAgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICBR
UGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
OwogICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQgYW55d2F5
LCB3ZSBkb24ndCBjYXJlIGFib3V0IHJlbmRlciBoaW50cy4KICAgICAgICAgICAgICAgICAgICAg
c2hhZG93UGFpbnRlci0+c2V0Rm9udChwLT5mb250KCkpOwotICAgICAgICAgICAgICAgICAgICBz
aGFkb3dQYWludGVyLT5zZXRQZW4oY3R4U2hhZG93LT5tX2NvbG9yKTsKKyAgICAgICAgICAgICAg
ICAgICAgc2hhZG93UGFpbnRlci0+c2V0UGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7CiAg
ICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmRyYXdUZXh0KHB0LCBzdHJpbmcsIGZs
YWdzLCBydW4uZXhwYW5zaW9uKCkpOwogICAgICAgICAgICAgICAgICAgICBjdHhTaGFkb3ctPmVu
ZFNoYWRvd0xheWVyKGN0eCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkg
ewotICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6OkJs
dXJTaGFkb3cpIHsKLSAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoY3R4U2hhZG93LT5vZmZz
ZXQoKSk7Ci0gICAgICAgICAgICAgICAgcC0+c3Ryb2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBl
bihjdHhTaGFkb3ctPm1fY29sb3IpKTsKLSAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoLWN0
eFNoYWRvdy0+b2Zmc2V0KCkpOworICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9
IFNoYWRvd0JsdXI6OkJsdXJTaGFkb3cpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnRG
IHNoYWRvd09mZnNldChjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0eC0+c3Rh
dGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0
ZShzaGFkb3dPZmZzZXQpOworICAgICAgICAgICAgICAgIHAtPnN0cm9rZVBhdGgodGV4dFN0cm9r
ZVBhdGgsIFFQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKSk7CisgICAgICAgICAgICAgICAg
cC0+dHJhbnNsYXRlKC1zaGFkb3dPZmZzZXQpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICBRRm9udE1ldHJpY3MgZm0oZm9udCk7CiAgICAgICAgICAgICAgICAgUVJlY3RG
IGJvdW5kaW5nUmVjdChwdC54KCksIHBvaW50LnkoKSAtIGZtLmFzY2VudCgpLCBmbS53aWR0aChz
dHJpbmcsIC0xLCBmbGFncyksIGZtLmhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICBRUGFpbnRl
ciogc2hhZG93UGFpbnRlciA9IGN0eFNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHgsIGJvdW5k
aW5nUmVjdCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKKyAgICAgICAg
ICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBjdHhTaGFkb3ctPmJlZ2lu
U2hhZG93TGF5ZXIoY3R4LCBib3VuZGluZ1JlY3QpOworICAgICAgICAgICAgICAgIGlmIChzaGFk
b3dDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVy
ID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAgICAgICAgICAg
IC8vIFNpbmNlIGl0IHdpbGwgYmUgYmx1cnJlZCBhbnl3YXksIHdlIGRvbid0IGNhcmUgYWJvdXQg
cmVuZGVyIGhpbnRzLgogICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRGb250
KHAtPmZvbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnN0cm9rZVBh
dGgodGV4dFN0cm9rZVBhdGgsIFFQZW4oY3R4U2hhZG93LT5tX2NvbG9yKSk7CisgICAgICAgICAg
ICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnN0cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgsIFFQZW4o
Y3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKSk7CiAgICAgICAgICAgICAgICAgICAgIGN0eFNoYWRv
dy0+ZW5kU2hhZG93TGF5ZXIoY3R4KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CkBAIC0zMjgsNyArMzMzLDcgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLAogICAgIEFTU0VSVCgh
c2hvdWxkU3Ryb2tlKTsKIAogICAgIC8vIFNoYWRvd2VkIHRleHQgc2hvdWxkIGFsd2F5cyB0YWtl
IHRoZSBjb21wbGV4IHBhdGguCi0gICAgQVNTRVJUKGNvbnRleHQtPmNvbnRleHRTaGFkb3coKS0+
bV90eXBlID09IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KTsKKyAgICBBU1NFUlQoY29udGV4dC0+
Y29udGV4dFNoYWRvdygpLT50eXBlKCkgPT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpOwogCiAgICAg
aWYgKCFzaG91bGRGaWxsICYmICFzaG91bGRTdHJva2UpCiAgICAgICAgIHJldHVybjsKQEAgLTM2
MSw3ICszNjYsNyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsCiAgICAgUVBhaW50ZXIqIHBhaW50
ZXIgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIENvbnRleHRTaGFkb3cqIHNo
YWRvdyA9IGNvbnRleHQtPmNvbnRleHRTaGFkb3coKTsKLSAgICBzd2l0Y2ggKHNoYWRvdy0+bV90
eXBlKSB7CisgICAgc3dpdGNoIChzaGFkb3ctPnR5cGUoKSkgewogICAgIGNhc2UgQ29udGV4dFNo
YWRvdzo6U29saWRTaGFkb3c6IHsKICAgICAgICAgUVBlbiBwcmV2aW91c1BlbiA9IHBhaW50ZXIt
PnBlbigpOwogICAgICAgICBwYWludGVyLT5zZXRQZW4oc2hhZG93LT5tX2NvbG9yKTsKQEAgLTM3
NCw4ICszNzksOSBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsCiAgICAgY2FzZSBDb250ZXh0U2hh
ZG93OjpCbHVyU2hhZG93OiB7CiAgICAgICAgIHFyZWFsIGhlaWdodCA9IHJhd0ZvbnQuYXNjZW50
KCkgKyByYXdGb250LmRlc2NlbnQoKSArIDE7CiAgICAgICAgIFFSZWN0RiBib3VuZGluZ1JlY3Qo
cG9pbnQueCgpLCBwb2ludC55KCkgLSByYXdGb250LmFzY2VudCgpLCB3aWR0aCwgaGVpZ2h0KTsK
LSAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5
ZXIoY29udGV4dCwgYm91bmRpbmdSZWN0KTsKLSAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93LT5iZWdpblNo
YWRvd0xheWVyKGNvbnRleHQsIGJvdW5kaW5nUmVjdCk7CisgICAgICAgIGlmIChzaGFkb3dDb250
ZXh0KSB7CisgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0UGVu
KHNoYWRvdy0+bV9jb2xvcik7CiAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5kcmF3R2x5cGhS
dW4ocG9pbnQsIHF0R2x5cGhzKTsKICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIo
Y29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0NvbnRleHRRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKaW5kZXggNzkzY2RlMC4uODQ5OWU2NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
Q29udGV4dFF0LmNwcApAQCAtNDQsMTMgKzQ0LDEzIEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkNvbnRleHRTaGFkb3cuaCIK
ICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUg
IlBhdGguaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgog
I2luY2x1ZGUgIlRyYW5zcGFyZW5jeUxheWVyLmgiCiAKICNpbmNsdWRlIDxRQnJ1c2g+CkBAIC0x
OTYsOCArMTk2LDggQEAgcHVibGljOgogICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHk7CiAgICAgYm9vbCBpbml0aWFsU21vb3RoUGl4bWFwVHJhbnNmb3Jt
SGludDsKIAotICAgIENvbnRleHRTaGFkb3cgc2hhZG93OwotICAgIFFTdGFjazxDb250ZXh0U2hh
ZG93PiBzaGFkb3dTdGFjazsKKyAgICBTaGFkb3dCbHVyIHNoYWRvdzsKKyAgICBRU3RhY2s8U2hh
ZG93Qmx1cj4gc2hhZG93U3RhY2s7CiAKICAgICBRUmVjdEYgY2xpcEJvdW5kaW5nUmVjdCgpIGNv
bnN0CiAgICAgewpAQCAtMzA5LDcgKzMwOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0
b3JlUGxhdGZvcm1TdGF0ZSgpCiAgICAgbV9kYXRhLT5wKCktPnJlc3RvcmUoKTsKIAogICAgIGlm
IChtX2RhdGEtPnNoYWRvd1N0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgbV9kYXRhLT5zaGFkb3cg
PSBDb250ZXh0U2hhZG93KCk7CisgICAgICAgIG1fZGF0YS0+c2hhZG93ID0gU2hhZG93Qmx1cihG
bG9hdFNpemUobV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0JsdXIpLCBtX3N0YXRl
LnNoYWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dDb2xvclNw
YWNlKTsKICAgICBlbHNlCiAgICAgICAgIG1fZGF0YS0+c2hhZG93ID0gbV9kYXRhLT5zaGFkb3dT
dGFjay5wb3AoKTsKIH0KQEAgLTQ5NSwzMSArNDk1LDI5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHBsYXRmb3JtUGF0aC5zZXRGaWxsUnVs
ZSh0b1F0RmlsbFJ1bGUoZmlsbFJ1bGUoKSkpOwogCiAgICAgaWYgKGhhc1NoYWRvdygpKSB7Ci0g
ICAgICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHRTaGFkb3coKTsKLSAgICAgICAg
aWYgKHNoYWRvdy0+bXVzdFVzZUNvbnRleHRTaGFkb3codGhpcykgfHwgbV9zdGF0ZS5maWxsUGF0
dGVybiB8fCBtX3N0YXRlLmZpbGxHcmFkaWVudCkKKyAgICAgICAgU2hhZG93Qmx1ciogc2hhZG93
ID0gc2hhZG93Qmx1cigpOworICAgICAgICBpZiAoc2hhZG93LT5tdXN0VXNlU2hhZG93Qmx1cih0
aGlzKSB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuIHx8IG1fc3RhdGUuZmlsbEdyYWRpZW50KQogICAg
ICAgICB7Ci0gICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvdy0+YmVn
aW5TaGFkb3dMYXllcih0aGlzLCBwbGF0Zm9ybVBhdGguY29udHJvbFBvaW50UmVjdCgpKTsKLSAg
ICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRl
eHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgcGxhdGZv
cm1QYXRoLmNvbnRyb2xQb2ludFJlY3QoKSk7CisgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4
dCkgeworICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUuZmls
bFBhdHRlcm4pIHsKICAgICAgICAgICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGFmZmluZTsK
LSAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNfY2Fz
dDxxcmVhbD4oc2hhZG93LT5tX2NvbG9yLmFscGhhKCkpIC8gMjU1KTsKICAgICAgICAgICAgICAg
ICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFBhdGgocGxhdGZvcm1QYXRoLCBRQnJ1c2gobV9zdGF0
ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSkpKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KSB7CiAgICAgICAgICAgICAg
ICAgICAgIFFCcnVzaCBicnVzaCgqbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGll
bnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShtX3N0YXRlLmZp
bGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgc2hhZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVhbD4oc2hhZG93LT5t
X2NvbG9yLmFscGhhKCkpIC8gMjU1KTsKICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRl
ci0+ZmlsbFBhdGgocGxhdGZvcm1QYXRoLCBicnVzaCk7CiAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gc2hhZG93LT5tX2Nv
bG9yOwotICAgICAgICAgICAgICAgICAgICBzaGFkb3dDb2xvci5zZXRBbHBoYUYoc2hhZG93Q29s
b3IuYWxwaGFGKCkgKiBwLT5icnVzaCgpLmNvbG9yKCkuYWxwaGFGKCkpOwotICAgICAgICAgICAg
ICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIHNoYWRvd0NvbG9y
KTsKKyAgICAgICAgICAgICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gbV9zdGF0ZS5zaGFk
b3dDb2xvcjsKKyAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFBhdGgocGxh
dGZvcm1QYXRoLCBwLT5icnVzaCgpLmNvbG9yKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKHRoaXMpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUVBvaW50RiBvZmZzZXQgPSBzaGFkb3ctPm9m
ZnNldCgpOworICAgICAgICAgICAgUVBvaW50RiBvZmZzZXQobV9zdGF0ZS5zaGFkb3dPZmZzZXQu
d2lkdGgoKSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICAgICAgcC0+
dHJhbnNsYXRlKG9mZnNldCk7Ci0gICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFk
b3ctPm1fY29sb3I7CisgICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBtX3N0YXRlLnNo
YWRvd0NvbG9yOwogICAgICAgICAgICAgc2hhZG93Q29sb3Iuc2V0QWxwaGFGKHNoYWRvd0NvbG9y
LmFscGhhRigpICogcC0+YnJ1c2goKS5jb2xvcigpLmFscGhhRigpKTsKICAgICAgICAgICAgIHAt
PmZpbGxQYXRoKHBsYXRmb3JtUGF0aCwgc2hhZG93Q29sb3IpOwogICAgICAgICAgICAgcC0+dHJh
bnNsYXRlKC1vZmZzZXQpOwpAQCAtNTQ3LDMwICs1NDUsMjkgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBwbGF0Zm9ybVBhdGguc2V0Rmls
bFJ1bGUodG9RdEZpbGxSdWxlKGZpbGxSdWxlKCkpKTsKIAogICAgIGlmIChoYXNTaGFkb3coKSkg
ewotICAgICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7Ci0gICAg
ICAgIGlmIChzaGFkb3ctPm11c3RVc2VDb250ZXh0U2hhZG93KHRoaXMpIHx8IG1fc3RhdGUuc3Ry
b2tlUGF0dGVybiB8fCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50KQorICAgICAgICBTaGFkb3dCbHVy
KiBzaGFkb3cgPSBzaGFkb3dCbHVyKCk7CisgICAgICAgIGlmIChzaGFkb3ctPm11c3RVc2VTaGFk
b3dCbHVyKHRoaXMpIHx8IG1fc3RhdGUuc3Ryb2tlUGF0dGVybiB8fCBtX3N0YXRlLnN0cm9rZUdy
YWRpZW50KQogICAgICAgICB7CiAgICAgICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0g
cGxhdGZvcm1QYXRoLmNvbnRyb2xQb2ludFJlY3QoKTsKICAgICAgICAgICAgIGJvdW5kaW5nUmVj
dC5pbmZsYXRlKHBlbi5taXRlckxpbWl0KCkgKyBwZW4ud2lkdGhGKCkpOwotICAgICAgICAgICAg
UVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywg
Ym91bmRpbmdSZWN0KTsKLSAgICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CisgICAgICAg
ICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93
TGF5ZXIodGhpcywgYm91bmRpbmdSZWN0KTsKKyAgICAgICAgICAgIGlmIChzaGFkb3dDb250ZXh0
KSB7CisgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5zdHJv
a2VHcmFkaWVudCkgewogICAgICAgICAgICAgICAgICAgICBRQnJ1c2ggYnJ1c2goKm1fc3RhdGUu
c3Ryb2tlR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CiAgICAgICAgICAgICAgICAgICAg
IGJydXNoLnNldFRyYW5zZm9ybShtX3N0YXRlLnN0cm9rZUdyYWRpZW50LT5ncmFkaWVudFNwYWNl
VHJhbnNmb3JtKCkpOwogICAgICAgICAgICAgICAgICAgICBRUGVuIHNoYWRvd1BlbihwZW4pOwog
ICAgICAgICAgICAgICAgICAgICBzaGFkb3dQZW4uc2V0QnJ1c2goYnJ1c2gpOwotICAgICAgICAg
ICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPihz
aGFkb3ctPm1fY29sb3IuYWxwaGEoKSkgLyAyNTUpOwogICAgICAgICAgICAgICAgICAgICBzaGFk
b3dQYWludGVyLT5zdHJva2VQYXRoKHBsYXRmb3JtUGF0aCwgc2hhZG93UGVuKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRP
cGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPihtX2RhdGEtPnNoYWRvdy5tX2NvbG9yLmFscGhhKCkp
IC8gMjU1KTsKICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c3Ryb2tlUGF0aChw
bGF0Zm9ybVBhdGgsIHBlbik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNo
YWRvdy0+ZW5kU2hhZG93TGF5ZXIodGhpcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBRUG9pbnRGIG9mZnNldCA9IHNoYWRvdy0+b2Zmc2V0KCk7CisgICAg
ICAgICAgICBRUG9pbnRGIG9mZnNldChtX3N0YXRlLnNoYWRvd09mZnNldC53aWR0aCgpLCBtX3N0
YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7CiAgICAgICAgICAgICBwLT50cmFuc2xhdGUob2Zm
c2V0KTsKLSAgICAgICAgICAgIFFDb2xvciBzaGFkb3dDb2xvciA9IHNoYWRvdy0+bV9jb2xvcjsK
KyAgICAgICAgICAgIFFDb2xvciBzaGFkb3dDb2xvciA9IG1fc3RhdGUuc2hhZG93Q29sb3I7CiAg
ICAgICAgICAgICBzaGFkb3dDb2xvci5zZXRBbHBoYUYoc2hhZG93Q29sb3IuYWxwaGFGKCkgKiBw
ZW4uY29sb3IoKS5hbHBoYUYoKSk7CiAgICAgICAgICAgICBRUGVuIHNoYWRvd1BlbihwZW4pOwog
ICAgICAgICAgICAgc2hhZG93UGVuLnNldENvbG9yKHNoYWRvd0NvbG9yKTsKQEAgLTY2OCw0NCAr
NjY1LDQyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpCiAKICAgICBRUGFpbnRlciogcCA9IG1fZGF0YS0+cCgpOwogICAgIFFSZWN0RiBub3Jt
YWxpemVkUmVjdCA9IHJlY3Qubm9ybWFsaXplZCgpOwotICAgIENvbnRleHRTaGFkb3cqIHNoYWRv
dyA9IGNvbnRleHRTaGFkb3coKTsKKyAgICBTaGFkb3dCbHVyKiBzaGFkb3cgPSBzaGFkb3dCbHVy
KCk7CiAKICAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikgewogICAgICAgICBRUGl4bWFwKiBp
bWFnZSA9IG1fc3RhdGUuZmlsbFBhdHRlcm4tPnRpbGVJbWFnZSgpLT5uYXRpdmVJbWFnZUZvckN1
cnJlbnRGcmFtZSgpOwotICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IGhhc1NoYWRv
dygpID8gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRoaXMsIG5vcm1hbGl6ZWRSZWN0KSA6IDA7
Ci0gICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCog
c2hhZG93Q29udGV4dCA9IGhhc1NoYWRvdygpID8gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRo
aXMsIG5vcm1hbGl6ZWRSZWN0KSA6IDA7CisgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7Cisg
ICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpOwogICAgICAgICAgICAgZHJhd1JlcGVhdFBhdHRlcm4oc2hhZG93UGFpbnRl
ciwgaW1hZ2UsIG5vcm1hbGl6ZWRSZWN0LCBtX3N0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRYKCks
IG1fc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFkoKSk7Ci0gICAgICAgICAgICBzaGFkb3dQYWlu
dGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2VJ
bik7Ci0gICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwg
c2hhZG93LT5tX2NvbG9yKTsKICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIodGhp
cyk7CiAgICAgICAgIH0KICAgICAgICAgZHJhd1JlcGVhdFBhdHRlcm4ocCwgaW1hZ2UsIG5vcm1h
bGl6ZWRSZWN0LCBtX3N0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRYKCksIG1fc3RhdGUuZmlsbFBh
dHRlcm4tPnJlcGVhdFkoKSk7CiAgICAgfSBlbHNlIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVudCkg
ewogICAgICAgICBRQnJ1c2ggYnJ1c2goKm1fc3RhdGUuZmlsbEdyYWRpZW50LT5wbGF0Zm9ybUdy
YWRpZW50KCkpOwogICAgICAgICBicnVzaC5zZXRUcmFuc2Zvcm0obV9zdGF0ZS5maWxsR3JhZGll
bnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgICAgIFFQYWludGVyKiBzaGFkb3dQ
YWludGVyID0gaGFzU2hhZG93KCkgPyBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgbm9y
bWFsaXplZFJlY3QpIDogMDsKLSAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gaGFzU2hhZG93KCkgPyBzaGFkb3ctPmJl
Z2luU2hhZG93TGF5ZXIodGhpcywgbm9ybWFsaXplZFJlY3QpIDogMDsKKyAgICAgICAgaWYgKHNo
YWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hh
ZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAgICBzaGFkb3dQYWludGVy
LT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwgYnJ1c2gpOwotICAgICAgICAgICAgc2hhZG93UGFp
bnRlci0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNl
SW4pOwotICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3Qs
IHNoYWRvdy0+bV9jb2xvcik7CiAgICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKHRo
aXMpOwogICAgICAgICB9CiAgICAgICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBicnVz
aCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGhhc1NoYWRvdygpKSB7Ci0gICAgICAgICAg
ICBpZiAoc2hhZG93LT5tdXN0VXNlQ29udGV4dFNoYWRvdyh0aGlzKSkgewotICAgICAgICAgICAg
ICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRo
aXMsIG5vcm1hbGl6ZWRSZWN0KTsKLSAgICAgICAgICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikg
ewotICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRpY19j
YXN0PHFyZWFsPihzaGFkb3ctPm1fY29sb3IuYWxwaGEoKSkgLyAyNTUpOworICAgICAgICAgICAg
aWYgKHNoYWRvdy0+bXVzdFVzZVNoYWRvd0JsdXIodGhpcykpIHsKKyAgICAgICAgICAgICAgICBH
cmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIo
dGhpcywgbm9ybWFsaXplZFJlY3QpOworICAgICAgICAgICAgICAgIGlmIChzaGFkb3dDb250ZXh0
KSB7CisgICAgICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93
Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1Bh
aW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBwLT5icnVzaCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcih0aGlzKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFNvbGlkIHJlY3Rhbmds
ZSBmaWxsIHdpdGggbm8gYmx1ciBzaGFkb3cgb3IgdHJhbnNmb3JtYXRpb25zIGFwcGxpZWQgY2Fu
IGJlIGRvbmUKICAgICAgICAgICAgICAgICAvLyBmYXN0ZXIgd2l0aG91dCB1c2luZyB0aGUgc2hh
ZG93IGxheWVyIGF0IGFsbC4KLSAgICAgICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBz
aGFkb3ctPm1fY29sb3I7CisgICAgICAgICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gbV9z
dGF0ZS5zaGFkb3dDb2xvcjsKICAgICAgICAgICAgICAgICBzaGFkb3dDb2xvci5zZXRBbHBoYUYo
c2hhZG93Q29sb3IuYWxwaGFGKCkgKiBwLT5icnVzaCgpLmNvbG9yKCkuYWxwaGFGKCkpOwotICAg
ICAgICAgICAgICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LnRyYW5zbGF0ZWQoc2hhZG93
LT5vZmZzZXQoKSksIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgICAgICBwLT5maWxsUmVjdChu
b3JtYWxpemVkUmVjdC50cmFuc2xhdGVkKFFQb2ludEYobV9zdGF0ZS5zaGFkb3dPZmZzZXQud2lk
dGgoKSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpKSwgc2hhZG93Q29sb3IpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTcyNCwxNiArNzE5LDIwIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvciwgQ29sb3JTCiAgICAgUVJlY3RGIG5vcm1hbGl6ZWRSZWN0ID0gcmVjdC5ub3JtYWxpemVk
KCk7CiAKICAgICBpZiAoaGFzU2hhZG93KCkpIHsKLSAgICAgICAgQ29udGV4dFNoYWRvdyogc2hh
ZG93ID0gY29udGV4dFNoYWRvdygpOwotICAgICAgICBpZiAoc2hhZG93LT5tdXN0VXNlQ29udGV4
dFNoYWRvdyh0aGlzKSkgewotICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBz
aGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgbm9ybWFsaXplZFJlY3QpOwotICAgICAgICAg
ICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKKyAgICAgICAgU2hhZG93Qmx1ciogc2hhZG93ID0gc2hh
ZG93Qmx1cigpOworICAgICAgICBpZiAoc2hhZG93LT5tdXN0VXNlU2hhZG93Qmx1cih0aGlzKSkg
eworICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93LT5i
ZWdpblNoYWRvd0xheWVyKHRoaXMsIG5vcm1hbGl6ZWRSZWN0KTsKKyAgICAgICAgICAgIGlmIChz
aGFkb3dDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIg
PSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgICAgICBzaGFk
b3dQYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9T
b3VyY2UpOwotICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6
ZWRSZWN0LCBzaGFkb3ctPm1fY29sb3IpOworICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXIt
PmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsKICAgICAgICAg
ICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKHRoaXMpOwogICAgICAgICAgICAgfQotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LnRyYW5z
bGF0ZWQoc2hhZG93LT5vZmZzZXQoKSksIHNoYWRvdy0+bV9jb2xvcik7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBtX3N0YXRlLnNoYWRvd0NvbG9y
OworICAgICAgICAgICAgc2hhZG93Q29sb3Iuc2V0QWxwaGFGKHNoYWRvd0NvbG9yLmFscGhhRigp
ICogcC0+YnJ1c2goKS5jb2xvcigpLmFscGhhRigpKTsKKyAgICAgICAgICAgIHAtPmZpbGxSZWN0
KG5vcm1hbGl6ZWRSZWN0LnRyYW5zbGF0ZWQoUVBvaW50RihtX3N0YXRlLnNoYWRvd09mZnNldC53
aWR0aCgpLCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSkpLCBzaGFkb3dDb2xvcik7Cisg
ICAgICAgIH0KICAgICB9CiAKICAgICBwLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwgbV9kYXRh
LT5zb2xpZENvbG9yKTsKQEAgLTc0OCwxOCArNzQ3LDIwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9w
TGVmCiAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90
dG9tTGVmdCwgYm90dG9tUmlnaHQpOwogICAgIFFQYWludGVyKiBwID0gbV9kYXRhLT5wKCk7CiAg
ICAgaWYgKGhhc1NoYWRvdygpKSB7Ci0gICAgICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNv
bnRleHRTaGFkb3coKTsKLSAgICAgICAgaWYgKHNoYWRvdy0+bXVzdFVzZUNvbnRleHRTaGFkb3co
dGhpcykpIHsKLSAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5i
ZWdpblNoYWRvd0xheWVyKHRoaXMsIHJlY3QpOwotICAgICAgICAgICAgaWYgKHNoYWRvd1BhaW50
ZXIpIHsKKyAgICAgICAgU2hhZG93Qmx1ciogc2hhZG93ID0gc2hhZG93Qmx1cigpOworICAgICAg
ICBpZiAoc2hhZG93LT5tdXN0VXNlU2hhZG93Qmx1cih0aGlzKSkgeworICAgICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRo
aXMsIHJlY3QpOworICAgICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAg
ICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOwogICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldENvbXBvc2l0aW9uTW9k
ZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7Ci0gICAgICAgICAgICAgICAgc2hh
ZG93UGFpbnRlci0+ZmlsbFBhdGgocGF0aC5wbGF0Zm9ybVBhdGgoKSwgUUNvbG9yKG1fZGF0YS0+
c2hhZG93Lm1fY29sb3IpKTsKKyAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUGF0
aChwYXRoLnBsYXRmb3JtUGF0aCgpLCBRQ29sb3IobV9zdGF0ZS5zaGFkb3dDb2xvcikpOwogICAg
ICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIodGhpcyk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwLT50cmFuc2xhdGUobV9kYXRhLT5zaGFk
b3cub2Zmc2V0KCkpOwotICAgICAgICAgICAgcC0+ZmlsbFBhdGgocGF0aC5wbGF0Zm9ybVBhdGgo
KSwgUUNvbG9yKG1fZGF0YS0+c2hhZG93Lm1fY29sb3IpKTsKLSAgICAgICAgICAgIHAtPnRyYW5z
bGF0ZSgtbV9kYXRhLT5zaGFkb3cub2Zmc2V0KCkpOworICAgICAgICAgICAgY29uc3QgUVBvaW50
RiBzaGFkb3dPZmZzZXQobV9zdGF0ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgbV9zdGF0ZS5zaGFk
b3dPZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICAgICAgcC0+dHJhbnNsYXRlKHNoYWRvd09mZnNl
dCk7CisgICAgICAgICAgICBwLT5maWxsUGF0aChwYXRoLnBsYXRmb3JtUGF0aCgpLCBRQ29sb3Io
bV9zdGF0ZS5zaGFkb3dDb2xvcikpOworICAgICAgICAgICAgcC0+dHJhbnNsYXRlKC1zaGFkb3dP
ZmZzZXQpOwogICAgICAgICB9CiAgICAgfQogICAgIHAtPmZpbGxQYXRoKHBhdGgucGxhdGZvcm1Q
YXRoKCksIFFDb2xvcihjb2xvcikpOwpAQCAtNzcwLDcgKzc3MSw3IEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0OjppblRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QKICAgICByZXR1cm4gbV9kYXRhLT5s
YXllckNvdW50OwogfQogCi1Db250ZXh0U2hhZG93KiBHcmFwaGljc0NvbnRleHQ6OmNvbnRleHRT
aGFkb3coKQorU2hhZG93Qmx1ciogR3JhcGhpY3NDb250ZXh0OjpzaGFkb3dCbHVyKCkKIHsKICAg
ICByZXR1cm4gJm1fZGF0YS0+c2hhZG93OwogfQpAQCAtNzkwLDYgKzc5MSwxOCBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAKICAgICBtX2RhdGEt
PnAoKS0+c2V0Q2xpcFJlY3QocmVjdCwgUXQ6OkludGVyc2VjdENsaXApOwogfQorSW50UmVjdCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAoreworICAgIFFQYWludGVyKiBwID0g
bV9kYXRhLT5wKCk7CisgICAgUVJlY3RGIGNsaXBSZWN0OworCisgICAgaWYgKHAtPmhhc0NsaXBw
aW5nKCkpCisgICAgICAgIGNsaXBSZWN0ID0gbV9kYXRhLT5jbGlwQm91bmRpbmdSZWN0KCk7Cisg
ICAgZWxzZQorICAgICAgICBjbGlwUmVjdCA9IHAtPnRyYW5zZm9ybSgpLmludmVydGVkKCkubWFw
UmVjdChwLT53aW5kb3coKSk7CisKKyAgICByZXR1cm4gSW50UmVjdChjbGlwUmVjdC54KCksIGNs
aXBSZWN0LnkoKSwgY2xpcFJlY3Qud2lkdGgoKSwgY2xpcFJlY3QuaGVpZ2h0KCkpOworfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUg
Y2xpcFJ1bGUpCiB7CkBAIC05MjYsNyArOTM5LDcgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4
dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIGZyZWN0LCBSb3VuZGluZ00K
ICAgICByZXR1cm4gRmxvYXRSZWN0KHJvdW5kZWRPcmlnaW4sIHJvdW5kZWRMb3dlclJpZ2h0IC0g
cm91bmRlZE9yaWdpbik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNo
YWRvdyhjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xv
ciwgQ29sb3JTcGFjZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhj
b25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29s
b3JTcGFjZSBjb2xvclNwYWNlKQogewogICAgIC8vIFF0IGRvZXNuJ3Qgc3VwcG9ydCBzaGFkb3dz
IG5hdGl2ZWx5LCB0aGV5IGFyZSBkcmF3biBtYW51YWxseSBpbiB0aGUgZHJhdyoKICAgICAvLyBm
dW5jdGlvbnMKQEAgLTkzNSwxMCArOTQ4LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgYmx1ciwgY29uc3QKICAg
ICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4dCBpcyBhc3NvY2lhdGVk
IHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CiAgICAgICAgIC8vIFdlIGZsaXAgdGhlIGhl
aWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3NpdGUgWSBheGlzCiAgICAg
ICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHNpemUud2lkdGgoKSwgLXNpemUu
aGVpZ2h0KCkpOwotICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRleHRTaGFkb3coY29sb3Is
IGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRvdyhjb2xvciwgYmx1ciwg
RmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOworICAgIH0KIAorICAgIG1f
ZGF0YS0+c2hhZG93ID0gU2hhZG93Qmx1cihGbG9hdFNpemUobV9zdGF0ZS5zaGFkb3dCbHVyLCBt
X3N0YXRlLnNoYWRvd0JsdXIpLCBtX3N0YXRlLnNoYWRvd09mZnNldCwgY29sb3IsIGNvbG9yU3Bh
Y2UpOwogICAgIG1fZGF0YS0+c2hhZG93LnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKG1fc3Rh
dGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwCmluZGV4IDBjOGNlOWUuLjQxZmY4YTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwCkBA
IC0zNCwxMSArMzQsMTEgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1
ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ29udGV4dFNoYWRvdy5oIgogI2luY2x1ZGUg
IkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIklt
YWdlT2JzZXJ2ZXIuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlNo
YWRvd0JsdXIuaCIKICNpbmNsdWRlICJTdGlsbEltYWdlUXQuaCIKICNpbmNsdWRlICJxd2Vic2V0
dGluZ3MuaCIKIApAQCAtMjI0LDExICsyMjQsMTEgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhH
cmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZHN0LAogICAgIENvbXBvc2l0
ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBjdHh0LT5jb21wb3NpdGVPcGVyYXRpb24oKTsK
ICAgICBjdHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oIWltYWdlLT5oYXNBbHBoYSgpICYmIG9w
ID09IENvbXBvc2l0ZVNvdXJjZU92ZXIgPyBDb21wb3NpdGVDb3B5IDogb3ApOwogCi0gICAgQ29u
dGV4dFNoYWRvdyogc2hhZG93ID0gY3R4dC0+Y29udGV4dFNoYWRvdygpOwotICAgIGlmIChzaGFk
b3ctPm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpOb1NoYWRvdykgewotICAgICAgICBRUGFpbnRl
ciogc2hhZG93UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHh0LCBub3JtYWxp
emVkRHN0KTsKLSAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKLSAgICAgICAgICAgIHNoYWRv
d1BhaW50ZXItPnNldE9wYWNpdHkoc3RhdGljX2Nhc3Q8cXJlYWw+KHNoYWRvdy0+bV9jb2xvci5h
bHBoYSgpKSAvIDI1NSk7CisgICAgaWYgKGN0eHQtPmhhc1NoYWRvdygpKSB7CisgICAgICAgIFNo
YWRvd0JsdXIqIHNoYWRvdyA9IGN0eHQtPnNoYWRvd0JsdXIoKTsKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eHQsIG5v
cm1hbGl6ZWREc3QpOworICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAg
UVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmRyYXdQaXhtYXAobm9ybWFsaXplZERzdCwg
KmltYWdlLCBub3JtYWxpemVkU3JjKTsKICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5
ZXIoY3R4dCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwCmluZGV4IDNiMDg5OTUuLmNiMmE0NDIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0
LmNwcApAQCAtMjgsOSArMjgsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0
aWxsSW1hZ2VRdC5oIgogCi0jaW5jbHVkZSAiQ29udGV4dFNoYWRvdy5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJTaGFkb3dC
bHVyLmgiCiAKICNpbmNsdWRlIDxRUGFpbnRlcj4KIApAQCAtNzQsMTEgKzc0LDExIEBAIHZvaWQg
U3RpbGxJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0LAogICAgIENvbXBvc2l0ZU9wZXJhdG9yIHByZXZpb3VzT3BlcmF0b3IgPSBjdHh0LT5jb21w
b3NpdGVPcGVyYXRpb24oKTsKICAgICBjdHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOwog
Ci0gICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY3R4dC0+Y29udGV4dFNoYWRvdygpOwotICAg
IGlmIChzaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpOb1NoYWRvdykgewotICAgICAg
ICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHh0
LCBub3JtYWxpemVkRHN0KTsKLSAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKLSAgICAgICAg
ICAgIHNoYWRvd1BhaW50ZXItPnNldE9wYWNpdHkoc3RhdGljX2Nhc3Q8cXJlYWw+KHNoYWRvdy0+
bV9jb2xvci5hbHBoYSgpKSAvIDI1NSk7CisgICAgaWYgKGN0eHQtPmhhc1NoYWRvdygpKSB7Cisg
ICAgICAgIFNoYWRvd0JsdXIqIHNoYWRvdyA9IGN0eHQtPnNoYWRvd0JsdXIoKTsKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVy
KGN0eHQsIG5vcm1hbGl6ZWREc3QpOworICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAg
ICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmRyYXdQaXhtYXAobm9ybWFs
aXplZERzdCwgKm1fcGl4bWFwLCBub3JtYWxpemVkU3JjKTsKICAgICAgICAgICAgIHNoYWRvdy0+
ZW5kU2hhZG93TGF5ZXIoY3R4dCk7CiAgICAgICAgIH0KLS0gCjEuNy40LjEKCg==
</data>
<flag name="review"
          id="92990"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="92991"
          type_id="3"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98761</attachid>
            <date>2011-06-27 12:07:55 -0700</date>
            <delta_ts>2011-06-27 14:30:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Qt-Add-ShadowBlur-support.patch</filename>
            <type>text/plain</type>
            <size>43383</size>
            <attacher name="Igor Trindade Oliveira">igor.oliveira</attacher>
            
              <data encoding="base64">RnJvbSAxY2NjNmJjOTlhOTRkNTZlYzBmYTE5YmYwMjgzYmI3YzE3NjVjODAxIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBJZ29yIE9saXZlaXJhIDxpZ29yLm9saXZlaXJhQG9wZW5ib3Nz
YS5vcmc+CkRhdGU6IFN1biwgMjYgSnVuIDIwMTEgMTA6MTk6MzYgLTA0MDAKU3ViamVjdDogW1BB
VENIXSBbUXRdIEFkZCBTaGFkb3dCbHVyIHN1cHBvcnQKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ0ICsrKysrCiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnBybyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KIC4uLi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgIHwgICAgMiArLQog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggfCAgICA3
ICstCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCAgICB8
ICAgNTAgKysrKysrCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmggICAgICB8ICAgMTkgKystCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRv
d1F0LmNwcCAgICAgICB8ICAxNjggLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAgICAgIHwgICA4MyArKysrKystLS0tLQog
Li4uL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcCAgICAgfCAgMTQ0
ICsrKysrKysrKystLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9J
bWFnZVF0LmNwcCAgICB8ICAgMTIgKy0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L1N0aWxsSW1hZ2VRdC5jcHAgIHwgICAxMiArLQogMTEgZmlsZXMgY2hhbmdlZCwgMjU5IGluc2Vy
dGlvbnMoKyksIDI4NyBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGM5NGJjNWEuLjgwMGM2ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0NyBAQAorMjAxMS0w
Ni0yNyAgSWdvciBPbGl2ZWlyYSAgPGlnb3Iub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEFkZCBTaGFk
b3dCbHVyIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTYyOTk3CisKKyAgICAgICAgVXNlIFNoYWRvd0JsdXIgaW5zdGVhZCBvZiBDb250ZXh0
U2hhZG93IHRvIGhhbmRsZSBjYW52YXMgYW5kIGNzcyBzaGFkb3dzLiBTaGFkb3dCbHVyIGlzCisg
ICAgICAgIGEgbmV3ZXIgYW5kIHBsYXRmb3JtIGluZGVwZW5kZW50IHNoYWRvdyBpbXBsZW1lbnRh
dGlvbi4KKyAgICAgICAgUXQgUVBhaW50ZXIgZG9lcyBub3QgaGF2ZSBzdXBwb3J0IGZvciBzaGFk
b3dzIHNvIGlzIG5lY2Vzc2FyeSB0byBjcmVhdGUgYSBsYXllciBzdXBwb3J0CisgICAgICAgIHRv
IGRyYXcgY29tcGxleCBzaGFwZXMgYW5kIGZvbnRzLiBUaGUgYmVnaW5TaGFkb3dMYXllciBjcmVh
dGVzIGEgdGVtcG9yYXJ5IHNoYWRvdyBidWZmZXIKKyAgICAgICAgd2hlcmUgdGhlIGNhbnZhcyBj
YW4gZHJhdyBvbnRvIGFuZCBlbmRTaGFkb3dMYXllciBhcHBsaWVzIHRoZSBibHVyIGZpbHRlciwg
Y29sb3JzIHRoZQorICAgICAgICBzaGFkb3cgYnVmZmVyIGFuZCBkcmF3IHRoZSBmaW5hbCBzaGFk
b3cgdG8gdGhlIGdyYXBoaWNzIGNvbnRleHQuCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6
U2hhZG93Qmx1cik6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpjbGVhcik6CisgICAg
ICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpibHVyQW5kQ29sb3JTaGFkb3dCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6YmVnaW5TaGFkb3dMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFkb3dCbHVyOjplbmRTaGFkb3dMYXllcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5oOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6dHlw
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvd1F0LmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6ZHJhd1RleHRDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6
ZHJhd0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250
ZXh0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlOjptdXN0VXNlU2hhZG93Qmx1cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaGFkb3dCbHVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9JbWFnZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpk
cmF3KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U3RpbGxJbWFnZTo6ZHJhdyk6CisKIDIwMTEtMDYtMjUgIERpbWl0
cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBBZGFtIEJhcnRoLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBhZTFlNjgwLi5iOGRjY2NiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnBybwpAQCAtOTgwLDcgKzk4MCw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRGYW1pbHkuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFn
ZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcCBcCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvQ29udGV4dFNoYWRvdy5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NoYWRv
d0JsdXIuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50M0QuY3BwIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFBvaW50LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRmxvYXRRdWFkLmNwcCBcCkBAIC0xOTQyLDcgKzE5NDIsNyBAQCBIRUFERVJTICs9IFwKICAg
ICBwbGF0Zm9ybS9tb2NrL1NwZWVjaElucHV0Q2xpZW50TW9jay5oIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9CaXRtYXBJbWFnZS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oIFwK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db250ZXh0U2hhZG93LmggXAorICAgIHBsYXRmb3JtL2dy
YXBoaWNzL1NoYWRvd0JsdXIuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJs
ZW5kLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5oIFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29tcG9uZW50VHJhbnNmZXIuaCBcCkBA
IC0yNTIxLDcgKzI1MjEsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBwYWdlL3F0L0ZyYW1lUXQuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9UcmFuc2Zvcm1hdGlvbk1hdHJpeFF0LmNwcCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29sb3JRdC5jcHAgXAotICAgIHBsYXRmb3JtL2dy
YXBoaWNzL3F0L0NvbnRleHRTaGFkb3dRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L0ZvbnRRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFR
dC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0Zsb2F0UG9pbnRRdC5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5j
cHAKaW5kZXggM2I3N2I5Zi4uZjNmOTllNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC01ODUsNyArNTg1LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKEltYWdlQnVmZmVyKiBidWZm
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgcmUKICAgICBidWZmZXItPmNsaXAodGhpcywgcmVjdCk7CiB9
CiAKLSNpZiAhVVNFKENHKQorI2lmICFVU0UoQ0cpICYmICFQTEFURk9STShRVCkKIEludFJlY3Qg
R3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29uc3QKIHsKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmgKaW5kZXggNDlkZTQxZi4uZWUwYWU3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTU0LDYgKzU0LDcg
QEAgdHlwZWRlZiBjbGFzcyBXZWJDb3JlOjpTdXJmYWNlT3BlblZHIFBsYXRmb3JtR3JhcGhpY3ND
b250ZXh0OwogI2luY2x1ZGUgPFFQYWludGVyPgogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3Mg
Q29udGV4dFNoYWRvdzsKK2NsYXNzIFNoYWRvd0JsdXI7CiB9CiB0eXBlZGVmIFFQYWludGVyIFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0OwogI2VsaWYgUExBVEZPUk0oV1gpCkBAIC00ODUsMTAgKzQ4
NiwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgdGFrZU93bmVyc2hpcE9m
UGxhdGZvcm1Db250ZXh0KCk7CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFFUKSB8fCBVU0UoQ0FJ
Uk8pCisjaWYgVVNFKENBSVJPKQogICAgICAgICBDb250ZXh0U2hhZG93KiBjb250ZXh0U2hhZG93
KCk7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFFUKQorICAgICAgICBTaGFkb3dCbHVyKiBzaGFk
b3dCbHVyKCk7CisjZW5kaWYKKwogI2lmIFVTRShDQUlSTykKICAgICAgICAgR3JhcGhpY3NDb250
ZXh0KGNhaXJvX3QqKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcAppbmRleCAyNWZjOWFhLi40ODIwNGY5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcApAQCAtMTkyLDYgKzE5
MiwxNCBAQCBTaGFkb3dCbHVyOjpTaGFkb3dCbHVyKGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBj
b25zdCBGbG9hdFNpemUmIG9mZnNldCwgY29uc3QgQwogICAgIH0gZWxzZQogICAgICAgICBtX3R5
cGUgPSBTb2xpZFNoYWRvdzsKIH0KK1NoYWRvd0JsdXI6OlNoYWRvd0JsdXIoKQorICAgIDogbV90
eXBlKE5vU2hhZG93KQorICAgICwgbV9ibHVyUmFkaXVzKDAsIDApCisgICAgLCBtX3NoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKGZhbHNlKQoreworfQorCisKIAogLy8gSW5zdGVhZCBvZiBpbnRlZ2Vy
IGRpdmlzaW9uLCB3ZSB1c2UgMTcuMTUgZm9yIGZpeGVkLXBvaW50IGRpdmlzaW9uLgogc3RhdGlj
IGNvbnN0IGludCBibHVyU3VtU2hpZnQgPSAxNTsKQEAgLTIzNyw2ICsyNDUsMTQgQEAgc3RhdGlj
IHZvaWQgY2FsY3VsYXRlTG9iZXMoaW50IGxvYmVzW11bMl0sIGZsb2F0IGJsdXJSYWRpdXMsIGJv
b2wgc2hhZG93c0lnbm9yZVQKICAgICB9CiB9CiAKK3ZvaWQgU2hhZG93Qmx1cjo6Y2xlYXIoKQor
eworICAgIG1fdHlwZSA9IE5vU2hhZG93OworICAgIG1fY29sb3IgPSBDb2xvcigpOworICAgIG1f
Ymx1clJhZGl1cyA9IEZsb2F0U2l6ZSgpOworICAgIG1fb2Zmc2V0ID0gRmxvYXRTaXplKCk7Cit9
CisKIHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckxheWVySW1hZ2UodW5zaWduZWQgY2hhciogaW1hZ2VE
YXRhLCBjb25zdCBJbnRTaXplJiBzaXplLCBpbnQgcm93U3RyaWRlKQogewogICAgIGNvbnN0IGlu
dCBjaGFubmVsc1s0XSA9IHsgMywgMCwgMSwgMyB9OwpAQCAtODI4LDkgKzg0NCw0MyBAQCB2b2lk
IFNoYWRvd0JsdXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1ZmZlcihjb25zdCBJbnRTaXplJiB0ZW1w
bGF0ZVNpemUpCiAKICAgICAvLyBNYXNrIHRoZSBpbWFnZSB3aXRoIHRoZSBzaGFkb3cgY29sb3Iu
CiAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gbV9sYXllckltYWdlLT5jb250
ZXh0KCk7CisgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpzaGFkb3dD
b250ZXh0KTsKICAgICBzaGFkb3dDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9z
aXRlU291cmNlSW4pOwogICAgIHNoYWRvd0NvbnRleHQtPnNldEZpbGxDb2xvcihtX2NvbG9yLCBt
X2NvbG9yU3BhY2UpOwogICAgIHNoYWRvd0NvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdCgwLCAw
LCB0ZW1wbGF0ZVNpemUud2lkdGgoKSwgdGVtcGxhdGVTaXplLmhlaWdodCgpKSk7CiB9CiAKK0dy
YXBoaWNzQ29udGV4dCogU2hhZG93Qmx1cjo6YmVnaW5TaGFkb3dMYXllcihHcmFwaGljc0NvbnRl
eHQgKmNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgbGF5ZXJBcmVhKQoreworICAgIGFkanVzdEJs
dXJSYWRpdXMoY29udGV4dCk7CisKKyAgICBJbnRSZWN0IGxheWVyUmVjdCA9IGNhbGN1bGF0ZUxh
eWVyQm91bmRpbmdSZWN0KGNvbnRleHQsIGxheWVyQXJlYSwgY29udGV4dC0+Y2xpcEJvdW5kcygp
KTsKKworICAgIGlmIChsYXllclJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIG1fbGF5ZXJJbWFnZSA9IFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLmdldFNjcmF0Y2hCdWZm
ZXIobGF5ZXJSZWN0LnNpemUoKSk7CisKKyAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRl
eHQgPSBtX2xheWVySW1hZ2UtPmNvbnRleHQoKTsKKyAgICBzaGFkb3dDb250ZXh0LT5zYXZlKCk7
CisgICAgc2hhZG93Q29udGV4dC0+Y2xlYXJSZWN0KEZsb2F0UmVjdCgwLCAwLCBtX2xheWVyU2l6
ZS53aWR0aCgpLCBtX2xheWVyU2l6ZS5oZWlnaHQoKSkpOworCisgICAgc2hhZG93Q29udGV4dC0+
dHJhbnNsYXRlKG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb24pOworICAgIHJldHVybiBzaGFkb3dD
b250ZXh0OworfQorCit2b2lkIFNoYWRvd0JsdXI6OmVuZFNoYWRvd0xheWVyKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCkKK3sKKyAgICBtX2xheWVySW1hZ2UtPmNvbnRleHQoKS0+cmVzdG9yZSgp
OworCisgICAgYmx1ckFuZENvbG9yU2hhZG93QnVmZmVyKGV4cGFuZGVkSW50U2l6ZShtX2xheWVy
U2l6ZSkpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlKCpjb250ZXh0
KTsKKworICAgIGNvbnRleHQtPmNsZWFyU2hhZG93KCk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdl
QnVmZmVyKG1fbGF5ZXJJbWFnZSwgQ29sb3JTcGFjZURldmljZVJHQiwgcm91bmRlZEludFBvaW50
KG1fbGF5ZXJPcmlnaW4pLCBJbnRSZWN0KDAsIDAsIG1fbGF5ZXJTaXplLndpZHRoKCksIG1fbGF5
ZXJTaXplLmhlaWdodCgpKSwgY29udGV4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCkpOworCisgICAg
bV9sYXllckltYWdlID0gMDsKKyAgICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zY2hlZHVsZVNj
cmF0Y2hCdWZmZXJQdXJnZSgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmgKaW5kZXggMjAyZmYzZC4u
Y2RmNGZjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hh
ZG93Qmx1ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0Js
dXIuaApAQCAtNDIsMTggKzQyLDMwIEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIElt
YWdlQnVmZmVyOwogCiBjbGFzcyBTaGFkb3dCbHVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShTaGFkb3dCbHVyKTsKIHB1YmxpYzoKKyAgICBlbnVtIFNoYWRvd1R5cGUgeworICAgICAgICBO
b1NoYWRvdywKKyAgICAgICAgU29saWRTaGFkb3csCisgICAgICAgIEJsdXJTaGFkb3cKKyAgICB9
OworCiAgICAgU2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUmIHJhZGl1cywgY29uc3QgRmxvYXRT
aXplJiBvZmZzZXQsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CisgICAgU2hhZG93Qmx1cigp
OwogCiAgICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29sIGlnbm9yZVRyYW5z
Zm9ybXMpIHsgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IGlnbm9yZVRyYW5zZm9ybXM7IH0K
ICAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgY29uc3QgeyByZXR1cm4gbV9zaGFk
b3dzSWdub3JlVHJhbnNmb3JtczsgfQogCisgICAgR3JhcGhpY3NDb250ZXh0KiBiZWdpblNoYWRv
d0xheWVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYgbGF5ZXJBcmVhKTsKKyAg
ICB2b2lkIGVuZFNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCopOworCiAgICAgdm9pZCBkcmF3
UmVjdFNoYWRvdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBSb3Vu
ZGVkSW50UmVjdDo6UmFkaWkmKTsKICAgICB2b2lkIGRyYXdJbnNldFNoYWRvdyhHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJlY3QmIGhvbGVSZWN0LCBjb25z
dCBSb3VuZGVkSW50UmVjdDo6UmFkaWkmIGhvbGVSYWRpaSk7CiAKICAgICB2b2lkIGJsdXJMYXll
ckltYWdlKHVuc2lnbmVkIGNoYXIqLCBjb25zdCBJbnRTaXplJiwgaW50IHN0cmlkZSk7CiAKKyAg
ICB2b2lkIGNsZWFyKCk7CisKKyAgICBTaGFkb3dUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBt
X3R5cGU7IH0KIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3U2hhZG93QnVmZmVyKEdyYXBoaWNzQ29u
dGV4dCopOwogCkBAIC04MCwxMSArOTIsNiBAQCBwcml2YXRlOgogICAgIAogICAgIEludFNpemUg
Ymx1cnJlZEVkZ2VTaXplKCkgY29uc3Q7CiAgICAgCi0gICAgZW51bSBTaGFkb3dUeXBlIHsKLSAg
ICAgICAgTm9TaGFkb3csCi0gICAgICAgIFNvbGlkU2hhZG93LAotICAgICAgICBCbHVyU2hhZG93
Ci0gICAgfTsKICAgICAKICAgICBTaGFkb3dUeXBlIG1fdHlwZTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvd1F0LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3dRdC5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYjMxYTcuLjAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvd1F0LmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIFNlbmNo
YSwgSW5jLgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkNvbnRleHRTaGFkb3cuaCIKLQotI2luY2x1ZGUgIkFmZmluZVRy
YW5zZm9ybS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgPFFQYWlu
dGVyPgotI2luY2x1ZGUgPFFUaW1lckV2ZW50PgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8v
IENvbnRleHRTaGFkb3cgbmVlZHMgYSBzY3JhdGNoIGltYWdlIGFzIHRoZSBidWZmZXIgZm9yIHRo
ZSBibHVyIGZpbHRlci4KLS8vIEluc3RlYWQgb2YgY3JlYXRpbmcgYW5kIGRlc3Ryb3lpbmcgdGhl
IGJ1ZmZlciBmb3IgZXZlcnkgb3BlcmF0aW9uLAotLy8gd2UgY3JlYXRlIGEgYnVmZmVyIHdoaWNo
IHdpbGwgYmUgYXV0b21hdGljYWxseSBwdXJnZWQgdmlhIGEgdGltZXIuCi0KLWNsYXNzIFNoYWRv
d0J1ZmZlcjogcHVibGljIFFPYmplY3QgewotcHVibGljOgotICAgIFNoYWRvd0J1ZmZlcihRT2Jq
ZWN0KiBwYXJlbnQgPSAwKTsKLQotICAgIFFJbWFnZSogc2NyYXRjaEltYWdlKGNvbnN0IFFTaXpl
JiBzaXplKTsKLQotICAgIHZvaWQgc2NoZWR1bGVQdXJnZSgpOwotCi1wcm90ZWN0ZWQ6Ci0gICAg
dm9pZCB0aW1lckV2ZW50KFFUaW1lckV2ZW50KiBldmVudCk7Ci0KLXByaXZhdGU6Ci0gICAgUUlt
YWdlIGltYWdlOwotICAgIGludCB0aW1lcklkOwotfTsKLQotU2hhZG93QnVmZmVyOjpTaGFkb3dC
dWZmZXIoUU9iamVjdCogcGFyZW50KQotICAgIDogUU9iamVjdChwYXJlbnQpCi0gICAgLCB0aW1l
cklkKC0xKQotewotfQotCi1RSW1hZ2UqIFNoYWRvd0J1ZmZlcjo6c2NyYXRjaEltYWdlKGNvbnN0
IFFTaXplJiBzaXplKQotewotICAgIGludCB3aWR0aCA9IHNpemUud2lkdGgoKTsKLSAgICBpbnQg
aGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKLQotICAgIC8vIFdlIGRvIG5vdCBuZWVkIHRvIHJlY3Jl
YXRlIHRoZSBidWZmZXIgaWYgdGhlIGJ1ZmZlciBpcyByZWFzb25hYmx5Ci0gICAgLy8gbGFyZ2Vy
IHRoYW4gdGhlIHJlcXVlc3RlZCBzaXplLiBIb3dldmVyLCBpZiB0aGUgcmVxdWVzdGVkIHNpemUg
aXMKLSAgICAvLyBtdWNoIHNtYWxsZXIgdGhhbiBvdXIgYnVmZmVyLCByZWR1Y2Ugb3VyIGJ1ZmZl
ciBzbyB0aGF0IHdlIHdpbGwgbm90Ci0gICAgLy8ga2VlcCB0b28gbWFueSBhbGxvY2F0ZWQgcGl4
ZWxzIGZvciB0b28gbG9uZy4KLSAgICBpZiAoIWltYWdlLmlzTnVsbCgpICYmIChpbWFnZS53aWR0
aCgpID4gd2lkdGgpICYmIChpbWFnZS5oZWlnaHQoKSA+IGhlaWdodCkpCi0gICAgICAgIGlmICgo
KDIgKiB3aWR0aCkgPiBpbWFnZS53aWR0aCgpKSAmJiAoKDIgKiBoZWlnaHQpID4gaW1hZ2UuaGVp
Z2h0KCkpKSB7Ci0gICAgICAgICAgICBpbWFnZS5maWxsKDApOwotICAgICAgICAgICAgcmV0dXJu
ICZpbWFnZTsKLSAgICAgICAgfQotCi0gICAgLy8gUm91bmQgdG8gdGhlIG5lYXJlc3QgMzIgcGl4
ZWxzIHNvIHdlIGRvIG5vdCBncm93IHRoZSBidWZmZXIgZXZlcnl0aW1lCi0gICAgLy8gdGhlcmUg
aXMgbGFyZ2VyIHJlcXVlc3QgYnkgMSBwaXhlbC4KLSAgICB3aWR0aCA9ICgxICsgKHdpZHRoID4+
IDUpKSA8PCA1OwotICAgIGhlaWdodCA9ICgxICsgKGhlaWdodCA+PiA1KSkgPDwgNTsKLQotICAg
IGltYWdlID0gUUltYWdlKHdpZHRoLCBoZWlnaHQsIFFJbWFnZTo6Rm9ybWF0X0FSR0IzMl9QcmVt
dWx0aXBsaWVkKTsKLSAgICBpbWFnZS5maWxsKDApOwotICAgIHJldHVybiAmaW1hZ2U7Ci19Ci0K
LXZvaWQgU2hhZG93QnVmZmVyOjpzY2hlZHVsZVB1cmdlKCkKLXsKLSAgICBzdGF0aWMgY29uc3Qg
ZG91YmxlIEJ1ZmZlclB1cmdlRGVsYXkgPSAyOyAvLyBzZWNvbmRzCi0gICAgaWYgKHRpbWVySWQg
Pj0gMCkKLSAgICAgICAga2lsbFRpbWVyKHRpbWVySWQpOwotICAgIHRpbWVySWQgPSBzdGFydFRp
bWVyKEJ1ZmZlclB1cmdlRGVsYXkgKiAxMDAwKTsKLX0KLQotdm9pZCBTaGFkb3dCdWZmZXI6OnRp
bWVyRXZlbnQoUVRpbWVyRXZlbnQqIGV2ZW50KQotewotICAgIGlmIChldmVudC0+dGltZXJJZCgp
ID09IHRpbWVySWQpIHsKLSAgICAgICAga2lsbFRpbWVyKHRpbWVySWQpOwotICAgICAgICBpbWFn
ZSA9IFFJbWFnZSgpOwotICAgIH0KLSAgICBRT2JqZWN0Ojp0aW1lckV2ZW50KGV2ZW50KTsKLX0K
LQotUV9HTE9CQUxfU1RBVElDKFNoYWRvd0J1ZmZlciwgc2NyYXRjaFNoYWRvd0J1ZmZlcikKLQot
UGxhdGZvcm1Db250ZXh0IENvbnRleHRTaGFkb3c6OmJlZ2luU2hhZG93TGF5ZXIoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGxheWVyQXJlYSkKLXsKLSAgICAvLyBT
ZXQgbV9ibHVyRGlzdGFuY2UuCi0gICAgYWRqdXN0Qmx1ckRpc3RhbmNlKGNvbnRleHQpOwotCi0g
ICAgUGxhdGZvcm1Db250ZXh0IHAgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKLQotICAg
IFFSZWN0IGNsaXBSZWN0OwotICAgIGlmIChwLT5oYXNDbGlwcGluZygpKQotI2lmIFFUX1ZFUlNJ
T04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA4LCAwKQotICAgICAgICBjbGlwUmVjdCA9IHAtPmNs
aXBCb3VuZGluZ1JlY3QoKS50b0FsaWduZWRSZWN0KCk7Ci0jZWxzZQotICAgICAgICBjbGlwUmVj
dCA9IHAtPmNsaXBSZWdpb24oKS5ib3VuZGluZ1JlY3QoKTsKLSNlbmRpZgotICAgIGVsc2UKLSAg
ICAgICAgY2xpcFJlY3QgPSBwLT50cmFuc2Zvcm0oKS5pbnZlcnRlZCgpLm1hcFJlY3QocC0+d2lu
ZG93KCkpOwotCi0gICAgLy8gU2V0IG1fbGF5ZXJPcmlnaW4sIG1fbGF5ZXJDb250ZXh0VHJhbnNs
YXRpb24sIG1fc291cmNlUmVjdC4KLSAgICBJbnRSZWN0IGNsaXAoY2xpcFJlY3QueCgpLCBjbGlw
UmVjdC55KCksIGNsaXBSZWN0LndpZHRoKCksIGNsaXBSZWN0LmhlaWdodCgpKTsKLSAgICBJbnRS
ZWN0IGxheWVyUmVjdCA9IGNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0KGNvbnRleHQsIGxheWVy
QXJlYSwgY2xpcCk7Ci0KLSAgICAvLyBEb24ndCBwYWludCBpZiB3ZSBhcmUgdG90YWxseSBvdXRz
aWRlIHRoZSBjbGlwIHJlZ2lvbi4KLSAgICBpZiAobGF5ZXJSZWN0LmlzRW1wdHkoKSkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICBTaGFkb3dCdWZmZXIqIHNoYWRvd0J1ZmZlciA9IHNjcmF0Y2hT
aGFkb3dCdWZmZXIoKTsKLSAgICBRSW1hZ2UqIHNoYWRvd0ltYWdlID0gc2hhZG93QnVmZmVyLT5z
Y3JhdGNoSW1hZ2UobGF5ZXJSZWN0LnNpemUoKSk7Ci0gICAgbV9sYXllckltYWdlID0gUUltYWdl
KCpzaGFkb3dJbWFnZSk7Ci0KLSAgICBtX2xheWVyQ29udGV4dCA9IG5ldyBRUGFpbnRlcjsKLSAg
ICBtX2xheWVyQ29udGV4dC0+YmVnaW4oJm1fbGF5ZXJJbWFnZSk7Ci0gICAgbV9sYXllckNvbnRl
eHQtPnNldEZvbnQocC0+Zm9udCgpKTsKLSAgICBtX2xheWVyQ29udGV4dC0+dHJhbnNsYXRlKG1f
bGF5ZXJDb250ZXh0VHJhbnNsYXRpb24pOwotICAgIHJldHVybiBtX2xheWVyQ29udGV4dDsKLX0K
LQotdm9pZCBDb250ZXh0U2hhZG93OjplbmRTaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQpCi17Ci0gICAgbV9sYXllckNvbnRleHQtPmVuZCgpOwotICAgIGRlbGV0ZSBtX2xheWVy
Q29udGV4dDsKLSAgICBtX2xheWVyQ29udGV4dCA9IDA7Ci0KLSAgICBpZiAobV90eXBlID09IEJs
dXJTaGFkb3cpIHsKLSAgICAgICAgYmx1ckxheWVySW1hZ2UobV9sYXllckltYWdlLmJpdHMoKSwg
SW50U2l6ZShtX2xheWVySW1hZ2Uud2lkdGgoKSwgbV9sYXllckltYWdlLmhlaWdodCgpKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgbV9sYXllckltYWdlLmJ5dGVzUGVyTGluZSgpKTsKLSAgICB9
Ci0KLSAgICBpZiAobV90eXBlICE9IE5vU2hhZG93KSB7Ci0gICAgICAgIC8vICJDb2xvcml6ZSIg
d2l0aCB0aGUgcmlnaHQgc2hhZG93IGNvbG9yLgotICAgICAgICBRUGFpbnRlciBwKCZtX2xheWVy
SW1hZ2UpOwotICAgICAgICBwLnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRp
b25Nb2RlX1NvdXJjZUluKTsKLSAgICAgICAgcC5maWxsUmVjdChtX2xheWVySW1hZ2UucmVjdCgp
LCBtX2NvbG9yLnJnYigpKTsKLSAgICAgICAgcC5lbmQoKTsKLSAgICB9Ci0KLSAgICBjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd0ltYWdlKG1fbGF5ZXJPcmlnaW4sIG1fbGF5ZXJJbWFn
ZSwgbV9zb3VyY2VSZWN0KTsKLQotICAgIHNjcmF0Y2hTaGFkb3dCdWZmZXIoKS0+c2NoZWR1bGVQ
dXJnZSgpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9Gb250UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
Rm9udFF0LmNwcAppbmRleCBhNWExNmUwLi5hMjEyZWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAKQEAgLTIzLDcgKzIzLDYgQEAKICNpbmNs
dWRlICJGb250LmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJD
b250ZXh0U2hhZG93LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAi
Rm9udEZhbGxiYWNrTGlzdC5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgpAQCAtMzQsNiAr
MzMsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgorI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIK
ICNpbmNsdWRlICJUZXh0UnVuLmgiCiAKICNpbmNsdWRlIDxRQnJ1c2g+CkBAIC0xNDIsNDAgKzE0
Miw0MyBAQCBzdGF0aWMgdm9pZCBkcmF3VGV4dENvbW1vbihHcmFwaGljc0NvbnRleHQqIGN0eCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdAogICAgICAgICAgICAgUVJlY3RGIGJvdW5k
aW5nUmVjdChwb2ludC54KCkgKyB4MSwgcG9pbnQueSgpIC0gYXNjZW50LCB4MiAtIHgxLCBmbS5o
ZWlnaHQoKSk7CiAgICAgICAgICAgICBRUmVjdEYgY2xpcCA9IGJvdW5kaW5nUmVjdDsKIAotICAg
ICAgICAgICAgQ29udGV4dFNoYWRvdyogY3R4U2hhZG93ID0gY3R4LT5jb250ZXh0U2hhZG93KCk7
Ci0KLSAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpO
b1NoYWRvdykgeworICAgICAgICAgICAgU2hhZG93Qmx1ciogY3R4U2hhZG93ID0gY3R4LT5zaGFk
b3dCbHVyKCk7CisgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1
cjo6Tm9TaGFkb3cpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnRGIHNoYWRvd09mZnNl
dChjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0eC0+c3RhdGUoKS5zaGFkb3dP
ZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIHFyZWFsIGR4MSA9IDAsIGR4MiA9IDAs
IGR5MSA9IDAsIGR5MiA9IDA7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+b2Zmc2V0
KCkueCgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgZHgyID0gY3R4U2hhZG93LT5vZmZzZXQo
KS54KCk7CisgICAgICAgICAgICAgICAgaWYgKHNoYWRvd09mZnNldC54KCkgPiAwKQorICAgICAg
ICAgICAgICAgICAgICBkeDIgPSBzaGFkb3dPZmZzZXQueCgpOwogICAgICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgZHgxID0gLWN0eFNoYWRvdy0+b2Zmc2V0KCkueCgpOwot
ICAgICAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPm9mZnNldCgpLnkoKSA+IDApCi0gICAgICAg
ICAgICAgICAgICAgIGR5MiA9IGN0eFNoYWRvdy0+b2Zmc2V0KCkueSgpOworICAgICAgICAgICAg
ICAgICAgICBkeDEgPSAtc2hhZG93T2Zmc2V0LngoKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hh
ZG93T2Zmc2V0LnkoKSA+IDApCisgICAgICAgICAgICAgICAgICAgIGR5MiA9IHNoYWRvd09mZnNl
dC55KCk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBkeTEgPSAt
Y3R4U2hhZG93LT5vZmZzZXQoKS55KCk7CisgICAgICAgICAgICAgICAgICAgIGR5MSA9IC1zaGFk
b3dPZmZzZXQueSgpOwogICAgICAgICAgICAgICAgIC8vIGV4cGFuZCB0aGUgY2xpcCByZWN0IHRv
IGluY2x1ZGUgdGhlIHRleHQgc2hhZG93IGFzIHdlbGwKKyAgICAgICAgICAgICAgICBjb25zdCBm
bG9hdCBibHVyRGlzdGFuY2UgPSBjdHgtPnN0YXRlKCkuc2hhZG93Qmx1cjsKICAgICAgICAgICAg
ICAgICBjbGlwLmFkanVzdChkeDEsIGR4MiwgZHkxLCBkeTIpOwotICAgICAgICAgICAgICAgIGNs
aXAuYWRqdXN0KC1jdHhTaGFkb3ctPm1fYmx1ckRpc3RhbmNlLCAtY3R4U2hhZG93LT5tX2JsdXJE
aXN0YW5jZSwgY3R4U2hhZG93LT5tX2JsdXJEaXN0YW5jZSwgY3R4U2hhZG93LT5tX2JsdXJEaXN0
YW5jZSk7CisgICAgICAgICAgICAgICAgY2xpcC5hZGp1c3QoLWJsdXJEaXN0YW5jZSwgLWJsdXJE
aXN0YW5jZSwgYmx1ckRpc3RhbmNlLCBibHVyRGlzdGFuY2UpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgcC0+c2F2ZSgpOwogICAgICAgICAgICAgcC0+c2V0Q2xpcFJlY3QoY2xpcC50b1Jl
Y3QoKSwgUXQ6OkludGVyc2VjdENsaXApOwogICAgICAgICAgICAgcHQuc2V0WShwdC55KCkgLSBh
c2NlbnQpOwogCi0gICAgICAgICAgICBpZiAoY3R4U2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNo
YWRvdzo6Tm9TaGFkb3cpIHsKLSAgICAgICAgICAgICAgICBDb250ZXh0U2hhZG93KiBjdHhTaGFk
b3cgPSBjdHgtPmNvbnRleHRTaGFkb3coKTsKLSAgICAgICAgICAgICAgICBpZiAoIWN0eFNoYWRv
dy0+bXVzdFVzZUNvbnRleHRTaGFkb3coY3R4KSkgeworICAgICAgICAgICAgaWYgKGN0eFNoYWRv
dy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6Ok5vU2hhZG93KSB7CisgICAgICAgICAgICAgICAgU2hh
ZG93Qmx1ciogY3R4U2hhZG93ID0gY3R4LT5zaGFkb3dCbHVyKCk7CisgICAgICAgICAgICAgICAg
aWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6OkJsdXJTaGFkb3cKKyAgICAgICAg
ICAgICAgICAgICAgJiYgKCFjdHhTaGFkb3ctPnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgfHwg
Y3R4LT5nZXRDVE0oKS5pc0lkZW50aXR5KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHAtPnNh
dmUoKTsKLSAgICAgICAgICAgICAgICAgICAgcC0+c2V0UGVuKGN0eFNoYWRvdy0+bV9jb2xvcik7
Ci0gICAgICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShjdHhTaGFkb3ctPm9mZnNldCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgcC0+c2V0UGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7
CisgICAgICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShRUG9pbnRGKGN0eC0+c3RhdGUoKS5z
aGFkb3dPZmZzZXQud2lkdGgoKSwgY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKSkp
OwogICAgICAgICAgICAgICAgICAgICBsaW5lLmRyYXcocCwgcHQpOwogICAgICAgICAgICAgICAg
ICAgICBwLT5yZXN0b3JlKCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBjdHhTaGFkb3ctPmJlZ2luU2hhZG93
TGF5ZXIoY3R4LCBib3VuZGluZ1JlY3QpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2hhZG93
UGFpbnRlcikgeworICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0Nv
bnRleHQgPSBjdHhTaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4LCBib3VuZGluZ1JlY3QpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIGl0IHdpbGwgYmUg
Ymx1cnJlZCBhbnl3YXksIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVuZGVyIGhpbnRzLgogICAgICAg
ICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0Rm9udChwLT5mb250KCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0UGVuKGN0eFNoYWRvdy0+bV9j
b2xvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRQZW4oY3R4
LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUuZHJh
dyhzaGFkb3dQYWludGVyLCBwdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjdHhTaGFkb3ct
PmVuZFNoYWRvd0xheWVyKGN0eCk7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTIwMSw0MCAr
MjA0LDQzIEBAIHN0YXRpYyB2b2lkIGRyYXdUZXh0Q29tbW9uKEdyYXBoaWNzQ29udGV4dCogY3R4
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0CiAgICAgaWYgKGN0eC0+dGV4dERyYXdp
bmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkKICAgICAgICAgdGV4dFN0cm9rZVBhdGguYWRkVGV4
dChwdCwgZm9udCwgc3RyaW5nKTsKIAotICAgIENvbnRleHRTaGFkb3cqIGN0eFNoYWRvdyA9IGN0
eC0+Y29udGV4dFNoYWRvdygpOwotICAgIGlmIChjdHhTaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0
U2hhZG93OjpOb1NoYWRvdykgeworICAgIFNoYWRvd0JsdXIqIGN0eFNoYWRvdyA9IGN0eC0+c2hh
ZG93Qmx1cigpOworICAgIGlmIChjdHgtPmhhc1NoYWRvdygpICYmIGN0eFNoYWRvdy0+dHlwZSgp
ICE9IFNoYWRvd0JsdXI6Ok5vU2hhZG93KSB7CiAgICAgICAgIGlmIChjdHgtPnRleHREcmF3aW5n
TW9kZSgpICYgVGV4dE1vZGVGaWxsKSB7Ci0gICAgICAgICAgICBpZiAoY3R4U2hhZG93LT5tX3R5
cGUgIT0gQ29udGV4dFNoYWRvdzo6Qmx1clNoYWRvdykgeworICAgICAgICAgICAgaWYgKGN0eFNo
YWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6OkJsdXJTaGFkb3cpIHsKICAgICAgICAgICAgICAg
ICBwLT5zYXZlKCk7Ci0gICAgICAgICAgICAgICAgcC0+c2V0UGVuKGN0eFNoYWRvdy0+bV9jb2xv
cik7Ci0gICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKGN0eFNoYWRvdy0+b2Zmc2V0KCkpOwor
ICAgICAgICAgICAgICAgIHAtPnNldFBlbihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpOworICAg
ICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShRUG9pbnRGKGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZz
ZXQud2lkdGgoKSwgY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKSkpOwogICAgICAg
ICAgICAgICAgIHAtPmRyYXdUZXh0KHB0LCBzdHJpbmcsIGZsYWdzLCBydW4uZXhwYW5zaW9uKCkp
OwogICAgICAgICAgICAgICAgIHAtPnJlc3RvcmUoKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgUUZvbnRNZXRyaWNzIGZtKGZvbnQpOwogICAgICAgICAgICAgICAgIFFS
ZWN0RiBib3VuZGluZ1JlY3QocHQueCgpLCBwb2ludC55KCkgLSBmbS5hc2NlbnQoKSwgZm0ud2lk
dGgoc3RyaW5nLCAtMSwgZmxhZ3MpLCBmbS5oZWlnaHQoKSk7Ci0gICAgICAgICAgICAgICAgUVBh
aW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBjdHhTaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4LCBi
b3VuZGluZ1JlY3QpOwotICAgICAgICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CisgICAg
ICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gY3R4U2hhZG93LT5i
ZWdpblNoYWRvd0xheWVyKGN0eCwgYm91bmRpbmdSZWN0KTsKKyAgICAgICAgICAgICAgICBpZiAo
c2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFp
bnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICAgICAgICAg
ICAgICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQgYW55d2F5LCB3ZSBkb24ndCBjYXJlIGFi
b3V0IHJlbmRlciBoaW50cy4KICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0
Rm9udChwLT5mb250KCkpOwotICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRQ
ZW4oY3R4U2hhZG93LT5tX2NvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRl
ci0+c2V0UGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7CiAgICAgICAgICAgICAgICAgICAg
IHNoYWRvd1BhaW50ZXItPmRyYXdUZXh0KHB0LCBzdHJpbmcsIGZsYWdzLCBydW4uZXhwYW5zaW9u
KCkpOwogICAgICAgICAgICAgICAgICAgICBjdHhTaGFkb3ctPmVuZFNoYWRvd0xheWVyKGN0eCk7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKGN0
eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkgewotICAgICAgICAgICAgaWYg
KGN0eFNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6OkJsdXJTaGFkb3cpIHsKLSAgICAg
ICAgICAgICAgICBwLT50cmFuc2xhdGUoY3R4U2hhZG93LT5vZmZzZXQoKSk7Ci0gICAgICAgICAg
ICAgICAgcC0+c3Ryb2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBlbihjdHhTaGFkb3ctPm1fY29s
b3IpKTsKLSAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoLWN0eFNoYWRvdy0+b2Zmc2V0KCkp
OworICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6OkJsdXJT
aGFkb3cpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnRGIHNoYWRvd09mZnNldChjdHgt
PnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQu
aGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShzaGFkb3dPZmZzZXQpOwor
ICAgICAgICAgICAgICAgIHAtPnN0cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgsIFFQZW4oY3R4LT5z
dGF0ZSgpLnNoYWRvd0NvbG9yKSk7CisgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKC1zaGFk
b3dPZmZzZXQpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBRRm9udE1l
dHJpY3MgZm0oZm9udCk7CiAgICAgICAgICAgICAgICAgUVJlY3RGIGJvdW5kaW5nUmVjdChwdC54
KCksIHBvaW50LnkoKSAtIGZtLmFzY2VudCgpLCBmbS53aWR0aChzdHJpbmcsIC0xLCBmbGFncyks
IGZtLmhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9
IGN0eFNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHgsIGJvdW5kaW5nUmVjdCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKKyAgICAgICAgICAgICAgICBHcmFwaGljc0Nv
bnRleHQqIHNoYWRvd0NvbnRleHQgPSBjdHhTaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4LCBi
b3VuZGluZ1JlY3QpOworICAgICAgICAgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7CisgICAg
ICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIGl0IHdpbGwg
YmUgYmx1cnJlZCBhbnl3YXksIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVuZGVyIGhpbnRzLgogICAg
ICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRGb250KHAtPmZvbnQoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnN0cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgs
IFFQZW4oY3R4U2hhZG93LT5tX2NvbG9yKSk7CisgICAgICAgICAgICAgICAgICAgIHNoYWRvd1Bh
aW50ZXItPnN0cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgsIFFQZW4oY3R4LT5zdGF0ZSgpLnNoYWRv
d0NvbG9yKSk7CiAgICAgICAgICAgICAgICAgICAgIGN0eFNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIo
Y3R4KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zMjgsNyArMzM0LDcg
QEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhLAogICAgIEFTU0VSVCghc2hvdWxkU3Ryb2tlKTsKIAog
ICAgIC8vIFNoYWRvd2VkIHRleHQgc2hvdWxkIGFsd2F5cyB0YWtlIHRoZSBjb21wbGV4IHBhdGgu
Ci0gICAgQVNTRVJUKGNvbnRleHQtPmNvbnRleHRTaGFkb3coKS0+bV90eXBlID09IENvbnRleHRT
aGFkb3c6Ok5vU2hhZG93KTsKKyAgICBBU1NFUlQoY29udGV4dC0+Y29udGV4dFNoYWRvdygpLT50
eXBlKCkgPT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpOwogCiAgICAgaWYgKCFzaG91bGRGaWxsICYm
ICFzaG91bGRTdHJva2UpCiAgICAgICAgIHJldHVybjsKQEAgLTM2MSw3ICszNjcsNyBAQCB2b2lk
IEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udERhdGEsCiAgICAgUVBhaW50ZXIqIHBhaW50ZXIgPSBjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKTsKIAogICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHQtPmNv
bnRleHRTaGFkb3coKTsKLSAgICBzd2l0Y2ggKHNoYWRvdy0+bV90eXBlKSB7CisgICAgc3dpdGNo
IChzaGFkb3ctPnR5cGUoKSkgewogICAgIGNhc2UgQ29udGV4dFNoYWRvdzo6U29saWRTaGFkb3c6
IHsKICAgICAgICAgUVBlbiBwcmV2aW91c1BlbiA9IHBhaW50ZXItPnBlbigpOwogICAgICAgICBw
YWludGVyLT5zZXRQZW4oc2hhZG93LT5tX2NvbG9yKTsKQEAgLTM3NCw4ICszODAsOSBAQCB2b2lk
IEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udERhdGEsCiAgICAgY2FzZSBDb250ZXh0U2hhZG93OjpCbHVyU2hhZG93OiB7
CiAgICAgICAgIHFyZWFsIGhlaWdodCA9IHJhd0ZvbnQuYXNjZW50KCkgKyByYXdGb250LmRlc2Nl
bnQoKSArIDE7CiAgICAgICAgIFFSZWN0RiBib3VuZGluZ1JlY3QocG9pbnQueCgpLCBwb2ludC55
KCkgLSByYXdGb250LmFzY2VudCgpLCB3aWR0aCwgaGVpZ2h0KTsKLSAgICAgICAgUVBhaW50ZXIq
IHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY29udGV4dCwgYm91bmRp
bmdSZWN0KTsKLSAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGNvbnRleHQs
IGJvdW5kaW5nUmVjdCk7CisgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7CisgICAgICAgICAg
ICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpOwogICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0UGVuKHNoYWRvdy0+bV9jb2xvcik7
CiAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5kcmF3R2x5cGhSdW4ocG9pbnQsIHF0R2x5cGhz
KTsKICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY29udGV4dCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRR
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHRRdC5jcHAKaW5kZXggNzkzY2RlMC4uYjhmZmU4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcApAQCAt
NDQsMTMgKzQ0LDEzIEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRl
ICJDb2xvci5oIgotI2luY2x1ZGUgIkNvbnRleHRTaGFkb3cuaCIKICNpbmNsdWRlICJGbG9hdENv
bnZlcnNpb24uaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIK
ICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRl
ICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgogI2luY2x1ZGUgIlRyYW5zcGFy
ZW5jeUxheWVyLmgiCiAKICNpbmNsdWRlIDxRQnJ1c2g+CkBAIC0xOTYsOCArMTk2LDI0IEBAIHB1
YmxpYzoKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5
OwogICAgIGJvb2wgaW5pdGlhbFNtb290aFBpeG1hcFRyYW5zZm9ybUhpbnQ7CiAKLSAgICBDb250
ZXh0U2hhZG93IHNoYWRvdzsKLSAgICBRU3RhY2s8Q29udGV4dFNoYWRvdz4gc2hhZG93U3RhY2s7
CisgICAgU2hhZG93Qmx1ciBzaGFkb3c7CisgICAgUVN0YWNrPFNoYWRvd0JsdXI+IHNoYWRvd1N0
YWNrOworCisgICAgYm9vbCBtdXN0VXNlU2hhZG93Qmx1cigpIGNvbnN0CisgICAgeworICAgICAg
ICAvLyBXZSBjYW4ndCBhdm9pZCBTaGFkb3dCbHVyLCBzaW5jZSB0aGUgc2hhZG93IGhhcyBibHVy
LgorICAgICAgICBpZiAoc2hhZG93LnR5cGUoKSA9PSBTaGFkb3dCbHVyOjpCbHVyU2hhZG93KQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8vIFdlIGNhbiBhdm9pZCBTaGFkb3dC
bHVyIGFuZCBvcHRpbWl6ZSwgc2luY2Ugd2UncmUgbm90IGRyYXdpbmcgb24gYQorICAgICAgICAv
LyBjYW52YXMgYW5kIGJveCBzaGFkb3dzIGFyZSBhZmZlY3RlZCBieSB0aGUgdHJhbnNmb3JtYXRp
b24gbWF0cml4LgorICAgICAgICBpZiAoIXNoYWRvdy5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcygp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBXZSBjYW4gYXZvaWQgU2hh
ZG93Qmx1ciwgc2luY2UgdGhlcmUgYXJlIG5vIHRyYW5zZm9ybWF0aW9ucyB0byBhcHBseSB0byB0
aGUgY2FudmFzLgorICAgICAgICBpZiAocCgpLT5jb21iaW5lZFRyYW5zZm9ybSgpLmlzSWRlbnRp
dHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gT3RoZXJ3aXNlLCBu
byBjaGFuY2UgYXZvaWRpbmcgU2hhZG93Qmx1ci4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQogCiAgICAgUVJlY3RGIGNsaXBCb3VuZGluZ1JlY3QoKSBjb25zdAogICAgIHsKQEAgLTMwOSw3
ICszMjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQog
ICAgIG1fZGF0YS0+cCgpLT5yZXN0b3JlKCk7CiAKICAgICBpZiAobV9kYXRhLT5zaGFkb3dTdGFj
ay5pc0VtcHR5KCkpCi0gICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRvdygpOwor
ICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IFNoYWRvd0JsdXIoRmxvYXRTaXplKG1fc3RhdGUuc2hh
ZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dCbHVyKSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQsIG1fc3Rh
dGUuc2hhZG93Q29sb3IsIG1fc3RhdGUuc2hhZG93Q29sb3JTcGFjZSk7CiAgICAgZWxzZQogICAg
ICAgICBtX2RhdGEtPnNoYWRvdyA9IG1fZGF0YS0+c2hhZG93U3RhY2sucG9wKCk7CiB9CkBAIC00
OTUsMzEgKzUxMSwyOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKICAgICBwbGF0Zm9ybVBhdGguc2V0RmlsbFJ1bGUodG9RdEZpbGxSdWxlKGZpbGxS
dWxlKCkpKTsKIAogICAgIGlmIChoYXNTaGFkb3coKSkgewotICAgICAgICBDb250ZXh0U2hhZG93
KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7Ci0gICAgICAgIGlmIChzaGFkb3ctPm11c3RVc2VD
b250ZXh0U2hhZG93KHRoaXMpIHx8IG1fc3RhdGUuZmlsbFBhdHRlcm4gfHwgbV9zdGF0ZS5maWxs
R3JhZGllbnQpCisgICAgICAgIFNoYWRvd0JsdXIqIHNoYWRvdyA9IHNoYWRvd0JsdXIoKTsKKyAg
ICAgICAgaWYgKG1fZGF0YS0+bXVzdFVzZVNoYWRvd0JsdXIoKSB8fCBtX3N0YXRlLmZpbGxQYXR0
ZXJuIHx8IG1fc3RhdGUuZmlsbEdyYWRpZW50KQogICAgICAgICB7Ci0gICAgICAgICAgICBRUGFp
bnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCBwbGF0
Zm9ybVBhdGguY29udHJvbFBvaW50UmVjdCgpKTsKLSAgICAgICAgICAgIGlmIChzaGFkb3dQYWlu
dGVyKSB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFk
b3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgcGxhdGZvcm1QYXRoLmNvbnRyb2xQb2ludFJlY3Qo
KSk7CisgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAgICAgIFFQ
YWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7
CiAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pIHsKICAgICAgICAgICAg
ICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGFmZmluZTsKLSAgICAgICAgICAgICAgICAgICAgc2hh
ZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVhbD4oc2hhZG93LT5tX2NvbG9y
LmFscGhhKCkpIC8gMjU1KTsKICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+Zmls
bFBhdGgocGxhdGZvcm1QYXRoLCBRQnJ1c2gobV9zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxh
dGZvcm1QYXR0ZXJuKGFmZmluZSkpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3Rh
dGUuZmlsbEdyYWRpZW50KSB7CiAgICAgICAgICAgICAgICAgICAgIFFCcnVzaCBicnVzaCgqbV9z
dGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGJydXNoLnNldFRyYW5zZm9ybShtX3N0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFj
ZVRyYW5zZm9ybSgpKTsKLSAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0T3Bh
Y2l0eShzdGF0aWNfY2FzdDxxcmVhbD4oc2hhZG93LT5tX2NvbG9yLmFscGhhKCkpIC8gMjU1KTsK
ICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFBhdGgocGxhdGZvcm1QYXRo
LCBicnVzaCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
UUNvbG9yIHNoYWRvd0NvbG9yID0gc2hhZG93LT5tX2NvbG9yOwotICAgICAgICAgICAgICAgICAg
ICBzaGFkb3dDb2xvci5zZXRBbHBoYUYoc2hhZG93Q29sb3IuYWxwaGFGKCkgKiBwLT5icnVzaCgp
LmNvbG9yKCkuYWxwaGFGKCkpOwotICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5m
aWxsUGF0aChwbGF0Zm9ybVBhdGgsIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAg
UUNvbG9yIHNoYWRvd0NvbG9yID0gbV9zdGF0ZS5zaGFkb3dDb2xvcjsKKyAgICAgICAgICAgICAg
ICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFBhdGgocGxhdGZvcm1QYXRoLCBwLT5icnVzaCgpLmNv
bG9yKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzaGFkb3ctPmVuZFNo
YWRvd0xheWVyKHRoaXMpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgUVBvaW50RiBvZmZzZXQgPSBzaGFkb3ctPm9mZnNldCgpOworICAgICAgICAgICAgUVBv
aW50RiBvZmZzZXQobV9zdGF0ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgbV9zdGF0ZS5zaGFkb3dP
ZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICAgICAgcC0+dHJhbnNsYXRlKG9mZnNldCk7Ci0gICAg
ICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPm1fY29sb3I7CisgICAgICAgICAg
ICBRQ29sb3Igc2hhZG93Q29sb3IgPSBtX3N0YXRlLnNoYWRvd0NvbG9yOwogICAgICAgICAgICAg
c2hhZG93Q29sb3Iuc2V0QWxwaGFGKHNoYWRvd0NvbG9yLmFscGhhRigpICogcC0+YnJ1c2goKS5j
b2xvcigpLmFscGhhRigpKTsKICAgICAgICAgICAgIHAtPmZpbGxQYXRoKHBsYXRmb3JtUGF0aCwg
c2hhZG93Q29sb3IpOwogICAgICAgICAgICAgcC0+dHJhbnNsYXRlKC1vZmZzZXQpOwpAQCAtNTQ3
LDMwICs1NjEsMjkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0
aCYgcGF0aCkKICAgICBwbGF0Zm9ybVBhdGguc2V0RmlsbFJ1bGUodG9RdEZpbGxSdWxlKGZpbGxS
dWxlKCkpKTsKIAogICAgIGlmIChoYXNTaGFkb3coKSkgewotICAgICAgICBDb250ZXh0U2hhZG93
KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7Ci0gICAgICAgIGlmIChzaGFkb3ctPm11c3RVc2VD
b250ZXh0U2hhZG93KHRoaXMpIHx8IG1fc3RhdGUuc3Ryb2tlUGF0dGVybiB8fCBtX3N0YXRlLnN0
cm9rZUdyYWRpZW50KQorICAgICAgICBTaGFkb3dCbHVyKiBzaGFkb3cgPSBzaGFkb3dCbHVyKCk7
CisgICAgICAgIGlmIChtX2RhdGEtPm11c3RVc2VTaGFkb3dCbHVyKCkgfHwgbV9zdGF0ZS5zdHJv
a2VQYXR0ZXJuIHx8IG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3QgPSBwbGF0Zm9ybVBhdGguY29udHJvbFBvaW50UmVj
dCgpOwogICAgICAgICAgICAgYm91bmRpbmdSZWN0LmluZmxhdGUocGVuLm1pdGVyTGltaXQoKSAr
IHBlbi53aWR0aEYoKSk7Ci0gICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNo
YWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCBib3VuZGluZ1JlY3QpOwotICAgICAgICAgICAg
aWYgKHNoYWRvd1BhaW50ZXIpIHsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93
Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCBib3VuZGluZ1JlY3QpOwor
ICAgICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBRUGFpbnRl
ciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAg
ICAgICAgICAgICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7CiAgICAgICAgICAgICAg
ICAgICAgIFFCcnVzaCBicnVzaCgqbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGxhdGZvcm1HcmFk
aWVudCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJ1c2guc2V0VHJhbnNmb3JtKG1fc3RhdGUu
c3Ryb2tlR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgICAgICAgICAg
ICAgICAgIFFQZW4gc2hhZG93UGVuKHBlbik7CiAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1Bl
bi5zZXRCcnVzaChicnVzaCk7Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNl
dE9wYWNpdHkoc3RhdGljX2Nhc3Q8cXJlYWw+KHNoYWRvdy0+bV9jb2xvci5hbHBoYSgpKSAvIDI1
NSk7CiAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnN0cm9rZVBhdGgocGxhdGZv
cm1QYXRoLCBzaGFkb3dQZW4pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldE9wYWNpdHkoc3RhdGljX2Nhc3Q8cXJlYWw+KG1f
ZGF0YS0+c2hhZG93Lm1fY29sb3IuYWxwaGEoKSkgLyAyNTUpOwogICAgICAgICAgICAgICAgICAg
ICBzaGFkb3dQYWludGVyLT5zdHJva2VQYXRoKHBsYXRmb3JtUGF0aCwgcGVuKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcih0aGlzKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFFQb2ludEYgb2Zm
c2V0ID0gc2hhZG93LT5vZmZzZXQoKTsKKyAgICAgICAgICAgIFFQb2ludEYgb2Zmc2V0KG1fc3Rh
dGUuc2hhZG93T2Zmc2V0LndpZHRoKCksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsK
ICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShvZmZzZXQpOwotICAgICAgICAgICAgUUNvbG9yIHNo
YWRvd0NvbG9yID0gc2hhZG93LT5tX2NvbG9yOworICAgICAgICAgICAgUUNvbG9yIHNoYWRvd0Nv
bG9yID0gbV9zdGF0ZS5zaGFkb3dDb2xvcjsKICAgICAgICAgICAgIHNoYWRvd0NvbG9yLnNldEFs
cGhhRihzaGFkb3dDb2xvci5hbHBoYUYoKSAqIHBlbi5jb2xvcigpLmFscGhhRigpKTsKICAgICAg
ICAgICAgIFFQZW4gc2hhZG93UGVuKHBlbik7CiAgICAgICAgICAgICBzaGFkb3dQZW4uc2V0Q29s
b3Ioc2hhZG93Q29sb3IpOwpAQCAtNjY4LDQ0ICs2ODEsNDIgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIAogICAgIFFQYWludGVyKiBwID0g
bV9kYXRhLT5wKCk7CiAgICAgUVJlY3RGIG5vcm1hbGl6ZWRSZWN0ID0gcmVjdC5ub3JtYWxpemVk
KCk7Ci0gICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY29udGV4dFNoYWRvdygpOworICAgIFNo
YWRvd0JsdXIqIHNoYWRvdyA9IHNoYWRvd0JsdXIoKTsKIAogICAgIGlmIChtX3N0YXRlLmZpbGxQ
YXR0ZXJuKSB7CiAgICAgICAgIFFQaXhtYXAqIGltYWdlID0gbV9zdGF0ZS5maWxsUGF0dGVybi0+
dGlsZUltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgICAgIFFQYWlu
dGVyKiBzaGFkb3dQYWludGVyID0gaGFzU2hhZG93KCkgPyBzaGFkb3ctPmJlZ2luU2hhZG93TGF5
ZXIodGhpcywgbm9ybWFsaXplZFJlY3QpIDogMDsKLSAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIp
IHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gaGFzU2hhZG93KCkg
PyBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgbm9ybWFsaXplZFJlY3QpIDogMDsKKyAg
ICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQ
YWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAgICBk
cmF3UmVwZWF0UGF0dGVybihzaGFkb3dQYWludGVyLCBpbWFnZSwgbm9ybWFsaXplZFJlY3QsIG1f
c3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgoKSwgbV9zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0
WSgpKTsKLSAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFp
bnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZUluKTsKLSAgICAgICAgICAgIHNoYWRvd1BhaW50
ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBzaGFkb3ctPm1fY29sb3IpOwogICAgICAgICAg
ICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcih0aGlzKTsKICAgICAgICAgfQogICAgICAgICBkcmF3
UmVwZWF0UGF0dGVybihwLCBpbWFnZSwgbm9ybWFsaXplZFJlY3QsIG1fc3RhdGUuZmlsbFBhdHRl
cm4tPnJlcGVhdFgoKSwgbV9zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0WSgpKTsKICAgICB9IGVs
c2UgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KSB7CiAgICAgICAgIFFCcnVzaCBicnVzaCgqbV9z
dGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CiAgICAgICAgIGJydXNoLnNl
dFRyYW5zZm9ybShtX3N0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgp
KTsKLSAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBoYXNTaGFkb3coKSA/IHNoYWRv
dy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCBub3JtYWxpemVkUmVjdCkgOiAwOwotICAgICAgICBp
ZiAoc2hhZG93UGFpbnRlcikgeworICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRl
eHQgPSBoYXNTaGFkb3coKSA/IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCBub3JtYWxp
emVkUmVjdCkgOiAwOworICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAg
UVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBi
cnVzaCk7Ci0gICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBh
aW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2VJbik7Ci0gICAgICAgICAgICBzaGFkb3dQYWlu
dGVyLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwgc2hhZG93LT5tX2NvbG9yKTsKICAgICAgICAg
ICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIodGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcC0+
ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIGJydXNoKTsKICAgICB9IGVsc2UgewogICAgICAgICBp
ZiAoaGFzU2hhZG93KCkpIHsKLSAgICAgICAgICAgIGlmIChzaGFkb3ctPm11c3RVc2VDb250ZXh0
U2hhZG93KHRoaXMpKSB7Ci0gICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIg
PSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgbm9ybWFsaXplZFJlY3QpOwotICAgICAg
ICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRv
d1BhaW50ZXItPnNldE9wYWNpdHkoc3RhdGljX2Nhc3Q8cXJlYWw+KHNoYWRvdy0+bV9jb2xvci5h
bHBoYSgpKSAvIDI1NSk7CisgICAgICAgICAgICBpZiAobV9kYXRhLT5tdXN0VXNlU2hhZG93Qmx1
cigpKSB7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0g
c2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRoaXMsIG5vcm1hbGl6ZWRSZWN0KTsKKyAgICAgICAg
ICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICBRUGFpbnRl
ciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAg
ICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwg
cC0+YnJ1c2goKSk7CiAgICAgICAgICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIo
dGhpcyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAvLyBTb2xpZCByZWN0YW5nbGUgZmlsbCB3aXRoIG5vIGJsdXIgc2hhZG93IG9yIHRy
YW5zZm9ybWF0aW9ucyBhcHBsaWVkIGNhbiBiZSBkb25lCiAgICAgICAgICAgICAgICAgLy8gZmFz
dGVyIHdpdGhvdXQgdXNpbmcgdGhlIHNoYWRvdyBsYXllciBhdCBhbGwuCi0gICAgICAgICAgICAg
ICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gc2hhZG93LT5tX2NvbG9yOworICAgICAgICAgICAgICAg
IFFDb2xvciBzaGFkb3dDb2xvciA9IG1fc3RhdGUuc2hhZG93Q29sb3I7CiAgICAgICAgICAgICAg
ICAgc2hhZG93Q29sb3Iuc2V0QWxwaGFGKHNoYWRvd0NvbG9yLmFscGhhRigpICogcC0+YnJ1c2go
KS5jb2xvcigpLmFscGhhRigpKTsKLSAgICAgICAgICAgICAgICBwLT5maWxsUmVjdChub3JtYWxp
emVkUmVjdC50cmFuc2xhdGVkKHNoYWRvdy0+b2Zmc2V0KCkpLCBzaGFkb3dDb2xvcik7CisgICAg
ICAgICAgICAgICAgcC0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QudHJhbnNsYXRlZChRUG9pbnRG
KG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LmhlaWdo
dCgpKSksIHNoYWRvd0NvbG9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC03MjQs
MTYgKzczNSwyMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yUwogICAgIFFSZWN0RiBub3JtYWxp
emVkUmVjdCA9IHJlY3Qubm9ybWFsaXplZCgpOwogCiAgICAgaWYgKGhhc1NoYWRvdygpKSB7Ci0g
ICAgICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHRTaGFkb3coKTsKLSAgICAgICAg
aWYgKHNoYWRvdy0+bXVzdFVzZUNvbnRleHRTaGFkb3codGhpcykpIHsKLSAgICAgICAgICAgIFFQ
YWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRoaXMsIG5v
cm1hbGl6ZWRSZWN0KTsKLSAgICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CisgICAgICAg
IFNoYWRvd0JsdXIqIHNoYWRvdyA9IHNoYWRvd0JsdXIoKTsKKyAgICAgICAgaWYgKG1fZGF0YS0+
bXVzdFVzZVNoYWRvd0JsdXIoKSkgeworICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFk
b3dDb250ZXh0ID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRoaXMsIG5vcm1hbGl6ZWRSZWN0
KTsKKyAgICAgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgUVBh
aW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsK
ICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50
ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2UpOwotICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50
ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBzaGFkb3ctPm1fY29sb3IpOworICAgICAgICAg
ICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBtX3N0YXRlLnNo
YWRvd0NvbG9yKTsKICAgICAgICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKHRoaXMp
OwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHAtPmZpbGxSZWN0
KG5vcm1hbGl6ZWRSZWN0LnRyYW5zbGF0ZWQoc2hhZG93LT5vZmZzZXQoKSksIHNoYWRvdy0+bV9j
b2xvcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3Ig
PSBtX3N0YXRlLnNoYWRvd0NvbG9yOworICAgICAgICAgICAgc2hhZG93Q29sb3Iuc2V0QWxwaGFG
KHNoYWRvd0NvbG9yLmFscGhhRigpICogcC0+YnJ1c2goKS5jb2xvcigpLmFscGhhRigpKTsKKyAg
ICAgICAgICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LnRyYW5zbGF0ZWQoUVBvaW50Riht
X3N0YXRlLnNoYWRvd09mZnNldC53aWR0aCgpLCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQo
KSkpLCBzaGFkb3dDb2xvcik7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwLT5maWxsUmVjdChu
b3JtYWxpemVkUmVjdCwgbV9kYXRhLT5zb2xpZENvbG9yKTsKQEAgLTc0OCwxOCArNzYzLDIwIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmCiAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0LCB0
b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOwogICAgIFFQYWludGVy
KiBwID0gbV9kYXRhLT5wKCk7CiAgICAgaWYgKGhhc1NoYWRvdygpKSB7Ci0gICAgICAgIENvbnRl
eHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHRTaGFkb3coKTsKLSAgICAgICAgaWYgKHNoYWRvdy0+
bXVzdFVzZUNvbnRleHRTaGFkb3codGhpcykpIHsKLSAgICAgICAgICAgIFFQYWludGVyKiBzaGFk
b3dQYWludGVyID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRoaXMsIHJlY3QpOwotICAgICAg
ICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKKyAgICAgICAgU2hhZG93Qmx1ciogc2hhZG93ID0g
c2hhZG93Qmx1cigpOworICAgICAgICBpZiAobV9kYXRhLT5tdXN0VXNlU2hhZG93Qmx1cigpKSB7
CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJl
Z2luU2hhZG93TGF5ZXIodGhpcywgcmVjdCk7CisgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4
dCkgeworICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+
c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKLSAg
ICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUGF0aChwYXRoLnBsYXRmb3JtUGF0aCgp
LCBRQ29sb3IobV9kYXRhLT5zaGFkb3cubV9jb2xvcikpOworICAgICAgICAgICAgICAgIHNoYWRv
d1BhaW50ZXItPmZpbGxQYXRoKHBhdGgucGxhdGZvcm1QYXRoKCksIFFDb2xvcihtX3N0YXRlLnNo
YWRvd0NvbG9yKSk7CiAgICAgICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcih0aGlz
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHAtPnRyYW5z
bGF0ZShtX2RhdGEtPnNoYWRvdy5vZmZzZXQoKSk7Ci0gICAgICAgICAgICBwLT5maWxsUGF0aChw
YXRoLnBsYXRmb3JtUGF0aCgpLCBRQ29sb3IobV9kYXRhLT5zaGFkb3cubV9jb2xvcikpOwotICAg
ICAgICAgICAgcC0+dHJhbnNsYXRlKC1tX2RhdGEtPnNoYWRvdy5vZmZzZXQoKSk7CisgICAgICAg
ICAgICBjb25zdCBRUG9pbnRGIHNoYWRvd09mZnNldChtX3N0YXRlLnNoYWRvd09mZnNldC53aWR0
aCgpLCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7CisgICAgICAgICAgICBwLT50cmFu
c2xhdGUoc2hhZG93T2Zmc2V0KTsKKyAgICAgICAgICAgIHAtPmZpbGxQYXRoKHBhdGgucGxhdGZv
cm1QYXRoKCksIFFDb2xvcihtX3N0YXRlLnNoYWRvd0NvbG9yKSk7CisgICAgICAgICAgICBwLT50
cmFuc2xhdGUoLXNoYWRvd09mZnNldCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcC0+ZmlsbFBh
dGgocGF0aC5wbGF0Zm9ybVBhdGgoKSwgUUNvbG9yKGNvbG9yKSk7CkBAIC03NzAsNyArNzg3LDcg
QEAgYm9vbCBHcmFwaGljc0NvbnRleHQ6OmluVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdAogICAg
IHJldHVybiBtX2RhdGEtPmxheWVyQ291bnQ7CiB9CiAKLUNvbnRleHRTaGFkb3cqIEdyYXBoaWNz
Q29udGV4dDo6Y29udGV4dFNoYWRvdygpCitTaGFkb3dCbHVyKiBHcmFwaGljc0NvbnRleHQ6OnNo
YWRvd0JsdXIoKQogewogICAgIHJldHVybiAmbV9kYXRhLT5zaGFkb3c7CiB9CkBAIC03OTAsNiAr
ODA3LDE4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIAogICAgIG1fZGF0YS0+cCgpLT5zZXRDbGlwUmVjdChyZWN0LCBRdDo6SW50ZXJzZWN0Q2xp
cCk7CiB9CitJbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0Cit7Cisg
ICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKKyAgICBRUmVjdEYgY2xpcFJlY3Q7CisKKyAg
ICBpZiAocC0+aGFzQ2xpcHBpbmcoKSkKKyAgICAgICAgY2xpcFJlY3QgPSBtX2RhdGEtPmNsaXBC
b3VuZGluZ1JlY3QoKTsKKyAgICBlbHNlCisgICAgICAgIGNsaXBSZWN0ID0gcC0+dHJhbnNmb3Jt
KCkuaW52ZXJ0ZWQoKS5tYXBSZWN0KHAtPndpbmRvdygpKTsKKworICAgIHJldHVybiBJbnRSZWN0
KGNsaXBSZWN0LngoKSwgY2xpcFJlY3QueSgpLCBjbGlwUmVjdC53aWR0aCgpLCBjbGlwUmVjdC5o
ZWlnaHQoKSk7Cit9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRo
JiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKQEAgLTkyNiw3ICs5NTUsNyBAQCBGbG9hdFJl
Y3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYg
ZnJlY3QsIFJvdW5kaW5nTQogICAgIHJldHVybiBGbG9hdFJlY3Qocm91bmRlZE9yaWdpbiwgcm91
bmRlZExvd2VyUmlnaHQgLSByb3VuZGVkT3JpZ2luKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgYmx1ciwg
Y29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgYmx1ciwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgLy8gUXQgZG9lc24n
dCBzdXBwb3J0IHNoYWRvd3MgbmF0aXZlbHksIHRoZXkgYXJlIGRyYXduIG1hbnVhbGx5IGluIHRo
ZSBkcmF3KgogICAgIC8vIGZ1bmN0aW9ucwpAQCAtOTM1LDEwICs5NjQsOSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBzaXplLCBmbG9h
dCBibHVyLCBjb25zdAogICAgICAgICAvLyBNZWFuaW5nIHRoYXQgdGhpcyBncmFwaGljcyBjb250
ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmluZ0NvbnRleHQKICAgICAgICAg
Ly8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1MNSBDYW52YXMgaGF2ZSBvcHBv
c2l0ZSBZIGF4aXMKICAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUoc2l6
ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29u
dGV4dFNoYWRvdyhjb2xvciwgYmx1ciwgRmxvYXRTaXplKHNpemUud2lkdGgoKSwgLXNpemUuaGVp
Z2h0KCkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBDb250ZXh0U2hh
ZG93KGNvbG9yLCBibHVyLCBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKSk7
CisgICAgfQogCisgICAgbV9kYXRhLT5zaGFkb3cgPSBTaGFkb3dCbHVyKEZsb2F0U2l6ZShtX3N0
YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Qmx1ciksIG1fc3RhdGUuc2hhZG93T2Zmc2V0
LCBjb2xvciwgY29sb3JTcGFjZSk7CiAgICAgbV9kYXRhLT5zaGFkb3cuc2V0U2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKaW5kZXggMGM4
Y2U5ZS4uNDFmZjhhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvSW1hZ2VRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvSW1hZ2VRdC5jcHAKQEAgLTM0LDExICszNCwxMSBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJh
bnNmb3JtLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJDb250ZXh0U2hh
ZG93LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgogI2luY2x1ZGUgIlN0aWxsSW1hZ2VRdC5oIgog
I2luY2x1ZGUgInF3ZWJzZXR0aW5ncy5oIgogCkBAIC0yMjQsMTEgKzIyNCwxMSBAQCB2b2lkIEJp
dG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBk
c3QsCiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IGN0eHQtPmNvbXBv
c2l0ZU9wZXJhdGlvbigpOwogICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbighaW1hZ2Ut
Pmhhc0FscGhhKCkgJiYgb3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciA/IENvbXBvc2l0ZUNvcHkg
OiBvcCk7CiAKLSAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjdHh0LT5jb250ZXh0U2hhZG93
KCk7Ci0gICAgaWYgKHNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KSB7
Ci0gICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5iZWdpblNoYWRvd0xh
eWVyKGN0eHQsIG5vcm1hbGl6ZWREc3QpOwotICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewot
ICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVhbD4o
c2hhZG93LT5tX2NvbG9yLmFscGhhKCkpIC8gMjU1KTsKKyAgICBpZiAoY3R4dC0+aGFzU2hhZG93
KCkpIHsKKyAgICAgICAgU2hhZG93Qmx1ciogc2hhZG93ID0gY3R4dC0+c2hhZG93Qmx1cigpOwor
ICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hh
ZG93TGF5ZXIoY3R4dCwgbm9ybWFsaXplZERzdCk7CisgICAgICAgIGlmIChzaGFkb3dDb250ZXh0
KSB7CisgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZHJhd1BpeG1h
cChub3JtYWxpemVkRHN0LCAqaW1hZ2UsIG5vcm1hbGl6ZWRTcmMpOwogICAgICAgICAgICAgc2hh
ZG93LT5lbmRTaGFkb3dMYXllcihjdHh0KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAKaW5kZXggM2IwODk5
NS4uY2IyYTQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvU3RpbGxJbWFnZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9TdGlsbEltYWdlUXQuY3BwCkBAIC0yOCw5ICsyOCw5IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiU3RpbGxJbWFnZVF0LmgiCiAKLSNpbmNsdWRlICJDb250ZXh0U2hhZG93
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgor
I2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKIAogI2luY2x1ZGUgPFFQYWludGVyPgogCkBAIC03NCwx
MSArNzQsMTEgQEAgdm9pZCBTdGlsbEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkc3QsCiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVy
YXRvciA9IGN0eHQtPmNvbXBvc2l0ZU9wZXJhdGlvbigpOwogICAgIGN0eHQtPnNldENvbXBvc2l0
ZU9wZXJhdGlvbihvcCk7CiAKLSAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjdHh0LT5jb250
ZXh0U2hhZG93KCk7Ci0gICAgaWYgKHNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6Ok5v
U2hhZG93KSB7Ci0gICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5iZWdp
blNoYWRvd0xheWVyKGN0eHQsIG5vcm1hbGl6ZWREc3QpOwotICAgICAgICBpZiAoc2hhZG93UGFp
bnRlcikgewotICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNfY2Fz
dDxxcmVhbD4oc2hhZG93LT5tX2NvbG9yLmFscGhhKCkpIC8gMjU1KTsKKyAgICBpZiAoY3R4dC0+
aGFzU2hhZG93KCkpIHsKKyAgICAgICAgU2hhZG93Qmx1ciogc2hhZG93ID0gY3R4dC0+c2hhZG93
Qmx1cigpOworICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ct
PmJlZ2luU2hhZG93TGF5ZXIoY3R4dCwgbm9ybWFsaXplZERzdCk7CisgICAgICAgIGlmIChzaGFk
b3dDb250ZXh0KSB7CisgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRv
d0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+
ZHJhd1BpeG1hcChub3JtYWxpemVkRHN0LCAqbV9waXhtYXAsIG5vcm1hbGl6ZWRTcmMpOwogICAg
ICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcihjdHh0KTsKICAgICAgICAgfQotLSAKMS43
LjQuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98786</attachid>
            <date>2011-06-27 14:30:02 -0700</date>
            <delta_ts>2011-06-28 02:58:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Qt-Add-ShadowBlur-support.patch</filename>
            <type>text/plain</type>
            <size>43800</size>
            <attacher name="Igor Trindade Oliveira">igor.oliveira</attacher>
            
              <data encoding="base64">RnJvbSAxOWViMWUwODczYjE5YmY0MzI5NTliNWY0NjFjNTg4ZmMxNmFhZTliIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBJZ29yIE9saXZlaXJhIDxpZ29yLm9saXZlaXJhQG9wZW5ib3Nz
YS5vcmc+CkRhdGU6IFN1biwgMjYgSnVuIDIwMTEgMTA6MTk6MzYgLTA0MDAKU3ViamVjdDogW1BB
VENIXSBbUXRdIEFkZCBTaGFkb3dCbHVyIHN1cHBvcnQKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ0ICsrKysrCiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnBybyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KIC4uLi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgIHwgICAgMiArLQog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggfCAgICA3
ICstCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCAgICB8
ICAgNjIgKysrKysrKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1
ci5oICAgICAgfCAgIDIwICsrLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFk
b3dRdC5jcHAgICAgICAgfCAgMTY4IC0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwICAgICB8ICAgODMgKysrKysrLS0tLS0K
IC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAgICAgIHwgIDE0
NCArKysrKysrKysrLS0tLS0tLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
SW1hZ2VRdC5jcHAgICAgfCAgIDEyICstCiAuLi4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9TdGlsbEltYWdlUXQuY3BwICB8ICAgMTIgKy0KIDExIGZpbGVzIGNoYW5nZWQsIDI3MiBpbnNl
cnRpb25zKCspLCAyODcgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvd1F0LmNwcAoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCBjOTRiYzVhLi41M2U5Mzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTEt
MDYtMjcgIElnb3IgT2xpdmVpcmEgIDxpZ29yLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBBZGQgc2hh
ZG93Ymx1ciBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02Mjk5NworCisgICAgICAgIFVzZSBTaGFkb3dCbHVyIGluc3RlYWQgb2YgQ29udGV4
dFNoYWRvdyB0byBoYW5kbGUgY2FudmFzIGFuZCBjc3Mgc2hhZG93cy4gU2hhZG93Qmx1ciBpcwor
ICAgICAgICBhIG5ld2VyIGFuZCBwbGF0Zm9ybSBpbmRlcGVuZGVudCBzaGFkb3cgaW1wbGVtZW50
YXRpb24uCisgICAgICAgIFF0IFFQYWludGVyIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3Igc2hh
ZG93cyBzbyBpcyBuZWNlc3NhcnkgdG8gY3JlYXRlIGEgbGF5ZXIgc3VwcG9ydAorICAgICAgICB0
byBkcmF3IGNvbXBsZXggc2hhcGVzIGFuZCBmb250cy4gVGhlIGJlZ2luU2hhZG93TGF5ZXIgY3Jl
YXRlcyBhIHRlbXBvcmFyeSBzaGFkb3cgYnVmZmVyCisgICAgICAgIHdoZXJlIHRoZSBjYW52YXMg
Y2FuIGRyYXcgb250byBhbmQgZW5kU2hhZG93TGF5ZXIgYXBwbGllcyB0aGUgYmx1ciBmaWx0ZXIs
IGNvbG9ycyB0aGUKKyAgICAgICAgc2hhZG93IGJ1ZmZlciBhbmQgZHJhdyB0aGUgZmluYWwgc2hh
ZG93IHRvIHRoZSBncmFwaGljcyBjb250ZXh0LgorCisgICAgICAgICogV2ViQ29yZS5wcm86Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6
OlNoYWRvd0JsdXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6Ymx1ckFuZENvbG9yU2hhZG93QnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJlZ2luU2hhZG93TGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhZG93Qmx1cjo6ZW5kU2hhZG93TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OnR5
cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3dRdC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmRyYXdUZXh0Q29tbW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZTo6bXVzdFVzZVNoYWRvd0JsdXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hhZG93Qmx1cik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmRyYXcpOgorCiAyMDExLTA2LTI1ICBEaW1p
dHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggYWUxZTY4MC4uYjhkY2NjYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KQEAgLTk4MCw3ICs5ODAsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9Gb250RmFtaWx5LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgXAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9TaGFk
b3dCbHVyLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcCBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UXVhZC5jcHAgXApAQCAtMTk0Miw3ICsxOTQyLDcgQEAgSEVBREVSUyArPSBcCiAg
ICAgcGxhdGZvcm0vbW9jay9TcGVlY2hJbnB1dENsaWVudE1vY2suaCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaCBc
Ci0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5oIFwKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9TaGFkb3dCbHVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVC
bGVuZC5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmggXApA
QCAtMjUyMSw3ICsyNTIxLDYgQEAgU09VUkNFUyArPSBcCiAgICAgcGFnZS9xdC9GcmFtZVF0LmNw
cCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNmb3JtYXRpb25NYXRyaXhRdC5jcHAg
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbG9yUXQuY3BwIFwKLSAgICBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRh
UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFBvaW50UXQuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
Y3BwCmluZGV4IDNiNzdiOWYuLmYzZjk5ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtNTg1LDcgKzU4NSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogYnVm
ZmVyLCBjb25zdCBGbG9hdFJlY3QmIHJlCiAgICAgYnVmZmVyLT5jbGlwKHRoaXMsIHJlY3QpOwog
fQogCi0jaWYgIVVTRShDRykKKyNpZiAhVVNFKENHKSAmJiAhUExBVEZPUk0oUVQpCiBJbnRSZWN0
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oCmluZGV4IDQ5ZGU0MWYuLmVlMGFlNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC01NCw2ICs1NCw3
IEBAIHR5cGVkZWYgY2xhc3MgV2ViQ29yZTo6U3VyZmFjZU9wZW5WRyBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDsKICNpbmNsdWRlIDxRUGFpbnRlcj4KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IENvbnRleHRTaGFkb3c7CitjbGFzcyBTaGFkb3dCbHVyOwogfQogdHlwZWRlZiBRUGFpbnRlciBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKICNlbGlmIFBMQVRGT1JNKFdYKQpAQCAtNDg1LDEwICs0
ODYsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHRha2VPd25lcnNoaXBP
ZlBsYXRmb3JtQ29udGV4dCgpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShRVCkgfHwgVVNFKENB
SVJPKQorI2lmIFVTRShDQUlSTykKICAgICAgICAgQ29udGV4dFNoYWRvdyogY29udGV4dFNoYWRv
dygpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShRVCkKKyAgICAgICAgU2hhZG93Qmx1ciogc2hh
ZG93Qmx1cigpOworI2VuZGlmCisKICNpZiBVU0UoQ0FJUk8pCiAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dChjYWlyb190Kik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2hhZG93Qmx1ci5jcHAKaW5kZXggMjVmYzlhYS4uY2QyMmFlMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTE5Myw2ICsx
OTMsMjYgQEAgU2hhZG93Qmx1cjo6U2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUmIHJhZGl1cywg
Y29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IEMKICAgICAgICAgbV90eXBlID0gU29saWRT
aGFkb3c7CiB9CiAKK1NoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgU2hhZG93Qmx1ciYgc2hh
ZG93Qmx1cikKKyAgICA6IG1fdHlwZShzaGFkb3dCbHVyLm1fdHlwZSkKKyAgICAsIG1fY29sb3Io
c2hhZG93Qmx1ci5tX2NvbG9yKQorICAgICwgbV9jb2xvclNwYWNlKHNoYWRvd0JsdXIubV9jb2xv
clNwYWNlKQorICAgICwgbV9ibHVyUmFkaXVzKHNoYWRvd0JsdXIubV9ibHVyUmFkaXVzKQorICAg
ICwgbV9vZmZzZXQoc2hhZG93Qmx1ci5tX29mZnNldCkKKyAgICAsIG1fc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMoc2hhZG93Qmx1ci5tX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQoreworICAgIEFT
U0VSVCghc2hhZG93Qmx1ci5tX2xheWVySW1hZ2UpOworCisgICAgbV9sYXllckltYWdlID0gMDsK
K30KKworU2hhZG93Qmx1cjo6U2hhZG93Qmx1cigpCisgICAgOiBtX3R5cGUoTm9TaGFkb3cpCisg
ICAgLCBtX2JsdXJSYWRpdXMoMCwgMCkKKyAgICAsIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMo
ZmFsc2UpCit7Cit9CisKIC8vIEluc3RlYWQgb2YgaW50ZWdlciBkaXZpc2lvbiwgd2UgdXNlIDE3
LjE1IGZvciBmaXhlZC1wb2ludCBkaXZpc2lvbi4KIHN0YXRpYyBjb25zdCBpbnQgYmx1clN1bVNo
aWZ0ID0gMTU7CiAKQEAgLTIzNyw2ICsyNTcsMTQgQEAgc3RhdGljIHZvaWQgY2FsY3VsYXRlTG9i
ZXMoaW50IGxvYmVzW11bMl0sIGZsb2F0IGJsdXJSYWRpdXMsIGJvb2wgc2hhZG93c0lnbm9yZVQK
ICAgICB9CiB9CiAKK3ZvaWQgU2hhZG93Qmx1cjo6Y2xlYXIoKQoreworICAgIG1fdHlwZSA9IE5v
U2hhZG93OworICAgIG1fY29sb3IgPSBDb2xvcigpOworICAgIG1fYmx1clJhZGl1cyA9IEZsb2F0
U2l6ZSgpOworICAgIG1fb2Zmc2V0ID0gRmxvYXRTaXplKCk7Cit9CisKIHZvaWQgU2hhZG93Qmx1
cjo6Ymx1ckxheWVySW1hZ2UodW5zaWduZWQgY2hhciogaW1hZ2VEYXRhLCBjb25zdCBJbnRTaXpl
JiBzaXplLCBpbnQgcm93U3RyaWRlKQogewogICAgIGNvbnN0IGludCBjaGFubmVsc1s0XSA9IHsg
MywgMCwgMSwgMyB9OwpAQCAtODI4LDkgKzg1Niw0MyBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJB
bmRDb2xvclNoYWRvd0J1ZmZlcihjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUpCiAKICAgICAv
LyBNYXNrIHRoZSBpbWFnZSB3aXRoIHRoZSBzaGFkb3cgY29sb3IuCiAgICAgR3JhcGhpY3NDb250
ZXh0KiBzaGFkb3dDb250ZXh0ID0gbV9sYXllckltYWdlLT5jb250ZXh0KCk7CisgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpzaGFkb3dDb250ZXh0KTsKICAgICBzaGFk
b3dDb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlSW4pOwogICAg
IHNoYWRvd0NvbnRleHQtPnNldEZpbGxDb2xvcihtX2NvbG9yLCBtX2NvbG9yU3BhY2UpOwogICAg
IHNoYWRvd0NvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdCgwLCAwLCB0ZW1wbGF0ZVNpemUud2lk
dGgoKSwgdGVtcGxhdGVTaXplLmhlaWdodCgpKSk7CiB9CiAKK0dyYXBoaWNzQ29udGV4dCogU2hh
ZG93Qmx1cjo6YmVnaW5TaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQgKmNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgbGF5ZXJBcmVhKQoreworICAgIGFkanVzdEJsdXJSYWRpdXMoY29udGV4dCk7
CisKKyAgICBJbnRSZWN0IGxheWVyUmVjdCA9IGNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0KGNv
bnRleHQsIGxheWVyQXJlYSwgY29udGV4dC0+Y2xpcEJvdW5kcygpKTsKKworICAgIGlmIChsYXll
clJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG1fbGF5ZXJJbWFnZSA9
IFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLmdldFNjcmF0Y2hCdWZmZXIobGF5ZXJSZWN0LnNpemUo
KSk7CisKKyAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBtX2xheWVySW1hZ2Ut
PmNvbnRleHQoKTsKKyAgICBzaGFkb3dDb250ZXh0LT5zYXZlKCk7CisgICAgc2hhZG93Q29udGV4
dC0+Y2xlYXJSZWN0KEZsb2F0UmVjdCgwLCAwLCBtX2xheWVyU2l6ZS53aWR0aCgpLCBtX2xheWVy
U2l6ZS5oZWlnaHQoKSkpOworCisgICAgc2hhZG93Q29udGV4dC0+dHJhbnNsYXRlKG1fbGF5ZXJD
b250ZXh0VHJhbnNsYXRpb24pOworICAgIHJldHVybiBzaGFkb3dDb250ZXh0OworfQorCit2b2lk
IFNoYWRvd0JsdXI6OmVuZFNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sK
KyAgICBtX2xheWVySW1hZ2UtPmNvbnRleHQoKS0+cmVzdG9yZSgpOworCisgICAgYmx1ckFuZENv
bG9yU2hhZG93QnVmZmVyKGV4cGFuZGVkSW50U2l6ZShtX2xheWVyU2l6ZSkpOworICAgIEdyYXBo
aWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlKCpjb250ZXh0KTsKKworICAgIGNvbnRleHQt
PmNsZWFyU2hhZG93KCk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1fbGF5ZXJJbWFn
ZSwgQ29sb3JTcGFjZURldmljZVJHQiwgcm91bmRlZEludFBvaW50KG1fbGF5ZXJPcmlnaW4pLCBJ
bnRSZWN0KDAsIDAsIG1fbGF5ZXJTaXplLndpZHRoKCksIG1fbGF5ZXJTaXplLmhlaWdodCgpKSwg
Y29udGV4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCkpOworCisgICAgbV9sYXllckltYWdlID0gMDsK
KyAgICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TaGFkb3dCbHVyLmgKaW5kZXggMjAyZmYzZC4uODk4ZWMxYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaApAQCAtNDIsMTggKzQy
LDMxIEBAIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIGNsYXNzIEltYWdlQnVmZmVyOwogCiBjbGFz
cyBTaGFkb3dCbHVyIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTaGFkb3dCbHVyKTsKIHB1
YmxpYzoKKyAgICBlbnVtIFNoYWRvd1R5cGUgeworICAgICAgICBOb1NoYWRvdywKKyAgICAgICAg
U29saWRTaGFkb3csCisgICAgICAgIEJsdXJTaGFkb3cKKyAgICB9OworCiAgICAgU2hhZG93Qmx1
cihjb25zdCBGbG9hdFNpemUmIHJhZGl1cywgY29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0
IENvbG9yJiwgQ29sb3JTcGFjZSk7CisgICAgU2hhZG93Qmx1cihjb25zdCBTaGFkb3dCbHVyJik7
CisgICAgU2hhZG93Qmx1cigpOwogCiAgICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyhib29sIGlnbm9yZVRyYW5zZm9ybXMpIHsgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IGln
bm9yZVRyYW5zZm9ybXM7IH0KICAgICBib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKCkgY29u
c3QgeyByZXR1cm4gbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsgfQogCisgICAgR3JhcGhpY3ND
b250ZXh0KiBiZWdpblNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVj
dCYgbGF5ZXJBcmVhKTsKKyAgICB2b2lkIGVuZFNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCop
OworCiAgICAgdm9pZCBkcmF3UmVjdFNoYWRvdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBSb3VuZGVkSW50UmVjdDo6UmFkaWkmKTsKICAgICB2b2lkIGRyYXdJbnNl
dFNoYWRvdyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBGbG9hdFJl
Y3QmIGhvbGVSZWN0LCBjb25zdCBSb3VuZGVkSW50UmVjdDo6UmFkaWkmIGhvbGVSYWRpaSk7CiAK
ICAgICB2b2lkIGJsdXJMYXllckltYWdlKHVuc2lnbmVkIGNoYXIqLCBjb25zdCBJbnRTaXplJiwg
aW50IHN0cmlkZSk7CiAKKyAgICB2b2lkIGNsZWFyKCk7CisKKyAgICBTaGFkb3dUeXBlIHR5cGUo
KSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KIHByaXZhdGU6CiAgICAgdm9pZCBkcmF3U2hhZG93
QnVmZmVyKEdyYXBoaWNzQ29udGV4dCopOwogCkBAIC04MCwxMSArOTMsNiBAQCBwcml2YXRlOgog
ICAgIAogICAgIEludFNpemUgYmx1cnJlZEVkZ2VTaXplKCkgY29uc3Q7CiAgICAgCi0gICAgZW51
bSBTaGFkb3dUeXBlIHsKLSAgICAgICAgTm9TaGFkb3csCi0gICAgICAgIFNvbGlkU2hhZG93LAot
ICAgICAgICBCbHVyU2hhZG93Ci0gICAgfTsKICAgICAKICAgICBTaGFkb3dUeXBlIG1fdHlwZTsK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4
dFNoYWRvd1F0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRl
eHRTaGFkb3dRdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllYjMxYTcuLjAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNo
YWRvd1F0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDEwIFNlbmNoYSwgSW5jLgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRF
UiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVS
LCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNvbnRleHRTaGFkb3cuaCIKLQot
I2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgPFFQYWludGVyPgotI2luY2x1ZGUgPFFUaW1lckV2ZW50PgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLS8vIENvbnRleHRTaGFkb3cgbmVlZHMgYSBzY3JhdGNoIGltYWdlIGFz
IHRoZSBidWZmZXIgZm9yIHRoZSBibHVyIGZpbHRlci4KLS8vIEluc3RlYWQgb2YgY3JlYXRpbmcg
YW5kIGRlc3Ryb3lpbmcgdGhlIGJ1ZmZlciBmb3IgZXZlcnkgb3BlcmF0aW9uLAotLy8gd2UgY3Jl
YXRlIGEgYnVmZmVyIHdoaWNoIHdpbGwgYmUgYXV0b21hdGljYWxseSBwdXJnZWQgdmlhIGEgdGlt
ZXIuCi0KLWNsYXNzIFNoYWRvd0J1ZmZlcjogcHVibGljIFFPYmplY3QgewotcHVibGljOgotICAg
IFNoYWRvd0J1ZmZlcihRT2JqZWN0KiBwYXJlbnQgPSAwKTsKLQotICAgIFFJbWFnZSogc2NyYXRj
aEltYWdlKGNvbnN0IFFTaXplJiBzaXplKTsKLQotICAgIHZvaWQgc2NoZWR1bGVQdXJnZSgpOwot
Ci1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCB0aW1lckV2ZW50KFFUaW1lckV2ZW50KiBldmVudCk7Ci0K
LXByaXZhdGU6Ci0gICAgUUltYWdlIGltYWdlOwotICAgIGludCB0aW1lcklkOwotfTsKLQotU2hh
ZG93QnVmZmVyOjpTaGFkb3dCdWZmZXIoUU9iamVjdCogcGFyZW50KQotICAgIDogUU9iamVjdChw
YXJlbnQpCi0gICAgLCB0aW1lcklkKC0xKQotewotfQotCi1RSW1hZ2UqIFNoYWRvd0J1ZmZlcjo6
c2NyYXRjaEltYWdlKGNvbnN0IFFTaXplJiBzaXplKQotewotICAgIGludCB3aWR0aCA9IHNpemUu
d2lkdGgoKTsKLSAgICBpbnQgaGVpZ2h0ID0gc2l6ZS5oZWlnaHQoKTsKLQotICAgIC8vIFdlIGRv
IG5vdCBuZWVkIHRvIHJlY3JlYXRlIHRoZSBidWZmZXIgaWYgdGhlIGJ1ZmZlciBpcyByZWFzb25h
Ymx5Ci0gICAgLy8gbGFyZ2VyIHRoYW4gdGhlIHJlcXVlc3RlZCBzaXplLiBIb3dldmVyLCBpZiB0
aGUgcmVxdWVzdGVkIHNpemUgaXMKLSAgICAvLyBtdWNoIHNtYWxsZXIgdGhhbiBvdXIgYnVmZmVy
LCByZWR1Y2Ugb3VyIGJ1ZmZlciBzbyB0aGF0IHdlIHdpbGwgbm90Ci0gICAgLy8ga2VlcCB0b28g
bWFueSBhbGxvY2F0ZWQgcGl4ZWxzIGZvciB0b28gbG9uZy4KLSAgICBpZiAoIWltYWdlLmlzTnVs
bCgpICYmIChpbWFnZS53aWR0aCgpID4gd2lkdGgpICYmIChpbWFnZS5oZWlnaHQoKSA+IGhlaWdo
dCkpCi0gICAgICAgIGlmICgoKDIgKiB3aWR0aCkgPiBpbWFnZS53aWR0aCgpKSAmJiAoKDIgKiBo
ZWlnaHQpID4gaW1hZ2UuaGVpZ2h0KCkpKSB7Ci0gICAgICAgICAgICBpbWFnZS5maWxsKDApOwot
ICAgICAgICAgICAgcmV0dXJuICZpbWFnZTsKLSAgICAgICAgfQotCi0gICAgLy8gUm91bmQgdG8g
dGhlIG5lYXJlc3QgMzIgcGl4ZWxzIHNvIHdlIGRvIG5vdCBncm93IHRoZSBidWZmZXIgZXZlcnl0
aW1lCi0gICAgLy8gdGhlcmUgaXMgbGFyZ2VyIHJlcXVlc3QgYnkgMSBwaXhlbC4KLSAgICB3aWR0
aCA9ICgxICsgKHdpZHRoID4+IDUpKSA8PCA1OwotICAgIGhlaWdodCA9ICgxICsgKGhlaWdodCA+
PiA1KSkgPDwgNTsKLQotICAgIGltYWdlID0gUUltYWdlKHdpZHRoLCBoZWlnaHQsIFFJbWFnZTo6
Rm9ybWF0X0FSR0IzMl9QcmVtdWx0aXBsaWVkKTsKLSAgICBpbWFnZS5maWxsKDApOwotICAgIHJl
dHVybiAmaW1hZ2U7Ci19Ci0KLXZvaWQgU2hhZG93QnVmZmVyOjpzY2hlZHVsZVB1cmdlKCkKLXsK
LSAgICBzdGF0aWMgY29uc3QgZG91YmxlIEJ1ZmZlclB1cmdlRGVsYXkgPSAyOyAvLyBzZWNvbmRz
Ci0gICAgaWYgKHRpbWVySWQgPj0gMCkKLSAgICAgICAga2lsbFRpbWVyKHRpbWVySWQpOwotICAg
IHRpbWVySWQgPSBzdGFydFRpbWVyKEJ1ZmZlclB1cmdlRGVsYXkgKiAxMDAwKTsKLX0KLQotdm9p
ZCBTaGFkb3dCdWZmZXI6OnRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqIGV2ZW50KQotewotICAgIGlm
IChldmVudC0+dGltZXJJZCgpID09IHRpbWVySWQpIHsKLSAgICAgICAga2lsbFRpbWVyKHRpbWVy
SWQpOwotICAgICAgICBpbWFnZSA9IFFJbWFnZSgpOwotICAgIH0KLSAgICBRT2JqZWN0Ojp0aW1l
ckV2ZW50KGV2ZW50KTsKLX0KLQotUV9HTE9CQUxfU1RBVElDKFNoYWRvd0J1ZmZlciwgc2NyYXRj
aFNoYWRvd0J1ZmZlcikKLQotUGxhdGZvcm1Db250ZXh0IENvbnRleHRTaGFkb3c6OmJlZ2luU2hh
ZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGxheWVy
QXJlYSkKLXsKLSAgICAvLyBTZXQgbV9ibHVyRGlzdGFuY2UuCi0gICAgYWRqdXN0Qmx1ckRpc3Rh
bmNlKGNvbnRleHQpOwotCi0gICAgUGxhdGZvcm1Db250ZXh0IHAgPSBjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKTsKLQotICAgIFFSZWN0IGNsaXBSZWN0OwotICAgIGlmIChwLT5oYXNDbGlwcGlu
ZygpKQotI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA4LCAwKQotICAgICAg
ICBjbGlwUmVjdCA9IHAtPmNsaXBCb3VuZGluZ1JlY3QoKS50b0FsaWduZWRSZWN0KCk7Ci0jZWxz
ZQotICAgICAgICBjbGlwUmVjdCA9IHAtPmNsaXBSZWdpb24oKS5ib3VuZGluZ1JlY3QoKTsKLSNl
bmRpZgotICAgIGVsc2UKLSAgICAgICAgY2xpcFJlY3QgPSBwLT50cmFuc2Zvcm0oKS5pbnZlcnRl
ZCgpLm1hcFJlY3QocC0+d2luZG93KCkpOwotCi0gICAgLy8gU2V0IG1fbGF5ZXJPcmlnaW4sIG1f
bGF5ZXJDb250ZXh0VHJhbnNsYXRpb24sIG1fc291cmNlUmVjdC4KLSAgICBJbnRSZWN0IGNsaXAo
Y2xpcFJlY3QueCgpLCBjbGlwUmVjdC55KCksIGNsaXBSZWN0LndpZHRoKCksIGNsaXBSZWN0Lmhl
aWdodCgpKTsKLSAgICBJbnRSZWN0IGxheWVyUmVjdCA9IGNhbGN1bGF0ZUxheWVyQm91bmRpbmdS
ZWN0KGNvbnRleHQsIGxheWVyQXJlYSwgY2xpcCk7Ci0KLSAgICAvLyBEb24ndCBwYWludCBpZiB3
ZSBhcmUgdG90YWxseSBvdXRzaWRlIHRoZSBjbGlwIHJlZ2lvbi4KLSAgICBpZiAobGF5ZXJSZWN0
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBTaGFkb3dCdWZmZXIqIHNoYWRv
d0J1ZmZlciA9IHNjcmF0Y2hTaGFkb3dCdWZmZXIoKTsKLSAgICBRSW1hZ2UqIHNoYWRvd0ltYWdl
ID0gc2hhZG93QnVmZmVyLT5zY3JhdGNoSW1hZ2UobGF5ZXJSZWN0LnNpemUoKSk7Ci0gICAgbV9s
YXllckltYWdlID0gUUltYWdlKCpzaGFkb3dJbWFnZSk7Ci0KLSAgICBtX2xheWVyQ29udGV4dCA9
IG5ldyBRUGFpbnRlcjsKLSAgICBtX2xheWVyQ29udGV4dC0+YmVnaW4oJm1fbGF5ZXJJbWFnZSk7
Ci0gICAgbV9sYXllckNvbnRleHQtPnNldEZvbnQocC0+Zm9udCgpKTsKLSAgICBtX2xheWVyQ29u
dGV4dC0+dHJhbnNsYXRlKG1fbGF5ZXJDb250ZXh0VHJhbnNsYXRpb24pOwotICAgIHJldHVybiBt
X2xheWVyQ29udGV4dDsKLX0KLQotdm9pZCBDb250ZXh0U2hhZG93OjplbmRTaGFkb3dMYXllcihH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQpCi17Ci0gICAgbV9sYXllckNvbnRleHQtPmVuZCgpOwot
ICAgIGRlbGV0ZSBtX2xheWVyQ29udGV4dDsKLSAgICBtX2xheWVyQ29udGV4dCA9IDA7Ci0KLSAg
ICBpZiAobV90eXBlID09IEJsdXJTaGFkb3cpIHsKLSAgICAgICAgYmx1ckxheWVySW1hZ2UobV9s
YXllckltYWdlLmJpdHMoKSwgSW50U2l6ZShtX2xheWVySW1hZ2Uud2lkdGgoKSwgbV9sYXllcklt
YWdlLmhlaWdodCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgbV9sYXllckltYWdlLmJ5dGVz
UGVyTGluZSgpKTsKLSAgICB9Ci0KLSAgICBpZiAobV90eXBlICE9IE5vU2hhZG93KSB7Ci0gICAg
ICAgIC8vICJDb2xvcml6ZSIgd2l0aCB0aGUgcmlnaHQgc2hhZG93IGNvbG9yLgotICAgICAgICBR
UGFpbnRlciBwKCZtX2xheWVySW1hZ2UpOwotICAgICAgICBwLnNldENvbXBvc2l0aW9uTW9kZShR
UGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZUluKTsKLSAgICAgICAgcC5maWxsUmVjdCht
X2xheWVySW1hZ2UucmVjdCgpLCBtX2NvbG9yLnJnYigpKTsKLSAgICAgICAgcC5lbmQoKTsKLSAg
ICB9Ci0KLSAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd0ltYWdlKG1fbGF5ZXJP
cmlnaW4sIG1fbGF5ZXJJbWFnZSwgbV9zb3VyY2VSZWN0KTsKLQotICAgIHNjcmF0Y2hTaGFkb3dC
dWZmZXIoKS0+c2NoZWR1bGVQdXJnZSgpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcAppbmRleCBhNWExNmUwLi5hMjEyZWVmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAKQEAgLTIz
LDcgKzIzLDYgQEAKICNpbmNsdWRlICJGb250LmgiCiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zv
cm0uaCIKLSNpbmNsdWRlICJDb250ZXh0U2hhZG93LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0
aW9uLmgiCiAjaW5jbHVkZSAiRm9udEZhbGxiYWNrTGlzdC5oIgogI2luY2x1ZGUgIkZvbnRTZWxl
Y3Rvci5oIgpAQCAtMzQsNiArMzMsNyBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgorI2luY2x1
ZGUgIlNoYWRvd0JsdXIuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCiAKICNpbmNsdWRlIDxRQnJ1
c2g+CkBAIC0xNDIsNDAgKzE0Miw0MyBAQCBzdGF0aWMgdm9pZCBkcmF3VGV4dENvbW1vbihHcmFw
aGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdAogICAgICAg
ICAgICAgUVJlY3RGIGJvdW5kaW5nUmVjdChwb2ludC54KCkgKyB4MSwgcG9pbnQueSgpIC0gYXNj
ZW50LCB4MiAtIHgxLCBmbS5oZWlnaHQoKSk7CiAgICAgICAgICAgICBRUmVjdEYgY2xpcCA9IGJv
dW5kaW5nUmVjdDsKIAotICAgICAgICAgICAgQ29udGV4dFNoYWRvdyogY3R4U2hhZG93ID0gY3R4
LT5jb250ZXh0U2hhZG93KCk7Ci0KLSAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPm1fdHlwZSAh
PSBDb250ZXh0U2hhZG93OjpOb1NoYWRvdykgeworICAgICAgICAgICAgU2hhZG93Qmx1ciogY3R4
U2hhZG93ID0gY3R4LT5zaGFkb3dCbHVyKCk7CisgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50
eXBlKCkgIT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBR
UG9pbnRGIHNoYWRvd09mZnNldChjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0
eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICAgICAgICAgIHFyZWFs
IGR4MSA9IDAsIGR4MiA9IDAsIGR5MSA9IDAsIGR5MiA9IDA7Ci0gICAgICAgICAgICAgICAgaWYg
KGN0eFNoYWRvdy0+b2Zmc2V0KCkueCgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgZHgyID0g
Y3R4U2hhZG93LT5vZmZzZXQoKS54KCk7CisgICAgICAgICAgICAgICAgaWYgKHNoYWRvd09mZnNl
dC54KCkgPiAwKQorICAgICAgICAgICAgICAgICAgICBkeDIgPSBzaGFkb3dPZmZzZXQueCgpOwog
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZHgxID0gLWN0eFNoYWRv
dy0+b2Zmc2V0KCkueCgpOwotICAgICAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPm9mZnNldCgp
LnkoKSA+IDApCi0gICAgICAgICAgICAgICAgICAgIGR5MiA9IGN0eFNoYWRvdy0+b2Zmc2V0KCku
eSgpOworICAgICAgICAgICAgICAgICAgICBkeDEgPSAtc2hhZG93T2Zmc2V0LngoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoc2hhZG93T2Zmc2V0LnkoKSA+IDApCisgICAgICAgICAgICAgICAgICAg
IGR5MiA9IHNoYWRvd09mZnNldC55KCk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBkeTEgPSAtY3R4U2hhZG93LT5vZmZzZXQoKS55KCk7CisgICAgICAgICAgICAg
ICAgICAgIGR5MSA9IC1zaGFkb3dPZmZzZXQueSgpOwogICAgICAgICAgICAgICAgIC8vIGV4cGFu
ZCB0aGUgY2xpcCByZWN0IHRvIGluY2x1ZGUgdGhlIHRleHQgc2hhZG93IGFzIHdlbGwKKyAgICAg
ICAgICAgICAgICBjb25zdCBmbG9hdCBibHVyRGlzdGFuY2UgPSBjdHgtPnN0YXRlKCkuc2hhZG93
Qmx1cjsKICAgICAgICAgICAgICAgICBjbGlwLmFkanVzdChkeDEsIGR4MiwgZHkxLCBkeTIpOwot
ICAgICAgICAgICAgICAgIGNsaXAuYWRqdXN0KC1jdHhTaGFkb3ctPm1fYmx1ckRpc3RhbmNlLCAt
Y3R4U2hhZG93LT5tX2JsdXJEaXN0YW5jZSwgY3R4U2hhZG93LT5tX2JsdXJEaXN0YW5jZSwgY3R4
U2hhZG93LT5tX2JsdXJEaXN0YW5jZSk7CisgICAgICAgICAgICAgICAgY2xpcC5hZGp1c3QoLWJs
dXJEaXN0YW5jZSwgLWJsdXJEaXN0YW5jZSwgYmx1ckRpc3RhbmNlLCBibHVyRGlzdGFuY2UpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgcC0+c2F2ZSgpOwogICAgICAgICAgICAgcC0+c2V0
Q2xpcFJlY3QoY2xpcC50b1JlY3QoKSwgUXQ6OkludGVyc2VjdENsaXApOwogICAgICAgICAgICAg
cHQuc2V0WShwdC55KCkgLSBhc2NlbnQpOwogCi0gICAgICAgICAgICBpZiAoY3R4U2hhZG93LT5t
X3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpIHsKLSAgICAgICAgICAgICAgICBDb250
ZXh0U2hhZG93KiBjdHhTaGFkb3cgPSBjdHgtPmNvbnRleHRTaGFkb3coKTsKLSAgICAgICAgICAg
ICAgICBpZiAoIWN0eFNoYWRvdy0+bXVzdFVzZUNvbnRleHRTaGFkb3coY3R4KSkgeworICAgICAg
ICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6Ok5vU2hhZG93KSB7Cisg
ICAgICAgICAgICAgICAgU2hhZG93Qmx1ciogY3R4U2hhZG93ID0gY3R4LT5zaGFkb3dCbHVyKCk7
CisgICAgICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6OkJs
dXJTaGFkb3cKKyAgICAgICAgICAgICAgICAgICAgJiYgKCFjdHhTaGFkb3ctPnNoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zKCkgfHwgY3R4LT5nZXRDVE0oKS5pc0lkZW50aXR5KCkpKSB7CiAgICAgICAg
ICAgICAgICAgICAgIHAtPnNhdmUoKTsKLSAgICAgICAgICAgICAgICAgICAgcC0+c2V0UGVuKGN0
eFNoYWRvdy0+bV9jb2xvcik7Ci0gICAgICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShjdHhT
aGFkb3ctPm9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcC0+c2V0UGVuKGN0eC0+c3Rh
dGUoKS5zaGFkb3dDb2xvcik7CisgICAgICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShRUG9p
bnRGKGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY3R4LT5zdGF0ZSgpLnNoYWRv
d09mZnNldC5oZWlnaHQoKSkpOwogICAgICAgICAgICAgICAgICAgICBsaW5lLmRyYXcocCwgcHQp
OwogICAgICAgICAgICAgICAgICAgICBwLT5yZXN0b3JlKCk7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBjdHhT
aGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4LCBib3VuZGluZ1JlY3QpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgeworICAgICAgICAgICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBjdHhTaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4
LCBib3VuZGluZ1JlY3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkg
eworICAgICAgICAgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFk
b3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFNpbmNlIGl0IHdpbGwgYmUgYmx1cnJlZCBhbnl3YXksIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVu
ZGVyIGhpbnRzLgogICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0Rm9u
dChwLT5mb250KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0
UGVuKGN0eFNoYWRvdy0+bV9jb2xvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dQ
YWludGVyLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGxpbmUuZHJhdyhzaGFkb3dQYWludGVyLCBwdCk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBjdHhTaGFkb3ctPmVuZFNoYWRvd0xheWVyKGN0eCk7CiAgICAgICAgICAgICAgICAg
ICAgIH0KQEAgLTIwMSw0MCArMjA0LDQzIEBAIHN0YXRpYyB2b2lkIGRyYXdUZXh0Q29tbW9uKEdy
YXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0CiAgICAg
aWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkKICAgICAgICAgdGV4
dFN0cm9rZVBhdGguYWRkVGV4dChwdCwgZm9udCwgc3RyaW5nKTsKIAotICAgIENvbnRleHRTaGFk
b3cqIGN0eFNoYWRvdyA9IGN0eC0+Y29udGV4dFNoYWRvdygpOwotICAgIGlmIChjdHhTaGFkb3ct
Pm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpOb1NoYWRvdykgeworICAgIFNoYWRvd0JsdXIqIGN0
eFNoYWRvdyA9IGN0eC0+c2hhZG93Qmx1cigpOworICAgIGlmIChjdHgtPmhhc1NoYWRvdygpICYm
IGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6Ok5vU2hhZG93KSB7CiAgICAgICAgIGlm
IChjdHgtPnRleHREcmF3aW5nTW9kZSgpICYgVGV4dE1vZGVGaWxsKSB7Ci0gICAgICAgICAgICBp
ZiAoY3R4U2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Qmx1clNoYWRvdykgeworICAg
ICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6OkJsdXJTaGFkb3cp
IHsKICAgICAgICAgICAgICAgICBwLT5zYXZlKCk7Ci0gICAgICAgICAgICAgICAgcC0+c2V0UGVu
KGN0eFNoYWRvdy0+bV9jb2xvcik7Ci0gICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKGN0eFNo
YWRvdy0+b2Zmc2V0KCkpOworICAgICAgICAgICAgICAgIHAtPnNldFBlbihjdHgtPnN0YXRlKCku
c2hhZG93Q29sb3IpOworICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShRUG9pbnRGKGN0eC0+
c3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5o
ZWlnaHQoKSkpOwogICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KHB0LCBzdHJpbmcsIGZsYWdz
LCBydW4uZXhwYW5zaW9uKCkpOwogICAgICAgICAgICAgICAgIHAtPnJlc3RvcmUoKTsKICAgICAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgUUZvbnRNZXRyaWNzIGZtKGZvbnQpOwog
ICAgICAgICAgICAgICAgIFFSZWN0RiBib3VuZGluZ1JlY3QocHQueCgpLCBwb2ludC55KCkgLSBm
bS5hc2NlbnQoKSwgZm0ud2lkdGgoc3RyaW5nLCAtMSwgZmxhZ3MpLCBmbS5oZWlnaHQoKSk7Ci0g
ICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBjdHhTaGFkb3ctPmJlZ2lu
U2hhZG93TGF5ZXIoY3R4LCBib3VuZGluZ1JlY3QpOwotICAgICAgICAgICAgICAgIGlmIChzaGFk
b3dQYWludGVyKSB7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250
ZXh0ID0gY3R4U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eCwgYm91bmRpbmdSZWN0KTsKKyAg
ICAgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICBR
UGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
OwogICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQgYW55d2F5
LCB3ZSBkb24ndCBjYXJlIGFib3V0IHJlbmRlciBoaW50cy4KICAgICAgICAgICAgICAgICAgICAg
c2hhZG93UGFpbnRlci0+c2V0Rm9udChwLT5mb250KCkpOwotICAgICAgICAgICAgICAgICAgICBz
aGFkb3dQYWludGVyLT5zZXRQZW4oY3R4U2hhZG93LT5tX2NvbG9yKTsKKyAgICAgICAgICAgICAg
ICAgICAgc2hhZG93UGFpbnRlci0+c2V0UGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7CiAg
ICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmRyYXdUZXh0KHB0LCBzdHJpbmcsIGZs
YWdzLCBydW4uZXhwYW5zaW9uKCkpOwogICAgICAgICAgICAgICAgICAgICBjdHhTaGFkb3ctPmVu
ZFNoYWRvd0xheWVyKGN0eCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAg
ICAgICB9IGVsc2UgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZVN0cm9rZSkg
ewotICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6OkJs
dXJTaGFkb3cpIHsKLSAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoY3R4U2hhZG93LT5vZmZz
ZXQoKSk7Ci0gICAgICAgICAgICAgICAgcC0+c3Ryb2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBl
bihjdHhTaGFkb3ctPm1fY29sb3IpKTsKLSAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoLWN0
eFNoYWRvdy0+b2Zmc2V0KCkpOworICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9
IFNoYWRvd0JsdXI6OkJsdXJTaGFkb3cpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBRUG9pbnRG
IHNoYWRvd09mZnNldChjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCksIGN0eC0+c3Rh
dGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0
ZShzaGFkb3dPZmZzZXQpOworICAgICAgICAgICAgICAgIHAtPnN0cm9rZVBhdGgodGV4dFN0cm9r
ZVBhdGgsIFFQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKSk7CisgICAgICAgICAgICAgICAg
cC0+dHJhbnNsYXRlKC1zaGFkb3dPZmZzZXQpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgICAgICBRRm9udE1ldHJpY3MgZm0oZm9udCk7CiAgICAgICAgICAgICAgICAgUVJlY3RG
IGJvdW5kaW5nUmVjdChwdC54KCksIHBvaW50LnkoKSAtIGZtLmFzY2VudCgpLCBmbS53aWR0aChz
dHJpbmcsIC0xLCBmbGFncyksIGZtLmhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICBRUGFpbnRl
ciogc2hhZG93UGFpbnRlciA9IGN0eFNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHgsIGJvdW5k
aW5nUmVjdCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKKyAgICAgICAg
ICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBjdHhTaGFkb3ctPmJlZ2lu
U2hhZG93TGF5ZXIoY3R4LCBib3VuZGluZ1JlY3QpOworICAgICAgICAgICAgICAgIGlmIChzaGFk
b3dDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVy
ID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAgICAgICAgICAg
IC8vIFNpbmNlIGl0IHdpbGwgYmUgYmx1cnJlZCBhbnl3YXksIHdlIGRvbid0IGNhcmUgYWJvdXQg
cmVuZGVyIGhpbnRzLgogICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRGb250
KHAtPmZvbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnN0cm9rZVBh
dGgodGV4dFN0cm9rZVBhdGgsIFFQZW4oY3R4U2hhZG93LT5tX2NvbG9yKSk7CisgICAgICAgICAg
ICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnN0cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgsIFFQZW4o
Y3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKSk7CiAgICAgICAgICAgICAgICAgICAgIGN0eFNoYWRv
dy0+ZW5kU2hhZG93TGF5ZXIoY3R4KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
CkBAIC0zMjgsNyArMzM0LDcgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLAogICAgIEFTU0VSVCgh
c2hvdWxkU3Ryb2tlKTsKIAogICAgIC8vIFNoYWRvd2VkIHRleHQgc2hvdWxkIGFsd2F5cyB0YWtl
IHRoZSBjb21wbGV4IHBhdGguCi0gICAgQVNTRVJUKGNvbnRleHQtPmNvbnRleHRTaGFkb3coKS0+
bV90eXBlID09IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KTsKKyAgICBBU1NFUlQoY29udGV4dC0+
Y29udGV4dFNoYWRvdygpLT50eXBlKCkgPT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpOwogCiAgICAg
aWYgKCFzaG91bGRGaWxsICYmICFzaG91bGRTdHJva2UpCiAgICAgICAgIHJldHVybjsKQEAgLTM2
MSw3ICszNjcsNyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsCiAgICAgUVBhaW50ZXIqIHBhaW50
ZXIgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIENvbnRleHRTaGFkb3cqIHNo
YWRvdyA9IGNvbnRleHQtPmNvbnRleHRTaGFkb3coKTsKLSAgICBzd2l0Y2ggKHNoYWRvdy0+bV90
eXBlKSB7CisgICAgc3dpdGNoIChzaGFkb3ctPnR5cGUoKSkgewogICAgIGNhc2UgQ29udGV4dFNo
YWRvdzo6U29saWRTaGFkb3c6IHsKICAgICAgICAgUVBlbiBwcmV2aW91c1BlbiA9IHBhaW50ZXIt
PnBlbigpOwogICAgICAgICBwYWludGVyLT5zZXRQZW4oc2hhZG93LT5tX2NvbG9yKTsKQEAgLTM3
NCw4ICszODAsOSBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsCiAgICAgY2FzZSBDb250ZXh0U2hh
ZG93OjpCbHVyU2hhZG93OiB7CiAgICAgICAgIHFyZWFsIGhlaWdodCA9IHJhd0ZvbnQuYXNjZW50
KCkgKyByYXdGb250LmRlc2NlbnQoKSArIDE7CiAgICAgICAgIFFSZWN0RiBib3VuZGluZ1JlY3Qo
cG9pbnQueCgpLCBwb2ludC55KCkgLSByYXdGb250LmFzY2VudCgpLCB3aWR0aCwgaGVpZ2h0KTsK
LSAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5
ZXIoY29udGV4dCwgYm91bmRpbmdSZWN0KTsKLSAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93LT5iZWdpblNo
YWRvd0xheWVyKGNvbnRleHQsIGJvdW5kaW5nUmVjdCk7CisgICAgICAgIGlmIChzaGFkb3dDb250
ZXh0KSB7CisgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0UGVu
KHNoYWRvdy0+bV9jb2xvcik7CiAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5kcmF3R2x5cGhS
dW4ocG9pbnQsIHF0R2x5cGhzKTsKICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIo
Y29udGV4dCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0NvbnRleHRRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKaW5kZXggNzkzY2RlMC4uYjhmZmU4MyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
UXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
Q29udGV4dFF0LmNwcApAQCAtNDQsMTMgKzQ0LDEzIEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFu
c2Zvcm0uaCIKICNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkNvbnRleHRTaGFkb3cuaCIK
ICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUg
IlBhdGguaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgog
I2luY2x1ZGUgIlRyYW5zcGFyZW5jeUxheWVyLmgiCiAKICNpbmNsdWRlIDxRQnJ1c2g+CkBAIC0x
OTYsOCArMTk2LDI0IEBAIHB1YmxpYzoKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5OwogICAgIGJvb2wgaW5pdGlhbFNtb290aFBpeG1hcFRyYW5zZm9y
bUhpbnQ7CiAKLSAgICBDb250ZXh0U2hhZG93IHNoYWRvdzsKLSAgICBRU3RhY2s8Q29udGV4dFNo
YWRvdz4gc2hhZG93U3RhY2s7CisgICAgU2hhZG93Qmx1ciBzaGFkb3c7CisgICAgUVN0YWNrPFNo
YWRvd0JsdXI+IHNoYWRvd1N0YWNrOworCisgICAgYm9vbCBtdXN0VXNlU2hhZG93Qmx1cigpIGNv
bnN0CisgICAgeworICAgICAgICAvLyBXZSBjYW4ndCBhdm9pZCBTaGFkb3dCbHVyLCBzaW5jZSB0
aGUgc2hhZG93IGhhcyBibHVyLgorICAgICAgICBpZiAoc2hhZG93LnR5cGUoKSA9PSBTaGFkb3dC
bHVyOjpCbHVyU2hhZG93KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8vIFdl
IGNhbiBhdm9pZCBTaGFkb3dCbHVyIGFuZCBvcHRpbWl6ZSwgc2luY2Ugd2UncmUgbm90IGRyYXdp
bmcgb24gYQorICAgICAgICAvLyBjYW52YXMgYW5kIGJveCBzaGFkb3dzIGFyZSBhZmZlY3RlZCBi
eSB0aGUgdHJhbnNmb3JtYXRpb24gbWF0cml4LgorICAgICAgICBpZiAoIXNoYWRvdy5zaGFkb3dz
SWdub3JlVHJhbnNmb3JtcygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAv
LyBXZSBjYW4gYXZvaWQgU2hhZG93Qmx1ciwgc2luY2UgdGhlcmUgYXJlIG5vIHRyYW5zZm9ybWF0
aW9ucyB0byBhcHBseSB0byB0aGUgY2FudmFzLgorICAgICAgICBpZiAocCgpLT5jb21iaW5lZFRy
YW5zZm9ybSgpLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgLy8gT3RoZXJ3aXNlLCBubyBjaGFuY2UgYXZvaWRpbmcgU2hhZG93Qmx1ci4KKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQogCiAgICAgUVJlY3RGIGNsaXBCb3VuZGluZ1JlY3QoKSBjb25z
dAogICAgIHsKQEAgLTMwOSw3ICszMjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9y
ZVBsYXRmb3JtU3RhdGUoKQogICAgIG1fZGF0YS0+cCgpLT5yZXN0b3JlKCk7CiAKICAgICBpZiAo
bV9kYXRhLT5zaGFkb3dTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIG1fZGF0YS0+c2hhZG93ID0g
Q29udGV4dFNoYWRvdygpOworICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IFNoYWRvd0JsdXIoRmxv
YXRTaXplKG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dCbHVyKSwgbV9zdGF0ZS5z
aGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93Q29sb3IsIG1fc3RhdGUuc2hhZG93Q29sb3JTcGFj
ZSk7CiAgICAgZWxzZQogICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IG1fZGF0YS0+c2hhZG93U3Rh
Y2sucG9wKCk7CiB9CkBAIC00OTUsMzEgKzUxMSwyOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBwbGF0Zm9ybVBhdGguc2V0RmlsbFJ1bGUo
dG9RdEZpbGxSdWxlKGZpbGxSdWxlKCkpKTsKIAogICAgIGlmIChoYXNTaGFkb3coKSkgewotICAg
ICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7Ci0gICAgICAgIGlm
IChzaGFkb3ctPm11c3RVc2VDb250ZXh0U2hhZG93KHRoaXMpIHx8IG1fc3RhdGUuZmlsbFBhdHRl
cm4gfHwgbV9zdGF0ZS5maWxsR3JhZGllbnQpCisgICAgICAgIFNoYWRvd0JsdXIqIHNoYWRvdyA9
IHNoYWRvd0JsdXIoKTsKKyAgICAgICAgaWYgKG1fZGF0YS0+bXVzdFVzZVNoYWRvd0JsdXIoKSB8
fCBtX3N0YXRlLmZpbGxQYXR0ZXJuIHx8IG1fc3RhdGUuZmlsbEdyYWRpZW50KQogICAgICAgICB7
Ci0gICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5TaGFk
b3dMYXllcih0aGlzLCBwbGF0Zm9ybVBhdGguY29udHJvbFBvaW50UmVjdCgpKTsKLSAgICAgICAg
ICAgIGlmIChzaGFkb3dQYWludGVyKSB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNo
YWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgcGxhdGZvcm1QYXRo
LmNvbnRyb2xQb2ludFJlY3QoKSk7CisgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgewor
ICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRl
cm4pIHsKICAgICAgICAgICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIGFmZmluZTsKLSAgICAg
ICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVh
bD4oc2hhZG93LT5tX2NvbG9yLmFscGhhKCkpIC8gMjU1KTsKICAgICAgICAgICAgICAgICAgICAg
c2hhZG93UGFpbnRlci0+ZmlsbFBhdGgocGxhdGZvcm1QYXRoLCBRQnJ1c2gobV9zdGF0ZS5maWxs
UGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGFmZmluZSkpKTsKICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KSB7CiAgICAgICAgICAgICAgICAgICAg
IFFCcnVzaCBicnVzaCgqbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7
CiAgICAgICAgICAgICAgICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShtX3N0YXRlLmZpbGxHcmFk
aWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKLSAgICAgICAgICAgICAgICAgICAgc2hh
ZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVhbD4oc2hhZG93LT5tX2NvbG9y
LmFscGhhKCkpIC8gMjU1KTsKICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+Zmls
bFBhdGgocGxhdGZvcm1QYXRoLCBicnVzaCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gc2hhZG93LT5tX2NvbG9yOwot
ICAgICAgICAgICAgICAgICAgICBzaGFkb3dDb2xvci5zZXRBbHBoYUYoc2hhZG93Q29sb3IuYWxw
aGFGKCkgKiBwLT5icnVzaCgpLmNvbG9yKCkuYWxwaGFGKCkpOwotICAgICAgICAgICAgICAgICAg
ICBzaGFkb3dQYWludGVyLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIHNoYWRvd0NvbG9yKTsKKyAg
ICAgICAgICAgICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gbV9zdGF0ZS5zaGFkb3dDb2xv
cjsKKyAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFBhdGgocGxhdGZvcm1Q
YXRoLCBwLT5icnVzaCgpLmNvbG9yKCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKHRoaXMpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgUVBvaW50RiBvZmZzZXQgPSBzaGFkb3ctPm9mZnNldCgp
OworICAgICAgICAgICAgUVBvaW50RiBvZmZzZXQobV9zdGF0ZS5zaGFkb3dPZmZzZXQud2lkdGgo
KSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICAgICAgcC0+dHJhbnNs
YXRlKG9mZnNldCk7Ci0gICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPm1f
Y29sb3I7CisgICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBtX3N0YXRlLnNoYWRvd0Nv
bG9yOwogICAgICAgICAgICAgc2hhZG93Q29sb3Iuc2V0QWxwaGFGKHNoYWRvd0NvbG9yLmFscGhh
RigpICogcC0+YnJ1c2goKS5jb2xvcigpLmFscGhhRigpKTsKICAgICAgICAgICAgIHAtPmZpbGxQ
YXRoKHBsYXRmb3JtUGF0aCwgc2hhZG93Q29sb3IpOwogICAgICAgICAgICAgcC0+dHJhbnNsYXRl
KC1vZmZzZXQpOwpAQCAtNTQ3LDMwICs1NjEsMjkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAgICBwbGF0Zm9ybVBhdGguc2V0RmlsbFJ1bGUo
dG9RdEZpbGxSdWxlKGZpbGxSdWxlKCkpKTsKIAogICAgIGlmIChoYXNTaGFkb3coKSkgewotICAg
ICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7Ci0gICAgICAgIGlm
IChzaGFkb3ctPm11c3RVc2VDb250ZXh0U2hhZG93KHRoaXMpIHx8IG1fc3RhdGUuc3Ryb2tlUGF0
dGVybiB8fCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50KQorICAgICAgICBTaGFkb3dCbHVyKiBzaGFk
b3cgPSBzaGFkb3dCbHVyKCk7CisgICAgICAgIGlmIChtX2RhdGEtPm11c3RVc2VTaGFkb3dCbHVy
KCkgfHwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuIHx8IG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpCiAg
ICAgICAgIHsKICAgICAgICAgICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3QgPSBwbGF0Zm9ybVBh
dGguY29udHJvbFBvaW50UmVjdCgpOwogICAgICAgICAgICAgYm91bmRpbmdSZWN0LmluZmxhdGUo
cGVuLm1pdGVyTGltaXQoKSArIHBlbi53aWR0aEYoKSk7Ci0gICAgICAgICAgICBRUGFpbnRlciog
c2hhZG93UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCBib3VuZGluZ1Jl
Y3QpOwotICAgICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKKyAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlz
LCBib3VuZGluZ1JlY3QpOworICAgICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAg
ICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpOwogICAgICAgICAgICAgICAgIGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50
KSB7CiAgICAgICAgICAgICAgICAgICAgIFFCcnVzaCBicnVzaCgqbV9zdGF0ZS5zdHJva2VHcmFk
aWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJ1c2guc2V0
VHJhbnNmb3JtKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0o
KSk7CiAgICAgICAgICAgICAgICAgICAgIFFQZW4gc2hhZG93UGVuKHBlbik7CiAgICAgICAgICAg
ICAgICAgICAgIHNoYWRvd1Blbi5zZXRCcnVzaChicnVzaCk7Ci0gICAgICAgICAgICAgICAgICAg
IHNoYWRvd1BhaW50ZXItPnNldE9wYWNpdHkoc3RhdGljX2Nhc3Q8cXJlYWw+KHNoYWRvdy0+bV9j
b2xvci5hbHBoYSgpKSAvIDI1NSk7CiAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXIt
PnN0cm9rZVBhdGgocGxhdGZvcm1QYXRoLCBzaGFkb3dQZW4pOwogICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldE9wYWNpdHkoc3Rh
dGljX2Nhc3Q8cXJlYWw+KG1fZGF0YS0+c2hhZG93Lm1fY29sb3IuYWxwaGEoKSkgLyAyNTUpOwog
ICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zdHJva2VQYXRoKHBsYXRmb3JtUGF0
aCwgcGVuKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc2hhZG93LT5lbmRT
aGFkb3dMYXllcih0aGlzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIFFQb2ludEYgb2Zmc2V0ID0gc2hhZG93LT5vZmZzZXQoKTsKKyAgICAgICAgICAgIFFQ
b2ludEYgb2Zmc2V0KG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCksIG1fc3RhdGUuc2hhZG93
T2Zmc2V0LmhlaWdodCgpKTsKICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShvZmZzZXQpOwotICAg
ICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gc2hhZG93LT5tX2NvbG9yOworICAgICAgICAg
ICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gbV9zdGF0ZS5zaGFkb3dDb2xvcjsKICAgICAgICAgICAg
IHNoYWRvd0NvbG9yLnNldEFscGhhRihzaGFkb3dDb2xvci5hbHBoYUYoKSAqIHBlbi5jb2xvcigp
LmFscGhhRigpKTsKICAgICAgICAgICAgIFFQZW4gc2hhZG93UGVuKHBlbik7CiAgICAgICAgICAg
ICBzaGFkb3dQZW4uc2V0Q29sb3Ioc2hhZG93Q29sb3IpOwpAQCAtNjY4LDQ0ICs2ODEsNDIgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIAog
ICAgIFFQYWludGVyKiBwID0gbV9kYXRhLT5wKCk7CiAgICAgUVJlY3RGIG5vcm1hbGl6ZWRSZWN0
ID0gcmVjdC5ub3JtYWxpemVkKCk7Ci0gICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY29udGV4
dFNoYWRvdygpOworICAgIFNoYWRvd0JsdXIqIHNoYWRvdyA9IHNoYWRvd0JsdXIoKTsKIAogICAg
IGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CiAgICAgICAgIFFQaXhtYXAqIGltYWdlID0gbV9z
dGF0ZS5maWxsUGF0dGVybi0+dGlsZUltYWdlKCktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7Ci0gICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gaGFzU2hhZG93KCkgPyBzaGFk
b3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgbm9ybWFsaXplZFJlY3QpIDogMDsKLSAgICAgICAg
aWYgKHNoYWRvd1BhaW50ZXIpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250
ZXh0ID0gaGFzU2hhZG93KCkgPyBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgbm9ybWFs
aXplZFJlY3QpIDogMDsKKyAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAg
IFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCk7CiAgICAgICAgICAgICBkcmF3UmVwZWF0UGF0dGVybihzaGFkb3dQYWludGVyLCBpbWFnZSwg
bm9ybWFsaXplZFJlY3QsIG1fc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgoKSwgbV9zdGF0ZS5m
aWxsUGF0dGVybi0+cmVwZWF0WSgpKTsKLSAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldENv
bXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZUluKTsKLSAgICAg
ICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBzaGFkb3ctPm1f
Y29sb3IpOwogICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcih0aGlzKTsKICAgICAg
ICAgfQogICAgICAgICBkcmF3UmVwZWF0UGF0dGVybihwLCBpbWFnZSwgbm9ybWFsaXplZFJlY3Qs
IG1fc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgoKSwgbV9zdGF0ZS5maWxsUGF0dGVybi0+cmVw
ZWF0WSgpKTsKICAgICB9IGVsc2UgaWYgKG1fc3RhdGUuZmlsbEdyYWRpZW50KSB7CiAgICAgICAg
IFFCcnVzaCBicnVzaCgqbV9zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7
CiAgICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShtX3N0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGll
bnRTcGFjZVRyYW5zZm9ybSgpKTsKLSAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBo
YXNTaGFkb3coKSA/IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCBub3JtYWxpemVkUmVj
dCkgOiAwOwotICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgeworICAgICAgICBHcmFwaGljc0Nv
bnRleHQqIHNoYWRvd0NvbnRleHQgPSBoYXNTaGFkb3coKSA/IHNoYWRvdy0+YmVnaW5TaGFkb3dM
YXllcih0aGlzLCBub3JtYWxpemVkUmVjdCkgOiAwOworICAgICAgICBpZiAoc2hhZG93Q29udGV4
dCkgeworICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0
KG5vcm1hbGl6ZWRSZWN0LCBicnVzaCk7Ci0gICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRD
b21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2VJbik7Ci0gICAg
ICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwgc2hhZG93LT5t
X2NvbG9yKTsKICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIodGhpcyk7CiAgICAg
ICAgIH0KICAgICAgICAgcC0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIGJydXNoKTsKICAgICB9
IGVsc2UgewogICAgICAgICBpZiAoaGFzU2hhZG93KCkpIHsKLSAgICAgICAgICAgIGlmIChzaGFk
b3ctPm11c3RVc2VDb250ZXh0U2hhZG93KHRoaXMpKSB7Ci0gICAgICAgICAgICAgICAgUVBhaW50
ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgbm9ybWFs
aXplZFJlY3QpOwotICAgICAgICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldE9wYWNpdHkoc3RhdGljX2Nhc3Q8cXJlYWw+
KHNoYWRvdy0+bV9jb2xvci5hbHBoYSgpKSAvIDI1NSk7CisgICAgICAgICAgICBpZiAobV9kYXRh
LT5tdXN0VXNlU2hhZG93Qmx1cigpKSB7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0
KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRoaXMsIG5vcm1hbGl6
ZWRSZWN0KTsKKyAgICAgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAg
ICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpOwogICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVj
dChub3JtYWxpemVkUmVjdCwgcC0+YnJ1c2goKSk7CiAgICAgICAgICAgICAgICAgICAgIHNoYWRv
dy0+ZW5kU2hhZG93TGF5ZXIodGhpcyk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBTb2xpZCByZWN0YW5nbGUgZmlsbCB3aXRoIG5v
IGJsdXIgc2hhZG93IG9yIHRyYW5zZm9ybWF0aW9ucyBhcHBsaWVkIGNhbiBiZSBkb25lCiAgICAg
ICAgICAgICAgICAgLy8gZmFzdGVyIHdpdGhvdXQgdXNpbmcgdGhlIHNoYWRvdyBsYXllciBhdCBh
bGwuCi0gICAgICAgICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gc2hhZG93LT5tX2NvbG9y
OworICAgICAgICAgICAgICAgIFFDb2xvciBzaGFkb3dDb2xvciA9IG1fc3RhdGUuc2hhZG93Q29s
b3I7CiAgICAgICAgICAgICAgICAgc2hhZG93Q29sb3Iuc2V0QWxwaGFGKHNoYWRvd0NvbG9yLmFs
cGhhRigpICogcC0+YnJ1c2goKS5jb2xvcigpLmFscGhhRigpKTsKLSAgICAgICAgICAgICAgICBw
LT5maWxsUmVjdChub3JtYWxpemVkUmVjdC50cmFuc2xhdGVkKHNoYWRvdy0+b2Zmc2V0KCkpLCBz
aGFkb3dDb2xvcik7CisgICAgICAgICAgICAgICAgcC0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3Qu
dHJhbnNsYXRlZChRUG9pbnRGKG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCksIG1fc3RhdGUu
c2hhZG93T2Zmc2V0LmhlaWdodCgpKSksIHNoYWRvd0NvbG9yKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCkBAIC03MjQsMTYgKzczNSwyMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Zmls
bFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yUwog
ICAgIFFSZWN0RiBub3JtYWxpemVkUmVjdCA9IHJlY3Qubm9ybWFsaXplZCgpOwogCiAgICAgaWYg
KGhhc1NoYWRvdygpKSB7Ci0gICAgICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHRT
aGFkb3coKTsKLSAgICAgICAgaWYgKHNoYWRvdy0+bXVzdFVzZUNvbnRleHRTaGFkb3codGhpcykp
IHsKLSAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5iZWdpblNo
YWRvd0xheWVyKHRoaXMsIG5vcm1hbGl6ZWRSZWN0KTsKLSAgICAgICAgICAgIGlmIChzaGFkb3dQ
YWludGVyKSB7CisgICAgICAgIFNoYWRvd0JsdXIqIHNoYWRvdyA9IHNoYWRvd0JsdXIoKTsKKyAg
ICAgICAgaWYgKG1fZGF0YS0+bXVzdFVzZVNoYWRvd0JsdXIoKSkgeworICAgICAgICAgICAgR3Jh
cGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRo
aXMsIG5vcm1hbGl6ZWRSZWN0KTsKKyAgICAgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7Cisg
ICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRDb21w
b3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2UpOwotICAgICAgICAg
ICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBzaGFkb3ctPm1f
Y29sb3IpOworICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6
ZWRSZWN0LCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsKICAgICAgICAgICAgICAgICBzaGFkb3ctPmVu
ZFNoYWRvd0xheWVyKHRoaXMpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LnRyYW5zbGF0ZWQoc2hhZG93LT5vZmZz
ZXQoKSksIHNoYWRvdy0+bV9jb2xvcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBR
Q29sb3Igc2hhZG93Q29sb3IgPSBtX3N0YXRlLnNoYWRvd0NvbG9yOworICAgICAgICAgICAgc2hh
ZG93Q29sb3Iuc2V0QWxwaGFGKHNoYWRvd0NvbG9yLmFscGhhRigpICogcC0+YnJ1c2goKS5jb2xv
cigpLmFscGhhRigpKTsKKyAgICAgICAgICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LnRy
YW5zbGF0ZWQoUVBvaW50RihtX3N0YXRlLnNoYWRvd09mZnNldC53aWR0aCgpLCBtX3N0YXRlLnNo
YWRvd09mZnNldC5oZWlnaHQoKSkpLCBzaGFkb3dDb2xvcik7CisgICAgICAgIH0KICAgICB9CiAK
ICAgICBwLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwgbV9kYXRhLT5zb2xpZENvbG9yKTsKQEAg
LTc0OCwxOCArNzYzLDIwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6ZSYgdG9wTGVmCiAgICAgcGF0aC5hZGRS
b3VuZGVkUmVjdChyZWN0LCB0b3BMZWZ0LCB0b3BSaWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmln
aHQpOwogICAgIFFQYWludGVyKiBwID0gbV9kYXRhLT5wKCk7CiAgICAgaWYgKGhhc1NoYWRvdygp
KSB7Ci0gICAgICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHRTaGFkb3coKTsKLSAg
ICAgICAgaWYgKHNoYWRvdy0+bXVzdFVzZUNvbnRleHRTaGFkb3codGhpcykpIHsKLSAgICAgICAg
ICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRo
aXMsIHJlY3QpOwotICAgICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKKyAgICAgICAgU2hh
ZG93Qmx1ciogc2hhZG93ID0gc2hhZG93Qmx1cigpOworICAgICAgICBpZiAobV9kYXRhLT5tdXN0
VXNlU2hhZG93Qmx1cigpKSB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0Nv
bnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgcmVjdCk7CisgICAgICAgICAg
ICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQ
YWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAgICAg
ICAgc2hhZG93UGFpbnRlci0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlv
bk1vZGVfU291cmNlKTsKLSAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUGF0aChw
YXRoLnBsYXRmb3JtUGF0aCgpLCBRQ29sb3IobV9kYXRhLT5zaGFkb3cubV9jb2xvcikpOworICAg
ICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxQYXRoKHBhdGgucGxhdGZvcm1QYXRoKCks
IFFDb2xvcihtX3N0YXRlLnNoYWRvd0NvbG9yKSk7CiAgICAgICAgICAgICAgICAgc2hhZG93LT5l
bmRTaGFkb3dMYXllcih0aGlzKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHAtPnRyYW5zbGF0ZShtX2RhdGEtPnNoYWRvdy5vZmZzZXQoKSk7Ci0gICAgICAg
ICAgICBwLT5maWxsUGF0aChwYXRoLnBsYXRmb3JtUGF0aCgpLCBRQ29sb3IobV9kYXRhLT5zaGFk
b3cubV9jb2xvcikpOwotICAgICAgICAgICAgcC0+dHJhbnNsYXRlKC1tX2RhdGEtPnNoYWRvdy5v
ZmZzZXQoKSk7CisgICAgICAgICAgICBjb25zdCBRUG9pbnRGIHNoYWRvd09mZnNldChtX3N0YXRl
LnNoYWRvd09mZnNldC53aWR0aCgpLCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7Cisg
ICAgICAgICAgICBwLT50cmFuc2xhdGUoc2hhZG93T2Zmc2V0KTsKKyAgICAgICAgICAgIHAtPmZp
bGxQYXRoKHBhdGgucGxhdGZvcm1QYXRoKCksIFFDb2xvcihtX3N0YXRlLnNoYWRvd0NvbG9yKSk7
CisgICAgICAgICAgICBwLT50cmFuc2xhdGUoLXNoYWRvd09mZnNldCk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgcC0+ZmlsbFBhdGgocGF0aC5wbGF0Zm9ybVBhdGgoKSwgUUNvbG9yKGNvbG9yKSk7
CkBAIC03NzAsNyArNzg3LDcgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQ6OmluVHJhbnNwYXJlbmN5
TGF5ZXIoKSBjb25zdAogICAgIHJldHVybiBtX2RhdGEtPmxheWVyQ291bnQ7CiB9CiAKLUNvbnRl
eHRTaGFkb3cqIEdyYXBoaWNzQ29udGV4dDo6Y29udGV4dFNoYWRvdygpCitTaGFkb3dCbHVyKiBH
cmFwaGljc0NvbnRleHQ6OnNoYWRvd0JsdXIoKQogewogICAgIHJldHVybiAmbV9kYXRhLT5zaGFk
b3c7CiB9CkBAIC03OTAsNiArODA3LDE4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCkKIAogICAgIG1fZGF0YS0+cCgpLT5zZXRDbGlwUmVjdChyZWN0
LCBRdDo6SW50ZXJzZWN0Q2xpcCk7CiB9CitJbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJv
dW5kcygpIGNvbnN0Cit7CisgICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKKyAgICBRUmVj
dEYgY2xpcFJlY3Q7CisKKyAgICBpZiAocC0+aGFzQ2xpcHBpbmcoKSkKKyAgICAgICAgY2xpcFJl
Y3QgPSBtX2RhdGEtPmNsaXBCb3VuZGluZ1JlY3QoKTsKKyAgICBlbHNlCisgICAgICAgIGNsaXBS
ZWN0ID0gcC0+dHJhbnNmb3JtKCkuaW52ZXJ0ZWQoKS5tYXBSZWN0KHAtPndpbmRvdygpKTsKKwor
ICAgIHJldHVybiBJbnRSZWN0KGNsaXBSZWN0LngoKSwgY2xpcFJlY3QueSgpLCBjbGlwUmVjdC53
aWR0aCgpLCBjbGlwUmVjdC5oZWlnaHQoKSk7Cit9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
bGlwUGF0aChjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKQEAgLTkyNiw3
ICs5NTUsNyBAQCBGbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxz
KGNvbnN0IEZsb2F0UmVjdCYgZnJlY3QsIFJvdW5kaW5nTQogICAgIHJldHVybiBGbG9hdFJlY3Qo
cm91bmRlZE9yaWdpbiwgcm91bmRlZExvd2VyUmlnaHQgLSByb3VuZGVkT3JpZ2luKTsKIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYg
c2l6ZSwgZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlKQordm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwg
ZmxvYXQgYmx1ciwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7
CiAgICAgLy8gUXQgZG9lc24ndCBzdXBwb3J0IHNoYWRvd3MgbmF0aXZlbHksIHRoZXkgYXJlIGRy
YXduIG1hbnVhbGx5IGluIHRoZSBkcmF3KgogICAgIC8vIGZ1bmN0aW9ucwpAQCAtOTM1LDEwICs5
NjQsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxv
YXRTaXplJiBzaXplLCBmbG9hdCBibHVyLCBjb25zdAogICAgICAgICAvLyBNZWFuaW5nIHRoYXQg
dGhpcyBncmFwaGljcyBjb250ZXh0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQKICAgICAgICAgLy8gV2UgZmxpcCB0aGUgaGVpZ2h0IHNpbmNlIENHIGFuZCBIVE1M
NSBDYW52YXMgaGF2ZSBvcHBvc2l0ZSBZIGF4aXMKICAgICAgICAgbV9zdGF0ZS5zaGFkb3dPZmZz
ZXQgPSBGbG9hdFNpemUoc2l6ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIG1f
ZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRvdyhjb2xvciwgYmx1ciwgRmxvYXRTaXplKHNpemUu
d2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbV9kYXRhLT5z
aGFkb3cgPSBDb250ZXh0U2hhZG93KGNvbG9yLCBibHVyLCBGbG9hdFNpemUoc2l6ZS53aWR0aCgp
LCBzaXplLmhlaWdodCgpKSk7CisgICAgfQogCisgICAgbV9kYXRhLT5zaGFkb3cgPSBTaGFkb3dC
bHVyKEZsb2F0U2l6ZShtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Qmx1ciksIG1f
c3RhdGUuc2hhZG93T2Zmc2V0LCBjb2xvciwgY29sb3JTcGFjZSk7CiAgICAgbV9kYXRhLT5zaGFk
b3cuc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNm
b3Jtcyk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0ltYWdlUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1h
Z2VRdC5jcHAKaW5kZXggMGM4Y2U5ZS4uNDFmZjhhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKQEAgLTM0LDExICszNCwxMSBAQAogCiAj
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNp
bmNsdWRlICJDb250ZXh0U2hhZG93LmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgogI2luY2x1ZGUg
IlN0aWxsSW1hZ2VRdC5oIgogI2luY2x1ZGUgInF3ZWJzZXR0aW5ncy5oIgogCkBAIC0yMjQsMTEg
KzIyNCwxMSBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkc3QsCiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVy
YXRvciA9IGN0eHQtPmNvbXBvc2l0ZU9wZXJhdGlvbigpOwogICAgIGN0eHQtPnNldENvbXBvc2l0
ZU9wZXJhdGlvbighaW1hZ2UtPmhhc0FscGhhKCkgJiYgb3AgPT0gQ29tcG9zaXRlU291cmNlT3Zl
ciA/IENvbXBvc2l0ZUNvcHkgOiBvcCk7CiAKLSAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBj
dHh0LT5jb250ZXh0U2hhZG93KCk7Ci0gICAgaWYgKHNoYWRvdy0+bV90eXBlICE9IENvbnRleHRT
aGFkb3c6Ok5vU2hhZG93KSB7Ci0gICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hh
ZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eHQsIG5vcm1hbGl6ZWREc3QpOwotICAgICAgICBpZiAo
c2hhZG93UGFpbnRlcikgewotICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0T3BhY2l0eShz
dGF0aWNfY2FzdDxxcmVhbD4oc2hhZG93LT5tX2NvbG9yLmFscGhhKCkpIC8gMjU1KTsKKyAgICBp
ZiAoY3R4dC0+aGFzU2hhZG93KCkpIHsKKyAgICAgICAgU2hhZG93Qmx1ciogc2hhZG93ID0gY3R4
dC0+c2hhZG93Qmx1cigpOworICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQg
PSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4dCwgbm9ybWFsaXplZERzdCk7CisgICAgICAg
IGlmIChzaGFkb3dDb250ZXh0KSB7CisgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRl
ciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICAgICAgc2hhZG93
UGFpbnRlci0+ZHJhd1BpeG1hcChub3JtYWxpemVkRHN0LCAqaW1hZ2UsIG5vcm1hbGl6ZWRTcmMp
OwogICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcihjdHh0KTsKICAgICAgICAgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFn
ZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VR
dC5jcHAKaW5kZXggM2IwODk5NS4uY2IyYTQ0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwCkBAIC0yOCw5ICsyOCw5IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3RpbGxJbWFnZVF0LmgiCiAKLSNpbmNs
dWRlICJDb250ZXh0U2hhZG93LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKIAogI2luY2x1ZGUgPFFQ
YWludGVyPgogCkBAIC03NCwxMSArNzQsMTEgQEAgdm9pZCBTdGlsbEltYWdlOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsCiAgICAgQ29tcG9zaXRlT3Bl
cmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IGN0eHQtPmNvbXBvc2l0ZU9wZXJhdGlvbigpOwogICAg
IGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7CiAKLSAgICBDb250ZXh0U2hhZG93KiBz
aGFkb3cgPSBjdHh0LT5jb250ZXh0U2hhZG93KCk7Ci0gICAgaWYgKHNoYWRvdy0+bV90eXBlICE9
IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KSB7Ci0gICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWlu
dGVyID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eHQsIG5vcm1hbGl6ZWREc3QpOwotICAg
ICAgICBpZiAoc2hhZG93UGFpbnRlcikgewotICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0
T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVhbD4oc2hhZG93LT5tX2NvbG9yLmFscGhhKCkpIC8gMjU1
KTsKKyAgICBpZiAoY3R4dC0+aGFzU2hhZG93KCkpIHsKKyAgICAgICAgU2hhZG93Qmx1ciogc2hh
ZG93ID0gY3R4dC0+c2hhZG93Qmx1cigpOworICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRv
d0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4dCwgbm9ybWFsaXplZERzdCk7
CisgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7CisgICAgICAgICAgICBRUGFpbnRlciogc2hh
ZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICAg
ICAgc2hhZG93UGFpbnRlci0+ZHJhd1BpeG1hcChub3JtYWxpemVkRHN0LCAqbV9waXhtYXAsIG5v
cm1hbGl6ZWRTcmMpOwogICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcihjdHh0KTsK
ICAgICAgICAgfQotLSAKMS43LjQuMQoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98890</attachid>
            <date>2011-06-28 02:58:14 -0700</date>
            <delta_ts>2011-06-28 07:36:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Qt-Add-ShadowBlur-support.patch</filename>
            <type>text/plain</type>
            <size>43799</size>
            <attacher name="Igor Trindade Oliveira">igor.oliveira</attacher>
            
              <data encoding="base64">RnJvbSA0OTk5YjUwMDhiZWQ2Mzg3YzQ5YmJmYjZkODI3NWMyMDRhZjg4ZTk3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBJZ29yIE9saXZlaXJhIDxpZ29yLm9saXZlaXJhQG9wZW5ib3Nz
YS5vcmc+CkRhdGU6IFN1biwgMjYgSnVuIDIwMTEgMTA6MTk6MzYgLTA0MDAKU3ViamVjdDogW1BB
VENIXSBbUXRdIEFkZCBTaGFkb3dCbHVyIHN1cHBvcnQKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQ0ICsrKysrCiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnBybyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KIC4uLi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgIHwgICAgMiArLQog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggfCAgICA3
ICstCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCAgICB8
ICAgNjIgKysrKysrKwogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1
ci5oICAgICAgfCAgIDIwICsrLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFk
b3dRdC5jcHAgICAgICAgfCAgMTY4IC0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwICAgICB8ICAgODMgKysrKysrLS0tLS0K
IC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAgICAgIHwgIDE0
NCArKysrKysrKysrLS0tLS0tLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
SW1hZ2VRdC5jcHAgICAgfCAgIDEyICstCiAuLi4vV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9TdGlsbEltYWdlUXQuY3BwICB8ICAgMTIgKy0KIDExIGZpbGVzIGNoYW5nZWQsIDI3MiBpbnNl
cnRpb25zKCspLCAyODcgZGVsZXRpb25zKC0pCiBkZWxldGUgbW9kZSAxMDA2NDQgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvd1F0LmNwcAoKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpp
bmRleCBjOTRiYzVhLi41M2U5Mzk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTEt
MDYtMjcgIElnb3IgT2xpdmVpcmEgIDxpZ29yLm9saXZlaXJhQG9wZW5ib3NzYS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBBZGQgc2hh
ZG93Ymx1ciBzdXBwb3J0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02Mjk5NworCisgICAgICAgIFVzZSBTaGFkb3dCbHVyIGluc3RlYWQgb2YgQ29udGV4
dFNoYWRvdyB0byBoYW5kbGUgY2FudmFzIGFuZCBjc3Mgc2hhZG93cy4gU2hhZG93Qmx1ciBpcwor
ICAgICAgICBhIG5ld2VyIGFuZCBwbGF0Zm9ybSBpbmRlcGVuZGVudCBzaGFkb3cgaW1wbGVtZW50
YXRpb24uCisgICAgICAgIFF0IFFQYWludGVyIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3Igc2hh
ZG93cyBzbyBpcyBuZWNlc3NhcnkgdG8gY3JlYXRlIGEgbGF5ZXIgc3VwcG9ydAorICAgICAgICB0
byBkcmF3IGNvbXBsZXggc2hhcGVzIGFuZCBmb250cy4gVGhlIGJlZ2luU2hhZG93TGF5ZXIgY3Jl
YXRlcyBhIHRlbXBvcmFyeSBzaGFkb3cgYnVmZmVyCisgICAgICAgIHdoZXJlIHRoZSBjYW52YXMg
Y2FuIGRyYXcgb250byBhbmQgZW5kU2hhZG93TGF5ZXIgYXBwbGllcyB0aGUgYmx1ciBmaWx0ZXIs
IGNvbG9ycyB0aGUKKyAgICAgICAgc2hhZG93IGJ1ZmZlciBhbmQgZHJhdyB0aGUgZmluYWwgc2hh
ZG93IHRvIHRoZSBncmFwaGljcyBjb250ZXh0LgorCisgICAgICAgICogV2ViQ29yZS5wcm86Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6
OlNoYWRvd0JsdXIpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6Ymx1ckFuZENvbG9yU2hhZG93QnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJlZ2luU2hhZG93TGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6U2hhZG93Qmx1cjo6ZW5kU2hhZG93TGF5ZXIpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OnR5
cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3dRdC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmRyYXdUZXh0Q29tbW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6
OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZTo6bXVzdFVzZVNoYWRvd0JsdXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2hhZG93Qmx1cik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6
ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmRyYXcpOgorCiAyMDExLTA2LTI1ICBEaW1p
dHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggYWUxZTY4MC4uYjhkY2NjYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KQEAgLTk4MCw3ICs5ODAsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9Gb250RmFtaWx5LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1h
Z2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgXAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9TaGFk
b3dCbHVyLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcCBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0UXVhZC5jcHAgXApAQCAtMTk0Miw3ICsxOTQyLDcgQEAgSEVBREVSUyArPSBcCiAg
ICAgcGxhdGZvcm0vbW9jay9TcGVlY2hJbnB1dENsaWVudE1vY2suaCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaCBc
Ci0gICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5oIFwKKyAgICBwbGF0Zm9ybS9n
cmFwaGljcy9TaGFkb3dCbHVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVC
bGVuZC5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmggXApA
QCAtMjUyMSw3ICsyNTIxLDYgQEAgU09VUkNFUyArPSBcCiAgICAgcGFnZS9xdC9GcmFtZVF0LmNw
cCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNmb3JtYXRpb25NYXRyaXhRdC5jcHAg
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbG9yUXQuY3BwIFwKLSAgICBwbGF0Zm9ybS9n
cmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRh
UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFBvaW50UXQuY3BwIFwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
Y3BwCmluZGV4IDNiNzdiOWYuLmYzZjk5ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtNTg1LDcgKzU4NSw3IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogYnVm
ZmVyLCBjb25zdCBGbG9hdFJlY3QmIHJlCiAgICAgYnVmZmVyLT5jbGlwKHRoaXMsIHJlY3QpOwog
fQogCi0jaWYgIVVTRShDRykKKyNpZiAhVVNFKENHKSAmJiAhUExBVEZPUk0oUVQpCiBJbnRSZWN0
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oCmluZGV4IDQ5ZGU0MWYuLmVlMGFlNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC01NCw2ICs1NCw3
IEBAIHR5cGVkZWYgY2xhc3MgV2ViQ29yZTo6U3VyZmFjZU9wZW5WRyBQbGF0Zm9ybUdyYXBoaWNz
Q29udGV4dDsKICNpbmNsdWRlIDxRUGFpbnRlcj4KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNz
IENvbnRleHRTaGFkb3c7CitjbGFzcyBTaGFkb3dCbHVyOwogfQogdHlwZWRlZiBRUGFpbnRlciBQ
bGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKICNlbGlmIFBMQVRGT1JNKFdYKQpAQCAtNDg1LDEwICs0
ODYsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHRha2VPd25lcnNoaXBP
ZlBsYXRmb3JtQ29udGV4dCgpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShRVCkgfHwgVVNFKENB
SVJPKQorI2lmIFVTRShDQUlSTykKICAgICAgICAgQ29udGV4dFNoYWRvdyogY29udGV4dFNoYWRv
dygpOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShRVCkKKyAgICAgICAgU2hhZG93Qmx1ciogc2hh
ZG93Qmx1cigpOworI2VuZGlmCisKICNpZiBVU0UoQ0FJUk8pCiAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dChjYWlyb190Kik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2hhZG93Qmx1ci5jcHAKaW5kZXggMjVmYzlhYS4uZDUwY2VmMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTE5Myw2ICsx
OTMsMjYgQEAgU2hhZG93Qmx1cjo6U2hhZG93Qmx1cihjb25zdCBGbG9hdFNpemUmIHJhZGl1cywg
Y29uc3QgRmxvYXRTaXplJiBvZmZzZXQsIGNvbnN0IEMKICAgICAgICAgbV90eXBlID0gU29saWRT
aGFkb3c7CiB9CiAKK1NoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgU2hhZG93Qmx1ciYgc2hh
ZG93Qmx1cikKKyAgICA6IG1fdHlwZShzaGFkb3dCbHVyLm1fdHlwZSkKKyAgICAsIG1fY29sb3Io
c2hhZG93Qmx1ci5tX2NvbG9yKQorICAgICwgbV9jb2xvclNwYWNlKHNoYWRvd0JsdXIubV9jb2xv
clNwYWNlKQorICAgICwgbV9ibHVyUmFkaXVzKHNoYWRvd0JsdXIubV9ibHVyUmFkaXVzKQorICAg
ICwgbV9vZmZzZXQoc2hhZG93Qmx1ci5tX29mZnNldCkKKyAgICAsIG1fc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMoc2hhZG93Qmx1ci5tX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQoreworICAgIEFT
U0VSVChzaGFkb3dCbHVyLm1fbGF5ZXJJbWFnZSk7CisKKyAgICBtX2xheWVySW1hZ2UgPSAwOwor
fQorCitTaGFkb3dCbHVyOjpTaGFkb3dCbHVyKCkKKyAgICA6IG1fdHlwZShOb1NoYWRvdykKKyAg
ICAsIG1fYmx1clJhZGl1cygwLCAwKQorICAgICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhm
YWxzZSkKK3sKK30KKwogLy8gSW5zdGVhZCBvZiBpbnRlZ2VyIGRpdmlzaW9uLCB3ZSB1c2UgMTcu
MTUgZm9yIGZpeGVkLXBvaW50IGRpdmlzaW9uLgogc3RhdGljIGNvbnN0IGludCBibHVyU3VtU2hp
ZnQgPSAxNTsKIApAQCAtMjM3LDYgKzI1NywxNCBAQCBzdGF0aWMgdm9pZCBjYWxjdWxhdGVMb2Jl
cyhpbnQgbG9iZXNbXVsyXSwgZmxvYXQgYmx1clJhZGl1cywgYm9vbCBzaGFkb3dzSWdub3JlVAog
ICAgIH0KIH0KIAordm9pZCBTaGFkb3dCbHVyOjpjbGVhcigpCit7CisgICAgbV90eXBlID0gTm9T
aGFkb3c7CisgICAgbV9jb2xvciA9IENvbG9yKCk7CisgICAgbV9ibHVyUmFkaXVzID0gRmxvYXRT
aXplKCk7CisgICAgbV9vZmZzZXQgPSBGbG9hdFNpemUoKTsKK30KKwogdm9pZCBTaGFkb3dCbHVy
OjpibHVyTGF5ZXJJbWFnZSh1bnNpZ25lZCBjaGFyKiBpbWFnZURhdGEsIGNvbnN0IEludFNpemUm
IHNpemUsIGludCByb3dTdHJpZGUpCiB7CiAgICAgY29uc3QgaW50IGNoYW5uZWxzWzRdID0geyAz
LCAwLCAxLCAzIH07CkBAIC04MjgsOSArODU2LDQzIEBAIHZvaWQgU2hhZG93Qmx1cjo6Ymx1ckFu
ZENvbG9yU2hhZG93QnVmZmVyKGNvbnN0IEludFNpemUmIHRlbXBsYXRlU2l6ZSkKIAogICAgIC8v
IE1hc2sgdGhlIGltYWdlIHdpdGggdGhlIHNoYWRvdyBjb2xvci4KICAgICBHcmFwaGljc0NvbnRl
eHQqIHNoYWRvd0NvbnRleHQgPSBtX2xheWVySW1hZ2UtPmNvbnRleHQoKTsKKyAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnNoYWRvd0NvbnRleHQpOwogICAgIHNoYWRv
d0NvbnRleHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VJbik7CiAgICAg
c2hhZG93Q29udGV4dC0+c2V0RmlsbENvbG9yKG1fY29sb3IsIG1fY29sb3JTcGFjZSk7CiAgICAg
c2hhZG93Q29udGV4dC0+ZmlsbFJlY3QoRmxvYXRSZWN0KDAsIDAsIHRlbXBsYXRlU2l6ZS53aWR0
aCgpLCB0ZW1wbGF0ZVNpemUuaGVpZ2h0KCkpKTsKIH0KIAorR3JhcGhpY3NDb250ZXh0KiBTaGFk
b3dCbHVyOjpiZWdpblNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCAqY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiBsYXllckFyZWEpCit7CisgICAgYWRqdXN0Qmx1clJhZGl1cyhjb250ZXh0KTsK
KworICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY2FsY3VsYXRlTGF5ZXJCb3VuZGluZ1JlY3QoY29u
dGV4dCwgbGF5ZXJBcmVhLCBjb250ZXh0LT5jbGlwQm91bmRzKCkpOworCisgICAgaWYgKGxheWVy
UmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgbV9sYXllckltYWdlID0g
U2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkuZ2V0U2NyYXRjaEJ1ZmZlcihsYXllclJlY3Quc2l6ZSgp
KTsKKworICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IG1fbGF5ZXJJbWFnZS0+
Y29udGV4dCgpOworICAgIHNoYWRvd0NvbnRleHQtPnNhdmUoKTsKKyAgICBzaGFkb3dDb250ZXh0
LT5jbGVhclJlY3QoRmxvYXRSZWN0KDAsIDAsIG1fbGF5ZXJTaXplLndpZHRoKCksIG1fbGF5ZXJT
aXplLmhlaWdodCgpKSk7CisKKyAgICBzaGFkb3dDb250ZXh0LT50cmFuc2xhdGUobV9sYXllckNv
bnRleHRUcmFuc2xhdGlvbik7CisgICAgcmV0dXJuIHNoYWRvd0NvbnRleHQ7Cit9CisKK3ZvaWQg
U2hhZG93Qmx1cjo6ZW5kU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQorewor
ICAgIG1fbGF5ZXJJbWFnZS0+Y29udGV4dCgpLT5yZXN0b3JlKCk7CisKKyAgICBibHVyQW5kQ29s
b3JTaGFkb3dCdWZmZXIoZXhwYW5kZWRJbnRTaXplKG1fbGF5ZXJTaXplKSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmUoKmNvbnRleHQpOworCisgICAgY29udGV4dC0+
Y2xlYXJTaGFkb3coKTsKKyAgICBjb250ZXh0LT5kcmF3SW1hZ2VCdWZmZXIobV9sYXllckltYWdl
LCBDb2xvclNwYWNlRGV2aWNlUkdCLCByb3VuZGVkSW50UG9pbnQobV9sYXllck9yaWdpbiksIElu
dFJlY3QoMCwgMCwgbV9sYXllclNpemUud2lkdGgoKSwgbV9sYXllclNpemUuaGVpZ2h0KCkpLCBj
b250ZXh0LT5jb21wb3NpdGVPcGVyYXRpb24oKSk7CisKKyAgICBtX2xheWVySW1hZ2UgPSAwOwor
ICAgIFNjcmF0Y2hCdWZmZXI6OnNoYXJlZCgpLnNjaGVkdWxlU2NyYXRjaEJ1ZmZlclB1cmdlKCk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NoYWRvd0JsdXIuaAppbmRleCAyMDJmZjNkLi44OThlYzFiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCkBAIC00MiwxOCArNDIs
MzEgQEAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3MgSW1hZ2VCdWZmZXI7CiAKIGNsYXNz
IFNoYWRvd0JsdXIgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNoYWRvd0JsdXIpOwogcHVi
bGljOgorICAgIGVudW0gU2hhZG93VHlwZSB7CisgICAgICAgIE5vU2hhZG93LAorICAgICAgICBT
b2xpZFNoYWRvdywKKyAgICAgICAgQmx1clNoYWRvdworICAgIH07CisKICAgICBTaGFkb3dCbHVy
KGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgY29uc3Qg
Q29sb3ImLCBDb2xvclNwYWNlKTsKKyAgICBTaGFkb3dCbHVyKGNvbnN0IFNoYWRvd0JsdXImKTsK
KyAgICBTaGFkb3dCbHVyKCk7CiAKICAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KGJvb2wgaWdub3JlVHJhbnNmb3JtcykgeyBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gaWdu
b3JlVHJhbnNmb3JtczsgfQogICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSBjb25z
dCB7IHJldHVybiBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyB9CiAKKyAgICBHcmFwaGljc0Nv
bnRleHQqIGJlZ2luU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0
JiBsYXllckFyZWEpOworICAgIHZvaWQgZW5kU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0Kik7
CisKICAgICB2b2lkIGRyYXdSZWN0U2hhZG93KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IFJvdW5kZWRJbnRSZWN0OjpSYWRpaSYpOwogICAgIHZvaWQgZHJhd0luc2V0
U2hhZG93KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYgaG9sZVJlY3QsIGNvbnN0IFJvdW5kZWRJbnRSZWN0OjpSYWRpaSYgaG9sZVJhZGlpKTsKIAog
ICAgIHZvaWQgYmx1ckxheWVySW1hZ2UodW5zaWduZWQgY2hhciosIGNvbnN0IEludFNpemUmLCBp
bnQgc3RyaWRlKTsKIAorICAgIHZvaWQgY2xlYXIoKTsKKworICAgIFNoYWRvd1R5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogcHJpdmF0ZToKICAgICB2b2lkIGRyYXdTaGFkb3dC
dWZmZXIoR3JhcGhpY3NDb250ZXh0Kik7CiAKQEAgLTgwLDExICs5Myw2IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgSW50U2l6ZSBibHVycmVkRWRnZVNpemUoKSBjb25zdDsKICAgICAKLSAgICBlbnVt
IFNoYWRvd1R5cGUgewotICAgICAgICBOb1NoYWRvdywKLSAgICAgICAgU29saWRTaGFkb3csCi0g
ICAgICAgIEJsdXJTaGFkb3cKLSAgICB9OwogICAgIAogICAgIFNoYWRvd1R5cGUgbV90eXBlOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0
U2hhZG93UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4
dFNoYWRvd1F0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWViMzFhNy4uMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hh
ZG93UXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTAgU2VuY2hhLCBJbmMuCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVS
LCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIs
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29udGV4dFNoYWRvdy5oIgotCi0j
aW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Lmgi
Ci0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0jaW5jbHVkZSA8UVRpbWVyRXZlbnQ+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotLy8gQ29udGV4dFNoYWRvdyBuZWVkcyBhIHNjcmF0Y2ggaW1hZ2UgYXMg
dGhlIGJ1ZmZlciBmb3IgdGhlIGJsdXIgZmlsdGVyLgotLy8gSW5zdGVhZCBvZiBjcmVhdGluZyBh
bmQgZGVzdHJveWluZyB0aGUgYnVmZmVyIGZvciBldmVyeSBvcGVyYXRpb24sCi0vLyB3ZSBjcmVh
dGUgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHB1cmdlZCB2aWEgYSB0aW1l
ci4KLQotY2xhc3MgU2hhZG93QnVmZmVyOiBwdWJsaWMgUU9iamVjdCB7Ci1wdWJsaWM6Ci0gICAg
U2hhZG93QnVmZmVyKFFPYmplY3QqIHBhcmVudCA9IDApOwotCi0gICAgUUltYWdlKiBzY3JhdGNo
SW1hZ2UoY29uc3QgUVNpemUmIHNpemUpOwotCi0gICAgdm9pZCBzY2hlZHVsZVB1cmdlKCk7Ci0K
LXByb3RlY3RlZDoKLSAgICB2b2lkIHRpbWVyRXZlbnQoUVRpbWVyRXZlbnQqIGV2ZW50KTsKLQot
cHJpdmF0ZToKLSAgICBRSW1hZ2UgaW1hZ2U7Ci0gICAgaW50IHRpbWVySWQ7Ci19OwotCi1TaGFk
b3dCdWZmZXI6OlNoYWRvd0J1ZmZlcihRT2JqZWN0KiBwYXJlbnQpCi0gICAgOiBRT2JqZWN0KHBh
cmVudCkKLSAgICAsIHRpbWVySWQoLTEpCi17Ci19Ci0KLVFJbWFnZSogU2hhZG93QnVmZmVyOjpz
Y3JhdGNoSW1hZ2UoY29uc3QgUVNpemUmIHNpemUpCi17Ci0gICAgaW50IHdpZHRoID0gc2l6ZS53
aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBzaXplLmhlaWdodCgpOwotCi0gICAgLy8gV2UgZG8g
bm90IG5lZWQgdG8gcmVjcmVhdGUgdGhlIGJ1ZmZlciBpZiB0aGUgYnVmZmVyIGlzIHJlYXNvbmFi
bHkKLSAgICAvLyBsYXJnZXIgdGhhbiB0aGUgcmVxdWVzdGVkIHNpemUuIEhvd2V2ZXIsIGlmIHRo
ZSByZXF1ZXN0ZWQgc2l6ZSBpcwotICAgIC8vIG11Y2ggc21hbGxlciB0aGFuIG91ciBidWZmZXIs
IHJlZHVjZSBvdXIgYnVmZmVyIHNvIHRoYXQgd2Ugd2lsbCBub3QKLSAgICAvLyBrZWVwIHRvbyBt
YW55IGFsbG9jYXRlZCBwaXhlbHMgZm9yIHRvbyBsb25nLgotICAgIGlmICghaW1hZ2UuaXNOdWxs
KCkgJiYgKGltYWdlLndpZHRoKCkgPiB3aWR0aCkgJiYgKGltYWdlLmhlaWdodCgpID4gaGVpZ2h0
KSkKLSAgICAgICAgaWYgKCgoMiAqIHdpZHRoKSA+IGltYWdlLndpZHRoKCkpICYmICgoMiAqIGhl
aWdodCkgPiBpbWFnZS5oZWlnaHQoKSkpIHsKLSAgICAgICAgICAgIGltYWdlLmZpbGwoMCk7Ci0g
ICAgICAgICAgICByZXR1cm4gJmltYWdlOwotICAgICAgICB9Ci0KLSAgICAvLyBSb3VuZCB0byB0
aGUgbmVhcmVzdCAzMiBwaXhlbHMgc28gd2UgZG8gbm90IGdyb3cgdGhlIGJ1ZmZlciBldmVyeXRp
bWUKLSAgICAvLyB0aGVyZSBpcyBsYXJnZXIgcmVxdWVzdCBieSAxIHBpeGVsLgotICAgIHdpZHRo
ID0gKDEgKyAod2lkdGggPj4gNSkpIDw8IDU7Ci0gICAgaGVpZ2h0ID0gKDEgKyAoaGVpZ2h0ID4+
IDUpKSA8PCA1OwotCi0gICAgaW1hZ2UgPSBRSW1hZ2Uod2lkdGgsIGhlaWdodCwgUUltYWdlOjpG
b3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOwotICAgIGltYWdlLmZpbGwoMCk7Ci0gICAgcmV0
dXJuICZpbWFnZTsKLX0KLQotdm9pZCBTaGFkb3dCdWZmZXI6OnNjaGVkdWxlUHVyZ2UoKQotewot
ICAgIHN0YXRpYyBjb25zdCBkb3VibGUgQnVmZmVyUHVyZ2VEZWxheSA9IDI7IC8vIHNlY29uZHMK
LSAgICBpZiAodGltZXJJZCA+PSAwKQotICAgICAgICBraWxsVGltZXIodGltZXJJZCk7Ci0gICAg
dGltZXJJZCA9IHN0YXJ0VGltZXIoQnVmZmVyUHVyZ2VEZWxheSAqIDEwMDApOwotfQotCi12b2lk
IFNoYWRvd0J1ZmZlcjo6dGltZXJFdmVudChRVGltZXJFdmVudCogZXZlbnQpCi17Ci0gICAgaWYg
KGV2ZW50LT50aW1lcklkKCkgPT0gdGltZXJJZCkgewotICAgICAgICBraWxsVGltZXIodGltZXJJ
ZCk7Ci0gICAgICAgIGltYWdlID0gUUltYWdlKCk7Ci0gICAgfQotICAgIFFPYmplY3Q6OnRpbWVy
RXZlbnQoZXZlbnQpOwotfQotCi1RX0dMT0JBTF9TVEFUSUMoU2hhZG93QnVmZmVyLCBzY3JhdGNo
U2hhZG93QnVmZmVyKQotCi1QbGF0Zm9ybUNvbnRleHQgQ29udGV4dFNoYWRvdzo6YmVnaW5TaGFk
b3dMYXllcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgbGF5ZXJB
cmVhKQotewotICAgIC8vIFNldCBtX2JsdXJEaXN0YW5jZS4KLSAgICBhZGp1c3RCbHVyRGlzdGFu
Y2UoY29udGV4dCk7Ci0KLSAgICBQbGF0Zm9ybUNvbnRleHQgcCA9IGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpOwotCi0gICAgUVJlY3QgY2xpcFJlY3Q7Ci0gICAgaWYgKHAtPmhhc0NsaXBwaW5n
KCkpCi0jaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDgsIDApCi0gICAgICAg
IGNsaXBSZWN0ID0gcC0+Y2xpcEJvdW5kaW5nUmVjdCgpLnRvQWxpZ25lZFJlY3QoKTsKLSNlbHNl
Ci0gICAgICAgIGNsaXBSZWN0ID0gcC0+Y2xpcFJlZ2lvbigpLmJvdW5kaW5nUmVjdCgpOwotI2Vu
ZGlmCi0gICAgZWxzZQotICAgICAgICBjbGlwUmVjdCA9IHAtPnRyYW5zZm9ybSgpLmludmVydGVk
KCkubWFwUmVjdChwLT53aW5kb3coKSk7Ci0KLSAgICAvLyBTZXQgbV9sYXllck9yaWdpbiwgbV9s
YXllckNvbnRleHRUcmFuc2xhdGlvbiwgbV9zb3VyY2VSZWN0LgotICAgIEludFJlY3QgY2xpcChj
bGlwUmVjdC54KCksIGNsaXBSZWN0LnkoKSwgY2xpcFJlY3Qud2lkdGgoKSwgY2xpcFJlY3QuaGVp
Z2h0KCkpOwotICAgIEludFJlY3QgbGF5ZXJSZWN0ID0gY2FsY3VsYXRlTGF5ZXJCb3VuZGluZ1Jl
Y3QoY29udGV4dCwgbGF5ZXJBcmVhLCBjbGlwKTsKLQotICAgIC8vIERvbid0IHBhaW50IGlmIHdl
IGFyZSB0b3RhbGx5IG91dHNpZGUgdGhlIGNsaXAgcmVnaW9uLgotICAgIGlmIChsYXllclJlY3Qu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFNoYWRvd0J1ZmZlciogc2hhZG93
QnVmZmVyID0gc2NyYXRjaFNoYWRvd0J1ZmZlcigpOwotICAgIFFJbWFnZSogc2hhZG93SW1hZ2Ug
PSBzaGFkb3dCdWZmZXItPnNjcmF0Y2hJbWFnZShsYXllclJlY3Quc2l6ZSgpKTsKLSAgICBtX2xh
eWVySW1hZ2UgPSBRSW1hZ2UoKnNoYWRvd0ltYWdlKTsKLQotICAgIG1fbGF5ZXJDb250ZXh0ID0g
bmV3IFFQYWludGVyOwotICAgIG1fbGF5ZXJDb250ZXh0LT5iZWdpbigmbV9sYXllckltYWdlKTsK
LSAgICBtX2xheWVyQ29udGV4dC0+c2V0Rm9udChwLT5mb250KCkpOwotICAgIG1fbGF5ZXJDb250
ZXh0LT50cmFuc2xhdGUobV9sYXllckNvbnRleHRUcmFuc2xhdGlvbik7Ci0gICAgcmV0dXJuIG1f
bGF5ZXJDb250ZXh0OwotfQotCi12b2lkIENvbnRleHRTaGFkb3c6OmVuZFNoYWRvd0xheWVyKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCkKLXsKLSAgICBtX2xheWVyQ29udGV4dC0+ZW5kKCk7Ci0g
ICAgZGVsZXRlIG1fbGF5ZXJDb250ZXh0OwotICAgIG1fbGF5ZXJDb250ZXh0ID0gMDsKLQotICAg
IGlmIChtX3R5cGUgPT0gQmx1clNoYWRvdykgewotICAgICAgICBibHVyTGF5ZXJJbWFnZShtX2xh
eWVySW1hZ2UuYml0cygpLCBJbnRTaXplKG1fbGF5ZXJJbWFnZS53aWR0aCgpLCBtX2xheWVySW1h
Z2UuaGVpZ2h0KCkpLAotICAgICAgICAgICAgICAgICAgICAgICBtX2xheWVySW1hZ2UuYnl0ZXNQ
ZXJMaW5lKCkpOwotICAgIH0KLQotICAgIGlmIChtX3R5cGUgIT0gTm9TaGFkb3cpIHsKLSAgICAg
ICAgLy8gIkNvbG9yaXplIiB3aXRoIHRoZSByaWdodCBzaGFkb3cgY29sb3IuCi0gICAgICAgIFFQ
YWludGVyIHAoJm1fbGF5ZXJJbWFnZSk7Ci0gICAgICAgIHAuc2V0Q29tcG9zaXRpb25Nb2RlKFFQ
YWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlSW4pOwotICAgICAgICBwLmZpbGxSZWN0KG1f
bGF5ZXJJbWFnZS5yZWN0KCksIG1fY29sb3IucmdiKCkpOwotICAgICAgICBwLmVuZCgpOwotICAg
IH0KLQotICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3SW1hZ2UobV9sYXllck9y
aWdpbiwgbV9sYXllckltYWdlLCBtX3NvdXJjZVJlY3QpOwotCi0gICAgc2NyYXRjaFNoYWRvd0J1
ZmZlcigpLT5zY2hlZHVsZVB1cmdlKCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwCmluZGV4IGE1YTE2ZTAuLmEyMTJlZWYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcApAQCAtMjMs
NyArMjMsNiBAQAogI2luY2x1ZGUgIkZvbnQuaCIKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9y
bS5oIgotI2luY2x1ZGUgIkNvbnRleHRTaGFkb3cuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRp
b24uaCIKICNpbmNsdWRlICJGb250RmFsbGJhY2tMaXN0LmgiCiAjaW5jbHVkZSAiRm9udFNlbGVj
dG9yLmgiCkBAIC0zNCw2ICszMyw3IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVk
ZSAiU2hhZG93Qmx1ci5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKIAogI2luY2x1ZGUgPFFCcnVz
aD4KQEAgLTE0Miw0MCArMTQyLDQzIEBAIHN0YXRpYyB2b2lkIGRyYXdUZXh0Q29tbW9uKEdyYXBo
aWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0CiAgICAgICAg
ICAgICBRUmVjdEYgYm91bmRpbmdSZWN0KHBvaW50LngoKSArIHgxLCBwb2ludC55KCkgLSBhc2Nl
bnQsIHgyIC0geDEsIGZtLmhlaWdodCgpKTsKICAgICAgICAgICAgIFFSZWN0RiBjbGlwID0gYm91
bmRpbmdSZWN0OwogCi0gICAgICAgICAgICBDb250ZXh0U2hhZG93KiBjdHhTaGFkb3cgPSBjdHgt
PmNvbnRleHRTaGFkb3coKTsKLQotICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+bV90eXBlICE9
IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KSB7CisgICAgICAgICAgICBTaGFkb3dCbHVyKiBjdHhT
aGFkb3cgPSBjdHgtPnNoYWRvd0JsdXIoKTsKKyAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPnR5
cGUoKSAhPSBTaGFkb3dCbHVyOjpOb1NoYWRvdykgeworICAgICAgICAgICAgICAgIGNvbnN0IFFQ
b2ludEYgc2hhZG93T2Zmc2V0KGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY3R4
LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7CiAgICAgICAgICAgICAgICAgcXJlYWwg
ZHgxID0gMCwgZHgyID0gMCwgZHkxID0gMCwgZHkyID0gMDsKLSAgICAgICAgICAgICAgICBpZiAo
Y3R4U2hhZG93LT5vZmZzZXQoKS54KCkgPiAwKQotICAgICAgICAgICAgICAgICAgICBkeDIgPSBj
dHhTaGFkb3ctPm9mZnNldCgpLngoKTsKKyAgICAgICAgICAgICAgICBpZiAoc2hhZG93T2Zmc2V0
LngoKSA+IDApCisgICAgICAgICAgICAgICAgICAgIGR4MiA9IHNoYWRvd09mZnNldC54KCk7CiAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBkeDEgPSAtY3R4U2hhZG93
LT5vZmZzZXQoKS54KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+b2Zmc2V0KCku
eSgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAgZHkyID0gY3R4U2hhZG93LT5vZmZzZXQoKS55
KCk7CisgICAgICAgICAgICAgICAgICAgIGR4MSA9IC1zaGFkb3dPZmZzZXQueCgpOworICAgICAg
ICAgICAgICAgIGlmIChzaGFkb3dPZmZzZXQueSgpID4gMCkKKyAgICAgICAgICAgICAgICAgICAg
ZHkyID0gc2hhZG93T2Zmc2V0LnkoKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgICAgIGR5MSA9IC1jdHhTaGFkb3ctPm9mZnNldCgpLnkoKTsKKyAgICAgICAgICAgICAg
ICAgICAgZHkxID0gLXNoYWRvd09mZnNldC55KCk7CiAgICAgICAgICAgICAgICAgLy8gZXhwYW5k
IHRoZSBjbGlwIHJlY3QgdG8gaW5jbHVkZSB0aGUgdGV4dCBzaGFkb3cgYXMgd2VsbAorICAgICAg
ICAgICAgICAgIGNvbnN0IGZsb2F0IGJsdXJEaXN0YW5jZSA9IGN0eC0+c3RhdGUoKS5zaGFkb3dC
bHVyOwogICAgICAgICAgICAgICAgIGNsaXAuYWRqdXN0KGR4MSwgZHgyLCBkeTEsIGR5Mik7Ci0g
ICAgICAgICAgICAgICAgY2xpcC5hZGp1c3QoLWN0eFNoYWRvdy0+bV9ibHVyRGlzdGFuY2UsIC1j
dHhTaGFkb3ctPm1fYmx1ckRpc3RhbmNlLCBjdHhTaGFkb3ctPm1fYmx1ckRpc3RhbmNlLCBjdHhT
aGFkb3ctPm1fYmx1ckRpc3RhbmNlKTsKKyAgICAgICAgICAgICAgICBjbGlwLmFkanVzdCgtYmx1
ckRpc3RhbmNlLCAtYmx1ckRpc3RhbmNlLCBibHVyRGlzdGFuY2UsIGJsdXJEaXN0YW5jZSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBwLT5zYXZlKCk7CiAgICAgICAgICAgICBwLT5zZXRD
bGlwUmVjdChjbGlwLnRvUmVjdCgpLCBRdDo6SW50ZXJzZWN0Q2xpcCk7CiAgICAgICAgICAgICBw
dC5zZXRZKHB0LnkoKSAtIGFzY2VudCk7CiAKLSAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPm1f
dHlwZSAhPSBDb250ZXh0U2hhZG93OjpOb1NoYWRvdykgewotICAgICAgICAgICAgICAgIENvbnRl
eHRTaGFkb3cqIGN0eFNoYWRvdyA9IGN0eC0+Y29udGV4dFNoYWRvdygpOwotICAgICAgICAgICAg
ICAgIGlmICghY3R4U2hhZG93LT5tdXN0VXNlQ29udGV4dFNoYWRvdyhjdHgpKSB7CisgICAgICAg
ICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsKKyAg
ICAgICAgICAgICAgICBTaGFkb3dCbHVyKiBjdHhTaGFkb3cgPSBjdHgtPnNoYWRvd0JsdXIoKTsK
KyAgICAgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Qmx1
clNoYWRvdworICAgICAgICAgICAgICAgICAgICAmJiAoIWN0eFNoYWRvdy0+c2hhZG93c0lnbm9y
ZVRyYW5zZm9ybXMoKSB8fCBjdHgtPmdldENUTSgpLmlzSWRlbnRpdHkoKSkpIHsKICAgICAgICAg
ICAgICAgICAgICAgcC0+c2F2ZSgpOwotICAgICAgICAgICAgICAgICAgICBwLT5zZXRQZW4oY3R4
U2hhZG93LT5tX2NvbG9yKTsKLSAgICAgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKGN0eFNo
YWRvdy0+b2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICBwLT5zZXRQZW4oY3R4LT5zdGF0
ZSgpLnNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKFFQb2lu
dEYoY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpLCBjdHgtPnN0YXRlKCkuc2hhZG93
T2Zmc2V0LmhlaWdodCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGxpbmUuZHJhdyhwLCBwdCk7
CiAgICAgICAgICAgICAgICAgICAgIHAtPnJlc3RvcmUoKTsKICAgICAgICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IGN0eFNo
YWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHgsIGJvdW5kaW5nUmVjdCk7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CisgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNz
Q29udGV4dCogc2hhZG93Q29udGV4dCA9IGN0eFNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHgs
IGJvdW5kaW5nUmVjdCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRv
d0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
U2luY2UgaXQgd2lsbCBiZSBibHVycmVkIGFueXdheSwgd2UgZG9uJ3QgY2FyZSBhYm91dCByZW5k
ZXIgaGludHMuCiAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRGb250
KHAtPmZvbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRQ
ZW4oY3R4U2hhZG93LT5tX2NvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1Bh
aW50ZXItPnNldFBlbihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgbGluZS5kcmF3KHNoYWRvd1BhaW50ZXIsIHB0KTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGN0eFNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY3R4KTsKICAgICAgICAgICAgICAgICAg
ICAgfQpAQCAtMjAxLDQwICsyMDQsNDMgQEAgc3RhdGljIHZvaWQgZHJhd1RleHRDb21tb24oR3Jh
cGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXQKICAgICBp
ZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKQogICAgICAgICB0ZXh0
U3Ryb2tlUGF0aC5hZGRUZXh0KHB0LCBmb250LCBzdHJpbmcpOwogCi0gICAgQ29udGV4dFNoYWRv
dyogY3R4U2hhZG93ID0gY3R4LT5jb250ZXh0U2hhZG93KCk7Ci0gICAgaWYgKGN0eFNoYWRvdy0+
bV90eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KSB7CisgICAgU2hhZG93Qmx1ciogY3R4
U2hhZG93ID0gY3R4LT5zaGFkb3dCbHVyKCk7CisgICAgaWYgKGN0eC0+aGFzU2hhZG93KCkgJiYg
Y3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsKICAgICAgICAgaWYg
KGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0TW9kZUZpbGwpIHsKLSAgICAgICAgICAgIGlm
IChjdHhTaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpCbHVyU2hhZG93KSB7CisgICAg
ICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Qmx1clNoYWRvdykg
ewogICAgICAgICAgICAgICAgIHAtPnNhdmUoKTsKLSAgICAgICAgICAgICAgICBwLT5zZXRQZW4o
Y3R4U2hhZG93LT5tX2NvbG9yKTsKLSAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoY3R4U2hh
ZG93LT5vZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgcC0+c2V0UGVuKGN0eC0+c3RhdGUoKS5z
aGFkb3dDb2xvcik7CisgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKFFQb2ludEYoY3R4LT5z
dGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpLCBjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0Lmhl
aWdodCgpKSk7CiAgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQocHQsIHN0cmluZywgZmxhZ3Ms
IHJ1bi5leHBhbnNpb24oKSk7CiAgICAgICAgICAgICAgICAgcC0+cmVzdG9yZSgpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBRRm9udE1ldHJpY3MgZm0oZm9udCk7CiAg
ICAgICAgICAgICAgICAgUVJlY3RGIGJvdW5kaW5nUmVjdChwdC54KCksIHBvaW50LnkoKSAtIGZt
LmFzY2VudCgpLCBmbS53aWR0aChzdHJpbmcsIC0xLCBmbGFncyksIGZtLmhlaWdodCgpKTsKLSAg
ICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IGN0eFNoYWRvdy0+YmVnaW5T
aGFkb3dMYXllcihjdHgsIGJvdW5kaW5nUmVjdCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNoYWRv
d1BhaW50ZXIpIHsKKyAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRl
eHQgPSBjdHhTaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4LCBib3VuZGluZ1JlY3QpOworICAg
ICAgICAgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgIFFQ
YWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7
CiAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIGl0IHdpbGwgYmUgYmx1cnJlZCBhbnl3YXks
IHdlIGRvbid0IGNhcmUgYWJvdXQgcmVuZGVyIGhpbnRzLgogICAgICAgICAgICAgICAgICAgICBz
aGFkb3dQYWludGVyLT5zZXRGb250KHAtPmZvbnQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNo
YWRvd1BhaW50ZXItPnNldFBlbihjdHhTaGFkb3ctPm1fY29sb3IpOworICAgICAgICAgICAgICAg
ICAgICBzaGFkb3dQYWludGVyLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKICAg
ICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZHJhd1RleHQocHQsIHN0cmluZywgZmxh
Z3MsIHJ1bi5leHBhbnNpb24oKSk7CiAgICAgICAgICAgICAgICAgICAgIGN0eFNoYWRvdy0+ZW5k
U2hhZG93TGF5ZXIoY3R4KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0gZWxzZSBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKSB7
Ci0gICAgICAgICAgICBpZiAoY3R4U2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Qmx1
clNoYWRvdykgewotICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShjdHhTaGFkb3ctPm9mZnNl
dCgpKTsKLSAgICAgICAgICAgICAgICBwLT5zdHJva2VQYXRoKHRleHRTdHJva2VQYXRoLCBRUGVu
KGN0eFNoYWRvdy0+bV9jb2xvcikpOwotICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZSgtY3R4
U2hhZG93LT5vZmZzZXQoKSk7CisgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0g
U2hhZG93Qmx1cjo6Qmx1clNoYWRvdykgeworICAgICAgICAgICAgICAgIGNvbnN0IFFQb2ludEYg
c2hhZG93T2Zmc2V0KGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY3R4LT5zdGF0
ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7CisgICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRl
KHNoYWRvd09mZnNldCk7CisgICAgICAgICAgICAgICAgcC0+c3Ryb2tlUGF0aCh0ZXh0U3Ryb2tl
UGF0aCwgUVBlbihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpKTsKKyAgICAgICAgICAgICAgICBw
LT50cmFuc2xhdGUoLXNoYWRvd09mZnNldCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgICAgIFFGb250TWV0cmljcyBmbShmb250KTsKICAgICAgICAgICAgICAgICBRUmVjdEYg
Ym91bmRpbmdSZWN0KHB0LngoKSwgcG9pbnQueSgpIC0gZm0uYXNjZW50KCksIGZtLndpZHRoKHN0
cmluZywgLTEsIGZsYWdzKSwgZm0uaGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgIFFQYWludGVy
KiBzaGFkb3dQYWludGVyID0gY3R4U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eCwgYm91bmRp
bmdSZWN0KTsKLSAgICAgICAgICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgeworICAgICAgICAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IGN0eFNoYWRvdy0+YmVnaW5T
aGFkb3dMYXllcihjdHgsIGJvdW5kaW5nUmVjdCk7CisgICAgICAgICAgICAgICAgaWYgKHNoYWRv
d0NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIg
PSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgICAgICAgICAg
Ly8gU2luY2UgaXQgd2lsbCBiZSBibHVycmVkIGFueXdheSwgd2UgZG9uJ3QgY2FyZSBhYm91dCBy
ZW5kZXIgaGludHMuCiAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldEZvbnQo
cC0+Zm9udCgpKTsKLSAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c3Ryb2tlUGF0
aCh0ZXh0U3Ryb2tlUGF0aCwgUVBlbihjdHhTaGFkb3ctPm1fY29sb3IpKTsKKyAgICAgICAgICAg
ICAgICAgICAgc2hhZG93UGFpbnRlci0+c3Ryb2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBlbihj
dHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpKTsKICAgICAgICAgICAgICAgICAgICAgY3R4U2hhZG93
LT5lbmRTaGFkb3dMYXllcihjdHgpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
QEAgLTMyOCw3ICszMzQsNyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsCiAgICAgQVNTRVJUKCFz
aG91bGRTdHJva2UpOwogCiAgICAgLy8gU2hhZG93ZWQgdGV4dCBzaG91bGQgYWx3YXlzIHRha2Ug
dGhlIGNvbXBsZXggcGF0aC4KLSAgICBBU1NFUlQoY29udGV4dC0+Y29udGV4dFNoYWRvdygpLT5t
X3R5cGUgPT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpOworICAgIEFTU0VSVChjb250ZXh0LT5j
b250ZXh0U2hhZG93KCktPnR5cGUoKSA9PSBTaGFkb3dCbHVyOjpOb1NoYWRvdyk7CiAKICAgICBp
ZiAoIXNob3VsZEZpbGwgJiYgIXNob3VsZFN0cm9rZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzYx
LDcgKzM2Nyw3IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwKICAgICBRUGFpbnRlciogcGFpbnRl
ciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogCiAgICAgQ29udGV4dFNoYWRvdyogc2hh
ZG93ID0gY29udGV4dC0+Y29udGV4dFNoYWRvdygpOwotICAgIHN3aXRjaCAoc2hhZG93LT5tX3R5
cGUpIHsKKyAgICBzd2l0Y2ggKHNoYWRvdy0+dHlwZSgpKSB7CiAgICAgY2FzZSBDb250ZXh0U2hh
ZG93OjpTb2xpZFNoYWRvdzogewogICAgICAgICBRUGVuIHByZXZpb3VzUGVuID0gcGFpbnRlci0+
cGVuKCk7CiAgICAgICAgIHBhaW50ZXItPnNldFBlbihzaGFkb3ctPm1fY29sb3IpOwpAQCAtMzc0
LDggKzM4MCw5IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwKICAgICBjYXNlIENvbnRleHRTaGFk
b3c6OkJsdXJTaGFkb3c6IHsKICAgICAgICAgcXJlYWwgaGVpZ2h0ID0gcmF3Rm9udC5hc2NlbnQo
KSArIHJhd0ZvbnQuZGVzY2VudCgpICsgMTsKICAgICAgICAgUVJlY3RGIGJvdW5kaW5nUmVjdChw
b2ludC54KCksIHBvaW50LnkoKSAtIHJhd0ZvbnQuYXNjZW50KCksIHdpZHRoLCBoZWlnaHQpOwot
ICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXll
cihjb250ZXh0LCBib3VuZGluZ1JlY3QpOwotICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewor
ICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hh
ZG93TGF5ZXIoY29udGV4dCwgYm91bmRpbmdSZWN0KTsKKyAgICAgICAgaWYgKHNoYWRvd0NvbnRl
eHQpIHsKKyAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRQZW4o
c2hhZG93LT5tX2NvbG9yKTsKICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmRyYXdHbHlwaFJ1
bihwb2ludCwgcXRHbHlwaHMpOwogICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcihj
b250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0dyYXBoaWNzQ29udGV4dFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAppbmRleCA3OTNjZGUwLi5iOGZmZTgzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRR
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3ND
b250ZXh0UXQuY3BwCkBAIC00NCwxMyArNDQsMTMgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiQ29udGV4dFNoYWRvdy5oIgog
I2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRl
ICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAi
UGF0aC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCiAj
aW5jbHVkZSAiVHJhbnNwYXJlbmN5TGF5ZXIuaCIKIAogI2luY2x1ZGUgPFFCcnVzaD4KQEAgLTE5
Niw4ICsxOTYsMjQgQEAgcHVibGljOgogICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHk7CiAgICAgYm9vbCBpbml0aWFsU21vb3RoUGl4bWFwVHJhbnNmb3Jt
SGludDsKIAotICAgIENvbnRleHRTaGFkb3cgc2hhZG93OwotICAgIFFTdGFjazxDb250ZXh0U2hh
ZG93PiBzaGFkb3dTdGFjazsKKyAgICBTaGFkb3dCbHVyIHNoYWRvdzsKKyAgICBRU3RhY2s8U2hh
ZG93Qmx1cj4gc2hhZG93U3RhY2s7CisKKyAgICBib29sIG11c3RVc2VTaGFkb3dCbHVyKCkgY29u
c3QKKyAgICB7CisgICAgICAgIC8vIFdlIGNhbid0IGF2b2lkIFNoYWRvd0JsdXIsIHNpbmNlIHRo
ZSBzaGFkb3cgaGFzIGJsdXIuCisgICAgICAgIGlmIChzaGFkb3cudHlwZSgpID09IFNoYWRvd0Js
dXI6OkJsdXJTaGFkb3cpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgLy8gV2Ug
Y2FuIGF2b2lkIFNoYWRvd0JsdXIgYW5kIG9wdGltaXplLCBzaW5jZSB3ZSdyZSBub3QgZHJhd2lu
ZyBvbiBhCisgICAgICAgIC8vIGNhbnZhcyBhbmQgYm94IHNoYWRvd3MgYXJlIGFmZmVjdGVkIGJ5
IHRoZSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguCisgICAgICAgIGlmICghc2hhZG93LnNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8v
IFdlIGNhbiBhdm9pZCBTaGFkb3dCbHVyLCBzaW5jZSB0aGVyZSBhcmUgbm8gdHJhbnNmb3JtYXRp
b25zIHRvIGFwcGx5IHRvIHRoZSBjYW52YXMuCisgICAgICAgIGlmIChwKCktPmNvbWJpbmVkVHJh
bnNmb3JtKCkuaXNJZGVudGl0eSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAvLyBPdGhlcndpc2UsIG5vIGNoYW5jZSBhdm9pZGluZyBTaGFkb3dCbHVyLgorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CiAKICAgICBRUmVjdEYgY2xpcEJvdW5kaW5nUmVjdCgpIGNvbnN0
CiAgICAgewpAQCAtMzA5LDcgKzMyNSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3Jl
UGxhdGZvcm1TdGF0ZSgpCiAgICAgbV9kYXRhLT5wKCktPnJlc3RvcmUoKTsKIAogICAgIGlmICht
X2RhdGEtPnNoYWRvd1N0YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBD
b250ZXh0U2hhZG93KCk7CisgICAgICAgIG1fZGF0YS0+c2hhZG93ID0gU2hhZG93Qmx1cihGbG9h
dFNpemUobV9zdGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0JsdXIpLCBtX3N0YXRlLnNo
YWRvd09mZnNldCwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dDb2xvclNwYWNl
KTsKICAgICBlbHNlCiAgICAgICAgIG1fZGF0YS0+c2hhZG93ID0gbV9kYXRhLT5zaGFkb3dTdGFj
ay5wb3AoKTsKIH0KQEAgLTQ5NSwzMSArNTExLDI5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHBsYXRmb3JtUGF0aC5zZXRGaWxsUnVsZSh0
b1F0RmlsbFJ1bGUoZmlsbFJ1bGUoKSkpOwogCiAgICAgaWYgKGhhc1NoYWRvdygpKSB7Ci0gICAg
ICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHRTaGFkb3coKTsKLSAgICAgICAgaWYg
KHNoYWRvdy0+bXVzdFVzZUNvbnRleHRTaGFkb3codGhpcykgfHwgbV9zdGF0ZS5maWxsUGF0dGVy
biB8fCBtX3N0YXRlLmZpbGxHcmFkaWVudCkKKyAgICAgICAgU2hhZG93Qmx1ciogc2hhZG93ID0g
c2hhZG93Qmx1cigpOworICAgICAgICBpZiAobV9kYXRhLT5tdXN0VXNlU2hhZG93Qmx1cigpIHx8
IG1fc3RhdGUuZmlsbFBhdHRlcm4gfHwgbV9zdGF0ZS5maWxsR3JhZGllbnQpCiAgICAgICAgIHsK
LSAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5iZWdpblNoYWRv
d0xheWVyKHRoaXMsIHBsYXRmb3JtUGF0aC5jb250cm9sUG9pbnRSZWN0KCkpOwotICAgICAgICAg
ICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hh
ZG93Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCBwbGF0Zm9ybVBhdGgu
Y29udHJvbFBvaW50UmVjdCgpKTsKKyAgICAgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7Cisg
ICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgICAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVy
bikgewogICAgICAgICAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gYWZmaW5lOwotICAgICAg
ICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRpY19jYXN0PHFyZWFs
PihzaGFkb3ctPm1fY29sb3IuYWxwaGEoKSkgLyAyNTUpOwogICAgICAgICAgICAgICAgICAgICBz
aGFkb3dQYWludGVyLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIFFCcnVzaChtX3N0YXRlLmZpbGxQ
YXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSkpOwogICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKICAgICAgICAgICAgICAgICAgICAg
UUJydXNoIGJydXNoKCptX3N0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsK
ICAgICAgICAgICAgICAgICAgICAgYnJ1c2guc2V0VHJhbnNmb3JtKG1fc3RhdGUuZmlsbEdyYWRp
ZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOwotICAgICAgICAgICAgICAgICAgICBzaGFk
b3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPihzaGFkb3ctPm1fY29sb3Iu
YWxwaGEoKSkgLyAyNTUpOwogICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxs
UGF0aChwbGF0Zm9ybVBhdGgsIGJydXNoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPm1fY29sb3I7Ci0g
ICAgICAgICAgICAgICAgICAgIHNoYWRvd0NvbG9yLnNldEFscGhhRihzaGFkb3dDb2xvci5hbHBo
YUYoKSAqIHAtPmJydXNoKCkuY29sb3IoKS5hbHBoYUYoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IHNoYWRvd1BhaW50ZXItPmZpbGxQYXRoKHBsYXRmb3JtUGF0aCwgc2hhZG93Q29sb3IpOworICAg
ICAgICAgICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBtX3N0YXRlLnNoYWRvd0NvbG9y
OworICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUGF0aChwbGF0Zm9ybVBh
dGgsIHAtPmJydXNoKCkuY29sb3IoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIodGhpcyk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBRUG9pbnRGIG9mZnNldCA9IHNoYWRvdy0+b2Zmc2V0KCk7
CisgICAgICAgICAgICBRUG9pbnRGIG9mZnNldChtX3N0YXRlLnNoYWRvd09mZnNldC53aWR0aCgp
LCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7CiAgICAgICAgICAgICBwLT50cmFuc2xh
dGUob2Zmc2V0KTsKLSAgICAgICAgICAgIFFDb2xvciBzaGFkb3dDb2xvciA9IHNoYWRvdy0+bV9j
b2xvcjsKKyAgICAgICAgICAgIFFDb2xvciBzaGFkb3dDb2xvciA9IG1fc3RhdGUuc2hhZG93Q29s
b3I7CiAgICAgICAgICAgICBzaGFkb3dDb2xvci5zZXRBbHBoYUYoc2hhZG93Q29sb3IuYWxwaGFG
KCkgKiBwLT5icnVzaCgpLmNvbG9yKCkuYWxwaGFGKCkpOwogICAgICAgICAgICAgcC0+ZmlsbFBh
dGgocGxhdGZvcm1QYXRoLCBzaGFkb3dDb2xvcik7CiAgICAgICAgICAgICBwLT50cmFuc2xhdGUo
LW9mZnNldCk7CkBAIC01NDcsMzAgKzU2MSwyOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHBsYXRmb3JtUGF0aC5zZXRGaWxsUnVsZSh0
b1F0RmlsbFJ1bGUoZmlsbFJ1bGUoKSkpOwogCiAgICAgaWYgKGhhc1NoYWRvdygpKSB7Ci0gICAg
ICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHRTaGFkb3coKTsKLSAgICAgICAgaWYg
KHNoYWRvdy0+bXVzdFVzZUNvbnRleHRTaGFkb3codGhpcykgfHwgbV9zdGF0ZS5zdHJva2VQYXR0
ZXJuIHx8IG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpCisgICAgICAgIFNoYWRvd0JsdXIqIHNoYWRv
dyA9IHNoYWRvd0JsdXIoKTsKKyAgICAgICAgaWYgKG1fZGF0YS0+bXVzdFVzZVNoYWRvd0JsdXIo
KSB8fCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gfHwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudCkKICAg
ICAgICAgewogICAgICAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCA9IHBsYXRmb3JtUGF0
aC5jb250cm9sUG9pbnRSZWN0KCk7CiAgICAgICAgICAgICBib3VuZGluZ1JlY3QuaW5mbGF0ZShw
ZW4ubWl0ZXJMaW1pdCgpICsgcGVuLndpZHRoRigpKTsKLSAgICAgICAgICAgIFFQYWludGVyKiBz
aGFkb3dQYWludGVyID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRoaXMsIGJvdW5kaW5nUmVj
dCk7Ci0gICAgICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgeworICAgICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRoaXMs
IGJvdW5kaW5nUmVjdCk7CisgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAg
ICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQp
IHsKICAgICAgICAgICAgICAgICAgICAgUUJydXNoIGJydXNoKCptX3N0YXRlLnN0cm9rZUdyYWRp
ZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOwogICAgICAgICAgICAgICAgICAgICBicnVzaC5zZXRU
cmFuc2Zvcm0obV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgp
KTsKICAgICAgICAgICAgICAgICAgICAgUVBlbiBzaGFkb3dQZW4ocGVuKTsKICAgICAgICAgICAg
ICAgICAgICAgc2hhZG93UGVuLnNldEJydXNoKGJydXNoKTsKLSAgICAgICAgICAgICAgICAgICAg
c2hhZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVhbD4oc2hhZG93LT5tX2Nv
bG9yLmFscGhhKCkpIC8gMjU1KTsKICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+
c3Ryb2tlUGF0aChwbGF0Zm9ybVBhdGgsIHNoYWRvd1Blbik7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0
aWNfY2FzdDxxcmVhbD4obV9kYXRhLT5zaGFkb3cubV9jb2xvci5hbHBoYSgpKSAvIDI1NSk7CiAg
ICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnN0cm9rZVBhdGgocGxhdGZvcm1QYXRo
LCBwZW4pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzaGFkb3ctPmVuZFNo
YWRvd0xheWVyKHRoaXMpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgUVBvaW50RiBvZmZzZXQgPSBzaGFkb3ctPm9mZnNldCgpOworICAgICAgICAgICAgUVBv
aW50RiBvZmZzZXQobV9zdGF0ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgbV9zdGF0ZS5zaGFkb3dP
ZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICAgICAgcC0+dHJhbnNsYXRlKG9mZnNldCk7Ci0gICAg
ICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPm1fY29sb3I7CisgICAgICAgICAg
ICBRQ29sb3Igc2hhZG93Q29sb3IgPSBtX3N0YXRlLnNoYWRvd0NvbG9yOwogICAgICAgICAgICAg
c2hhZG93Q29sb3Iuc2V0QWxwaGFGKHNoYWRvd0NvbG9yLmFscGhhRigpICogcGVuLmNvbG9yKCku
YWxwaGFGKCkpOwogICAgICAgICAgICAgUVBlbiBzaGFkb3dQZW4ocGVuKTsKICAgICAgICAgICAg
IHNoYWRvd1Blbi5zZXRDb2xvcihzaGFkb3dDb2xvcik7CkBAIC02NjgsNDQgKzY4MSw0MiBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogCiAg
ICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKICAgICBRUmVjdEYgbm9ybWFsaXplZFJlY3Qg
PSByZWN0Lm5vcm1hbGl6ZWQoKTsKLSAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0
U2hhZG93KCk7CisgICAgU2hhZG93Qmx1ciogc2hhZG93ID0gc2hhZG93Qmx1cigpOwogCiAgICAg
aWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pIHsKICAgICAgICAgUVBpeG1hcCogaW1hZ2UgPSBtX3N0
YXRlLmZpbGxQYXR0ZXJuLT50aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUo
KTsKLSAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBoYXNTaGFkb3coKSA/IHNoYWRv
dy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCBub3JtYWxpemVkUmVjdCkgOiAwOwotICAgICAgICBp
ZiAoc2hhZG93UGFpbnRlcikgeworICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRl
eHQgPSBoYXNTaGFkb3coKSA/IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCBub3JtYWxp
emVkUmVjdCkgOiAwOworICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAg
UVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKICAgICAgICAgICAgIGRyYXdSZXBlYXRQYXR0ZXJuKHNoYWRvd1BhaW50ZXIsIGltYWdlLCBu
b3JtYWxpemVkUmVjdCwgbV9zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0WCgpLCBtX3N0YXRlLmZp
bGxQYXR0ZXJuLT5yZXBlYXRZKCkpOwotICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0Q29t
cG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlSW4pOwotICAgICAg
ICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIHNoYWRvdy0+bV9j
b2xvcik7CiAgICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKHRoaXMpOwogICAgICAg
ICB9CiAgICAgICAgIGRyYXdSZXBlYXRQYXR0ZXJuKHAsIGltYWdlLCBub3JtYWxpemVkUmVjdCwg
bV9zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0WCgpLCBtX3N0YXRlLmZpbGxQYXR0ZXJuLT5yZXBl
YXRZKCkpOwogICAgIH0gZWxzZSBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKICAgICAgICAg
UUJydXNoIGJydXNoKCptX3N0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsK
ICAgICAgICAgYnJ1c2guc2V0VHJhbnNmb3JtKG1fc3RhdGUuZmlsbEdyYWRpZW50LT5ncmFkaWVu
dFNwYWNlVHJhbnNmb3JtKCkpOwotICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IGhh
c1NoYWRvdygpID8gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRoaXMsIG5vcm1hbGl6ZWRSZWN0
KSA6IDA7Ci0gICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CisgICAgICAgIEdyYXBoaWNzQ29u
dGV4dCogc2hhZG93Q29udGV4dCA9IGhhc1NoYWRvdygpID8gc2hhZG93LT5iZWdpblNoYWRvd0xh
eWVyKHRoaXMsIG5vcm1hbGl6ZWRSZWN0KSA6IDA7CisgICAgICAgIGlmIChzaGFkb3dDb250ZXh0
KSB7CisgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qo
bm9ybWFsaXplZFJlY3QsIGJydXNoKTsKLSAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldENv
bXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZUluKTsKLSAgICAg
ICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBzaGFkb3ctPm1f
Y29sb3IpOwogICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcih0aGlzKTsKICAgICAg
ICAgfQogICAgICAgICBwLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwgYnJ1c2gpOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewotICAgICAgICAgICAgaWYgKHNoYWRv
dy0+bXVzdFVzZUNvbnRleHRTaGFkb3codGhpcykpIHsKLSAgICAgICAgICAgICAgICBRUGFpbnRl
ciogc2hhZG93UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCBub3JtYWxp
emVkUmVjdCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKLSAgICAgICAg
ICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVhbD4o
c2hhZG93LT5tX2NvbG9yLmFscGhhKCkpIC8gMjU1KTsKKyAgICAgICAgICAgIGlmIChtX2RhdGEt
Pm11c3RVc2VTaGFkb3dCbHVyKCkpIHsKKyAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQq
IHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgbm9ybWFsaXpl
ZFJlY3QpOworICAgICAgICAgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7CisgICAgICAgICAg
ICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0
KG5vcm1hbGl6ZWRSZWN0LCBwLT5icnVzaCgpKTsKICAgICAgICAgICAgICAgICAgICAgc2hhZG93
LT5lbmRTaGFkb3dMYXllcih0aGlzKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFNvbGlkIHJlY3RhbmdsZSBmaWxsIHdpdGggbm8g
Ymx1ciBzaGFkb3cgb3IgdHJhbnNmb3JtYXRpb25zIGFwcGxpZWQgY2FuIGJlIGRvbmUKICAgICAg
ICAgICAgICAgICAvLyBmYXN0ZXIgd2l0aG91dCB1c2luZyB0aGUgc2hhZG93IGxheWVyIGF0IGFs
bC4KLSAgICAgICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPm1fY29sb3I7
CisgICAgICAgICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gbV9zdGF0ZS5zaGFkb3dDb2xv
cjsKICAgICAgICAgICAgICAgICBzaGFkb3dDb2xvci5zZXRBbHBoYUYoc2hhZG93Q29sb3IuYWxw
aGFGKCkgKiBwLT5icnVzaCgpLmNvbG9yKCkuYWxwaGFGKCkpOwotICAgICAgICAgICAgICAgIHAt
PmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LnRyYW5zbGF0ZWQoc2hhZG93LT5vZmZzZXQoKSksIHNo
YWRvd0NvbG9yKTsKKyAgICAgICAgICAgICAgICBwLT5maWxsUmVjdChub3JtYWxpemVkUmVjdC50
cmFuc2xhdGVkKFFQb2ludEYobV9zdGF0ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgbV9zdGF0ZS5z
aGFkb3dPZmZzZXQuaGVpZ2h0KCkpKSwgc2hhZG93Q29sb3IpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CiAKQEAgLTcyNCwxNiArNzM1LDIwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTCiAg
ICAgUVJlY3RGIG5vcm1hbGl6ZWRSZWN0ID0gcmVjdC5ub3JtYWxpemVkKCk7CiAKICAgICBpZiAo
aGFzU2hhZG93KCkpIHsKLSAgICAgICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY29udGV4dFNo
YWRvdygpOwotICAgICAgICBpZiAoc2hhZG93LT5tdXN0VXNlQ29udGV4dFNoYWRvdyh0aGlzKSkg
ewotICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hh
ZG93TGF5ZXIodGhpcywgbm9ybWFsaXplZFJlY3QpOwotICAgICAgICAgICAgaWYgKHNoYWRvd1Bh
aW50ZXIpIHsKKyAgICAgICAgU2hhZG93Qmx1ciogc2hhZG93ID0gc2hhZG93Qmx1cigpOworICAg
ICAgICBpZiAobV9kYXRhLT5tdXN0VXNlU2hhZG93Qmx1cigpKSB7CisgICAgICAgICAgICBHcmFw
aGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhp
cywgbm9ybWFsaXplZFJlY3QpOworICAgICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAg
ICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpOwogICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldENvbXBv
c2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7Ci0gICAgICAgICAg
ICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIHNoYWRvdy0+bV9j
b2xvcik7CisgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFsaXpl
ZFJlY3QsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwogICAgICAgICAgICAgICAgIHNoYWRvdy0+ZW5k
U2hhZG93TGF5ZXIodGhpcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgcC0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QudHJhbnNsYXRlZChzaGFkb3ctPm9mZnNl
dCgpKSwgc2hhZG93LT5tX2NvbG9yKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFFD
b2xvciBzaGFkb3dDb2xvciA9IG1fc3RhdGUuc2hhZG93Q29sb3I7CisgICAgICAgICAgICBzaGFk
b3dDb2xvci5zZXRBbHBoYUYoc2hhZG93Q29sb3IuYWxwaGFGKCkgKiBwLT5icnVzaCgpLmNvbG9y
KCkuYWxwaGFGKCkpOworICAgICAgICAgICAgcC0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QudHJh
bnNsYXRlZChRUG9pbnRGKG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCksIG1fc3RhdGUuc2hh
ZG93T2Zmc2V0LmhlaWdodCgpKSksIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgfQogICAgIH0KIAog
ICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBtX2RhdGEtPnNvbGlkQ29sb3IpOwpAQCAt
NzQ4LDE4ICs3NjMsMjAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChj
b25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWYKICAgICBwYXRoLmFkZFJv
dW5kZWRSZWN0KHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdo
dCk7CiAgICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKICAgICBpZiAoaGFzU2hhZG93KCkp
IHsKLSAgICAgICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY29udGV4dFNoYWRvdygpOwotICAg
ICAgICBpZiAoc2hhZG93LT5tdXN0VXNlQ29udGV4dFNoYWRvdyh0aGlzKSkgewotICAgICAgICAg
ICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhp
cywgcmVjdCk7Ci0gICAgICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgeworICAgICAgICBTaGFk
b3dCbHVyKiBzaGFkb3cgPSBzaGFkb3dCbHVyKCk7CisgICAgICAgIGlmIChtX2RhdGEtPm11c3RV
c2VTaGFkb3dCbHVyKCkpIHsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29u
dGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCByZWN0KTsKKyAgICAgICAgICAg
IGlmIChzaGFkb3dDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1Bh
aW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgICAg
ICBzaGFkb3dQYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9u
TW9kZV9Tb3VyY2UpOwotICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxQYXRoKHBh
dGgucGxhdGZvcm1QYXRoKCksIFFDb2xvcihtX2RhdGEtPnNoYWRvdy5tX2NvbG9yKSk7CisgICAg
ICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFBhdGgocGF0aC5wbGF0Zm9ybVBhdGgoKSwg
UUNvbG9yKG1fc3RhdGUuc2hhZG93Q29sb3IpKTsKICAgICAgICAgICAgICAgICBzaGFkb3ctPmVu
ZFNoYWRvd0xheWVyKHRoaXMpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgcC0+dHJhbnNsYXRlKG1fZGF0YS0+c2hhZG93Lm9mZnNldCgpKTsKLSAgICAgICAg
ICAgIHAtPmZpbGxQYXRoKHBhdGgucGxhdGZvcm1QYXRoKCksIFFDb2xvcihtX2RhdGEtPnNoYWRv
dy5tX2NvbG9yKSk7Ci0gICAgICAgICAgICBwLT50cmFuc2xhdGUoLW1fZGF0YS0+c2hhZG93Lm9m
ZnNldCgpKTsKKyAgICAgICAgICAgIGNvbnN0IFFQb2ludEYgc2hhZG93T2Zmc2V0KG1fc3RhdGUu
c2hhZG93T2Zmc2V0LndpZHRoKCksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsKKyAg
ICAgICAgICAgIHAtPnRyYW5zbGF0ZShzaGFkb3dPZmZzZXQpOworICAgICAgICAgICAgcC0+Zmls
bFBhdGgocGF0aC5wbGF0Zm9ybVBhdGgoKSwgUUNvbG9yKG1fc3RhdGUuc2hhZG93Q29sb3IpKTsK
KyAgICAgICAgICAgIHAtPnRyYW5zbGF0ZSgtc2hhZG93T2Zmc2V0KTsKICAgICAgICAgfQogICAg
IH0KICAgICBwLT5maWxsUGF0aChwYXRoLnBsYXRmb3JtUGF0aCgpLCBRQ29sb3IoY29sb3IpKTsK
QEAgLTc3MCw3ICs3ODcsNyBAQCBib29sIEdyYXBoaWNzQ29udGV4dDo6aW5UcmFuc3BhcmVuY3lM
YXllcigpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGF0YS0+bGF5ZXJDb3VudDsKIH0KIAotQ29udGV4
dFNoYWRvdyogR3JhcGhpY3NDb250ZXh0Ojpjb250ZXh0U2hhZG93KCkKK1NoYWRvd0JsdXIqIEdy
YXBoaWNzQ29udGV4dDo6c2hhZG93Qmx1cigpCiB7CiAgICAgcmV0dXJuICZtX2RhdGEtPnNoYWRv
dzsKIH0KQEAgLTc5MCw2ICs4MDcsMTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQogCiAgICAgbV9kYXRhLT5wKCktPnNldENsaXBSZWN0KHJlY3Qs
IFF0OjpJbnRlcnNlY3RDbGlwKTsKIH0KK0ludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91
bmRzKCkgY29uc3QKK3sKKyAgICBRUGFpbnRlciogcCA9IG1fZGF0YS0+cCgpOworICAgIFFSZWN0
RiBjbGlwUmVjdDsKKworICAgIGlmIChwLT5oYXNDbGlwcGluZygpKQorICAgICAgICBjbGlwUmVj
dCA9IG1fZGF0YS0+Y2xpcEJvdW5kaW5nUmVjdCgpOworICAgIGVsc2UKKyAgICAgICAgY2xpcFJl
Y3QgPSBwLT50cmFuc2Zvcm0oKS5pbnZlcnRlZCgpLm1hcFJlY3QocC0+d2luZG93KCkpOworCisg
ICAgcmV0dXJuIEludFJlY3QoY2xpcFJlY3QueCgpLCBjbGlwUmVjdC55KCksIGNsaXBSZWN0Lndp
ZHRoKCksIGNsaXBSZWN0LmhlaWdodCgpKTsKK30KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIFdpbmRSdWxlIGNsaXBSdWxlKQogewpAQCAtOTI2LDcg
Kzk1NSw3IEBAIEZsb2F0UmVjdCBHcmFwaGljc0NvbnRleHQ6OnJvdW5kVG9EZXZpY2VQaXhlbHMo
Y29uc3QgRmxvYXRSZWN0JiBmcmVjdCwgUm91bmRpbmdNCiAgICAgcmV0dXJuIEZsb2F0UmVjdChy
b3VuZGVkT3JpZ2luLCByb3VuZGVkTG93ZXJSaWdodCAtIHJvdW5kZWRPcmlnaW4pOwogfQogCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBz
aXplLCBmbG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UpCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3coY29uc3QgRmxvYXRTaXplJiBzaXplLCBm
bG9hdCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsK
ICAgICAvLyBRdCBkb2Vzbid0IHN1cHBvcnQgc2hhZG93cyBuYXRpdmVseSwgdGhleSBhcmUgZHJh
d24gbWFudWFsbHkgaW4gdGhlIGRyYXcqCiAgICAgLy8gZnVuY3Rpb25zCkBAIC05MzUsMTAgKzk2
NCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9h
dFNpemUmIHNpemUsIGZsb2F0IGJsdXIsIGNvbnN0CiAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0
aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dAogICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1
IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwogICAgICAgICBtX3N0YXRlLnNoYWRvd09mZnNl
dCA9IEZsb2F0U2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKTsKLSAgICAgICAgbV9k
YXRhLT5zaGFkb3cgPSBDb250ZXh0U2hhZG93KGNvbG9yLCBibHVyLCBGbG9hdFNpemUoc2l6ZS53
aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSkpOwotICAgIH0gZWxzZQotICAgICAgICBtX2RhdGEtPnNo
YWRvdyA9IENvbnRleHRTaGFkb3coY29sb3IsIGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpKTsKKyAgICB9CiAKKyAgICBtX2RhdGEtPnNoYWRvdyA9IFNoYWRvd0Js
dXIoRmxvYXRTaXplKG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dCbHVyKSwgbV9z
dGF0ZS5zaGFkb3dPZmZzZXQsIGNvbG9yLCBjb2xvclNwYWNlKTsKICAgICBtX2RhdGEtPnNoYWRv
dy5zZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvSW1hZ2VRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFn
ZVF0LmNwcAppbmRleCAwYzhjZTllLi40MWZmOGE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcApAQCAtMzQsMTEgKzM0LDExIEBACiAKICNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2lu
Y2x1ZGUgIkNvbnRleHRTaGFkb3cuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCiAjaW5jbHVkZSAi
U3RpbGxJbWFnZVF0LmgiCiAjaW5jbHVkZSAicXdlYnNldHRpbmdzLmgiCiAKQEAgLTIyNCwxMSAr
MjI0LDExIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBj
b25zdCBGbG9hdFJlY3QmIGRzdCwKICAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJh
dG9yID0gY3R4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCk7CiAgICAgY3R4dC0+c2V0Q29tcG9zaXRl
T3BlcmF0aW9uKCFpbWFnZS0+aGFzQWxwaGEoKSAmJiBvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVy
ID8gQ29tcG9zaXRlQ29weSA6IG9wKTsKIAotICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGN0
eHQtPmNvbnRleHRTaGFkb3coKTsKLSAgICBpZiAoc2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNo
YWRvdzo6Tm9TaGFkb3cpIHsKLSAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFk
b3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4dCwgbm9ybWFsaXplZERzdCk7Ci0gICAgICAgIGlmIChz
aGFkb3dQYWludGVyKSB7Ci0gICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0
YXRpY19jYXN0PHFyZWFsPihzaGFkb3ctPm1fY29sb3IuYWxwaGEoKSkgLyAyNTUpOworICAgIGlm
IChjdHh0LT5oYXNTaGFkb3coKSkgeworICAgICAgICBTaGFkb3dCbHVyKiBzaGFkb3cgPSBjdHh0
LT5zaGFkb3dCbHVyKCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9
IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHh0LCBub3JtYWxpemVkRHN0KTsKKyAgICAgICAg
aWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVy
ID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAgICBzaGFkb3dQ
YWludGVyLT5kcmF3UGl4bWFwKG5vcm1hbGl6ZWREc3QsICppbWFnZSwgbm9ybWFsaXplZFNyYyk7
CiAgICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKGN0eHQpOwogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdl
UXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0
LmNwcAppbmRleCAzYjA4OTk1Li5jYjJhNDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAKQEAgLTI4LDkgKzI4LDkgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdGlsbEltYWdlUXQuaCIKIAotI2luY2x1
ZGUgIkNvbnRleHRTaGFkb3cuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNs
dWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgogCiAjaW5jbHVkZSA8UVBh
aW50ZXI+CiAKQEAgLTc0LDExICs3NCwxMSBAQCB2b2lkIFN0aWxsSW1hZ2U6OmRyYXcoR3JhcGhp
Y3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwKICAgICBDb21wb3NpdGVPcGVy
YXRvciBwcmV2aW91c09wZXJhdG9yID0gY3R4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCk7CiAgICAg
Y3R4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsKIAotICAgIENvbnRleHRTaGFkb3cqIHNo
YWRvdyA9IGN0eHQtPmNvbnRleHRTaGFkb3coKTsKLSAgICBpZiAoc2hhZG93LT5tX3R5cGUgIT0g
Q29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpIHsKLSAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50
ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4dCwgbm9ybWFsaXplZERzdCk7Ci0gICAg
ICAgIGlmIChzaGFkb3dQYWludGVyKSB7Ci0gICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRP
cGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPihzaGFkb3ctPm1fY29sb3IuYWxwaGEoKSkgLyAyNTUp
OworICAgIGlmIChjdHh0LT5oYXNTaGFkb3coKSkgeworICAgICAgICBTaGFkb3dCbHVyKiBzaGFk
b3cgPSBjdHh0LT5zaGFkb3dCbHVyKCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93
Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHh0LCBub3JtYWxpemVkRHN0KTsK
KyAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgIFFQYWludGVyKiBzaGFk
b3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAg
ICBzaGFkb3dQYWludGVyLT5kcmF3UGl4bWFwKG5vcm1hbGl6ZWREc3QsICptX3BpeG1hcCwgbm9y
bWFsaXplZFNyYyk7CiAgICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKGN0eHQpOwog
ICAgICAgICB9Ci0tIAoxLjcuNC4xCgo=
</data>
<flag name="commit-queue"
          id="93252"
          type_id="3"
          status="-"
          setter="igor.oliveira"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98918</attachid>
            <date>2011-06-28 07:36:39 -0700</date>
            <delta_ts>2011-06-28 11:23:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Qt-Add-ShadowBlur-support.patch</filename>
            <type>text/plain</type>
            <size>46088</size>
            <attacher name="Igor Trindade Oliveira">igor.oliveira</attacher>
            
              <data encoding="base64">RnJvbSBjYjc0ZTI4NDViM2UyMzA5ZWUyMDI0OTA3YTgxMTAwZjk5ZjVjNDY3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBJZ29yIE9saXZlaXJhIDxpZ29yLm9saXZlaXJhQG9wZW5ib3Nz
YS5vcmc+CkRhdGU6IFN1biwgMjYgSnVuIDIwMTEgMTA6MTk6MzYgLTA0MDAKU3ViamVjdDogW1BB
VENIXSBbUXRdIEFkZCBTaGFkb3dCbHVyIHN1cHBvcnQKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDUwICsrKysrKwogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8gICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICstCiAuLi4v
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwICB8ICAgIDIgKy0K
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIHwgICAg
NyArLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgICAg
fCAgIDY3ICsrKysrKysrLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93
Qmx1ci5oICAgICAgfCAgIDIyICsrLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRT
aGFkb3dRdC5jcHAgICAgICAgfCAgMTY4IC0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwICAgICB8ICAgODMgKysrKysrLS0t
LS0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAgICAgIHwg
IDE1NSArKysrKysrKysrKy0tLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9JbWFnZVF0LmNwcCAgICB8ICAgMTIgKy0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAgIHwgICAxMiArLQogMTEgZmlsZXMgY2hhbmdlZCwgMjg5
IGluc2VydGlvbnMoKyksIDI5NCBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGM5NGJjNWEuLjM2OTRkNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAor
MjAxMS0wNi0yOCAgSWdvciBPbGl2ZWlyYSAgPGlnb3Iub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEFk
ZCBTaGFkb3dCbHVyIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYyOTk3CisKKyAgICAgICAgVXNlIFNoYWRvd0JsdXIgaW5zdGVhZCBvZiBD
b250ZXh0U2hhZG93IHRvIGhhbmRsZSBjYW52YXMgYW5kIGNzcyBzaGFkb3dzLiBTaGFkb3dCbHVy
IGlzCisgICAgICAgIGEgbmV3ZXIgYW5kIHBsYXRmb3JtIGluZGVwZW5kZW50IHNoYWRvdyBpbXBs
ZW1lbnRhdGlvbi4KKyAgICAgICAgUXQgUVBhaW50ZXIgZG9lcyBub3QgaGF2ZSBzdXBwb3J0IGZv
ciBzaGFkb3dzIHNvIGlzIG5lY2Vzc2FyeSB0byBjcmVhdGUgYSBsYXllciBzdXBwb3J0CisgICAg
ICAgIHRvIGRyYXcgY29tcGxleCBzaGFwZXMgYW5kIGZvbnRzLiBUaGUgYmVnaW5TaGFkb3dMYXll
ciBjcmVhdGVzIGEgdGVtcG9yYXJ5IHNoYWRvdyBidWZmZXIKKyAgICAgICAgd2hlcmUgdGhlIGNh
bnZhcyBjYW4gZHJhdyBvbnRvIGFuZCBlbmRTaGFkb3dMYXllciBhcHBsaWVzIHRoZSBibHVyIGZp
bHRlciwgY29sb3JzIHRoZQorICAgICAgICBzaGFkb3cgYnVmZmVyIGFuZCBkcmF3IHRoZSBmaW5h
bCBzaGFkb3cgdG8gdGhlIGdyYXBoaWNzIGNvbnRleHQuCisKKyAgICAgICAgKiBXZWJDb3JlLnBy
bzoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93
Qmx1cjo6U2hhZG93Qmx1cik6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpzZXRTaGFk
b3dWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6dXBkYXRlU2hhZG93Qmx1
clZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpjbGVhcik6CisgICAgICAg
IChXZWJDb3JlOjpTaGFkb3dCbHVyOjpibHVyQW5kQ29sb3JTaGFkb3dCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6YmVnaW5TaGFkb3dMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpTaGFkb3dCbHVyOjplbmRTaGFkb3dMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvU2hhZG93Qmx1ci5oOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6dHlwZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvd1F0LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZHJhd1RleHRDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJh
d0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
OjptdXN0VXNlU2hhZG93Qmx1cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
YXZlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJl
c3RvcmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaGFkb3dCbHVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvSW1hZ2VRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmRyYXcpOgorCiAyMDExLTA2LTI1ICBEaW1pdHJpIEds
YXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRh
bSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggYWUxZTY4MC4uYjhkY2NjYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5w
cm8KQEAgLTk4MCw3ICs5ODAsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250RmFtaWx5LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbnRleHRTaGFkb3cuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcCBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UXVhZC5jcHAgXApAQCAtMTk0Miw3ICsxOTQyLDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGxh
dGZvcm0vbW9jay9TcGVlY2hJbnB1dENsaWVudE1vY2suaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvQml0bWFwSW1hZ2UuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaCBcCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5o
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmggXApAQCAtMjUy
MSw3ICsyNTIxLDYgQEAgU09VUkNFUyArPSBcCiAgICAgcGFnZS9xdC9GcmFtZVF0LmNwcCBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNmb3JtYXRpb25NYXRyaXhRdC5jcHAgXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbG9yUXQuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Db250ZXh0U2hhZG93UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFBvaW50UXQuY3BwIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmlu
ZGV4IDNiNzdiOWYuLmYzZjk5ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtNTg1LDcgKzU4NSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogYnVmZmVyLCBj
b25zdCBGbG9hdFJlY3QmIHJlCiAgICAgYnVmZmVyLT5jbGlwKHRoaXMsIHJlY3QpOwogfQogCi0j
aWYgIVVTRShDRykKKyNpZiAhVVNFKENHKSAmJiAhUExBVEZPUk0oUVQpCiBJbnRSZWN0IEdyYXBo
aWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCmluZGV4IDQ5ZGU0MWYuLmVlMGFlNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC01NCw2ICs1NCw3IEBAIHR5
cGVkZWYgY2xhc3MgV2ViQ29yZTo6U3VyZmFjZU9wZW5WRyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDsKICNpbmNsdWRlIDxRUGFpbnRlcj4KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbnRl
eHRTaGFkb3c7CitjbGFzcyBTaGFkb3dCbHVyOwogfQogdHlwZWRlZiBRUGFpbnRlciBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDsKICNlbGlmIFBMQVRGT1JNKFdYKQpAQCAtNDg1LDEwICs0ODYsMTQg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHRha2VPd25lcnNoaXBPZlBsYXRm
b3JtQ29udGV4dCgpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShRVCkgfHwgVVNFKENBSVJPKQor
I2lmIFVTRShDQUlSTykKICAgICAgICAgQ29udGV4dFNoYWRvdyogY29udGV4dFNoYWRvdygpOwog
I2VuZGlmCiAKKyNpZiBQTEFURk9STShRVCkKKyAgICAgICAgU2hhZG93Qmx1ciogc2hhZG93Qmx1
cigpOworI2VuZGlmCisKICNpZiBVU0UoQ0FJUk8pCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dChj
YWlyb190Kik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NoYWRvd0JsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2hhZG93Qmx1ci5jcHAKaW5kZXggMjVmYzlhYS4uZmE3MzVhYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTE3NiwxMSArMTc2LDM0
IEBAIFNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgRmxvYXRTaXplJiByYWRpdXMsIGNvbnN0
IEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25zdCBDCiAgICAgLCBtX2xheWVySW1hZ2UoMCkKICAgICAs
IG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoZmFsc2UpCiB7CisgICAgdXBkYXRlU2hhZG93Qmx1
clZhbHVlcygpOworfQorCitTaGFkb3dCbHVyOjpTaGFkb3dCbHVyKCkKKyAgICA6IG1fdHlwZShO
b1NoYWRvdykKKyAgICAsIG1fYmx1clJhZGl1cygwLCAwKQorICAgICwgbV9zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcyhmYWxzZSkKK3sKK30KKwordm9pZCBTaGFkb3dCbHVyOjpzZXRTaGFkb3dWYWx1
ZXMoY29uc3QgRmxvYXRTaXplJiByYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgYm9vbCBpZ25vcmVUcmFuc2Zv
cm1zKQoreworICAgIG1fYmx1clJhZGl1cyA9IHJhZGl1czsKKyAgICBtX29mZnNldCA9IG9mZnNl
dDsKKyAgICBtX2NvbG9yID0gY29sb3I7CisgICAgbV9jb2xvclNwYWNlID0gY29sb3JTcGFjZTsK
KyAgICBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gaWdub3JlVHJhbnNmb3JtczsKKworICAg
IHVwZGF0ZVNoYWRvd0JsdXJWYWx1ZXMoKTsKK30KKwordm9pZCBTaGFkb3dCbHVyOjp1cGRhdGVT
aGFkb3dCbHVyVmFsdWVzKCkKK3sKICAgICAvLyBMaW1pdCBibHVyIHJhZGl1cyB0byAxMjggdG8g
YXZvaWQgbG90cyBvZiB2ZXJ5IGV4cGVuc2l2ZSBibHVycmluZy4KICAgICBtX2JsdXJSYWRpdXMg
PSBtX2JsdXJSYWRpdXMuc2hydW5rVG8oRmxvYXRTaXplKDEyOCwgMTI4KSk7CiAKICAgICAvLyBU
aGUgdHlwZSBvZiBzaGFkb3cgaXMgZGVjaWRlZCBieSB0aGUgYmx1ciByYWRpdXMsIHNoYWRvdyBv
ZmZzZXQsIGFuZCBzaGFkb3cgY29sb3IuCi0gICAgaWYgKCFtX2NvbG9yLmlzVmFsaWQoKSB8fCAh
Y29sb3IuYWxwaGEoKSkgeworICAgIGlmICghbV9jb2xvci5pc1ZhbGlkKCkgfHwgIW1fY29sb3Iu
YWxwaGEoKSkgewogICAgICAgICAvLyBDYW4ndCBwYWludCB0aGUgc2hhZG93IHdpdGggaW52YWxp
ZCBvciBpbnZpc2libGUgY29sb3IuCiAgICAgICAgIG1fdHlwZSA9IE5vU2hhZG93OwogICAgIH0g
ZWxzZSBpZiAobV9ibHVyUmFkaXVzLndpZHRoKCkgPiAwIHx8IG1fYmx1clJhZGl1cy5oZWlnaHQo
KSA+IDApIHsKQEAgLTIzNyw2ICsyNjAsMTQgQEAgc3RhdGljIHZvaWQgY2FsY3VsYXRlTG9iZXMo
aW50IGxvYmVzW11bMl0sIGZsb2F0IGJsdXJSYWRpdXMsIGJvb2wgc2hhZG93c0lnbm9yZVQKICAg
ICB9CiB9CiAKK3ZvaWQgU2hhZG93Qmx1cjo6Y2xlYXIoKQoreworICAgIG1fdHlwZSA9IE5vU2hh
ZG93OworICAgIG1fY29sb3IgPSBDb2xvcigpOworICAgIG1fYmx1clJhZGl1cyA9IEZsb2F0U2l6
ZSgpOworICAgIG1fb2Zmc2V0ID0gRmxvYXRTaXplKCk7Cit9CisKIHZvaWQgU2hhZG93Qmx1cjo6
Ymx1ckxheWVySW1hZ2UodW5zaWduZWQgY2hhciogaW1hZ2VEYXRhLCBjb25zdCBJbnRTaXplJiBz
aXplLCBpbnQgcm93U3RyaWRlKQogewogICAgIGNvbnN0IGludCBjaGFubmVsc1s0XSA9IHsgMywg
MCwgMSwgMyB9OwpAQCAtODI4LDkgKzg1OSw0MyBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRD
b2xvclNoYWRvd0J1ZmZlcihjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUpCiAKICAgICAvLyBN
YXNrIHRoZSBpbWFnZSB3aXRoIHRoZSBzaGFkb3cgY29sb3IuCiAgICAgR3JhcGhpY3NDb250ZXh0
KiBzaGFkb3dDb250ZXh0ID0gbV9sYXllckltYWdlLT5jb250ZXh0KCk7CisgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpzaGFkb3dDb250ZXh0KTsKICAgICBzaGFkb3dD
b250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlSW4pOwogICAgIHNo
YWRvd0NvbnRleHQtPnNldEZpbGxDb2xvcihtX2NvbG9yLCBtX2NvbG9yU3BhY2UpOwogICAgIHNo
YWRvd0NvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdCgwLCAwLCB0ZW1wbGF0ZVNpemUud2lkdGgo
KSwgdGVtcGxhdGVTaXplLmhlaWdodCgpKSk7CiB9CiAKK0dyYXBoaWNzQ29udGV4dCogU2hhZG93
Qmx1cjo6YmVnaW5TaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQgKmNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgbGF5ZXJBcmVhKQoreworICAgIGFkanVzdEJsdXJSYWRpdXMoY29udGV4dCk7CisK
KyAgICBJbnRSZWN0IGxheWVyUmVjdCA9IGNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0KGNvbnRl
eHQsIGxheWVyQXJlYSwgY29udGV4dC0+Y2xpcEJvdW5kcygpKTsKKworICAgIGlmIChsYXllclJl
Y3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG1fbGF5ZXJJbWFnZSA9IFNj
cmF0Y2hCdWZmZXI6OnNoYXJlZCgpLmdldFNjcmF0Y2hCdWZmZXIobGF5ZXJSZWN0LnNpemUoKSk7
CisKKyAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBtX2xheWVySW1hZ2UtPmNv
bnRleHQoKTsKKyAgICBzaGFkb3dDb250ZXh0LT5zYXZlKCk7CisgICAgc2hhZG93Q29udGV4dC0+
Y2xlYXJSZWN0KEZsb2F0UmVjdCgwLCAwLCBtX2xheWVyU2l6ZS53aWR0aCgpLCBtX2xheWVyU2l6
ZS5oZWlnaHQoKSkpOworCisgICAgc2hhZG93Q29udGV4dC0+dHJhbnNsYXRlKG1fbGF5ZXJDb250
ZXh0VHJhbnNsYXRpb24pOworICAgIHJldHVybiBzaGFkb3dDb250ZXh0OworfQorCit2b2lkIFNo
YWRvd0JsdXI6OmVuZFNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAg
ICBtX2xheWVySW1hZ2UtPmNvbnRleHQoKS0+cmVzdG9yZSgpOworCisgICAgYmx1ckFuZENvbG9y
U2hhZG93QnVmZmVyKGV4cGFuZGVkSW50U2l6ZShtX2xheWVyU2l6ZSkpOworICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlKCpjb250ZXh0KTsKKworICAgIGNvbnRleHQtPmNs
ZWFyU2hhZG93KCk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1fbGF5ZXJJbWFnZSwg
Q29sb3JTcGFjZURldmljZVJHQiwgcm91bmRlZEludFBvaW50KG1fbGF5ZXJPcmlnaW4pLCBJbnRS
ZWN0KDAsIDAsIG1fbGF5ZXJTaXplLndpZHRoKCksIG1fbGF5ZXJTaXplLmhlaWdodCgpKSwgY29u
dGV4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCkpOworCisgICAgbV9sYXllckltYWdlID0gMDsKKyAg
ICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaGFkb3dCbHVyLmgKaW5kZXggMjAyZmYzZC4uOTllZWE1MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaApAQCAtNDQsMTcgKzQ0LDM0
IEBAIGNsYXNzIEltYWdlQnVmZmVyOwogY2xhc3MgU2hhZG93Qmx1ciB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU2hhZG93Qmx1cik7CiBwdWJsaWM6CisgICAgZW51bSBTaGFkb3dUeXBlIHsK
KyAgICAgICAgTm9TaGFkb3csCisgICAgICAgIFNvbGlkU2hhZG93LAorICAgICAgICBCbHVyU2hh
ZG93CisgICAgfTsKKwogICAgIFNoYWRvd0JsdXIoY29uc3QgRmxvYXRTaXplJiByYWRpdXMsIGNv
bnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOworICAgIFNo
YWRvd0JsdXIoKTsKKworICAgIHZvaWQgc2V0U2hhZG93VmFsdWVzKGNvbnN0IEZsb2F0U2l6ZSYs
IGNvbnN0IEZsb2F0U2l6ZSYgLCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UsIGJvb2wgaWdub3Jl
VHJhbnNmb3JtcyA9IGZhbHNlKTsKIAogICAgIHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMoYm9vbCBpZ25vcmVUcmFuc2Zvcm1zKSB7IG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBp
Z25vcmVUcmFuc2Zvcm1zOyB9CiAgICAgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIGNv
bnN0IHsgcmV0dXJuIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IH0KIAorICAgIEdyYXBoaWNz
Q29udGV4dCogYmVnaW5TaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJl
Y3QmIGxheWVyQXJlYSk7CisgICAgdm9pZCBlbmRTaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQq
KTsKKwogICAgIHZvaWQgZHJhd1JlY3RTaGFkb3coR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgUm91bmRlZEludFJlY3Q6OlJhZGlpJik7CiAgICAgdm9pZCBkcmF3SW5z
ZXRTaGFkb3coR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRS
ZWN0JiBob2xlUmVjdCwgY29uc3QgUm91bmRlZEludFJlY3Q6OlJhZGlpJiBob2xlUmFkaWkpOwog
CiAgICAgdm9pZCBibHVyTGF5ZXJJbWFnZSh1bnNpZ25lZCBjaGFyKiwgY29uc3QgSW50U2l6ZSYs
IGludCBzdHJpZGUpOwogCisgICAgdm9pZCBjbGVhcigpOworCisgICAgU2hhZG93VHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiBwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlU2hh
ZG93Qmx1clZhbHVlcygpOworCiAgICAgdm9pZCBkcmF3U2hhZG93QnVmZmVyKEdyYXBoaWNzQ29u
dGV4dCopOwogCiAgICAgdm9pZCBhZGp1c3RCbHVyUmFkaXVzKEdyYXBoaWNzQ29udGV4dCopOwpA
QCAtODAsMTEgKzk3LDYgQEAgcHJpdmF0ZToKICAgICAKICAgICBJbnRTaXplIGJsdXJyZWRFZGdl
U2l6ZSgpIGNvbnN0OwogICAgIAotICAgIGVudW0gU2hhZG93VHlwZSB7Ci0gICAgICAgIE5vU2hh
ZG93LAotICAgICAgICBTb2xpZFNoYWRvdywKLSAgICAgICAgQmx1clNoYWRvdwotICAgIH07CiAg
ICAgCiAgICAgU2hhZG93VHlwZSBtX3R5cGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3dRdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA5ZWIzMWE3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3dRdC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBTZW5jaGEsIEluYy4KLSAq
Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJDb250ZXh0U2hhZG93LmgiCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxRUGFpbnRlcj4KLSNpbmNs
dWRlIDxRVGltZXJFdmVudD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBDb250ZXh0U2hh
ZG93IG5lZWRzIGEgc2NyYXRjaCBpbWFnZSBhcyB0aGUgYnVmZmVyIGZvciB0aGUgYmx1ciBmaWx0
ZXIuCi0vLyBJbnN0ZWFkIG9mIGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIHRoZSBidWZmZXIgZm9y
IGV2ZXJ5IG9wZXJhdGlvbiwKLS8vIHdlIGNyZWF0ZSBhIGJ1ZmZlciB3aGljaCB3aWxsIGJlIGF1
dG9tYXRpY2FsbHkgcHVyZ2VkIHZpYSBhIHRpbWVyLgotCi1jbGFzcyBTaGFkb3dCdWZmZXI6IHB1
YmxpYyBRT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBTaGFkb3dCdWZmZXIoUU9iamVjdCogcGFyZW50
ID0gMCk7Ci0KLSAgICBRSW1hZ2UqIHNjcmF0Y2hJbWFnZShjb25zdCBRU2l6ZSYgc2l6ZSk7Ci0K
LSAgICB2b2lkIHNjaGVkdWxlUHVyZ2UoKTsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgdGltZXJF
dmVudChRVGltZXJFdmVudCogZXZlbnQpOwotCi1wcml2YXRlOgotICAgIFFJbWFnZSBpbWFnZTsK
LSAgICBpbnQgdGltZXJJZDsKLX07Ci0KLVNoYWRvd0J1ZmZlcjo6U2hhZG93QnVmZmVyKFFPYmpl
Y3QqIHBhcmVudCkKLSAgICA6IFFPYmplY3QocGFyZW50KQotICAgICwgdGltZXJJZCgtMSkKLXsK
LX0KLQotUUltYWdlKiBTaGFkb3dCdWZmZXI6OnNjcmF0Y2hJbWFnZShjb25zdCBRU2l6ZSYgc2l6
ZSkKLXsKLSAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgaW50IGhlaWdodCA9IHNp
emUuaGVpZ2h0KCk7Ci0KLSAgICAvLyBXZSBkbyBub3QgbmVlZCB0byByZWNyZWF0ZSB0aGUgYnVm
ZmVyIGlmIHRoZSBidWZmZXIgaXMgcmVhc29uYWJseQotICAgIC8vIGxhcmdlciB0aGFuIHRoZSBy
ZXF1ZXN0ZWQgc2l6ZS4gSG93ZXZlciwgaWYgdGhlIHJlcXVlc3RlZCBzaXplIGlzCi0gICAgLy8g
bXVjaCBzbWFsbGVyIHRoYW4gb3VyIGJ1ZmZlciwgcmVkdWNlIG91ciBidWZmZXIgc28gdGhhdCB3
ZSB3aWxsIG5vdAotICAgIC8vIGtlZXAgdG9vIG1hbnkgYWxsb2NhdGVkIHBpeGVscyBmb3IgdG9v
IGxvbmcuCi0gICAgaWYgKCFpbWFnZS5pc051bGwoKSAmJiAoaW1hZ2Uud2lkdGgoKSA+IHdpZHRo
KSAmJiAoaW1hZ2UuaGVpZ2h0KCkgPiBoZWlnaHQpKQotICAgICAgICBpZiAoKCgyICogd2lkdGgp
ID4gaW1hZ2Uud2lkdGgoKSkgJiYgKCgyICogaGVpZ2h0KSA+IGltYWdlLmhlaWdodCgpKSkgewot
ICAgICAgICAgICAgaW1hZ2UuZmlsbCgwKTsKLSAgICAgICAgICAgIHJldHVybiAmaW1hZ2U7Ci0g
ICAgICAgIH0KLQotICAgIC8vIFJvdW5kIHRvIHRoZSBuZWFyZXN0IDMyIHBpeGVscyBzbyB3ZSBk
byBub3QgZ3JvdyB0aGUgYnVmZmVyIGV2ZXJ5dGltZQotICAgIC8vIHRoZXJlIGlzIGxhcmdlciBy
ZXF1ZXN0IGJ5IDEgcGl4ZWwuCi0gICAgd2lkdGggPSAoMSArICh3aWR0aCA+PiA1KSkgPDwgNTsK
LSAgICBoZWlnaHQgPSAoMSArIChoZWlnaHQgPj4gNSkpIDw8IDU7Ci0KLSAgICBpbWFnZSA9IFFJ
bWFnZSh3aWR0aCwgaGVpZ2h0LCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7
Ci0gICAgaW1hZ2UuZmlsbCgwKTsKLSAgICByZXR1cm4gJmltYWdlOwotfQotCi12b2lkIFNoYWRv
d0J1ZmZlcjo6c2NoZWR1bGVQdXJnZSgpCi17Ci0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBCdWZm
ZXJQdXJnZURlbGF5ID0gMjsgLy8gc2Vjb25kcwotICAgIGlmICh0aW1lcklkID49IDApCi0gICAg
ICAgIGtpbGxUaW1lcih0aW1lcklkKTsKLSAgICB0aW1lcklkID0gc3RhcnRUaW1lcihCdWZmZXJQ
dXJnZURlbGF5ICogMTAwMCk7Ci19Ci0KLXZvaWQgU2hhZG93QnVmZmVyOjp0aW1lckV2ZW50KFFU
aW1lckV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQtPnRpbWVySWQoKSA9PSB0aW1lcklk
KSB7Ci0gICAgICAgIGtpbGxUaW1lcih0aW1lcklkKTsKLSAgICAgICAgaW1hZ2UgPSBRSW1hZ2Uo
KTsKLSAgICB9Ci0gICAgUU9iamVjdDo6dGltZXJFdmVudChldmVudCk7Ci19Ci0KLVFfR0xPQkFM
X1NUQVRJQyhTaGFkb3dCdWZmZXIsIHNjcmF0Y2hTaGFkb3dCdWZmZXIpCi0KLVBsYXRmb3JtQ29u
dGV4dCBDb250ZXh0U2hhZG93OjpiZWdpblNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBsYXllckFyZWEpCi17Ci0gICAgLy8gU2V0IG1fYmx1ckRp
c3RhbmNlLgotICAgIGFkanVzdEJsdXJEaXN0YW5jZShjb250ZXh0KTsKLQotICAgIFBsYXRmb3Jt
Q29udGV4dCBwID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBRUmVjdCBjbGlw
UmVjdDsKLSAgICBpZiAocC0+aGFzQ2xpcHBpbmcoKSkKLSNpZiBRVF9WRVJTSU9OID49IFFUX1ZF
UlNJT05fQ0hFQ0soNCwgOCwgMCkKLSAgICAgICAgY2xpcFJlY3QgPSBwLT5jbGlwQm91bmRpbmdS
ZWN0KCkudG9BbGlnbmVkUmVjdCgpOwotI2Vsc2UKLSAgICAgICAgY2xpcFJlY3QgPSBwLT5jbGlw
UmVnaW9uKCkuYm91bmRpbmdSZWN0KCk7Ci0jZW5kaWYKLSAgICBlbHNlCi0gICAgICAgIGNsaXBS
ZWN0ID0gcC0+dHJhbnNmb3JtKCkuaW52ZXJ0ZWQoKS5tYXBSZWN0KHAtPndpbmRvdygpKTsKLQot
ICAgIC8vIFNldCBtX2xheWVyT3JpZ2luLCBtX2xheWVyQ29udGV4dFRyYW5zbGF0aW9uLCBtX3Nv
dXJjZVJlY3QuCi0gICAgSW50UmVjdCBjbGlwKGNsaXBSZWN0LngoKSwgY2xpcFJlY3QueSgpLCBj
bGlwUmVjdC53aWR0aCgpLCBjbGlwUmVjdC5oZWlnaHQoKSk7Ci0gICAgSW50UmVjdCBsYXllclJl
Y3QgPSBjYWxjdWxhdGVMYXllckJvdW5kaW5nUmVjdChjb250ZXh0LCBsYXllckFyZWEsIGNsaXAp
OwotCi0gICAgLy8gRG9uJ3QgcGFpbnQgaWYgd2UgYXJlIHRvdGFsbHkgb3V0c2lkZSB0aGUgY2xp
cCByZWdpb24uCi0gICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgU2hhZG93QnVmZmVyKiBzaGFkb3dCdWZmZXIgPSBzY3JhdGNoU2hhZG93QnVmZmVy
KCk7Ci0gICAgUUltYWdlKiBzaGFkb3dJbWFnZSA9IHNoYWRvd0J1ZmZlci0+c2NyYXRjaEltYWdl
KGxheWVyUmVjdC5zaXplKCkpOwotICAgIG1fbGF5ZXJJbWFnZSA9IFFJbWFnZSgqc2hhZG93SW1h
Z2UpOwotCi0gICAgbV9sYXllckNvbnRleHQgPSBuZXcgUVBhaW50ZXI7Ci0gICAgbV9sYXllckNv
bnRleHQtPmJlZ2luKCZtX2xheWVySW1hZ2UpOwotICAgIG1fbGF5ZXJDb250ZXh0LT5zZXRGb250
KHAtPmZvbnQoKSk7Ci0gICAgbV9sYXllckNvbnRleHQtPnRyYW5zbGF0ZShtX2xheWVyQ29udGV4
dFRyYW5zbGF0aW9uKTsKLSAgICByZXR1cm4gbV9sYXllckNvbnRleHQ7Ci19Ci0KLXZvaWQgQ29u
dGV4dFNoYWRvdzo6ZW5kU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotewot
ICAgIG1fbGF5ZXJDb250ZXh0LT5lbmQoKTsKLSAgICBkZWxldGUgbV9sYXllckNvbnRleHQ7Ci0g
ICAgbV9sYXllckNvbnRleHQgPSAwOwotCi0gICAgaWYgKG1fdHlwZSA9PSBCbHVyU2hhZG93KSB7
Ci0gICAgICAgIGJsdXJMYXllckltYWdlKG1fbGF5ZXJJbWFnZS5iaXRzKCksIEludFNpemUobV9s
YXllckltYWdlLndpZHRoKCksIG1fbGF5ZXJJbWFnZS5oZWlnaHQoKSksCi0gICAgICAgICAgICAg
ICAgICAgICAgIG1fbGF5ZXJJbWFnZS5ieXRlc1BlckxpbmUoKSk7Ci0gICAgfQotCi0gICAgaWYg
KG1fdHlwZSAhPSBOb1NoYWRvdykgewotICAgICAgICAvLyAiQ29sb3JpemUiIHdpdGggdGhlIHJp
Z2h0IHNoYWRvdyBjb2xvci4KLSAgICAgICAgUVBhaW50ZXIgcCgmbV9sYXllckltYWdlKTsKLSAg
ICAgICAgcC5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3Vy
Y2VJbik7Ci0gICAgICAgIHAuZmlsbFJlY3QobV9sYXllckltYWdlLnJlY3QoKSwgbV9jb2xvci5y
Z2IoKSk7Ci0gICAgICAgIHAuZW5kKCk7Ci0gICAgfQotCi0gICAgY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPmRyYXdJbWFnZShtX2xheWVyT3JpZ2luLCBtX2xheWVySW1hZ2UsIG1fc291cmNl
UmVjdCk7Ci0KLSAgICBzY3JhdGNoU2hhZG93QnVmZmVyKCktPnNjaGVkdWxlUHVyZ2UoKTsKLX0K
LQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9u
dFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAK
aW5kZXggYTVhMTZlMC4uYTIxMmVlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9Gb250UXQuY3BwCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSAiRm9udC5o
IgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQ29udGV4dFNoYWRv
dy5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRGYWxsYmFj
a0xpc3QuaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKQEAgLTM0LDYgKzMzLDcgQEAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
I2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCiAjaW5jbHVkZSAi
VGV4dFJ1bi5oIgogCiAjaW5jbHVkZSA8UUJydXNoPgpAQCAtMTQyLDQwICsxNDIsNDMgQEAgc3Rh
dGljIHZvaWQgZHJhd1RleHRDb21tb24oR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgRmxvYXQKICAgICAgICAgICAgIFFSZWN0RiBib3VuZGluZ1JlY3QocG9p
bnQueCgpICsgeDEsIHBvaW50LnkoKSAtIGFzY2VudCwgeDIgLSB4MSwgZm0uaGVpZ2h0KCkpOwog
ICAgICAgICAgICAgUVJlY3RGIGNsaXAgPSBib3VuZGluZ1JlY3Q7CiAKLSAgICAgICAgICAgIENv
bnRleHRTaGFkb3cqIGN0eFNoYWRvdyA9IGN0eC0+Y29udGV4dFNoYWRvdygpOwotCi0gICAgICAg
ICAgICBpZiAoY3R4U2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpIHsK
KyAgICAgICAgICAgIFNoYWRvd0JsdXIqIGN0eFNoYWRvdyA9IGN0eC0+c2hhZG93Qmx1cigpOwor
ICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6Ok5vU2hhZG93
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgUVBvaW50RiBzaGFkb3dPZmZzZXQoY3R4LT5zdGF0
ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpLCBjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdo
dCgpKTsKICAgICAgICAgICAgICAgICBxcmVhbCBkeDEgPSAwLCBkeDIgPSAwLCBkeTEgPSAwLCBk
eTIgPSAwOwotICAgICAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPm9mZnNldCgpLngoKSA+IDAp
Ci0gICAgICAgICAgICAgICAgICAgIGR4MiA9IGN0eFNoYWRvdy0+b2Zmc2V0KCkueCgpOworICAg
ICAgICAgICAgICAgIGlmIChzaGFkb3dPZmZzZXQueCgpID4gMCkKKyAgICAgICAgICAgICAgICAg
ICAgZHgyID0gc2hhZG93T2Zmc2V0LngoKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIGR4MSA9IC1jdHhTaGFkb3ctPm9mZnNldCgpLngoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoY3R4U2hhZG93LT5vZmZzZXQoKS55KCkgPiAwKQotICAgICAgICAgICAgICAgICAg
ICBkeTIgPSBjdHhTaGFkb3ctPm9mZnNldCgpLnkoKTsKKyAgICAgICAgICAgICAgICAgICAgZHgx
ID0gLXNoYWRvd09mZnNldC54KCk7CisgICAgICAgICAgICAgICAgaWYgKHNoYWRvd09mZnNldC55
KCkgPiAwKQorICAgICAgICAgICAgICAgICAgICBkeTIgPSBzaGFkb3dPZmZzZXQueSgpOwogICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZHkxID0gLWN0eFNoYWRvdy0+
b2Zmc2V0KCkueSgpOworICAgICAgICAgICAgICAgICAgICBkeTEgPSAtc2hhZG93T2Zmc2V0Lnko
KTsKICAgICAgICAgICAgICAgICAvLyBleHBhbmQgdGhlIGNsaXAgcmVjdCB0byBpbmNsdWRlIHRo
ZSB0ZXh0IHNoYWRvdyBhcyB3ZWxsCisgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgYmx1ckRp
c3RhbmNlID0gY3R4LT5zdGF0ZSgpLnNoYWRvd0JsdXI7CiAgICAgICAgICAgICAgICAgY2xpcC5h
ZGp1c3QoZHgxLCBkeDIsIGR5MSwgZHkyKTsKLSAgICAgICAgICAgICAgICBjbGlwLmFkanVzdCgt
Y3R4U2hhZG93LT5tX2JsdXJEaXN0YW5jZSwgLWN0eFNoYWRvdy0+bV9ibHVyRGlzdGFuY2UsIGN0
eFNoYWRvdy0+bV9ibHVyRGlzdGFuY2UsIGN0eFNoYWRvdy0+bV9ibHVyRGlzdGFuY2UpOworICAg
ICAgICAgICAgICAgIGNsaXAuYWRqdXN0KC1ibHVyRGlzdGFuY2UsIC1ibHVyRGlzdGFuY2UsIGJs
dXJEaXN0YW5jZSwgYmx1ckRpc3RhbmNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHAt
PnNhdmUoKTsKICAgICAgICAgICAgIHAtPnNldENsaXBSZWN0KGNsaXAudG9SZWN0KCksIFF0OjpJ
bnRlcnNlY3RDbGlwKTsKICAgICAgICAgICAgIHB0LnNldFkocHQueSgpIC0gYXNjZW50KTsKIAot
ICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hh
ZG93KSB7Ci0gICAgICAgICAgICAgICAgQ29udGV4dFNoYWRvdyogY3R4U2hhZG93ID0gY3R4LT5j
b250ZXh0U2hhZG93KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjdHhTaGFkb3ctPm11c3RVc2VD
b250ZXh0U2hhZG93KGN0eCkpIHsKKyAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPnR5cGUoKSAh
PSBTaGFkb3dCbHVyOjpOb1NoYWRvdykgeworICAgICAgICAgICAgICAgIFNoYWRvd0JsdXIqIGN0
eFNoYWRvdyA9IGN0eC0+c2hhZG93Qmx1cigpOworICAgICAgICAgICAgICAgIGlmIChjdHhTaGFk
b3ctPnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpCbHVyU2hhZG93CisgICAgICAgICAgICAgICAgICAg
ICYmICghY3R4U2hhZG93LT5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIHx8IGN0eC0+Z2V0Q1RN
KCkuaXNJZGVudGl0eSgpKSkgewogICAgICAgICAgICAgICAgICAgICBwLT5zYXZlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHAtPnNldFBlbihjdHhTaGFkb3ctPm1fY29sb3IpOwotICAgICAgICAg
ICAgICAgICAgICBwLT50cmFuc2xhdGUoY3R4U2hhZG93LT5vZmZzZXQoKSk7CisgICAgICAgICAg
ICAgICAgICAgIHAtPnNldFBlbihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpOworICAgICAgICAg
ICAgICAgICAgICBwLT50cmFuc2xhdGUoUVBvaW50RihjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0
LndpZHRoKCksIGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpKTsKICAgICAgICAg
ICAgICAgICAgICAgbGluZS5kcmF3KHAsIHB0KTsKICAgICAgICAgICAgICAgICAgICAgcC0+cmVz
dG9yZSgpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFFQ
YWludGVyKiBzaGFkb3dQYWludGVyID0gY3R4U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eCwg
Ym91bmRpbmdSZWN0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsK
KyAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gY3R4
U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eCwgYm91bmRpbmdSZWN0KTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFQ
YWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQgYW55
d2F5LCB3ZSBkb24ndCBjYXJlIGFib3V0IHJlbmRlciBoaW50cy4KICAgICAgICAgICAgICAgICAg
ICAgICAgIHNoYWRvd1BhaW50ZXItPnNldEZvbnQocC0+Zm9udCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldFBlbihjdHhTaGFkb3ctPm1fY29sb3IpOworICAg
ICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0UGVuKGN0eC0+c3RhdGUoKS5z
aGFkb3dDb2xvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLmRyYXcoc2hhZG93UGFp
bnRlciwgcHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgY3R4U2hhZG93LT5lbmRTaGFkb3dM
YXllcihjdHgpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMDEsNDAgKzIwNCw0MyBAQCBz
dGF0aWMgdm9pZCBkcmF3VGV4dENvbW1vbihHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBGbG9hdAogICAgIGlmIChjdHgtPnRleHREcmF3aW5nTW9kZSgpICYg
VGV4dE1vZGVTdHJva2UpCiAgICAgICAgIHRleHRTdHJva2VQYXRoLmFkZFRleHQocHQsIGZvbnQs
IHN0cmluZyk7CiAKLSAgICBDb250ZXh0U2hhZG93KiBjdHhTaGFkb3cgPSBjdHgtPmNvbnRleHRT
aGFkb3coKTsKLSAgICBpZiAoY3R4U2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9T
aGFkb3cpIHsKKyAgICBTaGFkb3dCbHVyKiBjdHhTaGFkb3cgPSBjdHgtPnNoYWRvd0JsdXIoKTsK
KyAgICBpZiAoY3R4LT5oYXNTaGFkb3coKSAmJiBjdHhTaGFkb3ctPnR5cGUoKSAhPSBTaGFkb3dC
bHVyOjpOb1NoYWRvdykgewogICAgICAgICBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRl
eHRNb2RlRmlsbCkgewotICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+bV90eXBlICE9IENvbnRl
eHRTaGFkb3c6OkJsdXJTaGFkb3cpIHsKKyAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPnR5cGUo
KSAhPSBTaGFkb3dCbHVyOjpCbHVyU2hhZG93KSB7CiAgICAgICAgICAgICAgICAgcC0+c2F2ZSgp
OwotICAgICAgICAgICAgICAgIHAtPnNldFBlbihjdHhTaGFkb3ctPm1fY29sb3IpOwotICAgICAg
ICAgICAgICAgIHAtPnRyYW5zbGF0ZShjdHhTaGFkb3ctPm9mZnNldCgpKTsKKyAgICAgICAgICAg
ICAgICBwLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgICAg
ICBwLT50cmFuc2xhdGUoUVBvaW50RihjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCks
IGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpKTsKICAgICAgICAgICAgICAgICBw
LT5kcmF3VGV4dChwdCwgc3RyaW5nLCBmbGFncywgcnVuLmV4cGFuc2lvbigpKTsKICAgICAgICAg
ICAgICAgICBwLT5yZXN0b3JlKCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIFFGb250TWV0cmljcyBmbShmb250KTsKICAgICAgICAgICAgICAgICBRUmVjdEYgYm91bmRp
bmdSZWN0KHB0LngoKSwgcG9pbnQueSgpIC0gZm0uYXNjZW50KCksIGZtLndpZHRoKHN0cmluZywg
LTEsIGZsYWdzKSwgZm0uaGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFk
b3dQYWludGVyID0gY3R4U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eCwgYm91bmRpbmdSZWN0
KTsKLSAgICAgICAgICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgeworICAgICAgICAgICAgICAg
IEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IGN0eFNoYWRvdy0+YmVnaW5TaGFkb3dM
YXllcihjdHgsIGJvdW5kaW5nUmVjdCk7CisgICAgICAgICAgICAgICAgaWYgKHNoYWRvd0NvbnRl
eHQpIHsKKyAgICAgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFk
b3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgICAgICAgICAgLy8gU2lu
Y2UgaXQgd2lsbCBiZSBibHVycmVkIGFueXdheSwgd2UgZG9uJ3QgY2FyZSBhYm91dCByZW5kZXIg
aGludHMuCiAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldEZvbnQocC0+Zm9u
dCgpKTsKLSAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0UGVuKGN0eFNoYWRv
dy0+bV9jb2xvcik7CisgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldFBlbihj
dHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpOwogICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWlu
dGVyLT5kcmF3VGV4dChwdCwgc3RyaW5nLCBmbGFncywgcnVuLmV4cGFuc2lvbigpKTsKICAgICAg
ICAgICAgICAgICAgICAgY3R4U2hhZG93LT5lbmRTaGFkb3dMYXllcihjdHgpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChjdHgtPnRleHREcmF3
aW5nTW9kZSgpICYgVGV4dE1vZGVTdHJva2UpIHsKLSAgICAgICAgICAgIGlmIChjdHhTaGFkb3ct
Pm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpCbHVyU2hhZG93KSB7Ci0gICAgICAgICAgICAgICAg
cC0+dHJhbnNsYXRlKGN0eFNoYWRvdy0+b2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIHAtPnN0
cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgsIFFQZW4oY3R4U2hhZG93LT5tX2NvbG9yKSk7Ci0gICAg
ICAgICAgICAgICAgcC0+dHJhbnNsYXRlKC1jdHhTaGFkb3ctPm9mZnNldCgpKTsKKyAgICAgICAg
ICAgIGlmIChjdHhTaGFkb3ctPnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpCbHVyU2hhZG93KSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgUVBvaW50RiBzaGFkb3dPZmZzZXQoY3R4LT5zdGF0ZSgpLnNo
YWRvd09mZnNldC53aWR0aCgpLCBjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsK
KyAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoc2hhZG93T2Zmc2V0KTsKKyAgICAgICAgICAg
ICAgICBwLT5zdHJva2VQYXRoKHRleHRTdHJva2VQYXRoLCBRUGVuKGN0eC0+c3RhdGUoKS5zaGFk
b3dDb2xvcikpOworICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZSgtc2hhZG93T2Zmc2V0KTsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgUUZvbnRNZXRyaWNzIGZtKGZv
bnQpOwogICAgICAgICAgICAgICAgIFFSZWN0RiBib3VuZGluZ1JlY3QocHQueCgpLCBwb2ludC55
KCkgLSBmbS5hc2NlbnQoKSwgZm0ud2lkdGgoc3RyaW5nLCAtMSwgZmxhZ3MpLCBmbS5oZWlnaHQo
KSk7Ci0gICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBjdHhTaGFkb3ct
PmJlZ2luU2hhZG93TGF5ZXIoY3R4LCBib3VuZGluZ1JlY3QpOwotICAgICAgICAgICAgICAgIGlm
IChzaGFkb3dQYWludGVyKSB7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFk
b3dDb250ZXh0ID0gY3R4U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eCwgYm91bmRpbmdSZWN0
KTsKKyAgICAgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAgICAg
ICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOwogICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQg
YW55d2F5LCB3ZSBkb24ndCBjYXJlIGFib3V0IHJlbmRlciBoaW50cy4KICAgICAgICAgICAgICAg
ICAgICAgc2hhZG93UGFpbnRlci0+c2V0Rm9udChwLT5mb250KCkpOwotICAgICAgICAgICAgICAg
ICAgICBzaGFkb3dQYWludGVyLT5zdHJva2VQYXRoKHRleHRTdHJva2VQYXRoLCBRUGVuKGN0eFNo
YWRvdy0+bV9jb2xvcikpOworICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zdHJv
a2VQYXRoKHRleHRTdHJva2VQYXRoLCBRUGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xvcikpOwog
ICAgICAgICAgICAgICAgICAgICBjdHhTaGFkb3ctPmVuZFNoYWRvd0xheWVyKGN0eCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMzI4LDcgKzMzNCw3IEBAIHZvaWQgRm9u
dDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250RGF0YSwKICAgICBBU1NFUlQoIXNob3VsZFN0cm9rZSk7CiAKICAgICAvLyBTaGFk
b3dlZCB0ZXh0IHNob3VsZCBhbHdheXMgdGFrZSB0aGUgY29tcGxleCBwYXRoLgotICAgIEFTU0VS
VChjb250ZXh0LT5jb250ZXh0U2hhZG93KCktPm1fdHlwZSA9PSBDb250ZXh0U2hhZG93OjpOb1No
YWRvdyk7CisgICAgQVNTRVJUKGNvbnRleHQtPmNvbnRleHRTaGFkb3coKS0+dHlwZSgpID09IFNo
YWRvd0JsdXI6Ok5vU2hhZG93KTsKIAogICAgIGlmICghc2hvdWxkRmlsbCAmJiAhc2hvdWxkU3Ry
b2tlKQogICAgICAgICByZXR1cm47CkBAIC0zNjEsNyArMzY3LDcgQEAgdm9pZCBGb250OjpkcmF3
R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhLAogICAgIFFQYWludGVyKiBwYWludGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCk7CiAKICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0LT5jb250ZXh0U2hhZG93
KCk7Ci0gICAgc3dpdGNoIChzaGFkb3ctPm1fdHlwZSkgeworICAgIHN3aXRjaCAoc2hhZG93LT50
eXBlKCkpIHsKICAgICBjYXNlIENvbnRleHRTaGFkb3c6OlNvbGlkU2hhZG93OiB7CiAgICAgICAg
IFFQZW4gcHJldmlvdXNQZW4gPSBwYWludGVyLT5wZW4oKTsKICAgICAgICAgcGFpbnRlci0+c2V0
UGVuKHNoYWRvdy0+bV9jb2xvcik7CkBAIC0zNzQsOCArMzgwLDkgQEAgdm9pZCBGb250OjpkcmF3
R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhLAogICAgIGNhc2UgQ29udGV4dFNoYWRvdzo6Qmx1clNoYWRvdzogewogICAgICAgICBx
cmVhbCBoZWlnaHQgPSByYXdGb250LmFzY2VudCgpICsgcmF3Rm9udC5kZXNjZW50KCkgKyAxOwog
ICAgICAgICBRUmVjdEYgYm91bmRpbmdSZWN0KHBvaW50LngoKSwgcG9pbnQueSgpIC0gcmF3Rm9u
dC5hc2NlbnQoKSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWlu
dGVyID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGNvbnRleHQsIGJvdW5kaW5nUmVjdCk7Ci0g
ICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hh
ZG93Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjb250ZXh0LCBib3VuZGluZ1Jl
Y3QpOworICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAgUVBhaW50ZXIq
IHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAg
ICAgICAgIHNoYWRvd1BhaW50ZXItPnNldFBlbihzaGFkb3ctPm1fY29sb3IpOwogICAgICAgICAg
ICAgc2hhZG93UGFpbnRlci0+ZHJhd0dseXBoUnVuKHBvaW50LCBxdEdseXBocyk7CiAgICAgICAg
ICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCmlu
ZGV4IDc5M2NkZTAuLjFmNDRkMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKQEAgLTQ0LDEzICs0NCwx
MyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIK
LSNpbmNsdWRlICJDb250ZXh0U2hhZG93LmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgi
CiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5o
IgorI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKICNpbmNsdWRlICJUcmFuc3BhcmVuY3lMYXllci5o
IgogCiAjaW5jbHVkZSA8UUJydXNoPgpAQCAtMTk2LDggKzE5NiwyMyBAQCBwdWJsaWM6CiAgICAg
SW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKICAgICBib29s
IGluaXRpYWxTbW9vdGhQaXhtYXBUcmFuc2Zvcm1IaW50OwogCi0gICAgQ29udGV4dFNoYWRvdyBz
aGFkb3c7Ci0gICAgUVN0YWNrPENvbnRleHRTaGFkb3c+IHNoYWRvd1N0YWNrOworICAgIFNoYWRv
d0JsdXIqIHNoYWRvdzsKKworICAgIGJvb2wgbXVzdFVzZVNoYWRvd0JsdXIoKSBjb25zdAorICAg
IHsKKyAgICAgICAgLy8gV2UgY2FuJ3QgYXZvaWQgU2hhZG93Qmx1ciwgc2luY2UgdGhlIHNoYWRv
dyBoYXMgYmx1ci4KKyAgICAgICAgaWYgKHNoYWRvdy0+dHlwZSgpID09IFNoYWRvd0JsdXI6OkJs
dXJTaGFkb3cpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgLy8gV2UgY2FuIGF2
b2lkIFNoYWRvd0JsdXIgYW5kIG9wdGltaXplLCBzaW5jZSB3ZSdyZSBub3QgZHJhd2luZyBvbiBh
CisgICAgICAgIC8vIGNhbnZhcyBhbmQgYm94IHNoYWRvd3MgYXJlIGFmZmVjdGVkIGJ5IHRoZSB0
cmFuc2Zvcm1hdGlvbiBtYXRyaXguCisgICAgICAgIGlmICghc2hhZG93LT5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBXZSBj
YW4gYXZvaWQgU2hhZG93Qmx1ciwgc2luY2UgdGhlcmUgYXJlIG5vIHRyYW5zZm9ybWF0aW9ucyB0
byBhcHBseSB0byB0aGUgY2FudmFzLgorICAgICAgICBpZiAocCgpLT5jb21iaW5lZFRyYW5zZm9y
bSgpLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8g
T3RoZXJ3aXNlLCBubyBjaGFuY2UgYXZvaWRpbmcgU2hhZG93Qmx1ci4KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQogCiAgICAgUVJlY3RGIGNsaXBCb3VuZGluZ1JlY3QoKSBjb25zdAogICAg
IHsKQEAgLTI0MSw2ICsyNTYsOCBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6Okdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShRUGFpbnRlciogcCwgY29ucwogICAgIGluaXRp
YWxTbW9vdGhQaXhtYXBUcmFuc2Zvcm1IaW50ID0gcGFpbnRlci0+dGVzdFJlbmRlckhpbnQoUVBh
aW50ZXI6OlNtb290aFBpeG1hcFRyYW5zZm9ybSk7CiAKICAgICBwYWludGVyLT5zZXRSZW5kZXJI
aW50KFFQYWludGVyOjpBbnRpYWxpYXNpbmcsIHRydWUpOworCisgICAgc2hhZG93ID0gbmV3IFNo
YWRvd0JsdXIoKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCkKQEAgLTI1MCw2ICsyNjcsNyBAQCBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKQog
CiAgICAgUVBhaW50RGV2aWNlKiBkZXZpY2UgPSBwYWludGVyLT5kZXZpY2UoKTsKICAgICBwYWlu
dGVyLT5lbmQoKTsKKyAgICBkZWxldGUgc2hhZG93OwogICAgIGRlbGV0ZSBwYWludGVyOwogICAg
IGRlbGV0ZSBkZXZpY2U7CiB9CkBAIC0yOTcsNyArMzE1LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKICAgICBpZiAoIW1fZGF0YS0+bGF5ZXJzLmlzRW1wdHko
KSAmJiAhbV9kYXRhLT5sYXllcnMudG9wKCktPmFscGhhTWFzay5pc051bGwoKSkKICAgICAgICAg
KyttX2RhdGEtPmxheWVycy50b3AoKS0+c2F2ZUNvdW50ZXI7CiAgICAgbV9kYXRhLT5wKCktPnNh
dmUoKTsKLSAgICBtX2RhdGEtPnNoYWRvd1N0YWNrLnB1c2gobV9kYXRhLT5zaGFkb3cpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQpAQCAtMzA4LDEw
ICszMjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQog
CiAgICAgbV9kYXRhLT5wKCktPnJlc3RvcmUoKTsKIAotICAgIGlmIChtX2RhdGEtPnNoYWRvd1N0
YWNrLmlzRW1wdHkoKSkKLSAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBDb250ZXh0U2hhZG93KCk7
Ci0gICAgZWxzZQotICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IG1fZGF0YS0+c2hhZG93U3RhY2su
cG9wKCk7CisgICAgbV9kYXRhLT5zaGFkb3ctPnNldFNoYWRvd1ZhbHVlcyhGbG9hdFNpemUobV9z
dGF0ZS5zaGFkb3dCbHVyLCBtX3N0YXRlLnNoYWRvd0JsdXIpLCBtX3N0YXRlLnNoYWRvd09mZnNl
dCwgbV9zdGF0ZS5zaGFkb3dDb2xvciwgbV9zdGF0ZS5zaGFkb3dDb2xvclNwYWNlLCBtX3N0YXRl
LnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKIH0KIAogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFu
Z2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KQEAgLTQ5NSwzMSArNTA5LDI5IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHBsYXRmb3JtUGF0
aC5zZXRGaWxsUnVsZSh0b1F0RmlsbFJ1bGUoZmlsbFJ1bGUoKSkpOwogCiAgICAgaWYgKGhhc1No
YWRvdygpKSB7Ci0gICAgICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHRTaGFkb3co
KTsKLSAgICAgICAgaWYgKHNoYWRvdy0+bXVzdFVzZUNvbnRleHRTaGFkb3codGhpcykgfHwgbV9z
dGF0ZS5maWxsUGF0dGVybiB8fCBtX3N0YXRlLmZpbGxHcmFkaWVudCkKKyAgICAgICAgU2hhZG93
Qmx1ciogc2hhZG93ID0gc2hhZG93Qmx1cigpOworICAgICAgICBpZiAobV9kYXRhLT5tdXN0VXNl
U2hhZG93Qmx1cigpIHx8IG1fc3RhdGUuZmlsbFBhdHRlcm4gfHwgbV9zdGF0ZS5maWxsR3JhZGll
bnQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hh
ZG93LT5iZWdpblNoYWRvd0xheWVyKHRoaXMsIHBsYXRmb3JtUGF0aC5jb250cm9sUG9pbnRSZWN0
KCkpOwotICAgICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKKyAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlz
LCBwbGF0Zm9ybVBhdGguY29udHJvbFBvaW50UmVjdCgpKTsKKyAgICAgICAgICAgIGlmIChzaGFk
b3dDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBz
aGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgICAgICBpZiAobV9z
dGF0ZS5maWxsUGF0dGVybikgewogICAgICAgICAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
YWZmaW5lOwotICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0
YXRpY19jYXN0PHFyZWFsPihzaGFkb3ctPm1fY29sb3IuYWxwaGEoKSkgLyAyNTUpOwogICAgICAg
ICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIFFCcnVz
aChtX3N0YXRlLmZpbGxQYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oYWZmaW5lKSkpOwog
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobV9zdGF0ZS5maWxsR3JhZGllbnQpIHsKICAgICAg
ICAgICAgICAgICAgICAgUUJydXNoIGJydXNoKCptX3N0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZv
cm1HcmFkaWVudCgpKTsKICAgICAgICAgICAgICAgICAgICAgYnJ1c2guc2V0VHJhbnNmb3JtKG1f
c3RhdGUuZmlsbEdyYWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOwotICAgICAgICAg
ICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPihz
aGFkb3ctPm1fY29sb3IuYWxwaGEoKSkgLyAyNTUpOwogICAgICAgICAgICAgICAgICAgICBzaGFk
b3dQYWludGVyLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIGJydXNoKTsKICAgICAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFk
b3ctPm1fY29sb3I7Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd0NvbG9yLnNldEFscGhhRihz
aGFkb3dDb2xvci5hbHBoYUYoKSAqIHAtPmJydXNoKCkuY29sb3IoKS5hbHBoYUYoKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxQYXRoKHBsYXRmb3JtUGF0aCwgc2hh
ZG93Q29sb3IpOworICAgICAgICAgICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBtX3N0
YXRlLnNoYWRvd0NvbG9yOworICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxs
UGF0aChwbGF0Zm9ybVBhdGgsIHAtPmJydXNoKCkuY29sb3IoKSk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIodGhpcyk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBRUG9pbnRGIG9mZnNldCA9IHNo
YWRvdy0+b2Zmc2V0KCk7CisgICAgICAgICAgICBRUG9pbnRGIG9mZnNldChtX3N0YXRlLnNoYWRv
d09mZnNldC53aWR0aCgpLCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7CiAgICAgICAg
ICAgICBwLT50cmFuc2xhdGUob2Zmc2V0KTsKLSAgICAgICAgICAgIFFDb2xvciBzaGFkb3dDb2xv
ciA9IHNoYWRvdy0+bV9jb2xvcjsKKyAgICAgICAgICAgIFFDb2xvciBzaGFkb3dDb2xvciA9IG1f
c3RhdGUuc2hhZG93Q29sb3I7CiAgICAgICAgICAgICBzaGFkb3dDb2xvci5zZXRBbHBoYUYoc2hh
ZG93Q29sb3IuYWxwaGFGKCkgKiBwLT5icnVzaCgpLmNvbG9yKCkuYWxwaGFGKCkpOwogICAgICAg
ICAgICAgcC0+ZmlsbFBhdGgocGxhdGZvcm1QYXRoLCBzaGFkb3dDb2xvcik7CiAgICAgICAgICAg
ICBwLT50cmFuc2xhdGUoLW9mZnNldCk7CkBAIC01NDcsMzAgKzU1OSwyOSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoKQogICAgIHBsYXRmb3JtUGF0
aC5zZXRGaWxsUnVsZSh0b1F0RmlsbFJ1bGUoZmlsbFJ1bGUoKSkpOwogCiAgICAgaWYgKGhhc1No
YWRvdygpKSB7Ci0gICAgICAgIENvbnRleHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHRTaGFkb3co
KTsKLSAgICAgICAgaWYgKHNoYWRvdy0+bXVzdFVzZUNvbnRleHRTaGFkb3codGhpcykgfHwgbV9z
dGF0ZS5zdHJva2VQYXR0ZXJuIHx8IG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpCisgICAgICAgIFNo
YWRvd0JsdXIqIHNoYWRvdyA9IHNoYWRvd0JsdXIoKTsKKyAgICAgICAgaWYgKG1fZGF0YS0+bXVz
dFVzZVNoYWRvd0JsdXIoKSB8fCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gfHwgbV9zdGF0ZS5zdHJv
a2VHcmFkaWVudCkKICAgICAgICAgewogICAgICAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVj
dCA9IHBsYXRmb3JtUGF0aC5jb250cm9sUG9pbnRSZWN0KCk7CiAgICAgICAgICAgICBib3VuZGlu
Z1JlY3QuaW5mbGF0ZShwZW4ubWl0ZXJMaW1pdCgpICsgcGVuLndpZHRoRigpKTsKLSAgICAgICAg
ICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRo
aXMsIGJvdW5kaW5nUmVjdCk7Ci0gICAgICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgeworICAg
ICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93LT5iZWdpblNo
YWRvd0xheWVyKHRoaXMsIGJvdW5kaW5nUmVjdCk7CisgICAgICAgICAgICBpZiAoc2hhZG93Q29u
dGV4dCkgeworICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93
Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAgICAgICAgaWYgKG1fc3RhdGUu
c3Ryb2tlR3JhZGllbnQpIHsKICAgICAgICAgICAgICAgICAgICAgUUJydXNoIGJydXNoKCptX3N0
YXRlLnN0cm9rZUdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOwogICAgICAgICAgICAgICAg
ICAgICBicnVzaC5zZXRUcmFuc2Zvcm0obV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+Z3JhZGllbnRT
cGFjZVRyYW5zZm9ybSgpKTsKICAgICAgICAgICAgICAgICAgICAgUVBlbiBzaGFkb3dQZW4ocGVu
KTsKICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGVuLnNldEJydXNoKGJydXNoKTsKLSAgICAg
ICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVh
bD4oc2hhZG93LT5tX2NvbG9yLmFscGhhKCkpIC8gMjU1KTsKICAgICAgICAgICAgICAgICAgICAg
c2hhZG93UGFpbnRlci0+c3Ryb2tlUGF0aChwbGF0Zm9ybVBhdGgsIHNoYWRvd1Blbik7CiAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+
c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVhbD4obV9kYXRhLT5zaGFkb3cubV9jb2xvci5hbHBo
YSgpKSAvIDI1NSk7CiAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnN0cm9rZVBh
dGgocGxhdGZvcm1QYXRoLCBwZW4pOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKHRoaXMpOwogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgUVBvaW50RiBvZmZzZXQgPSBzaGFkb3ctPm9mZnNldCgpOwor
ICAgICAgICAgICAgUVBvaW50RiBvZmZzZXQobV9zdGF0ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSwg
bV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOwogICAgICAgICAgICAgcC0+dHJhbnNsYXRl
KG9mZnNldCk7Ci0gICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPm1fY29s
b3I7CisgICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBtX3N0YXRlLnNoYWRvd0NvbG9y
OwogICAgICAgICAgICAgc2hhZG93Q29sb3Iuc2V0QWxwaGFGKHNoYWRvd0NvbG9yLmFscGhhRigp
ICogcGVuLmNvbG9yKCkuYWxwaGFGKCkpOwogICAgICAgICAgICAgUVBlbiBzaGFkb3dQZW4ocGVu
KTsKICAgICAgICAgICAgIHNoYWRvd1Blbi5zZXRDb2xvcihzaGFkb3dDb2xvcik7CkBAIC02Njgs
NDQgKzY3OSw0MiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogCiAgICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKICAgICBRUmVjdEYg
bm9ybWFsaXplZFJlY3QgPSByZWN0Lm5vcm1hbGl6ZWQoKTsKLSAgICBDb250ZXh0U2hhZG93KiBz
aGFkb3cgPSBjb250ZXh0U2hhZG93KCk7CisgICAgU2hhZG93Qmx1ciogc2hhZG93ID0gc2hhZG93
Qmx1cigpOwogCiAgICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pIHsKICAgICAgICAgUVBpeG1h
cCogaW1hZ2UgPSBtX3N0YXRlLmZpbGxQYXR0ZXJuLT50aWxlSW1hZ2UoKS0+bmF0aXZlSW1hZ2VG
b3JDdXJyZW50RnJhbWUoKTsKLSAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBoYXNT
aGFkb3coKSA/IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCBub3JtYWxpemVkUmVjdCkg
OiAwOwotICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgeworICAgICAgICBHcmFwaGljc0NvbnRl
eHQqIHNoYWRvd0NvbnRleHQgPSBoYXNTaGFkb3coKSA/IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXll
cih0aGlzLCBub3JtYWxpemVkUmVjdCkgOiAwOworICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkg
eworICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgIGRyYXdSZXBlYXRQYXR0ZXJuKHNoYWRvd1Bh
aW50ZXIsIGltYWdlLCBub3JtYWxpemVkUmVjdCwgbV9zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0
WCgpLCBtX3N0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRZKCkpOwotICAgICAgICAgICAgc2hhZG93
UGFpbnRlci0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291
cmNlSW4pOwotICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFsaXplZFJl
Y3QsIHNoYWRvdy0+bV9jb2xvcik7CiAgICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVy
KHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIGRyYXdSZXBlYXRQYXR0ZXJuKHAsIGltYWdlLCBu
b3JtYWxpemVkUmVjdCwgbV9zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0WCgpLCBtX3N0YXRlLmZp
bGxQYXR0ZXJuLT5yZXBlYXRZKCkpOwogICAgIH0gZWxzZSBpZiAobV9zdGF0ZS5maWxsR3JhZGll
bnQpIHsKICAgICAgICAgUUJydXNoIGJydXNoKCptX3N0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZv
cm1HcmFkaWVudCgpKTsKICAgICAgICAgYnJ1c2guc2V0VHJhbnNmb3JtKG1fc3RhdGUuZmlsbEdy
YWRpZW50LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOwotICAgICAgICBRUGFpbnRlciogc2hh
ZG93UGFpbnRlciA9IGhhc1NoYWRvdygpID8gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRoaXMs
IG5vcm1hbGl6ZWRSZWN0KSA6IDA7Ci0gICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CisgICAg
ICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IGhhc1NoYWRvdygpID8gc2hhZG93
LT5iZWdpblNoYWRvd0xheWVyKHRoaXMsIG5vcm1hbGl6ZWRSZWN0KSA6IDA7CisgICAgICAgIGlm
IChzaGFkb3dDb250ZXh0KSB7CisgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9
IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICAgICAgc2hhZG93UGFp
bnRlci0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIGJydXNoKTsKLSAgICAgICAgICAgIHNoYWRv
d1BhaW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1Nv
dXJjZUluKTsKLSAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRS
ZWN0LCBzaGFkb3ctPm1fY29sb3IpOwogICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXll
cih0aGlzKTsKICAgICAgICAgfQogICAgICAgICBwLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwg
YnJ1c2gpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChoYXNTaGFkb3coKSkgewotICAgICAg
ICAgICAgaWYgKHNoYWRvdy0+bXVzdFVzZUNvbnRleHRTaGFkb3codGhpcykpIHsKLSAgICAgICAg
ICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXll
cih0aGlzLCBub3JtYWxpemVkUmVjdCk7Ci0gICAgICAgICAgICAgICAgaWYgKHNoYWRvd1BhaW50
ZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0
aWNfY2FzdDxxcmVhbD4oc2hhZG93LT5tX2NvbG9yLmFscGhhKCkpIC8gMjU1KTsKKyAgICAgICAg
ICAgIGlmIChtX2RhdGEtPm11c3RVc2VTaGFkb3dCbHVyKCkpIHsKKyAgICAgICAgICAgICAgICBH
cmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIo
dGhpcywgbm9ybWFsaXplZFJlY3QpOworICAgICAgICAgICAgICAgIGlmIChzaGFkb3dDb250ZXh0
KSB7CisgICAgICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93
Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1Bh
aW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBwLT5icnVzaCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcih0aGlzKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8vIFNvbGlkIHJlY3Rhbmds
ZSBmaWxsIHdpdGggbm8gYmx1ciBzaGFkb3cgb3IgdHJhbnNmb3JtYXRpb25zIGFwcGxpZWQgY2Fu
IGJlIGRvbmUKICAgICAgICAgICAgICAgICAvLyBmYXN0ZXIgd2l0aG91dCB1c2luZyB0aGUgc2hh
ZG93IGxheWVyIGF0IGFsbC4KLSAgICAgICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBz
aGFkb3ctPm1fY29sb3I7CisgICAgICAgICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gbV9z
dGF0ZS5zaGFkb3dDb2xvcjsKICAgICAgICAgICAgICAgICBzaGFkb3dDb2xvci5zZXRBbHBoYUYo
c2hhZG93Q29sb3IuYWxwaGFGKCkgKiBwLT5icnVzaCgpLmNvbG9yKCkuYWxwaGFGKCkpOwotICAg
ICAgICAgICAgICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LnRyYW5zbGF0ZWQoc2hhZG93
LT5vZmZzZXQoKSksIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgICAgICBwLT5maWxsUmVjdChu
b3JtYWxpemVkUmVjdC50cmFuc2xhdGVkKFFQb2ludEYobV9zdGF0ZS5zaGFkb3dPZmZzZXQud2lk
dGgoKSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpKSwgc2hhZG93Q29sb3IpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAKQEAgLTcyNCwxNiArNzMzLDIwIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvciwgQ29sb3JTCiAgICAgUVJlY3RGIG5vcm1hbGl6ZWRSZWN0ID0gcmVjdC5ub3JtYWxpemVk
KCk7CiAKICAgICBpZiAoaGFzU2hhZG93KCkpIHsKLSAgICAgICAgQ29udGV4dFNoYWRvdyogc2hh
ZG93ID0gY29udGV4dFNoYWRvdygpOwotICAgICAgICBpZiAoc2hhZG93LT5tdXN0VXNlQ29udGV4
dFNoYWRvdyh0aGlzKSkgewotICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBz
aGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgbm9ybWFsaXplZFJlY3QpOwotICAgICAgICAg
ICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKKyAgICAgICAgU2hhZG93Qmx1ciogc2hhZG93ID0gc2hh
ZG93Qmx1cigpOworICAgICAgICBpZiAobV9kYXRhLT5tdXN0VXNlU2hhZG93Qmx1cigpKSB7Cisg
ICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2lu
U2hhZG93TGF5ZXIodGhpcywgbm9ybWFsaXplZFJlY3QpOworICAgICAgICAgICAgaWYgKHNoYWRv
d0NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNo
YWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICAgICAgICAgIHNoYWRvd1Bh
aW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJj
ZSk7Ci0gICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFsaXplZFJl
Y3QsIHNoYWRvdy0+bV9jb2xvcik7CisgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+Zmls
bFJlY3Qobm9ybWFsaXplZFJlY3QsIG1fc3RhdGUuc2hhZG93Q29sb3IpOwogICAgICAgICAgICAg
ICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIodGhpcyk7CiAgICAgICAgICAgICB9Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgcC0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QudHJhbnNsYXRl
ZChzaGFkb3ctPm9mZnNldCgpKSwgc2hhZG93LT5tX2NvbG9yKTsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIFFDb2xvciBzaGFkb3dDb2xvciA9IG1fc3RhdGUuc2hhZG93Q29sb3I7Cisg
ICAgICAgICAgICBzaGFkb3dDb2xvci5zZXRBbHBoYUYoc2hhZG93Q29sb3IuYWxwaGFGKCkgKiBw
LT5icnVzaCgpLmNvbG9yKCkuYWxwaGFGKCkpOworICAgICAgICAgICAgcC0+ZmlsbFJlY3Qobm9y
bWFsaXplZFJlY3QudHJhbnNsYXRlZChRUG9pbnRGKG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRo
KCksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LmhlaWdodCgpKSksIHNoYWRvd0NvbG9yKTsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBtX2RhdGEtPnNv
bGlkQ29sb3IpOwpAQCAtNzQ4LDE4ICs3NjEsMjAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWYK
ICAgICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBib3R0b21M
ZWZ0LCBib3R0b21SaWdodCk7CiAgICAgUVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKICAgICBp
ZiAoaGFzU2hhZG93KCkpIHsKLSAgICAgICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY29udGV4
dFNoYWRvdygpOwotICAgICAgICBpZiAoc2hhZG93LT5tdXN0VXNlQ29udGV4dFNoYWRvdyh0aGlz
KSkgewotICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJlZ2lu
U2hhZG93TGF5ZXIodGhpcywgcmVjdCk7Ci0gICAgICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikg
eworICAgICAgICBTaGFkb3dCbHVyKiBzaGFkb3cgPSBzaGFkb3dCbHVyKCk7CisgICAgICAgIGlm
IChtX2RhdGEtPm11c3RVc2VTaGFkb3dCbHVyKCkpIHsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dCogc2hhZG93Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCByZWN0
KTsKKyAgICAgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgUVBh
aW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsK
ICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50
ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3VyY2UpOwotICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50
ZXItPmZpbGxQYXRoKHBhdGgucGxhdGZvcm1QYXRoKCksIFFDb2xvcihtX2RhdGEtPnNoYWRvdy5t
X2NvbG9yKSk7CisgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFBhdGgocGF0aC5w
bGF0Zm9ybVBhdGgoKSwgUUNvbG9yKG1fc3RhdGUuc2hhZG93Q29sb3IpKTsKICAgICAgICAgICAg
ICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKHRoaXMpOwogICAgICAgICAgICAgfQogICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgcC0+dHJhbnNsYXRlKG1fZGF0YS0+c2hhZG93Lm9mZnNl
dCgpKTsKLSAgICAgICAgICAgIHAtPmZpbGxQYXRoKHBhdGgucGxhdGZvcm1QYXRoKCksIFFDb2xv
cihtX2RhdGEtPnNoYWRvdy5tX2NvbG9yKSk7Ci0gICAgICAgICAgICBwLT50cmFuc2xhdGUoLW1f
ZGF0YS0+c2hhZG93Lm9mZnNldCgpKTsKKyAgICAgICAgICAgIGNvbnN0IFFQb2ludEYgc2hhZG93
T2Zmc2V0KG1fc3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCksIG1fc3RhdGUuc2hhZG93T2Zmc2V0
LmhlaWdodCgpKTsKKyAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShzaGFkb3dPZmZzZXQpOworICAg
ICAgICAgICAgcC0+ZmlsbFBhdGgocGF0aC5wbGF0Zm9ybVBhdGgoKSwgUUNvbG9yKG1fc3RhdGUu
c2hhZG93Q29sb3IpKTsKKyAgICAgICAgICAgIHAtPnRyYW5zbGF0ZSgtc2hhZG93T2Zmc2V0KTsK
ICAgICAgICAgfQogICAgIH0KICAgICBwLT5maWxsUGF0aChwYXRoLnBsYXRmb3JtUGF0aCgpLCBR
Q29sb3IoY29sb3IpKTsKQEAgLTc3MCw5ICs3ODUsOSBAQCBib29sIEdyYXBoaWNzQ29udGV4dDo6
aW5UcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0CiAgICAgcmV0dXJuIG1fZGF0YS0+bGF5ZXJDb3Vu
dDsKIH0KIAotQ29udGV4dFNoYWRvdyogR3JhcGhpY3NDb250ZXh0Ojpjb250ZXh0U2hhZG93KCkK
K1NoYWRvd0JsdXIqIEdyYXBoaWNzQ29udGV4dDo6c2hhZG93Qmx1cigpCiB7Ci0gICAgcmV0dXJu
ICZtX2RhdGEtPnNoYWRvdzsKKyAgICByZXR1cm4gbV9kYXRhLT5zaGFkb3c7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEludFJlY3QmIHJlY3QpCkBAIC03OTAsNiArODA1
LDE4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
IAogICAgIG1fZGF0YS0+cCgpLT5zZXRDbGlwUmVjdChyZWN0LCBRdDo6SW50ZXJzZWN0Q2xpcCk7
CiB9CitJbnRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0Cit7CisgICAg
UVBhaW50ZXIqIHAgPSBtX2RhdGEtPnAoKTsKKyAgICBRUmVjdEYgY2xpcFJlY3Q7CisKKyAgICBp
ZiAocC0+aGFzQ2xpcHBpbmcoKSkKKyAgICAgICAgY2xpcFJlY3QgPSBtX2RhdGEtPmNsaXBCb3Vu
ZGluZ1JlY3QoKTsKKyAgICBlbHNlCisgICAgICAgIGNsaXBSZWN0ID0gcC0+dHJhbnNmb3JtKCku
aW52ZXJ0ZWQoKS5tYXBSZWN0KHAtPndpbmRvdygpKTsKKworICAgIHJldHVybiBJbnRSZWN0KGNs
aXBSZWN0LngoKSwgY2xpcFJlY3QueSgpLCBjbGlwUmVjdC53aWR0aCgpLCBjbGlwUmVjdC5oZWln
aHQoKSk7Cit9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXRoJiBw
YXRoLCBXaW5kUnVsZSBjbGlwUnVsZSkKIHsKQEAgLTkyNiw3ICs5NTMsNyBAQCBGbG9hdFJlY3Qg
R3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKGNvbnN0IEZsb2F0UmVjdCYgZnJl
Y3QsIFJvdW5kaW5nTQogICAgIHJldHVybiBGbG9hdFJlY3Qocm91bmRlZE9yaWdpbiwgcm91bmRl
ZExvd2VyUmlnaHQgLSByb3VuZGVkT3JpZ2luKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgYmx1ciwgY29u
c3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQgYmx1ciwgY29uc3QgQ29s
b3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCiB7CiAgICAgLy8gUXQgZG9lc24ndCBz
dXBwb3J0IHNoYWRvd3MgbmF0aXZlbHksIHRoZXkgYXJlIGRyYXduIG1hbnVhbGx5IGluIHRoZSBk
cmF3KgogICAgIC8vIGZ1bmN0aW9ucwpAQCAtOTM1LDE2ICs5NjIsMTQgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwgZmxvYXQg
Ymx1ciwgY29uc3QKICAgICAgICAgLy8gTWVhbmluZyB0aGF0IHRoaXMgZ3JhcGhpY3MgY29udGV4
dCBpcyBhc3NvY2lhdGVkIHdpdGggYSBDYW52YXNSZW5kZXJpbmdDb250ZXh0CiAgICAgICAgIC8v
IFdlIGZsaXAgdGhlIGhlaWdodCBzaW5jZSBDRyBhbmQgSFRNTDUgQ2FudmFzIGhhdmUgb3Bwb3Np
dGUgWSBheGlzCiAgICAgICAgIG1fc3RhdGUuc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHNpemUu
d2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpOwotICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRl
eHRTaGFkb3coY29sb3IsIGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdo
dCgpKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29udGV4dFNoYWRv
dyhjb2xvciwgYmx1ciwgRmxvYXRTaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSkpOwor
ICAgIH0KIAotICAgIG1fZGF0YS0+c2hhZG93LnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKG1f
c3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOworICAgIG1fZGF0YS0+c2hhZG93LT5zZXRT
aGFkb3dWYWx1ZXMoRmxvYXRTaXplKG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dC
bHVyKSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQsIGNvbG9yLCBjb2xvclNwYWNlLCBtX3N0YXRlLnNo
YWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFy
UGxhdGZvcm1TaGFkb3coKQogewotICAgIG1fZGF0YS0+c2hhZG93LmNsZWFyKCk7CisgICAgbV9k
YXRhLT5zaGFkb3ctPmNsZWFyKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpwdXNoVHJh
bnNwYXJlbmN5TGF5ZXJJbnRlcm5hbChjb25zdCBRUmVjdCAmcmVjdCwgcXJlYWwgb3BhY2l0eSwg
UVBpeG1hcCYgYWxwaGFNYXNrKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9JbWFnZVF0LmNwcAppbmRleCAwYzhjZTllLi40MWZmOGE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9JbWFnZVF0LmNwcApAQCAtMzQsMTEgKzM0LDEx
IEBACiAKICNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgotI2luY2x1ZGUgIkNvbnRleHRTaGFkb3cuaCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgi
CiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCiAj
aW5jbHVkZSAiU3RpbGxJbWFnZVF0LmgiCiAjaW5jbHVkZSAicXdlYnNldHRpbmdzLmgiCiAKQEAg
LTIyNCwxMSArMjI0LDExIEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0
KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwKICAgICBDb21wb3NpdGVPcGVyYXRvciBwcmV2
aW91c09wZXJhdG9yID0gY3R4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCk7CiAgICAgY3R4dC0+c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKCFpbWFnZS0+aGFzQWxwaGEoKSAmJiBvcCA9PSBDb21wb3NpdGVT
b3VyY2VPdmVyID8gQ29tcG9zaXRlQ29weSA6IG9wKTsKIAotICAgIENvbnRleHRTaGFkb3cqIHNo
YWRvdyA9IGN0eHQtPmNvbnRleHRTaGFkb3coKTsKLSAgICBpZiAoc2hhZG93LT5tX3R5cGUgIT0g
Q29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpIHsKLSAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50
ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4dCwgbm9ybWFsaXplZERzdCk7Ci0gICAg
ICAgIGlmIChzaGFkb3dQYWludGVyKSB7Ci0gICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRP
cGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPihzaGFkb3ctPm1fY29sb3IuYWxwaGEoKSkgLyAyNTUp
OworICAgIGlmIChjdHh0LT5oYXNTaGFkb3coKSkgeworICAgICAgICBTaGFkb3dCbHVyKiBzaGFk
b3cgPSBjdHh0LT5zaGFkb3dCbHVyKCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93
Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHh0LCBub3JtYWxpemVkRHN0KTsK
KyAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgIFFQYWludGVyKiBzaGFk
b3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAg
ICBzaGFkb3dQYWludGVyLT5kcmF3UGl4bWFwKG5vcm1hbGl6ZWREc3QsICppbWFnZSwgbm9ybWFs
aXplZFNyYyk7CiAgICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKGN0eHQpOwogICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9T
dGlsbEltYWdlUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3Rp
bGxJbWFnZVF0LmNwcAppbmRleCAzYjA4OTk1Li5jYjJhNDQyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAKQEAgLTI4LDkg
KzI4LDkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdGlsbEltYWdlUXQuaCIK
IAotI2luY2x1ZGUgIkNvbnRleHRTaGFkb3cuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgogCiAjaW5j
bHVkZSA8UVBhaW50ZXI+CiAKQEAgLTc0LDExICs3NCwxMSBAQCB2b2lkIFN0aWxsSW1hZ2U6OmRy
YXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwKICAgICBDb21w
b3NpdGVPcGVyYXRvciBwcmV2aW91c09wZXJhdG9yID0gY3R4dC0+Y29tcG9zaXRlT3BlcmF0aW9u
KCk7CiAgICAgY3R4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsKIAotICAgIENvbnRleHRT
aGFkb3cqIHNoYWRvdyA9IGN0eHQtPmNvbnRleHRTaGFkb3coKTsKLSAgICBpZiAoc2hhZG93LT5t
X3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpIHsKLSAgICAgICAgUVBhaW50ZXIqIHNo
YWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4dCwgbm9ybWFsaXplZERz
dCk7Ci0gICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7Ci0gICAgICAgICAgICBzaGFkb3dQYWlu
dGVyLT5zZXRPcGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPihzaGFkb3ctPm1fY29sb3IuYWxwaGEo
KSkgLyAyNTUpOworICAgIGlmIChjdHh0LT5oYXNTaGFkb3coKSkgeworICAgICAgICBTaGFkb3dC
bHVyKiBzaGFkb3cgPSBjdHh0LT5zaGFkb3dCbHVyKCk7CisgICAgICAgIEdyYXBoaWNzQ29udGV4
dCogc2hhZG93Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHh0LCBub3JtYWxp
emVkRHN0KTsKKyAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgIFFQYWlu
dGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAg
ICAgICAgICAgICBzaGFkb3dQYWludGVyLT5kcmF3UGl4bWFwKG5vcm1hbGl6ZWREc3QsICptX3Bp
eG1hcCwgbm9ybWFsaXplZFNyYyk7CiAgICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVy
KGN0eHQpOwogICAgICAgICB9Ci0tIAoxLjcuNC4xCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98949</attachid>
            <date>2011-06-28 11:23:40 -0700</date>
            <delta_ts>2011-07-05 12:23:16 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>0001-Qt-Add-ShadowBlur-support.patch</filename>
            <type>text/plain</type>
            <size>46386</size>
            <attacher name="Igor Trindade Oliveira">igor.oliveira</attacher>
            
              <data encoding="base64">RnJvbSA0NDljMDU5NDMzMzE1NTU4MWM2NTFkYWJhZWMyOTI5NjFhYTQ3ZTA0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBJZ29yIE9saXZlaXJhIDxpZ29yLm9saXZlaXJhQG9wZW5ib3Nz
YS5vcmc+CkRhdGU6IFN1biwgMjYgSnVuIDIwMTEgMTA6MTk6MzYgLTA0MDAKU3ViamVjdDogW1BB
VENIXSBbUXRdIEFkZCBTaGFkb3dCbHVyIHN1cHBvcnQKCi0tLQogU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDUwICsrKysrKwogU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5wcm8gICAgICAgICAgICAgICAgICAgICAgICAgfCAgICA1ICstCiAuLi4v
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwICB8ICAgIDIgKy0K
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIHwgICAg
NyArLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAgICAg
fCAgIDY3ICsrKysrKysrLQogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93
Qmx1ci5oICAgICAgfCAgIDIyICsrLQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRT
aGFkb3dRdC5jcHAgICAgICAgfCAgMTY4IC0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwICAgICB8ICAgODMgKysrKysrLS0t
LS0KIC4uLi9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAgICAgIHwg
IDE1NSArKysrKysrKysrKy0tLS0tLS0tCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9JbWFnZVF0LmNwcCAgICB8ICAgMTIgKy0KIC4uLi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAgIHwgICAxMiArLQogMTEgZmlsZXMgY2hhbmdlZCwgMjg5
IGluc2VydGlvbnMoKyksIDI5NCBkZWxldGlvbnMoLSkKIGRlbGV0ZSBtb2RlIDEwMDY0NCBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwCgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCmluZGV4IGM5NGJjNWEuLjM2OTRkNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAor
MjAxMS0wNi0yOCAgSWdvciBPbGl2ZWlyYSAgPGlnb3Iub2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEFk
ZCBTaGFkb3dCbHVyIHN1cHBvcnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTYyOTk3CisKKyAgICAgICAgVXNlIFNoYWRvd0JsdXIgaW5zdGVhZCBvZiBD
b250ZXh0U2hhZG93IHRvIGhhbmRsZSBjYW52YXMgYW5kIGNzcyBzaGFkb3dzLiBTaGFkb3dCbHVy
IGlzCisgICAgICAgIGEgbmV3ZXIgYW5kIHBsYXRmb3JtIGluZGVwZW5kZW50IHNoYWRvdyBpbXBs
ZW1lbnRhdGlvbi4KKyAgICAgICAgUXQgUVBhaW50ZXIgZG9lcyBub3QgaGF2ZSBzdXBwb3J0IGZv
ciBzaGFkb3dzIHNvIGlzIG5lY2Vzc2FyeSB0byBjcmVhdGUgYSBsYXllciBzdXBwb3J0CisgICAg
ICAgIHRvIGRyYXcgY29tcGxleCBzaGFwZXMgYW5kIGZvbnRzLiBUaGUgYmVnaW5TaGFkb3dMYXll
ciBjcmVhdGVzIGEgdGVtcG9yYXJ5IHNoYWRvdyBidWZmZXIKKyAgICAgICAgd2hlcmUgdGhlIGNh
bnZhcyBjYW4gZHJhdyBvbnRvIGFuZCBlbmRTaGFkb3dMYXllciBhcHBsaWVzIHRoZSBibHVyIGZp
bHRlciwgY29sb3JzIHRoZQorICAgICAgICBzaGFkb3cgYnVmZmVyIGFuZCBkcmF3IHRoZSBmaW5h
bCBzaGFkb3cgdG8gdGhlIGdyYXBoaWNzIGNvbnRleHQuCisKKyAgICAgICAgKiBXZWJDb3JlLnBy
bzoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93
Qmx1cjo6U2hhZG93Qmx1cik6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpzZXRTaGFk
b3dWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6dXBkYXRlU2hhZG93Qmx1
clZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjpjbGVhcik6CisgICAgICAg
IChXZWJDb3JlOjpTaGFkb3dCbHVyOjpibHVyQW5kQ29sb3JTaGFkb3dCdWZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6YmVnaW5TaGFkb3dMYXllcik6CisgICAgICAgIChXZWJD
b3JlOjpTaGFkb3dCbHVyOjplbmRTaGFkb3dMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvU2hhZG93Qmx1ci5oOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93Qmx1cjo6dHlwZSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvd1F0LmNwcDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6ZHJhd1RleHRDb21tb24pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJh
d0dseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0
UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRl
OjptdXN0VXNlU2hhZG93Qmx1cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6On5HcmFwaGljc0NvbnRl
eHRQbGF0Zm9ybVByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
YXZlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJl
c3RvcmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRo
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzaGFkb3dCbHVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Y2xpcEJvdW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtU2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6Y2xlYXJQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvSW1hZ2VRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlN0aWxsSW1hZ2U6OmRyYXcpOgorCiAyMDExLTA2LTI1ICBEaW1pdHJpIEds
YXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRh
bSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggYWUxZTY4MC4uYjhkY2NjYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5w
cm8KQEAgLTk4MCw3ICs5ODAsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250RmFtaWx5LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgXAotICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbnRleHRTaGFkb3cuY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVy
LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludDNELmNwcCBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvRmxvYXRQb2ludC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zs
b2F0UXVhZC5jcHAgXApAQCAtMTk0Miw3ICsxOTQyLDcgQEAgSEVBREVSUyArPSBcCiAgICAgcGxh
dGZvcm0vbW9jay9TcGVlY2hJbnB1dENsaWVudE1vY2suaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvQml0bWFwSW1hZ2UuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaCBcCi0gICAg
cGxhdGZvcm0vZ3JhcGhpY3MvQ29udGV4dFNoYWRvdy5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9TaGFkb3dCbHVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5o
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguaCBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbXBvbmVudFRyYW5zZmVyLmggXApAQCAtMjUy
MSw3ICsyNTIxLDYgQEAgU09VUkNFUyArPSBcCiAgICAgcGFnZS9xdC9GcmFtZVF0LmNwcCBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvVHJhbnNmb3JtYXRpb25NYXRyaXhRdC5jcHAgXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbG9yUXQuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Db250ZXh0U2hhZG93UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9GbG9hdFBvaW50UXQuY3BwIFwKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmlu
ZGV4IDNiNzdiOWYuLmYzZjk5ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApAQCAtNTg1LDcgKzU4NSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciogYnVmZmVyLCBj
b25zdCBGbG9hdFJlY3QmIHJlCiAgICAgYnVmZmVyLT5jbGlwKHRoaXMsIHJlY3QpOwogfQogCi0j
aWYgIVVTRShDRykKKyNpZiAhVVNFKENHKSAmJiAhUExBVEZPUk0oUVQpCiBJbnRSZWN0IEdyYXBo
aWNzQ29udGV4dDo6Y2xpcEJvdW5kcygpIGNvbnN0CiB7CiAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCmluZGV4IDQ5ZGU0MWYuLmVlMGFlNzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC01NCw2ICs1NCw3IEBAIHR5
cGVkZWYgY2xhc3MgV2ViQ29yZTo6U3VyZmFjZU9wZW5WRyBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4
dDsKICNpbmNsdWRlIDxRUGFpbnRlcj4KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbnRl
eHRTaGFkb3c7CitjbGFzcyBTaGFkb3dCbHVyOwogfQogdHlwZWRlZiBRUGFpbnRlciBQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDsKICNlbGlmIFBMQVRGT1JNKFdYKQpAQCAtNDg1LDEwICs0ODYsMTQg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHRha2VPd25lcnNoaXBPZlBsYXRm
b3JtQ29udGV4dCgpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShRVCkgfHwgVVNFKENBSVJPKQor
I2lmIFVTRShDQUlSTykKICAgICAgICAgQ29udGV4dFNoYWRvdyogY29udGV4dFNoYWRvdygpOwog
I2VuZGlmCiAKKyNpZiBQTEFURk9STShRVCkKKyAgICAgICAgU2hhZG93Qmx1ciogc2hhZG93Qmx1
cigpOworI2VuZGlmCisKICNpZiBVU0UoQ0FJUk8pCiAgICAgICAgIEdyYXBoaWNzQ29udGV4dChj
YWlyb190Kik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NoYWRvd0JsdXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2hhZG93Qmx1ci5jcHAKaW5kZXggMjVmYzlhYS4uZmE3MzVhYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTE3NiwxMSArMTc2LDM0
IEBAIFNoYWRvd0JsdXI6OlNoYWRvd0JsdXIoY29uc3QgRmxvYXRTaXplJiByYWRpdXMsIGNvbnN0
IEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25zdCBDCiAgICAgLCBtX2xheWVySW1hZ2UoMCkKICAgICAs
IG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoZmFsc2UpCiB7CisgICAgdXBkYXRlU2hhZG93Qmx1
clZhbHVlcygpOworfQorCitTaGFkb3dCbHVyOjpTaGFkb3dCbHVyKCkKKyAgICA6IG1fdHlwZShO
b1NoYWRvdykKKyAgICAsIG1fYmx1clJhZGl1cygwLCAwKQorICAgICwgbV9zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcyhmYWxzZSkKK3sKK30KKwordm9pZCBTaGFkb3dCbHVyOjpzZXRTaGFkb3dWYWx1
ZXMoY29uc3QgRmxvYXRTaXplJiByYWRpdXMsIGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25z
dCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgYm9vbCBpZ25vcmVUcmFuc2Zv
cm1zKQoreworICAgIG1fYmx1clJhZGl1cyA9IHJhZGl1czsKKyAgICBtX29mZnNldCA9IG9mZnNl
dDsKKyAgICBtX2NvbG9yID0gY29sb3I7CisgICAgbV9jb2xvclNwYWNlID0gY29sb3JTcGFjZTsK
KyAgICBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gaWdub3JlVHJhbnNmb3JtczsKKworICAg
IHVwZGF0ZVNoYWRvd0JsdXJWYWx1ZXMoKTsKK30KKwordm9pZCBTaGFkb3dCbHVyOjp1cGRhdGVT
aGFkb3dCbHVyVmFsdWVzKCkKK3sKICAgICAvLyBMaW1pdCBibHVyIHJhZGl1cyB0byAxMjggdG8g
YXZvaWQgbG90cyBvZiB2ZXJ5IGV4cGVuc2l2ZSBibHVycmluZy4KICAgICBtX2JsdXJSYWRpdXMg
PSBtX2JsdXJSYWRpdXMuc2hydW5rVG8oRmxvYXRTaXplKDEyOCwgMTI4KSk7CiAKICAgICAvLyBU
aGUgdHlwZSBvZiBzaGFkb3cgaXMgZGVjaWRlZCBieSB0aGUgYmx1ciByYWRpdXMsIHNoYWRvdyBv
ZmZzZXQsIGFuZCBzaGFkb3cgY29sb3IuCi0gICAgaWYgKCFtX2NvbG9yLmlzVmFsaWQoKSB8fCAh
Y29sb3IuYWxwaGEoKSkgeworICAgIGlmICghbV9jb2xvci5pc1ZhbGlkKCkgfHwgIW1fY29sb3Iu
YWxwaGEoKSkgewogICAgICAgICAvLyBDYW4ndCBwYWludCB0aGUgc2hhZG93IHdpdGggaW52YWxp
ZCBvciBpbnZpc2libGUgY29sb3IuCiAgICAgICAgIG1fdHlwZSA9IE5vU2hhZG93OwogICAgIH0g
ZWxzZSBpZiAobV9ibHVyUmFkaXVzLndpZHRoKCkgPiAwIHx8IG1fYmx1clJhZGl1cy5oZWlnaHQo
KSA+IDApIHsKQEAgLTIzNyw2ICsyNjAsMTQgQEAgc3RhdGljIHZvaWQgY2FsY3VsYXRlTG9iZXMo
aW50IGxvYmVzW11bMl0sIGZsb2F0IGJsdXJSYWRpdXMsIGJvb2wgc2hhZG93c0lnbm9yZVQKICAg
ICB9CiB9CiAKK3ZvaWQgU2hhZG93Qmx1cjo6Y2xlYXIoKQoreworICAgIG1fdHlwZSA9IE5vU2hh
ZG93OworICAgIG1fY29sb3IgPSBDb2xvcigpOworICAgIG1fYmx1clJhZGl1cyA9IEZsb2F0U2l6
ZSgpOworICAgIG1fb2Zmc2V0ID0gRmxvYXRTaXplKCk7Cit9CisKIHZvaWQgU2hhZG93Qmx1cjo6
Ymx1ckxheWVySW1hZ2UodW5zaWduZWQgY2hhciogaW1hZ2VEYXRhLCBjb25zdCBJbnRTaXplJiBz
aXplLCBpbnQgcm93U3RyaWRlKQogewogICAgIGNvbnN0IGludCBjaGFubmVsc1s0XSA9IHsgMywg
MCwgMSwgMyB9OwpAQCAtODI4LDkgKzg1OSw0MyBAQCB2b2lkIFNoYWRvd0JsdXI6OmJsdXJBbmRD
b2xvclNoYWRvd0J1ZmZlcihjb25zdCBJbnRTaXplJiB0ZW1wbGF0ZVNpemUpCiAKICAgICAvLyBN
YXNrIHRoZSBpbWFnZSB3aXRoIHRoZSBzaGFkb3cgY29sb3IuCiAgICAgR3JhcGhpY3NDb250ZXh0
KiBzaGFkb3dDb250ZXh0ID0gbV9sYXllckltYWdlLT5jb250ZXh0KCk7CisgICAgR3JhcGhpY3ND
b250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpzaGFkb3dDb250ZXh0KTsKICAgICBzaGFkb3dD
b250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlSW4pOwogICAgIHNo
YWRvd0NvbnRleHQtPnNldEZpbGxDb2xvcihtX2NvbG9yLCBtX2NvbG9yU3BhY2UpOwogICAgIHNo
YWRvd0NvbnRleHQtPmZpbGxSZWN0KEZsb2F0UmVjdCgwLCAwLCB0ZW1wbGF0ZVNpemUud2lkdGgo
KSwgdGVtcGxhdGVTaXplLmhlaWdodCgpKSk7CiB9CiAKK0dyYXBoaWNzQ29udGV4dCogU2hhZG93
Qmx1cjo6YmVnaW5TaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQgKmNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgbGF5ZXJBcmVhKQoreworICAgIGFkanVzdEJsdXJSYWRpdXMoY29udGV4dCk7CisK
KyAgICBJbnRSZWN0IGxheWVyUmVjdCA9IGNhbGN1bGF0ZUxheWVyQm91bmRpbmdSZWN0KGNvbnRl
eHQsIGxheWVyQXJlYSwgY29udGV4dC0+Y2xpcEJvdW5kcygpKTsKKworICAgIGlmIChsYXllclJl
Y3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG1fbGF5ZXJJbWFnZSA9IFNj
cmF0Y2hCdWZmZXI6OnNoYXJlZCgpLmdldFNjcmF0Y2hCdWZmZXIobGF5ZXJSZWN0LnNpemUoKSk7
CisKKyAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBtX2xheWVySW1hZ2UtPmNv
bnRleHQoKTsKKyAgICBzaGFkb3dDb250ZXh0LT5zYXZlKCk7CisgICAgc2hhZG93Q29udGV4dC0+
Y2xlYXJSZWN0KEZsb2F0UmVjdCgwLCAwLCBtX2xheWVyU2l6ZS53aWR0aCgpLCBtX2xheWVyU2l6
ZS5oZWlnaHQoKSkpOworCisgICAgc2hhZG93Q29udGV4dC0+dHJhbnNsYXRlKG1fbGF5ZXJDb250
ZXh0VHJhbnNsYXRpb24pOworICAgIHJldHVybiBzaGFkb3dDb250ZXh0OworfQorCit2b2lkIFNo
YWRvd0JsdXI6OmVuZFNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK3sKKyAg
ICBtX2xheWVySW1hZ2UtPmNvbnRleHQoKS0+cmVzdG9yZSgpOworCisgICAgYmx1ckFuZENvbG9y
U2hhZG93QnVmZmVyKGV4cGFuZGVkSW50U2l6ZShtX2xheWVyU2l6ZSkpOworICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlKCpjb250ZXh0KTsKKworICAgIGNvbnRleHQtPmNs
ZWFyU2hhZG93KCk7CisgICAgY29udGV4dC0+ZHJhd0ltYWdlQnVmZmVyKG1fbGF5ZXJJbWFnZSwg
Q29sb3JTcGFjZURldmljZVJHQiwgcm91bmRlZEludFBvaW50KG1fbGF5ZXJPcmlnaW4pLCBJbnRS
ZWN0KDAsIDAsIG1fbGF5ZXJTaXplLndpZHRoKCksIG1fbGF5ZXJTaXplLmhlaWdodCgpKSwgY29u
dGV4dC0+Y29tcG9zaXRlT3BlcmF0aW9uKCkpOworCisgICAgbV9sYXllckltYWdlID0gMDsKKyAg
ICBTY3JhdGNoQnVmZmVyOjpzaGFyZWQoKS5zY2hlZHVsZVNjcmF0Y2hCdWZmZXJQdXJnZSgpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaGFkb3dCbHVyLmgKaW5kZXggMjAyZmYzZC4uOTllZWE1MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaApAQCAtNDQsMTcgKzQ0LDM0
IEBAIGNsYXNzIEltYWdlQnVmZmVyOwogY2xhc3MgU2hhZG93Qmx1ciB7CiAgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoU2hhZG93Qmx1cik7CiBwdWJsaWM6CisgICAgZW51bSBTaGFkb3dUeXBlIHsK
KyAgICAgICAgTm9TaGFkb3csCisgICAgICAgIFNvbGlkU2hhZG93LAorICAgICAgICBCbHVyU2hh
ZG93CisgICAgfTsKKwogICAgIFNoYWRvd0JsdXIoY29uc3QgRmxvYXRTaXplJiByYWRpdXMsIGNv
bnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOworICAgIFNo
YWRvd0JsdXIoKTsKKworICAgIHZvaWQgc2V0U2hhZG93VmFsdWVzKGNvbnN0IEZsb2F0U2l6ZSYs
IGNvbnN0IEZsb2F0U2l6ZSYgLCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UsIGJvb2wgaWdub3Jl
VHJhbnNmb3JtcyA9IGZhbHNlKTsKIAogICAgIHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9y
bXMoYm9vbCBpZ25vcmVUcmFuc2Zvcm1zKSB7IG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMgPSBp
Z25vcmVUcmFuc2Zvcm1zOyB9CiAgICAgYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIGNv
bnN0IHsgcmV0dXJuIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXM7IH0KIAorICAgIEdyYXBoaWNz
Q29udGV4dCogYmVnaW5TaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJl
Y3QmIGxheWVyQXJlYSk7CisgICAgdm9pZCBlbmRTaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQq
KTsKKwogICAgIHZvaWQgZHJhd1JlY3RTaGFkb3coR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgUm91bmRlZEludFJlY3Q6OlJhZGlpJik7CiAgICAgdm9pZCBkcmF3SW5z
ZXRTaGFkb3coR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgRmxvYXRS
ZWN0JiBob2xlUmVjdCwgY29uc3QgUm91bmRlZEludFJlY3Q6OlJhZGlpJiBob2xlUmFkaWkpOwog
CiAgICAgdm9pZCBibHVyTGF5ZXJJbWFnZSh1bnNpZ25lZCBjaGFyKiwgY29uc3QgSW50U2l6ZSYs
IGludCBzdHJpZGUpOwogCisgICAgdm9pZCBjbGVhcigpOworCisgICAgU2hhZG93VHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CiBwcml2YXRlOgorICAgIHZvaWQgdXBkYXRlU2hh
ZG93Qmx1clZhbHVlcygpOworCiAgICAgdm9pZCBkcmF3U2hhZG93QnVmZmVyKEdyYXBoaWNzQ29u
dGV4dCopOwogCiAgICAgdm9pZCBhZGp1c3RCbHVyUmFkaXVzKEdyYXBoaWNzQ29udGV4dCopOwpA
QCAtODAsMTEgKzk3LDYgQEAgcHJpdmF0ZToKICAgICAKICAgICBJbnRTaXplIGJsdXJyZWRFZGdl
U2l6ZSgpIGNvbnN0OwogICAgIAotICAgIGVudW0gU2hhZG93VHlwZSB7Ci0gICAgICAgIE5vU2hh
ZG93LAotICAgICAgICBTb2xpZFNoYWRvdywKLSAgICAgICAgQmx1clNoYWRvdwotICAgIH07CiAg
ICAgCiAgICAgU2hhZG93VHlwZSBtX3R5cGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3dRdC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA5ZWIzMWE3Li4wMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3dRdC5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBTZW5jaGEsIEluYy4KLSAq
Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJDb250ZXh0U2hhZG93LmgiCi0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIK
LSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlIDxRUGFpbnRlcj4KLSNpbmNs
dWRlIDxRVGltZXJFdmVudD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBDb250ZXh0U2hh
ZG93IG5lZWRzIGEgc2NyYXRjaCBpbWFnZSBhcyB0aGUgYnVmZmVyIGZvciB0aGUgYmx1ciBmaWx0
ZXIuCi0vLyBJbnN0ZWFkIG9mIGNyZWF0aW5nIGFuZCBkZXN0cm95aW5nIHRoZSBidWZmZXIgZm9y
IGV2ZXJ5IG9wZXJhdGlvbiwKLS8vIHdlIGNyZWF0ZSBhIGJ1ZmZlciB3aGljaCB3aWxsIGJlIGF1
dG9tYXRpY2FsbHkgcHVyZ2VkIHZpYSBhIHRpbWVyLgotCi1jbGFzcyBTaGFkb3dCdWZmZXI6IHB1
YmxpYyBRT2JqZWN0IHsKLXB1YmxpYzoKLSAgICBTaGFkb3dCdWZmZXIoUU9iamVjdCogcGFyZW50
ID0gMCk7Ci0KLSAgICBRSW1hZ2UqIHNjcmF0Y2hJbWFnZShjb25zdCBRU2l6ZSYgc2l6ZSk7Ci0K
LSAgICB2b2lkIHNjaGVkdWxlUHVyZ2UoKTsKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgdGltZXJF
dmVudChRVGltZXJFdmVudCogZXZlbnQpOwotCi1wcml2YXRlOgotICAgIFFJbWFnZSBpbWFnZTsK
LSAgICBpbnQgdGltZXJJZDsKLX07Ci0KLVNoYWRvd0J1ZmZlcjo6U2hhZG93QnVmZmVyKFFPYmpl
Y3QqIHBhcmVudCkKLSAgICA6IFFPYmplY3QocGFyZW50KQotICAgICwgdGltZXJJZCgtMSkKLXsK
LX0KLQotUUltYWdlKiBTaGFkb3dCdWZmZXI6OnNjcmF0Y2hJbWFnZShjb25zdCBRU2l6ZSYgc2l6
ZSkKLXsKLSAgICBpbnQgd2lkdGggPSBzaXplLndpZHRoKCk7Ci0gICAgaW50IGhlaWdodCA9IHNp
emUuaGVpZ2h0KCk7Ci0KLSAgICAvLyBXZSBkbyBub3QgbmVlZCB0byByZWNyZWF0ZSB0aGUgYnVm
ZmVyIGlmIHRoZSBidWZmZXIgaXMgcmVhc29uYWJseQotICAgIC8vIGxhcmdlciB0aGFuIHRoZSBy
ZXF1ZXN0ZWQgc2l6ZS4gSG93ZXZlciwgaWYgdGhlIHJlcXVlc3RlZCBzaXplIGlzCi0gICAgLy8g
bXVjaCBzbWFsbGVyIHRoYW4gb3VyIGJ1ZmZlciwgcmVkdWNlIG91ciBidWZmZXIgc28gdGhhdCB3
ZSB3aWxsIG5vdAotICAgIC8vIGtlZXAgdG9vIG1hbnkgYWxsb2NhdGVkIHBpeGVscyBmb3IgdG9v
IGxvbmcuCi0gICAgaWYgKCFpbWFnZS5pc051bGwoKSAmJiAoaW1hZ2Uud2lkdGgoKSA+IHdpZHRo
KSAmJiAoaW1hZ2UuaGVpZ2h0KCkgPiBoZWlnaHQpKQotICAgICAgICBpZiAoKCgyICogd2lkdGgp
ID4gaW1hZ2Uud2lkdGgoKSkgJiYgKCgyICogaGVpZ2h0KSA+IGltYWdlLmhlaWdodCgpKSkgewot
ICAgICAgICAgICAgaW1hZ2UuZmlsbCgwKTsKLSAgICAgICAgICAgIHJldHVybiAmaW1hZ2U7Ci0g
ICAgICAgIH0KLQotICAgIC8vIFJvdW5kIHRvIHRoZSBuZWFyZXN0IDMyIHBpeGVscyBzbyB3ZSBk
byBub3QgZ3JvdyB0aGUgYnVmZmVyIGV2ZXJ5dGltZQotICAgIC8vIHRoZXJlIGlzIGxhcmdlciBy
ZXF1ZXN0IGJ5IDEgcGl4ZWwuCi0gICAgd2lkdGggPSAoMSArICh3aWR0aCA+PiA1KSkgPDwgNTsK
LSAgICBoZWlnaHQgPSAoMSArIChoZWlnaHQgPj4gNSkpIDw8IDU7Ci0KLSAgICBpbWFnZSA9IFFJ
bWFnZSh3aWR0aCwgaGVpZ2h0LCBRSW1hZ2U6OkZvcm1hdF9BUkdCMzJfUHJlbXVsdGlwbGllZCk7
Ci0gICAgaW1hZ2UuZmlsbCgwKTsKLSAgICByZXR1cm4gJmltYWdlOwotfQotCi12b2lkIFNoYWRv
d0J1ZmZlcjo6c2NoZWR1bGVQdXJnZSgpCi17Ci0gICAgc3RhdGljIGNvbnN0IGRvdWJsZSBCdWZm
ZXJQdXJnZURlbGF5ID0gMjsgLy8gc2Vjb25kcwotICAgIGlmICh0aW1lcklkID49IDApCi0gICAg
ICAgIGtpbGxUaW1lcih0aW1lcklkKTsKLSAgICB0aW1lcklkID0gc3RhcnRUaW1lcihCdWZmZXJQ
dXJnZURlbGF5ICogMTAwMCk7Ci19Ci0KLXZvaWQgU2hhZG93QnVmZmVyOjp0aW1lckV2ZW50KFFU
aW1lckV2ZW50KiBldmVudCkKLXsKLSAgICBpZiAoZXZlbnQtPnRpbWVySWQoKSA9PSB0aW1lcklk
KSB7Ci0gICAgICAgIGtpbGxUaW1lcih0aW1lcklkKTsKLSAgICAgICAgaW1hZ2UgPSBRSW1hZ2Uo
KTsKLSAgICB9Ci0gICAgUU9iamVjdDo6dGltZXJFdmVudChldmVudCk7Ci19Ci0KLVFfR0xPQkFM
X1NUQVRJQyhTaGFkb3dCdWZmZXIsIHNjcmF0Y2hTaGFkb3dCdWZmZXIpCi0KLVBsYXRmb3JtQ29u
dGV4dCBDb250ZXh0U2hhZG93OjpiZWdpblNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgRmxvYXRSZWN0JiBsYXllckFyZWEpCi17Ci0gICAgLy8gU2V0IG1fYmx1ckRp
c3RhbmNlLgotICAgIGFkanVzdEJsdXJEaXN0YW5jZShjb250ZXh0KTsKLQotICAgIFBsYXRmb3Jt
Q29udGV4dCBwID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICBRUmVjdCBjbGlw
UmVjdDsKLSAgICBpZiAocC0+aGFzQ2xpcHBpbmcoKSkKLSNpZiBRVF9WRVJTSU9OID49IFFUX1ZF
UlNJT05fQ0hFQ0soNCwgOCwgMCkKLSAgICAgICAgY2xpcFJlY3QgPSBwLT5jbGlwQm91bmRpbmdS
ZWN0KCkudG9BbGlnbmVkUmVjdCgpOwotI2Vsc2UKLSAgICAgICAgY2xpcFJlY3QgPSBwLT5jbGlw
UmVnaW9uKCkuYm91bmRpbmdSZWN0KCk7Ci0jZW5kaWYKLSAgICBlbHNlCi0gICAgICAgIGNsaXBS
ZWN0ID0gcC0+dHJhbnNmb3JtKCkuaW52ZXJ0ZWQoKS5tYXBSZWN0KHAtPndpbmRvdygpKTsKLQot
ICAgIC8vIFNldCBtX2xheWVyT3JpZ2luLCBtX2xheWVyQ29udGV4dFRyYW5zbGF0aW9uLCBtX3Nv
dXJjZVJlY3QuCi0gICAgSW50UmVjdCBjbGlwKGNsaXBSZWN0LngoKSwgY2xpcFJlY3QueSgpLCBj
bGlwUmVjdC53aWR0aCgpLCBjbGlwUmVjdC5oZWlnaHQoKSk7Ci0gICAgSW50UmVjdCBsYXllclJl
Y3QgPSBjYWxjdWxhdGVMYXllckJvdW5kaW5nUmVjdChjb250ZXh0LCBsYXllckFyZWEsIGNsaXAp
OwotCi0gICAgLy8gRG9uJ3QgcGFpbnQgaWYgd2UgYXJlIHRvdGFsbHkgb3V0c2lkZSB0aGUgY2xp
cCByZWdpb24uCi0gICAgaWYgKGxheWVyUmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiAw
OwotCi0gICAgU2hhZG93QnVmZmVyKiBzaGFkb3dCdWZmZXIgPSBzY3JhdGNoU2hhZG93QnVmZmVy
KCk7Ci0gICAgUUltYWdlKiBzaGFkb3dJbWFnZSA9IHNoYWRvd0J1ZmZlci0+c2NyYXRjaEltYWdl
KGxheWVyUmVjdC5zaXplKCkpOwotICAgIG1fbGF5ZXJJbWFnZSA9IFFJbWFnZSgqc2hhZG93SW1h
Z2UpOwotCi0gICAgbV9sYXllckNvbnRleHQgPSBuZXcgUVBhaW50ZXI7Ci0gICAgbV9sYXllckNv
bnRleHQtPmJlZ2luKCZtX2xheWVySW1hZ2UpOwotICAgIG1fbGF5ZXJDb250ZXh0LT5zZXRGb250
KHAtPmZvbnQoKSk7Ci0gICAgbV9sYXllckNvbnRleHQtPnRyYW5zbGF0ZShtX2xheWVyQ29udGV4
dFRyYW5zbGF0aW9uKTsKLSAgICByZXR1cm4gbV9sYXllckNvbnRleHQ7Ci19Ci0KLXZvaWQgQ29u
dGV4dFNoYWRvdzo6ZW5kU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQotewot
ICAgIG1fbGF5ZXJDb250ZXh0LT5lbmQoKTsKLSAgICBkZWxldGUgbV9sYXllckNvbnRleHQ7Ci0g
ICAgbV9sYXllckNvbnRleHQgPSAwOwotCi0gICAgaWYgKG1fdHlwZSA9PSBCbHVyU2hhZG93KSB7
Ci0gICAgICAgIGJsdXJMYXllckltYWdlKG1fbGF5ZXJJbWFnZS5iaXRzKCksIEludFNpemUobV9s
YXllckltYWdlLndpZHRoKCksIG1fbGF5ZXJJbWFnZS5oZWlnaHQoKSksCi0gICAgICAgICAgICAg
ICAgICAgICAgIG1fbGF5ZXJJbWFnZS5ieXRlc1BlckxpbmUoKSk7Ci0gICAgfQotCi0gICAgaWYg
KG1fdHlwZSAhPSBOb1NoYWRvdykgewotICAgICAgICAvLyAiQ29sb3JpemUiIHdpdGggdGhlIHJp
Z2h0IHNoYWRvdyBjb2xvci4KLSAgICAgICAgUVBhaW50ZXIgcCgmbV9sYXllckltYWdlKTsKLSAg
ICAgICAgcC5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0aW9uTW9kZV9Tb3Vy
Y2VJbik7Ci0gICAgICAgIHAuZmlsbFJlY3QobV9sYXllckltYWdlLnJlY3QoKSwgbV9jb2xvci5y
Z2IoKSk7Ci0gICAgICAgIHAuZW5kKCk7Ci0gICAgfQotCi0gICAgY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPmRyYXdJbWFnZShtX2xheWVyT3JpZ2luLCBtX2xheWVySW1hZ2UsIG1fc291cmNl
UmVjdCk7Ci0KLSAgICBzY3JhdGNoU2hhZG93QnVmZmVyKCktPnNjaGVkdWxlUHVyZ2UoKTsKLX0K
LQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9u
dFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAK
aW5kZXggYTVhMTZlMC4uYTIxMmVlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9Gb250UXQuY3BwCkBAIC0yMyw3ICsyMyw2IEBACiAjaW5jbHVkZSAiRm9udC5o
IgogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQ29udGV4dFNoYWRv
dy5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRGYWxsYmFj
a0xpc3QuaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKQEAgLTM0LDYgKzMzLDcgQEAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgog
I2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCiAjaW5jbHVkZSAi
VGV4dFJ1bi5oIgogCiAjaW5jbHVkZSA8UUJydXNoPgpAQCAtMTQyLDQwICsxNDIsNDMgQEAgc3Rh
dGljIHZvaWQgZHJhd1RleHRDb21tb24oR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgRmxvYXQKICAgICAgICAgICAgIFFSZWN0RiBib3VuZGluZ1JlY3QocG9p
bnQueCgpICsgeDEsIHBvaW50LnkoKSAtIGFzY2VudCwgeDIgLSB4MSwgZm0uaGVpZ2h0KCkpOwog
ICAgICAgICAgICAgUVJlY3RGIGNsaXAgPSBib3VuZGluZ1JlY3Q7CiAKLSAgICAgICAgICAgIENv
bnRleHRTaGFkb3cqIGN0eFNoYWRvdyA9IGN0eC0+Y29udGV4dFNoYWRvdygpOwotCi0gICAgICAg
ICAgICBpZiAoY3R4U2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFkb3cpIHsK
KyAgICAgICAgICAgIFNoYWRvd0JsdXIqIGN0eFNoYWRvdyA9IGN0eC0+c2hhZG93Qmx1cigpOwor
ICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+dHlwZSgpICE9IFNoYWRvd0JsdXI6Ok5vU2hhZG93
KSB7CisgICAgICAgICAgICAgICAgY29uc3QgUVBvaW50RiBzaGFkb3dPZmZzZXQoY3R4LT5zdGF0
ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpLCBjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdo
dCgpKTsKICAgICAgICAgICAgICAgICBxcmVhbCBkeDEgPSAwLCBkeDIgPSAwLCBkeTEgPSAwLCBk
eTIgPSAwOwotICAgICAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPm9mZnNldCgpLngoKSA+IDAp
Ci0gICAgICAgICAgICAgICAgICAgIGR4MiA9IGN0eFNoYWRvdy0+b2Zmc2V0KCkueCgpOworICAg
ICAgICAgICAgICAgIGlmIChzaGFkb3dPZmZzZXQueCgpID4gMCkKKyAgICAgICAgICAgICAgICAg
ICAgZHgyID0gc2hhZG93T2Zmc2V0LngoKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgICAgIGR4MSA9IC1jdHhTaGFkb3ctPm9mZnNldCgpLngoKTsKLSAgICAgICAgICAg
ICAgICBpZiAoY3R4U2hhZG93LT5vZmZzZXQoKS55KCkgPiAwKQotICAgICAgICAgICAgICAgICAg
ICBkeTIgPSBjdHhTaGFkb3ctPm9mZnNldCgpLnkoKTsKKyAgICAgICAgICAgICAgICAgICAgZHgx
ID0gLXNoYWRvd09mZnNldC54KCk7CisgICAgICAgICAgICAgICAgaWYgKHNoYWRvd09mZnNldC55
KCkgPiAwKQorICAgICAgICAgICAgICAgICAgICBkeTIgPSBzaGFkb3dPZmZzZXQueSgpOwogICAg
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgZHkxID0gLWN0eFNoYWRvdy0+
b2Zmc2V0KCkueSgpOworICAgICAgICAgICAgICAgICAgICBkeTEgPSAtc2hhZG93T2Zmc2V0Lnko
KTsKICAgICAgICAgICAgICAgICAvLyBleHBhbmQgdGhlIGNsaXAgcmVjdCB0byBpbmNsdWRlIHRo
ZSB0ZXh0IHNoYWRvdyBhcyB3ZWxsCisgICAgICAgICAgICAgICAgY29uc3QgZmxvYXQgYmx1ckRp
c3RhbmNlID0gY3R4LT5zdGF0ZSgpLnNoYWRvd0JsdXI7CiAgICAgICAgICAgICAgICAgY2xpcC5h
ZGp1c3QoZHgxLCBkeDIsIGR5MSwgZHkyKTsKLSAgICAgICAgICAgICAgICBjbGlwLmFkanVzdCgt
Y3R4U2hhZG93LT5tX2JsdXJEaXN0YW5jZSwgLWN0eFNoYWRvdy0+bV9ibHVyRGlzdGFuY2UsIGN0
eFNoYWRvdy0+bV9ibHVyRGlzdGFuY2UsIGN0eFNoYWRvdy0+bV9ibHVyRGlzdGFuY2UpOworICAg
ICAgICAgICAgICAgIGNsaXAuYWRqdXN0KC1ibHVyRGlzdGFuY2UsIC1ibHVyRGlzdGFuY2UsIGJs
dXJEaXN0YW5jZSwgYmx1ckRpc3RhbmNlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHAt
PnNhdmUoKTsKICAgICAgICAgICAgIHAtPnNldENsaXBSZWN0KGNsaXAudG9SZWN0KCksIFF0OjpJ
bnRlcnNlY3RDbGlwKTsKICAgICAgICAgICAgIHB0LnNldFkocHQueSgpIC0gYXNjZW50KTsKIAot
ICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hh
ZG93KSB7Ci0gICAgICAgICAgICAgICAgQ29udGV4dFNoYWRvdyogY3R4U2hhZG93ID0gY3R4LT5j
b250ZXh0U2hhZG93KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFjdHhTaGFkb3ctPm11c3RVc2VD
b250ZXh0U2hhZG93KGN0eCkpIHsKKyAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPnR5cGUoKSAh
PSBTaGFkb3dCbHVyOjpOb1NoYWRvdykgeworICAgICAgICAgICAgICAgIFNoYWRvd0JsdXIqIGN0
eFNoYWRvdyA9IGN0eC0+c2hhZG93Qmx1cigpOworICAgICAgICAgICAgICAgIGlmIChjdHhTaGFk
b3ctPnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpCbHVyU2hhZG93CisgICAgICAgICAgICAgICAgICAg
ICYmICghY3R4U2hhZG93LT5zaGFkb3dzSWdub3JlVHJhbnNmb3JtcygpIHx8IGN0eC0+Z2V0Q1RN
KCkuaXNJZGVudGl0eSgpKSkgewogICAgICAgICAgICAgICAgICAgICBwLT5zYXZlKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHAtPnNldFBlbihjdHhTaGFkb3ctPm1fY29sb3IpOwotICAgICAgICAg
ICAgICAgICAgICBwLT50cmFuc2xhdGUoY3R4U2hhZG93LT5vZmZzZXQoKSk7CisgICAgICAgICAg
ICAgICAgICAgIHAtPnNldFBlbihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpOworICAgICAgICAg
ICAgICAgICAgICBwLT50cmFuc2xhdGUoUVBvaW50RihjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0
LndpZHRoKCksIGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpKTsKICAgICAgICAg
ICAgICAgICAgICAgbGluZS5kcmF3KHAsIHB0KTsKICAgICAgICAgICAgICAgICAgICAgcC0+cmVz
dG9yZSgpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFFQ
YWludGVyKiBzaGFkb3dQYWludGVyID0gY3R4U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eCwg
Ym91bmRpbmdSZWN0KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsK
KyAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gY3R4
U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eCwgYm91bmRpbmdSZWN0KTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFFQ
YWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQgYW55
d2F5LCB3ZSBkb24ndCBjYXJlIGFib3V0IHJlbmRlciBoaW50cy4KICAgICAgICAgICAgICAgICAg
ICAgICAgIHNoYWRvd1BhaW50ZXItPnNldEZvbnQocC0+Zm9udCgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldFBlbihjdHhTaGFkb3ctPm1fY29sb3IpOworICAg
ICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0UGVuKGN0eC0+c3RhdGUoKS5z
aGFkb3dDb2xvcik7CiAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lLmRyYXcoc2hhZG93UGFp
bnRlciwgcHQpOwogICAgICAgICAgICAgICAgICAgICAgICAgY3R4U2hhZG93LT5lbmRTaGFkb3dM
YXllcihjdHgpOwogICAgICAgICAgICAgICAgICAgICB9CkBAIC0yMDEsNDAgKzIwNCw0MyBAQCBz
dGF0aWMgdm9pZCBkcmF3VGV4dENvbW1vbihHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBGbG9hdAogICAgIGlmIChjdHgtPnRleHREcmF3aW5nTW9kZSgpICYg
VGV4dE1vZGVTdHJva2UpCiAgICAgICAgIHRleHRTdHJva2VQYXRoLmFkZFRleHQocHQsIGZvbnQs
IHN0cmluZyk7CiAKLSAgICBDb250ZXh0U2hhZG93KiBjdHhTaGFkb3cgPSBjdHgtPmNvbnRleHRT
aGFkb3coKTsKLSAgICBpZiAoY3R4U2hhZG93LT5tX3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Tm9T
aGFkb3cpIHsKKyAgICBTaGFkb3dCbHVyKiBjdHhTaGFkb3cgPSBjdHgtPnNoYWRvd0JsdXIoKTsK
KyAgICBpZiAoY3R4LT5oYXNTaGFkb3coKSAmJiBjdHhTaGFkb3ctPnR5cGUoKSAhPSBTaGFkb3dC
bHVyOjpOb1NoYWRvdykgewogICAgICAgICBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRl
eHRNb2RlRmlsbCkgewotICAgICAgICAgICAgaWYgKGN0eFNoYWRvdy0+bV90eXBlICE9IENvbnRl
eHRTaGFkb3c6OkJsdXJTaGFkb3cpIHsKKyAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPnR5cGUo
KSAhPSBTaGFkb3dCbHVyOjpCbHVyU2hhZG93KSB7CiAgICAgICAgICAgICAgICAgcC0+c2F2ZSgp
OwotICAgICAgICAgICAgICAgIHAtPnNldFBlbihjdHhTaGFkb3ctPm1fY29sb3IpOwotICAgICAg
ICAgICAgICAgIHAtPnRyYW5zbGF0ZShjdHhTaGFkb3ctPm9mZnNldCgpKTsKKyAgICAgICAgICAg
ICAgICBwLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgICAg
ICBwLT50cmFuc2xhdGUoUVBvaW50RihjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LndpZHRoKCks
IGN0eC0+c3RhdGUoKS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpKTsKICAgICAgICAgICAgICAgICBw
LT5kcmF3VGV4dChwdCwgc3RyaW5nLCBmbGFncywgcnVuLmV4cGFuc2lvbigpKTsKICAgICAgICAg
ICAgICAgICBwLT5yZXN0b3JlKCk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIFFGb250TWV0cmljcyBmbShmb250KTsKICAgICAgICAgICAgICAgICBRUmVjdEYgYm91bmRp
bmdSZWN0KHB0LngoKSwgcG9pbnQueSgpIC0gZm0uYXNjZW50KCksIGZtLndpZHRoKHN0cmluZywg
LTEsIGZsYWdzKSwgZm0uaGVpZ2h0KCkpOwotICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFk
b3dQYWludGVyID0gY3R4U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eCwgYm91bmRpbmdSZWN0
KTsKLSAgICAgICAgICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgeworICAgICAgICAgICAgICAg
IEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IGN0eFNoYWRvdy0+YmVnaW5TaGFkb3dM
YXllcihjdHgsIGJvdW5kaW5nUmVjdCk7CisgICAgICAgICAgICAgICAgaWYgKHNoYWRvd0NvbnRl
eHQpIHsKKyAgICAgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFk
b3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgICAgICAgICAgLy8gU2lu
Y2UgaXQgd2lsbCBiZSBibHVycmVkIGFueXdheSwgd2UgZG9uJ3QgY2FyZSBhYm91dCByZW5kZXIg
aGludHMuCiAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldEZvbnQocC0+Zm9u
dCgpKTsKLSAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0UGVuKGN0eFNoYWRv
dy0+bV9jb2xvcik7CisgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldFBlbihj
dHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpOwogICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWlu
dGVyLT5kcmF3VGV4dChwdCwgc3RyaW5nLCBmbGFncywgcnVuLmV4cGFuc2lvbigpKTsKICAgICAg
ICAgICAgICAgICAgICAgY3R4U2hhZG93LT5lbmRTaGFkb3dMYXllcihjdHgpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChjdHgtPnRleHREcmF3
aW5nTW9kZSgpICYgVGV4dE1vZGVTdHJva2UpIHsKLSAgICAgICAgICAgIGlmIChjdHhTaGFkb3ct
Pm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpCbHVyU2hhZG93KSB7Ci0gICAgICAgICAgICAgICAg
cC0+dHJhbnNsYXRlKGN0eFNoYWRvdy0+b2Zmc2V0KCkpOwotICAgICAgICAgICAgICAgIHAtPnN0
cm9rZVBhdGgodGV4dFN0cm9rZVBhdGgsIFFQZW4oY3R4U2hhZG93LT5tX2NvbG9yKSk7Ci0gICAg
ICAgICAgICAgICAgcC0+dHJhbnNsYXRlKC1jdHhTaGFkb3ctPm9mZnNldCgpKTsKKyAgICAgICAg
ICAgIGlmIChjdHhTaGFkb3ctPnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpCbHVyU2hhZG93KSB7Cisg
ICAgICAgICAgICAgICAgY29uc3QgUVBvaW50RiBzaGFkb3dPZmZzZXQoY3R4LT5zdGF0ZSgpLnNo
YWRvd09mZnNldC53aWR0aCgpLCBjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsK
KyAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoc2hhZG93T2Zmc2V0KTsKKyAgICAgICAgICAg
ICAgICBwLT5zdHJva2VQYXRoKHRleHRTdHJva2VQYXRoLCBRUGVuKGN0eC0+c3RhdGUoKS5zaGFk
b3dDb2xvcikpOworICAgICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZSgtc2hhZG93T2Zmc2V0KTsK
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgUUZvbnRNZXRyaWNzIGZtKGZv
bnQpOwogICAgICAgICAgICAgICAgIFFSZWN0RiBib3VuZGluZ1JlY3QocHQueCgpLCBwb2ludC55
KCkgLSBmbS5hc2NlbnQoKSwgZm0ud2lkdGgoc3RyaW5nLCAtMSwgZmxhZ3MpLCBmbS5oZWlnaHQo
KSk7Ci0gICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBjdHhTaGFkb3ct
PmJlZ2luU2hhZG93TGF5ZXIoY3R4LCBib3VuZGluZ1JlY3QpOwotICAgICAgICAgICAgICAgIGlm
IChzaGFkb3dQYWludGVyKSB7CisgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFk
b3dDb250ZXh0ID0gY3R4U2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eCwgYm91bmRpbmdSZWN0
KTsKKyAgICAgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAgICAg
ICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpOwogICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSBpdCB3aWxsIGJlIGJsdXJyZWQg
YW55d2F5LCB3ZSBkb24ndCBjYXJlIGFib3V0IHJlbmRlciBoaW50cy4KICAgICAgICAgICAgICAg
ICAgICAgc2hhZG93UGFpbnRlci0+c2V0Rm9udChwLT5mb250KCkpOwotICAgICAgICAgICAgICAg
ICAgICBzaGFkb3dQYWludGVyLT5zdHJva2VQYXRoKHRleHRTdHJva2VQYXRoLCBRUGVuKGN0eFNo
YWRvdy0+bV9jb2xvcikpOworICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zdHJv
a2VQYXRoKHRleHRTdHJva2VQYXRoLCBRUGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xvcikpOwog
ICAgICAgICAgICAgICAgICAgICBjdHhTaGFkb3ctPmVuZFNoYWRvd0xheWVyKGN0eCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMzI4LDcgKzMzNCw3IEBAIHZvaWQgRm9u
dDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250RGF0YSwKICAgICBBU1NFUlQoIXNob3VsZFN0cm9rZSk7CiAKICAgICAvLyBTaGFk
b3dlZCB0ZXh0IHNob3VsZCBhbHdheXMgdGFrZSB0aGUgY29tcGxleCBwYXRoLgotICAgIEFTU0VS
VChjb250ZXh0LT5jb250ZXh0U2hhZG93KCktPm1fdHlwZSA9PSBDb250ZXh0U2hhZG93OjpOb1No
YWRvdyk7CisgICAgQVNTRVJUKGNvbnRleHQtPmNvbnRleHRTaGFkb3coKS0+dHlwZSgpID09IFNo
YWRvd0JsdXI6Ok5vU2hhZG93KTsKIAogICAgIGlmICghc2hvdWxkRmlsbCAmJiAhc2hvdWxkU3Ry
b2tlKQogICAgICAgICByZXR1cm47CkBAIC0zNjEsNyArMzY3LDcgQEAgdm9pZCBGb250OjpkcmF3
R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhLAogICAgIFFQYWludGVyKiBwYWludGVyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCk7CiAKICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0LT5jb250ZXh0U2hhZG93
KCk7Ci0gICAgc3dpdGNoIChzaGFkb3ctPm1fdHlwZSkgeworICAgIHN3aXRjaCAoc2hhZG93LT50
eXBlKCkpIHsKICAgICBjYXNlIENvbnRleHRTaGFkb3c6OlNvbGlkU2hhZG93OiB7CiAgICAgICAg
IFFQZW4gcHJldmlvdXNQZW4gPSBwYWludGVyLT5wZW4oKTsKICAgICAgICAgcGFpbnRlci0+c2V0
UGVuKHNoYWRvdy0+bV9jb2xvcik7CkBAIC0zNzQsOCArMzgwLDkgQEAgdm9pZCBGb250OjpkcmF3
R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhLAogICAgIGNhc2UgQ29udGV4dFNoYWRvdzo6Qmx1clNoYWRvdzogewogICAgICAgICBx
cmVhbCBoZWlnaHQgPSByYXdGb250LmFzY2VudCgpICsgcmF3Rm9udC5kZXNjZW50KCkgKyAxOwog
ICAgICAgICBRUmVjdEYgYm91bmRpbmdSZWN0KHBvaW50LngoKSwgcG9pbnQueSgpIC0gcmF3Rm9u
dC5hc2NlbnQoKSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWlu
dGVyID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGNvbnRleHQsIGJvdW5kaW5nUmVjdCk7Ci0g
ICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hh
ZG93Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjb250ZXh0LCBib3VuZGluZ1Jl
Y3QpOworICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAgUVBhaW50ZXIq
IHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAg
ICAgICAgIHNoYWRvd1BhaW50ZXItPnNldFBlbihzaGFkb3ctPm1fY29sb3IpOwogICAgICAgICAg
ICAgc2hhZG93UGFpbnRlci0+ZHJhd0dseXBoUnVuKHBvaW50LCBxdEdseXBocyk7CiAgICAgICAg
ICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCmlu
ZGV4IDc5M2NkZTAuLjRjNzY1YWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKQEAgLTQ0LDEzICs0NCwx
MyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIK
LSNpbmNsdWRlICJDb250ZXh0U2hhZG93LmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgi
CiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5o
IgorI2luY2x1ZGUgIlNoYWRvd0JsdXIuaCIKICNpbmNsdWRlICJUcmFuc3BhcmVuY3lMYXllci5o
IgogCiAjaW5jbHVkZSA8UUJydXNoPgpAQCAtMTk2LDggKzE5NiwyMyBAQCBwdWJsaWM6CiAgICAg
SW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eTsKICAgICBib29s
IGluaXRpYWxTbW9vdGhQaXhtYXBUcmFuc2Zvcm1IaW50OwogCi0gICAgQ29udGV4dFNoYWRvdyBz
aGFkb3c7Ci0gICAgUVN0YWNrPENvbnRleHRTaGFkb3c+IHNoYWRvd1N0YWNrOworICAgIFNoYWRv
d0JsdXIqIHNoYWRvdzsKKworICAgIGJvb2wgbXVzdFVzZVNoYWRvd0JsdXIoKSBjb25zdAorICAg
IHsKKyAgICAgICAgLy8gV2UgY2FuJ3QgYXZvaWQgU2hhZG93Qmx1ciwgc2luY2UgdGhlIHNoYWRv
dyBoYXMgYmx1ci4KKyAgICAgICAgaWYgKHNoYWRvdy0+dHlwZSgpID09IFNoYWRvd0JsdXI6OkJs
dXJTaGFkb3cpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgLy8gV2UgY2FuIGF2
b2lkIFNoYWRvd0JsdXIgYW5kIG9wdGltaXplLCBzaW5jZSB3ZSdyZSBub3QgZHJhd2luZyBvbiBh
CisgICAgICAgIC8vIGNhbnZhcyBhbmQgYm94IHNoYWRvd3MgYXJlIGFmZmVjdGVkIGJ5IHRoZSB0
cmFuc2Zvcm1hdGlvbiBtYXRyaXguCisgICAgICAgIGlmICghc2hhZG93LT5zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBXZSBj
YW4gYXZvaWQgU2hhZG93Qmx1ciwgc2luY2UgdGhlcmUgYXJlIG5vIHRyYW5zZm9ybWF0aW9ucyB0
byBhcHBseSB0byB0aGUgY2FudmFzLgorICAgICAgICBpZiAocCgpLT5jb21iaW5lZFRyYW5zZm9y
bSgpLmlzSWRlbnRpdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8g
T3RoZXJ3aXNlLCBubyBjaGFuY2UgYXZvaWRpbmcgU2hhZG93Qmx1ci4KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQogCiAgICAgUVJlY3RGIGNsaXBCb3VuZGluZ1JlY3QoKSBjb25zdAogICAg
IHsKQEAgLTIyMSw2ICsyMzYsNyBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6Okdy
YXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShRUGFpbnRlciogcCwgY29ucwogICAgICwgc29s
aWRDb2xvcihpbml0aWFsU29saWRDb2xvcikKICAgICAsIGltYWdlSW50ZXJwb2xhdGlvblF1YWxp
dHkoSW50ZXJwb2xhdGlvbkRlZmF1bHQpCiAgICAgLCBpbml0aWFsU21vb3RoUGl4bWFwVHJhbnNm
b3JtSGludChmYWxzZSkKKyAgICAsIHNoYWRvdyhuZXcgU2hhZG93Qmx1cigpKQogICAgICwgcGFp
bnRlcihwKQogICAgICwgcGxhdGZvcm1Db250ZXh0SXNPd25lZChmYWxzZSkKIHsKQEAgLTI0MSw2
ICsyNTcsNyBAQCBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZShRUGFpbnRlciogcCwgY29ucwogICAgIGluaXRpYWxTbW9vdGhQaXht
YXBUcmFuc2Zvcm1IaW50ID0gcGFpbnRlci0+dGVzdFJlbmRlckhpbnQoUVBhaW50ZXI6OlNtb290
aFBpeG1hcFRyYW5zZm9ybSk7CiAKICAgICBwYWludGVyLT5zZXRSZW5kZXJIaW50KFFQYWludGVy
OjpBbnRpYWxpYXNpbmcsIHRydWUpOworCiB9CiAKIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpCkBAIC0yNTAsNiArMjY3LDcg
QEAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZv
cm1Qcml2YXRlKCkKIAogICAgIFFQYWludERldmljZSogZGV2aWNlID0gcGFpbnRlci0+ZGV2aWNl
KCk7CiAgICAgcGFpbnRlci0+ZW5kKCk7CisgICAgZGVsZXRlIHNoYWRvdzsKICAgICBkZWxldGUg
cGFpbnRlcjsKICAgICBkZWxldGUgZGV2aWNlOwogfQpAQCAtMjk3LDcgKzMxNSw2IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCiAgICAgaWYgKCFtX2RhdGEtPmxh
eWVycy5pc0VtcHR5KCkgJiYgIW1fZGF0YS0+bGF5ZXJzLnRvcCgpLT5hbHBoYU1hc2suaXNOdWxs
KCkpCiAgICAgICAgICsrbV9kYXRhLT5sYXllcnMudG9wKCktPnNhdmVDb3VudGVyOwogICAgIG1f
ZGF0YS0+cCgpLT5zYXZlKCk7Ci0gICAgbV9kYXRhLT5zaGFkb3dTdGFjay5wdXNoKG1fZGF0YS0+
c2hhZG93KTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRl
KCkKQEAgLTMwOCwxMCArMzI1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0
Zm9ybVN0YXRlKCkKIAogICAgIG1fZGF0YS0+cCgpLT5yZXN0b3JlKCk7CiAKLSAgICBpZiAobV9k
YXRhLT5zaGFkb3dTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgIG1fZGF0YS0+c2hhZG93ID0gQ29u
dGV4dFNoYWRvdygpOwotICAgIGVsc2UKLSAgICAgICAgbV9kYXRhLT5zaGFkb3cgPSBtX2RhdGEt
PnNoYWRvd1N0YWNrLnBvcCgpOworICAgIG1fZGF0YS0+c2hhZG93LT5zZXRTaGFkb3dWYWx1ZXMo
RmxvYXRTaXplKG1fc3RhdGUuc2hhZG93Qmx1ciwgbV9zdGF0ZS5zaGFkb3dCbHVyKSwgbV9zdGF0
ZS5zaGFkb3dPZmZzZXQsIG1fc3RhdGUuc2hhZG93Q29sb3IsIG1fc3RhdGUuc2hhZG93Q29sb3JT
cGFjZSwgbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CiB9CiAKIC8vIERyYXdzIGEg
ZmlsbGVkIHJlY3RhbmdsZSB3aXRoIGEgc3Ryb2tlZCBib3JkZXIuCkBAIC00OTUsMzEgKzUwOSwy
OSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAg
ICBwbGF0Zm9ybVBhdGguc2V0RmlsbFJ1bGUodG9RdEZpbGxSdWxlKGZpbGxSdWxlKCkpKTsKIAog
ICAgIGlmIChoYXNTaGFkb3coKSkgewotICAgICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBj
b250ZXh0U2hhZG93KCk7Ci0gICAgICAgIGlmIChzaGFkb3ctPm11c3RVc2VDb250ZXh0U2hhZG93
KHRoaXMpIHx8IG1fc3RhdGUuZmlsbFBhdHRlcm4gfHwgbV9zdGF0ZS5maWxsR3JhZGllbnQpCisg
ICAgICAgIFNoYWRvd0JsdXIqIHNoYWRvdyA9IHNoYWRvd0JsdXIoKTsKKyAgICAgICAgaWYgKG1f
ZGF0YS0+bXVzdFVzZVNoYWRvd0JsdXIoKSB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuIHx8IG1fc3Rh
dGUuZmlsbEdyYWRpZW50KQogICAgICAgICB7Ci0gICAgICAgICAgICBRUGFpbnRlciogc2hhZG93
UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCBwbGF0Zm9ybVBhdGguY29u
dHJvbFBvaW50UmVjdCgpKTsKLSAgICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CisgICAg
ICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hh
ZG93TGF5ZXIodGhpcywgcGxhdGZvcm1QYXRoLmNvbnRyb2xQb2ludFJlY3QoKSk7CisgICAgICAg
ICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFk
b3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAg
ICAgICAgaWYgKG1fc3RhdGUuZmlsbFBhdHRlcm4pIHsKICAgICAgICAgICAgICAgICAgICAgQWZm
aW5lVHJhbnNmb3JtIGFmZmluZTsKLSAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+
c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVhbD4oc2hhZG93LT5tX2NvbG9yLmFscGhhKCkpIC8g
MjU1KTsKICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFBhdGgocGxhdGZv
cm1QYXRoLCBRQnJ1c2gobV9zdGF0ZS5maWxsUGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJu
KGFmZmluZSkpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG1fc3RhdGUuZmlsbEdyYWRp
ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgIFFCcnVzaCBicnVzaCgqbV9zdGF0ZS5maWxsR3Jh
ZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJydXNoLnNl
dFRyYW5zZm9ybShtX3N0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgp
KTsKLSAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNf
Y2FzdDxxcmVhbD4oc2hhZG93LT5tX2NvbG9yLmFscGhhKCkpIC8gMjU1KTsKICAgICAgICAgICAg
ICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFBhdGgocGxhdGZvcm1QYXRoLCBicnVzaCk7CiAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgUUNvbG9yIHNoYWRv
d0NvbG9yID0gc2hhZG93LT5tX2NvbG9yOwotICAgICAgICAgICAgICAgICAgICBzaGFkb3dDb2xv
ci5zZXRBbHBoYUYoc2hhZG93Q29sb3IuYWxwaGFGKCkgKiBwLT5icnVzaCgpLmNvbG9yKCkuYWxw
aGFGKCkpOwotICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUGF0aChwbGF0
Zm9ybVBhdGgsIHNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAgICAgICAgICAgUUNvbG9yIHNoYWRv
d0NvbG9yID0gbV9zdGF0ZS5zaGFkb3dDb2xvcjsKKyAgICAgICAgICAgICAgICAgICAgc2hhZG93
UGFpbnRlci0+ZmlsbFBhdGgocGxhdGZvcm1QYXRoLCBwLT5icnVzaCgpLmNvbG9yKCkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKHRo
aXMpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgUVBvaW50
RiBvZmZzZXQgPSBzaGFkb3ctPm9mZnNldCgpOworICAgICAgICAgICAgUVBvaW50RiBvZmZzZXQo
bV9zdGF0ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0
KCkpOwogICAgICAgICAgICAgcC0+dHJhbnNsYXRlKG9mZnNldCk7Ci0gICAgICAgICAgICBRQ29s
b3Igc2hhZG93Q29sb3IgPSBzaGFkb3ctPm1fY29sb3I7CisgICAgICAgICAgICBRQ29sb3Igc2hh
ZG93Q29sb3IgPSBtX3N0YXRlLnNoYWRvd0NvbG9yOwogICAgICAgICAgICAgc2hhZG93Q29sb3Iu
c2V0QWxwaGFGKHNoYWRvd0NvbG9yLmFscGhhRigpICogcC0+YnJ1c2goKS5jb2xvcigpLmFscGhh
RigpKTsKICAgICAgICAgICAgIHAtPmZpbGxQYXRoKHBsYXRmb3JtUGF0aCwgc2hhZG93Q29sb3Ip
OwogICAgICAgICAgICAgcC0+dHJhbnNsYXRlKC1vZmZzZXQpOwpAQCAtNTQ3LDMwICs1NTksMjkg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aCkKICAg
ICBwbGF0Zm9ybVBhdGguc2V0RmlsbFJ1bGUodG9RdEZpbGxSdWxlKGZpbGxSdWxlKCkpKTsKIAog
ICAgIGlmIChoYXNTaGFkb3coKSkgewotICAgICAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBj
b250ZXh0U2hhZG93KCk7Ci0gICAgICAgIGlmIChzaGFkb3ctPm11c3RVc2VDb250ZXh0U2hhZG93
KHRoaXMpIHx8IG1fc3RhdGUuc3Ryb2tlUGF0dGVybiB8fCBtX3N0YXRlLnN0cm9rZUdyYWRpZW50
KQorICAgICAgICBTaGFkb3dCbHVyKiBzaGFkb3cgPSBzaGFkb3dCbHVyKCk7CisgICAgICAgIGlm
IChtX2RhdGEtPm11c3RVc2VTaGFkb3dCbHVyKCkgfHwgbV9zdGF0ZS5zdHJva2VQYXR0ZXJuIHx8
IG1fc3RhdGUuc3Ryb2tlR3JhZGllbnQpCiAgICAgICAgIHsKICAgICAgICAgICAgIEZsb2F0UmVj
dCBib3VuZGluZ1JlY3QgPSBwbGF0Zm9ybVBhdGguY29udHJvbFBvaW50UmVjdCgpOwogICAgICAg
ICAgICAgYm91bmRpbmdSZWN0LmluZmxhdGUocGVuLm1pdGVyTGltaXQoKSArIHBlbi53aWR0aEYo
KSk7Ci0gICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5T
aGFkb3dMYXllcih0aGlzLCBib3VuZGluZ1JlY3QpOwotICAgICAgICAgICAgaWYgKHNoYWRvd1Bh
aW50ZXIpIHsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IHNo
YWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCBib3VuZGluZ1JlY3QpOworICAgICAgICAgICAg
aWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFp
bnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICAgICAgICAg
IGlmIChtX3N0YXRlLnN0cm9rZUdyYWRpZW50KSB7CiAgICAgICAgICAgICAgICAgICAgIFFCcnVz
aCBicnVzaCgqbV9zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKICAg
ICAgICAgICAgICAgICAgICAgYnJ1c2guc2V0VHJhbnNmb3JtKG1fc3RhdGUuc3Ryb2tlR3JhZGll
bnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7CiAgICAgICAgICAgICAgICAgICAgIFFQZW4g
c2hhZG93UGVuKHBlbik7CiAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1Blbi5zZXRCcnVzaChi
cnVzaCk7Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldE9wYWNpdHkoc3Rh
dGljX2Nhc3Q8cXJlYWw+KHNoYWRvdy0+bV9jb2xvci5hbHBoYSgpKSAvIDI1NSk7CiAgICAgICAg
ICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnN0cm9rZVBhdGgocGxhdGZvcm1QYXRoLCBzaGFk
b3dQZW4pOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNo
YWRvd1BhaW50ZXItPnNldE9wYWNpdHkoc3RhdGljX2Nhc3Q8cXJlYWw+KG1fZGF0YS0+c2hhZG93
Lm1fY29sb3IuYWxwaGEoKSkgLyAyNTUpOwogICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWlu
dGVyLT5zdHJva2VQYXRoKHBsYXRmb3JtUGF0aCwgcGVuKTsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcih0aGlzKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFFQb2ludEYgb2Zmc2V0ID0gc2hhZG93
LT5vZmZzZXQoKTsKKyAgICAgICAgICAgIFFQb2ludEYgb2Zmc2V0KG1fc3RhdGUuc2hhZG93T2Zm
c2V0LndpZHRoKCksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsKICAgICAgICAgICAg
IHAtPnRyYW5zbGF0ZShvZmZzZXQpOwotICAgICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0g
c2hhZG93LT5tX2NvbG9yOworICAgICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gbV9zdGF0
ZS5zaGFkb3dDb2xvcjsKICAgICAgICAgICAgIHNoYWRvd0NvbG9yLnNldEFscGhhRihzaGFkb3dD
b2xvci5hbHBoYUYoKSAqIHBlbi5jb2xvcigpLmFscGhhRigpKTsKICAgICAgICAgICAgIFFQZW4g
c2hhZG93UGVuKHBlbik7CiAgICAgICAgICAgICBzaGFkb3dQZW4uc2V0Q29sb3Ioc2hhZG93Q29s
b3IpOwpAQCAtNjY4LDQ0ICs2NzksNDIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIAogICAgIFFQYWludGVyKiBwID0gbV9kYXRhLT5wKCk7
CiAgICAgUVJlY3RGIG5vcm1hbGl6ZWRSZWN0ID0gcmVjdC5ub3JtYWxpemVkKCk7Ci0gICAgQ29u
dGV4dFNoYWRvdyogc2hhZG93ID0gY29udGV4dFNoYWRvdygpOworICAgIFNoYWRvd0JsdXIqIHNo
YWRvdyA9IHNoYWRvd0JsdXIoKTsKIAogICAgIGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CiAg
ICAgICAgIFFQaXhtYXAqIGltYWdlID0gbV9zdGF0ZS5maWxsUGF0dGVybi0+dGlsZUltYWdlKCkt
Pm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgICAgIFFQYWludGVyKiBzaGFkb3dQ
YWludGVyID0gaGFzU2hhZG93KCkgPyBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgbm9y
bWFsaXplZFJlY3QpIDogMDsKLSAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gaGFzU2hhZG93KCkgPyBzaGFkb3ctPmJl
Z2luU2hhZG93TGF5ZXIodGhpcywgbm9ybWFsaXplZFJlY3QpIDogMDsKKyAgICAgICAgaWYgKHNo
YWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hh
ZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAgICBkcmF3UmVwZWF0UGF0
dGVybihzaGFkb3dQYWludGVyLCBpbWFnZSwgbm9ybWFsaXplZFJlY3QsIG1fc3RhdGUuZmlsbFBh
dHRlcm4tPnJlcGVhdFgoKSwgbV9zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0WSgpKTsKLSAgICAg
ICAgICAgIHNoYWRvd1BhaW50ZXItPnNldENvbXBvc2l0aW9uTW9kZShRUGFpbnRlcjo6Q29tcG9z
aXRpb25Nb2RlX1NvdXJjZUluKTsKLSAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0
KG5vcm1hbGl6ZWRSZWN0LCBzaGFkb3ctPm1fY29sb3IpOwogICAgICAgICAgICAgc2hhZG93LT5l
bmRTaGFkb3dMYXllcih0aGlzKTsKICAgICAgICAgfQogICAgICAgICBkcmF3UmVwZWF0UGF0dGVy
bihwLCBpbWFnZSwgbm9ybWFsaXplZFJlY3QsIG1fc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFgo
KSwgbV9zdGF0ZS5maWxsUGF0dGVybi0+cmVwZWF0WSgpKTsKICAgICB9IGVsc2UgaWYgKG1fc3Rh
dGUuZmlsbEdyYWRpZW50KSB7CiAgICAgICAgIFFCcnVzaCBicnVzaCgqbV9zdGF0ZS5maWxsR3Jh
ZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CiAgICAgICAgIGJydXNoLnNldFRyYW5zZm9ybSht
X3N0YXRlLmZpbGxHcmFkaWVudC0+Z3JhZGllbnRTcGFjZVRyYW5zZm9ybSgpKTsKLSAgICAgICAg
UVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBoYXNTaGFkb3coKSA/IHNoYWRvdy0+YmVnaW5TaGFk
b3dMYXllcih0aGlzLCBub3JtYWxpemVkUmVjdCkgOiAwOwotICAgICAgICBpZiAoc2hhZG93UGFp
bnRlcikgeworICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBoYXNTaGFk
b3coKSA/IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCBub3JtYWxpemVkUmVjdCkgOiAw
OworICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAgUVBhaW50ZXIqIHNo
YWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAg
ICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBicnVzaCk7Ci0gICAg
ICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBv
c2l0aW9uTW9kZV9Tb3VyY2VJbik7Ci0gICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVj
dChub3JtYWxpemVkUmVjdCwgc2hhZG93LT5tX2NvbG9yKTsKICAgICAgICAgICAgIHNoYWRvdy0+
ZW5kU2hhZG93TGF5ZXIodGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgcC0+ZmlsbFJlY3Qobm9y
bWFsaXplZFJlY3QsIGJydXNoKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoaGFzU2hhZG93
KCkpIHsKLSAgICAgICAgICAgIGlmIChzaGFkb3ctPm11c3RVc2VDb250ZXh0U2hhZG93KHRoaXMp
KSB7Ci0gICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJl
Z2luU2hhZG93TGF5ZXIodGhpcywgbm9ybWFsaXplZFJlY3QpOwotICAgICAgICAgICAgICAgIGlm
IChzaGFkb3dQYWludGVyKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNl
dE9wYWNpdHkoc3RhdGljX2Nhc3Q8cXJlYWw+KHNoYWRvdy0+bV9jb2xvci5hbHBoYSgpKSAvIDI1
NSk7CisgICAgICAgICAgICBpZiAobV9kYXRhLT5tdXN0VXNlU2hhZG93Qmx1cigpKSB7CisgICAg
ICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93LT5iZWdp
blNoYWRvd0xheWVyKHRoaXMsIG5vcm1hbGl6ZWRSZWN0KTsKKyAgICAgICAgICAgICAgICBpZiAo
c2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFp
bnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICAgICAgICAg
ICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwgcC0+YnJ1c2goKSk7
CiAgICAgICAgICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIodGhpcyk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBT
b2xpZCByZWN0YW5nbGUgZmlsbCB3aXRoIG5vIGJsdXIgc2hhZG93IG9yIHRyYW5zZm9ybWF0aW9u
cyBhcHBsaWVkIGNhbiBiZSBkb25lCiAgICAgICAgICAgICAgICAgLy8gZmFzdGVyIHdpdGhvdXQg
dXNpbmcgdGhlIHNoYWRvdyBsYXllciBhdCBhbGwuCi0gICAgICAgICAgICAgICAgUUNvbG9yIHNo
YWRvd0NvbG9yID0gc2hhZG93LT5tX2NvbG9yOworICAgICAgICAgICAgICAgIFFDb2xvciBzaGFk
b3dDb2xvciA9IG1fc3RhdGUuc2hhZG93Q29sb3I7CiAgICAgICAgICAgICAgICAgc2hhZG93Q29s
b3Iuc2V0QWxwaGFGKHNoYWRvd0NvbG9yLmFscGhhRigpICogcC0+YnJ1c2goKS5jb2xvcigpLmFs
cGhhRigpKTsKLSAgICAgICAgICAgICAgICBwLT5maWxsUmVjdChub3JtYWxpemVkUmVjdC50cmFu
c2xhdGVkKHNoYWRvdy0+b2Zmc2V0KCkpLCBzaGFkb3dDb2xvcik7CisgICAgICAgICAgICAgICAg
cC0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QudHJhbnNsYXRlZChRUG9pbnRGKG1fc3RhdGUuc2hh
ZG93T2Zmc2V0LndpZHRoKCksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LmhlaWdodCgpKSksIHNoYWRv
d0NvbG9yKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC03MjQsMTYgKzczMywyMCBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IsIENvbG9yUwogICAgIFFSZWN0RiBub3JtYWxpemVkUmVjdCA9IHJl
Y3Qubm9ybWFsaXplZCgpOwogCiAgICAgaWYgKGhhc1NoYWRvdygpKSB7Ci0gICAgICAgIENvbnRl
eHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHRTaGFkb3coKTsKLSAgICAgICAgaWYgKHNoYWRvdy0+
bXVzdFVzZUNvbnRleHRTaGFkb3codGhpcykpIHsKLSAgICAgICAgICAgIFFQYWludGVyKiBzaGFk
b3dQYWludGVyID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRoaXMsIG5vcm1hbGl6ZWRSZWN0
KTsKLSAgICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CisgICAgICAgIFNoYWRvd0JsdXIq
IHNoYWRvdyA9IHNoYWRvd0JsdXIoKTsKKyAgICAgICAgaWYgKG1fZGF0YS0+bXVzdFVzZVNoYWRv
d0JsdXIoKSkgeworICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0g
c2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRoaXMsIG5vcm1hbGl6ZWRSZWN0KTsKKyAgICAgICAg
ICAgIGlmIChzaGFkb3dDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRv
d1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAg
ICAgICBzaGFkb3dQYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0
aW9uTW9kZV9Tb3VyY2UpOwotICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxSZWN0
KG5vcm1hbGl6ZWRSZWN0LCBzaGFkb3ctPm1fY29sb3IpOworICAgICAgICAgICAgICAgIHNoYWRv
d1BhaW50ZXItPmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LCBtX3N0YXRlLnNoYWRvd0NvbG9yKTsK
ICAgICAgICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKHRoaXMpOwogICAgICAgICAg
ICAgfQotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHAtPmZpbGxSZWN0KG5vcm1hbGl6ZWRS
ZWN0LnRyYW5zbGF0ZWQoc2hhZG93LT5vZmZzZXQoKSksIHNoYWRvdy0+bV9jb2xvcik7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBRQ29sb3Igc2hhZG93Q29sb3IgPSBtX3N0YXRlLnNo
YWRvd0NvbG9yOworICAgICAgICAgICAgc2hhZG93Q29sb3Iuc2V0QWxwaGFGKHNoYWRvd0NvbG9y
LmFscGhhRigpICogcC0+YnJ1c2goKS5jb2xvcigpLmFscGhhRigpKTsKKyAgICAgICAgICAgIHAt
PmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LnRyYW5zbGF0ZWQoUVBvaW50RihtX3N0YXRlLnNoYWRv
d09mZnNldC53aWR0aCgpLCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSkpLCBzaGFkb3dD
b2xvcik7CisgICAgICAgIH0KICAgICB9CiAKICAgICBwLT5maWxsUmVjdChub3JtYWxpemVkUmVj
dCwgbV9kYXRhLT5zb2xpZENvbG9yKTsKQEAgLTc0OCwxOCArNzYxLDIwIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50
U2l6ZSYgdG9wTGVmCiAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChyZWN0LCB0b3BMZWZ0LCB0b3BS
aWdodCwgYm90dG9tTGVmdCwgYm90dG9tUmlnaHQpOwogICAgIFFQYWludGVyKiBwID0gbV9kYXRh
LT5wKCk7CiAgICAgaWYgKGhhc1NoYWRvdygpKSB7Ci0gICAgICAgIENvbnRleHRTaGFkb3cqIHNo
YWRvdyA9IGNvbnRleHRTaGFkb3coKTsKLSAgICAgICAgaWYgKHNoYWRvdy0+bXVzdFVzZUNvbnRl
eHRTaGFkb3codGhpcykpIHsKLSAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0g
c2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRoaXMsIHJlY3QpOwotICAgICAgICAgICAgaWYgKHNo
YWRvd1BhaW50ZXIpIHsKKyAgICAgICAgU2hhZG93Qmx1ciogc2hhZG93ID0gc2hhZG93Qmx1cigp
OworICAgICAgICBpZiAobV9kYXRhLT5tdXN0VXNlU2hhZG93Qmx1cigpKSB7CisgICAgICAgICAg
ICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5
ZXIodGhpcywgcmVjdCk7CisgICAgICAgICAgICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAg
ICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCk7CiAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0Q29tcG9zaXRp
b25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNlKTsKLSAgICAgICAgICAgICAg
ICBzaGFkb3dQYWludGVyLT5maWxsUGF0aChwYXRoLnBsYXRmb3JtUGF0aCgpLCBRQ29sb3IobV9k
YXRhLT5zaGFkb3cubV9jb2xvcikpOworICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZp
bGxQYXRoKHBhdGgucGxhdGZvcm1QYXRoKCksIFFDb2xvcihtX3N0YXRlLnNoYWRvd0NvbG9yKSk7
CiAgICAgICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcih0aGlzKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShtX2RhdGEt
PnNoYWRvdy5vZmZzZXQoKSk7Ci0gICAgICAgICAgICBwLT5maWxsUGF0aChwYXRoLnBsYXRmb3Jt
UGF0aCgpLCBRQ29sb3IobV9kYXRhLT5zaGFkb3cubV9jb2xvcikpOwotICAgICAgICAgICAgcC0+
dHJhbnNsYXRlKC1tX2RhdGEtPnNoYWRvdy5vZmZzZXQoKSk7CisgICAgICAgICAgICBjb25zdCBR
UG9pbnRGIHNoYWRvd09mZnNldChtX3N0YXRlLnNoYWRvd09mZnNldC53aWR0aCgpLCBtX3N0YXRl
LnNoYWRvd09mZnNldC5oZWlnaHQoKSk7CisgICAgICAgICAgICBwLT50cmFuc2xhdGUoc2hhZG93
T2Zmc2V0KTsKKyAgICAgICAgICAgIHAtPmZpbGxQYXRoKHBhdGgucGxhdGZvcm1QYXRoKCksIFFD
b2xvcihtX3N0YXRlLnNoYWRvd0NvbG9yKSk7CisgICAgICAgICAgICBwLT50cmFuc2xhdGUoLXNo
YWRvd09mZnNldCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcC0+ZmlsbFBhdGgocGF0aC5wbGF0
Zm9ybVBhdGgoKSwgUUNvbG9yKGNvbG9yKSk7CkBAIC03NzAsOSArNzg1LDkgQEAgYm9vbCBHcmFw
aGljc0NvbnRleHQ6OmluVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdAogICAgIHJldHVybiBtX2Rh
dGEtPmxheWVyQ291bnQ7CiB9CiAKLUNvbnRleHRTaGFkb3cqIEdyYXBoaWNzQ29udGV4dDo6Y29u
dGV4dFNoYWRvdygpCitTaGFkb3dCbHVyKiBHcmFwaGljc0NvbnRleHQ6OnNoYWRvd0JsdXIoKQog
ewotICAgIHJldHVybiAmbV9kYXRhLT5zaGFkb3c7CisgICAgcmV0dXJuIG1fZGF0YS0+c2hhZG93
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBJbnRSZWN0JiByZWN0KQpA
QCAtNzkwLDYgKzgwNSwxOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiAKICAgICBtX2RhdGEtPnAoKS0+c2V0Q2xpcFJlY3QocmVjdCwgUXQ6Oklu
dGVyc2VjdENsaXApOwogfQorSW50UmVjdCBHcmFwaGljc0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBj
b25zdAoreworICAgIFFQYWludGVyKiBwID0gbV9kYXRhLT5wKCk7CisgICAgUVJlY3RGIGNsaXBS
ZWN0OworCisgICAgaWYgKHAtPmhhc0NsaXBwaW5nKCkpCisgICAgICAgIGNsaXBSZWN0ID0gbV9k
YXRhLT5jbGlwQm91bmRpbmdSZWN0KCk7CisgICAgZWxzZQorICAgICAgICBjbGlwUmVjdCA9IHAt
PnRyYW5zZm9ybSgpLmludmVydGVkKCkubWFwUmVjdChwLT53aW5kb3coKSk7CisKKyAgICByZXR1
cm4gSW50UmVjdChjbGlwUmVjdC54KCksIGNsaXBSZWN0LnkoKSwgY2xpcFJlY3Qud2lkdGgoKSwg
Y2xpcFJlY3QuaGVpZ2h0KCkpOworfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7CkBAIC05MjYsNyArOTUzLDcg
QEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmIGZyZWN0LCBSb3VuZGluZ00KICAgICByZXR1cm4gRmxvYXRSZWN0KHJvdW5kZWRP
cmlnaW4sIHJvdW5kZWRMb3dlclJpZ2h0IC0gcm91bmRlZE9yaWdpbik7CiB9CiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIHNpemUsIGZs
b2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSkKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIHNpemUsIGZsb2F0IGJs
dXIsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAgIC8v
IFF0IGRvZXNuJ3Qgc3VwcG9ydCBzaGFkb3dzIG5hdGl2ZWx5LCB0aGV5IGFyZSBkcmF3biBtYW51
YWxseSBpbiB0aGUgZHJhdyoKICAgICAvLyBmdW5jdGlvbnMKQEAgLTkzNSwxNiArOTYyLDE0IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUm
IHNpemUsIGZsb2F0IGJsdXIsIGNvbnN0CiAgICAgICAgIC8vIE1lYW5pbmcgdGhhdCB0aGlzIGdy
YXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dAogICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhUTUw1IENhbnZh
cyBoYXZlIG9wcG9zaXRlIFkgYXhpcwogICAgICAgICBtX3N0YXRlLnNoYWRvd09mZnNldCA9IEZs
b2F0U2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKTsKLSAgICAgICAgbV9kYXRhLT5z
aGFkb3cgPSBDb250ZXh0U2hhZG93KGNvbG9yLCBibHVyLCBGbG9hdFNpemUoc2l6ZS53aWR0aCgp
LCAtc2l6ZS5oZWlnaHQoKSkpOwotICAgIH0gZWxzZQotICAgICAgICBtX2RhdGEtPnNoYWRvdyA9
IENvbnRleHRTaGFkb3coY29sb3IsIGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRoKCksIHNpemUu
aGVpZ2h0KCkpKTsKKyAgICB9CiAKLSAgICBtX2RhdGEtPnNoYWRvdy5zZXRTaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcyhtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKKyAgICBtX2RhdGEt
PnNoYWRvdy0+c2V0U2hhZG93VmFsdWVzKEZsb2F0U2l6ZShtX3N0YXRlLnNoYWRvd0JsdXIsIG1f
c3RhdGUuc2hhZG93Qmx1ciksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBjb2xvciwgY29sb3JTcGFj
ZSwgbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKIHsKLSAgICBtX2RhdGEtPnNoYWRvdy5jbGVh
cigpOworICAgIG1fZGF0YS0+c2hhZG93LT5jbGVhcigpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6cHVzaFRyYW5zcGFyZW5jeUxheWVySW50ZXJuYWwoY29uc3QgUVJlY3QgJnJlY3QsIHFy
ZWFsIG9wYWNpdHksIFFQaXhtYXAmIGFscGhhTWFzaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKaW5kZXggMGM4Y2U5ZS4uNDFmZjhhNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKQEAg
LTM0LDExICszNCwxMSBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVk
ZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJDb250ZXh0U2hhZG93LmgiCiAjaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW1h
Z2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2hh
ZG93Qmx1ci5oIgogI2luY2x1ZGUgIlN0aWxsSW1hZ2VRdC5oIgogI2luY2x1ZGUgInF3ZWJzZXR0
aW5ncy5oIgogCkBAIC0yMjQsMTEgKzIyNCwxMSBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsCiAgICAgQ29tcG9zaXRl
T3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IGN0eHQtPmNvbXBvc2l0ZU9wZXJhdGlvbigpOwog
ICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbighaW1hZ2UtPmhhc0FscGhhKCkgJiYgb3Ag
PT0gQ29tcG9zaXRlU291cmNlT3ZlciA/IENvbXBvc2l0ZUNvcHkgOiBvcCk7CiAKLSAgICBDb250
ZXh0U2hhZG93KiBzaGFkb3cgPSBjdHh0LT5jb250ZXh0U2hhZG93KCk7Ci0gICAgaWYgKHNoYWRv
dy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KSB7Ci0gICAgICAgIFFQYWludGVy
KiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eHQsIG5vcm1hbGl6
ZWREc3QpOwotICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewotICAgICAgICAgICAgc2hhZG93
UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVhbD4oc2hhZG93LT5tX2NvbG9yLmFs
cGhhKCkpIC8gMjU1KTsKKyAgICBpZiAoY3R4dC0+aGFzU2hhZG93KCkpIHsKKyAgICAgICAgU2hh
ZG93Qmx1ciogc2hhZG93ID0gY3R4dC0+c2hhZG93Qmx1cigpOworICAgICAgICBHcmFwaGljc0Nv
bnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY3R4dCwgbm9y
bWFsaXplZERzdCk7CisgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7CisgICAgICAgICAgICBR
UGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
OwogICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZHJhd1BpeG1hcChub3JtYWxpemVkRHN0LCAq
aW1hZ2UsIG5vcm1hbGl6ZWRTcmMpOwogICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXll
cihjdHh0KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAKaW5kZXggM2IwODk5NS4uY2IyYTQ0MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQu
Y3BwCkBAIC0yOCw5ICsyOCw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3Rp
bGxJbWFnZVF0LmgiCiAKLSNpbmNsdWRlICJDb250ZXh0U2hhZG93LmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIlNoYWRvd0Js
dXIuaCIKIAogI2luY2x1ZGUgPFFQYWludGVyPgogCkBAIC03NCwxMSArNzQsMTEgQEAgdm9pZCBT
dGlsbEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBk
c3QsCiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IGN0eHQtPmNvbXBv
c2l0ZU9wZXJhdGlvbigpOwogICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7CiAK
LSAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjdHh0LT5jb250ZXh0U2hhZG93KCk7Ci0gICAg
aWYgKHNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KSB7Ci0gICAgICAg
IFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eHQs
IG5vcm1hbGl6ZWREc3QpOwotICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewotICAgICAgICAg
ICAgc2hhZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVhbD4oc2hhZG93LT5t
X2NvbG9yLmFscGhhKCkpIC8gMjU1KTsKKyAgICBpZiAoY3R4dC0+aGFzU2hhZG93KCkpIHsKKyAg
ICAgICAgU2hhZG93Qmx1ciogc2hhZG93ID0gY3R4dC0+c2hhZG93Qmx1cigpOworICAgICAgICBH
cmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIo
Y3R4dCwgbm9ybWFsaXplZERzdCk7CisgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7CisgICAg
ICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpOwogICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZHJhd1BpeG1hcChub3JtYWxp
emVkRHN0LCAqbV9waXhtYXAsIG5vcm1hbGl6ZWRTcmMpOwogICAgICAgICAgICAgc2hhZG93LT5l
bmRTaGFkb3dMYXllcihjdHh0KTsKICAgICAgICAgfQotLSAKMS43LjQuMQoK
</data>
<flag name="review"
          id="93321"
          type_id="1"
          status="+"
          setter="kling"
    />
    <flag name="commit-queue"
          id="93322"
          type_id="3"
          status="-"
          setter="kling"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99735</attachid>
            <date>2011-07-05 12:23:16 -0700</date>
            <delta_ts>2011-07-05 14:29:55 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>0001-Qt-Add-shadowblur-support.patch</filename>
            <type>text/plain</type>
            <size>46338</size>
            <attacher name="Igor Trindade Oliveira">igor.oliveira</attacher>
            
              <data encoding="base64">RnJvbSA1OGQ1ZDJjODE3OTk4MzQ3NDczZjQwNjA5NmQzODU2NjkzNDg0OTdiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBJZ29yIE9saXZlaXJhIDxpZ29yLm9saXZlaXJhQG9wZW5ib3Nz
YS5vcmc+CkRhdGU6IFR1ZSwgNSBKdWwgMjAxMSAxNToxNDoxNyAtMDQwMApTdWJqZWN0OiBbUEFU
Q0hdIFtRdF0gQWRkIHNoYWRvd2JsdXIgc3VwcG9ydAoKLS0tCiBTb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNTAgKysrKysrCiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnBybyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KIC4uLi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgIHwgICAgMiArLQog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggfCAgICA3
ICstCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmNwcCAgICB8
ICAgNjcgKysrKysrKystCiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dC
bHVyLmggICAgICB8ICAgMjIgKystCiAuLi4vcGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNo
YWRvd1F0LmNwcCAgICAgICB8ICAxNjggLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAgICAgIHwgICA4MyArKysrKystLS0t
LQogLi4uL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcCAgICAgfCAg
MTU1ICsrKysrKysrKysrLS0tLS0tLS0KIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0ltYWdlUXQuY3BwICAgIHwgICAxMiArLQogLi4uL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvU3RpbGxJbWFnZVF0LmNwcCAgfCAgIDEyICstCiAxMSBmaWxlcyBjaGFuZ2VkLCAyODkg
aW5zZXJ0aW9ucygrKSwgMjk0IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0NvbnRleHRTaGFkb3dRdC5jcHAKCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggYzlmYjQ1OS4uN2IxNzRjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisy
MDExLTA3LTA1ICBJZ29yIE9saXZlaXJhICA8aWdvci5vbGl2ZWlyYUBvcGVuYm9zc2Eub3JnPgor
CisgICAgICAgIFtRdF0gQWRkIFNoYWRvd0JsdXIgc3VwcG9ydAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI5OTcKKworICAgICAgICBVc2UgU2hhZG93
Qmx1ciBpbnN0ZWFkIG9mIENvbnRleHRTaGFkb3cgdG8gaGFuZGxlIGNhbnZhcyBhbmQgY3NzIHNo
YWRvd3MuIFNoYWRvd0JsdXIgaXMKKyAgICAgICAgYSBuZXdlciBhbmQgcGxhdGZvcm0gaW5kZXBl
bmRlbnQgc2hhZG93IGltcGxlbWVudGF0aW9uLgorICAgICAgICBRdCBRUGFpbnRlciBkb2VzIG5v
dCBoYXZlIHN1cHBvcnQgZm9yIHNoYWRvd3Mgc28gaXMgbmVjZXNzYXJ5IHRvIGNyZWF0ZSBhIGxh
eWVyIHN1cHBvcnQKKyAgICAgICAgdG8gZHJhdyBjb21wbGV4IHNoYXBlcyBhbmQgZm9udHMuIFRo
ZSBiZWdpblNoYWRvd0xheWVyIGNyZWF0ZXMgYSB0ZW1wb3Jhcnkgc2hhZG93IGJ1ZmZlcgorICAg
ICAgICB3aGVyZSB0aGUgY2FudmFzIGNhbiBkcmF3IG9udG8gYW5kIGVuZFNoYWRvd0xheWVyIGFw
cGxpZXMgdGhlIGJsdXIgZmlsdGVyLCBjb2xvcnMgdGhlCisgICAgICAgIHNoYWRvdyBidWZmZXIg
YW5kIGRyYXcgdGhlIGZpbmFsIHNoYWRvdyB0byB0aGUgZ3JhcGhpY3MgY29udGV4dC4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmUucHJv
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dC
bHVyOjpTaGFkb3dCbHVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OnNldFNoYWRv
d1ZhbHVlcyk6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjp1cGRhdGVTaGFkb3dCbHVy
VmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYWRvd0JsdXI6OmNsZWFyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYWRvd0JsdXI6OmJsdXJBbmRDb2xvclNoYWRvd0J1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpTaGFkb3dCbHVyOjpiZWdpblNoYWRvd0xheWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYWRvd0JsdXI6OmVuZFNoYWRvd0xheWVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmg6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dCbHVyOjp0eXBlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpkcmF3VGV4dENvbW1vbik6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3
R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRR
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6
Om11c3RVc2VTaGFkb3dCbHVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBs
YXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNh
dmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVz
dG9yZVBsYXRmb3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpm
aWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNoYWRvd0JsdXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0UGxhdGZvcm1TaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9JbWFnZVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcEltYWdlOjpkcmF3KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGlsbEltYWdlUXQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3RpbGxJbWFnZTo6ZHJhdyk6CisKIDIwMTEtMDctMDUgIFByYXRpayBTb2xh
bmtpICA8cHNvbGFua2lAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJu
c3RlaW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IGQ3OGExM2MuLjBlODcxZWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJv
CkBAIC05NzgsNyArOTc4LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udEZhbWlseS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9Db250ZXh0U2hhZG93LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5j
cHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQzRC5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0Zsb2F0UG9pbnQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9h
dFF1YWQuY3BwIFwKQEAgLTE5MzksNyArMTkzOSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRm
b3JtL21vY2svU3BlZWNoSW5wdXRDbGllbnRNb2NrLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0JpdG1hcEltYWdlLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmggXAotICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0NvbnRleHRTaGFkb3cuaCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
U2hhZG93Qmx1ci5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmggXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb25lbnRUcmFuc2Zlci5oIFwKQEAgLTI1MjEs
NyArMjUyMSw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHBhZ2UvcXQvRnJhbWVRdC5jcHAgXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL3F0L1RyYW5zZm9ybWF0aW9uTWF0cml4UXQuY3BwIFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9xdC9Db2xvclF0LmNwcCBcCi0gICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvQ29udGV4dFNoYWRvd1F0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0
LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRmxvYXRQb2ludFF0LmNwcCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRl
eCAzYjc3YjlmLi5mM2Y5OWU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTU4NSw3ICs1ODUsNyBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoSW1hZ2VCdWZmZXIqIGJ1ZmZlciwgY29u
c3QgRmxvYXRSZWN0JiByZQogICAgIGJ1ZmZlci0+Y2xpcCh0aGlzLCByZWN0KTsKIH0KIAotI2lm
ICFVU0UoQ0cpCisjaWYgIVVTRShDRykgJiYgIVBMQVRGT1JNKFFUKQogSW50UmVjdCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBCb3VuZHMoKSBjb25zdAogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaAppbmRleCAzNjBhN2M1Li4wNjNmNzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtNTQsNiArNTQsNyBAQCB0eXBl
ZGVmIGNsYXNzIFdlYkNvcmU6OlN1cmZhY2VPcGVuVkcgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQ7
CiAjaW5jbHVkZSA8UVBhaW50ZXI+CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb250ZXh0
U2hhZG93OworY2xhc3MgU2hhZG93Qmx1cjsKIH0KIHR5cGVkZWYgUVBhaW50ZXIgUGxhdGZvcm1H
cmFwaGljc0NvbnRleHQ7CiAjZWxpZiBQTEFURk9STShXWCkKQEAgLTQ4NiwxMCArNDg3LDE0IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB0YWtlT3duZXJzaGlwT2ZQbGF0Zm9y
bUNvbnRleHQoKTsKICNlbmRpZgogCi0jaWYgUExBVEZPUk0oUVQpIHx8IFVTRShDQUlSTykKKyNp
ZiBVU0UoQ0FJUk8pCiAgICAgICAgIENvbnRleHRTaGFkb3cqIGNvbnRleHRTaGFkb3coKTsKICNl
bmRpZgogCisjaWYgUExBVEZPUk0oUVQpCisgICAgICAgIFNoYWRvd0JsdXIqIHNoYWRvd0JsdXIo
KTsKKyNlbmRpZgorCiAjaWYgVVNFKENBSVJPKQogICAgICAgICBHcmFwaGljc0NvbnRleHQoY2Fp
cm9fdCopOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TaGFkb3dCbHVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1No
YWRvd0JsdXIuY3BwCmluZGV4IDI1ZmM5YWEuLmZhNzM1YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwCkBAIC0xNzYsMTEgKzE3NiwzNCBA
QCBTaGFkb3dCbHVyOjpTaGFkb3dCbHVyKGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBG
bG9hdFNpemUmIG9mZnNldCwgY29uc3QgQwogICAgICwgbV9sYXllckltYWdlKDApCiAgICAgLCBt
X3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGZhbHNlKQogeworICAgIHVwZGF0ZVNoYWRvd0JsdXJW
YWx1ZXMoKTsKK30KKworU2hhZG93Qmx1cjo6U2hhZG93Qmx1cigpCisgICAgOiBtX3R5cGUoTm9T
aGFkb3cpCisgICAgLCBtX2JsdXJSYWRpdXMoMCwgMCkKKyAgICAsIG1fc2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMoZmFsc2UpCit7Cit9CisKK3ZvaWQgU2hhZG93Qmx1cjo6c2V0U2hhZG93VmFsdWVz
KGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25zdCBGbG9hdFNpemUmIG9mZnNldCwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIGJvb2wgaWdub3JlVHJhbnNmb3Jt
cykKK3sKKyAgICBtX2JsdXJSYWRpdXMgPSByYWRpdXM7CisgICAgbV9vZmZzZXQgPSBvZmZzZXQ7
CisgICAgbV9jb2xvciA9IGNvbG9yOworICAgIG1fY29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7Cisg
ICAgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyA9IGlnbm9yZVRyYW5zZm9ybXM7CisKKyAgICB1
cGRhdGVTaGFkb3dCbHVyVmFsdWVzKCk7Cit9CisKK3ZvaWQgU2hhZG93Qmx1cjo6dXBkYXRlU2hh
ZG93Qmx1clZhbHVlcygpCit7CiAgICAgLy8gTGltaXQgYmx1ciByYWRpdXMgdG8gMTI4IHRvIGF2
b2lkIGxvdHMgb2YgdmVyeSBleHBlbnNpdmUgYmx1cnJpbmcuCiAgICAgbV9ibHVyUmFkaXVzID0g
bV9ibHVyUmFkaXVzLnNocnVua1RvKEZsb2F0U2l6ZSgxMjgsIDEyOCkpOwogCiAgICAgLy8gVGhl
IHR5cGUgb2Ygc2hhZG93IGlzIGRlY2lkZWQgYnkgdGhlIGJsdXIgcmFkaXVzLCBzaGFkb3cgb2Zm
c2V0LCBhbmQgc2hhZG93IGNvbG9yLgotICAgIGlmICghbV9jb2xvci5pc1ZhbGlkKCkgfHwgIWNv
bG9yLmFscGhhKCkpIHsKKyAgICBpZiAoIW1fY29sb3IuaXNWYWxpZCgpIHx8ICFtX2NvbG9yLmFs
cGhhKCkpIHsKICAgICAgICAgLy8gQ2FuJ3QgcGFpbnQgdGhlIHNoYWRvdyB3aXRoIGludmFsaWQg
b3IgaW52aXNpYmxlIGNvbG9yLgogICAgICAgICBtX3R5cGUgPSBOb1NoYWRvdzsKICAgICB9IGVs
c2UgaWYgKG1fYmx1clJhZGl1cy53aWR0aCgpID4gMCB8fCBtX2JsdXJSYWRpdXMuaGVpZ2h0KCkg
PiAwKSB7CkBAIC0yMzcsNiArMjYwLDE0IEBAIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUxvYmVzKGlu
dCBsb2Jlc1tdWzJdLCBmbG9hdCBibHVyUmFkaXVzLCBib29sIHNoYWRvd3NJZ25vcmVUCiAgICAg
fQogfQogCit2b2lkIFNoYWRvd0JsdXI6OmNsZWFyKCkKK3sKKyAgICBtX3R5cGUgPSBOb1NoYWRv
dzsKKyAgICBtX2NvbG9yID0gQ29sb3IoKTsKKyAgICBtX2JsdXJSYWRpdXMgPSBGbG9hdFNpemUo
KTsKKyAgICBtX29mZnNldCA9IEZsb2F0U2l6ZSgpOworfQorCiB2b2lkIFNoYWRvd0JsdXI6OmJs
dXJMYXllckltYWdlKHVuc2lnbmVkIGNoYXIqIGltYWdlRGF0YSwgY29uc3QgSW50U2l6ZSYgc2l6
ZSwgaW50IHJvd1N0cmlkZSkKIHsKICAgICBjb25zdCBpbnQgY2hhbm5lbHNbNF0gPSB7IDMsIDAs
IDEsIDMgfTsKQEAgLTgyOCw5ICs4NTksNDMgQEAgdm9pZCBTaGFkb3dCbHVyOjpibHVyQW5kQ29s
b3JTaGFkb3dCdWZmZXIoY29uc3QgSW50U2l6ZSYgdGVtcGxhdGVTaXplKQogCiAgICAgLy8gTWFz
ayB0aGUgaW1hZ2Ugd2l0aCB0aGUgc2hhZG93IGNvbG9yLgogICAgIEdyYXBoaWNzQ29udGV4dCog
c2hhZG93Q29udGV4dCA9IG1fbGF5ZXJJbWFnZS0+Y29udGV4dCgpOworICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqc2hhZG93Q29udGV4dCk7CiAgICAgc2hhZG93Q29u
dGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZVNvdXJjZUluKTsKICAgICBzaGFk
b3dDb250ZXh0LT5zZXRGaWxsQ29sb3IobV9jb2xvciwgbV9jb2xvclNwYWNlKTsKICAgICBzaGFk
b3dDb250ZXh0LT5maWxsUmVjdChGbG9hdFJlY3QoMCwgMCwgdGVtcGxhdGVTaXplLndpZHRoKCks
IHRlbXBsYXRlU2l6ZS5oZWlnaHQoKSkpOwogfQogCitHcmFwaGljc0NvbnRleHQqIFNoYWRvd0Js
dXI6OmJlZ2luU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0ICpjb250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGxheWVyQXJlYSkKK3sKKyAgICBhZGp1c3RCbHVyUmFkaXVzKGNvbnRleHQpOworCisg
ICAgSW50UmVjdCBsYXllclJlY3QgPSBjYWxjdWxhdGVMYXllckJvdW5kaW5nUmVjdChjb250ZXh0
LCBsYXllckFyZWEsIGNvbnRleHQtPmNsaXBCb3VuZHMoKSk7CisKKyAgICBpZiAobGF5ZXJSZWN0
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX2xheWVySW1hZ2UgPSBTY3Jh
dGNoQnVmZmVyOjpzaGFyZWQoKS5nZXRTY3JhdGNoQnVmZmVyKGxheWVyUmVjdC5zaXplKCkpOwor
CisgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gbV9sYXllckltYWdlLT5jb250
ZXh0KCk7CisgICAgc2hhZG93Q29udGV4dC0+c2F2ZSgpOworICAgIHNoYWRvd0NvbnRleHQtPmNs
ZWFyUmVjdChGbG9hdFJlY3QoMCwgMCwgbV9sYXllclNpemUud2lkdGgoKSwgbV9sYXllclNpemUu
aGVpZ2h0KCkpKTsKKworICAgIHNoYWRvd0NvbnRleHQtPnRyYW5zbGF0ZShtX2xheWVyQ29udGV4
dFRyYW5zbGF0aW9uKTsKKyAgICByZXR1cm4gc2hhZG93Q29udGV4dDsKK30KKwordm9pZCBTaGFk
b3dCbHVyOjplbmRTaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCit7CisgICAg
bV9sYXllckltYWdlLT5jb250ZXh0KCktPnJlc3RvcmUoKTsKKworICAgIGJsdXJBbmRDb2xvclNo
YWRvd0J1ZmZlcihleHBhbmRlZEludFNpemUobV9sYXllclNpemUpKTsKKyAgICBHcmFwaGljc0Nv
bnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZSgqY29udGV4dCk7CisKKyAgICBjb250ZXh0LT5jbGVh
clNoYWRvdygpOworICAgIGNvbnRleHQtPmRyYXdJbWFnZUJ1ZmZlcihtX2xheWVySW1hZ2UsIENv
bG9yU3BhY2VEZXZpY2VSR0IsIHJvdW5kZWRJbnRQb2ludChtX2xheWVyT3JpZ2luKSwgSW50UmVj
dCgwLCAwLCBtX2xheWVyU2l6ZS53aWR0aCgpLCBtX2xheWVyU2l6ZS5oZWlnaHQoKSksIGNvbnRl
eHQtPmNvbXBvc2l0ZU9wZXJhdGlvbigpKTsKKworICAgIG1fbGF5ZXJJbWFnZSA9IDA7CisgICAg
U2NyYXRjaEJ1ZmZlcjo6c2hhcmVkKCkuc2NoZWR1bGVTY3JhdGNoQnVmZmVyUHVyZ2UoKTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2hhZG93Qmx1ci5oCmluZGV4IDIwMmZmM2QuLjk5ZWVhNTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaGFkb3dCbHVyLmgKQEAgLTQ0LDE3ICs0NCwzNCBA
QCBjbGFzcyBJbWFnZUJ1ZmZlcjsKIGNsYXNzIFNoYWRvd0JsdXIgewogICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFNoYWRvd0JsdXIpOwogcHVibGljOgorICAgIGVudW0gU2hhZG93VHlwZSB7Cisg
ICAgICAgIE5vU2hhZG93LAorICAgICAgICBTb2xpZFNoYWRvdywKKyAgICAgICAgQmx1clNoYWRv
dworICAgIH07CisKICAgICBTaGFkb3dCbHVyKGNvbnN0IEZsb2F0U2l6ZSYgcmFkaXVzLCBjb25z
dCBGbG9hdFNpemUmIG9mZnNldCwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKKyAgICBTaGFk
b3dCbHVyKCk7CisKKyAgICB2b2lkIHNldFNoYWRvd1ZhbHVlcyhjb25zdCBGbG9hdFNpemUmLCBj
b25zdCBGbG9hdFNpemUmICwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlLCBib29sIGlnbm9yZVRy
YW5zZm9ybXMgPSBmYWxzZSk7CiAKICAgICB2b2lkIHNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KGJvb2wgaWdub3JlVHJhbnNmb3JtcykgeyBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gaWdu
b3JlVHJhbnNmb3JtczsgfQogICAgIGJvb2wgc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSBjb25z
dCB7IHJldHVybiBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOyB9CiAKKyAgICBHcmFwaGljc0Nv
bnRleHQqIGJlZ2luU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0
JiBsYXllckFyZWEpOworICAgIHZvaWQgZW5kU2hhZG93TGF5ZXIoR3JhcGhpY3NDb250ZXh0Kik7
CisKICAgICB2b2lkIGRyYXdSZWN0U2hhZG93KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IFJvdW5kZWRJbnRSZWN0OjpSYWRpaSYpOwogICAgIHZvaWQgZHJhd0luc2V0
U2hhZG93KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVj
dCYgaG9sZVJlY3QsIGNvbnN0IFJvdW5kZWRJbnRSZWN0OjpSYWRpaSYgaG9sZVJhZGlpKTsKIAog
ICAgIHZvaWQgYmx1ckxheWVySW1hZ2UodW5zaWduZWQgY2hhciosIGNvbnN0IEludFNpemUmLCBp
bnQgc3RyaWRlKTsKIAorICAgIHZvaWQgY2xlYXIoKTsKKworICAgIFNoYWRvd1R5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogcHJpdmF0ZToKKyAgICB2b2lkIHVwZGF0ZVNoYWRv
d0JsdXJWYWx1ZXMoKTsKKwogICAgIHZvaWQgZHJhd1NoYWRvd0J1ZmZlcihHcmFwaGljc0NvbnRl
eHQqKTsKIAogICAgIHZvaWQgYWRqdXN0Qmx1clJhZGl1cyhHcmFwaGljc0NvbnRleHQqKTsKQEAg
LTgwLDExICs5Nyw2IEBAIHByaXZhdGU6CiAgICAgCiAgICAgSW50U2l6ZSBibHVycmVkRWRnZVNp
emUoKSBjb25zdDsKICAgICAKLSAgICBlbnVtIFNoYWRvd1R5cGUgewotICAgICAgICBOb1NoYWRv
dywKLSAgICAgICAgU29saWRTaGFkb3csCi0gICAgICAgIEJsdXJTaGFkb3cKLSAgICB9OwogICAg
IAogICAgIFNoYWRvd1R5cGUgbV90eXBlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvQ29udGV4dFNoYWRvd1F0LmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggOWViMzFhNy4uMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9Db250ZXh0U2hhZG93UXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTY4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgU2VuY2hhLCBJbmMuCi0gKgot
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiQ29udGV4dFNoYWRvdy5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSA8UVBhaW50ZXI+Ci0jaW5jbHVk
ZSA8UVRpbWVyRXZlbnQ+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gQ29udGV4dFNoYWRv
dyBuZWVkcyBhIHNjcmF0Y2ggaW1hZ2UgYXMgdGhlIGJ1ZmZlciBmb3IgdGhlIGJsdXIgZmlsdGVy
LgotLy8gSW5zdGVhZCBvZiBjcmVhdGluZyBhbmQgZGVzdHJveWluZyB0aGUgYnVmZmVyIGZvciBl
dmVyeSBvcGVyYXRpb24sCi0vLyB3ZSBjcmVhdGUgYSBidWZmZXIgd2hpY2ggd2lsbCBiZSBhdXRv
bWF0aWNhbGx5IHB1cmdlZCB2aWEgYSB0aW1lci4KLQotY2xhc3MgU2hhZG93QnVmZmVyOiBwdWJs
aWMgUU9iamVjdCB7Ci1wdWJsaWM6Ci0gICAgU2hhZG93QnVmZmVyKFFPYmplY3QqIHBhcmVudCA9
IDApOwotCi0gICAgUUltYWdlKiBzY3JhdGNoSW1hZ2UoY29uc3QgUVNpemUmIHNpemUpOwotCi0g
ICAgdm9pZCBzY2hlZHVsZVB1cmdlKCk7Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIHRpbWVyRXZl
bnQoUVRpbWVyRXZlbnQqIGV2ZW50KTsKLQotcHJpdmF0ZToKLSAgICBRSW1hZ2UgaW1hZ2U7Ci0g
ICAgaW50IHRpbWVySWQ7Ci19OwotCi1TaGFkb3dCdWZmZXI6OlNoYWRvd0J1ZmZlcihRT2JqZWN0
KiBwYXJlbnQpCi0gICAgOiBRT2JqZWN0KHBhcmVudCkKLSAgICAsIHRpbWVySWQoLTEpCi17Ci19
Ci0KLVFJbWFnZSogU2hhZG93QnVmZmVyOjpzY3JhdGNoSW1hZ2UoY29uc3QgUVNpemUmIHNpemUp
Ci17Ci0gICAgaW50IHdpZHRoID0gc2l6ZS53aWR0aCgpOwotICAgIGludCBoZWlnaHQgPSBzaXpl
LmhlaWdodCgpOwotCi0gICAgLy8gV2UgZG8gbm90IG5lZWQgdG8gcmVjcmVhdGUgdGhlIGJ1ZmZl
ciBpZiB0aGUgYnVmZmVyIGlzIHJlYXNvbmFibHkKLSAgICAvLyBsYXJnZXIgdGhhbiB0aGUgcmVx
dWVzdGVkIHNpemUuIEhvd2V2ZXIsIGlmIHRoZSByZXF1ZXN0ZWQgc2l6ZSBpcwotICAgIC8vIG11
Y2ggc21hbGxlciB0aGFuIG91ciBidWZmZXIsIHJlZHVjZSBvdXIgYnVmZmVyIHNvIHRoYXQgd2Ug
d2lsbCBub3QKLSAgICAvLyBrZWVwIHRvbyBtYW55IGFsbG9jYXRlZCBwaXhlbHMgZm9yIHRvbyBs
b25nLgotICAgIGlmICghaW1hZ2UuaXNOdWxsKCkgJiYgKGltYWdlLndpZHRoKCkgPiB3aWR0aCkg
JiYgKGltYWdlLmhlaWdodCgpID4gaGVpZ2h0KSkKLSAgICAgICAgaWYgKCgoMiAqIHdpZHRoKSA+
IGltYWdlLndpZHRoKCkpICYmICgoMiAqIGhlaWdodCkgPiBpbWFnZS5oZWlnaHQoKSkpIHsKLSAg
ICAgICAgICAgIGltYWdlLmZpbGwoMCk7Ci0gICAgICAgICAgICByZXR1cm4gJmltYWdlOwotICAg
ICAgICB9Ci0KLSAgICAvLyBSb3VuZCB0byB0aGUgbmVhcmVzdCAzMiBwaXhlbHMgc28gd2UgZG8g
bm90IGdyb3cgdGhlIGJ1ZmZlciBldmVyeXRpbWUKLSAgICAvLyB0aGVyZSBpcyBsYXJnZXIgcmVx
dWVzdCBieSAxIHBpeGVsLgotICAgIHdpZHRoID0gKDEgKyAod2lkdGggPj4gNSkpIDw8IDU7Ci0g
ICAgaGVpZ2h0ID0gKDEgKyAoaGVpZ2h0ID4+IDUpKSA8PCA1OwotCi0gICAgaW1hZ2UgPSBRSW1h
Z2Uod2lkdGgsIGhlaWdodCwgUUltYWdlOjpGb3JtYXRfQVJHQjMyX1ByZW11bHRpcGxpZWQpOwot
ICAgIGltYWdlLmZpbGwoMCk7Ci0gICAgcmV0dXJuICZpbWFnZTsKLX0KLQotdm9pZCBTaGFkb3dC
dWZmZXI6OnNjaGVkdWxlUHVyZ2UoKQotewotICAgIHN0YXRpYyBjb25zdCBkb3VibGUgQnVmZmVy
UHVyZ2VEZWxheSA9IDI7IC8vIHNlY29uZHMKLSAgICBpZiAodGltZXJJZCA+PSAwKQotICAgICAg
ICBraWxsVGltZXIodGltZXJJZCk7Ci0gICAgdGltZXJJZCA9IHN0YXJ0VGltZXIoQnVmZmVyUHVy
Z2VEZWxheSAqIDEwMDApOwotfQotCi12b2lkIFNoYWRvd0J1ZmZlcjo6dGltZXJFdmVudChRVGlt
ZXJFdmVudCogZXZlbnQpCi17Ci0gICAgaWYgKGV2ZW50LT50aW1lcklkKCkgPT0gdGltZXJJZCkg
ewotICAgICAgICBraWxsVGltZXIodGltZXJJZCk7Ci0gICAgICAgIGltYWdlID0gUUltYWdlKCk7
Ci0gICAgfQotICAgIFFPYmplY3Q6OnRpbWVyRXZlbnQoZXZlbnQpOwotfQotCi1RX0dMT0JBTF9T
VEFUSUMoU2hhZG93QnVmZmVyLCBzY3JhdGNoU2hhZG93QnVmZmVyKQotCi1QbGF0Zm9ybUNvbnRl
eHQgQ29udGV4dFNoYWRvdzo6YmVnaW5TaGFkb3dMYXllcihHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UmVjdCYgbGF5ZXJBcmVhKQotewotICAgIC8vIFNldCBtX2JsdXJEaXN0
YW5jZS4KLSAgICBhZGp1c3RCbHVyRGlzdGFuY2UoY29udGV4dCk7Ci0KLSAgICBQbGF0Zm9ybUNv
bnRleHQgcCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotCi0gICAgUVJlY3QgY2xpcFJl
Y3Q7Ci0gICAgaWYgKHAtPmhhc0NsaXBwaW5nKCkpCi0jaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJT
SU9OX0NIRUNLKDQsIDgsIDApCi0gICAgICAgIGNsaXBSZWN0ID0gcC0+Y2xpcEJvdW5kaW5nUmVj
dCgpLnRvQWxpZ25lZFJlY3QoKTsKLSNlbHNlCi0gICAgICAgIGNsaXBSZWN0ID0gcC0+Y2xpcFJl
Z2lvbigpLmJvdW5kaW5nUmVjdCgpOwotI2VuZGlmCi0gICAgZWxzZQotICAgICAgICBjbGlwUmVj
dCA9IHAtPnRyYW5zZm9ybSgpLmludmVydGVkKCkubWFwUmVjdChwLT53aW5kb3coKSk7Ci0KLSAg
ICAvLyBTZXQgbV9sYXllck9yaWdpbiwgbV9sYXllckNvbnRleHRUcmFuc2xhdGlvbiwgbV9zb3Vy
Y2VSZWN0LgotICAgIEludFJlY3QgY2xpcChjbGlwUmVjdC54KCksIGNsaXBSZWN0LnkoKSwgY2xp
cFJlY3Qud2lkdGgoKSwgY2xpcFJlY3QuaGVpZ2h0KCkpOwotICAgIEludFJlY3QgbGF5ZXJSZWN0
ID0gY2FsY3VsYXRlTGF5ZXJCb3VuZGluZ1JlY3QoY29udGV4dCwgbGF5ZXJBcmVhLCBjbGlwKTsK
LQotICAgIC8vIERvbid0IHBhaW50IGlmIHdlIGFyZSB0b3RhbGx5IG91dHNpZGUgdGhlIGNsaXAg
cmVnaW9uLgotICAgIGlmIChsYXllclJlY3QuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIFNoYWRvd0J1ZmZlciogc2hhZG93QnVmZmVyID0gc2NyYXRjaFNoYWRvd0J1ZmZlcigp
OwotICAgIFFJbWFnZSogc2hhZG93SW1hZ2UgPSBzaGFkb3dCdWZmZXItPnNjcmF0Y2hJbWFnZShs
YXllclJlY3Quc2l6ZSgpKTsKLSAgICBtX2xheWVySW1hZ2UgPSBRSW1hZ2UoKnNoYWRvd0ltYWdl
KTsKLQotICAgIG1fbGF5ZXJDb250ZXh0ID0gbmV3IFFQYWludGVyOwotICAgIG1fbGF5ZXJDb250
ZXh0LT5iZWdpbigmbV9sYXllckltYWdlKTsKLSAgICBtX2xheWVyQ29udGV4dC0+c2V0Rm9udChw
LT5mb250KCkpOwotICAgIG1fbGF5ZXJDb250ZXh0LT50cmFuc2xhdGUobV9sYXllckNvbnRleHRU
cmFuc2xhdGlvbik7Ci0gICAgcmV0dXJuIG1fbGF5ZXJDb250ZXh0OwotfQotCi12b2lkIENvbnRl
eHRTaGFkb3c6OmVuZFNoYWRvd0xheWVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKLXsKLSAg
ICBtX2xheWVyQ29udGV4dC0+ZW5kKCk7Ci0gICAgZGVsZXRlIG1fbGF5ZXJDb250ZXh0OwotICAg
IG1fbGF5ZXJDb250ZXh0ID0gMDsKLQotICAgIGlmIChtX3R5cGUgPT0gQmx1clNoYWRvdykgewot
ICAgICAgICBibHVyTGF5ZXJJbWFnZShtX2xheWVySW1hZ2UuYml0cygpLCBJbnRTaXplKG1fbGF5
ZXJJbWFnZS53aWR0aCgpLCBtX2xheWVySW1hZ2UuaGVpZ2h0KCkpLAotICAgICAgICAgICAgICAg
ICAgICAgICBtX2xheWVySW1hZ2UuYnl0ZXNQZXJMaW5lKCkpOwotICAgIH0KLQotICAgIGlmICht
X3R5cGUgIT0gTm9TaGFkb3cpIHsKLSAgICAgICAgLy8gIkNvbG9yaXplIiB3aXRoIHRoZSByaWdo
dCBzaGFkb3cgY29sb3IuCi0gICAgICAgIFFQYWludGVyIHAoJm1fbGF5ZXJJbWFnZSk7Ci0gICAg
ICAgIHAuc2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlvbk1vZGVfU291cmNl
SW4pOwotICAgICAgICBwLmZpbGxSZWN0KG1fbGF5ZXJJbWFnZS5yZWN0KCksIG1fY29sb3Iucmdi
KCkpOwotICAgICAgICBwLmVuZCgpOwotICAgIH0KLQotICAgIGNvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5kcmF3SW1hZ2UobV9sYXllck9yaWdpbiwgbV9sYXllckltYWdlLCBtX3NvdXJjZVJl
Y3QpOwotCi0gICAgc2NyYXRjaFNoYWRvd0J1ZmZlcigpLT5zY2hlZHVsZVB1cmdlKCk7Ci19Ci0K
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRR
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwCmlu
ZGV4IGE1YTE2ZTAuLmEyMTJlZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvRm9udFF0LmNwcApAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgIkZvbnQuaCIK
IAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkNvbnRleHRTaGFkb3cu
aCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlICJGb250RmFsbGJhY2tM
aXN0LmgiCiAjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCkBAIC0zNCw2ICszMyw3IEBACiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNp
bmNsdWRlICJQYXR0ZXJuLmgiCisjaW5jbHVkZSAiU2hhZG93Qmx1ci5oIgogI2luY2x1ZGUgIlRl
eHRSdW4uaCIKIAogI2luY2x1ZGUgPFFCcnVzaD4KQEAgLTE0Miw0MCArMTQyLDQzIEBAIHN0YXRp
YyB2b2lkIGRyYXdUZXh0Q29tbW9uKEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IEZsb2F0CiAgICAgICAgICAgICBRUmVjdEYgYm91bmRpbmdSZWN0KHBvaW50
LngoKSArIHgxLCBwb2ludC55KCkgLSBhc2NlbnQsIHgyIC0geDEsIGZtLmhlaWdodCgpKTsKICAg
ICAgICAgICAgIFFSZWN0RiBjbGlwID0gYm91bmRpbmdSZWN0OwogCi0gICAgICAgICAgICBDb250
ZXh0U2hhZG93KiBjdHhTaGFkb3cgPSBjdHgtPmNvbnRleHRTaGFkb3coKTsKLQotICAgICAgICAg
ICAgaWYgKGN0eFNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KSB7Cisg
ICAgICAgICAgICBTaGFkb3dCbHVyKiBjdHhTaGFkb3cgPSBjdHgtPnNoYWRvd0JsdXIoKTsKKyAg
ICAgICAgICAgIGlmIChjdHhTaGFkb3ctPnR5cGUoKSAhPSBTaGFkb3dCbHVyOjpOb1NoYWRvdykg
eworICAgICAgICAgICAgICAgIGNvbnN0IFFQb2ludEYgc2hhZG93T2Zmc2V0KGN0eC0+c3RhdGUo
KS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQo
KSk7CiAgICAgICAgICAgICAgICAgcXJlYWwgZHgxID0gMCwgZHgyID0gMCwgZHkxID0gMCwgZHky
ID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT5vZmZzZXQoKS54KCkgPiAwKQot
ICAgICAgICAgICAgICAgICAgICBkeDIgPSBjdHhTaGFkb3ctPm9mZnNldCgpLngoKTsKKyAgICAg
ICAgICAgICAgICBpZiAoc2hhZG93T2Zmc2V0LngoKSA+IDApCisgICAgICAgICAgICAgICAgICAg
IGR4MiA9IHNoYWRvd09mZnNldC54KCk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBkeDEgPSAtY3R4U2hhZG93LT5vZmZzZXQoKS54KCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGN0eFNoYWRvdy0+b2Zmc2V0KCkueSgpID4gMCkKLSAgICAgICAgICAgICAgICAgICAg
ZHkyID0gY3R4U2hhZG93LT5vZmZzZXQoKS55KCk7CisgICAgICAgICAgICAgICAgICAgIGR4MSA9
IC1zaGFkb3dPZmZzZXQueCgpOworICAgICAgICAgICAgICAgIGlmIChzaGFkb3dPZmZzZXQueSgp
ID4gMCkKKyAgICAgICAgICAgICAgICAgICAgZHkyID0gc2hhZG93T2Zmc2V0LnkoKTsKICAgICAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGR5MSA9IC1jdHhTaGFkb3ctPm9m
ZnNldCgpLnkoKTsKKyAgICAgICAgICAgICAgICAgICAgZHkxID0gLXNoYWRvd09mZnNldC55KCk7
CiAgICAgICAgICAgICAgICAgLy8gZXhwYW5kIHRoZSBjbGlwIHJlY3QgdG8gaW5jbHVkZSB0aGUg
dGV4dCBzaGFkb3cgYXMgd2VsbAorICAgICAgICAgICAgICAgIGNvbnN0IGZsb2F0IGJsdXJEaXN0
YW5jZSA9IGN0eC0+c3RhdGUoKS5zaGFkb3dCbHVyOwogICAgICAgICAgICAgICAgIGNsaXAuYWRq
dXN0KGR4MSwgZHgyLCBkeTEsIGR5Mik7Ci0gICAgICAgICAgICAgICAgY2xpcC5hZGp1c3QoLWN0
eFNoYWRvdy0+bV9ibHVyRGlzdGFuY2UsIC1jdHhTaGFkb3ctPm1fYmx1ckRpc3RhbmNlLCBjdHhT
aGFkb3ctPm1fYmx1ckRpc3RhbmNlLCBjdHhTaGFkb3ctPm1fYmx1ckRpc3RhbmNlKTsKKyAgICAg
ICAgICAgICAgICBjbGlwLmFkanVzdCgtYmx1ckRpc3RhbmNlLCAtYmx1ckRpc3RhbmNlLCBibHVy
RGlzdGFuY2UsIGJsdXJEaXN0YW5jZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBwLT5z
YXZlKCk7CiAgICAgICAgICAgICBwLT5zZXRDbGlwUmVjdChjbGlwLnRvUmVjdCgpLCBRdDo6SW50
ZXJzZWN0Q2xpcCk7CiAgICAgICAgICAgICBwdC5zZXRZKHB0LnkoKSAtIGFzY2VudCk7CiAKLSAg
ICAgICAgICAgIGlmIChjdHhTaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0U2hhZG93OjpOb1NoYWRv
dykgewotICAgICAgICAgICAgICAgIENvbnRleHRTaGFkb3cqIGN0eFNoYWRvdyA9IGN0eC0+Y29u
dGV4dFNoYWRvdygpOwotICAgICAgICAgICAgICAgIGlmICghY3R4U2hhZG93LT5tdXN0VXNlQ29u
dGV4dFNoYWRvdyhjdHgpKSB7CisgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0g
U2hhZG93Qmx1cjo6Tm9TaGFkb3cpIHsKKyAgICAgICAgICAgICAgICBTaGFkb3dCbHVyKiBjdHhT
aGFkb3cgPSBjdHgtPnNoYWRvd0JsdXIoKTsKKyAgICAgICAgICAgICAgICBpZiAoY3R4U2hhZG93
LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Qmx1clNoYWRvdworICAgICAgICAgICAgICAgICAgICAm
JiAoIWN0eFNoYWRvdy0+c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoKSB8fCBjdHgtPmdldENUTSgp
LmlzSWRlbnRpdHkoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgcC0+c2F2ZSgpOwotICAgICAg
ICAgICAgICAgICAgICBwLT5zZXRQZW4oY3R4U2hhZG93LT5tX2NvbG9yKTsKLSAgICAgICAgICAg
ICAgICAgICAgcC0+dHJhbnNsYXRlKGN0eFNoYWRvdy0+b2Zmc2V0KCkpOworICAgICAgICAgICAg
ICAgICAgICBwLT5zZXRQZW4oY3R4LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKKyAgICAgICAgICAg
ICAgICAgICAgcC0+dHJhbnNsYXRlKFFQb2ludEYoY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC53
aWR0aCgpLCBjdHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgpKSk7CiAgICAgICAgICAg
ICAgICAgICAgIGxpbmUuZHJhdyhwLCBwdCk7CiAgICAgICAgICAgICAgICAgICAgIHAtPnJlc3Rv
cmUoKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBRUGFp
bnRlciogc2hhZG93UGFpbnRlciA9IGN0eFNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHgsIGJv
dW5kaW5nUmVjdCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IGN0eFNo
YWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHgsIGJvdW5kaW5nUmVjdCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBRUGFp
bnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2luY2UgaXQgd2lsbCBiZSBibHVycmVkIGFueXdh
eSwgd2UgZG9uJ3QgY2FyZSBhYm91dCByZW5kZXIgaGludHMuCiAgICAgICAgICAgICAgICAgICAg
ICAgICBzaGFkb3dQYWludGVyLT5zZXRGb250KHAtPmZvbnQoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRQZW4oY3R4U2hhZG93LT5tX2NvbG9yKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldFBlbihjdHgtPnN0YXRlKCkuc2hh
ZG93Q29sb3IpOwogICAgICAgICAgICAgICAgICAgICAgICAgbGluZS5kcmF3KHNoYWRvd1BhaW50
ZXIsIHB0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIGN0eFNoYWRvdy0+ZW5kU2hhZG93TGF5
ZXIoY3R4KTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjAxLDQwICsyMDQsNDMgQEAgc3Rh
dGljIHZvaWQgZHJhd1RleHRDb21tb24oR3JhcGhpY3NDb250ZXh0KiBjdHgsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgRmxvYXQKICAgICBpZiAoY3R4LT50ZXh0RHJhd2luZ01vZGUoKSAmIFRl
eHRNb2RlU3Ryb2tlKQogICAgICAgICB0ZXh0U3Ryb2tlUGF0aC5hZGRUZXh0KHB0LCBmb250LCBz
dHJpbmcpOwogCi0gICAgQ29udGV4dFNoYWRvdyogY3R4U2hhZG93ID0gY3R4LT5jb250ZXh0U2hh
ZG93KCk7Ci0gICAgaWYgKGN0eFNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hh
ZG93KSB7CisgICAgU2hhZG93Qmx1ciogY3R4U2hhZG93ID0gY3R4LT5zaGFkb3dCbHVyKCk7Cisg
ICAgaWYgKGN0eC0+aGFzU2hhZG93KCkgJiYgY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1
cjo6Tm9TaGFkb3cpIHsKICAgICAgICAgaWYgKGN0eC0+dGV4dERyYXdpbmdNb2RlKCkgJiBUZXh0
TW9kZUZpbGwpIHsKLSAgICAgICAgICAgIGlmIChjdHhTaGFkb3ctPm1fdHlwZSAhPSBDb250ZXh0
U2hhZG93OjpCbHVyU2hhZG93KSB7CisgICAgICAgICAgICBpZiAoY3R4U2hhZG93LT50eXBlKCkg
IT0gU2hhZG93Qmx1cjo6Qmx1clNoYWRvdykgewogICAgICAgICAgICAgICAgIHAtPnNhdmUoKTsK
LSAgICAgICAgICAgICAgICBwLT5zZXRQZW4oY3R4U2hhZG93LT5tX2NvbG9yKTsKLSAgICAgICAg
ICAgICAgICBwLT50cmFuc2xhdGUoY3R4U2hhZG93LT5vZmZzZXQoKSk7CisgICAgICAgICAgICAg
ICAgcC0+c2V0UGVuKGN0eC0+c3RhdGUoKS5zaGFkb3dDb2xvcik7CisgICAgICAgICAgICAgICAg
cC0+dHJhbnNsYXRlKFFQb2ludEYoY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC53aWR0aCgpLCBj
dHgtPnN0YXRlKCkuc2hhZG93T2Zmc2V0LmhlaWdodCgpKSk7CiAgICAgICAgICAgICAgICAgcC0+
ZHJhd1RleHQocHQsIHN0cmluZywgZmxhZ3MsIHJ1bi5leHBhbnNpb24oKSk7CiAgICAgICAgICAg
ICAgICAgcC0+cmVzdG9yZSgpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICBRRm9udE1ldHJpY3MgZm0oZm9udCk7CiAgICAgICAgICAgICAgICAgUVJlY3RGIGJvdW5kaW5n
UmVjdChwdC54KCksIHBvaW50LnkoKSAtIGZtLmFzY2VudCgpLCBmbS53aWR0aChzdHJpbmcsIC0x
LCBmbGFncyksIGZtLmhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93
UGFpbnRlciA9IGN0eFNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHgsIGJvdW5kaW5nUmVjdCk7
Ci0gICAgICAgICAgICAgICAgaWYgKHNoYWRvd1BhaW50ZXIpIHsKKyAgICAgICAgICAgICAgICBH
cmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBjdHhTaGFkb3ctPmJlZ2luU2hhZG93TGF5
ZXIoY3R4LCBib3VuZGluZ1JlY3QpOworICAgICAgICAgICAgICAgIGlmIChzaGFkb3dDb250ZXh0
KSB7CisgICAgICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93
Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFNpbmNl
IGl0IHdpbGwgYmUgYmx1cnJlZCBhbnl3YXksIHdlIGRvbid0IGNhcmUgYWJvdXQgcmVuZGVyIGhp
bnRzLgogICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRGb250KHAtPmZvbnQo
KSk7Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldFBlbihjdHhTaGFkb3ct
Pm1fY29sb3IpOworICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRQZW4oY3R4
LT5zdGF0ZSgpLnNoYWRvd0NvbG9yKTsKICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRl
ci0+ZHJhd1RleHQocHQsIHN0cmluZywgZmxhZ3MsIHJ1bi5leHBhbnNpb24oKSk7CiAgICAgICAg
ICAgICAgICAgICAgIGN0eFNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIoY3R4KTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY3R4LT50ZXh0RHJhd2lu
Z01vZGUoKSAmIFRleHRNb2RlU3Ryb2tlKSB7Ci0gICAgICAgICAgICBpZiAoY3R4U2hhZG93LT5t
X3R5cGUgIT0gQ29udGV4dFNoYWRvdzo6Qmx1clNoYWRvdykgewotICAgICAgICAgICAgICAgIHAt
PnRyYW5zbGF0ZShjdHhTaGFkb3ctPm9mZnNldCgpKTsKLSAgICAgICAgICAgICAgICBwLT5zdHJv
a2VQYXRoKHRleHRTdHJva2VQYXRoLCBRUGVuKGN0eFNoYWRvdy0+bV9jb2xvcikpOwotICAgICAg
ICAgICAgICAgIHAtPnRyYW5zbGF0ZSgtY3R4U2hhZG93LT5vZmZzZXQoKSk7CisgICAgICAgICAg
ICBpZiAoY3R4U2hhZG93LT50eXBlKCkgIT0gU2hhZG93Qmx1cjo6Qmx1clNoYWRvdykgeworICAg
ICAgICAgICAgICAgIGNvbnN0IFFQb2ludEYgc2hhZG93T2Zmc2V0KGN0eC0+c3RhdGUoKS5zaGFk
b3dPZmZzZXQud2lkdGgoKSwgY3R4LT5zdGF0ZSgpLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7Cisg
ICAgICAgICAgICAgICAgcC0+dHJhbnNsYXRlKHNoYWRvd09mZnNldCk7CisgICAgICAgICAgICAg
ICAgcC0+c3Ryb2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBlbihjdHgtPnN0YXRlKCkuc2hhZG93
Q29sb3IpKTsKKyAgICAgICAgICAgICAgICBwLT50cmFuc2xhdGUoLXNoYWRvd09mZnNldCk7CiAg
ICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFFGb250TWV0cmljcyBmbShmb250
KTsKICAgICAgICAgICAgICAgICBRUmVjdEYgYm91bmRpbmdSZWN0KHB0LngoKSwgcG9pbnQueSgp
IC0gZm0uYXNjZW50KCksIGZtLndpZHRoKHN0cmluZywgLTEsIGZsYWdzKSwgZm0uaGVpZ2h0KCkp
OwotICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gY3R4U2hhZG93LT5i
ZWdpblNoYWRvd0xheWVyKGN0eCwgYm91bmRpbmdSZWN0KTsKLSAgICAgICAgICAgICAgICBpZiAo
c2hhZG93UGFpbnRlcikgeworICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93
Q29udGV4dCA9IGN0eFNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjdHgsIGJvdW5kaW5nUmVjdCk7
CisgICAgICAgICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKTsKICAgICAgICAgICAgICAgICAgICAgLy8gU2luY2UgaXQgd2lsbCBiZSBibHVycmVkIGFu
eXdheSwgd2UgZG9uJ3QgY2FyZSBhYm91dCByZW5kZXIgaGludHMuCiAgICAgICAgICAgICAgICAg
ICAgIHNoYWRvd1BhaW50ZXItPnNldEZvbnQocC0+Zm9udCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgc2hhZG93UGFpbnRlci0+c3Ryb2tlUGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBlbihjdHhTaGFk
b3ctPm1fY29sb3IpKTsKKyAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c3Ryb2tl
UGF0aCh0ZXh0U3Ryb2tlUGF0aCwgUVBlbihjdHgtPnN0YXRlKCkuc2hhZG93Q29sb3IpKTsKICAg
ICAgICAgICAgICAgICAgICAgY3R4U2hhZG93LT5lbmRTaGFkb3dMYXllcihjdHgpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTMyOCw3ICszMzQsNyBAQCB2b2lkIEZvbnQ6
OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0
YSogZm9udERhdGEsCiAgICAgQVNTRVJUKCFzaG91bGRTdHJva2UpOwogCiAgICAgLy8gU2hhZG93
ZWQgdGV4dCBzaG91bGQgYWx3YXlzIHRha2UgdGhlIGNvbXBsZXggcGF0aC4KLSAgICBBU1NFUlQo
Y29udGV4dC0+Y29udGV4dFNoYWRvdygpLT5tX3R5cGUgPT0gQ29udGV4dFNoYWRvdzo6Tm9TaGFk
b3cpOworICAgIEFTU0VSVChjb250ZXh0LT5jb250ZXh0U2hhZG93KCktPnR5cGUoKSA9PSBTaGFk
b3dCbHVyOjpOb1NoYWRvdyk7CiAKICAgICBpZiAoIXNob3VsZEZpbGwgJiYgIXNob3VsZFN0cm9r
ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzYxLDcgKzM2Nyw3IEBAIHZvaWQgRm9udDo6ZHJhd0ds
eXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250
RGF0YSwKICAgICBRUGFpbnRlciogcGFpbnRlciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
OwogCiAgICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY29udGV4dC0+Y29udGV4dFNoYWRvdygp
OwotICAgIHN3aXRjaCAoc2hhZG93LT5tX3R5cGUpIHsKKyAgICBzd2l0Y2ggKHNoYWRvdy0+dHlw
ZSgpKSB7CiAgICAgY2FzZSBDb250ZXh0U2hhZG93OjpTb2xpZFNoYWRvdzogewogICAgICAgICBR
UGVuIHByZXZpb3VzUGVuID0gcGFpbnRlci0+cGVuKCk7CiAgICAgICAgIHBhaW50ZXItPnNldFBl
bihzaGFkb3ctPm1fY29sb3IpOwpAQCAtMzc0LDggKzM4MCw5IEBAIHZvaWQgRm9udDo6ZHJhd0ds
eXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250
RGF0YSwKICAgICBjYXNlIENvbnRleHRTaGFkb3c6OkJsdXJTaGFkb3c6IHsKICAgICAgICAgcXJl
YWwgaGVpZ2h0ID0gcmF3Rm9udC5hc2NlbnQoKSArIHJhd0ZvbnQuZGVzY2VudCgpICsgMTsKICAg
ICAgICAgUVJlY3RGIGJvdW5kaW5nUmVjdChwb2ludC54KCksIHBvaW50LnkoKSAtIHJhd0ZvbnQu
YXNjZW50KCksIHdpZHRoLCBoZWlnaHQpOwotICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRl
ciA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcihjb250ZXh0LCBib3VuZGluZ1JlY3QpOwotICAg
ICAgICBpZiAoc2hhZG93UGFpbnRlcikgeworICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRv
d0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIoY29udGV4dCwgYm91bmRpbmdSZWN0
KTsKKyAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgIFFQYWludGVyKiBz
aGFkb3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAg
ICAgICBzaGFkb3dQYWludGVyLT5zZXRQZW4oc2hhZG93LT5tX2NvbG9yKTsKICAgICAgICAgICAg
IHNoYWRvd1BhaW50ZXItPmRyYXdHbHlwaFJ1bihwb2ludCwgcXRHbHlwaHMpOwogICAgICAgICAg
ICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcihjb250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcAppbmRl
eCA3ZjExMmQ0Li41MjFhNDdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCkBAIC00NCwxMyArNDQsMTMg
QEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCi0j
aW5jbHVkZSAiQ29udGV4dFNoYWRvdy5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgog
I2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIK
KyNpbmNsdWRlICJTaGFkb3dCbHVyLmgiCiAjaW5jbHVkZSAiVHJhbnNwYXJlbmN5TGF5ZXIuaCIK
IAogI2luY2x1ZGUgPFFCcnVzaD4KQEAgLTE5Niw4ICsxOTYsMjMgQEAgcHVibGljOgogICAgIElu
dGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHk7CiAgICAgYm9vbCBp
bml0aWFsU21vb3RoUGl4bWFwVHJhbnNmb3JtSGludDsKIAotICAgIENvbnRleHRTaGFkb3cgc2hh
ZG93OwotICAgIFFTdGFjazxDb250ZXh0U2hhZG93PiBzaGFkb3dTdGFjazsKKyAgICBTaGFkb3dC
bHVyKiBzaGFkb3c7CisKKyAgICBib29sIG11c3RVc2VTaGFkb3dCbHVyKCkgY29uc3QKKyAgICB7
CisgICAgICAgIC8vIFdlIGNhbid0IGF2b2lkIFNoYWRvd0JsdXIsIHNpbmNlIHRoZSBzaGFkb3cg
aGFzIGJsdXIuCisgICAgICAgIGlmIChzaGFkb3ctPnR5cGUoKSA9PSBTaGFkb3dCbHVyOjpCbHVy
U2hhZG93KQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIC8vIFdlIGNhbiBhdm9p
ZCBTaGFkb3dCbHVyIGFuZCBvcHRpbWl6ZSwgc2luY2Ugd2UncmUgbm90IGRyYXdpbmcgb24gYQor
ICAgICAgICAvLyBjYW52YXMgYW5kIGJveCBzaGFkb3dzIGFyZSBhZmZlY3RlZCBieSB0aGUgdHJh
bnNmb3JtYXRpb24gbWF0cml4LgorICAgICAgICBpZiAoIXNoYWRvdy0+c2hhZG93c0lnbm9yZVRy
YW5zZm9ybXMoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gV2UgY2Fu
IGF2b2lkIFNoYWRvd0JsdXIsIHNpbmNlIHRoZXJlIGFyZSBubyB0cmFuc2Zvcm1hdGlvbnMgdG8g
YXBwbHkgdG8gdGhlIGNhbnZhcy4KKyAgICAgICAgaWYgKHAoKS0+Y29tYmluZWRUcmFuc2Zvcm0o
KS5pc0lkZW50aXR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIC8vIE90
aGVyd2lzZSwgbm8gY2hhbmNlIGF2b2lkaW5nIFNoYWRvd0JsdXIuCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KIAogICAgIFFSZWN0RiBjbGlwQm91bmRpbmdSZWN0KCkgY29uc3QKICAgICB7
CkBAIC0yMjEsNiArMjM2LDcgQEAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFw
aGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoUVBhaW50ZXIqIHAsIGNvbnMKICAgICAsIHNvbGlk
Q29sb3IoaW5pdGlhbFNvbGlkQ29sb3IpCiAgICAgLCBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5
KEludGVycG9sYXRpb25EZWZhdWx0KQogICAgICwgaW5pdGlhbFNtb290aFBpeG1hcFRyYW5zZm9y
bUhpbnQoZmFsc2UpCisgICAgLCBzaGFkb3cobmV3IFNoYWRvd0JsdXIoKSkKICAgICAsIHBhaW50
ZXIocCkKICAgICAsIHBsYXRmb3JtQ29udGV4dElzT3duZWQoZmFsc2UpCiB7CkBAIC0yNDEsNiAr
MjU3LDcgQEAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQ
bGF0Zm9ybVByaXZhdGUoUVBhaW50ZXIqIHAsIGNvbnMKICAgICBpbml0aWFsU21vb3RoUGl4bWFw
VHJhbnNmb3JtSGludCA9IHBhaW50ZXItPnRlc3RSZW5kZXJIaW50KFFQYWludGVyOjpTbW9vdGhQ
aXhtYXBUcmFuc2Zvcm0pOwogCiAgICAgcGFpbnRlci0+c2V0UmVuZGVySGludChRUGFpbnRlcjo6
QW50aWFsaWFzaW5nLCB0cnVlKTsKKwogfQogCiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZh
dGU6On5HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUoKQpAQCAtMjUwLDYgKzI2Nyw3IEBA
IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZSgpCiAKICAgICBRUGFpbnREZXZpY2UqIGRldmljZSA9IHBhaW50ZXItPmRldmljZSgp
OwogICAgIHBhaW50ZXItPmVuZCgpOworICAgIGRlbGV0ZSBzaGFkb3c7CiAgICAgZGVsZXRlIHBh
aW50ZXI7CiAgICAgZGVsZXRlIGRldmljZTsKIH0KQEAgLTI5Nyw3ICszMTUsNiBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQogICAgIGlmICghbV9kYXRhLT5sYXll
cnMuaXNFbXB0eSgpICYmICFtX2RhdGEtPmxheWVycy50b3AoKS0+YWxwaGFNYXNrLmlzTnVsbCgp
KQogICAgICAgICArK21fZGF0YS0+bGF5ZXJzLnRvcCgpLT5zYXZlQ291bnRlcjsKICAgICBtX2Rh
dGEtPnAoKS0+c2F2ZSgpOwotICAgIG1fZGF0YS0+c2hhZG93U3RhY2sucHVzaChtX2RhdGEtPnNo
YWRvdyk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSgp
CkBAIC0zMDgsMTAgKzMyNSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZv
cm1TdGF0ZSgpCiAKICAgICBtX2RhdGEtPnAoKS0+cmVzdG9yZSgpOwogCi0gICAgaWYgKG1fZGF0
YS0+c2hhZG93U3RhY2suaXNFbXB0eSgpKQotICAgICAgICBtX2RhdGEtPnNoYWRvdyA9IENvbnRl
eHRTaGFkb3coKTsKLSAgICBlbHNlCi0gICAgICAgIG1fZGF0YS0+c2hhZG93ID0gbV9kYXRhLT5z
aGFkb3dTdGFjay5wb3AoKTsKKyAgICBtX2RhdGEtPnNoYWRvdy0+c2V0U2hhZG93VmFsdWVzKEZs
b2F0U2l6ZShtX3N0YXRlLnNoYWRvd0JsdXIsIG1fc3RhdGUuc2hhZG93Qmx1ciksIG1fc3RhdGUu
c2hhZG93T2Zmc2V0LCBtX3N0YXRlLnNoYWRvd0NvbG9yLCBtX3N0YXRlLnNoYWRvd0NvbG9yU3Bh
Y2UsIG1fc3RhdGUuc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpOwogfQogCiAvLyBEcmF3cyBhIGZp
bGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgpAQCAtNDk1LDMxICs1MDksMjkg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAg
cGxhdGZvcm1QYXRoLnNldEZpbGxSdWxlKHRvUXRGaWxsUnVsZShmaWxsUnVsZSgpKSk7CiAKICAg
ICBpZiAoaGFzU2hhZG93KCkpIHsKLSAgICAgICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY29u
dGV4dFNoYWRvdygpOwotICAgICAgICBpZiAoc2hhZG93LT5tdXN0VXNlQ29udGV4dFNoYWRvdyh0
aGlzKSB8fCBtX3N0YXRlLmZpbGxQYXR0ZXJuIHx8IG1fc3RhdGUuZmlsbEdyYWRpZW50KQorICAg
ICAgICBTaGFkb3dCbHVyKiBzaGFkb3cgPSBzaGFkb3dCbHVyKCk7CisgICAgICAgIGlmIChtX2Rh
dGEtPm11c3RVc2VTaGFkb3dCbHVyKCkgfHwgbV9zdGF0ZS5maWxsUGF0dGVybiB8fCBtX3N0YXRl
LmZpbGxHcmFkaWVudCkKICAgICAgICAgewotICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1Bh
aW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgcGxhdGZvcm1QYXRoLmNvbnRy
b2xQb2ludFJlY3QoKSk7Ci0gICAgICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgeworICAgICAg
ICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93LT5iZWdpblNoYWRv
d0xheWVyKHRoaXMsIHBsYXRmb3JtUGF0aC5jb250cm9sUG9pbnRSZWN0KCkpOworICAgICAgICAg
ICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93
UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICAgICAg
ICAgIGlmIChtX3N0YXRlLmZpbGxQYXR0ZXJuKSB7CiAgICAgICAgICAgICAgICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSBhZmZpbmU7Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNl
dE9wYWNpdHkoc3RhdGljX2Nhc3Q8cXJlYWw+KHNoYWRvdy0+bV9jb2xvci5hbHBoYSgpKSAvIDI1
NSk7CiAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxQYXRoKHBsYXRmb3Jt
UGF0aCwgUUJydXNoKG1fc3RhdGUuZmlsbFBhdHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihh
ZmZpbmUpKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtX3N0YXRlLmZpbGxHcmFkaWVu
dCkgewogICAgICAgICAgICAgICAgICAgICBRQnJ1c2ggYnJ1c2goKm1fc3RhdGUuZmlsbEdyYWRp
ZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOwogICAgICAgICAgICAgICAgICAgICBicnVzaC5zZXRU
cmFuc2Zvcm0obV9zdGF0ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7
Ci0gICAgICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldE9wYWNpdHkoc3RhdGljX2Nh
c3Q8cXJlYWw+KHNoYWRvdy0+bV9jb2xvci5hbHBoYSgpKSAvIDI1NSk7CiAgICAgICAgICAgICAg
ICAgICAgIHNoYWRvd1BhaW50ZXItPmZpbGxQYXRoKHBsYXRmb3JtUGF0aCwgYnJ1c2gpOwogICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIFFDb2xvciBzaGFkb3dD
b2xvciA9IHNoYWRvdy0+bV9jb2xvcjsKLSAgICAgICAgICAgICAgICAgICAgc2hhZG93Q29sb3Iu
c2V0QWxwaGFGKHNoYWRvd0NvbG9yLmFscGhhRigpICogcC0+YnJ1c2goKS5jb2xvcigpLmFscGhh
RigpKTsKLSAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFBhdGgocGxhdGZv
cm1QYXRoLCBzaGFkb3dDb2xvcik7CisgICAgICAgICAgICAgICAgICAgIFFDb2xvciBzaGFkb3dD
b2xvciA9IG1fc3RhdGUuc2hhZG93Q29sb3I7CisgICAgICAgICAgICAgICAgICAgIHNoYWRvd1Bh
aW50ZXItPmZpbGxQYXRoKHBsYXRmb3JtUGF0aCwgcC0+YnJ1c2goKS5jb2xvcigpKTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcih0aGlz
KTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIFFQb2ludEYg
b2Zmc2V0ID0gc2hhZG93LT5vZmZzZXQoKTsKKyAgICAgICAgICAgIFFQb2ludEYgb2Zmc2V0KG1f
c3RhdGUuc2hhZG93T2Zmc2V0LndpZHRoKCksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LmhlaWdodCgp
KTsKICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZShvZmZzZXQpOwotICAgICAgICAgICAgUUNvbG9y
IHNoYWRvd0NvbG9yID0gc2hhZG93LT5tX2NvbG9yOworICAgICAgICAgICAgUUNvbG9yIHNoYWRv
d0NvbG9yID0gbV9zdGF0ZS5zaGFkb3dDb2xvcjsKICAgICAgICAgICAgIHNoYWRvd0NvbG9yLnNl
dEFscGhhRihzaGFkb3dDb2xvci5hbHBoYUYoKSAqIHAtPmJydXNoKCkuY29sb3IoKS5hbHBoYUYo
KSk7CiAgICAgICAgICAgICBwLT5maWxsUGF0aChwbGF0Zm9ybVBhdGgsIHNoYWRvd0NvbG9yKTsK
ICAgICAgICAgICAgIHAtPnRyYW5zbGF0ZSgtb2Zmc2V0KTsKQEAgLTU0NywzMCArNTU5LDI5IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAg
cGxhdGZvcm1QYXRoLnNldEZpbGxSdWxlKHRvUXRGaWxsUnVsZShmaWxsUnVsZSgpKSk7CiAKICAg
ICBpZiAoaGFzU2hhZG93KCkpIHsKLSAgICAgICAgQ29udGV4dFNoYWRvdyogc2hhZG93ID0gY29u
dGV4dFNoYWRvdygpOwotICAgICAgICBpZiAoc2hhZG93LT5tdXN0VXNlQ29udGV4dFNoYWRvdyh0
aGlzKSB8fCBtX3N0YXRlLnN0cm9rZVBhdHRlcm4gfHwgbV9zdGF0ZS5zdHJva2VHcmFkaWVudCkK
KyAgICAgICAgU2hhZG93Qmx1ciogc2hhZG93ID0gc2hhZG93Qmx1cigpOworICAgICAgICBpZiAo
bV9kYXRhLT5tdXN0VXNlU2hhZG93Qmx1cigpIHx8IG1fc3RhdGUuc3Ryb2tlUGF0dGVybiB8fCBt
X3N0YXRlLnN0cm9rZUdyYWRpZW50KQogICAgICAgICB7CiAgICAgICAgICAgICBGbG9hdFJlY3Qg
Ym91bmRpbmdSZWN0ID0gcGxhdGZvcm1QYXRoLmNvbnRyb2xQb2ludFJlY3QoKTsKICAgICAgICAg
ICAgIGJvdW5kaW5nUmVjdC5pbmZsYXRlKHBlbi5taXRlckxpbWl0KCkgKyBwZW4ud2lkdGhGKCkp
OwotICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50ZXIgPSBzaGFkb3ctPmJlZ2luU2hh
ZG93TGF5ZXIodGhpcywgYm91bmRpbmdSZWN0KTsKLSAgICAgICAgICAgIGlmIChzaGFkb3dQYWlu
dGVyKSB7CisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFk
b3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgYm91bmRpbmdSZWN0KTsKKyAgICAgICAgICAgIGlm
IChzaGFkb3dDb250ZXh0KSB7CisgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50
ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgICAgICBp
ZiAobV9zdGF0ZS5zdHJva2VHcmFkaWVudCkgewogICAgICAgICAgICAgICAgICAgICBRQnJ1c2gg
YnJ1c2goKm1fc3RhdGUuc3Ryb2tlR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGJydXNoLnNldFRyYW5zZm9ybShtX3N0YXRlLnN0cm9rZUdyYWRpZW50
LT5ncmFkaWVudFNwYWNlVHJhbnNmb3JtKCkpOwogICAgICAgICAgICAgICAgICAgICBRUGVuIHNo
YWRvd1BlbihwZW4pOwogICAgICAgICAgICAgICAgICAgICBzaGFkb3dQZW4uc2V0QnJ1c2goYnJ1
c2gpOwotICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRp
Y19jYXN0PHFyZWFsPihzaGFkb3ctPm1fY29sb3IuYWxwaGEoKSkgLyAyNTUpOwogICAgICAgICAg
ICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zdHJva2VQYXRoKHBsYXRmb3JtUGF0aCwgc2hhZG93
UGVuKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzaGFk
b3dQYWludGVyLT5zZXRPcGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPihtX2RhdGEtPnNoYWRvdy5t
X2NvbG9yLmFscGhhKCkpIC8gMjU1KTsKICAgICAgICAgICAgICAgICAgICAgc2hhZG93UGFpbnRl
ci0+c3Ryb2tlUGF0aChwbGF0Zm9ybVBhdGgsIHBlbik7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIodGhpcyk7CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBRUG9pbnRGIG9mZnNldCA9IHNoYWRvdy0+
b2Zmc2V0KCk7CisgICAgICAgICAgICBRUG9pbnRGIG9mZnNldChtX3N0YXRlLnNoYWRvd09mZnNl
dC53aWR0aCgpLCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSk7CiAgICAgICAgICAgICBw
LT50cmFuc2xhdGUob2Zmc2V0KTsKLSAgICAgICAgICAgIFFDb2xvciBzaGFkb3dDb2xvciA9IHNo
YWRvdy0+bV9jb2xvcjsKKyAgICAgICAgICAgIFFDb2xvciBzaGFkb3dDb2xvciA9IG1fc3RhdGUu
c2hhZG93Q29sb3I7CiAgICAgICAgICAgICBzaGFkb3dDb2xvci5zZXRBbHBoYUYoc2hhZG93Q29s
b3IuYWxwaGFGKCkgKiBwZW4uY29sb3IoKS5hbHBoYUYoKSk7CiAgICAgICAgICAgICBRUGVuIHNo
YWRvd1BlbihwZW4pOwogICAgICAgICAgICAgc2hhZG93UGVuLnNldENvbG9yKHNoYWRvd0NvbG9y
KTsKQEAgLTY2OCw0NCArNjc5LDQyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QpCiAKICAgICBRUGFpbnRlciogcCA9IG1fZGF0YS0+cCgpOwog
ICAgIFFSZWN0RiBub3JtYWxpemVkUmVjdCA9IHJlY3Qubm9ybWFsaXplZCgpOwotICAgIENvbnRl
eHRTaGFkb3cqIHNoYWRvdyA9IGNvbnRleHRTaGFkb3coKTsKKyAgICBTaGFkb3dCbHVyKiBzaGFk
b3cgPSBzaGFkb3dCbHVyKCk7CiAKICAgICBpZiAobV9zdGF0ZS5maWxsUGF0dGVybikgewogICAg
ICAgICBRUGl4bWFwKiBpbWFnZSA9IG1fc3RhdGUuZmlsbFBhdHRlcm4tPnRpbGVJbWFnZSgpLT5u
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgICAgICBRUGFpbnRlciogc2hhZG93UGFp
bnRlciA9IGhhc1NoYWRvdygpID8gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKHRoaXMsIG5vcm1h
bGl6ZWRSZWN0KSA6IDA7Ci0gICAgICAgIGlmIChzaGFkb3dQYWludGVyKSB7CisgICAgICAgIEdy
YXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IGhhc1NoYWRvdygpID8gc2hhZG93LT5iZWdp
blNoYWRvd0xheWVyKHRoaXMsIG5vcm1hbGl6ZWRSZWN0KSA6IDA7CisgICAgICAgIGlmIChzaGFk
b3dDb250ZXh0KSB7CisgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRv
d0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICAgICAgZHJhd1JlcGVhdFBhdHRl
cm4oc2hhZG93UGFpbnRlciwgaW1hZ2UsIG5vcm1hbGl6ZWRSZWN0LCBtX3N0YXRlLmZpbGxQYXR0
ZXJuLT5yZXBlYXRYKCksIG1fc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFkoKSk7Ci0gICAgICAg
ICAgICBzaGFkb3dQYWludGVyLT5zZXRDb21wb3NpdGlvbk1vZGUoUVBhaW50ZXI6OkNvbXBvc2l0
aW9uTW9kZV9Tb3VyY2VJbik7Ci0gICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChu
b3JtYWxpemVkUmVjdCwgc2hhZG93LT5tX2NvbG9yKTsKICAgICAgICAgICAgIHNoYWRvdy0+ZW5k
U2hhZG93TGF5ZXIodGhpcyk7CiAgICAgICAgIH0KICAgICAgICAgZHJhd1JlcGVhdFBhdHRlcm4o
cCwgaW1hZ2UsIG5vcm1hbGl6ZWRSZWN0LCBtX3N0YXRlLmZpbGxQYXR0ZXJuLT5yZXBlYXRYKCks
IG1fc3RhdGUuZmlsbFBhdHRlcm4tPnJlcGVhdFkoKSk7CiAgICAgfSBlbHNlIGlmIChtX3N0YXRl
LmZpbGxHcmFkaWVudCkgewogICAgICAgICBRQnJ1c2ggYnJ1c2goKm1fc3RhdGUuZmlsbEdyYWRp
ZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOwogICAgICAgICBicnVzaC5zZXRUcmFuc2Zvcm0obV9z
dGF0ZS5maWxsR3JhZGllbnQtPmdyYWRpZW50U3BhY2VUcmFuc2Zvcm0oKSk7Ci0gICAgICAgIFFQ
YWludGVyKiBzaGFkb3dQYWludGVyID0gaGFzU2hhZG93KCkgPyBzaGFkb3ctPmJlZ2luU2hhZG93
TGF5ZXIodGhpcywgbm9ybWFsaXplZFJlY3QpIDogMDsKLSAgICAgICAgaWYgKHNoYWRvd1BhaW50
ZXIpIHsKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gaGFzU2hhZG93
KCkgPyBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIodGhpcywgbm9ybWFsaXplZFJlY3QpIDogMDsK
KyAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgIFFQYWludGVyKiBzaGFk
b3dQYWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAg
ICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwgYnJ1c2gpOwotICAgICAg
ICAgICAgc2hhZG93UGFpbnRlci0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3Np
dGlvbk1vZGVfU291cmNlSW4pOwotICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qo
bm9ybWFsaXplZFJlY3QsIHNoYWRvdy0+bV9jb2xvcik7CiAgICAgICAgICAgICBzaGFkb3ctPmVu
ZFNoYWRvd0xheWVyKHRoaXMpOwogICAgICAgICB9CiAgICAgICAgIHAtPmZpbGxSZWN0KG5vcm1h
bGl6ZWRSZWN0LCBicnVzaCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGhhc1NoYWRvdygp
KSB7Ci0gICAgICAgICAgICBpZiAoc2hhZG93LT5tdXN0VXNlQ29udGV4dFNoYWRvdyh0aGlzKSkg
ewotICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5iZWdp
blNoYWRvd0xheWVyKHRoaXMsIG5vcm1hbGl6ZWRSZWN0KTsKLSAgICAgICAgICAgICAgICBpZiAo
c2hhZG93UGFpbnRlcikgewotICAgICAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5zZXRP
cGFjaXR5KHN0YXRpY19jYXN0PHFyZWFsPihzaGFkb3ctPm1fY29sb3IuYWxwaGEoKSkgLyAyNTUp
OworICAgICAgICAgICAgaWYgKG1fZGF0YS0+bXVzdFVzZVNoYWRvd0JsdXIoKSkgeworICAgICAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IHNoYWRvdy0+YmVnaW5T
aGFkb3dMYXllcih0aGlzLCBub3JtYWxpemVkUmVjdCk7CisgICAgICAgICAgICAgICAgaWYgKHNo
YWRvd0NvbnRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgUVBhaW50ZXIqIHNoYWRvd1BhaW50
ZXIgPSBzaGFkb3dDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKICAgICAgICAgICAgICAgICAg
ICAgc2hhZG93UGFpbnRlci0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QsIHAtPmJydXNoKCkpOwog
ICAgICAgICAgICAgICAgICAgICBzaGFkb3ctPmVuZFNoYWRvd0xheWVyKHRoaXMpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gU29s
aWQgcmVjdGFuZ2xlIGZpbGwgd2l0aCBubyBibHVyIHNoYWRvdyBvciB0cmFuc2Zvcm1hdGlvbnMg
YXBwbGllZCBjYW4gYmUgZG9uZQogICAgICAgICAgICAgICAgIC8vIGZhc3RlciB3aXRob3V0IHVz
aW5nIHRoZSBzaGFkb3cgbGF5ZXIgYXQgYWxsLgotICAgICAgICAgICAgICAgIFFDb2xvciBzaGFk
b3dDb2xvciA9IHNoYWRvdy0+bV9jb2xvcjsKKyAgICAgICAgICAgICAgICBRQ29sb3Igc2hhZG93
Q29sb3IgPSBtX3N0YXRlLnNoYWRvd0NvbG9yOwogICAgICAgICAgICAgICAgIHNoYWRvd0NvbG9y
LnNldEFscGhhRihzaGFkb3dDb2xvci5hbHBoYUYoKSAqIHAtPmJydXNoKCkuY29sb3IoKS5hbHBo
YUYoKSk7Ci0gICAgICAgICAgICAgICAgcC0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3QudHJhbnNs
YXRlZChzaGFkb3ctPm9mZnNldCgpKSwgc2hhZG93Q29sb3IpOworICAgICAgICAgICAgICAgIHAt
PmZpbGxSZWN0KG5vcm1hbGl6ZWRSZWN0LnRyYW5zbGF0ZWQoUVBvaW50RihtX3N0YXRlLnNoYWRv
d09mZnNldC53aWR0aCgpLCBtX3N0YXRlLnNoYWRvd09mZnNldC5oZWlnaHQoKSkpLCBzaGFkb3dD
b2xvcik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtNzI0LDE2ICs3MzMsMjAgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29u
c3QgQ29sb3ImIGNvbG9yLCBDb2xvclMKICAgICBRUmVjdEYgbm9ybWFsaXplZFJlY3QgPSByZWN0
Lm5vcm1hbGl6ZWQoKTsKIAogICAgIGlmIChoYXNTaGFkb3coKSkgewotICAgICAgICBDb250ZXh0
U2hhZG93KiBzaGFkb3cgPSBjb250ZXh0U2hhZG93KCk7Ci0gICAgICAgIGlmIChzaGFkb3ctPm11
c3RVc2VDb250ZXh0U2hhZG93KHRoaXMpKSB7Ci0gICAgICAgICAgICBRUGFpbnRlciogc2hhZG93
UGFpbnRlciA9IHNoYWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCBub3JtYWxpemVkUmVjdCk7
Ci0gICAgICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgeworICAgICAgICBTaGFkb3dCbHVyKiBz
aGFkb3cgPSBzaGFkb3dCbHVyKCk7CisgICAgICAgIGlmIChtX2RhdGEtPm11c3RVc2VTaGFkb3dC
bHVyKCkpIHsKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCogc2hhZG93Q29udGV4dCA9IHNo
YWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCBub3JtYWxpemVkUmVjdCk7CisgICAgICAgICAg
ICBpZiAoc2hhZG93Q29udGV4dCkgeworICAgICAgICAgICAgICAgIFFQYWludGVyKiBzaGFkb3dQ
YWludGVyID0gc2hhZG93Q29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgICAgICAgICAg
ICAgc2hhZG93UGFpbnRlci0+c2V0Q29tcG9zaXRpb25Nb2RlKFFQYWludGVyOjpDb21wb3NpdGlv
bk1vZGVfU291cmNlKTsKLSAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxsUmVjdChu
b3JtYWxpemVkUmVjdCwgc2hhZG93LT5tX2NvbG9yKTsKKyAgICAgICAgICAgICAgICBzaGFkb3dQ
YWludGVyLT5maWxsUmVjdChub3JtYWxpemVkUmVjdCwgbV9zdGF0ZS5zaGFkb3dDb2xvcik7CiAg
ICAgICAgICAgICAgICAgc2hhZG93LT5lbmRTaGFkb3dMYXllcih0aGlzKTsKICAgICAgICAgICAg
IH0KLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBwLT5maWxsUmVjdChub3JtYWxpemVkUmVj
dC50cmFuc2xhdGVkKHNoYWRvdy0+b2Zmc2V0KCkpLCBzaGFkb3ctPm1fY29sb3IpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgUUNvbG9yIHNoYWRvd0NvbG9yID0gbV9zdGF0ZS5zaGFk
b3dDb2xvcjsKKyAgICAgICAgICAgIHNoYWRvd0NvbG9yLnNldEFscGhhRihzaGFkb3dDb2xvci5h
bHBoYUYoKSAqIHAtPmJydXNoKCkuY29sb3IoKS5hbHBoYUYoKSk7CisgICAgICAgICAgICBwLT5m
aWxsUmVjdChub3JtYWxpemVkUmVjdC50cmFuc2xhdGVkKFFQb2ludEYobV9zdGF0ZS5zaGFkb3dP
ZmZzZXQud2lkdGgoKSwgbV9zdGF0ZS5zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpKSwgc2hhZG93Q29s
b3IpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcC0+ZmlsbFJlY3Qobm9ybWFsaXplZFJlY3Qs
IG1fZGF0YS0+c29saWRDb2xvcik7CkBAIC03NDgsMTggKzc2MSwyMCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNp
emUmIHRvcExlZgogICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVjdCwgdG9wTGVmdCwgdG9wUmln
aHQsIGJvdHRvbUxlZnQsIGJvdHRvbVJpZ2h0KTsKICAgICBRUGFpbnRlciogcCA9IG1fZGF0YS0+
cCgpOwogICAgIGlmIChoYXNTaGFkb3coKSkgewotICAgICAgICBDb250ZXh0U2hhZG93KiBzaGFk
b3cgPSBjb250ZXh0U2hhZG93KCk7Ci0gICAgICAgIGlmIChzaGFkb3ctPm11c3RVc2VDb250ZXh0
U2hhZG93KHRoaXMpKSB7Ci0gICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNo
YWRvdy0+YmVnaW5TaGFkb3dMYXllcih0aGlzLCByZWN0KTsKLSAgICAgICAgICAgIGlmIChzaGFk
b3dQYWludGVyKSB7CisgICAgICAgIFNoYWRvd0JsdXIqIHNoYWRvdyA9IHNoYWRvd0JsdXIoKTsK
KyAgICAgICAgaWYgKG1fZGF0YS0+bXVzdFVzZVNoYWRvd0JsdXIoKSkgeworICAgICAgICAgICAg
R3JhcGhpY3NDb250ZXh0KiBzaGFkb3dDb250ZXh0ID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVy
KHRoaXMsIHJlY3QpOworICAgICAgICAgICAgaWYgKHNoYWRvd0NvbnRleHQpIHsKKyAgICAgICAg
ICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpOwogICAgICAgICAgICAgICAgIHNoYWRvd1BhaW50ZXItPnNldENvbXBvc2l0aW9u
TW9kZShRUGFpbnRlcjo6Q29tcG9zaXRpb25Nb2RlX1NvdXJjZSk7Ci0gICAgICAgICAgICAgICAg
c2hhZG93UGFpbnRlci0+ZmlsbFBhdGgocGF0aC5wbGF0Zm9ybVBhdGgoKSwgUUNvbG9yKG1fZGF0
YS0+c2hhZG93Lm1fY29sb3IpKTsKKyAgICAgICAgICAgICAgICBzaGFkb3dQYWludGVyLT5maWxs
UGF0aChwYXRoLnBsYXRmb3JtUGF0aCgpLCBRQ29sb3IobV9zdGF0ZS5zaGFkb3dDb2xvcikpOwog
ICAgICAgICAgICAgICAgIHNoYWRvdy0+ZW5kU2hhZG93TGF5ZXIodGhpcyk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwLT50cmFuc2xhdGUobV9kYXRhLT5z
aGFkb3cub2Zmc2V0KCkpOwotICAgICAgICAgICAgcC0+ZmlsbFBhdGgocGF0aC5wbGF0Zm9ybVBh
dGgoKSwgUUNvbG9yKG1fZGF0YS0+c2hhZG93Lm1fY29sb3IpKTsKLSAgICAgICAgICAgIHAtPnRy
YW5zbGF0ZSgtbV9kYXRhLT5zaGFkb3cub2Zmc2V0KCkpOworICAgICAgICAgICAgY29uc3QgUVBv
aW50RiBzaGFkb3dPZmZzZXQobV9zdGF0ZS5zaGFkb3dPZmZzZXQud2lkdGgoKSwgbV9zdGF0ZS5z
aGFkb3dPZmZzZXQuaGVpZ2h0KCkpOworICAgICAgICAgICAgcC0+dHJhbnNsYXRlKHNoYWRvd09m
ZnNldCk7CisgICAgICAgICAgICBwLT5maWxsUGF0aChwYXRoLnBsYXRmb3JtUGF0aCgpLCBRQ29s
b3IobV9zdGF0ZS5zaGFkb3dDb2xvcikpOworICAgICAgICAgICAgcC0+dHJhbnNsYXRlKC1zaGFk
b3dPZmZzZXQpOwogICAgICAgICB9CiAgICAgfQogICAgIHAtPmZpbGxQYXRoKHBhdGgucGxhdGZv
cm1QYXRoKCksIFFDb2xvcihjb2xvcikpOwpAQCAtNzcwLDkgKzc4NSw5IEBAIGJvb2wgR3JhcGhp
Y3NDb250ZXh0OjppblRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3QKICAgICByZXR1cm4gbV9kYXRh
LT5sYXllckNvdW50OwogfQogCi1Db250ZXh0U2hhZG93KiBHcmFwaGljc0NvbnRleHQ6OmNvbnRl
eHRTaGFkb3coKQorU2hhZG93Qmx1ciogR3JhcGhpY3NDb250ZXh0OjpzaGFkb3dCbHVyKCkKIHsK
LSAgICByZXR1cm4gJm1fZGF0YS0+c2hhZG93OworICAgIHJldHVybiBtX2RhdGEtPnNoYWRvdzsK
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgSW50UmVjdCYgcmVjdCkKQEAg
LTc5MCw2ICs4MDUsMTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogCiAgICAgbV9kYXRhLT5wKCktPnNldENsaXBSZWN0KHJlY3QsIFF0OjpJbnRl
cnNlY3RDbGlwKTsKIH0KK0ludFJlY3QgR3JhcGhpY3NDb250ZXh0OjpjbGlwQm91bmRzKCkgY29u
c3QKK3sKKyAgICBRUGFpbnRlciogcCA9IG1fZGF0YS0+cCgpOworICAgIFFSZWN0RiBjbGlwUmVj
dDsKKworICAgIGlmIChwLT5oYXNDbGlwcGluZygpKQorICAgICAgICBjbGlwUmVjdCA9IG1fZGF0
YS0+Y2xpcEJvdW5kaW5nUmVjdCgpOworICAgIGVsc2UKKyAgICAgICAgY2xpcFJlY3QgPSBwLT50
cmFuc2Zvcm0oKS5pbnZlcnRlZCgpLm1hcFJlY3QocC0+d2luZG93KCkpOworCisgICAgcmV0dXJu
IGVuY2xvc2luZ0ludFJlY3QoY2xpcFJlY3QpOworfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgY2xpcFJ1bGUpCiB7CkBAIC05MjYs
NyArOTUzLDcgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBpeGVs
cyhjb25zdCBGbG9hdFJlY3QmIGZyZWN0LCBSb3VuZGluZ00KICAgICByZXR1cm4gRmxvYXRSZWN0
KHJvdW5kZWRPcmlnaW4sIHJvdW5kZWRMb3dlclJpZ2h0IC0gcm91bmRlZE9yaWdpbik7CiB9CiAK
LXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUm
IHNpemUsIGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSkKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIHNpemUs
IGZsb2F0IGJsdXIsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQog
ewogICAgIC8vIFF0IGRvZXNuJ3Qgc3VwcG9ydCBzaGFkb3dzIG5hdGl2ZWx5LCB0aGV5IGFyZSBk
cmF3biBtYW51YWxseSBpbiB0aGUgZHJhdyoKICAgICAvLyBmdW5jdGlvbnMKQEAgLTkzNSwxNiAr
OTYyLDE0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBG
bG9hdFNpemUmIHNpemUsIGZsb2F0IGJsdXIsIGNvbnN0CiAgICAgICAgIC8vIE1lYW5pbmcgdGhh
dCB0aGlzIGdyYXBoaWNzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dAogICAgICAgICAvLyBXZSBmbGlwIHRoZSBoZWlnaHQgc2luY2UgQ0cgYW5kIEhU
TUw1IENhbnZhcyBoYXZlIG9wcG9zaXRlIFkgYXhpcwogICAgICAgICBtX3N0YXRlLnNoYWRvd09m
ZnNldCA9IEZsb2F0U2l6ZShzaXplLndpZHRoKCksIC1zaXplLmhlaWdodCgpKTsKLSAgICAgICAg
bV9kYXRhLT5zaGFkb3cgPSBDb250ZXh0U2hhZG93KGNvbG9yLCBibHVyLCBGbG9hdFNpemUoc2l6
ZS53aWR0aCgpLCAtc2l6ZS5oZWlnaHQoKSkpOwotICAgIH0gZWxzZQotICAgICAgICBtX2RhdGEt
PnNoYWRvdyA9IENvbnRleHRTaGFkb3coY29sb3IsIGJsdXIsIEZsb2F0U2l6ZShzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCkpKTsKKyAgICB9CiAKLSAgICBtX2RhdGEtPnNoYWRvdy5zZXRTaGFk
b3dzSWdub3JlVHJhbnNmb3JtcyhtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKTsKKyAg
ICBtX2RhdGEtPnNoYWRvdy0+c2V0U2hhZG93VmFsdWVzKEZsb2F0U2l6ZShtX3N0YXRlLnNoYWRv
d0JsdXIsIG1fc3RhdGUuc2hhZG93Qmx1ciksIG1fc3RhdGUuc2hhZG93T2Zmc2V0LCBjb2xvciwg
Y29sb3JTcGFjZSwgbV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGVhclBsYXRmb3JtU2hhZG93KCkKIHsKLSAgICBtX2RhdGEtPnNo
YWRvdy5jbGVhcigpOworICAgIG1fZGF0YS0+c2hhZG93LT5jbGVhcigpOwogfQogCiB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6cHVzaFRyYW5zcGFyZW5jeUxheWVySW50ZXJuYWwoY29uc3QgUVJlY3Qg
JnJlY3QsIHFyZWFsIG9wYWNpdHksIFFQaXhtYXAmIGFscGhhTWFzaykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ltYWdlUXQuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VRdC5jcHAKaW5kZXggMGM4Y2U5ZS4uNDFm
ZjhhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1h
Z2VRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSW1hZ2VR
dC5jcHAKQEAgLTM0LDExICszNCwxMSBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgi
CiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJDb250ZXh0U2hhZG93LmgiCiAj
aW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5j
bHVkZSAiSW1hZ2VPYnNlcnZlci5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSAiU2hhZG93Qmx1ci5oIgogI2luY2x1ZGUgIlN0aWxsSW1hZ2VRdC5oIgogI2luY2x1ZGUg
InF3ZWJzZXR0aW5ncy5oIgogCkBAIC0yMjQsMTEgKzIyNCwxMSBAQCB2b2lkIEJpdG1hcEltYWdl
OjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsCiAgICAg
Q29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IGN0eHQtPmNvbXBvc2l0ZU9wZXJh
dGlvbigpOwogICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbighaW1hZ2UtPmhhc0FscGhh
KCkgJiYgb3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlciA/IENvbXBvc2l0ZUNvcHkgOiBvcCk7CiAK
LSAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjdHh0LT5jb250ZXh0U2hhZG93KCk7Ci0gICAg
aWYgKHNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KSB7Ci0gICAgICAg
IFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5iZWdpblNoYWRvd0xheWVyKGN0eHQs
IG5vcm1hbGl6ZWREc3QpOwotICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewotICAgICAgICAg
ICAgc2hhZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVhbD4oc2hhZG93LT5t
X2NvbG9yLmFscGhhKCkpIC8gMjU1KTsKKyAgICBpZiAoY3R4dC0+aGFzU2hhZG93KCkpIHsKKyAg
ICAgICAgU2hhZG93Qmx1ciogc2hhZG93ID0gY3R4dC0+c2hhZG93Qmx1cigpOworICAgICAgICBH
cmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hhZG93TGF5ZXIo
Y3R4dCwgbm9ybWFsaXplZERzdCk7CisgICAgICAgIGlmIChzaGFkb3dDb250ZXh0KSB7CisgICAg
ICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpOwogICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZHJhd1BpeG1hcChub3JtYWxp
emVkRHN0LCAqaW1hZ2UsIG5vcm1hbGl6ZWRTcmMpOwogICAgICAgICAgICAgc2hhZG93LT5lbmRT
aGFkb3dMYXllcihjdHh0KTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJbWFnZVF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L1N0aWxsSW1hZ2VRdC5jcHAKaW5kZXggM2IwODk5NS4uY2IyYTQ0
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU3RpbGxJ
bWFnZVF0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9TdGls
bEltYWdlUXQuY3BwCkBAIC0yOCw5ICsyOCw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiU3RpbGxJbWFnZVF0LmgiCiAKLSNpbmNsdWRlICJDb250ZXh0U2hhZG93LmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUg
IlNoYWRvd0JsdXIuaCIKIAogI2luY2x1ZGUgPFFQYWludGVyPgogCkBAIC03NCwxMSArNzQsMTEg
QEAgdm9pZCBTdGlsbEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxv
YXRSZWN0JiBkc3QsCiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgcHJldmlvdXNPcGVyYXRvciA9IGN0
eHQtPmNvbXBvc2l0ZU9wZXJhdGlvbigpOwogICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlv
bihvcCk7CiAKLSAgICBDb250ZXh0U2hhZG93KiBzaGFkb3cgPSBjdHh0LT5jb250ZXh0U2hhZG93
KCk7Ci0gICAgaWYgKHNoYWRvdy0+bV90eXBlICE9IENvbnRleHRTaGFkb3c6Ok5vU2hhZG93KSB7
Ci0gICAgICAgIFFQYWludGVyKiBzaGFkb3dQYWludGVyID0gc2hhZG93LT5iZWdpblNoYWRvd0xh
eWVyKGN0eHQsIG5vcm1hbGl6ZWREc3QpOwotICAgICAgICBpZiAoc2hhZG93UGFpbnRlcikgewot
ICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+c2V0T3BhY2l0eShzdGF0aWNfY2FzdDxxcmVhbD4o
c2hhZG93LT5tX2NvbG9yLmFscGhhKCkpIC8gMjU1KTsKKyAgICBpZiAoY3R4dC0+aGFzU2hhZG93
KCkpIHsKKyAgICAgICAgU2hhZG93Qmx1ciogc2hhZG93ID0gY3R4dC0+c2hhZG93Qmx1cigpOwor
ICAgICAgICBHcmFwaGljc0NvbnRleHQqIHNoYWRvd0NvbnRleHQgPSBzaGFkb3ctPmJlZ2luU2hh
ZG93TGF5ZXIoY3R4dCwgbm9ybWFsaXplZERzdCk7CisgICAgICAgIGlmIChzaGFkb3dDb250ZXh0
KSB7CisgICAgICAgICAgICBRUGFpbnRlciogc2hhZG93UGFpbnRlciA9IHNoYWRvd0NvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpOwogICAgICAgICAgICAgc2hhZG93UGFpbnRlci0+ZHJhd1BpeG1h
cChub3JtYWxpemVkRHN0LCAqbV9waXhtYXAsIG5vcm1hbGl6ZWRTcmMpOwogICAgICAgICAgICAg
c2hhZG93LT5lbmRTaGFkb3dMYXllcihjdHh0KTsKICAgICAgICAgfQotLSAKMS43LjQuMQoK
</data>

          </attachment>
      

    </bug>

</bugzilla>