<?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>20373</bug_id>
          
          <creation_ts>2008-08-13 14:47:36 -0700</creation_ts>
          <short_desc>GraphicsContext needs to support Gradients and Patterns (to let us get rid of #ifdefs)</short_desc>
          <delta_ts>2008-08-28 05:09:13 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>20520</dependson>
          <blocked>20543</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>hausmann</cc>
    
    <cc>hyatt</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>88437</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-08-13 14:47:36 -0700</bug_when>
    <thetext>This are only some idears, which need the patches of https://bugs.webkit.org/show_bug.cgi?id=20351. The main idear is to avoid
#ifdefs and to draw Canvas by GraphicsContext.

Changes in CanvasRenderingContext2D:
void CanvasRenderingContext2D::fillRect(float x, float y, float width, float height)
{
    if (!validateRectForCanvas(x, y, width, height))
        return;

    GraphicsContext* c = drawingContext();
    if (!c)
        return;

    FloatRect rect(x, y, width, height);
    willDraw(rect);

    if (state().m_fillStyle-&gt;canvasGradient()) {
        applyFillGradient();
    else if (state().m_fillStyle-&gt;pattern())
        applyFillPattern();
    else
        c-&gt;fillRect(rect);       // a new function in GC, should use fillColor()
}
// the same for strokeRect()

//like applyFillPattern() in the patch https://bugs.webkit.org/attachment.cgi?id=22764
void CanvasRenderingContext2D::applyFillGradient()
{
    GraphicsContext* c = drawingContext();
    if (!c)
        return;

    // needs some convertations to match or use CanvasGradient* and add an extra function to GC
    CanvasPattern* pattern = state().m_fillStyle-&gt;canvasGradient()-&gt;gradient();
    if (!pattern)
        return;

    c-&gt;applyFillPattern(pattern-&gt;pattern());
    state().m_appliedFillGradient = true;
}

We could add a function for pathes strokePath() in GC to draw lines and shapes by GC.
I&apos;ll make a patch later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88497</commentid>
    <comment_count>1</comment_count>
      <attachid>22798</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-08-14 14:56:00 -0700</bug_when>
    <thetext>Created attachment 22798
Canvas fillRect

An example for canvas fillRect(); It works for cairo, but I&apos;m not sure if it works for Cg too. I haven&apos;t modified Qt yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88600</commentid>
    <comment_count>2</comment_count>
      <attachid>22823</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-08-15 12:41:57 -0700</bug_when>
    <thetext>Created attachment 22823
Canvas-Clean-up

It doesn&apos;t work very well. I submitted it to show the problems.
Cairo and Cg differs in many things and it&apos;s difficult to make the draw-operation plattform-independent.

The main-problem is, that in Cg you set the fill/stroke color to the beginning and in Cairo short before the draw-operation (because Cairo makes no differnce between fill and stroke colors).

I tried to re-use the concept of my first idear, but run in to problems by the fill- and stroke-operation with patterns. strokeRect differs too stroke and fillRect differs to fill a bit to much. Not sure if the first idear was good enough, because you have to insert more (sometimes nearly senseless) functions to GraphicsContext to make it work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88668</commentid>
    <comment_count>3</comment_count>
      <attachid>22841</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-08-17 05:34:51 -0700</bug_when>
    <thetext>Created attachment 22841
Canvas CleanUp

Added some functions to GraphisContext to make it platform-independent. Didn&apos;t find a way to limit it to less functions because of the problems I discribed in the posting before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88692</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-17 14:50:17 -0700</bug_when>
    <thetext>Wow.  I think this is a really great start.  I think I need to think a little bit more about what methods should be added to GraphicsContext and which should be added to Pattern or Gradient instead, and what methods on GraphicsContext should take a Pattern* or Gradient* or if GraphicsContext should hold a Pattern/Gradient as part of its current state.  But this is a fantastic start.

Lets talk about this more over irc on monday.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88751</commentid>
    <comment_count>5</comment_count>
      <attachid>22857</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-08-18 14:06:34 -0700</bug_when>
    <thetext>Created attachment 22857
bad patch

A bad patch to show my problems of implementing a gradient function to GC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89085</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-22 01:08:36 -0700</bug_when>
    <thetext>We talked about this over IRC.  I propose we move to the following model:

void setStokePattern(const Pattern&amp;);
void setStokeGradient(const Gradient&amp;);

void setFillPattern(const Pattern&amp;);
void setFillGradient(const Gradient&amp;);

void fillPath();
void strokePath();
void drawPath(); // fills and strokes, convenience and speed.  CG has a fast-path for this.

// more convenience and speed.  CG has a fast-path for rects-only (callers also don&apos;t have to bother with Path objects then)
void fillRect(const FloatRect&amp;);
void strokeRect(const FloatRect&amp;);
void drawRect(const FloatRect&amp;);


Internally, the GraphicsContextState stack gets some extra variables:

Pattern m_fillPattern;
Gradient m_fillGradient;
Pattern m_strokePattern;
Gradient m_strokeGradient;

enum ColorSpace {
  SolidColorSpace,
  PatternColorSpace,
  GradientColorSpace
}

ColorSpace m_fillColorSpace;
ColorSpace m_strokeColorSpace;

I am slightly concerned that adding 2 patterns and 2 gradient objects to each GraphicsContext state might make them more expensive to work with.   Especially since each new state inherits from the previous.  We may need to move to some sort of RefCounted model for Pattern and Gradient over time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89086</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-22 01:16:42 -0700</bug_when>
    <thetext>As we talked about over IRC, since Cairo doesn&apos;t support saving separate stroke and fill colors on the context, it obviously doesn&apos;t have a &quot;draw&quot; fast path.

Cairo GraphicsContext code needs to move to this model anyway:

someFillMethod()
{
// grab the current fill color off of the GraphicContextState
// set it as the &quot;cairo source&quot;
// do the actual fill
}

instead of how CG works, which is to just pipe the &quot;set fill color&quot; calls straight down into the CoreGraphics context.

Also, because Cairo doesn&apos;t have a built-in fast-path for &quot;draw&quot;, Cairo (and any other graphics library which doesn&apos;t support simultaneous fill + stroke) can just write:

GraphicsContext::drawPath()
{
    fillPath();
    strokePath();
}
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89103</commentid>
    <comment_count>8</comment_count>
      <attachid>22934</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-22 07:13:42 -0700</bug_when>
    <thetext>Created attachment 22934
A start on the patch for krit

 WebCore/WebCore.xcodeproj/project.pbxproj          |    4 +
 .../js/JSCanvasRenderingContext2DCustom.cpp        |    4 +-
 WebCore/css/CSSGradientValue.cpp                   |   10 +-
 WebCore/css/CSSGradientValue.h                     |    2 +-
 WebCore/html/CanvasGradient.cpp                    |    4 +-
 WebCore/html/CanvasGradient.h                      |    8 +-
 WebCore/html/CanvasPattern.cpp                     |    2 +-
 WebCore/html/CanvasPattern.h                       |    6 +-
 WebCore/html/CanvasRenderingContext2D.cpp          |  195 +-------------------
 WebCore/html/CanvasRenderingContext2D.h            |    6 -
 WebCore/html/CanvasStyle.cpp                       |    6 +
 WebCore/html/CanvasStyle.h                         |    3 +-
 WebCore/platform/graphics/GeneratedImage.h         |   10 +-
 WebCore/platform/graphics/Generator.h              |    4 +-
 WebCore/platform/graphics/Gradient.h               |   14 ++-
 WebCore/platform/graphics/GraphicsContext.cpp      |   38 +++-
 WebCore/platform/graphics/GraphicsContext.h        |   38 +++--
 WebCore/platform/graphics/GraphicsContextPrivate.h |   31 +++-
 WebCore/platform/graphics/Pattern.h                |   15 +-
 .../graphics/cairo/GraphicsContextCairo.cpp        |   17 ++-
 WebCore/platform/graphics/cg/GraphicsContextCG.cpp |   39 ++--
 WebCore/platform/graphics/qt/GraphicsContextQt.cpp |   28 ++--
 WebCore/platform/graphics/wx/GraphicsContextWx.cpp |   16 +-
 23 files changed, 204 insertions(+), 296 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89124</commentid>
    <comment_count>9</comment_count>
      <attachid>22940</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-22 10:12:08 -0700</bug_when>
    <thetext>Created attachment 22940
A bit further with the patch for krit

 WebCore/WebCore.xcodeproj/project.pbxproj          |    4 +
 .../js/JSCanvasRenderingContext2DCustom.cpp        |    4 +-
 WebCore/css/CSSGradientValue.cpp                   |   10 +-
 WebCore/css/CSSGradientValue.h                     |    2 +-
 WebCore/html/CanvasGradient.cpp                    |    4 +-
 WebCore/html/CanvasGradient.h                      |    8 +-
 WebCore/html/CanvasPattern.cpp                     |    2 +-
 WebCore/html/CanvasPattern.h                       |    6 +-
 WebCore/html/CanvasRenderingContext2D.cpp          |  195 +-------------------
 WebCore/html/CanvasRenderingContext2D.h            |    6 -
 WebCore/html/CanvasStyle.cpp                       |    6 +
 WebCore/html/CanvasStyle.h                         |    3 +-
 WebCore/platform/graphics/GeneratedImage.h         |   10 +-
 WebCore/platform/graphics/Generator.h              |    4 +-
 WebCore/platform/graphics/Gradient.h               |   14 ++-
 WebCore/platform/graphics/GraphicsContext.cpp      |   38 +++-
 WebCore/platform/graphics/GraphicsContext.h        |   38 +++--
 WebCore/platform/graphics/GraphicsContextPrivate.h |   33 +++-
 WebCore/platform/graphics/Path.h                   |    8 +-
 WebCore/platform/graphics/Pattern.h                |   15 +-
 .../graphics/cairo/GraphicsContextCairo.cpp        |   17 ++-
 WebCore/platform/graphics/cg/GraphicsContextCG.cpp |  107 ++++++++++--
 WebCore/platform/graphics/qt/GraphicsContextQt.cpp |   28 ++--
 WebCore/platform/graphics/wx/GraphicsContextWx.cpp |   16 +-
 24 files changed, 281 insertions(+), 297 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89143</commentid>
    <comment_count>10</comment_count>
      <attachid>22946</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-08-22 14:24:16 -0700</bug_when>
    <thetext>Created attachment 22946
update of GCCairo

The second part of the patch. For Cairo this time. setPlatformStroke* and setPlatformFill* are not included as methods (they perhaps don&apos;t get it to the final patch).

Gradients and patterns are black. Seems to be a problem with the patch before (but Gradients in CSS work) and should also happen to the other platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89160</commentid>
    <comment_count>11</comment_count>
      <attachid>22950</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-08-23 00:26:56 -0700</bug_when>
    <thetext>Created attachment 22950
Colors from future

Canvas takes fillSytle() from the future, if the current fillStyle() is broken.

The attachement discribes the problem: There should be 3 rects. The first is the one on the right/bottom. And should be red.
The second rect on the right/top should be filled with fillStyle = &quot;#f00)&quot;; but fillstyle is broken, therefore it should use the old fillstyle of the first rect (webkit without the patch fill it transparent).
And after the fill-operation of the second rect I initialise a new fillstyle, blue (this time valid). And the third rect on the left side should be blue.

But with the patch, the rect with the invalid fillStyle gets rendered blue too. Webkit has an oracle now and can use fillstyles in the future :-).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89164</commentid>
    <comment_count>12</comment_count>
      <attachid>22951</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-08-23 02:05:43 -0700</bug_when>
    <thetext>Created attachment 22951
Combination of the last 2 patches

This is only a combination of the last 2 patches, as well as a fix of gradients and pattern.
&quot;stroke&quot; and &quot;fill&quot; was mixed up in CanvasStyle.cpp.

The fillStyle() (as well as strokeStyle()) problem discribed above can perhaps  be solved in another bug-report, because the way it is handled now is wrong too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89166</commentid>
    <comment_count>13</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-08-23 02:56:17 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; as well as a fix of gradients and pattern.
&gt; &quot;stroke&quot; and &quot;fill&quot; was mixed up in CanvasStyle.cpp.
the same in GraphicsContextCg.cpp but wasn&apos;t changed by this patch.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89300</commentid>
    <comment_count>14</comment_count>
      <attachid>22984</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-08-25 11:47:37 -0700</bug_when>
    <thetext>Created attachment 22984
Qt implementation

I tried to implement the changes to Qt but get Segmentation Fault on gradients and patterns. Perhaps a pointer-problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89351</commentid>
    <comment_count>15</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-08-25 23:04:49 -0700</bug_when>
    <thetext>*** Bug 20520 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89372</commentid>
    <comment_count>16</comment_count>
      <attachid>23000</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2008-08-26 06:14:49 -0700</bug_when>
    <thetext>Created attachment 23000
Fixes Cg

This patch fixes bugs in CanvasStyle, GraphicsContextCg, RadialGradientAttribute. Now the Cg-implementation should be able to display Canvas as well as SVG-Gradients.
I fixed Cairo too. But the modification causes some problems, eg. http://www.w3.org/Graphics/SVG/Test/20061213/htmlObjectHarness/full-pservers-grad-16-b.html -&gt; Segmentation Fault (The gradient with the false stopColor) and I can&apos;t destroy the pattern for drawing gradients, as long as the gradient is not destroied.
I made a build-fix for Qt but haven&apos;t updated SVG yet. gradients and patterns on Canvas still end up in an Segmentation Fault. Perhaps some of the Qt-folks can help out.

The big patch should be splitted in to different patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89415</commentid>
    <comment_count>17</comment_count>
      <attachid>23000</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-26 15:03:36 -0700</bug_when>
    <thetext>Comment on attachment 23000
Fixes Cg

We should talk about this over IRC.  I&apos;m not sure I want to include the SVG gradient/pattern re-write in the first landed patches.  Everything is still separate in my git tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89473</commentid>
    <comment_count>18</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-27 05:41:03 -0700</bug_when>
    <thetext>Ok, I have a final working patch which passes all the &lt;canvas&gt; test cases I could find (at least as many as WebKit TOT does).  Will upload shortly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89474</commentid>
    <comment_count>19</comment_count>
      <attachid>23023</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-27 05:41:39 -0700</bug_when>
    <thetext>Created attachment 23023
Add stroke/fill Gradient and Pattern support to GraphicsContext and update &lt;canvas&gt; to use it.

 WebCore/WebCore.xcodeproj/project.pbxproj          |    4 +
 .../js/JSCanvasRenderingContext2DCustom.cpp        |    4 +-
 WebCore/css/CSSGradientValue.cpp                   |   10 +-
 WebCore/css/CSSGradientValue.h                     |    2 +-
 WebCore/html/CanvasGradient.cpp                    |    4 +-
 WebCore/html/CanvasGradient.h                      |    8 +-
 WebCore/html/CanvasPattern.cpp                     |    2 +-
 WebCore/html/CanvasPattern.h                       |    6 +-
 WebCore/html/CanvasRenderingContext2D.cpp          |  196 +-------------------
 WebCore/html/CanvasRenderingContext2D.h            |    6 -
 WebCore/html/CanvasStyle.cpp                       |    7 +
 WebCore/html/CanvasStyle.h                         |    3 +-
 WebCore/platform/graphics/GeneratedImage.h         |   10 +-
 WebCore/platform/graphics/Generator.h              |    4 +-
 WebCore/platform/graphics/Gradient.h               |   16 ++-
 WebCore/platform/graphics/GraphicsContext.cpp      |   68 ++++++-
 WebCore/platform/graphics/GraphicsContext.h        |   39 +++--
 WebCore/platform/graphics/GraphicsContextPrivate.h |   33 +++-
 WebCore/platform/graphics/GraphicsTypes.h          |    2 +-
 WebCore/platform/graphics/Path.h                   |    8 +-
 WebCore/platform/graphics/Pattern.h                |   15 +-
 .../graphics/cairo/GraphicsContextCairo.cpp        |   17 ++-
 WebCore/platform/graphics/cg/GraphicsContextCG.cpp |  173 ++++++++++++++---
 WebCore/platform/graphics/qt/GraphicsContextQt.cpp |   28 ++--
 WebCore/platform/graphics/wx/GraphicsContextWx.cpp |   16 +-
 25 files changed, 366 insertions(+), 315 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89475</commentid>
    <comment_count>20</comment_count>
      <attachid>23024</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-27 05:41:42 -0700</bug_when>
    <thetext>Created attachment 23024
Qt and Cairo support from krit

 .../graphics/cairo/GraphicsContextCairo.cpp        |   96 ++++++++++++++-----
 WebCore/platform/graphics/qt/GraphicsContextQt.cpp |  100 +++++++++++++++++++-
 2 files changed, 166 insertions(+), 30 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89477</commentid>
    <comment_count>21</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-27 05:44:49 -0700</bug_when>
    <thetext>I&apos;ve filed bug 20543 to deal with the SVG fixes which should be possible once this patch lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89531</commentid>
    <comment_count>22</comment_count>
      <attachid>23041</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-27 14:59:54 -0700</bug_when>
    <thetext>Created attachment 23041
Add fill/stroke Pattern and Gradient support to GraphicsContext (now with ChangeLog)

 WebCore/ChangeLog                                  |   84 +++++++++
 WebCore/WebCore.xcodeproj/project.pbxproj          |    4 +
 .../js/JSCanvasRenderingContext2DCustom.cpp        |    4 +-
 WebCore/css/CSSGradientValue.cpp                   |   10 +-
 WebCore/css/CSSGradientValue.h                     |    2 +-
 WebCore/html/CanvasGradient.cpp                    |    4 +-
 WebCore/html/CanvasGradient.h                      |    8 +-
 WebCore/html/CanvasPattern.cpp                     |    2 +-
 WebCore/html/CanvasPattern.h                       |    6 +-
 WebCore/html/CanvasRenderingContext2D.cpp          |  196 +-------------------
 WebCore/html/CanvasRenderingContext2D.h            |    6 -
 WebCore/html/CanvasStyle.cpp                       |    7 +
 WebCore/html/CanvasStyle.h                         |    3 +-
 WebCore/platform/graphics/GeneratedImage.h         |   10 +-
 WebCore/platform/graphics/Generator.h              |    4 +-
 WebCore/platform/graphics/Gradient.h               |   16 ++-
 WebCore/platform/graphics/GraphicsContext.cpp      |   68 ++++++-
 WebCore/platform/graphics/GraphicsContext.h        |   39 +++--
 WebCore/platform/graphics/GraphicsContextPrivate.h |   33 +++-
 WebCore/platform/graphics/GraphicsTypes.h          |    2 +-
 WebCore/platform/graphics/Path.h                   |    8 +-
 WebCore/platform/graphics/Pattern.h                |   15 +-
 WebCore/platform/graphics/cg/GraphicsContextCG.cpp |  173 ++++++++++++++---
 23 files changed, 415 insertions(+), 289 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89532</commentid>
    <comment_count>23</comment_count>
      <attachid>23042</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-27 15:00:05 -0700</bug_when>
    <thetext>Created attachment 23042
Qt and Cairo support from krit (and blind stab @ wx compile support)

 WebCore/ChangeLog                                  |   46 +++++++
 .../graphics/cairo/GraphicsContextCairo.cpp        |  121 ++++++++++++++-----
 WebCore/platform/graphics/qt/GraphicsContextQt.cpp |  133 ++++++++++++++++----
 WebCore/platform/graphics/wx/GraphicsContextWx.cpp |   48 ++++++-
 4 files changed, 289 insertions(+), 59 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89617</commentid>
    <comment_count>24</comment_count>
      <attachid>23041</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-08-28 03:18:56 -0700</bug_when>
    <thetext>Comment on attachment 23041
Add fill/stroke Pattern and Gradient support to GraphicsContext (now with ChangeLog)

WebCore/bindings/js/JSCanvasRenderingContext2DCustom.cpp
if (style-&gt;canvasPattern())
    return toJS(exec, style-&gt;canvasPattern());

I&apos;d prefer if (c=style-&gt;canvasPattern()) return toJS(exec, c)

Many comments that shouldn&apos;t be landed 
// TODO(eseidel): This is a place-holder until some day wh... &lt;-- badness</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89621</commentid>
    <comment_count>25</comment_count>
      <attachid>23041</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-08-28 03:55:07 -0700</bug_when>
    <thetext>Comment on attachment 23041
Add fill/stroke Pattern and Gradient support to GraphicsContext (now with ChangeLog)

r=me, assuming you replace your TODO()&apos;s with bug#&apos;s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89627</commentid>
    <comment_count>26</comment_count>
      <attachid>23042</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-08-28 04:31:26 -0700</bug_when>
    <thetext>Comment on attachment 23042
Qt and Cairo support from krit (and blind stab @ wx compile support)

Looks sane, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89632</commentid>
    <comment_count>27</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-28 05:09:13 -0700</bug_when>
    <thetext>r35966 r35967</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22798</attachid>
            <date>2008-08-14 14:56:00 -0700</date>
            <delta_ts>2008-08-15 12:41:57 -0700</delta_ts>
            <desc>Canvas fillRect</desc>
            <filename>Canvas-FillRect-1.patch</filename>
            <type>text/plain</type>
            <size>7469</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lv
biAzNTc1OCkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02OTksNDEgKzY5OSwxMyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZmlsbFJlY3QoCiAgICAgRmxvYXRSZWN0IHJlY3QoeCwgeSwgd2lkdGgsIGhlaWdo
dCk7CiAgICAgd2lsbERyYXcocmVjdCk7CiAKLSAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdo
IHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0jaWYgUExBVEZPUk0o
Q0cpCi0gICAgaWYgKHN0YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dyYWRpZW50KCkpIHsKLSAg
ICAgICAgLy8gU2hhZGluZyB3b3JrcyBvbiB0aGUgZW50aXJlIGNsaXAgcmVnaW9uLCBzbyBjb252
ZXJ0IHRoZSByZWN0IHRvIGEgY2xpcC4KLSAgICAgICAgYy0+c2F2ZSgpOwotICAgICAgICBDR0Nv
bnRleHRDbGlwVG9SZWN0KGMtPnBsYXRmb3JtQ29udGV4dCgpLCByZWN0KTsKLSAgICAgICAgQ0dD
b250ZXh0RHJhd1NoYWRpbmcoYy0+cGxhdGZvcm1Db250ZXh0KCksIHN0YXRlKCkubV9maWxsU3R5
bGUtPmNhbnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkucGxhdGZvcm1HcmFkaWVudCgpKTsgICAg
ICAgIAotICAgICAgICBjLT5yZXN0b3JlKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHN0
YXRlKCkubV9maWxsU3R5bGUtPnBhdHRlcm4oKSkKLSAgICAgICAgICAgIGFwcGx5RmlsbFBhdHRl
cm4oKTsKLSAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoYy0+cGxhdGZvcm1Db250ZXh0KCksIHJl
Y3QpOwotICAgIH0KLSNlbGlmIFBMQVRGT1JNKFFUKQotICAgIFFQYWludGVyKiBwID0gc3RhdGlj
X2Nhc3Q8UVBhaW50ZXIqPihjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgaWYgKHN0YXRlKCku
bV9maWxsU3R5bGUtPmNhbnZhc0dyYWRpZW50KCkpIHsKLSAgICAgICAgcC0+ZmlsbFJlY3QocmVj
dCwgUUJydXNoKCooc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKS0+Z3JhZGll
bnQoKS5wbGF0Zm9ybUdyYWRpZW50KCkpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHN0
YXRlKCkubV9maWxsU3R5bGUtPnBhdHRlcm4oKSkKLSAgICAgICAgICAgIGFwcGx5RmlsbFBhdHRl
cm4oKTsKLSAgICAgICAgcC0+ZmlsbFJlY3QocmVjdCwgcC0+YnJ1c2goKSk7Ci0gICAgfQotI2Vs
aWYgUExBVEZPUk0oQ0FJUk8pCi0gICAgY2Fpcm9fdCogY3IgPSBjLT5wbGF0Zm9ybUNvbnRleHQo
KTsKLSAgICBjYWlyb19zYXZlKGNyKTsKLSAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2Fu
dmFzR3JhZGllbnQoKSkgewotICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBzdGF0ZSgpLm1f
ZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRmb3JtR3JhZGllbnQo
KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHN0YXRlKCkubV9maWxsU3R5bGUtPnBhdHRl
cm4oKSkKLSAgICAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKLSAgICB9Ci0gICAgY2Fpcm9f
cmVjdGFuZ2xlKGNyLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBjYWlyb19maWxsKGNyKTsK
LSAgICBjYWlyb19yZXN0b3JlKGNyKTsKLSNlbmRpZgorICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0
eWxlLT5jYW52YXNHcmFkaWVudCgpKQorICAgICAgICBhcHBseUZpbGxHcmFkaWVudCgpOworICAg
IGVsc2UgaWYgKHN0YXRlKCkubV9maWxsU3R5bGUtPnBhdHRlcm4oKSkKKyAgICAgICAgYXBwbHlG
aWxsUGF0dGVybigpOworICAgIGVsc2UKKyAgICAgICAgYy0+ZmlsbFJlY3QocmVjdCwgYy0+Zmls
bENvbG9yKCkpOworICAgIGMtPmZpbGxSZWN0KHJlY3QpOwogfQogCiB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c3Ryb2tlUmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwg
ZmxvYXQgaGVpZ2h0KQpAQCAtMTIwOSw2ICsxMTgxLDIxIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjphcHBseUZpbGwKICAgICBzdGF0ZSgpLm1fYXBwbGllZEZpbGxQYXR0ZXJuID0g
dHJ1ZTsKIH0KIAordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmFwcGx5RmlsbEdyYWRp
ZW50KCkKK3sKKyAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOworICAg
IGlmICghYykKKyAgICAgICAgcmV0dXJuOworCisgICAgQ2FudmFzR3JhZGllbnQqIGdyYWRpZW50
ID0gc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKTsKKyAgICBpZiAoIWdyYWRp
ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBjLT5hcHBseUZpbGxHcmFkaWVudChncmFkaWVu
dC0+Z3JhZGllbnQoKSk7CisKKyAgICBzdGF0ZSgpLm1fYXBwbGllZEZpbGxHcmFkaWVudCA9IHRy
dWU7Cit9CisKIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlRGF0YT4gY3JlYXRlRW1wdHlJbWFnZURh
dGEoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZGF0
YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CkluZGV4
OiBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCShyZXZpc2lvbiAzNTc1OCkK
KysrIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTkzLDYgKzE5Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIENv
bXBvc2l0ZU9wZXJhdG9yIG1fZ2xvYmFsQ29tcG9zaXRlOwogICAgICAgICAgICAgYm9vbCBtX2Fw
cGxpZWRTdHJva2VQYXR0ZXJuOwogICAgICAgICAgICAgYm9vbCBtX2FwcGxpZWRGaWxsUGF0dGVy
bjsKKyAgICAgICAgICAgIGJvb2wgbV9hcHBsaWVkRmlsbEdyYWRpZW50OwogICAgICAgICAgICAg
QWZmaW5lVHJhbnNmb3JtIG1fdHJhbnNmb3JtOwogI2lmIFBMQVRGT1JNKENHKQogICAgICAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIG1fc3Ryb2tlU3R5bGVQYXR0ZXJuVHJhbnNmb3JtOwpAQCAtMjEz
LDYgKzIxNCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBhcHBseVN0cm9r
ZVBhdHRlcm4oKTsKICAgICAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCk7CiAKKyAgICAgICAg
dm9pZCBhcHBseUZpbGxHcmFkaWVudCgpOworCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JU
KQogICAgICAgICB2b2lkIGNsZWFyUGF0aEZvckRhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0
eU1vZGUoKTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5oCShyZXZpc2lvbiAzNTc1OCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgUGF0aDsKICAgICBj
bGFzcyBQYXR0ZXJuOworICAgIGNsYXNzIEdyYWRpZW50OwogICAgIGNsYXNzIFRleHRSdW47CiAK
ICAgICAvLyBUaGVzZSBiaXRzIGNhbiBiZSBPUmVkIHRvZ2V0aGVyIGZvciBhIHRvdGFsIG9mIDgg
cG9zc2libGUgdGV4dCBkcmF3aW5nIG1vZGVzLgpAQCAtMTM5LDYgKzE0MCw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oY29uc3QgUGF0dGVy
biYpOwogICAgICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oY29uc3QgUGF0dGVybiYpOwogCisg
ICAgICAgIHZvaWQgYXBwbHlGaWxsR3JhZGllbnQoR3JhZGllbnQmKTsKKwogICAgICAgICB2b2lk
IHNhdmUoKTsKICAgICAgICAgdm9pZCByZXN0b3JlKCk7CiAgICAgICAgIApAQCAtMTUxLDYgKzE1
NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgLy8gQXJjIGRyYXdpbmcgKHVzZWQg
YnkgYm9yZGVyLXJhZGl1cyBpbiBDU1MpIGp1c3Qgc3VwcG9ydHMgc3Ryb2tpbmcgYXQgdGhlIG1v
bWVudC4KICAgICAgICAgdm9pZCBzdHJva2VBcmMoY29uc3QgSW50UmVjdCYsIGludCBzdGFydEFu
Z2xlLCBpbnQgYW5nbGVTcGFuKTsKICAgICAgICAgCisgICAgICAgIHZvaWQgZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0Jik7CiAgICAgICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgSW50UmVjdCYsIGNv
bnN0IENvbG9yJik7CiAgICAgICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29u
c3QgQ29sb3ImKTsKICAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHZW5l
cmF0b3ImKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiAzNTc1OCkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
ICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAiUGF0dGVybi5oIgorI2luY2x1ZGUgIkdyYWRp
ZW50LmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKIAogI2luY2x1ZGUgPGNhaXJvLmg+
CkBAIC0zNzMsNiArMzc0LDE2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25z
dCBGbG8KICAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKG1fZGF0YS0+Y3IsIHJlY3QsIGNvbG9y
KTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYg
cmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCBy
ZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgY2Fp
cm9fZmlsbChjcik7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtNTE0LDYgKzUy
NSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybihjCiAgICAgYXBw
bHlTdHJva2VQYXR0ZXJuKHBhdHRlcm4pOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBw
bHlGaWxsR3JhZGllbnQoR3JhZGllbnQmIGdyYWRpZW50KQoreworICAgIGNhaXJvX3QqIGNyID0g
bV9kYXRhLT5jcjsKKyAgICBjYWlyb19zZXRfc291cmNlKGNyLCBncmFkaWVudC5wbGF0Zm9ybUdy
YWRpZW50KCkpOworfQorCisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxD
b2xvcihjb25zdCBDb2xvciYgY29sKQogewogICAgIC8vIEZJWE1FOiB0aGlzIGlzIHByb2JhYmx5
IGEgbm8tb3AgYnV0IEknbSBub3Qgc3VyZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHJldmlzaW9uIDM1NzU4KQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAi
UGF0aC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgogI2lu
Y2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KICNpbmNsdWRlIDxDb3JlR3Jh
cGhpY3MvQ0dQREZDb250ZXh0Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTQx
OCw2ICs0MTksMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwog
ICAgIH0KIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47
CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0Nv
bnRleHRGaWxsUmVjdChjb250ZXh0LCByZWN0KTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BM
ZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwg
Y29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpIHx8ICFjb2xvci5hbHBoYSgpKQpAQCAtOTIyLDYgKzkzMSwx
NCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybihjCiAgICAgQ0dDb250
ZXh0U2V0RmlsbFBhdHRlcm4ocGxhdGZvcm1Db250ZXh0KCksIHBsYXRmb3JtUGF0dGVybiwgJnBh
dHRlcm5BbHBoYSk7CiAgICAgQ0dQYXR0ZXJuUmVsZWFzZShwbGF0Zm9ybVBhdHRlcm4pOwogfQor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbEdyYWRpZW50KGNvbnN0IEdyYWRpZW50IGdy
YWRpZW50KQoreworICAgIENHUGF0dGVyblJlZiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLmNy
ZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSk7CisgICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4p
CisgICAgICAgIHJldHVybjsKKworICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGMtPnBsYXRmb3Jt
Q29udGV4dCgpLCBncmFkaWVudC5wbGF0Zm9ybUdyYWRpZW50KCkpOworfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7
Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22823</attachid>
            <date>2008-08-15 12:41:57 -0700</date>
            <delta_ts>2008-08-17 05:34:51 -0700</delta_ts>
            <desc>Canvas-Clean-up</desc>
            <filename>Canvas-CleanUp-only-concept.patch</filename>
            <type>text/plain</type>
            <size>14127</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lv
biAzNTc4MikKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NDIsNDIgKzU0MiwxNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZmlsbCgpCiAgICAgaWYgKCFtX3BhdGguaXNFbXB0eSgpKQogICAgICAgICB3aWxs
RHJhdyhtX3BhdGguYm91bmRpbmdSZWN0KCkpOwogCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgaWYg
KHN0YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dyYWRpZW50KCkpIHsKLSAgICAgICAgLy8gU2hh
ZGluZyB3b3JrcyBvbiB0aGUgZW50aXJlIGNsaXAgcmVnaW9uLCBzbyBjb252ZXJ0IHRoZSBjdXJy
ZW50IHBhdGggdG8gYSBjbGlwLgotICAgICAgICBjLT5zYXZlKCk7Ci0gICAgICAgIENHQ29udGV4
dENsaXAoYy0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgICAgICBDR0NvbnRleHREcmF3U2hhZGlu
ZyhjLT5wbGF0Zm9ybUNvbnRleHQoKSwgc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGll
bnQoKS0+Z3JhZGllbnQoKS5wbGF0Zm9ybUdyYWRpZW50KCkpOyAgICAgICAgCi0gICAgICAgIGMt
PnJlc3RvcmUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHls
ZS0+cGF0dGVybigpKQotICAgICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwotICAgICAgICBD
R0NvbnRleHRGaWxsUGF0aChjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgfQotI2VsaWYgUExB
VEZPUk0oUVQpCi0gICAgUVBhaW50ZXJQYXRoKiBwYXRoID0gbV9wYXRoLnBsYXRmb3JtUGF0aCgp
OwotICAgIFFQYWludGVyKiBwID0gc3RhdGljX2Nhc3Q8UVBhaW50ZXIqPihjLT5wbGF0Zm9ybUNv
bnRleHQoKSk7Ci0gICAgaWYgKHN0YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dyYWRpZW50KCkp
IHsKLSAgICAgICAgcC0+ZmlsbFBhdGgoKnBhdGgsIFFCcnVzaCgqKHN0YXRlKCkubV9maWxsU3R5
bGUtPmNhbnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkucGxhdGZvcm1HcmFkaWVudCgpKSkpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5wYXR0ZXJuKCkp
Ci0gICAgICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgICAgIHAtPmZpbGxQYXRoKCpw
YXRoLCBwLT5icnVzaCgpKTsKLSAgICB9Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICBjYWly
b190KiBjciA9IGMtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNhaXJvX3NhdmUoY3IpOwotCi0g
ICAgaWYgKHN0YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dyYWRpZW50KCkpIHsKLSAgICAgICAg
Y2Fpcm9fc2V0X3NvdXJjZShjciwgc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQo
KS0+Z3JhZGllbnQoKS5wbGF0Zm9ybUdyYWRpZW50KCkpOwotICAgICAgICBjYWlyb19maWxsKGNy
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+cGF0dGVy
bigpKQotICAgICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwotICAgICAgICBjYWlyb19maWxs
KGNyKTsKLSAgICB9Ci0gICAgY2Fpcm9fcmVzdG9yZShjcik7Ci0jZW5kaWYKKyAgICBjLT5zYXZl
KCk7CisKKyAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkKKyAg
ICAgICAgYXBwbHlGaWxsR3JhZGllbnQoKTsKKyAgICBlbHNlIGlmIChzdGF0ZSgpLm1fZmlsbFN0
eWxlLT5wYXR0ZXJuKCkpCisgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsgLy8gb25seSB3b3Jr
cyBmb3IgQ2Fpcm8gKERyYXctb3BlcmF0aW9uIGlzIG1pc3NpbmcsIENvbmZsaWN0cyB3aXRoIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFJlY3QpCisgICAgZWxzZQorICAgICAgICBjLT5m
aWxsUGF0aCgpOworCisgICAgYy0+cmVzdG9yZSgpOwogCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9T
VVBQT1JUKQogICAgIGNsZWFyUGF0aEZvckRhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1v
ZGUoKTsKQEAgLTYwMSw0OCArNTc1LDE2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpzdHJva2UoKQogICAgICAgICB3aWxsRHJhdyhib3VuZGluZ1JlY3QpOwogICAgIH0KICAgICAK
LSAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBo
aWNzQ29udGV4dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgaWYgKHN0YXRlKCkubV9zdHJv
a2VTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAgICAvLyBTaGFkaW5nIHdvcmtzIG9u
IHRoZSBlbnRpcmUgY2xpcCByZWdpb24sIHNvIGNvbnZlcnQgdGhlIGN1cnJlbnQgcGF0aCB0byBh
IGNsaXAuCi0gICAgICAgIGMtPnNhdmUoKTsKLSAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhX
aXRoU3Ryb2tlZFBhdGgoYy0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgICAgICBDR0NvbnRleHRD
bGlwKGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmco
Yy0+cGxhdGZvcm1Db250ZXh0KCksIHN0YXRlKCkubV9zdHJva2VTdHlsZS0+Y2FudmFzR3JhZGll
bnQoKS0+Z3JhZGllbnQoKS5wbGF0Zm9ybUdyYWRpZW50KCkpOyAgICAgICAgCi0gICAgICAgIGMt
PnJlc3RvcmUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX3N0cm9rZVN0
eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4oKTsKLSAgICAg
ICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgfQotI2Vs
aWYgUExBVEZPUk0oUVQpCi0gICAgUVBhaW50ZXJQYXRoKiBwYXRoID0gbV9wYXRoLnBsYXRmb3Jt
UGF0aCgpOwotICAgIFFQYWludGVyKiBwID0gc3RhdGljX2Nhc3Q8UVBhaW50ZXIqPihjLT5wbGF0
Zm9ybUNvbnRleHQoKSk7Ci0gICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS0+Y2FudmFzR3Jh
ZGllbnQoKSkgewotICAgICAgICBwLT5zYXZlKCk7Ci0gICAgICAgIHAtPnNldEJydXNoKCooc3Rh
dGUoKS5tX3N0cm9rZVN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRmb3Jt
R3JhZGllbnQoKSkpOwotICAgICAgICBwLT5zdHJva2VQYXRoKCpwYXRoLCBwLT5wZW4oKSk7Ci0g
ICAgICAgIHAtPnJlc3RvcmUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5t
X3N0cm9rZVN0eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4o
KTsKLSAgICAgICAgcC0+c3Ryb2tlUGF0aCgqcGF0aCwgcC0+cGVuKCkpOwotICAgIH0KLSNlbGlm
IFBMQVRGT1JNKENBSVJPKQotICAgIGNhaXJvX3QqIGNyID0gYy0+cGxhdGZvcm1Db250ZXh0KCk7
Ci0gICAgY2Fpcm9fc2F2ZShjcik7Ci0gICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS0+Y2Fu
dmFzR3JhZGllbnQoKSkgewotICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBzdGF0ZSgpLm1f
c3Ryb2tlU3R5bGUtPmNhbnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkucGxhdGZvcm1HcmFkaWVu
dCgpKTsKLSAgICAgICAgYy0+YWRkUGF0aChtX3BhdGgpOwotICAgICAgICBjYWlyb19zdHJva2Uo
Y3IpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPnBh
dHRlcm4oKSkKLSAgICAgICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAgICAgICBjLT5h
ZGRQYXRoKG1fcGF0aCk7Ci0gICAgICAgIGNhaXJvX3N0cm9rZShjcik7Ci0gICAgfQotICAgIGNh
aXJvX3Jlc3RvcmUoY3IpOwotI2VuZGlmCisgICAgYy0+c2F2ZSgpOworCisgICAgaWYgKHN0YXRl
KCkubV9zdHJva2VTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkKKyAgICAgICAgYXBwbHlTdHJva2VH
cmFkaWVudCgpOyAvL3dvbnQndCBiZSBhYmxlIHRvIGRyYXcgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpzdHJva2VSZWN0CisgICAgZWxzZSBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+cGF0dGVy
bigpKQorICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4oKTsgLy8gb25seSB3b3JrcyBmb3IgQ2Fp
cm8gKERyYXctb3BlcmF0aW9uIGlzIG1pc3NpbmcsIENvbmZsaWN0cyB3aXRoIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c3Ryb2tlUmVjdCkKKyAgICBlbHNlCisgICAgICAgIGMtPnN0cm9rZVBh
dGgoKTsKKworICAgIGMtPnJlc3RvcmUoKTsKIAogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9S
VCkKICAgICBjbGVhclBhdGhGb3JEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKCk7
CkBAIC02OTksMzkgKzY0MSwxNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Zmls
bFJlY3QoCiAgICAgRmxvYXRSZWN0IHJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgd2ls
bERyYXcocmVjdCk7CiAKLSAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWlu
ZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgaWYg
KHN0YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dyYWRpZW50KCkpIHsKLSAgICAgICAgYy0+c2F2
ZSgpOworICAgIGMtPnNhdmUoKTsKKworICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52
YXNHcmFkaWVudCgpKQogICAgICAgICBzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVu
dCgpLT5ncmFkaWVudCgpLmZpbGwoYywgcmVjdCk7Ci0gICAgICAgIGMtPnJlc3RvcmUoKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+cGF0dGVybigpKQot
ICAgICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwotICAgICAgICBDR0NvbnRleHRGaWxsUmVj
dChjLT5wbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7Ci0gICAgfQotI2VsaWYgUExBVEZPUk0oUVQp
Ci0gICAgUVBhaW50ZXIqIHAgPSBzdGF0aWNfY2FzdDxRUGFpbnRlcio+KGMtPnBsYXRmb3JtQ29u
dGV4dCgpKTsKLSAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkg
ewotICAgICAgICBwLT5maWxsUmVjdChyZWN0LCBRQnJ1c2goKihzdGF0ZSgpLm1fZmlsbFN0eWxl
LT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRmb3JtR3JhZGllbnQoKSkpKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+cGF0dGVybigpKQot
ICAgICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwotICAgICAgICBwLT5maWxsUmVjdChyZWN0
LCBwLT5icnVzaCgpKTsKLSAgICB9Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICBjYWlyb190
KiBjciA9IGMtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNhaXJvX3NhdmUoY3IpOwotICAgIGlm
IChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpKSB7Ci0gICAgICAgIGNhaXJv
X3NldF9zb3VyY2UoY3IsIHN0YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dyYWRpZW50KCktPmdy
YWRpZW50KCkucGxhdGZvcm1HcmFkaWVudCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
c3RhdGUoKS5tX2ZpbGxTdHlsZS0+cGF0dGVybigpKQotICAgICAgICAgICAgYXBwbHlGaWxsUGF0
dGVybigpOwotICAgIH0KLSAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHgsIHksIHdpZHRoLCBoZWln
aHQpOwotICAgIGNhaXJvX2ZpbGwoY3IpOwotICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwotI2VuZGlm
CisgICAgZWxzZSBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+cGF0dGVybigpKQorICAgICAgICBh
cHBseUZpbGxQYXR0ZXJuKCk7IC8vIGlzbid0IGRyYXduCisgICAgZWxzZQorICAgICAgICBjLT5m
aWxsUmVjdChyZWN0LCBjLT5maWxsQ29sb3IoKSk7CisKKyAgICBjLT5yZXN0b3JlKCk7ICAgIAog
fQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlUmVjdChmbG9hdCB4LCBm
bG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQpAQCAtMTIwNyw2ICsxMTI2LDM2IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjphcHBseUZpbGwKICAgICBzdGF0ZSgpLm1f
YXBwbGllZEZpbGxQYXR0ZXJuID0gdHJ1ZTsKIH0KIAordm9pZCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmFwcGx5U3Ryb2tlR3JhZGllbnQoKQoreworICAgIEdyYXBoaWNzQ29udGV4dCogYyA9
IGRyYXdpbmdDb250ZXh0KCk7CisgICAgaWYgKCFjKQorICAgICAgICByZXR1cm47CisKKyAgICBD
YW52YXNHcmFkaWVudCogZ3JhZGllbnQgPSBzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNHcmFk
aWVudCgpOworICAgIGlmICghZ3JhZGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIGMtPmFw
cGx5U3Ryb2tlR3JhZGllbnQoZ3JhZGllbnQtPmdyYWRpZW50KCkpOworCisgICAgc3RhdGUoKS5t
X2FwcGxpZWRTdHJva2VHcmFkaWVudCA9IHRydWU7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjphcHBseUZpbGxHcmFkaWVudCgpCit7CisgICAgR3JhcGhpY3NDb250ZXh0KiBj
ID0gZHJhd2luZ0NvbnRleHQoKTsKKyAgICBpZiAoIWMpCisgICAgICAgIHJldHVybjsKKworICAg
IENhbnZhc0dyYWRpZW50KiBncmFkaWVudCA9IHN0YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dy
YWRpZW50KCk7CisgICAgaWYgKCFncmFkaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYy0+
YXBwbHlGaWxsR3JhZGllbnQoZ3JhZGllbnQtPmdyYWRpZW50KCkpOworCisgICAgc3RhdGUoKS5t
X2FwcGxpZWRGaWxsR3JhZGllbnQgPSB0cnVlOworfQorCiBzdGF0aWMgUGFzc1JlZlB0cjxJbWFn
ZURhdGE+IGNyZWF0ZUVtcHR5SW1hZ2VEYXRhKGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAg
UGFzc1JlZlB0cjxJbWFnZURhdGE+IGRhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCkpOwpJbmRleDogV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuaAkocmV2aXNpb24gMzU3ODIpCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBtX2dsb2JhbENvbXBvc2l0
ZTsKICAgICAgICAgICAgIGJvb2wgbV9hcHBsaWVkU3Ryb2tlUGF0dGVybjsKICAgICAgICAgICAg
IGJvb2wgbV9hcHBsaWVkRmlsbFBhdHRlcm47CisgICAgICAgICAgICBib29sIG1fYXBwbGllZFN0
cm9rZUdyYWRpZW50OworICAgICAgICAgICAgYm9vbCBtX2FwcGxpZWRGaWxsR3JhZGllbnQ7CiAg
ICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07CiAjaWYgUExBVEZPUk0oQ0cp
CiAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9zdHJva2VTdHlsZVBhdHRlcm5UcmFuc2Zv
cm07CkBAIC0yMTMsNiArMjE1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lk
IGFwcGx5U3Ryb2tlUGF0dGVybigpOwogICAgICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oKTsK
IAorICAgICAgICB2b2lkIGFwcGx5U3Ryb2tlR3JhZGllbnQoKTsKKyAgICAgICAgdm9pZCBhcHBs
eUZpbGxHcmFkaWVudCgpOworCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQogICAgICAg
ICB2b2lkIGNsZWFyUGF0aEZvckRhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUoKTsK
ICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCShyZXZpc2lvbiAzNTc4MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDcgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIEtVUkw7CiAgICAgY2xhc3MgUGF0aDsKICAgICBjbGFzcyBQYXR0
ZXJuOworICAgIGNsYXNzIEdyYWRpZW50OwogICAgIGNsYXNzIFRleHRSdW47CiAKICAgICAvLyBU
aGVzZSBiaXRzIGNhbiBiZSBPUmVkIHRvZ2V0aGVyIGZvciBhIHRvdGFsIG9mIDggcG9zc2libGUg
dGV4dCBkcmF3aW5nIG1vZGVzLgpAQCAtMTM5LDYgKzE0MCw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oY29uc3QgUGF0dGVybiYpOwogICAg
ICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oY29uc3QgUGF0dGVybiYpOwogCisgICAgICAgIHZv
aWQgYXBwbHlTdHJva2VHcmFkaWVudChHcmFkaWVudCYpOworICAgICAgICB2b2lkIGFwcGx5Rmls
bEdyYWRpZW50KEdyYWRpZW50Jik7CisKICAgICAgICAgdm9pZCBzYXZlKCk7CiAgICAgICAgIHZv
aWQgcmVzdG9yZSgpOwogICAgICAgICAKQEAgLTE1MCw3ICsxNTQsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICAgICAgICAgLy8gQXJjIGRyYXdpbmcgKHVzZWQgYnkgYm9yZGVyLXJhZGl1cyBp
biBDU1MpIGp1c3Qgc3VwcG9ydHMgc3Ryb2tpbmcgYXQgdGhlIG1vbWVudC4KICAgICAgICAgdm9p
ZCBzdHJva2VBcmMoY29uc3QgSW50UmVjdCYsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVTcGFu
KTsKLSAgICAgICAgCisKICAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBJbnRSZWN0JiwgY29u
c3QgQ29sb3ImKTsKICAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBDb2xvciYpOwogICAgICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIEdlbmVy
YXRvciYpOwpAQCAtMTU4LDYgKzE2Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgICAgIHZvaWQgc3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpOwogCisgICAgICAgIHZvaWQgZmls
bFBhdGgoKTsKKyAgICAgICAgdm9pZCBzdHJva2VQYXRoKCk7CisKICAgICAgICAgdm9pZCBkcmF3
SW1hZ2UoSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9z
aXRlU291cmNlT3Zlcik7CiAgICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgY29uc3QgSW50
UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3ZlciwgYm9vbCB1c2VM
b3dRdWFsaXR5U2NhbGUgPSBmYWxzZSk7CiAgICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwg
Y29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCwgY29uc3QgSW50UmVjdCYgc3JjUmVjdCwgQ29tcG9z
aXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3Bw
CShyZXZpc2lvbiAzNTc4MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYXRoLmgiCiAjaW5jbHVkZSAi
UGF0dGVybi5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERh
dGEuaCIKIAogI2luY2x1ZGUgPGNhaXJvLmg+CkBAIC0zNzMsNiArMzc0LDI0IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG8KICAgICAgICAgZmlsbFJlY3RTb3VyY2VP
dmVyKG1fZGF0YS0+Y3IsIHJlY3QsIGNvbG9yKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZVBhdGgoKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIHNldENvbG9yKG1fZGF0YS0+Y3IsIHN0cm9rZUNvbG9yKCkpOworICAgIGNh
aXJvX3N0cm9rZShtX2RhdGEtPmNyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQ
YXRoKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBzZXRDb2xvcihtX2RhdGEtPmNyLCBmaWxsQ29sb3IoKSk7CisgICAgY2Fpcm9fZmlsbCht
X2RhdGEtPmNyKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRS
ZWN0JiByZWN0KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC00OTksMjEgKzUx
OCw0NSBAQCBJbnRQb2ludCBHcmFwaGljc0NvbnRleHQ6Om9yaWdpbigpCiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oY29uc3QgUGF0dGVybiYgcGF0dGVybikKIHsK
KyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CisKICAgICBjYWlyb19wYXR0ZXJuX3QqIHBs
YXRmb3JtUGF0dGVybiA9IHBhdHRlcm4uY3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKTsK
ICAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCiAgICAgY2Fpcm9f
c2V0X3NvdXJjZShwbGF0Zm9ybUNvbnRleHQoKSwgcGxhdGZvcm1QYXR0ZXJuKTsKICAgICBjYWly
b19wYXR0ZXJuX2Rlc3Ryb3kocGxhdGZvcm1QYXR0ZXJuKTsKKyAgICBjYWlyb19zdHJva2UoY3Ip
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybihjb25zdCBQYXR0
ZXJuJiBwYXR0ZXJuKQogewotICAgIC8vIFRoZSBDYWlybyBjb2RlcGF0aCBkb2Vzbid0IHNlZW0g
dG8gc3VwcG9ydCBzZXBhcmF0ZSBzdHJva2UvZmlsbD8KLSAgICAvLyBUaGUgY29kZSBJIHJlZmFj
dG9yZWQgdG8gY3JlYXRlIHRoZXNlIG1ldGhvZHMgd2FzIGlkZW50aWNhbCBmb3IgQ2Fpcm8KLSAg
ICBhcHBseVN0cm9rZVBhdHRlcm4ocGF0dGVybik7CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEt
PmNyOworCisgICAgY2Fpcm9fcGF0dGVybl90KiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLmNy
ZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSk7CisgICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4p
CisgICAgICAgIHJldHVybjsKKworICAgIGNhaXJvX3NldF9zb3VyY2UocGxhdGZvcm1Db250ZXh0
KCksIHBsYXRmb3JtUGF0dGVybik7CisgICAgY2Fpcm9fcGF0dGVybl9kZXN0cm95KHBsYXRmb3Jt
UGF0dGVybik7CisgICAgY2Fpcm9fZmlsbChjcik7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjphcHBseVN0cm9rZUdyYWRpZW50KEdyYWRpZW50JiBncmFkaWVudCkKK3sKKyAgICBjYWlyb190
KiBjciA9IG1fZGF0YS0+Y3I7CisgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgZ3JhZGllbnQucGxh
dGZvcm1HcmFkaWVudCgpKTsKKyAgICBjYWlyb19zdHJva2UoY3IpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6YXBwbHlGaWxsR3JhZGllbnQoR3JhZGllbnQmIGdyYWRpZW50KQoreworICAg
IGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKKyAgICBjYWlyb19zZXRfc291cmNlKGNyLCBncmFk
aWVudC5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAgIGNhaXJvX2ZpbGwoY3IpOworfQorCisKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYgY29s
KQogewogICAgIC8vIEZJWE1FOiB0aGlzIGlzIHByb2JhYmx5IGEgbm8tb3AgYnV0IEknbSBub3Qg
c3VyZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRD
Ry5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAJKHJldmlzaW9uIDM1NzgyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0
LDcgQEAKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGF0aC5oIgogI2luY2x1ZGUgIlBh
dHRlcm4uaCIKKyNpbmNsdWRlICJHcmFkaWVudC5oIgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9D
R0JpdG1hcENvbnRleHQuaD4KICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dQREZDb250ZXh0Lmg+
CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTQxOCw2ICs0MTksMTQgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgIH0KIH0KIAordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0
LCByZWN0KTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjb25z
dCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0
b3BSaWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9t
UmlnaHQsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
IHx8ICFjb2xvci5hbHBoYSgpKQpAQCAtOTIzLDYgKzkzMiwzNyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6YXBwbHlGaWxsUGF0dGVybihjCiAgICAgQ0dQYXR0ZXJuUmVsZWFzZShwbGF0Zm9ybVBh
dHRlcm4pOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VHcmFkaWVudChH
cmFkaWVudCBncmFkaWVudCkKK3sKKyAgICBDR1BhdHRlcm5SZWYgcGxhdGZvcm1QYXR0ZXJuID0g
cGF0dGVybi5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpOworICAgIGlmICghcGxhdGZv
cm1QYXR0ZXJuKQorICAgICAgICByZXR1cm47CisKKyAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdp
dGhTdHJva2VkUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7CisgICAgQ0dDb250ZXh0Q2xpcChwbGF0
Zm9ybUNvbnRleHQoKSk7CisgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcocGxhdGZvcm1Db250ZXh0
KCksIGdyYWRpZW50LnBsYXRmb3JtR3JhZGllbnQoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjphcHBseUZpbGxHcmFkaWVudChHcmFkaWVudCBncmFkaWVudCkKK3sKKyAgICBDR1BhdHRl
cm5SZWYgcGxhdGZvcm1QYXR0ZXJuID0gcGF0dGVybi5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0
Q1RNKCkpOworICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQorICAgICAgICByZXR1cm47CisKKyAg
ICBDR0NvbnRleHRDbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBDR0NvbnRleHREcmF3U2hh
ZGluZyhwbGF0Zm9ybUNvbnRleHQoKSwgZ3JhZGllbnQucGxhdGZvcm1HcmFkaWVudCgpKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQoreworICAgIENHQ29udGV4dFN0
cm9rZVBhdGgocGxhdGZvcm1Db250ZXh0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c3Ryb2tlUGF0aCgpCit7CisgICAgQ0dDb250ZXh0RmlsbFBhdGgocGxhdGZvcm1Db250ZXh0KCkp
OworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25z
dCBDb2xvciYgY29sb3IpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22841</attachid>
            <date>2008-08-17 05:34:51 -0700</date>
            <delta_ts>2008-08-22 10:12:25 -0700</delta_ts>
            <desc>Canvas CleanUp</desc>
            <filename>Canvas-CleanUp.patch</filename>
            <type>text/plain</type>
            <size>15444</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lv
biAzNTc4MikKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NSwxNSArNTUsNiBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAotI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgPFFQ
YWludGVyPgotI2luY2x1ZGUgPFFQaXhtYXA+Ci0jaW5jbHVkZSA8UVBhaW50ZXJQYXRoPgotI2Vs
aWYgUExBVEZPUk0oQ0FJUk8pCi0jaW5jbHVkZSAiQ2Fpcm9QYXRoLmgiCi0jaW5jbHVkZSA8Y2Fp
cm8uaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CkBAIC01NDIsNDIgKzUzMywxNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6ZmlsbCgpCiAgICAgaWYgKCFtX3BhdGguaXNFbXB0eSgpKQogICAgICAgICB3aWxsRHJh
dyhtX3BhdGguYm91bmRpbmdSZWN0KCkpOwogCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgaWYgKHN0
YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dyYWRpZW50KCkpIHsKLSAgICAgICAgLy8gU2hhZGlu
ZyB3b3JrcyBvbiB0aGUgZW50aXJlIGNsaXAgcmVnaW9uLCBzbyBjb252ZXJ0IHRoZSBjdXJyZW50
IHBhdGggdG8gYSBjbGlwLgotICAgICAgICBjLT5zYXZlKCk7Ci0gICAgICAgIENHQ29udGV4dENs
aXAoYy0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhj
LT5wbGF0Zm9ybUNvbnRleHQoKSwgc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQo
KS0+Z3JhZGllbnQoKS5wbGF0Zm9ybUdyYWRpZW50KCkpOyAgICAgICAgCi0gICAgICAgIGMtPnJl
c3RvcmUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+
cGF0dGVybigpKQotICAgICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwotICAgICAgICBDR0Nv
bnRleHRGaWxsUGF0aChjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgfQotI2VsaWYgUExBVEZP
Uk0oUVQpCi0gICAgUVBhaW50ZXJQYXRoKiBwYXRoID0gbV9wYXRoLnBsYXRmb3JtUGF0aCgpOwot
ICAgIFFQYWludGVyKiBwID0gc3RhdGljX2Nhc3Q8UVBhaW50ZXIqPihjLT5wbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgaWYgKHN0YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dyYWRpZW50KCkpIHsK
LSAgICAgICAgcC0+ZmlsbFBhdGgoKnBhdGgsIFFCcnVzaCgqKHN0YXRlKCkubV9maWxsU3R5bGUt
PmNhbnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkucGxhdGZvcm1HcmFkaWVudCgpKSkpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5wYXR0ZXJuKCkpCi0g
ICAgICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgICAgIHAtPmZpbGxQYXRoKCpwYXRo
LCBwLT5icnVzaCgpKTsKLSAgICB9Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICBjYWlyb190
KiBjciA9IGMtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNhaXJvX3NhdmUoY3IpOworICAgIGMt
PnNhdmUoKTsKIAogICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgp
KSB7Ci0gICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHN0YXRlKCkubV9maWxsU3R5bGUtPmNh
bnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkucGxhdGZvcm1HcmFkaWVudCgpKTsKLSAgICAgICAg
Y2Fpcm9fZmlsbChjcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHN0YXRlKCkubV9maWxs
U3R5bGUtPnBhdHRlcm4oKSkKLSAgICAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKLSAgICAg
ICAgY2Fpcm9fZmlsbChjcik7Ci0gICAgfQotICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwotI2VuZGlm
CisgICAgICAgIGMtPmZpbGxQYXRoV2l0aEdyYWRpZW50KHN0YXRlKCkubV9maWxsU3R5bGUtPmNh
bnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkpOworICAgIH0gZWxzZSBpZiAoc3RhdGUoKS5tX2Zp
bGxTdHlsZS0+cGF0dGVybigpKSB7CisgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKKyAgICAg
ICAgYy0+ZmlsbFBhdGhXaXRoUGF0dGVybigpOworICAgIH0gZWxzZQorICAgICAgICBjLT5maWxs
UGF0aCgpOworCisgICAgYy0+cmVzdG9yZSgpOwogCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQ
T1JUKQogICAgIGNsZWFyUGF0aEZvckRhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUo
KTsKQEAgLTYwMCw0OSArNTY2LDE4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
dHJva2UoKQogICAgICAgICBib3VuZGluZ1JlY3QuaW5mbGF0ZShpbnNldCk7CiAgICAgICAgIHdp
bGxEcmF3KGJvdW5kaW5nUmVjdCk7CiAgICAgfQotICAgIAotICAgIC8vIEZJWE1FOiBEbyB0aGlz
IHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNpZiBQ
TEFURk9STShDRykKLSAgICBpZiAoc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5jYW52YXNHcmFkaWVu
dCgpKSB7Ci0gICAgICAgIC8vIFNoYWRpbmcgd29ya3Mgb24gdGhlIGVudGlyZSBjbGlwIHJlZ2lv
biwgc28gY29udmVydCB0aGUgY3VycmVudCBwYXRoIHRvIGEgY2xpcC4KLSAgICAgICAgYy0+c2F2
ZSgpOwotICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjLT5wbGF0
Zm9ybUNvbnRleHQoKSk7Ci0gICAgICAgIENHQ29udGV4dENsaXAoYy0+cGxhdGZvcm1Db250ZXh0
KCkpOwotICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjLT5wbGF0Zm9ybUNvbnRleHQoKSwg
c3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRm
b3JtR3JhZGllbnQoKSk7ICAgICAgICAKLSAgICAgICAgYy0+cmVzdG9yZSgpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPnBhdHRlcm4oKSkKLSAgICAg
ICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAgICAgICBDR0NvbnRleHRTdHJva2VQYXRo
KGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICB9Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICBR
UGFpbnRlclBhdGgqIHBhdGggPSBtX3BhdGgucGxhdGZvcm1QYXRoKCk7Ci0gICAgUVBhaW50ZXIq
IHAgPSBzdGF0aWNfY2FzdDxRUGFpbnRlcio+KGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBp
ZiAoc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5jYW52YXNHcmFkaWVudCgpKSB7Ci0gICAgICAgIHAt
PnNhdmUoKTsKLSAgICAgICAgcC0+c2V0QnJ1c2goKihzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPmNh
bnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkucGxhdGZvcm1HcmFkaWVudCgpKSk7Ci0gICAgICAg
IHAtPnN0cm9rZVBhdGgoKnBhdGgsIHAtPnBlbigpKTsKLSAgICAgICAgcC0+cmVzdG9yZSgpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPnBhdHRlcm4o
KSkKLSAgICAgICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAgICAgICBwLT5zdHJva2VQ
YXRoKCpwYXRoLCBwLT5wZW4oKSk7Ci0gICAgfQotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAg
Y2Fpcm9fdCogY3IgPSBjLT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBjYWlyb19zYXZlKGNyKTsK
LSAgICBpZiAoc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5jYW52YXNHcmFkaWVudCgpKSB7Ci0gICAg
ICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHN0YXRlKCkubV9zdHJva2VTdHlsZS0+Y2FudmFzR3Jh
ZGllbnQoKS0+Z3JhZGllbnQoKS5wbGF0Zm9ybUdyYWRpZW50KCkpOwotICAgICAgICBjLT5hZGRQ
YXRoKG1fcGF0aCk7Ci0gICAgICAgIGNhaXJvX3N0cm9rZShjcik7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS0+cGF0dGVybigpKQotICAgICAgICAgICAg
YXBwbHlTdHJva2VQYXR0ZXJuKCk7Ci0gICAgICAgIGMtPmFkZFBhdGgobV9wYXRoKTsKLSAgICAg
ICAgY2Fpcm9fc3Ryb2tlKGNyKTsKLSAgICB9Ci0gICAgY2Fpcm9fcmVzdG9yZShjcik7Ci0jZW5k
aWYKKworICAgIGMtPnNhdmUoKTsKKworICAgIGlmIChzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPmNh
bnZhc0dyYWRpZW50KCkpCisgICAgICAgIGMtPnN0cm9rZVBhdGhXaXRoR3JhZGllbnQoc3RhdGUo
KS5tX3N0cm9rZVN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpKTsKKyAgICBlbHNl
IGlmIChzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPnBhdHRlcm4oKSkgeworICAgICAgICBhcHBseVN0
cm9rZVBhdHRlcm4oKTsKKyAgICAgICAgYy0+c3Ryb2tlUGF0aFdpdGhQYXR0ZXJuKCk7CisgICAg
fSBlbHNlCisgICAgICAgIGMtPnN0cm9rZVBhdGgoKTsKKworICAgIGMtPnJlc3RvcmUoKTsKIAog
I2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKICAgICBjbGVhclBhdGhGb3JEYXNoYm9hcmRC
YWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKCk7CkBAIC02OTksMzkgKzYzNCwxNyBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFJlY3QoCiAgICAgRmxvYXRSZWN0IHJlY3QoeCwg
eSwgd2lkdGgsIGhlaWdodCk7CiAgICAgd2lsbERyYXcocmVjdCk7CiAKLSAgICAvLyBGSVhNRTog
RG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEku
Ci0jaWYgUExBVEZPUk0oQ0cpCi0gICAgaWYgKHN0YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dy
YWRpZW50KCkpIHsKLSAgICAgICAgYy0+c2F2ZSgpOworICAgIGMtPnNhdmUoKTsKKworICAgIGlm
IChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpKQogICAgICAgICBzdGF0ZSgp
Lm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLmZpbGwoYywgcmVjdCk7
Ci0gICAgICAgIGMtPnJlc3RvcmUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUo
KS5tX2ZpbGxTdHlsZS0+cGF0dGVybigpKQotICAgICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigp
OwotICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjLT5wbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7
Ci0gICAgfQotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgUVBhaW50ZXIqIHAgPSBzdGF0aWNfY2Fz
dDxRUGFpbnRlcio+KGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoc3RhdGUoKS5tX2Zp
bGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAgICBwLT5maWxsUmVjdChyZWN0LCBR
QnJ1c2goKihzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgp
LnBsYXRmb3JtR3JhZGllbnQoKSkpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUo
KS5tX2ZpbGxTdHlsZS0+cGF0dGVybigpKQotICAgICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigp
OwotICAgICAgICBwLT5maWxsUmVjdChyZWN0LCBwLT5icnVzaCgpKTsKLSAgICB9Ci0jZWxpZiBQ
TEFURk9STShDQUlSTykKLSAgICBjYWlyb190KiBjciA9IGMtPnBsYXRmb3JtQ29udGV4dCgpOwot
ICAgIGNhaXJvX3NhdmUoY3IpOwotICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNH
cmFkaWVudCgpKSB7Ci0gICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHN0YXRlKCkubV9maWxs
U3R5bGUtPmNhbnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkucGxhdGZvcm1HcmFkaWVudCgpKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+cGF0dGVybigp
KQotICAgICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwotICAgIH0KLSAgICBjYWlyb19yZWN0
YW5nbGUoY3IsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIGNhaXJvX2ZpbGwoY3IpOwotICAg
IGNhaXJvX3Jlc3RvcmUoY3IpOwotI2VuZGlmCisgICAgZWxzZSBpZiAoc3RhdGUoKS5tX2ZpbGxT
dHlsZS0+cGF0dGVybigpKSB7CisgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKKyAgICAgICAg
Yy0+ZmlsbFJlY3RXaXRoUGF0dGVybihyZWN0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgYy0+Zmls
bFJlY3QocmVjdCwgYy0+ZmlsbENvbG9yKCkpOworCisgICAgYy0+cmVzdG9yZSgpOwogfQogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlUmVjdChmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQpAQCAtNzU5LDExICs2NzIsMTcgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVJlYwogICAgIGJvdW5kaW5nUmVjdC5pbmZs
YXRlKGxpbmVXaWR0aCAvIDIpOwogICAgIHdpbGxEcmF3KGJvdW5kaW5nUmVjdCk7CiAKLSAgICAv
LyBGSVhNRTogTm8gc3VwcG9ydCBmb3IgZ3JhZGllbnRzIQotICAgIGlmIChzdGF0ZSgpLm1fc3Ry
b2tlU3R5bGUtPnBhdHRlcm4oKSkKKyAgICBjLT5zYXZlKCk7CisKKyAgICBpZiAoc3RhdGUoKS5t
X3N0cm9rZVN0eWxlLT5jYW52YXNHcmFkaWVudCgpKSB7CisgICAgICAgIGMtPnN0cm9rZVJlY3RX
aXRoR3JhZGllbnQoc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFk
aWVudCgpLCByZWN0LCBsaW5lV2lkdGgpOworICAgIH0gZWxzZSBpZiAoc3RhdGUoKS5tX3N0cm9r
ZVN0eWxlLT5wYXR0ZXJuKCkpIHsKICAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CisgICAg
ICAgIGMtPnN0cm9rZVJlY3RXaXRoUGF0dGVybihyZWN0LCBsaW5lV2lkdGgpOworICAgIH0gZWxz
ZQorICAgICAgICBjLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7CiAKLSAgICBjLT5zdHJv
a2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7CisgICAgYy0+cmVzdG9yZSgpOwogfQogCiAjaWYgUExB
VEZPUk0oQ0cpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmgJKHJldmlzaW9uIDM1NzgyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogICAgIGNsYXNzIEZvbnQ7CiAg
ICAgY2xhc3MgR2VuZXJhdG9yOworICAgIGNsYXNzIEdyYWRpZW50OwogICAgIGNsYXNzIEdyYXBo
aWNzQ29udGV4dFByaXZhdGU7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlOwogICAgIGNsYXNzIEltYWdlQnVmZmVyOwpAQCAtMTUwLDcgKzE1MSwxOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gQXJjIGRyYXdpbmcgKHVzZWQgYnkgYm9yZGVyLXJh
ZGl1cyBpbiBDU1MpIGp1c3Qgc3VwcG9ydHMgc3Ryb2tpbmcgYXQgdGhlIG1vbWVudC4KICAgICAg
ICAgdm9pZCBzdHJva2VBcmMoY29uc3QgSW50UmVjdCYsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5n
bGVTcGFuKTsKLSAgICAgICAgCisKKyAgICAgICAgdm9pZCBzdHJva2VQYXRoV2l0aEdyYWRpZW50
KEdyYWRpZW50Jik7CisgICAgICAgIHZvaWQgc3Ryb2tlUmVjdFdpdGhHcmFkaWVudChHcmFkaWVu
dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCk7CisgICAgICAgIHZvaWQgc3Ry
b2tlUGF0aFdpdGhQYXR0ZXJuKCk7CisgICAgICAgIHZvaWQgc3Ryb2tlUmVjdFdpdGhQYXR0ZXJu
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCk7CisgICAgICAgIHZvaWQgc3Ryb2tl
UGF0aCgpOworCisgICAgICAgIHZvaWQgZmlsbFBhdGhXaXRoR3JhZGllbnQoR3JhZGllbnQmKTsK
KyAgICAgICAgdm9pZCBmaWxsUGF0aFdpdGhQYXR0ZXJuKCk7CisgICAgICAgIHZvaWQgZmlsbFJl
Y3RXaXRoUGF0dGVybihjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAgICAgdm9pZCBmaWxsUGF0aCgp
OworCiAgICAgICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgSW50UmVjdCYsIGNvbnN0IENvbG9yJik7
CiAgICAgICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKTsK
ICAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHZW5lcmF0b3ImKTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiAzNTc4MikKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ2Fpcm9QYXRoLmgiCiAjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCiAjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKQEAgLTQ5Nyw2ICs0OTgsOTcgQEAgSW50UG9pbnQgR3JhcGhpY3NDb250ZXh0
OjpvcmlnaW4oKQogICAgIHJldHVybiBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KG1hdHJpeC54
MCksIHN0YXRpY19jYXN0PGludD4obWF0cml4LnkwKSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUGF0aFdpdGhHcmFkaWVudChHcmFkaWVudCYgZ3JhZGllbnQpCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fpcm9fdCogY3Ig
PSBtX2RhdGEtPmNyOworICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIGdyYWRpZW50LnBsYXRmb3Jt
R3JhZGllbnQoKSk7CisgICAgY2Fpcm9fZmlsbChjcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUGF0aFdpdGhQYXR0ZXJuKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CisgICAg
Y2Fpcm9fZmlsbChjcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhQ
YXR0ZXJuKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7Cisg
ICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSk7CisgICAgY2Fpcm9fZmlsbChjcik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUGF0aCgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOworICAgIHNldENvbG9y
KGNyLCBmaWxsQ29sb3IoKSk7CisgICAgY2Fpcm9fZmlsbChjcik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoV2l0aEdyYWRpZW50KEdyYWRpZW50JiBncmFkaWVudCkKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWly
b190KiBjciA9IG1fZGF0YS0+Y3I7CisgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgZ3JhZGllbnQu
cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICBjYWlyb19zdHJva2UoY3IpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdFdpdGhHcmFkaWVudChHcmFkaWVudCYgZ3JhZGllbnQs
IGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQoreworICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNhaXJvX3QqIGNyID0gbV9k
YXRhLT5jcjsKKyAgICBjYWlyb19zZXRfc291cmNlKGNyLCBncmFkaWVudC5wbGF0Zm9ybUdyYWRp
ZW50KCkpOworICAgIGNhaXJvX3JlY3RhbmdsZShjciwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCBs
aW5lV2lkdGgpOworICAgIGNhaXJvX3N0cm9rZShjcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzdHJva2VQYXRoV2l0aFBhdHRlcm4oKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKKyAg
ICBjYWlyb19zdHJva2UoY3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVj
dFdpdGhQYXR0ZXJuKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorewor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNhaXJv
X3QqIGNyID0gbV9kYXRhLT5jcjsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHJlY3QueCgpLCBy
ZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBjYWlyb19zZXRfbGlu
ZV93aWR0aChjciwgbGluZVdpZHRoKTsKKyAgICBjYWlyb19zdHJva2UoY3IpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOwor
ICAgIHNldENvbG9yKGNyLCBzdHJva2VDb2xvcigpKTsKKyAgICBjYWlyb19zdHJva2UoY3IpOwor
fQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKGNvbnN0IFBhdHRl
cm4mIHBhdHRlcm4pCiB7CiAgICAgY2Fpcm9fcGF0dGVybl90KiBwbGF0Zm9ybVBhdHRlcm4gPSBw
YXR0ZXJuLmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSk7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkocmV2aXNp
b24gMzU3ODIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAi
R3JhZGllbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5o
IgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtODkzLDYg
Kzg5NCw3NCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1UZXh0RHJhCiAgICAg
fQogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGhXaXRoR3JhZGllbnQoR3JhZGll
bnQmIGdyYWRpZW50KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBDR0NvbnRleHRDbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBDR0NvbnRl
eHREcmF3U2hhZGluZyhwbGF0Zm9ybUNvbnRleHQoKSwgZ3JhZGllbnQucGxhdGZvcm1HcmFkaWVu
dCgpKTsgICAgICAKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoV2l0aFBhdHRl
cm4oKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBDR0NvbnRleHRGaWxsUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdFdpdGhQYXR0ZXJuKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgQ0dDb250
ZXh0RmlsbFJlY3QocGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFBhdGgoKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBDR0NvbnRleHRGaWxsUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoV2l0aEdyYWRpZW50KEdyYWRpZW50
JiBncmFkaWVudCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgocGxhdGZvcm1Db250
ZXh0KCkpOworICAgIENHQ29udGV4dENsaXAocGxhdGZvcm1Db250ZXh0KCkpOworICAgIENHQ29u
dGV4dERyYXdTaGFkaW5nKHBsYXRmb3JtQ29udGV4dCgpLCBncmFkaWVudC5wbGF0Zm9ybUdyYWRp
ZW50KCkpOyAKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3RXaXRoR3JhZGll
bnQoR3JhZGllbnQmIGdyYWRpZW50LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVX
aWR0aCkKK3sKKyAgICAvLyBJbmNvbXBsZXRlLgorICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBDR0NvbnRleHRDbGlwVG9SZWN0KHBsYXRmb3JtQ29udGV4
dCgpLCByZWN0KTsKKyAgICBDR0NvbnRleHREcmF3U2hhZGluZyhwbGF0Zm9ybUNvbnRleHQoKSwg
Z3JhZGllbnQucGxhdGZvcm1HcmFkaWVudCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZVBhdGhXaXRoUGF0dGVybigpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIENHQ29udGV4dFN0cm9rZVBhdGgocGxhdGZvcm1Db250ZXh0
KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdFdpdGhQYXR0ZXJuKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQoreworICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBDR0NvbnRleHRTdHJva2VSZWN0V2l0
aFdpZHRoKHBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBsaW5lV2lkdGgpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIENHQ29udGV4dFN0cm9rZVBhdGgocGxhdGZvcm1Db250
ZXh0KCkpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKGNv
bnN0IFBhdHRlcm4mIHBhdHRlcm4pCiB7CiAgICAgQ0dQYXR0ZXJuUmVmIHBsYXRmb3JtUGF0dGVy
biA9IHBhdHRlcm4uY3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKTsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCShy
ZXZpc2lvbiAzNTc4MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3ND
b250ZXh0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAi
UGF0aC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1
ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJGb250LmgiCkBAIC05MjYsNiArOTI3LDY5IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2wKICAgICBtX2RhdGEtPnAoKS0+
c2V0QnJ1c2goUUJydXNoKGNvbG9yKSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UGF0aFdpdGhHcmFkaWVudChHcmFkaWVudCYpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUGF0aFdpdGhQYXR0ZXJuKCkKK3sKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFBhdHRlcm4oY29uc3QgRmxvYXRSZWN0
JikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkK
K3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGhXaXRo
R3JhZGllbnQoR3JhZGllbnQmKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUmVjdFdpdGhHcmFkaWVudChHcmFkaWVudCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UGF0aFdpdGhQYXR0ZXJuKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVJlY3RXaXRoUGF0dGVybihjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkKK3sKKyAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQoreworICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKGNv
bnN0IFBhdHRlcm4mIHBhdHRlcm4pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22857</attachid>
            <date>2008-08-18 14:06:34 -0700</date>
            <delta_ts>2008-08-22 10:12:44 -0700</delta_ts>
            <desc>bad patch</desc>
            <filename>Canvas-final-2.patch</filename>
            <type>text/plain</type>
            <size>15444</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lv
biAzNTc4MikKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01NSwxNSArNTUsNiBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAotI2lmIFBMQVRGT1JNKFFUKQotI2luY2x1ZGUgPFFQ
YWludGVyPgotI2luY2x1ZGUgPFFQaXhtYXA+Ci0jaW5jbHVkZSA8UVBhaW50ZXJQYXRoPgotI2Vs
aWYgUExBVEZPUk0oQ0FJUk8pCi0jaW5jbHVkZSAiQ2Fpcm9QYXRoLmgiCi0jaW5jbHVkZSA8Y2Fp
cm8uaD4KLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBI
VE1MTmFtZXM7CkBAIC01NDIsNDIgKzUzMywxNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6ZmlsbCgpCiAgICAgaWYgKCFtX3BhdGguaXNFbXB0eSgpKQogICAgICAgICB3aWxsRHJh
dyhtX3BhdGguYm91bmRpbmdSZWN0KCkpOwogCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgaWYgKHN0
YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dyYWRpZW50KCkpIHsKLSAgICAgICAgLy8gU2hhZGlu
ZyB3b3JrcyBvbiB0aGUgZW50aXJlIGNsaXAgcmVnaW9uLCBzbyBjb252ZXJ0IHRoZSBjdXJyZW50
IHBhdGggdG8gYSBjbGlwLgotICAgICAgICBjLT5zYXZlKCk7Ci0gICAgICAgIENHQ29udGV4dENs
aXAoYy0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhj
LT5wbGF0Zm9ybUNvbnRleHQoKSwgc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQo
KS0+Z3JhZGllbnQoKS5wbGF0Zm9ybUdyYWRpZW50KCkpOyAgICAgICAgCi0gICAgICAgIGMtPnJl
c3RvcmUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+
cGF0dGVybigpKQotICAgICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwotICAgICAgICBDR0Nv
bnRleHRGaWxsUGF0aChjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgfQotI2VsaWYgUExBVEZP
Uk0oUVQpCi0gICAgUVBhaW50ZXJQYXRoKiBwYXRoID0gbV9wYXRoLnBsYXRmb3JtUGF0aCgpOwot
ICAgIFFQYWludGVyKiBwID0gc3RhdGljX2Nhc3Q8UVBhaW50ZXIqPihjLT5wbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgaWYgKHN0YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dyYWRpZW50KCkpIHsK
LSAgICAgICAgcC0+ZmlsbFBhdGgoKnBhdGgsIFFCcnVzaCgqKHN0YXRlKCkubV9maWxsU3R5bGUt
PmNhbnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkucGxhdGZvcm1HcmFkaWVudCgpKSkpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5wYXR0ZXJuKCkpCi0g
ICAgICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgICAgIHAtPmZpbGxQYXRoKCpwYXRo
LCBwLT5icnVzaCgpKTsKLSAgICB9Ci0jZWxpZiBQTEFURk9STShDQUlSTykKLSAgICBjYWlyb190
KiBjciA9IGMtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNhaXJvX3NhdmUoY3IpOworICAgIGMt
PnNhdmUoKTsKIAogICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgp
KSB7Ci0gICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHN0YXRlKCkubV9maWxsU3R5bGUtPmNh
bnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkucGxhdGZvcm1HcmFkaWVudCgpKTsKLSAgICAgICAg
Y2Fpcm9fZmlsbChjcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHN0YXRlKCkubV9maWxs
U3R5bGUtPnBhdHRlcm4oKSkKLSAgICAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKLSAgICAg
ICAgY2Fpcm9fZmlsbChjcik7Ci0gICAgfQotICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwotI2VuZGlm
CisgICAgICAgIGMtPmZpbGxQYXRoV2l0aEdyYWRpZW50KHN0YXRlKCkubV9maWxsU3R5bGUtPmNh
bnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkpOworICAgIH0gZWxzZSBpZiAoc3RhdGUoKS5tX2Zp
bGxTdHlsZS0+cGF0dGVybigpKSB7CisgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKKyAgICAg
ICAgYy0+ZmlsbFBhdGhXaXRoUGF0dGVybigpOworICAgIH0gZWxzZQorICAgICAgICBjLT5maWxs
UGF0aCgpOworCisgICAgYy0+cmVzdG9yZSgpOwogCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQ
T1JUKQogICAgIGNsZWFyUGF0aEZvckRhc2hib2FyZEJhY2t3YXJkQ29tcGF0aWJpbGl0eU1vZGUo
KTsKQEAgLTYwMCw0OSArNTY2LDE4IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
dHJva2UoKQogICAgICAgICBib3VuZGluZ1JlY3QuaW5mbGF0ZShpbnNldCk7CiAgICAgICAgIHdp
bGxEcmF3KGJvdW5kaW5nUmVjdCk7CiAgICAgfQotICAgIAotICAgIC8vIEZJWE1FOiBEbyB0aGlz
IHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNpZiBQ
TEFURk9STShDRykKLSAgICBpZiAoc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5jYW52YXNHcmFkaWVu
dCgpKSB7Ci0gICAgICAgIC8vIFNoYWRpbmcgd29ya3Mgb24gdGhlIGVudGlyZSBjbGlwIHJlZ2lv
biwgc28gY29udmVydCB0aGUgY3VycmVudCBwYXRoIHRvIGEgY2xpcC4KLSAgICAgICAgYy0+c2F2
ZSgpOwotICAgICAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjLT5wbGF0
Zm9ybUNvbnRleHQoKSk7Ci0gICAgICAgIENHQ29udGV4dENsaXAoYy0+cGxhdGZvcm1Db250ZXh0
KCkpOwotICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhjLT5wbGF0Zm9ybUNvbnRleHQoKSwg
c3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRm
b3JtR3JhZGllbnQoKSk7ICAgICAgICAKLSAgICAgICAgYy0+cmVzdG9yZSgpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPnBhdHRlcm4oKSkKLSAgICAg
ICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAgICAgICBDR0NvbnRleHRTdHJva2VQYXRo
KGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICB9Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICBR
UGFpbnRlclBhdGgqIHBhdGggPSBtX3BhdGgucGxhdGZvcm1QYXRoKCk7Ci0gICAgUVBhaW50ZXIq
IHAgPSBzdGF0aWNfY2FzdDxRUGFpbnRlcio+KGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBp
ZiAoc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5jYW52YXNHcmFkaWVudCgpKSB7Ci0gICAgICAgIHAt
PnNhdmUoKTsKLSAgICAgICAgcC0+c2V0QnJ1c2goKihzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPmNh
bnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkucGxhdGZvcm1HcmFkaWVudCgpKSk7Ci0gICAgICAg
IHAtPnN0cm9rZVBhdGgoKnBhdGgsIHAtPnBlbigpKTsKLSAgICAgICAgcC0+cmVzdG9yZSgpOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPnBhdHRlcm4o
KSkKLSAgICAgICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAgICAgICBwLT5zdHJva2VQ
YXRoKCpwYXRoLCBwLT5wZW4oKSk7Ci0gICAgfQotI2VsaWYgUExBVEZPUk0oQ0FJUk8pCi0gICAg
Y2Fpcm9fdCogY3IgPSBjLT5wbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBjYWlyb19zYXZlKGNyKTsK
LSAgICBpZiAoc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5jYW52YXNHcmFkaWVudCgpKSB7Ci0gICAg
ICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHN0YXRlKCkubV9zdHJva2VTdHlsZS0+Y2FudmFzR3Jh
ZGllbnQoKS0+Z3JhZGllbnQoKS5wbGF0Zm9ybUdyYWRpZW50KCkpOwotICAgICAgICBjLT5hZGRQ
YXRoKG1fcGF0aCk7Ci0gICAgICAgIGNhaXJvX3N0cm9rZShjcik7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS0+cGF0dGVybigpKQotICAgICAgICAgICAg
YXBwbHlTdHJva2VQYXR0ZXJuKCk7Ci0gICAgICAgIGMtPmFkZFBhdGgobV9wYXRoKTsKLSAgICAg
ICAgY2Fpcm9fc3Ryb2tlKGNyKTsKLSAgICB9Ci0gICAgY2Fpcm9fcmVzdG9yZShjcik7Ci0jZW5k
aWYKKworICAgIGMtPnNhdmUoKTsKKworICAgIGlmIChzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPmNh
bnZhc0dyYWRpZW50KCkpCisgICAgICAgIGMtPnN0cm9rZVBhdGhXaXRoR3JhZGllbnQoc3RhdGUo
KS5tX3N0cm9rZVN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpKTsKKyAgICBlbHNl
IGlmIChzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPnBhdHRlcm4oKSkgeworICAgICAgICBhcHBseVN0
cm9rZVBhdHRlcm4oKTsKKyAgICAgICAgYy0+c3Ryb2tlUGF0aFdpdGhQYXR0ZXJuKCk7CisgICAg
fSBlbHNlCisgICAgICAgIGMtPnN0cm9rZVBhdGgoKTsKKworICAgIGMtPnJlc3RvcmUoKTsKIAog
I2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKICAgICBjbGVhclBhdGhGb3JEYXNoYm9hcmRC
YWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKCk7CkBAIC02OTksMzkgKzYzNCwxNyBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFJlY3QoCiAgICAgRmxvYXRSZWN0IHJlY3QoeCwg
eSwgd2lkdGgsIGhlaWdodCk7CiAgICAgd2lsbERyYXcocmVjdCk7CiAKLSAgICAvLyBGSVhNRTog
RG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEku
Ci0jaWYgUExBVEZPUk0oQ0cpCi0gICAgaWYgKHN0YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dy
YWRpZW50KCkpIHsKLSAgICAgICAgYy0+c2F2ZSgpOworICAgIGMtPnNhdmUoKTsKKworICAgIGlm
IChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpKQogICAgICAgICBzdGF0ZSgp
Lm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLmZpbGwoYywgcmVjdCk7
Ci0gICAgICAgIGMtPnJlc3RvcmUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUo
KS5tX2ZpbGxTdHlsZS0+cGF0dGVybigpKQotICAgICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigp
OwotICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjLT5wbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7
Ci0gICAgfQotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgUVBhaW50ZXIqIHAgPSBzdGF0aWNfY2Fz
dDxRUGFpbnRlcio+KGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoc3RhdGUoKS5tX2Zp
bGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAgICBwLT5maWxsUmVjdChyZWN0LCBR
QnJ1c2goKihzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgp
LnBsYXRmb3JtR3JhZGllbnQoKSkpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUo
KS5tX2ZpbGxTdHlsZS0+cGF0dGVybigpKQotICAgICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigp
OwotICAgICAgICBwLT5maWxsUmVjdChyZWN0LCBwLT5icnVzaCgpKTsKLSAgICB9Ci0jZWxpZiBQ
TEFURk9STShDQUlSTykKLSAgICBjYWlyb190KiBjciA9IGMtPnBsYXRmb3JtQ29udGV4dCgpOwot
ICAgIGNhaXJvX3NhdmUoY3IpOwotICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNH
cmFkaWVudCgpKSB7Ci0gICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIHN0YXRlKCkubV9maWxs
U3R5bGUtPmNhbnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkucGxhdGZvcm1HcmFkaWVudCgpKTsK
LSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+cGF0dGVybigp
KQotICAgICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwotICAgIH0KLSAgICBjYWlyb19yZWN0
YW5nbGUoY3IsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIGNhaXJvX2ZpbGwoY3IpOwotICAg
IGNhaXJvX3Jlc3RvcmUoY3IpOwotI2VuZGlmCisgICAgZWxzZSBpZiAoc3RhdGUoKS5tX2ZpbGxT
dHlsZS0+cGF0dGVybigpKSB7CisgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKKyAgICAgICAg
Yy0+ZmlsbFJlY3RXaXRoUGF0dGVybihyZWN0KTsKKyAgICB9IGVsc2UKKyAgICAgICAgYy0+Zmls
bFJlY3QocmVjdCwgYy0+ZmlsbENvbG9yKCkpOworCisgICAgYy0+cmVzdG9yZSgpOwogfQogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlUmVjdChmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KQpAQCAtNzU5LDExICs2NzIsMTcgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVJlYwogICAgIGJvdW5kaW5nUmVjdC5pbmZs
YXRlKGxpbmVXaWR0aCAvIDIpOwogICAgIHdpbGxEcmF3KGJvdW5kaW5nUmVjdCk7CiAKLSAgICAv
LyBGSVhNRTogTm8gc3VwcG9ydCBmb3IgZ3JhZGllbnRzIQotICAgIGlmIChzdGF0ZSgpLm1fc3Ry
b2tlU3R5bGUtPnBhdHRlcm4oKSkKKyAgICBjLT5zYXZlKCk7CisKKyAgICBpZiAoc3RhdGUoKS5t
X3N0cm9rZVN0eWxlLT5jYW52YXNHcmFkaWVudCgpKSB7CisgICAgICAgIGMtPnN0cm9rZVJlY3RX
aXRoR3JhZGllbnQoc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFk
aWVudCgpLCByZWN0LCBsaW5lV2lkdGgpOworICAgIH0gZWxzZSBpZiAoc3RhdGUoKS5tX3N0cm9r
ZVN0eWxlLT5wYXR0ZXJuKCkpIHsKICAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7CisgICAg
ICAgIGMtPnN0cm9rZVJlY3RXaXRoUGF0dGVybihyZWN0LCBsaW5lV2lkdGgpOworICAgIH0gZWxz
ZQorICAgICAgICBjLT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7CiAKLSAgICBjLT5zdHJv
a2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7CisgICAgYy0+cmVzdG9yZSgpOwogfQogCiAjaWYgUExB
VEZPUk0oQ0cpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmgJKHJldmlzaW9uIDM1NzgyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogICAgIGNsYXNzIEZvbnQ7CiAg
ICAgY2xhc3MgR2VuZXJhdG9yOworICAgIGNsYXNzIEdyYWRpZW50OwogICAgIGNsYXNzIEdyYXBo
aWNzQ29udGV4dFByaXZhdGU7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlOwogICAgIGNsYXNzIEltYWdlQnVmZmVyOwpAQCAtMTUwLDcgKzE1MSwxOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICAgICAgLy8gQXJjIGRyYXdpbmcgKHVzZWQgYnkgYm9yZGVyLXJh
ZGl1cyBpbiBDU1MpIGp1c3Qgc3VwcG9ydHMgc3Ryb2tpbmcgYXQgdGhlIG1vbWVudC4KICAgICAg
ICAgdm9pZCBzdHJva2VBcmMoY29uc3QgSW50UmVjdCYsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5n
bGVTcGFuKTsKLSAgICAgICAgCisKKyAgICAgICAgdm9pZCBzdHJva2VQYXRoV2l0aEdyYWRpZW50
KEdyYWRpZW50Jik7CisgICAgICAgIHZvaWQgc3Ryb2tlUmVjdFdpdGhHcmFkaWVudChHcmFkaWVu
dCYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCk7CisgICAgICAgIHZvaWQgc3Ry
b2tlUGF0aFdpdGhQYXR0ZXJuKCk7CisgICAgICAgIHZvaWQgc3Ryb2tlUmVjdFdpdGhQYXR0ZXJu
KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCk7CisgICAgICAgIHZvaWQgc3Ryb2tl
UGF0aCgpOworCisgICAgICAgIHZvaWQgZmlsbFBhdGhXaXRoR3JhZGllbnQoR3JhZGllbnQmKTsK
KyAgICAgICAgdm9pZCBmaWxsUGF0aFdpdGhQYXR0ZXJuKCk7CisgICAgICAgIHZvaWQgZmlsbFJl
Y3RXaXRoUGF0dGVybihjb25zdCBGbG9hdFJlY3QmKTsKKyAgICAgICAgdm9pZCBmaWxsUGF0aCgp
OworCiAgICAgICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgSW50UmVjdCYsIGNvbnN0IENvbG9yJik7
CiAgICAgICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKTsK
ICAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHZW5lcmF0b3ImKTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiAzNTc4MikKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiQ2Fpcm9QYXRoLmgiCiAjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCiAjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVk
ZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKQEAgLTQ5Nyw2ICs0OTgsOTcgQEAgSW50UG9pbnQgR3JhcGhpY3NDb250ZXh0
OjpvcmlnaW4oKQogICAgIHJldHVybiBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KG1hdHJpeC54
MCksIHN0YXRpY19jYXN0PGludD4obWF0cml4LnkwKSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUGF0aFdpdGhHcmFkaWVudChHcmFkaWVudCYgZ3JhZGllbnQpCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fpcm9fdCogY3Ig
PSBtX2RhdGEtPmNyOworICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIGdyYWRpZW50LnBsYXRmb3Jt
R3JhZGllbnQoKSk7CisgICAgY2Fpcm9fZmlsbChjcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUGF0aFdpdGhQYXR0ZXJuKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CisgICAg
Y2Fpcm9fZmlsbChjcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdFdpdGhQ
YXR0ZXJuKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7Cisg
ICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwg
cmVjdC5oZWlnaHQoKSk7CisgICAgY2Fpcm9fZmlsbChjcik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUGF0aCgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOworICAgIHNldENvbG9y
KGNyLCBmaWxsQ29sb3IoKSk7CisgICAgY2Fpcm9fZmlsbChjcik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoV2l0aEdyYWRpZW50KEdyYWRpZW50JiBncmFkaWVudCkKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWly
b190KiBjciA9IG1fZGF0YS0+Y3I7CisgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgZ3JhZGllbnQu
cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICBjYWlyb19zdHJva2UoY3IpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdFdpdGhHcmFkaWVudChHcmFkaWVudCYgZ3JhZGllbnQs
IGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQoreworICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNhaXJvX3QqIGNyID0gbV9k
YXRhLT5jcjsKKyAgICBjYWlyb19zZXRfc291cmNlKGNyLCBncmFkaWVudC5wbGF0Zm9ybUdyYWRp
ZW50KCkpOworICAgIGNhaXJvX3JlY3RhbmdsZShjciwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCBs
aW5lV2lkdGgpOworICAgIGNhaXJvX3N0cm9rZShjcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzdHJva2VQYXRoV2l0aFBhdHRlcm4oKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKKyAg
ICBjYWlyb19zdHJva2UoY3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVj
dFdpdGhQYXR0ZXJuKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQorewor
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNhaXJv
X3QqIGNyID0gbV9kYXRhLT5jcjsKKyAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHJlY3QueCgpLCBy
ZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBjYWlyb19zZXRfbGlu
ZV93aWR0aChjciwgbGluZVdpZHRoKTsKKyAgICBjYWlyb19zdHJva2UoY3IpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOwor
ICAgIHNldENvbG9yKGNyLCBzdHJva2VDb2xvcigpKTsKKyAgICBjYWlyb19zdHJva2UoY3IpOwor
fQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKGNvbnN0IFBhdHRl
cm4mIHBhdHRlcm4pCiB7CiAgICAgY2Fpcm9fcGF0dGVybl90KiBwbGF0Zm9ybVBhdHRlcm4gPSBw
YXR0ZXJuLmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSk7CkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkocmV2aXNp
b24gMzU3ODIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQWZm
aW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAi
R3JhZGllbnQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDRy5o
IgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpAQCAtODkzLDYg
Kzg5NCw3NCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1UZXh0RHJhCiAgICAg
fQogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGhXaXRoR3JhZGllbnQoR3JhZGll
bnQmIGdyYWRpZW50KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBDR0NvbnRleHRDbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBDR0NvbnRl
eHREcmF3U2hhZGluZyhwbGF0Zm9ybUNvbnRleHQoKSwgZ3JhZGllbnQucGxhdGZvcm1HcmFkaWVu
dCgpKTsgICAgICAKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoV2l0aFBhdHRl
cm4oKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBDR0NvbnRleHRGaWxsUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdFdpdGhQYXR0ZXJuKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgQ0dDb250
ZXh0RmlsbFJlY3QocGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFBhdGgoKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBDR0NvbnRleHRGaWxsUGF0aChwbGF0Zm9ybUNvbnRleHQoKSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoV2l0aEdyYWRpZW50KEdyYWRpZW50
JiBncmFkaWVudCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgocGxhdGZvcm1Db250
ZXh0KCkpOworICAgIENHQ29udGV4dENsaXAocGxhdGZvcm1Db250ZXh0KCkpOworICAgIENHQ29u
dGV4dERyYXdTaGFkaW5nKHBsYXRmb3JtQ29udGV4dCgpLCBncmFkaWVudC5wbGF0Zm9ybUdyYWRp
ZW50KCkpOyAKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3RXaXRoR3JhZGll
bnQoR3JhZGllbnQmIGdyYWRpZW50LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVX
aWR0aCkKK3sKKyAgICAvLyBJbmNvbXBsZXRlLgorICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CisgICAgICAgIHJldHVybjsKKyAgICBDR0NvbnRleHRDbGlwVG9SZWN0KHBsYXRmb3JtQ29udGV4
dCgpLCByZWN0KTsKKyAgICBDR0NvbnRleHREcmF3U2hhZGluZyhwbGF0Zm9ybUNvbnRleHQoKSwg
Z3JhZGllbnQucGxhdGZvcm1HcmFkaWVudCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZVBhdGhXaXRoUGF0dGVybigpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIENHQ29udGV4dFN0cm9rZVBhdGgocGxhdGZvcm1Db250ZXh0
KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdFdpdGhQYXR0ZXJuKGNv
bnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQoreworICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBDR0NvbnRleHRTdHJva2VSZWN0V2l0
aFdpZHRoKHBsYXRmb3JtQ29udGV4dCgpLCByZWN0LCBsaW5lV2lkdGgpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIENHQ29udGV4dFN0cm9rZVBhdGgocGxhdGZvcm1Db250
ZXh0KCkpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKGNv
bnN0IFBhdHRlcm4mIHBhdHRlcm4pCiB7CiAgICAgQ0dQYXR0ZXJuUmVmIHBsYXRmb3JtUGF0dGVy
biA9IHBhdHRlcm4uY3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKTsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCShy
ZXZpc2lvbiAzNTc4MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3ND
b250ZXh0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAi
UGF0aC5oIgogI2luY2x1ZGUgIlBhdHRlcm4uaCIKICNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1
ZGUgIkdyYWRpZW50LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJGb250LmgiCkBAIC05MjYsNiArOTI3LDY5IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2wKICAgICBtX2RhdGEtPnAoKS0+
c2V0QnJ1c2goUUJydXNoKGNvbG9yKSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxs
UGF0aFdpdGhHcmFkaWVudChHcmFkaWVudCYpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUGF0aFdpdGhQYXR0ZXJuKCkKK3sKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0V2l0aFBhdHRlcm4oY29uc3QgRmxvYXRSZWN0
JikKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkK
K3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGhXaXRo
R3JhZGllbnQoR3JhZGllbnQmKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUmVjdFdpdGhHcmFkaWVudChHcmFkaWVudCYsIGNvbnN0IEZsb2F0UmVjdCYs
IGZsb2F0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UGF0aFdpdGhQYXR0ZXJuKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAg
ICByZXR1cm47CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnN0cm9rZVJlY3RXaXRoUGF0dGVybihjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCkKK3sKKyAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQoreworICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKGNv
bnN0IFBhdHRlcm4mIHBhdHRlcm4pCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22934</attachid>
            <date>2008-08-22 07:13:42 -0700</date>
            <delta_ts>2008-08-22 10:12:35 -0700</delta_ts>
            <desc>A start on the patch for krit</desc>
            <filename>A-start-on-the-patch-for-krit.patch</filename>
            <type>text/plain</type>
            <size>40244</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">MWE1ZGMzMTEzNDg2NDczZTcyYTVjNjM3ZmJkNjllYWJiNDJmYWQ0NgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwZWRjYTZhLi5jNDFmYzc5IDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjI5Miw2ICsyMjkyLDcg
QEAKIAkJQTg4QUQ1MkYwOTUyNEI5MjAwMUREMTk2IC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3JrIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg1RDdBMkYw
ODc5RUJBOTAwNkE5MTcyIC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3JrICovOyB9OwogCQlBODhERDQ4
NzBCNDYyOUEzMDBDMDI5OTAgLyogUGF0aFRyYXZlcnNhbFN0YXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODhERDQ4NjBCNDYyOUEzMDBDMDI5OTAg
LyogUGF0aFRyYXZlcnNhbFN0YXRlLmggKi87IH07CiAJCUE4OERENDg5MEI0NjI5QjAwMEMwMjk5
MCAvKiBQYXRoVHJhdmVyc2FsU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTg4REQ0ODgwQjQ2MjlCMDAwQzAyOTkwIC8qIFBhdGhUcmF2ZXJz
YWxTdGF0ZS5jcHAgKi87IH07CisJCUE4OEZFMzM0MEU1RUVFODcwMDhEOEMwRiAvKiBHcmFwaGlj
c0NvbnRleHRQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBODhGRTMzMzBFNUVFRTg3MDA4RDhDMEYgLyogR3JhcGhpY3NDb250ZXh0UHJpdmF0
ZS5oICovOyB9OwogCQlBODk5NDMyODBCNDIzMzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4OTk0MzI2MEI0
MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5oICovOyB9OwogCQlBODk5NDMyOTBCNDIzMzg4
MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTg5OTQzMjcwQjQyMzM4NzAwRDdDODAyIC8qIEJpdG1hcEltYWdl
LmNwcCAqLzsgfTsKIAkJQThBOTA5QUMwQ0JDRDZCNTAwMjlCODA3IC8qIFJlbmRlclNWR1RyYW5z
Zm9ybWFibGVDb250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4QTkwOUFBMENCQ0Q2QjUwMDI5QjgwNyAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyLmggKi87IH07CkBAIC02NjYxLDYgKzY2NjIsNyBAQAogCQlBODcxREZFMTBB
MTUzNzZCMDBCMTJBNjggLyogUmVuZGVyV2lkZ2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZW5kZXJXaWRnZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBODhERDQ4NjBCNDYyOUEzMDBDMDI5OTAgLyogUGF0aFRyYXZlcnNhbFN0YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhdGhUcmF2ZXJzYWxTdGF0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODhERDQ4ODBCNDYyOUIwMDBDMDI5OTAgLyog
UGF0aFRyYXZlcnNhbFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBhdGhUcmF2ZXJzYWxTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUE4OEZFMzMzMEU1RUVFODcwMDhEOEMwRiAvKiBHcmFwaGljc0NvbnRleHRQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dFByaXZhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg5OTQzMjYwQjQyMzM4NzAwRDdDODAyIC8q
IEJpdG1hcEltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpdG1hcElt
YWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4OTk0MzI3MEI0MjMzODcwMEQ3
QzgwMiAvKiBCaXRtYXBJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBCaXRtYXBJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTkw
OUFBMENCQ0Q2QjUwMDI5QjgwNyAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1RyYW5zZm9ybWFibGVD
b250YWluZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMjIwLDYgKzEyMjIy
LDcgQEAKIAkJCQlCMkMzREE1RjBEMDA2Q0Q2MDBFRjZGMjYgLyogR2x5cGhXaWR0aE1hcC5oICov
LAogCQkJCUJDNTNDNjA3MERBNTZDNTcwMDIxRUI1RCAvKiBHcmFkaWVudC5jcHAgKi8sCiAJCQkJ
QkM1M0M1RjQwREE1NkI5MjAwMjFFQjVEIC8qIEdyYWRpZW50LmggKi8sCisJCQkJQTg4RkUzMzMw
RTVFRUU4NzAwOEQ4QzBGIC8qIEdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCAqLywKIAkJCQlCMkEw
MTU5MjBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmNwcCAqLywKIAkJCQlCMkEw
MTU5MzBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmggKi8sCiAJCQkJQjJBMDE1
OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwICovLApAQCAtMTU0MzcsNiAr
MTU0NDAsNyBAQAogCQkJCTI5QUFDNTFGMEU1Mzk2M0IwMDhGOUIzQiAvKiBBY2Nlc3NpYmlsaXR5
VGFibGVIZWFkZXJDb250YWluZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4QTQ4NDc4MEU1Mjcy
QzUwMEMzRkU3NiAvKiBTY3JpcHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEZBNkU1
RDBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTg4RkUz
MzQwRTVFRUU4NzAwOEQ4QzBGIC8qIEdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQ3VzdG9tLmNwcAppbmRleCA5MmVkOGU4Li4zN2UyNTRmIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9t
LmNwcApAQCAtNDQsOCArNDQsOCBAQCBzdGF0aWMgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4
ZWMsIENhbnZhc1N0eWxlKiBzdHlsZSkKIHsKICAgICBpZiAoc3R5bGUtPmNhbnZhc0dyYWRpZW50
KCkpCiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIHN0eWxlLT5jYW52YXNHcmFkaWVudCgpKTsK
LSAgICBpZiAoc3R5bGUtPnBhdHRlcm4oKSkKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgc3R5
bGUtPnBhdHRlcm4oKSk7CisgICAgaWYgKHN0eWxlLT5jYW52YXNQYXR0ZXJuKCkpCisgICAgICAg
IHJldHVybiB0b0pTKGV4ZWMsIHN0eWxlLT5jYW52YXNQYXR0ZXJuKCkpOwogICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCBzdHlsZS0+Y29sb3IoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
Y3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5j
cHAKaW5kZXggN2E3MjEzNC4uZmQwY2E1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTR3Jh
ZGllbnRWYWx1ZS5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKQEAg
LTcxLDcgKzcxLDcgQEAgU3RyaW5nIENTU0dyYWRpZW50VmFsdWU6OmNzc1RleHQoKSBjb25zdAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUdyYWRpZW50KiBDU1NHcmFkaWVudFZhbHVlOjpjcmVh
dGVHcmFkaWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQor
UGFzc1JlZlB0cjxHcmFkaWVudD4gQ1NTR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBBU1NFUlQo
IXNpemUuaXNFbXB0eSgpKTsKICAgICAKQEAgLTgwLDEzICs4MCwxMyBAQCBHcmFkaWVudCogQ1NT
R3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29u
c3QgSW50U2l6ZQogICAgIEZsb2F0UG9pbnQgZmlyc3RQb2ludCA9IHJlc29sdmVQb2ludChtX2Zp
cnN0WC5nZXQoKSwgbV9maXJzdFkuZ2V0KCksIHNpemUsIHpvb21GYWN0b3IpOwogICAgIEZsb2F0
UG9pbnQgc2Vjb25kUG9pbnQgPSByZXNvbHZlUG9pbnQobV9zZWNvbmRYLmdldCgpLCBtX3NlY29u
ZFkuZ2V0KCksIHNpemUsIHpvb21GYWN0b3IpOwogICAgIAotICAgIEdyYWRpZW50KiBncmFkaWVu
dCA9IDA7CisgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudDsKICAgICBpZiAobV90eXBlID09
IENTU0xpbmVhckdyYWRpZW50KQotICAgICAgICBncmFkaWVudCA9IG5ldyBHcmFkaWVudChmaXJz
dFBvaW50LCBzZWNvbmRQb2ludCk7CisgICAgICAgIGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0
ZShmaXJzdFBvaW50LCBzZWNvbmRQb2ludCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGZsb2F0IGZp
cnN0UmFkaXVzID0gcmVzb2x2ZVJhZGl1cyhtX2ZpcnN0UmFkaXVzLmdldCgpLCB6b29tRmFjdG9y
KTsKICAgICAgICAgZmxvYXQgc2Vjb25kUmFkaXVzID0gcmVzb2x2ZVJhZGl1cyhtX3NlY29uZFJh
ZGl1cy5nZXQoKSwgem9vbUZhY3Rvcik7Ci0gICAgICAgIGdyYWRpZW50ID0gbmV3IEdyYWRpZW50
KGZpcnN0UG9pbnQsIGZpcnN0UmFkaXVzLCBzZWNvbmRQb2ludCwgc2Vjb25kUmFkaXVzKTsKKyAg
ICAgICAgZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKGZpcnN0UG9pbnQsIGZpcnN0UmFkaXVz
LCBzZWNvbmRQb2ludCwgc2Vjb25kUmFkaXVzKTsKICAgICB9CiAKICAgICAvLyBOb3cgYWRkIHRo
ZSBzdG9wcy4KQEAgLTEwMSw3ICsxMDEsNyBAQCBHcmFkaWVudCogQ1NTR3JhZGllbnRWYWx1ZTo6
Y3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZQogICAg
IC8vIFRoZSBiYWNrIGVuZCBhbHJlYWR5IHNvcnRlZCB0aGUgc3RvcHMuCiAgICAgZ3JhZGllbnQt
PnNldFN0b3BzU29ydGVkKHRydWUpOwogCi0gICAgcmV0dXJuIGdyYWRpZW50OworICAgIHJldHVy
biBncmFkaWVudC5yZWxlYXNlKCk7CiB9CiAKIEltYWdlKiBDU1NHcmFkaWVudFZhbHVlOjppbWFn
ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oIGIvV2ViQ29yZS9jc3MvQ1NTR3JhZGll
bnRWYWx1ZS5oCmluZGV4IGI5MGQzMDcuLjRjOTBiZTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3Nz
L0NTU0dyYWRpZW50VmFsdWUuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgK
QEAgLTgyLDcgKzgyLDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgLy8gQ3JlYXRlIHRo
ZSBncmFkaWVudCBmb3IgYSBnaXZlbiBzaXplLgotICAgIEdyYWRpZW50KiBjcmVhdGVHcmFkaWVu
dChSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJik7CisgICAgUGFzc1JlZlB0cjxHcmFkaWVu
dD4gY3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpOwogICAgIAog
ICAgIC8vIFJlc29sdmUgcG9pbnRzL3JhZGlpIHRvIGZyb250IGVuZCB2YWx1ZXMuCiAgICAgRmxv
YXRQb2ludCByZXNvbHZlUG9pbnQoQ1NTUHJpbWl0aXZlVmFsdWUqLCBDU1NQcmltaXRpdmVWYWx1
ZSosIGNvbnN0IEludFNpemUmLCBmbG9hdCB6b29tRmFjdG9yKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9DYW52YXNHcmFkaWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvQ2FudmFzR3JhZGllbnQu
Y3BwCmluZGV4IGMxNTYzMzguLmFhNWYwM2MgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9DYW52
YXNHcmFkaWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc0dyYWRpZW50LmNwcApAQCAt
MzIsMTIgKzMyLDEyIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENhbnZhc0dyYWRpZW50OjpD
YW52YXNHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEp
Ci0gICAgOiBtX2dyYWRpZW50KHAwLCBwMSkKKyAgICA6IG1fZ3JhZGllbnQoR3JhZGllbnQ6OmNy
ZWF0ZShwMCwgcDEpKQogewogfQogCiBDYW52YXNHcmFkaWVudDo6Q2FudmFzR3JhZGllbnQoY29u
c3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQg
cjEpCi0gICAgOiBtX2dyYWRpZW50KHAwLCByMCwgcDEsIHIxKQorICAgIDogbV9ncmFkaWVudChH
cmFkaWVudDo6Y3JlYXRlKHAwLCByMCwgcDEsIHIxKSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0NhbnZhc0dyYWRpZW50LmggYi9XZWJDb3JlL2h0bWwvQ2FudmFzR3JhZGllbnQu
aAppbmRleCBmMDhiZmZmLi40MDcyOTVlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFz
R3JhZGllbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvQ2FudmFzR3JhZGllbnQuaApAQCAtNDYsMTcg
KzQ2LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ2FudmFzR3JhZGllbnQocDAsIHIwLCBwMSwgcjEpKTsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgR3JhZGllbnQmIGdyYWRpZW50KCkgeyByZXR1cm4gbV9ncmFkaWVudDsgfQor
ICAgICAgICBHcmFkaWVudCogZ3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX2dyYWRpZW50Lmdl
dCgpOyB9CiAKLSAgICAgICAgdm9pZCBhZGRDb2xvclN0b3AoZmxvYXQgdmFsdWUsIGNvbnN0IFN0
cmluZyYgY29sb3IpIHsgbV9ncmFkaWVudC5hZGRDb2xvclN0b3AodmFsdWUsIGNvbG9yKTsgfQor
ICAgICAgICB2b2lkIGFkZENvbG9yU3RvcChmbG9hdCB2YWx1ZSwgY29uc3QgU3RyaW5nJiBjb2xv
cikgeyBtX2dyYWRpZW50LT5hZGRDb2xvclN0b3AodmFsdWUsIGNvbG9yKTsgfQogCi0gICAgICAg
IHZvaWQgZ2V0Q29sb3IoZmxvYXQgdmFsdWUsIGZsb2F0KiByLCBmbG9hdCogZywgZmxvYXQqIGIs
IGZsb2F0KiBhKSBjb25zdCB7IG1fZ3JhZGllbnQuZ2V0Q29sb3IodmFsdWUsIHIsIGcsIGIsIGEp
OyB9CisgICAgICAgIHZvaWQgZ2V0Q29sb3IoZmxvYXQgdmFsdWUsIGZsb2F0KiByLCBmbG9hdCog
ZywgZmxvYXQqIGIsIGZsb2F0KiBhKSBjb25zdCB7IG1fZ3JhZGllbnQtPmdldENvbG9yKHZhbHVl
LCByLCBnLCBiLCBhKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ2FudmFzR3JhZGllbnQo
Y29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKTsKICAgICAgICAgQ2Fu
dmFzR3JhZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBv
aW50JiBwMSwgZmxvYXQgcjEpOwogICAgICAgICAKLSAgICAgICAgR3JhZGllbnQgbV9ncmFkaWVu
dDsKKyAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBtX2dyYWRpZW50OwogICAgIH07CiAKIH0gLy9u
YW1lc3BhY2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmNwcCBiL1dl
YkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmNwcAppbmRleCA0NGZhMjFhLi42MmE0NjIwIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5jcHAKKysrIGIvV2ViQ29yZS9odG1s
L0NhbnZhc1BhdHRlcm4uY3BwCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgQ2FudmFzUGF0dGVybjo6
cGFyc2VSZXBldGl0aW9uVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHJlcGVhdFgsIGJv
b2wmCiB9CiAKIENhbnZhc1BhdHRlcm46OkNhbnZhc1BhdHRlcm4oSW1hZ2UqIGltYWdlLCBib29s
IHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKLSAgICA6IG1fcGF0dGVy
bihpbWFnZSwgcmVwZWF0WCwgcmVwZWF0WSkKKyAgICA6IG1fcGF0dGVybihQYXR0ZXJuOjpjcmVh
dGUoaW1hZ2UsIHJlcGVhdFgsIHJlcGVhdFkpKQogICAgICwgbV9vcmlnaW5DbGVhbihvcmlnaW5D
bGVhbikKIHsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmggYi9X
ZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5oCmluZGV4IDc5Yzc4NzIuLjZjMDEyZDEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmgKKysrIGIvV2ViQ29yZS9odG1sL0Nh
bnZhc1BhdHRlcm4uaApAQCAtNDUsMTUgKzQ1LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNQYXR0ZXJuKGlt
YWdlLCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikpOwogICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKCkgeyByZXR1cm4gbV9wYXR0ZXJuOyB9
CisKKyAgICAgICAgUGF0dGVybiogcGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fcGF0dGVybi5n
ZXQoKTsgfQogCiAgICAgICAgIGJvb2wgb3JpZ2luQ2xlYW4oKSBjb25zdCB7IHJldHVybiBtX29y
aWdpbkNsZWFuOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBDYW52YXNQYXR0ZXJuKEltYWdl
KiwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pOwogCi0gICAg
ICAgIFBhdHRlcm4gbV9wYXR0ZXJuOworICAgICAgICBSZWZQdHI8UGF0dGVybj4gbV9wYXR0ZXJu
OwogICAgICAgICBib29sIG1fb3JpZ2luQ2xlYW47CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9XZWJDb3JlL2h0bWwvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCBhNWQ1NmJlLi44ZDAyOGYwIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJD
b3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMTAxLDggKzEwMSw2IEBA
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGU6OlN0YXRlKCkKICAgICAsIG1fc2hhZG93
Q29sb3IoImJsYWNrIikKICAgICAsIG1fZ2xvYmFsQWxwaGEoMSkKICAgICAsIG1fZ2xvYmFsQ29t
cG9zaXRlKENvbXBvc2l0ZVNvdXJjZU92ZXIpCi0gICAgLCBtX2FwcGxpZWRTdHJva2VQYXR0ZXJu
KGZhbHNlKQotICAgICwgbV9hcHBsaWVkRmlsbFBhdHRlcm4oZmFsc2UpCiB7CiB9CiAKQEAgLTE0
MSw3ICsxMzksNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlU3R5
bGUoUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4gc3R5bGUpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChtX2NhbnZhcy0+b3JpZ2luQ2xlYW4oKSkgewotICAgICAgICBpZiAoQ2FudmFzUGF0dGVy
biogcGF0dGVybiA9IHN0eWxlLT5wYXR0ZXJuKCkpIHsKKyAgICAgICAgaWYgKENhbnZhc1BhdHRl
cm4qIHBhdHRlcm4gPSBzdHlsZS0+Y2FudmFzUGF0dGVybigpKSB7CiAgICAgICAgICAgICBpZiAo
IXBhdHRlcm4tPm9yaWdpbkNsZWFuKCkpCiAgICAgICAgICAgICAgICAgbV9jYW52YXMtPnNldE9y
aWdpblRhaW50ZWQoKTsKICAgICAgICAgfQpAQCAtMTUyLDcgKzE1MCw2IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VTdHlsZShQYXNzUmVmUHRyPENhbnZhc1N0eWxl
PiBzdHlsZSkKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKICAgICBzdGF0ZSgpLm1fc3Ry
b2tlU3R5bGUtPmFwcGx5U3Ryb2tlQ29sb3IoYyk7Ci0gICAgc3RhdGUoKS5tX2FwcGxpZWRTdHJv
a2VQYXR0ZXJuID0gZmFsc2U7CiB9CiAKIENhbnZhc1N0eWxlKiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmZpbGxTdHlsZSgpIGNvbnN0CkBAIC0xNjYsNyArMTYzLDcgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxTdHlsZShQYXNzUmVmUHRyPENhbnZhc1N0eWxlPiBz
dHlsZSkKICAgICAgICAgcmV0dXJuOwogIAogICAgIGlmIChtX2NhbnZhcy0+b3JpZ2luQ2xlYW4o
KSkgewotICAgICAgICBpZiAoQ2FudmFzUGF0dGVybiogcGF0dGVybiA9IHN0eWxlLT5wYXR0ZXJu
KCkpIHsKKyAgICAgICAgaWYgKENhbnZhc1BhdHRlcm4qIHBhdHRlcm4gPSBzdHlsZS0+Y2FudmFz
UGF0dGVybigpKSB7CiAgICAgICAgICAgICBpZiAoIXBhdHRlcm4tPm9yaWdpbkNsZWFuKCkpCiAg
ICAgICAgICAgICAgICAgbV9jYW52YXMtPnNldE9yaWdpblRhaW50ZWQoKTsKICAgICAgICAgfQpA
QCAtMTc3LDcgKzE3NCw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxs
U3R5bGUoUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4gc3R5bGUpCiAgICAgaWYgKCFjKQogICAgICAg
ICByZXR1cm47CiAgICAgc3RhdGUoKS5tX2ZpbGxTdHlsZS0+YXBwbHlGaWxsQ29sb3IoYyk7Ci0g
ICAgc3RhdGUoKS5tX2FwcGxpZWRGaWxsUGF0dGVybiA9IGZhbHNlOwogfQogCiBmbG9hdCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmxpbmVXaWR0aCgpIGNvbnN0CkBAIC01NDIsNDcgKzUzOCw3
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsKCkKICAgICBpZiAoIW1fcGF0
aC5pc0VtcHR5KCkpCiAgICAgICAgIHdpbGxEcmF3KG1fcGF0aC5ib3VuZGluZ1JlY3QoKSk7CiAK
LSNpZiBQTEFURk9STShDRykKLSAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3Jh
ZGllbnQoKSkgewotICAgICAgICAvLyBTaGFkaW5nIHdvcmtzIG9uIHRoZSBlbnRpcmUgY2xpcCBy
ZWdpb24sIHNvIGNvbnZlcnQgdGhlIGN1cnJlbnQgcGF0aCB0byBhIGNsaXAuCi0gICAgICAgIGMt
PnNhdmUoKTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcChjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0g
ICAgICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGMtPnBsYXRmb3JtQ29udGV4dCgpLCBzdGF0ZSgp
Lm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRmb3JtR3JhZGll
bnQoKSk7ICAgICAgICAKLSAgICAgICAgYy0+cmVzdG9yZSgpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBs
eUZpbGxQYXR0ZXJuKCk7Ci0gICAgICAgIENHQ29udGV4dEZpbGxQYXRoKGMtPnBsYXRmb3JtQ29u
dGV4dCgpKTsKLSAgICB9Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICBRUGFpbnRlclBhdGgqIHBh
dGggPSBtX3BhdGgucGxhdGZvcm1QYXRoKCk7Ci0gICAgUVBhaW50ZXIqIHAgPSBzdGF0aWNfY2Fz
dDxRUGFpbnRlcio+KGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoc3RhdGUoKS5tX2Zp
bGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAgICBwLT5maWxsUGF0aCgqcGF0aCwg
UUJydXNoKCooc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKS0+Z3JhZGllbnQo
KS5wbGF0Zm9ybUdyYWRpZW50KCkpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHN0YXRl
KCkubV9maWxsU3R5bGUtPnBhdHRlcm4oKSkKLSAgICAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4o
KTsKLSAgICAgICAgcC0+ZmlsbFBhdGgoKnBhdGgsIHAtPmJydXNoKCkpOwotICAgIH0KLSNlbGlm
IFBMQVRGT1JNKENBSVJPKQotICAgIGNhaXJvX3QqIGNyID0gYy0+cGxhdGZvcm1Db250ZXh0KCk7
Ci0gICAgY2Fpcm9fc2F2ZShjcik7Ci0KLSAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2Fu
dmFzR3JhZGllbnQoKSkgewotICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBzdGF0ZSgpLm1f
ZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRmb3JtR3JhZGllbnQo
KSk7Ci0gICAgICAgIGNhaXJvX2ZpbGwoY3IpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChz
dGF0ZSgpLm1fZmlsbFN0eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseUZpbGxQYXR0
ZXJuKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZmxvYXQgcmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGE7Ci0gICAgICAgICAgICBjLT5maWxsQ29sb3IoKS5nZXRSR0JBKHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhKTsKLSAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGNhaXJvX2ZpbGwoY3Ip
OwotICAgIH0KLSAgICBjYWlyb19yZXN0b3JlKGNyKTsKLSNlbmRpZgorICAgIGMtPmZpbGxQYXRo
KCk7CiAKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAgICAgY2xlYXJQYXRoRm9yRGFz
aGJvYXJkQmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSgpOwpAQCAtNjA1LDU0ICs1NjEsOCBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlKCkKICAgICAgICAgYm91bmRpbmdS
ZWN0LmluZmxhdGUoaW5zZXQpOwogICAgICAgICB3aWxsRHJhdyhib3VuZGluZ1JlY3QpOwogICAg
IH0KLSAgICAKLSAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5k
ZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgaWYgKHN0YXRl
KCkubV9zdHJva2VTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAgICAvLyBTaGFkaW5n
IHdvcmtzIG9uIHRoZSBlbnRpcmUgY2xpcCByZWdpb24sIHNvIGNvbnZlcnQgdGhlIGN1cnJlbnQg
cGF0aCB0byBhIGNsaXAuCi0gICAgICAgIGMtPnNhdmUoKTsKLSAgICAgICAgQ0dDb250ZXh0UmVw
bGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoYy0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgICAgICBD
R0NvbnRleHRDbGlwKGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICAgICAgQ0dDb250ZXh0RHJh
d1NoYWRpbmcoYy0+cGxhdGZvcm1Db250ZXh0KCksIHN0YXRlKCkubV9zdHJva2VTdHlsZS0+Y2Fu
dmFzR3JhZGllbnQoKS0+Z3JhZGllbnQoKS5wbGF0Zm9ybUdyYWRpZW50KCkpOyAgICAgICAgCi0g
ICAgICAgIGMtPnJlc3RvcmUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5t
X3N0cm9rZVN0eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4o
KTsKLSAgICAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0g
ICAgfQotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgUVBhaW50ZXJQYXRoKiBwYXRoID0gbV9wYXRo
LnBsYXRmb3JtUGF0aCgpOwotICAgIFFQYWludGVyKiBwID0gc3RhdGljX2Nhc3Q8UVBhaW50ZXIq
PihjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS0+
Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAgICBwLT5zYXZlKCk7Ci0gICAgICAgIHAtPnNldEJy
dXNoKCooc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgp
LnBsYXRmb3JtR3JhZGllbnQoKSkpOwotICAgICAgICBwLT5zdHJva2VQYXRoKCpwYXRoLCBwLT5w
ZW4oKSk7Ci0gICAgICAgIHAtPnJlc3RvcmUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
c3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseVN0cm9r
ZVBhdHRlcm4oKTsKLSAgICAgICAgcC0+c3Ryb2tlUGF0aCgqcGF0aCwgcC0+cGVuKCkpOwotICAg
IH0KLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgIGNhaXJvX3QqIGNyID0gYy0+cGxhdGZvcm1D
b250ZXh0KCk7Ci0gICAgY2Fpcm9fc2F2ZShjcik7Ci0gICAgaWYgKHN0YXRlKCkubV9zdHJva2VT
dHlsZS0+Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBz
dGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPmNhbnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkucGxhdGZv
cm1HcmFkaWVudCgpKTsKLSAgICAgICAgYy0+YWRkUGF0aChtX3BhdGgpOwotICAgICAgICBjYWly
b19zdHJva2UoY3IpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1fc3Ryb2tl
U3R5bGUtPnBhdHRlcm4oKSkKLSAgICAgICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwot
ICAgICAgICAgICAgYy0+c3Ryb2tlQ29sb3IoKS5nZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhKTsKLSAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGMtPmFkZFBhdGgobV9wYXRoKTsKLSAg
ICAgICAgY2Fpcm9fc3Ryb2tlKGNyKTsKLSAgICB9Ci0gICAgY2Fpcm9fcmVzdG9yZShjcik7Ci0j
ZW5kaWYKKworICAgIGMtPnN0cm9rZVBhdGgoKTsKIAogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQ
UE9SVCkKICAgICBjbGVhclBhdGhGb3JEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2Rl
KCk7CkBAIC03MDksNDIgKzYxOSw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpm
aWxsUmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpCiAgICAgRmxv
YXRSZWN0IHJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgd2lsbERyYXcocmVjdCk7CiAK
LSAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBo
aWNzQ29udGV4dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgaWYgKHN0YXRlKCkubV9maWxs
U3R5bGUtPmNhbnZhc0dyYWRpZW50KCkpIHsKLSAgICAgICAgYy0+c2F2ZSgpOwotICAgICAgICBz
dGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLmZpbGwoYywg
cmVjdCk7Ci0gICAgICAgIGMtPnJlc3RvcmUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
c3RhdGUoKS5tX2ZpbGxTdHlsZS0+cGF0dGVybigpKQotICAgICAgICAgICAgYXBwbHlGaWxsUGF0
dGVybigpOwotICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjLT5wbGF0Zm9ybUNvbnRleHQoKSwg
cmVjdCk7Ci0gICAgfQotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgUVBhaW50ZXIqIHAgPSBzdGF0
aWNfY2FzdDxRUGFpbnRlcio+KGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoc3RhdGUo
KS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAgICBwLT5maWxsUmVjdChy
ZWN0LCBRQnJ1c2goKihzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFk
aWVudCgpLnBsYXRmb3JtR3JhZGllbnQoKSkpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
c3RhdGUoKS5tX2ZpbGxTdHlsZS0+cGF0dGVybigpKQotICAgICAgICAgICAgYXBwbHlGaWxsUGF0
dGVybigpOwotICAgICAgICBwLT5maWxsUmVjdChyZWN0LCBwLT5icnVzaCgpKTsKLSAgICB9Ci0j
ZWxpZiBQTEFURk9STShDQUlSTykKLSAgICBjYWlyb190KiBjciA9IGMtPnBsYXRmb3JtQ29udGV4
dCgpOwotICAgIGNhaXJvX3NhdmUoY3IpOwotICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5j
YW52YXNHcmFkaWVudCgpKSB7Ci0gICAgICAgIHN0YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dy
YWRpZW50KCktPmdyYWRpZW50KCkuZmlsbChjLCByZWN0KTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+cGF0dGVybigpKSB7Ci0gICAgICAgICAgICBhcHBs
eUZpbGxQYXR0ZXJuKCk7Ci0gICAgICAgICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHgsIHksIHdp
ZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgY2Fpcm9fZmlsbChjcik7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgYy0+ZmlsbFJlY3QocmVjdCwgYy0+ZmlsbENvbG9yKCkpOwotICAgIH0K
LSAgICAKLSAgICBjYWlyb19yZXN0b3JlKGNyKTsKLSNlbmRpZgorICAgIGMtPnNhdmUoKTsKKyAg
ICBjLT5maWxsUmVjdChyZWN0KTsKKyAgICBjLT5yZXN0b3JlKCk7CiB9CiAKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2VSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdp
ZHRoLCBmbG9hdCBoZWlnaHQpCkBAIC03NzIsMTAgKzY0OSw2IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzdHJva2VSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBm
bG9hdCBoCiAgICAgYm91bmRpbmdSZWN0LmluZmxhdGUobGluZVdpZHRoIC8gMik7CiAgICAgd2ls
bERyYXcoYm91bmRpbmdSZWN0KTsKIAotICAgIC8vIEZJWE1FOiBObyBzdXBwb3J0IGZvciBncmFk
aWVudHMhCi0gICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS0+cGF0dGVybigpKQotICAgICAg
ICBhcHBseVN0cm9rZVBhdHRlcm4oKTsKLQogICAgIGMtPnN0cm9rZVJlY3QocmVjdCwgbGluZVdp
ZHRoKTsKIH0KIApAQCAtMTE2OCw1OCArMTA0MSw2IEBAIEdyYXBoaWNzQ29udGV4dCogQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3aW5nQ29udGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIG1f
Y2FudmFzLT5kcmF3aW5nQ29udGV4dCgpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBk
cmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
RklYTUU6IENhbiB0aGlzIGNoZWNrIGJlIG1vdmVkIGludG8gR3JhcGhpY3NDb250ZXh0PyBvciBy
ZW1vdmVkPwotI2lmIFBMQVRGT1JNKENHKQotICAgIC8vIENoZWNrIGZvciBjYXNlIHdoZXJlIHRo
ZSBwYXR0ZXJuIGlzIGFscmVhZHkgc2V0LgotICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBjLT5n
ZXRDVE0oKTsKLSAgICBpZiAoc3RhdGUoKS5tX2FwcGxpZWRTdHJva2VQYXR0ZXJuICYmIGN0bSA9
PSBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGVQYXR0ZXJuVHJhbnNmb3JtKQotICAgICAgICByZXR1cm47
Ci0jZW5kaWYKLQotICAgIENhbnZhc1BhdHRlcm4qIHBhdHRlcm4gPSBzdGF0ZSgpLm1fc3Ryb2tl
U3R5bGUtPnBhdHRlcm4oKTsKLSAgICBpZiAoIXBhdHRlcm4pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGMtPmFwcGx5U3Ryb2tlUGF0dGVybihwYXR0ZXJuLT5wYXR0ZXJuKCkpOwotCi0jaWYgUExB
VEZPUk0oQ0cpCi0gICAgc3RhdGUoKS5tX3N0cm9rZVN0eWxlUGF0dGVyblRyYW5zZm9ybSA9IGN0
bTsKLSNlbmRpZgotICAgIHN0YXRlKCkubV9hcHBsaWVkU3Ryb2tlUGF0dGVybiA9IHRydWU7Ci19
Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjphcHBseUZpbGxQYXR0ZXJuKCkKLXsK
LSAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghYykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IENhbiB0aGlzIGNoZWNrIGJlIG1vdmVk
IGludG8gR3JhcGhpY3NDb250ZXh0PyBvciByZW1vdmVkPwotI2lmIFBMQVRGT1JNKENHKQotICAg
IC8vIENoZWNrIGZvciBjYXNlIHdoZXJlIHRoZSBwYXR0ZXJuIGlzIGFscmVhZHkgc2V0LgotICAg
IEFmZmluZVRyYW5zZm9ybSBjdG0gPSBjLT5nZXRDVE0oKTsKLSAgICBpZiAoc3RhdGUoKS5tX2Fw
cGxpZWRGaWxsUGF0dGVybiAmJiBjdG0gPT0gc3RhdGUoKS5tX2ZpbGxTdHlsZVBhdHRlcm5UcmFu
c2Zvcm0pCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgotCi0gICAgQ2FudmFzUGF0dGVybiogcGF0
dGVybiA9IHN0YXRlKCkubV9maWxsU3R5bGUtPnBhdHRlcm4oKTsKLSAgICBpZiAoIXBhdHRlcm4p
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGMtPmFwcGx5RmlsbFBhdHRlcm4ocGF0dGVybi0+cGF0
dGVybigpKTsKLQotI2lmIFBMQVRGT1JNKENHKQotICAgIHN0YXRlKCkubV9maWxsU3R5bGVQYXR0
ZXJuVHJhbnNmb3JtID0gY3RtOwotI2VuZGlmCi0gICAgc3RhdGUoKS5tX2FwcGxpZWRGaWxsUGF0
dGVybiA9IHRydWU7Ci19Ci0KIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlRGF0YT4gY3JlYXRlRW1w
dHlJbWFnZURhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBQYXNzUmVmUHRyPEltYWdl
RGF0YT4gZGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgg
Yi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKaW5kZXggMTY4YjczMC4u
OWE3ZmRhZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5oCisrKyBiL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaApAQCAtMTkx
LDEzICsxOTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBTdHJpbmcgbV9z
aGFkb3dDb2xvcjsKICAgICAgICAgICAgIGZsb2F0IG1fZ2xvYmFsQWxwaGE7CiAgICAgICAgICAg
ICBDb21wb3NpdGVPcGVyYXRvciBtX2dsb2JhbENvbXBvc2l0ZTsKLSAgICAgICAgICAgIGJvb2wg
bV9hcHBsaWVkU3Ryb2tlUGF0dGVybjsKLSAgICAgICAgICAgIGJvb2wgbV9hcHBsaWVkRmlsbFBh
dHRlcm47CiAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Ci0jaWYgUExB
VEZPUk0oQ0cpCi0gICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9zdHJva2VTdHlsZVBhdHRl
cm5UcmFuc2Zvcm07Ci0gICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9maWxsU3R5bGVQYXR0
ZXJuVHJhbnNmb3JtOwotI2VuZGlmCiAgICAgICAgIH07CiAgICAgICAgIFBhdGggbV9wYXRoOwog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQ2FudmFzU3R5bGUuY3BwIGIvV2ViQ29yZS9odG1s
L0NhbnZhc1N0eWxlLmNwcAppbmRleCA1NjEzMGRmLi4xMDhjNDkzIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2h0bWwvQ2FudmFzU3R5bGUuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9DYW52YXNTdHlsZS5j
cHAKQEAgLTE0MSw3ICsxNDEsMTAgQEAgdm9pZCBDYW52YXNTdHlsZTo6YXBwbHlTdHJva2VDb2xv
cihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIEdyYWRpZW50OgorICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbEdy
YWRpZW50KGNhbnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkpOworICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgSW1hZ2VQYXR0ZXJuOgorICAgICAgICAgICAgY29udGV4dC0+c2V0Rmls
bFBhdHRlcm4oY2FudmFzUGF0dGVybigpLT5wYXR0ZXJuKCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQogfQpAQCAtMTg3LDcgKzE5MCwxMCBAQCB2b2lkIENhbnZhc1N0eWxlOjphcHBseUZp
bGxDb2xvcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEdyYWRpZW50OgorICAgICAgICAgICAgY29udGV4dC0+c2V0
U3Ryb2tlR3JhZGllbnQoY2FudmFzR3JhZGllbnQoKS0+Z3JhZGllbnQoKSk7CisgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBJbWFnZVBhdHRlcm46CisgICAgICAgICAgICBjb250ZXh0
LT5zZXRTdHJva2VQYXR0ZXJuKGNhbnZhc1BhdHRlcm4oKS0+cGF0dGVybigpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNTdHls
ZS5oIGIvV2ViQ29yZS9odG1sL0NhbnZhc1N0eWxlLmgKaW5kZXggMDc5YWI2Zi4uZmUwMWJkMSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0NhbnZhc1N0eWxlLmgKKysrIGIvV2ViQ29yZS9odG1s
L0NhbnZhc1N0eWxlLmgKQEAgLTQ3LDkgKzQ3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIFN0cmluZyBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KICAgICAgICAg
Q2FudmFzR3JhZGllbnQqIGNhbnZhc0dyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9ncmFkaWVu
dC5nZXQoKTsgfQotICAgICAgICBDYW52YXNQYXR0ZXJuKiBwYXR0ZXJuKCkgY29uc3QgeyByZXR1
cm4gbV9wYXR0ZXJuLmdldCgpOyB9CisgICAgICAgIENhbnZhc1BhdHRlcm4qIGNhbnZhc1BhdHRl
cm4oKSBjb25zdCB7IHJldHVybiBtX3BhdHRlcm4uZ2V0KCk7IH0KIAotICAgICAgICAvLyBUaGVz
ZSBkbyBub3RoaW5nIGZvciBncmFkaWVudHMgb3IgcGF0dGVybnMuCiAgICAgICAgIHZvaWQgYXBw
bHlGaWxsQ29sb3IoR3JhcGhpY3NDb250ZXh0Kik7CiAgICAgICAgIHZvaWQgYXBwbHlTdHJva2VD
b2xvcihHcmFwaGljc0NvbnRleHQqKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5l
cmF0ZWRJbWFnZS5oCmluZGV4IGIzMjFiOGQuLjg2MDdmYTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgKQEAgLTMwLDE2ICszMCwxNiBAQAogCiAjaW5jbHVk
ZSAiR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgR2VuZXJhdGVkSW1hZ2UgOiBwdWJsaWMgSW1hZ2UgewogcHVibGljOgotICAgIEdlbmVy
YXRlZEltYWdlKEdlbmVyYXRvciogZ2VuZXJhdG9yLCBjb25zdCBJbnRTaXplJiBzaXplKQotICAg
IDogbV9zaXplKHNpemUpCisgICAgR2VuZXJhdGVkSW1hZ2UoUGFzc1JlZlB0cjxHZW5lcmF0b3I+
IGdlbmVyYXRvciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBtX2dlbmVyYXRvcihn
ZW5lcmF0b3IpCisgICAgICAgICwgbV9zaXplKHNpemUpCiAgICAgewotICAgICAgICBtX2dlbmVy
YXRvci5zZXQoZ2VuZXJhdG9yKTsKICAgICB9CiAgICAgdmlydHVhbCB+R2VuZXJhdGVkSW1hZ2Uo
KSB7fQogCkBAIC02MSw3ICs2MSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKICAgICAKIHByb3RlY3RlZDoKLSAgICBPd25QdHI8R2Vu
ZXJhdG9yPiBtX2dlbmVyYXRvcjsKKyAgICBSZWZQdHI8R2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsK
ICAgICBJbnRTaXplIG1fc2l6ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2VuZXJhdG9yLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRv
ci5oCmluZGV4IGE1NDVhZDUuLmEwYWY2ODkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2VuZXJhdG9yLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5l
cmF0b3IuaApAQCAtMjYsMTQgKzI2LDE0IEBACiAjaWZuZGVmIEdlbmVyYXRvcl9oCiAjZGVmaW5l
IEdlbmVyYXRvcl9oCiAKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UmVj
dDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIAotY2xhc3MgR2VuZXJhdG9yIDogTm9uY29weWFi
bGUgeworY2xhc3MgR2VuZXJhdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8R2VuZXJhdG9yPiB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCB+R2VuZXJhdG9yKCkge307CiAgICAgCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50LmgKaW5kZXggYmVkYzE1Yy4uMjgwNzg3NyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhZGllbnQuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkdlbmVyYXRv
ci5oIgogCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgUExBVEZPUk0oQ0cpCkBAIC01OCw4
ICs1OSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBHcmFkaWVudCA6IHB1
YmxpYyBHZW5lcmF0b3IgewogICAgIHB1YmxpYzoKLSAgICAgICAgR3JhZGllbnQoY29uc3QgRmxv
YXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKTsKLSAgICAgICAgR3JhZGllbnQoY29u
c3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQg
cjEpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZs
b2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHcmFkaWVudChwMCwgcDEpKTsKKyAgICAgICAgfQorICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQm
IHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIxKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdyYWRpZW50KHAwLCByMCwgcDEsIHIx
KSk7CisgICAgICAgIH0KICAgICAgICAgdmlydHVhbCB+R3JhZGllbnQoKTsKIAogICAgICAgICB2
b2lkIGFkZENvbG9yU3RvcChmbG9hdCwgY29uc3QgU3RyaW5nJik7CkBAIC04NSw2ICs5Miw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGZpbGwoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jik7CiAKICAgICBwcml2YXRlOgorICAgICAgICBHcmFk
aWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEpOworICAgICAg
ICBHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0UG9p
bnQmIHAxLCBmbG9hdCByMSk7CisKICAgICAgICAgdm9pZCBwbGF0Zm9ybUluaXQoKSB7IG1fZ3Jh
ZGllbnQgPSAwOyB9CiAgICAgICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCA0ZWIxOWVmLi43
MGMyZWE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
Y3BwCkBAIC0xMzQsNiArMTM0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVN0
eWxlKGNvbnN0IFN0cm9rZVN0eWxlJiBzdHlsZSkKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKKyAgICBtX2NvbW1vbi0+c3RhdGUu
c3Ryb2tlQ29sb3JTcGFjZSA9IFNvbGlkQ29sb3JTcGFjZTsKICAgICBtX2NvbW1vbi0+c3RhdGUu
c3Ryb2tlQ29sb3IgPSBjb2xvcjsKICAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbG9yKTsK
IH0KQEAgLTE4MCw2ICsxODEsNyBAQCBDb2xvciBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUNvbG9y
KCkgY29uc3QKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxDb2xvcihjb25zdCBDb2xv
ciYgY29sb3IpCiB7CisgICAgbV9jb21tb24tPnN0YXRlLmZpbGxDb2xvclNwYWNlID0gU29saWRD
b2xvclNwYWNlOwogICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3IgPSBjb2xvcjsKICAgICBz
ZXRQbGF0Zm9ybUZpbGxDb2xvcihjb2xvcik7CiB9CkBAIC0xODksNiArMTkxLDM0IEBAIENvbG9y
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbENvbG9yKCkgY29uc3QKICAgICByZXR1cm4gbV9jb21tb24t
PnN0YXRlLmZpbGxDb2xvcjsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVBh
dHRlcm4oUGFzc1JlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuKQoreworICAgIG1fY29tbW9uLT5zdGF0
ZS5zdHJva2VDb2xvclNwYWNlID0gUGF0dGVybkNvbG9yU3BhY2U7CisgICAgbV9jb21tb24tPnN0
YXRlLnN0cm9rZVBhdHRlcm4gPSBwYXR0ZXJuOworICAgIHNldFBsYXRmb3JtU3Ryb2tlUGF0dGVy
bihtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybihQYXNzUmVmUHRyPFBhdHRlcm4+IHBhdHRlcm4pCit7
CisgICAgbV9jb21tb24tPnN0YXRlLmZpbGxDb2xvclNwYWNlID0gUGF0dGVybkNvbG9yU3BhY2U7
CisgICAgbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuID0gcGF0dGVybjsKKyAgICBzZXRQbGF0
Zm9ybUZpbGxQYXR0ZXJuKG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi5nZXQoKSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VHcmFkaWVudChQYXNzUmVmUHRyPEdyYWRp
ZW50PiBncmFkaWVudCkKK3sKKyAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSA9
IEdyYWRpZW50Q29sb3JTcGFjZTsKKyAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQg
PSBncmFkaWVudDsKKyAgICBzZXRQbGF0Zm9ybVN0cm9rZUdyYWRpZW50KG1fY29tbW9uLT5zdGF0
ZS5zdHJva2VHcmFkaWVudC5nZXQoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRG
aWxsR3JhZGllbnQoUGFzc1JlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQpCit7CisgICAgbV9jb21t
b24tPnN0YXRlLmZpbGxDb2xvclNwYWNlID0gR3JhZGllbnRDb2xvclNwYWNlOworICAgIG1fY29t
bW9uLT5zdGF0ZS5maWxsR3JhZGllbnQgPSBncmFkaWVudDsKKyAgICBzZXRQbGF0Zm9ybUZpbGxH
cmFkaWVudChtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LmdldCgpKTsKK30KKwogYm9vbCBH
cmFwaGljc0NvbnRleHQ6OnVwZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9jb21tb24tPm1fdXBkYXRpbmdDb250cm9sVGludHM7CkBAIC00MjYsMTQgKzQ1Niw2IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShpbnQgbW9k
ZSkKIH0KICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKENHKSAmJiAhUExBVEZPUk0oQ0FJUk8pCi0v
LyBPdGhlciBwbGF0Zm9ybXMgbmVlZCB0byBpbXBsZW1lbnQgdGhpcy4KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZUJ1
ZmZlciopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLSNlbmRpZgotCiAjaWYgIVBMQVRG
T1JNKFFUKSAmJiAhUExBVEZPUk0oQ0FJUk8pCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1TdHJva2VTdHlsZShjb25zdCBTdHJva2VTdHlsZSYpCiB7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBlYmUxNjcxLi44NWI4M2Q0IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTk0LDYgKzk0
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKICAg
ICBjbGFzcyBGb250OwogICAgIGNsYXNzIEdlbmVyYXRvcjsKKyAgICBjbGFzcyBHcmFkaWVudDsK
ICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHRQcml2YXRlOwogICAgIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTsKICAgICBjbGFzcyBJbWFnZUJ1ZmZlcjsKQEAgLTEzOSwzMCAr
MTQwLDM5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRTdHJva2VTdHls
ZShjb25zdCBTdHJva2VTdHlsZSYgc3R5bGUpOwogICAgICAgICBDb2xvciBzdHJva2VDb2xvcigp
IGNvbnN0OwogICAgICAgICB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJik7CisgICAg
ICAgIHZvaWQgc2V0U3Ryb2tlUGF0dGVybihQYXNzUmVmUHRyPFBhdHRlcm4+KTsKKyAgICAgICAg
dm9pZCBzZXRTdHJva2VHcmFkaWVudChQYXNzUmVmUHRyPEdyYWRpZW50Pik7CiAKKyAgICAgICAg
dm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSk7CiAgICAgICAgIENvbG9yIGZpbGxDb2xvcigpIGNv
bnN0OwogICAgICAgICB2b2lkIHNldEZpbGxDb2xvcihjb25zdCBDb2xvciYpOwotCi0gICAgICAg
IHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mKTsKLSAgICAgICAgdm9pZCBh
cHBseUZpbGxQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mKTsKKyAgICAgICAgdm9pZCBzZXRGaWxsUGF0
dGVybihQYXNzUmVmUHRyPFBhdHRlcm4+KTsKKyAgICAgICAgdm9pZCBzZXRGaWxsR3JhZGllbnQo
UGFzc1JlZlB0cjxHcmFkaWVudD4pOwogCiAgICAgICAgIHZvaWQgc2F2ZSgpOwogICAgICAgICB2
b2lkIHJlc3RvcmUoKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gVGhlc2UgZHJhdyBtZXRob2Rz
IHdpbGwgZG8gYm90aCBzdHJva2luZyBhbmQgZmlsbGluZy4KICAgICAgICAgdm9pZCBkcmF3UmVj
dChjb25zdCBJbnRSZWN0Jik7CiAgICAgICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgSW50UG9pbnQm
LCBjb25zdCBJbnRQb2ludCYpOwogICAgICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEludFJl
Y3QmKTsKICAgICAgICAgdm9pZCBkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBj
b25zdCBGbG9hdFBvaW50KiwgYm9vbCBzaG91bGRBbnRpYWxpYXMgPSBmYWxzZSk7CiAKKyAgICAg
ICAgdm9pZCBkcmF3UGF0aCgpOworICAgICAgICB2b2lkIGZpbGxQYXRoKCk7CisgICAgICAgIHZv
aWQgc3Ryb2tlUGF0aCgpOworCiAgICAgICAgIC8vIEFyYyBkcmF3aW5nICh1c2VkIGJ5IGJvcmRl
ci1yYWRpdXMgaW4gQ1NTKSBqdXN0IHN1cHBvcnRzIHN0cm9raW5nIGF0IHRoZSBtb21lbnQuCiAg
ICAgICAgIHZvaWQgc3Ryb2tlQXJjKGNvbnN0IEludFJlY3QmLCBpbnQgc3RhcnRBbmdsZSwgaW50
IGFuZ2xlU3Bhbik7Ci0gICAgICAgIAotICAgICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEludFJl
Y3QmLCBjb25zdCBDb2xvciYpOworCisgICAgICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0Jik7CiAgICAgICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29s
b3ImKTsKICAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHZW5lcmF0b3Im
KTsKICAgICAgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYsIGNvbnN0IElu
dFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBi
b3R0b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCwgY29uc3QgQ29sb3ImKTsKKwog
ICAgICAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKworICAgICAgICB2b2lk
IHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgICAgIHZvaWQgc3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpOwogCiAgICAgICAgIHZvaWQgZHJhd0lt
YWdlKEltYWdlKiwgY29uc3QgSW50UG9pbnQmLCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0
ZVNvdXJjZU92ZXIpOwpAQCAtMTc3LDEzICsxODcsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlID0gSW1hZ2U6
OlN0cmV0Y2hUaWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUgPSBJbWFnZTo6U3RyZXRjaFRpbGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3Np
dGVTb3VyY2VPdmVyKTsKIAotI2lmIFBMQVRGT1JNKENHKQogICAgICAgICB2b2lkIHNldEltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpOwogICAgICAgICBJbnRl
cnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3Q7Ci0jZWxz
ZQotICAgICAgICB2b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlv
blF1YWxpdHkpIHt9Ci0gICAgICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBJbnRlcnBvbGF0aW9uRGVmYXVsdDsgfQotI2Vu
ZGlmCiAKICAgICAgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpOwogICAgICAgICB2b2lk
IGFkZFJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYgdG9wTGVm
dCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNv
bnN0IEludFNpemUmIGJvdHRvbVJpZ2h0KTsKQEAgLTI4OCw3ICsyOTMsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICNpZiBQTEFURk9STShRVCkKICAgICAgICAgYm9vbCBpblRyYW5zcGFyZW5j
eUxheWVyKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUpOwogICAg
ICAgICBQbGF0Zm9ybVBhdGgqIGN1cnJlbnRQYXRoKCk7CiAjZW5kaWYKIApAQCAtMzAxLDEyICsz
MDUsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQg
c2F2ZVBsYXRmb3JtU3RhdGUoKTsKICAgICAgICAgdm9pZCByZXN0b3JlUGxhdGZvcm1TdGF0ZSgp
OworCiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUoaW50KTsKKyAgICAg
ICAgdm9pZCBzZXRQbGF0Zm9ybUZvbnQoY29uc3QgRm9udCYgZm9udCk7CisKICAgICAgICAgdm9p
ZCBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJik7CisgICAgICAgIHZvaWQgc2V0
UGxhdGZvcm1TdHJva2VQYXR0ZXJuKFBhdHRlcm4qKTsKKyAgICAgICAgdm9pZCBzZXRQbGF0Zm9y
bVN0cm9rZUdyYWRpZW50KEdyYWRpZW50Kik7CiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJv
a2VTdHlsZShjb25zdCBTdHJva2VTdHlsZSYpOwogICAgICAgICB2b2lkIHNldFBsYXRmb3JtU3Ry
b2tlVGhpY2tuZXNzKGZsb2F0KTsKKwogICAgICAgICB2b2lkIHNldFBsYXRmb3JtRmlsbENvbG9y
KGNvbnN0IENvbG9yJik7Ci0gICAgICAgIHZvaWQgc2V0UGxhdGZvcm1Gb250KGNvbnN0IEZvbnQm
IGZvbnQpOworICAgICAgICB2b2lkIHNldFBsYXRmb3JtRmlsbFBhdHRlcm4oUGF0dGVybiopOwor
ICAgICAgICB2b2lkIHNldFBsYXRmb3JtRmlsbEdyYWRpZW50KEdyYWRpZW50Kik7CisKICAgICAg
ICAgdm9pZCBzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBJbnRTaXplJiwgaW50IGJsdXIsIGNvbnN0
IENvbG9yJik7CiAgICAgICAgIHZvaWQgY2xlYXJQbGF0Zm9ybVNoYWRvdygpOwogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCmluZGV4
IDAyYzc0MTUuLjFkYmEwYTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCkBAIC0yNywyOCArMjcsNTMgQEAKICNkZWZpbmUgR3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZV9oCiAKICNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiR3Jh
ZGllbnQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
ICAgIC8vIGVzZWlkZWw6IFRoaXMgaXMgYSBwbGFjZS1ob2xkZXIgdW50aWwgc29tZSBkYXkgd2hl
biB3ZSBkZWNpZGUgdG8gYWRkCisgICAgLy8gcmVhbGwgY29sb3Itc3BhY2Ugc3VwcG9ydCB0byBX
ZWJDb3JlLiAgQXQgdGhhdCB0aW1lLCBDb2xvclNwYWNlcworICAgIC8vIHdpbGwgYmVjb21lIHJl
YWwgb2JqZWN0cyBoZWxkIG9mZiBvZiBDb2xvcnMsIGFuZCB0aGVyZSB3aWxsIGJlCisgICAgLy8g
c3BlY2lhbCBzaW5nbGV0b24gR3JhZGllbnQgYW5kIFBhdHRlcm4gY29sb3JzcGFjZXMgdG8gbWFy
ayB3aGVuCisgICAgLy8gYSBmaWxsIG9yIHN0cm9rZSBpcyB1c2luZyBhIGdyYWRpZW50IG9yIHBh
dHRlcm4gaW5zdGVhZCBvZiBhIHNvbGlkIGNvbG9yCisgICAgZW51bSBDb2xvclNwYWNlIHsKKyAg
ICAgICAgU29saWRDb2xvclNwYWNlLAorICAgICAgICBQYXR0ZXJuQ29sb3JTcGFjZSwKKyAgICAg
ICAgR3JhZGllbnRDb2xvclNwYWNlCisgICAgfTsKKwogICAgIHN0cnVjdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlKCkKLSAgICAgICAgICAgIDog
c3Ryb2tlU3R5bGUoU29saWRTdHJva2UpCisgICAgICAgICAgICA6IHRleHREcmF3aW5nTW9kZShj
VGV4dEZpbGwpCisgICAgICAgICAgICAsIHN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKQogICAgICAg
ICAgICAgLCBzdHJva2VUaGlja25lc3MoMCkKKyAgICAgICAgICAgICwgc3Ryb2tlQ29sb3JTcGFj
ZShTb2xpZENvbG9yU3BhY2UpCiAgICAgICAgICAgICAsIHN0cm9rZUNvbG9yKENvbG9yOjpibGFj
aykKKyAgICAgICAgICAgICwgZmlsbENvbG9yU3BhY2UoU29saWRDb2xvclNwYWNlKQogICAgICAg
ICAgICAgLCBmaWxsQ29sb3IoQ29sb3I6OmJsYWNrKQotICAgICAgICAgICAgLCB0ZXh0RHJhd2lu
Z01vZGUoY1RleHRGaWxsKQogICAgICAgICAgICAgLCBwYWludGluZ0Rpc2FibGVkKGZhbHNlKQog
ICAgICAgICAgICAgLCBzaGFkb3dCbHVyKDApCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAg
ICAgIEZvbnQgZm9udDsKKyAgICAgICAgaW50IHRleHREcmF3aW5nTW9kZTsKKyAgICAgICAgCiAg
ICAgICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlOwogICAgICAgICBmbG9hdCBzdHJva2VUaGlj
a25lc3M7CisgICAgICAgIENvbG9yU3BhY2Ugc3Ryb2tlQ29sb3JTcGFjZTsKICAgICAgICAgQ29s
b3Igc3Ryb2tlQ29sb3I7CisgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gc3Ryb2tlR3JhZGllbnQ7
CisgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBzdHJva2VQYXR0ZXJuOworICAgICAgICAKKyAgICAg
ICAgQ29sb3JTcGFjZSBmaWxsQ29sb3JTcGFjZTsKICAgICAgICAgQ29sb3IgZmlsbENvbG9yOwot
ICAgICAgICBpbnQgdGV4dERyYXdpbmdNb2RlOworICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGZp
bGxHcmFkaWVudDsKKyAgICAgICAgUmVmUHRyPFBhdHRlcm4+IGZpbGxQYXR0ZXJuOworCiAgICAg
ICAgIGJvb2wgcGFpbnRpbmdEaXNhYmxlZDsKKyAgICAgICAgCiAgICAgICAgIEludFNpemUgc2hh
ZG93U2l6ZTsKICAgICAgICAgdW5zaWduZWQgc2hhZG93Qmx1cjsKICAgICAgICAgQ29sb3Igc2hh
ZG93Q29sb3I7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4u
aCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCmluZGV4IGIxNWVlODQuLjNj
MjBiNmUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCkBAIC0yNyw3ICsyNyw4IEBA
CiAjaWZuZGVmIFBhdHRlcm5faAogI2RlZmluZSBQYXR0ZXJuX2gKIAotI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKICNpZiBQTEFURk9STShD
RykKQEAgLTU2LDE3ICs1NywyMSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQWZm
aW5lVHJhbnNmb3JtOwogICAgIGNsYXNzIEltYWdlOwogCi0gICAgY2xhc3MgUGF0dGVybiA6IE5v
bmNvcHlhYmxlIHsKKyAgICBjbGFzcyBQYXR0ZXJuIDogcHVibGljIFJlZkNvdW50ZWQ8UGF0dGVy
bj4gewogICAgIHB1YmxpYzoKLSAgICAgICAgUGF0dGVybihJbWFnZSosIGJvb2wgcmVwZWF0WCwg
Ym9vbCByZXBlYXRZKTsKLQorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQYXR0ZXJuPiBjcmVh
dGUoSW1hZ2UqIHRpbGVJbWFnZSwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFkpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUGF0dGVybih0aWxlSW1hZ2UsIHJl
cGVhdFgsIHJlcGVhdFkpKTsKKyAgICAgICAgfQogICAgICAgICB2aXJ0dWFsIH5QYXR0ZXJuKCk7
Ci0gICAgICAgIAorCiAgICAgICAgIEltYWdlKiB0aWxlSW1hZ2UoKSBjb25zdCB7IHJldHVybiBt
X3RpbGVJbWFnZS5nZXQoKTsgfQogCiAgICAgICAgIFBsYXRmb3JtUGF0dGVyblB0ciBjcmVhdGVQ
bGF0Zm9ybVBhdHRlcm4oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtKSBj
b25zdDsKIAogICAgIHByaXZhdGU6CisgICAgICAgIFBhdHRlcm4oSW1hZ2UqLCBib29sIHJlcGVh
dFgsIGJvb2wgcmVwZWF0WSk7CisKICAgICAgICAgUmVmUHRyPEltYWdlPiBtX3RpbGVJbWFnZTsK
ICAgICAgICAgYm9vbCBtX3JlcGVhdFg7CiAgICAgICAgIGJvb2wgbV9yZXBlYXRZOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWly
by5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcAppbmRleCAxN2Q2OGQ1Li5mYTViMzhiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtNTE2
LDE0ICs1MTYsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oY29u
c3QgUGF0dGVybiYgcGF0dGVybikKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2wpCiB7Ci0gICAgLy8gRklYTUU6IHRoaXMgaXMgcHJv
YmFibHkgYSBuby1vcCBidXQgSSdtIG5vdCBzdXJlCi0gICAgLy8gbm90SW1wbGVtZW50ZWQoKTsg
Ly8gY29tbWVudGVkLW91dCBiZWNhdXNlIGl0J3MgY2hhdHR5IGFuZCBjbHV0dGVycyBvdXRwdXQK
KyAgICAvLyBDYWlybyBjb250ZXh0cyBjYW4ndCBob2xkIHNlcGFyYXRlIGZpbGwgYW5kIHN0cm9r
ZSBjb2xvcnMKKyAgICAvLyBzbyB3ZSBzZXQgdGhlbSBqdXN0IGJlZm9yZSB3ZSBhY3R1YWxseSBm
aWxsIG9yIHN0cm9rZQogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJv
a2VDb2xvcihjb25zdCBDb2xvciYgY29sKQogewotICAgIC8vIEZJWE1FOiB0aGlzIGlzIHByb2Jh
Ymx5IGEgbm8tb3AgYnV0IEknbSBub3Qgc3VyZQotICAgIC8vbm90SW1wbGVtZW50ZWQoKTsgLy8g
Y29tbWVudGVkLW91dCBiZWNhdXNlIGl0J3MgY2hhdHR5IGFuZCBjbHV0dGVycyBvdXRwdXQKKyAg
ICAvLyBDYWlybyBjb250ZXh0cyBjYW4ndCBob2xkIHNlcGFyYXRlIGZpbGwgYW5kIHN0cm9rZSBj
b2xvcnMKKyAgICAvLyBzbyB3ZSBzZXQgdGhlbSBqdXN0IGJlZm9yZSB3ZSBhY3R1YWxseSBmaWxs
IG9yIHN0cm9rZQogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VU
aGlja25lc3MoZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQpAQCAtOTExLDYgKzkxMSwxNSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0VXNlQW50aWFsaWFzaW5nKGJvb2wgZW5hYmxlKQogICAgIGNh
aXJvX3NldF9hbnRpYWxpYXMobV9kYXRhLT5jciwgZW5hYmxlID8gQ0FJUk9fQU5USUFMSUFTX0RF
RkFVTFQgOiBDQUlST19BTlRJQUxJQVNfTk9ORSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5KQorewor
fQorCitJbnRlcnBvbGF0aW9uUXVhbGl0eSBHcmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoKSBjb25zdAoreworICAgIHJldHVybiBJbnRlcnBvbGF0aW9uRGVmYXVsdDsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gUExBVEZPUk0oQ0FJUk8p
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dENHLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cu
Y3BwCmluZGV4IGMyNGNlZjYuLmJjYjJkZjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCkBAIC0zOTIsMjEgKzM5Miw2IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnBvaW50cywgY29u
c3QgRmxvYXRQb2ludCogcG9pbnRzCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0gICAgaWYgKGNvbG9yLmFscGhhKCkpIHsKLSAgICAgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICAgICAgQ29sb3Igb2xkRmls
bENvbG9yID0gZmlsbENvbG9yKCk7Ci0gICAgICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gY29sb3Ip
Ci0gICAgICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBjb2xvcik7Ci0gICAgICAgIENH
Q29udGV4dEZpbGxSZWN0KGNvbnRleHQsIHJlY3QpOwotICAgICAgICBpZiAob2xkRmlsbENvbG9y
ICE9IGNvbG9yKQotICAgICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xkRmlsbENv
bG9yKTsKLSAgICB9Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQpAQCAtOTEwLDkgKzg5NSwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUoaW50IG1vZGUpCiAgICAgfQogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mIHBhdHRlcm4pCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VQYXR0ZXJuKFBhdHRlcm4qIHBh
dHRlcm4pCiB7Ci0gICAgQ0dQYXR0ZXJuUmVmIHBsYXRmb3JtUGF0dGVybiA9IHBhdHRlcm4uY3Jl
YXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKTsKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgICAgICByZXR1cm47CisgICAgQ0dQYXR0ZXJuUmVmIHBsYXRmb3JtUGF0dGVybiA9IHBh
dHRlcm4tPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSk7CiAgICAgaWYgKCFwbGF0Zm9y
bVBhdHRlcm4pCiAgICAgICAgIHJldHVybjsKIApAQCAtOTI1LDkgKzkxMiwxMSBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mIHBhdHRlcm4p
CiAgICAgQ0dQYXR0ZXJuUmVsZWFzZShwbGF0Zm9ybVBhdHRlcm4pOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybihjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKQordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbFBhdHRlcm4oUGF0dGVybiogcGF0dGVy
bikKIHsKLSAgICBDR1BhdHRlcm5SZWYgcGxhdGZvcm1QYXR0ZXJuID0gcGF0dGVybi5jcmVhdGVQ
bGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpOworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisg
ICAgICAgIHJldHVybjsKKyAgICBDR1BhdHRlcm5SZWYgcGxhdGZvcm1QYXR0ZXJuID0gcGF0dGVy
bi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKTsKICAgICBpZiAoIXBsYXRmb3JtUGF0
dGVybikKICAgICAgICAgcmV0dXJuOwogCkBAIC05NDAsNiArOTI5LDE4IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mIHBhdHRlcm4pCiAgICAg
Q0dQYXR0ZXJuUmVsZWFzZShwbGF0Zm9ybVBhdHRlcm4pOwogfQogCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0UGxhdGZvcm1TdHJva2VHcmFkaWVudChHcmFkaWVudCopCit7CisgICAgLy8gQ29y
ZUdyYXBoaWNzIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBhICJzdHJva2UgZ3JhZGllbnQiLCBv
bmx5CisgICAgLy8gZmlsbGluZyBhIGNsaXAgcmVnaW9uIHdpdGggYSBncmFkaWVudCwgd2hpY2gg
d2UgZG8gYXQgZHJhdyB0aW1lCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bUZpbGxHcmFkaWVudChHcmFkaWVudCopCit7CisgICAgLy8gQ29yZUdyYXBoaWNzIGRvZXMgbm90
IHN1cHBvcnQgc2V0dGluZyBhICJmaWxsIGdyYWRpZW50Iiwgb25seQorICAgIC8vIGZpbGxpbmcg
YSBjbGlwIHJlZ2lvbiB3aXRoIGEgZ3JhZGllbnQsIHdoaWNoIHdlIGRvIGF0IGRyYXcgdGltZQor
fQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBD
b2xvciYgY29sb3IpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKaW5kZXggMDZj
ZTNjOC4uNzJlZDAwNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHRRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9H
cmFwaGljc0NvbnRleHRRdC5jcHAKQEAgLTg0OSw2ICs4NDksMTEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBPdXRFbGxpcHNlSW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgcC0+
c2V0Q2xpcFBhdGgobmV3Q2xpcCwgUXQ6OkludGVyc2VjdENsaXApOwogfQogCit2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1h
Z2VCdWZmZXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiByZWN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0aGlja25lc3Mp
CiB7CkBAIC05MjYsMjAgKzkzMSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bUZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiAgICAgbV9kYXRhLT5wKCktPnNldEJydXNo
KFFCcnVzaChjb2xvcikpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdHJva2VQ
YXR0ZXJuKGNvbnN0IFBhdHRlcm4mIHBhdHRlcm4pCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mIHBhdHRlcm4p
Ci17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG5v
dEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRVc2VBbnRpYWxp
YXNpbmcoYm9vbCBlbmFibGUpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTEw
MzMsNiArMTAyNCwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVsZWFzZVdpbmRvd3NDb250
ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJlY3QsIGJvbwogfQogI2VuZGlmCiAKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9s
YXRpb25RdWFsaXR5KQoreworfQorCitJbnRlcnBvbGF0aW9uUXVhbGl0eSBHcmFwaGljc0NvbnRl
eHQ6OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdAoreworICAgIHJldHVybiBJbnRl
cnBvbGF0aW9uRGVmYXVsdDsKK30KKwogfQogCiAvLyB2aW06IHRzPTQgc3c9NCBldApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAppbmRl
eCBlOGJmMjZjLi43NTYxZjNlIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcApAQCAtMzU0LDYgKzM1NCwxMSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJikKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQog
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0
JiwgY29uc3QgSW1hZ2VCdWZmZXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIEFm
ZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6OmdldENUTSgpIGNvbnN0CiB7IAogICAgIG5v
dEltcGxlbWVudGVkKCk7CkBAIC00NzYsMTggKzQ4MSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0VXNlQW50aWFsaWFzaW5nKGJvb2wgZW5hYmxlKQogICAgIG5vdEltcGxlbWVudGVkKCk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKGNvbnN0IFBhdHRl
cm4mKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
SW50ZXJwb2xhdGlvblF1YWxpdHkpCiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oY29uc3QgUGF0dGVybiYpCitJbnRlcnBvbGF0aW9u
UXVhbGl0eSBHcmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25z
dAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBJbnRlcnBvbGF0aW9uRGVmYXVsdDsKIH0KIAog
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22940</attachid>
            <date>2008-08-22 10:12:08 -0700</date>
            <delta_ts>2008-08-23 02:05:43 -0700</delta_ts>
            <desc>A bit further with the patch for krit</desc>
            <filename>A-bit-further-with-the-patch-for-krit.patch</filename>
            <type>text/plain</type>
            <size>44030</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">MmVlY2FjYjEyNDZkYTUzMTgwZGI3OGFkMjQ5MWMwOTNkZGUyN2RlOApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwZWRjYTZhLi5jNDFmYzc5IDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjI5Miw2ICsyMjkyLDcg
QEAKIAkJQTg4QUQ1MkYwOTUyNEI5MjAwMUREMTk2IC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3JrIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg1RDdBMkYw
ODc5RUJBOTAwNkE5MTcyIC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3JrICovOyB9OwogCQlBODhERDQ4
NzBCNDYyOUEzMDBDMDI5OTAgLyogUGF0aFRyYXZlcnNhbFN0YXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODhERDQ4NjBCNDYyOUEzMDBDMDI5OTAg
LyogUGF0aFRyYXZlcnNhbFN0YXRlLmggKi87IH07CiAJCUE4OERENDg5MEI0NjI5QjAwMEMwMjk5
MCAvKiBQYXRoVHJhdmVyc2FsU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTg4REQ0ODgwQjQ2MjlCMDAwQzAyOTkwIC8qIFBhdGhUcmF2ZXJz
YWxTdGF0ZS5jcHAgKi87IH07CisJCUE4OEZFMzM0MEU1RUVFODcwMDhEOEMwRiAvKiBHcmFwaGlj
c0NvbnRleHRQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBODhGRTMzMzBFNUVFRTg3MDA4RDhDMEYgLyogR3JhcGhpY3NDb250ZXh0UHJpdmF0
ZS5oICovOyB9OwogCQlBODk5NDMyODBCNDIzMzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4OTk0MzI2MEI0
MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5oICovOyB9OwogCQlBODk5NDMyOTBCNDIzMzg4
MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTg5OTQzMjcwQjQyMzM4NzAwRDdDODAyIC8qIEJpdG1hcEltYWdl
LmNwcCAqLzsgfTsKIAkJQThBOTA5QUMwQ0JDRDZCNTAwMjlCODA3IC8qIFJlbmRlclNWR1RyYW5z
Zm9ybWFibGVDb250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4QTkwOUFBMENCQ0Q2QjUwMDI5QjgwNyAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyLmggKi87IH07CkBAIC02NjYxLDYgKzY2NjIsNyBAQAogCQlBODcxREZFMTBB
MTUzNzZCMDBCMTJBNjggLyogUmVuZGVyV2lkZ2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZW5kZXJXaWRnZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBODhERDQ4NjBCNDYyOUEzMDBDMDI5OTAgLyogUGF0aFRyYXZlcnNhbFN0YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhdGhUcmF2ZXJzYWxTdGF0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODhERDQ4ODBCNDYyOUIwMDBDMDI5OTAgLyog
UGF0aFRyYXZlcnNhbFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBhdGhUcmF2ZXJzYWxTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUE4OEZFMzMzMEU1RUVFODcwMDhEOEMwRiAvKiBHcmFwaGljc0NvbnRleHRQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dFByaXZhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg5OTQzMjYwQjQyMzM4NzAwRDdDODAyIC8q
IEJpdG1hcEltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpdG1hcElt
YWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4OTk0MzI3MEI0MjMzODcwMEQ3
QzgwMiAvKiBCaXRtYXBJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBCaXRtYXBJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTkw
OUFBMENCQ0Q2QjUwMDI5QjgwNyAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1RyYW5zZm9ybWFibGVD
b250YWluZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMjIwLDYgKzEyMjIy
LDcgQEAKIAkJCQlCMkMzREE1RjBEMDA2Q0Q2MDBFRjZGMjYgLyogR2x5cGhXaWR0aE1hcC5oICov
LAogCQkJCUJDNTNDNjA3MERBNTZDNTcwMDIxRUI1RCAvKiBHcmFkaWVudC5jcHAgKi8sCiAJCQkJ
QkM1M0M1RjQwREE1NkI5MjAwMjFFQjVEIC8qIEdyYWRpZW50LmggKi8sCisJCQkJQTg4RkUzMzMw
RTVFRUU4NzAwOEQ4QzBGIC8qIEdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCAqLywKIAkJCQlCMkEw
MTU5MjBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmNwcCAqLywKIAkJCQlCMkEw
MTU5MzBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmggKi8sCiAJCQkJQjJBMDE1
OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwICovLApAQCAtMTU0MzcsNiAr
MTU0NDAsNyBAQAogCQkJCTI5QUFDNTFGMEU1Mzk2M0IwMDhGOUIzQiAvKiBBY2Nlc3NpYmlsaXR5
VGFibGVIZWFkZXJDb250YWluZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4QTQ4NDc4MEU1Mjcy
QzUwMEMzRkU3NiAvKiBTY3JpcHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEZBNkU1
RDBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTg4RkUz
MzQwRTVFRUU4NzAwOEQ4QzBGIC8qIEdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQ3VzdG9tLmNwcAppbmRleCA5MmVkOGU4Li4zN2UyNTRmIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9t
LmNwcApAQCAtNDQsOCArNDQsOCBAQCBzdGF0aWMgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4
ZWMsIENhbnZhc1N0eWxlKiBzdHlsZSkKIHsKICAgICBpZiAoc3R5bGUtPmNhbnZhc0dyYWRpZW50
KCkpCiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIHN0eWxlLT5jYW52YXNHcmFkaWVudCgpKTsK
LSAgICBpZiAoc3R5bGUtPnBhdHRlcm4oKSkKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgc3R5
bGUtPnBhdHRlcm4oKSk7CisgICAgaWYgKHN0eWxlLT5jYW52YXNQYXR0ZXJuKCkpCisgICAgICAg
IHJldHVybiB0b0pTKGV4ZWMsIHN0eWxlLT5jYW52YXNQYXR0ZXJuKCkpOwogICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCBzdHlsZS0+Y29sb3IoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
Y3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5j
cHAKaW5kZXggN2E3MjEzNC4uZmQwY2E1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTR3Jh
ZGllbnRWYWx1ZS5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKQEAg
LTcxLDcgKzcxLDcgQEAgU3RyaW5nIENTU0dyYWRpZW50VmFsdWU6OmNzc1RleHQoKSBjb25zdAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUdyYWRpZW50KiBDU1NHcmFkaWVudFZhbHVlOjpjcmVh
dGVHcmFkaWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQor
UGFzc1JlZlB0cjxHcmFkaWVudD4gQ1NTR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBBU1NFUlQo
IXNpemUuaXNFbXB0eSgpKTsKICAgICAKQEAgLTgwLDEzICs4MCwxMyBAQCBHcmFkaWVudCogQ1NT
R3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29u
c3QgSW50U2l6ZQogICAgIEZsb2F0UG9pbnQgZmlyc3RQb2ludCA9IHJlc29sdmVQb2ludChtX2Zp
cnN0WC5nZXQoKSwgbV9maXJzdFkuZ2V0KCksIHNpemUsIHpvb21GYWN0b3IpOwogICAgIEZsb2F0
UG9pbnQgc2Vjb25kUG9pbnQgPSByZXNvbHZlUG9pbnQobV9zZWNvbmRYLmdldCgpLCBtX3NlY29u
ZFkuZ2V0KCksIHNpemUsIHpvb21GYWN0b3IpOwogICAgIAotICAgIEdyYWRpZW50KiBncmFkaWVu
dCA9IDA7CisgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudDsKICAgICBpZiAobV90eXBlID09
IENTU0xpbmVhckdyYWRpZW50KQotICAgICAgICBncmFkaWVudCA9IG5ldyBHcmFkaWVudChmaXJz
dFBvaW50LCBzZWNvbmRQb2ludCk7CisgICAgICAgIGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0
ZShmaXJzdFBvaW50LCBzZWNvbmRQb2ludCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGZsb2F0IGZp
cnN0UmFkaXVzID0gcmVzb2x2ZVJhZGl1cyhtX2ZpcnN0UmFkaXVzLmdldCgpLCB6b29tRmFjdG9y
KTsKICAgICAgICAgZmxvYXQgc2Vjb25kUmFkaXVzID0gcmVzb2x2ZVJhZGl1cyhtX3NlY29uZFJh
ZGl1cy5nZXQoKSwgem9vbUZhY3Rvcik7Ci0gICAgICAgIGdyYWRpZW50ID0gbmV3IEdyYWRpZW50
KGZpcnN0UG9pbnQsIGZpcnN0UmFkaXVzLCBzZWNvbmRQb2ludCwgc2Vjb25kUmFkaXVzKTsKKyAg
ICAgICAgZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKGZpcnN0UG9pbnQsIGZpcnN0UmFkaXVz
LCBzZWNvbmRQb2ludCwgc2Vjb25kUmFkaXVzKTsKICAgICB9CiAKICAgICAvLyBOb3cgYWRkIHRo
ZSBzdG9wcy4KQEAgLTEwMSw3ICsxMDEsNyBAQCBHcmFkaWVudCogQ1NTR3JhZGllbnRWYWx1ZTo6
Y3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZQogICAg
IC8vIFRoZSBiYWNrIGVuZCBhbHJlYWR5IHNvcnRlZCB0aGUgc3RvcHMuCiAgICAgZ3JhZGllbnQt
PnNldFN0b3BzU29ydGVkKHRydWUpOwogCi0gICAgcmV0dXJuIGdyYWRpZW50OworICAgIHJldHVy
biBncmFkaWVudC5yZWxlYXNlKCk7CiB9CiAKIEltYWdlKiBDU1NHcmFkaWVudFZhbHVlOjppbWFn
ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oIGIvV2ViQ29yZS9jc3MvQ1NTR3JhZGll
bnRWYWx1ZS5oCmluZGV4IGI5MGQzMDcuLjRjOTBiZTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3Nz
L0NTU0dyYWRpZW50VmFsdWUuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgK
QEAgLTgyLDcgKzgyLDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgLy8gQ3JlYXRlIHRo
ZSBncmFkaWVudCBmb3IgYSBnaXZlbiBzaXplLgotICAgIEdyYWRpZW50KiBjcmVhdGVHcmFkaWVu
dChSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJik7CisgICAgUGFzc1JlZlB0cjxHcmFkaWVu
dD4gY3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpOwogICAgIAog
ICAgIC8vIFJlc29sdmUgcG9pbnRzL3JhZGlpIHRvIGZyb250IGVuZCB2YWx1ZXMuCiAgICAgRmxv
YXRQb2ludCByZXNvbHZlUG9pbnQoQ1NTUHJpbWl0aXZlVmFsdWUqLCBDU1NQcmltaXRpdmVWYWx1
ZSosIGNvbnN0IEludFNpemUmLCBmbG9hdCB6b29tRmFjdG9yKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9DYW52YXNHcmFkaWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvQ2FudmFzR3JhZGllbnQu
Y3BwCmluZGV4IGMxNTYzMzguLmFhNWYwM2MgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9DYW52
YXNHcmFkaWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc0dyYWRpZW50LmNwcApAQCAt
MzIsMTIgKzMyLDEyIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENhbnZhc0dyYWRpZW50OjpD
YW52YXNHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEp
Ci0gICAgOiBtX2dyYWRpZW50KHAwLCBwMSkKKyAgICA6IG1fZ3JhZGllbnQoR3JhZGllbnQ6OmNy
ZWF0ZShwMCwgcDEpKQogewogfQogCiBDYW52YXNHcmFkaWVudDo6Q2FudmFzR3JhZGllbnQoY29u
c3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQg
cjEpCi0gICAgOiBtX2dyYWRpZW50KHAwLCByMCwgcDEsIHIxKQorICAgIDogbV9ncmFkaWVudChH
cmFkaWVudDo6Y3JlYXRlKHAwLCByMCwgcDEsIHIxKSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0NhbnZhc0dyYWRpZW50LmggYi9XZWJDb3JlL2h0bWwvQ2FudmFzR3JhZGllbnQu
aAppbmRleCBmMDhiZmZmLi40MDcyOTVlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFz
R3JhZGllbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvQ2FudmFzR3JhZGllbnQuaApAQCAtNDYsMTcg
KzQ2LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ2FudmFzR3JhZGllbnQocDAsIHIwLCBwMSwgcjEpKTsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgR3JhZGllbnQmIGdyYWRpZW50KCkgeyByZXR1cm4gbV9ncmFkaWVudDsgfQor
ICAgICAgICBHcmFkaWVudCogZ3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX2dyYWRpZW50Lmdl
dCgpOyB9CiAKLSAgICAgICAgdm9pZCBhZGRDb2xvclN0b3AoZmxvYXQgdmFsdWUsIGNvbnN0IFN0
cmluZyYgY29sb3IpIHsgbV9ncmFkaWVudC5hZGRDb2xvclN0b3AodmFsdWUsIGNvbG9yKTsgfQor
ICAgICAgICB2b2lkIGFkZENvbG9yU3RvcChmbG9hdCB2YWx1ZSwgY29uc3QgU3RyaW5nJiBjb2xv
cikgeyBtX2dyYWRpZW50LT5hZGRDb2xvclN0b3AodmFsdWUsIGNvbG9yKTsgfQogCi0gICAgICAg
IHZvaWQgZ2V0Q29sb3IoZmxvYXQgdmFsdWUsIGZsb2F0KiByLCBmbG9hdCogZywgZmxvYXQqIGIs
IGZsb2F0KiBhKSBjb25zdCB7IG1fZ3JhZGllbnQuZ2V0Q29sb3IodmFsdWUsIHIsIGcsIGIsIGEp
OyB9CisgICAgICAgIHZvaWQgZ2V0Q29sb3IoZmxvYXQgdmFsdWUsIGZsb2F0KiByLCBmbG9hdCog
ZywgZmxvYXQqIGIsIGZsb2F0KiBhKSBjb25zdCB7IG1fZ3JhZGllbnQtPmdldENvbG9yKHZhbHVl
LCByLCBnLCBiLCBhKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ2FudmFzR3JhZGllbnQo
Y29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKTsKICAgICAgICAgQ2Fu
dmFzR3JhZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBv
aW50JiBwMSwgZmxvYXQgcjEpOwogICAgICAgICAKLSAgICAgICAgR3JhZGllbnQgbV9ncmFkaWVu
dDsKKyAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBtX2dyYWRpZW50OwogICAgIH07CiAKIH0gLy9u
YW1lc3BhY2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmNwcCBiL1dl
YkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmNwcAppbmRleCA0NGZhMjFhLi42MmE0NjIwIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5jcHAKKysrIGIvV2ViQ29yZS9odG1s
L0NhbnZhc1BhdHRlcm4uY3BwCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgQ2FudmFzUGF0dGVybjo6
cGFyc2VSZXBldGl0aW9uVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHJlcGVhdFgsIGJv
b2wmCiB9CiAKIENhbnZhc1BhdHRlcm46OkNhbnZhc1BhdHRlcm4oSW1hZ2UqIGltYWdlLCBib29s
IHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKLSAgICA6IG1fcGF0dGVy
bihpbWFnZSwgcmVwZWF0WCwgcmVwZWF0WSkKKyAgICA6IG1fcGF0dGVybihQYXR0ZXJuOjpjcmVh
dGUoaW1hZ2UsIHJlcGVhdFgsIHJlcGVhdFkpKQogICAgICwgbV9vcmlnaW5DbGVhbihvcmlnaW5D
bGVhbikKIHsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmggYi9X
ZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5oCmluZGV4IDc5Yzc4NzIuLjZjMDEyZDEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmgKKysrIGIvV2ViQ29yZS9odG1sL0Nh
bnZhc1BhdHRlcm4uaApAQCAtNDUsMTUgKzQ1LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNQYXR0ZXJuKGlt
YWdlLCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikpOwogICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKCkgeyByZXR1cm4gbV9wYXR0ZXJuOyB9
CisKKyAgICAgICAgUGF0dGVybiogcGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fcGF0dGVybi5n
ZXQoKTsgfQogCiAgICAgICAgIGJvb2wgb3JpZ2luQ2xlYW4oKSBjb25zdCB7IHJldHVybiBtX29y
aWdpbkNsZWFuOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBDYW52YXNQYXR0ZXJuKEltYWdl
KiwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pOwogCi0gICAg
ICAgIFBhdHRlcm4gbV9wYXR0ZXJuOworICAgICAgICBSZWZQdHI8UGF0dGVybj4gbV9wYXR0ZXJu
OwogICAgICAgICBib29sIG1fb3JpZ2luQ2xlYW47CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9XZWJDb3JlL2h0bWwvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCBhNWQ1NmJlLi44ZDAyOGYwIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJD
b3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMTAxLDggKzEwMSw2IEBA
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGU6OlN0YXRlKCkKICAgICAsIG1fc2hhZG93
Q29sb3IoImJsYWNrIikKICAgICAsIG1fZ2xvYmFsQWxwaGEoMSkKICAgICAsIG1fZ2xvYmFsQ29t
cG9zaXRlKENvbXBvc2l0ZVNvdXJjZU92ZXIpCi0gICAgLCBtX2FwcGxpZWRTdHJva2VQYXR0ZXJu
KGZhbHNlKQotICAgICwgbV9hcHBsaWVkRmlsbFBhdHRlcm4oZmFsc2UpCiB7CiB9CiAKQEAgLTE0
MSw3ICsxMzksNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlU3R5
bGUoUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4gc3R5bGUpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChtX2NhbnZhcy0+b3JpZ2luQ2xlYW4oKSkgewotICAgICAgICBpZiAoQ2FudmFzUGF0dGVy
biogcGF0dGVybiA9IHN0eWxlLT5wYXR0ZXJuKCkpIHsKKyAgICAgICAgaWYgKENhbnZhc1BhdHRl
cm4qIHBhdHRlcm4gPSBzdHlsZS0+Y2FudmFzUGF0dGVybigpKSB7CiAgICAgICAgICAgICBpZiAo
IXBhdHRlcm4tPm9yaWdpbkNsZWFuKCkpCiAgICAgICAgICAgICAgICAgbV9jYW52YXMtPnNldE9y
aWdpblRhaW50ZWQoKTsKICAgICAgICAgfQpAQCAtMTUyLDcgKzE1MCw2IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VTdHlsZShQYXNzUmVmUHRyPENhbnZhc1N0eWxl
PiBzdHlsZSkKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKICAgICBzdGF0ZSgpLm1fc3Ry
b2tlU3R5bGUtPmFwcGx5U3Ryb2tlQ29sb3IoYyk7Ci0gICAgc3RhdGUoKS5tX2FwcGxpZWRTdHJv
a2VQYXR0ZXJuID0gZmFsc2U7CiB9CiAKIENhbnZhc1N0eWxlKiBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmZpbGxTdHlsZSgpIGNvbnN0CkBAIC0xNjYsNyArMTYzLDcgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxTdHlsZShQYXNzUmVmUHRyPENhbnZhc1N0eWxlPiBz
dHlsZSkKICAgICAgICAgcmV0dXJuOwogIAogICAgIGlmIChtX2NhbnZhcy0+b3JpZ2luQ2xlYW4o
KSkgewotICAgICAgICBpZiAoQ2FudmFzUGF0dGVybiogcGF0dGVybiA9IHN0eWxlLT5wYXR0ZXJu
KCkpIHsKKyAgICAgICAgaWYgKENhbnZhc1BhdHRlcm4qIHBhdHRlcm4gPSBzdHlsZS0+Y2FudmFz
UGF0dGVybigpKSB7CiAgICAgICAgICAgICBpZiAoIXBhdHRlcm4tPm9yaWdpbkNsZWFuKCkpCiAg
ICAgICAgICAgICAgICAgbV9jYW52YXMtPnNldE9yaWdpblRhaW50ZWQoKTsKICAgICAgICAgfQpA
QCAtMTc3LDcgKzE3NCw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxs
U3R5bGUoUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4gc3R5bGUpCiAgICAgaWYgKCFjKQogICAgICAg
ICByZXR1cm47CiAgICAgc3RhdGUoKS5tX2ZpbGxTdHlsZS0+YXBwbHlGaWxsQ29sb3IoYyk7Ci0g
ICAgc3RhdGUoKS5tX2FwcGxpZWRGaWxsUGF0dGVybiA9IGZhbHNlOwogfQogCiBmbG9hdCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmxpbmVXaWR0aCgpIGNvbnN0CkBAIC01NDIsNDcgKzUzOCw3
IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsKCkKICAgICBpZiAoIW1fcGF0
aC5pc0VtcHR5KCkpCiAgICAgICAgIHdpbGxEcmF3KG1fcGF0aC5ib3VuZGluZ1JlY3QoKSk7CiAK
LSNpZiBQTEFURk9STShDRykKLSAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3Jh
ZGllbnQoKSkgewotICAgICAgICAvLyBTaGFkaW5nIHdvcmtzIG9uIHRoZSBlbnRpcmUgY2xpcCBy
ZWdpb24sIHNvIGNvbnZlcnQgdGhlIGN1cnJlbnQgcGF0aCB0byBhIGNsaXAuCi0gICAgICAgIGMt
PnNhdmUoKTsKLSAgICAgICAgQ0dDb250ZXh0Q2xpcChjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0g
ICAgICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGMtPnBsYXRmb3JtQ29udGV4dCgpLCBzdGF0ZSgp
Lm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRmb3JtR3JhZGll
bnQoKSk7ICAgICAgICAKLSAgICAgICAgYy0+cmVzdG9yZSgpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBs
eUZpbGxQYXR0ZXJuKCk7Ci0gICAgICAgIENHQ29udGV4dEZpbGxQYXRoKGMtPnBsYXRmb3JtQ29u
dGV4dCgpKTsKLSAgICB9Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICBRUGFpbnRlclBhdGgqIHBh
dGggPSBtX3BhdGgucGxhdGZvcm1QYXRoKCk7Ci0gICAgUVBhaW50ZXIqIHAgPSBzdGF0aWNfY2Fz
dDxRUGFpbnRlcio+KGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoc3RhdGUoKS5tX2Zp
bGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAgICBwLT5maWxsUGF0aCgqcGF0aCwg
UUJydXNoKCooc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKS0+Z3JhZGllbnQo
KS5wbGF0Zm9ybUdyYWRpZW50KCkpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHN0YXRl
KCkubV9maWxsU3R5bGUtPnBhdHRlcm4oKSkKLSAgICAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4o
KTsKLSAgICAgICAgcC0+ZmlsbFBhdGgoKnBhdGgsIHAtPmJydXNoKCkpOwotICAgIH0KLSNlbGlm
IFBMQVRGT1JNKENBSVJPKQotICAgIGNhaXJvX3QqIGNyID0gYy0+cGxhdGZvcm1Db250ZXh0KCk7
Ci0gICAgY2Fpcm9fc2F2ZShjcik7Ci0KLSAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2Fu
dmFzR3JhZGllbnQoKSkgewotICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBzdGF0ZSgpLm1f
ZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRmb3JtR3JhZGllbnQo
KSk7Ci0gICAgICAgIGNhaXJvX2ZpbGwoY3IpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChz
dGF0ZSgpLm1fZmlsbFN0eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseUZpbGxQYXR0
ZXJuKCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgZmxvYXQgcmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGE7Ci0gICAgICAgICAgICBjLT5maWxsQ29sb3IoKS5nZXRSR0JBKHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhKTsKLSAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGNhaXJvX2ZpbGwoY3Ip
OwotICAgIH0KLSAgICBjYWlyb19yZXN0b3JlKGNyKTsKLSNlbmRpZgorICAgIGMtPmZpbGxQYXRo
KCk7CiAKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAgICAgY2xlYXJQYXRoRm9yRGFz
aGJvYXJkQmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSgpOwpAQCAtNjA1LDU0ICs1NjEsOCBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlKCkKICAgICAgICAgYm91bmRpbmdS
ZWN0LmluZmxhdGUoaW5zZXQpOwogICAgICAgICB3aWxsRHJhdyhib3VuZGluZ1JlY3QpOwogICAg
IH0KLSAgICAKLSAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5k
ZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgaWYgKHN0YXRl
KCkubV9zdHJva2VTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAgICAvLyBTaGFkaW5n
IHdvcmtzIG9uIHRoZSBlbnRpcmUgY2xpcCByZWdpb24sIHNvIGNvbnZlcnQgdGhlIGN1cnJlbnQg
cGF0aCB0byBhIGNsaXAuCi0gICAgICAgIGMtPnNhdmUoKTsKLSAgICAgICAgQ0dDb250ZXh0UmVw
bGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoYy0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgICAgICBD
R0NvbnRleHRDbGlwKGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICAgICAgQ0dDb250ZXh0RHJh
d1NoYWRpbmcoYy0+cGxhdGZvcm1Db250ZXh0KCksIHN0YXRlKCkubV9zdHJva2VTdHlsZS0+Y2Fu
dmFzR3JhZGllbnQoKS0+Z3JhZGllbnQoKS5wbGF0Zm9ybUdyYWRpZW50KCkpOyAgICAgICAgCi0g
ICAgICAgIGMtPnJlc3RvcmUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5t
X3N0cm9rZVN0eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4o
KTsKLSAgICAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0g
ICAgfQotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgUVBhaW50ZXJQYXRoKiBwYXRoID0gbV9wYXRo
LnBsYXRmb3JtUGF0aCgpOwotICAgIFFQYWludGVyKiBwID0gc3RhdGljX2Nhc3Q8UVBhaW50ZXIq
PihjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS0+
Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAgICBwLT5zYXZlKCk7Ci0gICAgICAgIHAtPnNldEJy
dXNoKCooc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgp
LnBsYXRmb3JtR3JhZGllbnQoKSkpOwotICAgICAgICBwLT5zdHJva2VQYXRoKCpwYXRoLCBwLT5w
ZW4oKSk7Ci0gICAgICAgIHAtPnJlc3RvcmUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
c3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseVN0cm9r
ZVBhdHRlcm4oKTsKLSAgICAgICAgcC0+c3Ryb2tlUGF0aCgqcGF0aCwgcC0+cGVuKCkpOwotICAg
IH0KLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgIGNhaXJvX3QqIGNyID0gYy0+cGxhdGZvcm1D
b250ZXh0KCk7Ci0gICAgY2Fpcm9fc2F2ZShjcik7Ci0gICAgaWYgKHN0YXRlKCkubV9zdHJva2VT
dHlsZS0+Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBz
dGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPmNhbnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkucGxhdGZv
cm1HcmFkaWVudCgpKTsKLSAgICAgICAgYy0+YWRkUGF0aChtX3BhdGgpOwotICAgICAgICBjYWly
b19zdHJva2UoY3IpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1fc3Ryb2tl
U3R5bGUtPnBhdHRlcm4oKSkKLSAgICAgICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwot
ICAgICAgICAgICAgYy0+c3Ryb2tlQ29sb3IoKS5nZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhKTsKLSAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGMtPmFkZFBhdGgobV9wYXRoKTsKLSAg
ICAgICAgY2Fpcm9fc3Ryb2tlKGNyKTsKLSAgICB9Ci0gICAgY2Fpcm9fcmVzdG9yZShjcik7Ci0j
ZW5kaWYKKworICAgIGMtPnN0cm9rZVBhdGgoKTsKIAogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQ
UE9SVCkKICAgICBjbGVhclBhdGhGb3JEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2Rl
KCk7CkBAIC03MDksNDIgKzYxOSw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpm
aWxsUmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpCiAgICAgRmxv
YXRSZWN0IHJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgd2lsbERyYXcocmVjdCk7CiAK
LSAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBo
aWNzQ29udGV4dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgaWYgKHN0YXRlKCkubV9maWxs
U3R5bGUtPmNhbnZhc0dyYWRpZW50KCkpIHsKLSAgICAgICAgYy0+c2F2ZSgpOwotICAgICAgICBz
dGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLmZpbGwoYywg
cmVjdCk7Ci0gICAgICAgIGMtPnJlc3RvcmUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
c3RhdGUoKS5tX2ZpbGxTdHlsZS0+cGF0dGVybigpKQotICAgICAgICAgICAgYXBwbHlGaWxsUGF0
dGVybigpOwotICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjLT5wbGF0Zm9ybUNvbnRleHQoKSwg
cmVjdCk7Ci0gICAgfQotI2VsaWYgUExBVEZPUk0oUVQpCi0gICAgUVBhaW50ZXIqIHAgPSBzdGF0
aWNfY2FzdDxRUGFpbnRlcio+KGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoc3RhdGUo
KS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAgICBwLT5maWxsUmVjdChy
ZWN0LCBRQnJ1c2goKihzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFk
aWVudCgpLnBsYXRmb3JtR3JhZGllbnQoKSkpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
c3RhdGUoKS5tX2ZpbGxTdHlsZS0+cGF0dGVybigpKQotICAgICAgICAgICAgYXBwbHlGaWxsUGF0
dGVybigpOwotICAgICAgICBwLT5maWxsUmVjdChyZWN0LCBwLT5icnVzaCgpKTsKLSAgICB9Ci0j
ZWxpZiBQTEFURk9STShDQUlSTykKLSAgICBjYWlyb190KiBjciA9IGMtPnBsYXRmb3JtQ29udGV4
dCgpOwotICAgIGNhaXJvX3NhdmUoY3IpOwotICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5j
YW52YXNHcmFkaWVudCgpKSB7Ci0gICAgICAgIHN0YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dy
YWRpZW50KCktPmdyYWRpZW50KCkuZmlsbChjLCByZWN0KTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+cGF0dGVybigpKSB7Ci0gICAgICAgICAgICBhcHBs
eUZpbGxQYXR0ZXJuKCk7Ci0gICAgICAgICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHgsIHksIHdp
ZHRoLCBoZWlnaHQpOwotICAgICAgICAgICAgY2Fpcm9fZmlsbChjcik7Ci0gICAgICAgIH0gZWxz
ZQotICAgICAgICAgICAgYy0+ZmlsbFJlY3QocmVjdCwgYy0+ZmlsbENvbG9yKCkpOwotICAgIH0K
LSAgICAKLSAgICBjYWlyb19yZXN0b3JlKGNyKTsKLSNlbmRpZgorICAgIGMtPnNhdmUoKTsKKyAg
ICBjLT5maWxsUmVjdChyZWN0KTsKKyAgICBjLT5yZXN0b3JlKCk7CiB9CiAKIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2VSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdp
ZHRoLCBmbG9hdCBoZWlnaHQpCkBAIC03NzIsMTAgKzY0OSw2IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzdHJva2VSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBm
bG9hdCBoCiAgICAgYm91bmRpbmdSZWN0LmluZmxhdGUobGluZVdpZHRoIC8gMik7CiAgICAgd2ls
bERyYXcoYm91bmRpbmdSZWN0KTsKIAotICAgIC8vIEZJWE1FOiBObyBzdXBwb3J0IGZvciBncmFk
aWVudHMhCi0gICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS0+cGF0dGVybigpKQotICAgICAg
ICBhcHBseVN0cm9rZVBhdHRlcm4oKTsKLQogICAgIGMtPnN0cm9rZVJlY3QocmVjdCwgbGluZVdp
ZHRoKTsKIH0KIApAQCAtMTE2OCw1OCArMTA0MSw2IEBAIEdyYXBoaWNzQ29udGV4dCogQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3aW5nQ29udGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIG1f
Y2FudmFzLT5kcmF3aW5nQ29udGV4dCgpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBk
cmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
RklYTUU6IENhbiB0aGlzIGNoZWNrIGJlIG1vdmVkIGludG8gR3JhcGhpY3NDb250ZXh0PyBvciBy
ZW1vdmVkPwotI2lmIFBMQVRGT1JNKENHKQotICAgIC8vIENoZWNrIGZvciBjYXNlIHdoZXJlIHRo
ZSBwYXR0ZXJuIGlzIGFscmVhZHkgc2V0LgotICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBjLT5n
ZXRDVE0oKTsKLSAgICBpZiAoc3RhdGUoKS5tX2FwcGxpZWRTdHJva2VQYXR0ZXJuICYmIGN0bSA9
PSBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGVQYXR0ZXJuVHJhbnNmb3JtKQotICAgICAgICByZXR1cm47
Ci0jZW5kaWYKLQotICAgIENhbnZhc1BhdHRlcm4qIHBhdHRlcm4gPSBzdGF0ZSgpLm1fc3Ryb2tl
U3R5bGUtPnBhdHRlcm4oKTsKLSAgICBpZiAoIXBhdHRlcm4pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGMtPmFwcGx5U3Ryb2tlUGF0dGVybihwYXR0ZXJuLT5wYXR0ZXJuKCkpOwotCi0jaWYgUExB
VEZPUk0oQ0cpCi0gICAgc3RhdGUoKS5tX3N0cm9rZVN0eWxlUGF0dGVyblRyYW5zZm9ybSA9IGN0
bTsKLSNlbmRpZgotICAgIHN0YXRlKCkubV9hcHBsaWVkU3Ryb2tlUGF0dGVybiA9IHRydWU7Ci19
Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjphcHBseUZpbGxQYXR0ZXJuKCkKLXsK
LSAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghYykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IENhbiB0aGlzIGNoZWNrIGJlIG1vdmVk
IGludG8gR3JhcGhpY3NDb250ZXh0PyBvciByZW1vdmVkPwotI2lmIFBMQVRGT1JNKENHKQotICAg
IC8vIENoZWNrIGZvciBjYXNlIHdoZXJlIHRoZSBwYXR0ZXJuIGlzIGFscmVhZHkgc2V0LgotICAg
IEFmZmluZVRyYW5zZm9ybSBjdG0gPSBjLT5nZXRDVE0oKTsKLSAgICBpZiAoc3RhdGUoKS5tX2Fw
cGxpZWRGaWxsUGF0dGVybiAmJiBjdG0gPT0gc3RhdGUoKS5tX2ZpbGxTdHlsZVBhdHRlcm5UcmFu
c2Zvcm0pCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgotCi0gICAgQ2FudmFzUGF0dGVybiogcGF0
dGVybiA9IHN0YXRlKCkubV9maWxsU3R5bGUtPnBhdHRlcm4oKTsKLSAgICBpZiAoIXBhdHRlcm4p
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGMtPmFwcGx5RmlsbFBhdHRlcm4ocGF0dGVybi0+cGF0
dGVybigpKTsKLQotI2lmIFBMQVRGT1JNKENHKQotICAgIHN0YXRlKCkubV9maWxsU3R5bGVQYXR0
ZXJuVHJhbnNmb3JtID0gY3RtOwotI2VuZGlmCi0gICAgc3RhdGUoKS5tX2FwcGxpZWRGaWxsUGF0
dGVybiA9IHRydWU7Ci19Ci0KIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlRGF0YT4gY3JlYXRlRW1w
dHlJbWFnZURhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBQYXNzUmVmUHRyPEltYWdl
RGF0YT4gZGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgg
Yi9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKaW5kZXggMTY4YjczMC4u
OWE3ZmRhZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5oCisrKyBiL1dlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaApAQCAtMTkx
LDEzICsxOTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBTdHJpbmcgbV9z
aGFkb3dDb2xvcjsKICAgICAgICAgICAgIGZsb2F0IG1fZ2xvYmFsQWxwaGE7CiAgICAgICAgICAg
ICBDb21wb3NpdGVPcGVyYXRvciBtX2dsb2JhbENvbXBvc2l0ZTsKLSAgICAgICAgICAgIGJvb2wg
bV9hcHBsaWVkU3Ryb2tlUGF0dGVybjsKLSAgICAgICAgICAgIGJvb2wgbV9hcHBsaWVkRmlsbFBh
dHRlcm47CiAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Ci0jaWYgUExB
VEZPUk0oQ0cpCi0gICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9zdHJva2VTdHlsZVBhdHRl
cm5UcmFuc2Zvcm07Ci0gICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9maWxsU3R5bGVQYXR0
ZXJuVHJhbnNmb3JtOwotI2VuZGlmCiAgICAgICAgIH07CiAgICAgICAgIFBhdGggbV9wYXRoOwog
CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvQ2FudmFzU3R5bGUuY3BwIGIvV2ViQ29yZS9odG1s
L0NhbnZhc1N0eWxlLmNwcAppbmRleCA1NjEzMGRmLi4xMDhjNDkzIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2h0bWwvQ2FudmFzU3R5bGUuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9DYW52YXNTdHlsZS5j
cHAKQEAgLTE0MSw3ICsxNDEsMTAgQEAgdm9pZCBDYW52YXNTdHlsZTo6YXBwbHlTdHJva2VDb2xv
cihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIEdyYWRpZW50OgorICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbEdy
YWRpZW50KGNhbnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkpOworICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgSW1hZ2VQYXR0ZXJuOgorICAgICAgICAgICAgY29udGV4dC0+c2V0Rmls
bFBhdHRlcm4oY2FudmFzUGF0dGVybigpLT5wYXR0ZXJuKCkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgfQogfQpAQCAtMTg3LDcgKzE5MCwxMCBAQCB2b2lkIENhbnZhc1N0eWxlOjphcHBseUZp
bGxDb2xvcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIEdyYWRpZW50OgorICAgICAgICAgICAgY29udGV4dC0+c2V0
U3Ryb2tlR3JhZGllbnQoY2FudmFzR3JhZGllbnQoKS0+Z3JhZGllbnQoKSk7CisgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBJbWFnZVBhdHRlcm46CisgICAgICAgICAgICBjb250ZXh0
LT5zZXRTdHJva2VQYXR0ZXJuKGNhbnZhc1BhdHRlcm4oKS0+cGF0dGVybigpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNTdHls
ZS5oIGIvV2ViQ29yZS9odG1sL0NhbnZhc1N0eWxlLmgKaW5kZXggMDc5YWI2Zi4uZmUwMWJkMSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0NhbnZhc1N0eWxlLmgKKysrIGIvV2ViQ29yZS9odG1s
L0NhbnZhc1N0eWxlLmgKQEAgLTQ3LDkgKzQ3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAg
ICAgICAgIFN0cmluZyBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KICAgICAgICAg
Q2FudmFzR3JhZGllbnQqIGNhbnZhc0dyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9ncmFkaWVu
dC5nZXQoKTsgfQotICAgICAgICBDYW52YXNQYXR0ZXJuKiBwYXR0ZXJuKCkgY29uc3QgeyByZXR1
cm4gbV9wYXR0ZXJuLmdldCgpOyB9CisgICAgICAgIENhbnZhc1BhdHRlcm4qIGNhbnZhc1BhdHRl
cm4oKSBjb25zdCB7IHJldHVybiBtX3BhdHRlcm4uZ2V0KCk7IH0KIAotICAgICAgICAvLyBUaGVz
ZSBkbyBub3RoaW5nIGZvciBncmFkaWVudHMgb3IgcGF0dGVybnMuCiAgICAgICAgIHZvaWQgYXBw
bHlGaWxsQ29sb3IoR3JhcGhpY3NDb250ZXh0Kik7CiAgICAgICAgIHZvaWQgYXBwbHlTdHJva2VD
b2xvcihHcmFwaGljc0NvbnRleHQqKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5l
cmF0ZWRJbWFnZS5oCmluZGV4IGIzMjFiOGQuLjg2MDdmYTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgKQEAgLTMwLDE2ICszMCwxNiBAQAogCiAjaW5jbHVk
ZSAiR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgR2VuZXJhdGVkSW1hZ2UgOiBwdWJsaWMgSW1hZ2UgewogcHVibGljOgotICAgIEdlbmVy
YXRlZEltYWdlKEdlbmVyYXRvciogZ2VuZXJhdG9yLCBjb25zdCBJbnRTaXplJiBzaXplKQotICAg
IDogbV9zaXplKHNpemUpCisgICAgR2VuZXJhdGVkSW1hZ2UoUGFzc1JlZlB0cjxHZW5lcmF0b3I+
IGdlbmVyYXRvciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBtX2dlbmVyYXRvcihn
ZW5lcmF0b3IpCisgICAgICAgICwgbV9zaXplKHNpemUpCiAgICAgewotICAgICAgICBtX2dlbmVy
YXRvci5zZXQoZ2VuZXJhdG9yKTsKICAgICB9CiAgICAgdmlydHVhbCB+R2VuZXJhdGVkSW1hZ2Uo
KSB7fQogCkBAIC02MSw3ICs2MSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKICAgICAKIHByb3RlY3RlZDoKLSAgICBPd25QdHI8R2Vu
ZXJhdG9yPiBtX2dlbmVyYXRvcjsKKyAgICBSZWZQdHI8R2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsK
ICAgICBJbnRTaXplIG1fc2l6ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2VuZXJhdG9yLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRv
ci5oCmluZGV4IGE1NDVhZDUuLmEwYWY2ODkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2VuZXJhdG9yLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5l
cmF0b3IuaApAQCAtMjYsMTQgKzI2LDE0IEBACiAjaWZuZGVmIEdlbmVyYXRvcl9oCiAjZGVmaW5l
IEdlbmVyYXRvcl9oCiAKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0UmVj
dDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIAotY2xhc3MgR2VuZXJhdG9yIDogTm9uY29weWFi
bGUgeworY2xhc3MgR2VuZXJhdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8R2VuZXJhdG9yPiB7CiBw
dWJsaWM6CiAgICAgdmlydHVhbCB+R2VuZXJhdG9yKCkge307CiAgICAgCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYWRpZW50LmgKaW5kZXggYmVkYzE1Yy4uMjgwNzg3NyAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhZGllbnQuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkdlbmVyYXRv
ci5oIgogCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRy
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgUExBVEZPUk0oQ0cpCkBAIC01OCw4
ICs1OSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBHcmFkaWVudCA6IHB1
YmxpYyBHZW5lcmF0b3IgewogICAgIHB1YmxpYzoKLSAgICAgICAgR3JhZGllbnQoY29uc3QgRmxv
YXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKTsKLSAgICAgICAgR3JhZGllbnQoY29u
c3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQg
cjEpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZs
b2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHcmFkaWVudChwMCwgcDEpKTsKKyAgICAgICAgfQorICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQm
IHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIxKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdyYWRpZW50KHAwLCByMCwgcDEsIHIx
KSk7CisgICAgICAgIH0KICAgICAgICAgdmlydHVhbCB+R3JhZGllbnQoKTsKIAogICAgICAgICB2
b2lkIGFkZENvbG9yU3RvcChmbG9hdCwgY29uc3QgU3RyaW5nJik7CkBAIC04NSw2ICs5Miw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdmlydHVhbCB2b2lkIGZpbGwoR3JhcGhpY3ND
b250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jik7CiAKICAgICBwcml2YXRlOgorICAgICAgICBHcmFk
aWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEpOworICAgICAg
ICBHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0UG9p
bnQmIHAxLCBmbG9hdCByMSk7CisKICAgICAgICAgdm9pZCBwbGF0Zm9ybUluaXQoKSB7IG1fZ3Jh
ZGllbnQgPSAwOyB9CiAgICAgICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCA0ZWIxOWVmLi43
MGMyZWE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
Y3BwCkBAIC0xMzQsNiArMTM0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVN0
eWxlKGNvbnN0IFN0cm9rZVN0eWxlJiBzdHlsZSkKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKKyAgICBtX2NvbW1vbi0+c3RhdGUu
c3Ryb2tlQ29sb3JTcGFjZSA9IFNvbGlkQ29sb3JTcGFjZTsKICAgICBtX2NvbW1vbi0+c3RhdGUu
c3Ryb2tlQ29sb3IgPSBjb2xvcjsKICAgICBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbG9yKTsK
IH0KQEAgLTE4MCw2ICsxODEsNyBAQCBDb2xvciBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUNvbG9y
KCkgY29uc3QKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxDb2xvcihjb25zdCBDb2xv
ciYgY29sb3IpCiB7CisgICAgbV9jb21tb24tPnN0YXRlLmZpbGxDb2xvclNwYWNlID0gU29saWRD
b2xvclNwYWNlOwogICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3IgPSBjb2xvcjsKICAgICBz
ZXRQbGF0Zm9ybUZpbGxDb2xvcihjb2xvcik7CiB9CkBAIC0xODksNiArMTkxLDM0IEBAIENvbG9y
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbENvbG9yKCkgY29uc3QKICAgICByZXR1cm4gbV9jb21tb24t
PnN0YXRlLmZpbGxDb2xvcjsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVBh
dHRlcm4oUGFzc1JlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJuKQoreworICAgIG1fY29tbW9uLT5zdGF0
ZS5zdHJva2VDb2xvclNwYWNlID0gUGF0dGVybkNvbG9yU3BhY2U7CisgICAgbV9jb21tb24tPnN0
YXRlLnN0cm9rZVBhdHRlcm4gPSBwYXR0ZXJuOworICAgIHNldFBsYXRmb3JtU3Ryb2tlUGF0dGVy
bihtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybihQYXNzUmVmUHRyPFBhdHRlcm4+IHBhdHRlcm4pCit7
CisgICAgbV9jb21tb24tPnN0YXRlLmZpbGxDb2xvclNwYWNlID0gUGF0dGVybkNvbG9yU3BhY2U7
CisgICAgbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuID0gcGF0dGVybjsKKyAgICBzZXRQbGF0
Zm9ybUZpbGxQYXR0ZXJuKG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi5nZXQoKSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VHcmFkaWVudChQYXNzUmVmUHRyPEdyYWRp
ZW50PiBncmFkaWVudCkKK3sKKyAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSA9
IEdyYWRpZW50Q29sb3JTcGFjZTsKKyAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQg
PSBncmFkaWVudDsKKyAgICBzZXRQbGF0Zm9ybVN0cm9rZUdyYWRpZW50KG1fY29tbW9uLT5zdGF0
ZS5zdHJva2VHcmFkaWVudC5nZXQoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRG
aWxsR3JhZGllbnQoUGFzc1JlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQpCit7CisgICAgbV9jb21t
b24tPnN0YXRlLmZpbGxDb2xvclNwYWNlID0gR3JhZGllbnRDb2xvclNwYWNlOworICAgIG1fY29t
bW9uLT5zdGF0ZS5maWxsR3JhZGllbnQgPSBncmFkaWVudDsKKyAgICBzZXRQbGF0Zm9ybUZpbGxH
cmFkaWVudChtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LmdldCgpKTsKK30KKwogYm9vbCBH
cmFwaGljc0NvbnRleHQ6OnVwZGF0aW5nQ29udHJvbFRpbnRzKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV9jb21tb24tPm1fdXBkYXRpbmdDb250cm9sVGludHM7CkBAIC00MjYsMTQgKzQ1Niw2IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShpbnQgbW9k
ZSkKIH0KICNlbmRpZgogCi0jaWYgIVBMQVRGT1JNKENHKSAmJiAhUExBVEZPUk0oQ0FJUk8pCi0v
LyBPdGhlciBwbGF0Zm9ybXMgbmVlZCB0byBpbXBsZW1lbnQgdGhpcy4KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZUJ1
ZmZlciopCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLSNlbmRpZgotCiAjaWYgIVBMQVRG
T1JNKFFUKSAmJiAhUExBVEZPUk0oQ0FJUk8pCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1TdHJva2VTdHlsZShjb25zdCBTdHJva2VTdHlsZSYpCiB7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCBlYmUxNjcxLi44NWI4M2Q0IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTk0LDYgKzk0
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKICAg
ICBjbGFzcyBGb250OwogICAgIGNsYXNzIEdlbmVyYXRvcjsKKyAgICBjbGFzcyBHcmFkaWVudDsK
ICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHRQcml2YXRlOwogICAgIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZTsKICAgICBjbGFzcyBJbWFnZUJ1ZmZlcjsKQEAgLTEzOSwzMCAr
MTQwLDM5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRTdHJva2VTdHls
ZShjb25zdCBTdHJva2VTdHlsZSYgc3R5bGUpOwogICAgICAgICBDb2xvciBzdHJva2VDb2xvcigp
IGNvbnN0OwogICAgICAgICB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJik7CisgICAg
ICAgIHZvaWQgc2V0U3Ryb2tlUGF0dGVybihQYXNzUmVmUHRyPFBhdHRlcm4+KTsKKyAgICAgICAg
dm9pZCBzZXRTdHJva2VHcmFkaWVudChQYXNzUmVmUHRyPEdyYWRpZW50Pik7CiAKKyAgICAgICAg
dm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSk7CiAgICAgICAgIENvbG9yIGZpbGxDb2xvcigpIGNv
bnN0OwogICAgICAgICB2b2lkIHNldEZpbGxDb2xvcihjb25zdCBDb2xvciYpOwotCi0gICAgICAg
IHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mKTsKLSAgICAgICAgdm9pZCBh
cHBseUZpbGxQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mKTsKKyAgICAgICAgdm9pZCBzZXRGaWxsUGF0
dGVybihQYXNzUmVmUHRyPFBhdHRlcm4+KTsKKyAgICAgICAgdm9pZCBzZXRGaWxsR3JhZGllbnQo
UGFzc1JlZlB0cjxHcmFkaWVudD4pOwogCiAgICAgICAgIHZvaWQgc2F2ZSgpOwogICAgICAgICB2
b2lkIHJlc3RvcmUoKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gVGhlc2UgZHJhdyBtZXRob2Rz
IHdpbGwgZG8gYm90aCBzdHJva2luZyBhbmQgZmlsbGluZy4KICAgICAgICAgdm9pZCBkcmF3UmVj
dChjb25zdCBJbnRSZWN0Jik7CiAgICAgICAgIHZvaWQgZHJhd0xpbmUoY29uc3QgSW50UG9pbnQm
LCBjb25zdCBJbnRQb2ludCYpOwogICAgICAgICB2b2lkIGRyYXdFbGxpcHNlKGNvbnN0IEludFJl
Y3QmKTsKICAgICAgICAgdm9pZCBkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLCBj
b25zdCBGbG9hdFBvaW50KiwgYm9vbCBzaG91bGRBbnRpYWxpYXMgPSBmYWxzZSk7CiAKKyAgICAg
ICAgdm9pZCBkcmF3UGF0aCgpOworICAgICAgICB2b2lkIGZpbGxQYXRoKCk7CisgICAgICAgIHZv
aWQgc3Ryb2tlUGF0aCgpOworCiAgICAgICAgIC8vIEFyYyBkcmF3aW5nICh1c2VkIGJ5IGJvcmRl
ci1yYWRpdXMgaW4gQ1NTKSBqdXN0IHN1cHBvcnRzIHN0cm9raW5nIGF0IHRoZSBtb21lbnQuCiAg
ICAgICAgIHZvaWQgc3Ryb2tlQXJjKGNvbnN0IEludFJlY3QmLCBpbnQgc3RhcnRBbmdsZSwgaW50
IGFuZ2xlU3Bhbik7Ci0gICAgICAgIAotICAgICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEludFJl
Y3QmLCBjb25zdCBDb2xvciYpOworCisgICAgICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRS
ZWN0Jik7CiAgICAgICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29s
b3ImKTsKICAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmLCBHZW5lcmF0b3Im
KTsKICAgICAgICAgdm9pZCBmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYsIGNvbnN0IElu
dFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0LCBjb25zdCBJbnRTaXplJiBi
b3R0b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCwgY29uc3QgQ29sb3ImKTsKKwog
ICAgICAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKKworICAgICAgICB2b2lk
IHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgICAgIHZvaWQgc3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgpOwogCiAgICAgICAgIHZvaWQgZHJhd0lt
YWdlKEltYWdlKiwgY29uc3QgSW50UG9pbnQmLCBDb21wb3NpdGVPcGVyYXRvciA9IENvbXBvc2l0
ZVNvdXJjZU92ZXIpOwpAQCAtMTc3LDEzICsxODcsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U6OlRpbGVSdWxlIGhSdWxlID0gSW1hZ2U6
OlN0cmV0Y2hUaWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1bGUgPSBJbWFnZTo6U3RyZXRjaFRpbGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3Np
dGVTb3VyY2VPdmVyKTsKIAotI2lmIFBMQVRGT1JNKENHKQogICAgICAgICB2b2lkIHNldEltYWdl
SW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpOwogICAgICAgICBJbnRl
cnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3Q7Ci0jZWxz
ZQotICAgICAgICB2b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlv
blF1YWxpdHkpIHt9Ci0gICAgICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBJbnRlcnBvbGF0aW9uRGVmYXVsdDsgfQotI2Vu
ZGlmCiAKICAgICAgICAgdm9pZCBjbGlwKGNvbnN0IEZsb2F0UmVjdCYpOwogICAgICAgICB2b2lk
IGFkZFJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYgdG9wTGVm
dCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNv
bnN0IEludFNpemUmIGJvdHRvbVJpZ2h0KTsKQEAgLTI4OCw3ICsyOTMsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKICNpZiBQTEFURk9STShRVCkKICAgICAgICAgYm9vbCBpblRyYW5zcGFyZW5j
eUxheWVyKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUpOwogICAg
ICAgICBQbGF0Zm9ybVBhdGgqIGN1cnJlbnRQYXRoKCk7CiAjZW5kaWYKIApAQCAtMzAxLDEyICsz
MDUsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQg
c2F2ZVBsYXRmb3JtU3RhdGUoKTsKICAgICAgICAgdm9pZCByZXN0b3JlUGxhdGZvcm1TdGF0ZSgp
OworCiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUoaW50KTsKKyAgICAg
ICAgdm9pZCBzZXRQbGF0Zm9ybUZvbnQoY29uc3QgRm9udCYgZm9udCk7CisKICAgICAgICAgdm9p
ZCBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJik7CisgICAgICAgIHZvaWQgc2V0
UGxhdGZvcm1TdHJva2VQYXR0ZXJuKFBhdHRlcm4qKTsKKyAgICAgICAgdm9pZCBzZXRQbGF0Zm9y
bVN0cm9rZUdyYWRpZW50KEdyYWRpZW50Kik7CiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJv
a2VTdHlsZShjb25zdCBTdHJva2VTdHlsZSYpOwogICAgICAgICB2b2lkIHNldFBsYXRmb3JtU3Ry
b2tlVGhpY2tuZXNzKGZsb2F0KTsKKwogICAgICAgICB2b2lkIHNldFBsYXRmb3JtRmlsbENvbG9y
KGNvbnN0IENvbG9yJik7Ci0gICAgICAgIHZvaWQgc2V0UGxhdGZvcm1Gb250KGNvbnN0IEZvbnQm
IGZvbnQpOworICAgICAgICB2b2lkIHNldFBsYXRmb3JtRmlsbFBhdHRlcm4oUGF0dGVybiopOwor
ICAgICAgICB2b2lkIHNldFBsYXRmb3JtRmlsbEdyYWRpZW50KEdyYWRpZW50Kik7CisKICAgICAg
ICAgdm9pZCBzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBJbnRTaXplJiwgaW50IGJsdXIsIGNvbnN0
IENvbG9yJik7CiAgICAgICAgIHZvaWQgY2xlYXJQbGF0Zm9ybVNoYWRvdygpOwogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCmluZGV4
IDAyYzc0MTUuLjVjM2Y4ZWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oCkBAIC0yNywyOCArMjcsNTUgQEAKICNkZWZpbmUgR3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZV9oCiAKICNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiR3Jh
ZGllbnQuaCIKKyNpbmNsdWRlICJQYXR0ZXJuLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAor
ICAgIC8vIGVzZWlkZWw6IFRoaXMgaXMgYSBwbGFjZS1ob2xkZXIgdW50aWwgc29tZSBkYXkgd2hl
biB3ZSBkZWNpZGUgdG8gYWRkCisgICAgLy8gcmVhbGwgY29sb3Itc3BhY2Ugc3VwcG9ydCB0byBX
ZWJDb3JlLiAgQXQgdGhhdCB0aW1lLCBDb2xvclNwYWNlcworICAgIC8vIHdpbGwgYmVjb21lIHJl
YWwgb2JqZWN0cyBoZWxkIG9mZiBvZiBDb2xvcnMsIGFuZCB0aGVyZSB3aWxsIGJlCisgICAgLy8g
c3BlY2lhbCBzaW5nbGV0b24gR3JhZGllbnQgYW5kIFBhdHRlcm4gY29sb3JzcGFjZXMgdG8gbWFy
ayB3aGVuCisgICAgLy8gYSBmaWxsIG9yIHN0cm9rZSBpcyB1c2luZyBhIGdyYWRpZW50IG9yIHBh
dHRlcm4gaW5zdGVhZCBvZiBhIHNvbGlkIGNvbG9yCisgICAgZW51bSBDb2xvclNwYWNlIHsKKyAg
ICAgICAgU29saWRDb2xvclNwYWNlLAorICAgICAgICBQYXR0ZXJuQ29sb3JTcGFjZSwKKyAgICAg
ICAgR3JhZGllbnRDb2xvclNwYWNlCisgICAgfTsKKwogICAgIHN0cnVjdCBHcmFwaGljc0NvbnRl
eHRTdGF0ZSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlKCkKLSAgICAgICAgICAgIDog
c3Ryb2tlU3R5bGUoU29saWRTdHJva2UpCisgICAgICAgICAgICA6IHRleHREcmF3aW5nTW9kZShj
VGV4dEZpbGwpCisgICAgICAgICAgICAsIHN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKQogICAgICAg
ICAgICAgLCBzdHJva2VUaGlja25lc3MoMCkKKyAgICAgICAgICAgICwgc3Ryb2tlQ29sb3JTcGFj
ZShTb2xpZENvbG9yU3BhY2UpCiAgICAgICAgICAgICAsIHN0cm9rZUNvbG9yKENvbG9yOjpibGFj
aykKKyAgICAgICAgICAgICwgZmlsbFJ1bGUoUlVMRV9OT05aRVJPKQorICAgICAgICAgICAgLCBm
aWxsQ29sb3JTcGFjZShTb2xpZENvbG9yU3BhY2UpCiAgICAgICAgICAgICAsIGZpbGxDb2xvcihD
b2xvcjo6YmxhY2spCi0gICAgICAgICAgICAsIHRleHREcmF3aW5nTW9kZShjVGV4dEZpbGwpCiAg
ICAgICAgICAgICAsIHBhaW50aW5nRGlzYWJsZWQoZmFsc2UpCiAgICAgICAgICAgICAsIHNoYWRv
d0JsdXIoMCkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgRm9udCBmb250OworICAg
ICAgICBpbnQgdGV4dERyYXdpbmdNb2RlOworICAgICAgICAKICAgICAgICAgU3Ryb2tlU3R5bGUg
c3Ryb2tlU3R5bGU7CiAgICAgICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzczsKKyAgICAgICAgQ29s
b3JTcGFjZSBzdHJva2VDb2xvclNwYWNlOwogICAgICAgICBDb2xvciBzdHJva2VDb2xvcjsKKyAg
ICAgICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFkaWVudDsKKyAgICAgICAgUmVmUHRyPFBh
dHRlcm4+IHN0cm9rZVBhdHRlcm47CisgICAgICAgIAorICAgICAgICBXaW5kUnVsZSBmaWxsUnVs
ZTsKKyAgICAgICAgQ29sb3JTcGFjZSBmaWxsQ29sb3JTcGFjZTsKICAgICAgICAgQ29sb3IgZmls
bENvbG9yOwotICAgICAgICBpbnQgdGV4dERyYXdpbmdNb2RlOworICAgICAgICBSZWZQdHI8R3Jh
ZGllbnQ+IGZpbGxHcmFkaWVudDsKKyAgICAgICAgUmVmUHRyPFBhdHRlcm4+IGZpbGxQYXR0ZXJu
OworCiAgICAgICAgIGJvb2wgcGFpbnRpbmdEaXNhYmxlZDsKKyAgICAgICAgCiAgICAgICAgIElu
dFNpemUgc2hhZG93U2l6ZTsKICAgICAgICAgdW5zaWduZWQgc2hhZG93Qmx1cjsKICAgICAgICAg
Q29sb3Igc2hhZG93Q29sb3I7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1BhdGguaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCmluZGV4IDczNDMwNmUu
LjRlZmQzNDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCkBAIC05OCw4ICs5OCw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIG1vdmVUbyhjb25zdCBGbG9hdFBvaW50
Jik7CiAgICAgICAgIHZvaWQgYWRkTGluZVRvKGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICAgICAg
dm9pZCBhZGRRdWFkQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50KTsKLSAgICAgICAgdm9pZCBhZGRCZXppZXJDdXJ2ZVRvKGNvbnN0
IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2lu
dDIsIGNvbnN0IEZsb2F0UG9pbnQmKTsKKyAgICAgICAgdm9pZCBhZGRRdWFkQ3VydmVUbyhjb25z
dCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQsIGNvbnN0IEZsb2F0UG9pbnQmIGVuZFBvaW50KTsK
KyAgICAgICAgdm9pZCBhZGRCZXppZXJDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQ
b2ludDEsIGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludDIsIGNvbnN0IEZsb2F0UG9pbnQm
IGVuZFBvaW50KTsKICAgICAgICAgdm9pZCBhZGRBcmNUbyhjb25zdCBGbG9hdFBvaW50JiwgY29u
c3QgRmxvYXRQb2ludCYsIGZsb2F0IHJhZGl1cyk7CiAgICAgICAgIHZvaWQgY2xvc2VTdWJwYXRo
KCk7CiAKQEAgLTEwOSw5ICsxMDksNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAg
dm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJik7CiAKLSAgICAgICAgdm9pZCBzZXRXaW5k
aW5nUnVsZShXaW5kUnVsZSBydWxlKSB7IG1fcnVsZSA9IHJ1bGU7IH0KLSAgICAgICAgV2luZFJ1
bGUgd2luZGluZ1J1bGUoKSBjb25zdCB7IHJldHVybiBtX3J1bGU7IH0KLQogICAgICAgICBTdHJp
bmcgZGVidWdTdHJpbmcoKSBjb25zdDsKIAogICAgICAgICBQbGF0Zm9ybVBhdGgqIHBsYXRmb3Jt
UGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQpAQCAtMTI4LDcgKzEyNSw2IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFBsYXRmb3JtUGF0aCogbV9w
YXRoOwotICAgICAgICBXaW5kUnVsZSBtX3J1bGU7CiAgICAgfTsKIAogfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdHRlcm4uaAppbmRleCBiMTVlZTg0Li4zYzIwYjZlIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1BhdHRlcm4uaApAQCAtMjcsNyArMjcsOCBAQAogI2lmbmRlZiBQYXR0ZXJuX2gKICNk
ZWZpbmUgUGF0dGVybl9oCiAKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgogCiAjaWYgUExBVEZPUk0oQ0cpCkBAIC01NiwxNyArNTcsMjEgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKICAgICBjbGFz
cyBJbWFnZTsKIAotICAgIGNsYXNzIFBhdHRlcm4gOiBOb25jb3B5YWJsZSB7CisgICAgY2xhc3Mg
UGF0dGVybiA6IHB1YmxpYyBSZWZDb3VudGVkPFBhdHRlcm4+IHsKICAgICBwdWJsaWM6Ci0gICAg
ICAgIFBhdHRlcm4oSW1hZ2UqLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSk7Ci0KKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8UGF0dGVybj4gY3JlYXRlKEltYWdlKiB0aWxlSW1hZ2UsIGJv
b2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFBhdHRlcm4odGlsZUltYWdlLCByZXBlYXRYLCByZXBlYXRZKSk7CisgICAg
ICAgIH0KICAgICAgICAgdmlydHVhbCB+UGF0dGVybigpOwotICAgICAgICAKKwogICAgICAgICBJ
bWFnZSogdGlsZUltYWdlKCkgY29uc3QgeyByZXR1cm4gbV90aWxlSW1hZ2UuZ2V0KCk7IH0KIAog
ICAgICAgICBQbGF0Zm9ybVBhdHRlcm5QdHIgY3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSkgY29uc3Q7CiAKICAgICBwcml2YXRlOgor
ICAgICAgICBQYXR0ZXJuKEltYWdlKiwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFkpOworCiAg
ICAgICAgIFJlZlB0cjxJbWFnZT4gbV90aWxlSW1hZ2U7CiAgICAgICAgIGJvb2wgbV9yZXBlYXRY
OwogICAgICAgICBib29sIG1fcmVwZWF0WTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5kZXggMTdkNjhkNS4u
ZmE1YjM4YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHRDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTUxNiwxNCArNTE2LDE0IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mIHBhdHRlcm4pCiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYg
Y29sKQogewotICAgIC8vIEZJWE1FOiB0aGlzIGlzIHByb2JhYmx5IGEgbm8tb3AgYnV0IEknbSBu
b3Qgc3VyZQotICAgIC8vIG5vdEltcGxlbWVudGVkKCk7IC8vIGNvbW1lbnRlZC1vdXQgYmVjYXVz
ZSBpdCdzIGNoYXR0eSBhbmQgY2x1dHRlcnMgb3V0cHV0CisgICAgLy8gQ2Fpcm8gY29udGV4dHMg
Y2FuJ3QgaG9sZCBzZXBhcmF0ZSBmaWxsIGFuZCBzdHJva2UgY29sb3JzCisgICAgLy8gc28gd2Ug
c2V0IHRoZW0ganVzdCBiZWZvcmUgd2UgYWN0dWFsbHkgZmlsbCBvciBzdHJva2UKIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNv
bCkKIHsKLSAgICAvLyBGSVhNRTogdGhpcyBpcyBwcm9iYWJseSBhIG5vLW9wIGJ1dCBJJ20gbm90
IHN1cmUKLSAgICAvL25vdEltcGxlbWVudGVkKCk7IC8vIGNvbW1lbnRlZC1vdXQgYmVjYXVzZSBp
dCdzIGNoYXR0eSBhbmQgY2x1dHRlcnMgb3V0cHV0CisgICAgLy8gQ2Fpcm8gY29udGV4dHMgY2Fu
J3QgaG9sZCBzZXBhcmF0ZSBmaWxsIGFuZCBzdHJva2UgY29sb3JzCisgICAgLy8gc28gd2Ugc2V0
IHRoZW0ganVzdCBiZWZvcmUgd2UgYWN0dWFsbHkgZmlsbCBvciBzdHJva2UKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHN0cm9rZVRo
aWNrbmVzcykKQEAgLTkxMSw2ICs5MTEsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVz
ZUFudGlhbGlhc2luZyhib29sIGVuYWJsZSkKICAgICBjYWlyb19zZXRfYW50aWFsaWFzKG1fZGF0
YS0+Y3IsIGVuYWJsZSA/IENBSVJPX0FOVElBTElBU19ERUZBVUxUIDogQ0FJUk9fQU5USUFMSUFT
X05PTkUpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9u
UXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSkKK3sKK30KKworSW50ZXJwb2xhdGlvblF1YWxp
dHkgR3JhcGhpY3NDb250ZXh0OjppbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gSW50ZXJwb2xhdGlvbkRlZmF1bHQ7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIFBMQVRGT1JNKENBSVJPKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRleCBjMjRjZWY2Li40NWQy
YWM5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dENHLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29u
dGV4dENHLmNwcApAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZUNH
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJLVVJMLmgiCkBAIC0zOTIs
MTggKzM5Myw4MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6
ZV90IG5wb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cwogICAgIENHQ29udGV4dFJlc3Rv
cmVHU3RhdGUoY29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1BhdGgoKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBpZiAoY29sb3IuYWxwaGEoKSkgewotICAgICAgICBDR0NvbnRleHRSZWYg
Y29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAgICAgICBDb2xvciBvbGRGaWxsQ29sb3Ig
PSBmaWxsQ29sb3IoKTsKLSAgICAgICAgaWYgKG9sZEZpbGxDb2xvciAhPSBjb2xvcikKLSAgICAg
ICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGNvbG9yKTsKLSAgICAgICAgQ0dDb250ZXh0
RmlsbFJlY3QoY29udGV4dCwgcmVjdCk7Ci0gICAgICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gY29s
b3IpCi0gICAgICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwor
CisgICAgLy8gV2Ugc2hvdWxkIGludmVzdGlnYXRlIHVzaW5nIENHQ29udGV4dERyYXdQYXRoIGZv
ciBwb3NzaWJsZSBvcHRpbWl6YXRpb24KKyAgICBmaWxsUGF0aCgpOworICAgIHN0cm9rZVBhdGgo
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKK3sKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOworICAgIHN3aXRjaCAobV9jb21tb24tPnN0YXRlLmZp
bGxDb2xvclNwYWNlKSB7CisgICAgY2FzZSBTb2xpZENvbG9yU3BhY2U6CisgICAgICAgIGlmICgh
ZmlsbENvbG9yKCkuYWxwaGEoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gZmFs
bCB0aHJvdWdoCisgICAgY2FzZSBQYXR0ZXJuQ29sb3JTcGFjZToKKyAgICAgICAgaWYgKG1fY29t
bW9uLT5zdGF0ZS5maWxsUnVsZSA9PSBSVUxFX0VWRU5PREQpCisgICAgICAgICAgICBDR0NvbnRl
eHRFT0ZpbGxQYXRoKGNvbnRleHQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBDR0NvbnRl
eHRGaWxsUGF0aChjb250ZXh0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFkaWVudENv
bG9yU3BhY2U6CisgICAgICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUgPT0gUlVMRV9F
VkVOT0REKQorICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOworICAgICAgICBDR0NvbnRl
eHREcmF3U2hhZGluZyhjb250ZXh0LCBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5wbGF0
Zm9ybUdyYWRpZW50KCkpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29u
dGV4dCgpOworICAgIHN3aXRjaCAobV9jb21tb24tPnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UpIHsK
KyAgICBjYXNlIFNvbGlkQ29sb3JTcGFjZToKKyAgICAgICAgaWYgKCFmaWxsQ29sb3IoKS5hbHBo
YSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBmYWxsIHRocm91Z2gKKyAgICBj
YXNlIFBhdHRlcm5Db2xvclNwYWNlOgorICAgICAgICBDR0NvbnRleHRTdHJva2VQYXRoKGNvbnRl
eHQpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZToKKyAgICAg
ICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoY29udGV4dCk7CisgICAgICAg
IENHQ29udGV4dENsaXAoY29udGV4dCk7CisgICAgICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNv
bnRleHQsIG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgp
KQorICAgICAgICByZXR1cm47CisgICAgc3dpdGNoIChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlQ29s
b3JTcGFjZSkgeworICAgIGNhc2UgU29saWRDb2xvclNwYWNlOgorICAgICAgICBpZiAoZmlsbENv
bG9yKCkuYWxwaGEoKSkKKyAgICAgICAgICAgIENHQ29udGV4dEZpbGxSZWN0KHBsYXRmb3JtQ29u
dGV4dCgpLCByZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXR0ZXJuQ29sb3JTcGFj
ZToKKyAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QocGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZToKKyAgICAgICAgY2xp
cChyZWN0KTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcocGxhdGZvcm1Db250ZXh0KCks
IG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAg
ICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtNDM5LDcgKzUwMyw2IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUm91bmRlZFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50U2l6
ZSYgdG9wTGVmCiAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIG9sZEZpbGxDb2xvcik7
CiB9CiAKLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0
KQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC05MTAsOSArOTczLDExIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9kZShpbnQgbW9kZSkK
ICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oY29u
c3QgUGF0dGVybiYgcGF0dGVybikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0
cm9rZVBhdHRlcm4oUGF0dGVybiogcGF0dGVybikKIHsKLSAgICBDR1BhdHRlcm5SZWYgcGxhdGZv
cm1QYXR0ZXJuID0gcGF0dGVybi5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpOworICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBDR1BhdHRlcm5S
ZWYgcGxhdGZvcm1QYXR0ZXJuID0gcGF0dGVybi0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENU
TSgpKTsKICAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikKICAgICAgICAgcmV0dXJuOwogCkBAIC05
MjUsOSArOTkwLDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4o
Y29uc3QgUGF0dGVybiYgcGF0dGVybikKICAgICBDR1BhdHRlcm5SZWxlYXNlKHBsYXRmb3JtUGF0
dGVybik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKGNvbnN0
IFBhdHRlcm4mIHBhdHRlcm4pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxs
UGF0dGVybihQYXR0ZXJuKiBwYXR0ZXJuKQogewotICAgIENHUGF0dGVyblJlZiBwbGF0Zm9ybVBh
dHRlcm4gPSBwYXR0ZXJuLmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSk7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIENHUGF0dGVyblJlZiBw
bGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkp
OwogICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQogICAgICAgICByZXR1cm47CiAKQEAgLTk0MCw2
ICsxMDA3LDE4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKGNvbnN0
IFBhdHRlcm4mIHBhdHRlcm4pCiAgICAgQ0dQYXR0ZXJuUmVsZWFzZShwbGF0Zm9ybVBhdHRlcm4p
OwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VHcmFkaWVudChH
cmFkaWVudCopCit7CisgICAgLy8gQ29yZUdyYXBoaWNzIGRvZXMgbm90IHN1cHBvcnQgc2V0dGlu
ZyBhICJzdHJva2UgZ3JhZGllbnQiLCBvbmx5CisgICAgLy8gZmlsbGluZyBhIGNsaXAgcmVnaW9u
IHdpdGggYSBncmFkaWVudCwgd2hpY2ggd2UgZG8gYXQgZHJhdyB0aW1lCit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxHcmFkaWVudChHcmFkaWVudCopCit7CisgICAg
Ly8gQ29yZUdyYXBoaWNzIGRvZXMgbm90IHN1cHBvcnQgc2V0dGluZyBhICJmaWxsIGdyYWRpZW50
Iiwgb25seQorICAgIC8vIGZpbGxpbmcgYSBjbGlwIHJlZ2lvbiB3aXRoIGEgZ3JhZGllbnQsIHdo
aWNoIHdlIGRvIGF0IGRyYXcgdGltZQorfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxh
dGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7CiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3Jh
cGhpY3NDb250ZXh0UXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0NvbnRleHRRdC5jcHAKaW5kZXggMDZjZTNjOC4uNzJlZDAwNyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKQEAgLTg0OSw2ICs4
NDksMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXRFbGxpcHNlSW5SZWN0KGNvbnN0
IEludFJlY3QmIHJlY3QpCiAgICAgcC0+c2V0Q2xpcFBhdGgobmV3Q2xpcCwgUXQ6OkludGVyc2Vj
dENsaXApOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VCdWZmZXIqKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChj
b25zdCBJbnRSZWN0JiByZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCB0aGlja25lc3MpCiB7CkBAIC05MjYsMjAgKzkzMSw2IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiAg
ICAgbV9kYXRhLT5wKCktPnNldEJydXNoKFFCcnVzaChjb2xvcikpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mIHBhdHRlcm4pCi17
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJu
KGNvbnN0IFBhdHRlcm4mIHBhdHRlcm4pCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRVc2VBbnRpYWxpYXNpbmcoYm9vbCBlbmFibGUpCiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKQEAgLTEwMzMsNiArMTAyNCwxNSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6cmVsZWFzZVdpbmRvd3NDb250ZXh0KEhEQyBoZGMsIGNvbnN0IEludFJlY3QmIGRzdFJl
Y3QsIGJvbwogfQogI2VuZGlmCiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVy
cG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5KQoreworfQorCitJbnRlcnBvbGF0
aW9uUXVhbGl0eSBHcmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBj
b25zdAoreworICAgIHJldHVybiBJbnRlcnBvbGF0aW9uRGVmYXVsdDsKK30KKwogfQogCiAvLyB2
aW06IHRzPTQgc3c9NCBldApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
eC9HcmFwaGljc0NvbnRleHRXeC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dy
YXBoaWNzQ29udGV4dFd4LmNwcAppbmRleCBlOGJmMjZjLi43NTYxZjNlIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcApAQCAtMzU0
LDYgKzM1NCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBQYXRoJikKICAg
ICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1h
Z2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VCdWZmZXIqKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKIEFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRleHQ6Omdl
dENUTSgpIGNvbnN0CiB7IAogICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC00NzYsMTggKzQ4MSwx
MyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VXNlQW50aWFsaWFzaW5nKGJvb2wgZW5hYmxl
KQogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBs
eUZpbGxQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldElt
YWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpCiB7Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG5vdEltcGxlbWVudGVk
KCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oY29uc3Qg
UGF0dGVybiYpCitJbnRlcnBvbGF0aW9uUXVhbGl0eSBHcmFwaGljc0NvbnRleHQ6OmltYWdlSW50
ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBJbnRl
cnBvbGF0aW9uRGVmYXVsdDsKIH0KIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22946</attachid>
            <date>2008-08-22 14:24:16 -0700</date>
            <delta_ts>2008-08-23 02:05:43 -0700</delta_ts>
            <desc>update of GCCairo</desc>
            <filename>Canvas-cairo.patch</filename>
            <type>text/plain</type>
            <size>5994</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fp
cm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3Jh
cGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiAzNTg4OSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MSw2ICs1MSw3IEBACiAjZWxpZiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSA8Y2Fpcm8t
d2luMzIuaD4KICNlbmRpZgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIgogCiAjaWZuZGVm
IE1fUEkKQEAgLTM1NSwxMyArMzU2LDk0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29u
dmV4UG9seWdvbigKICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KIAotdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGNvbG9yLmFscGhhKCkpCi0gICAg
ICAgIGZpbGxSZWN0U291cmNlT3ZlcihtX2RhdGEtPmNyLCByZWN0LCBjb2xvcik7CisgICAgY2Fp
cm9fdCogY3IgPSBtX2RhdGEtPmNyOworCisgICAgc3dpdGNoIChtX2NvbW1vbi0+c3RhdGUuZmls
bENvbG9yU3BhY2UpIHsKKyAgICBjYXNlIFNvbGlkQ29sb3JTcGFjZToKKyAgICAgICAgaWYgKGZp
bGxDb2xvcigpLmFscGhhKCkpIHsKKyAgICAgICAgICAgIHNldENvbG9yKGNyLCBmaWxsQ29sb3Io
KSk7CisgICAgICAgICAgICBjYWlyb19maWxsKGNyKTsKKyAgICAgICAgfQorICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBhdHRlcm5Db2xvclNwYWNlOgorICAgICAgICBjYWlyb19zZXRfc291cmNl
KGNyLCBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCktPmNyZWF0ZVBsYXRmb3JtUGF0
dGVybihnZXRDVE0oKSkpOworICAgICAgICBjYWlyb19maWxsKGNyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHcmFkaWVudENvbG9yU3BhY2U6CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2Uo
Y3IsIG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCktPnBsYXRmb3JtR3JhZGllbnQo
KSk7CisgICAgICAgIGNhaXJvX2ZpbGwoY3IpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3sKKyAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+
Y3I7CisKKyAgICBzd2l0Y2ggKG1fY29tbW9uLT5zdGF0ZS5zdHJva2VDb2xvclNwYWNlKSB7Cisg
ICAgY2FzZSBTb2xpZENvbG9yU3BhY2U6CisgICAgICAgIGlmIChzdHJva2VDb2xvcigpLmFscGhh
KCkpIHsKKyAgICAgICAgICAgIHNldENvbG9yKGNyLCBzdHJva2VDb2xvcigpKTsKKyAgICAgICAg
ICAgIGNhaXJvX3N0cm9rZShjcik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQYXR0ZXJuQ29sb3JTcGFjZToKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgbV9jb21t
b24tPnN0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRD
VE0oKSkpOworICAgICAgICBjYWlyb19zdHJva2UoY3IpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdyYWRpZW50Q29sb3JTcGFjZToKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgbV9j
b21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpLT5wbGF0Zm9ybUdyYWRpZW50KCkpOwor
ICAgICAgICBjYWlyb19zdHJva2UoY3IpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCgpIHsKKyAgICBmaWxsUGF0aCgpOworICAgIHN0
cm9rZVBhdGgoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CisgICAgY2Fpcm9fcmVjdGFu
Z2xlKGNyLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7
CisKKyAgICBzd2l0Y2ggKG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3JTcGFjZSkgeworICAgIGNh
c2UgU29saWRDb2xvclNwYWNlOgorICAgICAgICBpZiAoZmlsbENvbG9yKCkuYWxwaGEoKSkgewor
ICAgICAgICAgICAgc2V0Q29sb3IoY3IsIGZpbGxDb2xvcigpKTsKKyAgICAgICAgICAgIGNhaXJv
X2ZpbGwoY3IpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGF0dGVybkNv
bG9yU3BhY2U6CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIG1fY29tbW9uLT5zdGF0ZS5m
aWxsUGF0dGVybi5nZXQoKS0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKSk7CisgICAg
ICAgIGNhaXJvX2ZpbGwoY3IpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYWRpZW50Q29s
b3JTcGFjZToKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgbV9jb21tb24tPnN0YXRlLmZp
bGxHcmFkaWVudC5nZXQoKS0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAgY2Fpcm9fZmls
bChjcik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAt
NDk3LDMzICs1NzksMTYgQEAgSW50UG9pbnQgR3JhcGhpY3NDb250ZXh0OjpvcmlnaW4oKQogICAg
IHJldHVybiBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KG1hdHJpeC54MCksIHN0YXRpY19jYXN0
PGludD4obWF0cml4LnkwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9r
ZVBhdHRlcm4oY29uc3QgUGF0dGVybiYgcGF0dGVybikKLXsKLSAgICBjYWlyb19wYXR0ZXJuX3Qq
IHBsYXRmb3JtUGF0dGVybiA9IHBhdHRlcm4uY3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgp
KTsKLSAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2Fp
cm9fc2V0X3NvdXJjZShwbGF0Zm9ybUNvbnRleHQoKSwgcGxhdGZvcm1QYXR0ZXJuKTsKLSAgICBj
YWlyb19wYXR0ZXJuX2Rlc3Ryb3kocGxhdGZvcm1QYXR0ZXJuKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oY29uc3QgUGF0dGVybiYgcGF0dGVybikKLXsKLSAg
ICAvLyBUaGUgQ2Fpcm8gY29kZXBhdGggZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQgc2VwYXJhdGUg
c3Ryb2tlL2ZpbGw/Ci0gICAgLy8gVGhlIGNvZGUgSSByZWZhY3RvcmVkIHRvIGNyZWF0ZSB0aGVz
ZSBtZXRob2RzIHdhcyBpZGVudGljYWwgZm9yIENhaXJvCi0gICAgYXBwbHlTdHJva2VQYXR0ZXJu
KHBhdHRlcm4pOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29s
b3IoY29uc3QgQ29sb3ImIGNvbCkKIHsKLSAgICAvLyBGSVhNRTogdGhpcyBpcyBwcm9iYWJseSBh
IG5vLW9wIGJ1dCBJJ20gbm90IHN1cmUKLSAgICAvLyBub3RJbXBsZW1lbnRlZCgpOyAvLyBjb21t
ZW50ZWQtb3V0IGJlY2F1c2UgaXQncyBjaGF0dHkgYW5kIGNsdXR0ZXJzIG91dHB1dAorICAgIC8v
IENhaXJvIGNvbnRleHRzIGNhbid0IGhvbGQgc2VwYXJhdGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9y
cworICAgIC8vIHNvIHdlIHNldCB0aGVtIGp1c3QgYmVmb3JlIHdlIGFjdHVhbGx5IGZpbGwgb3Ig
c3Ryb2tlCiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9y
KGNvbnN0IENvbG9yJiBjb2wpCiB7Ci0gICAgLy8gRklYTUU6IHRoaXMgaXMgcHJvYmFibHkgYSBu
by1vcCBidXQgSSdtIG5vdCBzdXJlCi0gICAgLy9ub3RJbXBsZW1lbnRlZCgpOyAvLyBjb21tZW50
ZWQtb3V0IGJlY2F1c2UgaXQncyBjaGF0dHkgYW5kIGNsdXR0ZXJzIG91dHB1dAorICAgIC8vIENh
aXJvIGNvbnRleHRzIGNhbid0IGhvbGQgc2VwYXJhdGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycwor
ICAgIC8vIHNvIHdlIHNldCB0aGVtIGp1c3QgYmVmb3JlIHdlIGFjdHVhbGx5IGZpbGwgb3Igc3Ry
b2tlCiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVz
cyhmbG9hdCBzdHJva2VUaGlja25lc3MpCkBAIC02NjMsMTIgKzcyOCwyOCBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGCiAgICAgICAgIHJldHVybjsKIAogICAgIGNh
aXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKLSAgICBjYWlyb19zYXZlKGNyKTsKICAgICBjYWlyb19y
ZWN0YW5nbGUoY3IsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpKTsKLSAgICBzZXRDb2xvcihjciwgc3Ryb2tlQ29sb3IoKSk7CiAgICAgY2Fpcm9fc2V0X2xp
bmVfd2lkdGgoY3IsIHdpZHRoKTsKLSAgICBjYWlyb19zdHJva2UoY3IpOwotICAgIGNhaXJvX3Jl
c3RvcmUoY3IpOworCisgICAgc3dpdGNoIChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlQ29sb3JTcGFj
ZSkgeworICAgIGNhc2UgU29saWRDb2xvclNwYWNlOgorICAgICAgICBpZiAoc3Ryb2tlQ29sb3Io
KS5hbHBoYSgpKSB7CisgICAgICAgICAgICBzZXRDb2xvcihjciwgc3Ryb2tlQ29sb3IoKSk7Cisg
ICAgICAgICAgICBjYWlyb19zdHJva2UoY3IpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUGF0dGVybkNvbG9yU3BhY2U6CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3Is
IG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpLT5jcmVhdGVQbGF0Zm9ybVBhdHRl
cm4oZ2V0Q1RNKCkpKTsKKyAgICAgICAgY2Fpcm9fZmlsbChjcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgorICAgICAgICBjYWlyb19zZXRfc291cmNlKGNy
LCBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCktPnBsYXRmb3JtR3JhZGllbnQo
KSk7CisgICAgICAgIGNhaXJvX3N0cm9rZShjcik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExpbmVDYXAoTGluZUNhcCBsaW5lQ2FwKQpAQCAt
OTExLDYgKzk5MiwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VXNlQW50aWFsaWFzaW5n
CiAgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhtX2RhdGEtPmNyLCBlbmFibGUgPyBDQUlST19BTlRJ
QUxJQVNfREVGQVVMVCA6IENBSVJPX0FOVElBTElBU19OT05FKTsKIH0KIAordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxp
dHkpCit7Cit9CisKK0ludGVycG9sYXRpb25RdWFsaXR5IEdyYXBoaWNzQ29udGV4dDo6aW1hZ2VJ
bnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludGVycG9sYXRpb25E
ZWZhdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBQTEFURk9S
TShDQUlSTykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>22950</attachid>
            <date>2008-08-23 00:26:56 -0700</date>
            <delta_ts>2008-08-23 00:26:56 -0700</delta_ts>
            <desc>Colors from future</desc>
            <filename>c1.html</filename>
            <type>text/html</type>
            <size>511</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">PGh0bWw+DQogIDxoZWFkPg0KICAgIDxzY3JpcHQgdHlwZT0iYXBwbGljYXRpb24veC1qYXZhc2Ny
aXB0Ij4NCiAgICAgIGZ1bmN0aW9uIGRyYXcoKSB7DQogICAgICAgIHZhciBjdHggPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgnY2FudmFzJykuZ2V0Q29udGV4dCgnMmQnKTsNCiAgICAgICAgY3R4
LmZpbGxTdHlsZSA9ICIjMGYwIjsKICAgICAgICBjdHguZmlsbFJlY3QoNTAsIDUwLCA1MCwgNTAp
OwogICAgICAgIGN0eC5maWxsU3R5bGUgPSAiI2YwMCkiOwogICAgICAgIGN0eC5maWxsUmVjdCg1
MCwgMCwgNTAsIDUwKTsKICAgICAgICBjdHguZmlsbFN0eWxlID0gIiMwMGYiOwogICAgICAgIGN0
eC5maWxsUmVjdCgwLCAwLCA1MCwgNTApOw0KICAgICAgfQ0KICAgIDwvc2NyaXB0Pg0KICA8L2hl
YWQ+DQogIDxib2R5IG9ubG9hZD0iZHJhdygpOyI+DQogICAgPGNhbnZhcyBpZD0iY2FudmFzIiB3
aWR0aD0iMTAwIiBoZWlnaHQ9IjEwMCI+PC9jYW52YXM+DQogIDwvYm9keT4NCjwvaHRtbD4NCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22951</attachid>
            <date>2008-08-23 02:05:43 -0700</date>
            <delta_ts>2008-08-27 05:39:56 -0700</delta_ts>
            <desc>Combination of the last 2 patches</desc>
            <filename>Canvas-fixed-version.patch</filename>
            <type>text/plain</type>
            <size>48941</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAzNTg4OSkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3
b3JraW5nIGNvcHkpCkBAIC0yMjkyLDYgKzIyOTIsNyBAQAogCQlBODhBRDUyRjA5NTI0QjkyMDAx
REQxOTYgLyogUXVhcnR6Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODVEN0EyRjA4NzlFQkE5MDA2QTkxNzIgLyogUXVhcnR6
Q29yZS5mcmFtZXdvcmsgKi87IH07CiAJCUE4OERENDg3MEI0NjI5QTMwMEMwMjk5MCAvKiBQYXRo
VHJhdmVyc2FsU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEE4OERENDg2MEI0NjI5QTMwMEMwMjk5MCAvKiBQYXRoVHJhdmVyc2FsU3RhdGUuaCAq
LzsgfTsKIAkJQTg4REQ0ODkwQjQ2MjlCMDAwQzAyOTkwIC8qIFBhdGhUcmF2ZXJzYWxTdGF0ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODhERDQ4
ODBCNDYyOUIwMDBDMDI5OTAgLyogUGF0aFRyYXZlcnNhbFN0YXRlLmNwcCAqLzsgfTsKKwkJQTg4
RkUzMzQwRTVFRUU4NzAwOEQ4QzBGIC8qIEdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4OEZFMzMzMEU1RUVFODcw
MDhEOEMwRiAvKiBHcmFwaGljc0NvbnRleHRQcml2YXRlLmggKi87IH07CiAJCUE4OTk0MzI4MEI0
MjMzODgwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQTg5OTQzMjYwQjQyMzM4NzAwRDdDODAyIC8qIEJpdG1hcElt
YWdlLmggKi87IH07CiAJCUE4OTk0MzI5MEI0MjMzODgwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODk5NDMy
NzBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwICovOyB9OwogCQlBOEE5MDlBQzBD
QkNENkI1MDAyOUI4MDcgLyogUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBOTA5QUEwQ0JDRDZC
NTAwMjlCODA3IC8qIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuaCAqLzsgfTsKQEAg
LTY2NjEsNiArNjY2Miw3IEBACiAJCUE4NzFERkUxMEExNTM3NkIwMEIxMkE2OCAvKiBSZW5kZXJX
aWRnZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlcldp
ZGdldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4OERENDg2MEI0NjI5QTMw
MEMwMjk5MCAvKiBQYXRoVHJhdmVyc2FsU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGF0aFRyYXZlcnNhbFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUE4OERENDg4MEI0NjI5QjAwMEMwMjk5MCAvKiBQYXRoVHJhdmVyc2FsU3RhdGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGF0aFRyYXZlcnNhbFN0YXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTg4RkUzMzMwRTVFRUU4NzAwOEQ4QzBG
IC8qIEdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBODk5NDMyNjBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQml0bWFwSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTg5OTQzMjcwQjQyMzM4NzAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdG1hcEltYWdlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQThBOTA5QUEwQ0JDRDZCNTAwMjlCODA3IC8qIFJl
bmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMTIyMjAsNiArMTIyMjIsNyBAQAogCQkJCUIyQzNEQTVGMEQwMDZD
RDYwMEVGNkYyNiAvKiBHbHlwaFdpZHRoTWFwLmggKi8sCiAJCQkJQkM1M0M2MDcwREE1NkM1NzAw
MjFFQjVEIC8qIEdyYWRpZW50LmNwcCAqLywKIAkJCQlCQzUzQzVGNDBEQTU2QjkyMDAyMUVCNUQg
LyogR3JhZGllbnQuaCAqLywKKwkJCQlBODhGRTMzMzBFNUVFRTg3MDA4RDhDMEYgLyogR3JhcGhp
Y3NDb250ZXh0UHJpdmF0ZS5oICovLAogCQkJCUIyQTAxNTkyMEFGNkNENTMwMDZCQ0UwRSAvKiBH
cmFwaGljc0NvbnRleHQuY3BwICovLAogCQkJCUIyQTAxNTkzMEFGNkNENTMwMDZCQ0UwRSAvKiBH
cmFwaGljc0NvbnRleHQuaCAqLywKIAkJCQlCMkEwMTU5NDBBRjZDRDUzMDA2QkNFMEUgLyogR3Jh
cGhpY3NUeXBlcy5jcHAgKi8sCkBAIC0xNTQzNyw2ICsxNTQ0MCw3IEBACiAJCQkJMjlBQUM1MUYw
RTUzOTYzQjAwOEY5QjNCIC8qIEFjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5lci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMDhBNDg0NzgwRTUyNzJDNTAwQzNGRTc2IC8qIFNjcmlwdEVsZW1l
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4RkE2RTVEMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0
ZXJuLmggaW4gSGVhZGVycyAqLywKKwkJCQlBODhGRTMzNDBFNUVFRTg3MDA4RDhDMEYgLyogR3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNw
cAkocmV2aXNpb24gMzU4ODkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsOCBAQCBz
dGF0aWMgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIENhCiB7CiAgICAgaWYgKHN0eWxl
LT5jYW52YXNHcmFkaWVudCgpKQogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBzdHlsZS0+Y2Fu
dmFzR3JhZGllbnQoKSk7Ci0gICAgaWYgKHN0eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgIHJldHVy
biB0b0pTKGV4ZWMsIHN0eWxlLT5wYXR0ZXJuKCkpOworICAgIGlmIChzdHlsZS0+Y2FudmFzUGF0
dGVybigpKQorICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBzdHlsZS0+Y2FudmFzUGF0dGVybigp
KTsKICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgc3R5bGUtPmNvbG9yKCkpOwogfQogCkluZGV4
OiBXZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAkocmV2aXNpb24gMzU4ODkpCisrKyBXZWJDb3JlL2Nz
cy9DU1NHcmFkaWVudFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBT
dHJpbmcgQ1NTR3JhZGllbnRWYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAotR3JhZGllbnQqIENTU0dyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KFJlbmRl
ck9iamVjdCogcmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHNpemUpCitQYXNzUmVmUHRyPEdyYWRp
ZW50PiBDU1NHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudChSZW5kZXJPYmplY3QqIHJlbmRl
cmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIEFTU0VSVCghc2l6ZS5pc0VtcHR5KCkp
OwogICAgIApAQCAtODAsMTMgKzgwLDEzIEBAIEdyYWRpZW50KiBDU1NHcmFkaWVudFZhbHVlOjpj
cmVhdGVHcmFkaWUKICAgICBGbG9hdFBvaW50IGZpcnN0UG9pbnQgPSByZXNvbHZlUG9pbnQobV9m
aXJzdFguZ2V0KCksIG1fZmlyc3RZLmdldCgpLCBzaXplLCB6b29tRmFjdG9yKTsKICAgICBGbG9h
dFBvaW50IHNlY29uZFBvaW50ID0gcmVzb2x2ZVBvaW50KG1fc2Vjb25kWC5nZXQoKSwgbV9zZWNv
bmRZLmdldCgpLCBzaXplLCB6b29tRmFjdG9yKTsKICAgICAKLSAgICBHcmFkaWVudCogZ3JhZGll
bnQgPSAwOworICAgIFJlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQ7CiAgICAgaWYgKG1fdHlwZSA9
PSBDU1NMaW5lYXJHcmFkaWVudCkKLSAgICAgICAgZ3JhZGllbnQgPSBuZXcgR3JhZGllbnQoZmly
c3RQb2ludCwgc2Vjb25kUG9pbnQpOworICAgICAgICBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVh
dGUoZmlyc3RQb2ludCwgc2Vjb25kUG9pbnQpOwogICAgIGVsc2UgewogICAgICAgICBmbG9hdCBm
aXJzdFJhZGl1cyA9IHJlc29sdmVSYWRpdXMobV9maXJzdFJhZGl1cy5nZXQoKSwgem9vbUZhY3Rv
cik7CiAgICAgICAgIGZsb2F0IHNlY29uZFJhZGl1cyA9IHJlc29sdmVSYWRpdXMobV9zZWNvbmRS
YWRpdXMuZ2V0KCksIHpvb21GYWN0b3IpOwotICAgICAgICBncmFkaWVudCA9IG5ldyBHcmFkaWVu
dChmaXJzdFBvaW50LCBmaXJzdFJhZGl1cywgc2Vjb25kUG9pbnQsIHNlY29uZFJhZGl1cyk7Cisg
ICAgICAgIGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShmaXJzdFBvaW50LCBmaXJzdFJhZGl1
cywgc2Vjb25kUG9pbnQsIHNlY29uZFJhZGl1cyk7CiAgICAgfQogCiAgICAgLy8gTm93IGFkZCB0
aGUgc3RvcHMuCkBAIC0xMDEsNyArMTAxLDcgQEAgR3JhZGllbnQqIENTU0dyYWRpZW50VmFsdWU6
OmNyZWF0ZUdyYWRpZQogICAgIC8vIFRoZSBiYWNrIGVuZCBhbHJlYWR5IHNvcnRlZCB0aGUgc3Rv
cHMuCiAgICAgZ3JhZGllbnQtPnNldFN0b3BzU29ydGVkKHRydWUpOwogCi0gICAgcmV0dXJuIGdy
YWRpZW50OworICAgIHJldHVybiBncmFkaWVudC5yZWxlYXNlKCk7CiB9CiAKIEltYWdlKiBDU1NH
cmFkaWVudFZhbHVlOjppbWFnZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXpl
JiBzaXplKQpJbmRleDogV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAkocmV2aXNpb24gMzU4ODkpCisrKyBX
ZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgy
LDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgLy8gQ3JlYXRlIHRoZSBncmFkaWVudCBm
b3IgYSBnaXZlbiBzaXplLgotICAgIEdyYWRpZW50KiBjcmVhdGVHcmFkaWVudChSZW5kZXJPYmpl
Y3QqLCBjb25zdCBJbnRTaXplJik7CisgICAgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlR3Jh
ZGllbnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpOwogICAgIAogICAgIC8vIFJlc29s
dmUgcG9pbnRzL3JhZGlpIHRvIGZyb250IGVuZCB2YWx1ZXMuCiAgICAgRmxvYXRQb2ludCByZXNv
bHZlUG9pbnQoQ1NTUHJpbWl0aXZlVmFsdWUqLCBDU1NQcmltaXRpdmVWYWx1ZSosIGNvbnN0IElu
dFNpemUmLCBmbG9hdCB6b29tRmFjdG9yKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNHcmFk
aWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZhc0dyYWRpZW50LmNwcAko
cmV2aXNpb24gMzU4ODkpCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFzR3JhZGllbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiwxMiArMzIsMTIgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ2Fu
dmFzR3JhZGllbnQ6OkNhbnZhc0dyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBG
bG9hdFBvaW50JiBwMSkKLSAgICA6IG1fZ3JhZGllbnQocDAsIHAxKQorICAgIDogbV9ncmFkaWVu
dChHcmFkaWVudDo6Y3JlYXRlKHAwLCBwMSkpCiB7CiB9CiAKIENhbnZhc0dyYWRpZW50OjpDYW52
YXNHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0UG9p
bnQmIHAxLCBmbG9hdCByMSkKLSAgICA6IG1fZ3JhZGllbnQocDAsIHIwLCBwMSwgcjEpCisgICAg
OiBtX2dyYWRpZW50KEdyYWRpZW50OjpjcmVhdGUocDAsIHIwLCBwMSwgcjEpKQogewogfQogCklu
ZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFzR3JhZGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvQ2FudmFzR3JhZGllbnQuaAkocmV2aXNpb24gMzU4ODkpCisrKyBXZWJDb3JlL2h0bWwv
Q2FudmFzR3JhZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTcgKzQ2LDE3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzR3Jh
ZGllbnQocDAsIHIwLCBwMSwgcjEpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgR3Jh
ZGllbnQmIGdyYWRpZW50KCkgeyByZXR1cm4gbV9ncmFkaWVudDsgfQorICAgICAgICBHcmFkaWVu
dCogZ3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX2dyYWRpZW50LmdldCgpOyB9CiAKLSAgICAg
ICAgdm9pZCBhZGRDb2xvclN0b3AoZmxvYXQgdmFsdWUsIGNvbnN0IFN0cmluZyYgY29sb3IpIHsg
bV9ncmFkaWVudC5hZGRDb2xvclN0b3AodmFsdWUsIGNvbG9yKTsgfQorICAgICAgICB2b2lkIGFk
ZENvbG9yU3RvcChmbG9hdCB2YWx1ZSwgY29uc3QgU3RyaW5nJiBjb2xvcikgeyBtX2dyYWRpZW50
LT5hZGRDb2xvclN0b3AodmFsdWUsIGNvbG9yKTsgfQogCi0gICAgICAgIHZvaWQgZ2V0Q29sb3Io
ZmxvYXQgdmFsdWUsIGZsb2F0KiByLCBmbG9hdCogZywgZmxvYXQqIGIsIGZsb2F0KiBhKSBjb25z
dCB7IG1fZ3JhZGllbnQuZ2V0Q29sb3IodmFsdWUsIHIsIGcsIGIsIGEpOyB9CisgICAgICAgIHZv
aWQgZ2V0Q29sb3IoZmxvYXQgdmFsdWUsIGZsb2F0KiByLCBmbG9hdCogZywgZmxvYXQqIGIsIGZs
b2F0KiBhKSBjb25zdCB7IG1fZ3JhZGllbnQtPmdldENvbG9yKHZhbHVlLCByLCBnLCBiLCBhKTsg
fQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ2FudmFzR3JhZGllbnQoY29uc3QgRmxvYXRQb2lu
dCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKTsKICAgICAgICAgQ2FudmFzR3JhZGllbnQoY29u
c3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQg
cjEpOwogICAgICAgICAKLSAgICAgICAgR3JhZGllbnQgbV9ncmFkaWVudDsKKyAgICAgICAgUmVm
UHRyPEdyYWRpZW50PiBtX2dyYWRpZW50OwogICAgIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6
IFdlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvQ2FudmFzUGF0dGVybi5jcHAJKHJldmlzaW9uIDM1ODg5KQorKysgV2ViQ29yZS9odG1sL0Nh
bnZhc1BhdHRlcm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgQ2Fu
dmFzUGF0dGVybjo6cGFyc2VSZXBldGl0aW9uVHlwZSgKIH0KIAogQ2FudmFzUGF0dGVybjo6Q2Fu
dmFzUGF0dGVybihJbWFnZSogaW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29s
IG9yaWdpbkNsZWFuKQotICAgIDogbV9wYXR0ZXJuKGltYWdlLCByZXBlYXRYLCByZXBlYXRZKQor
ICAgIDogbV9wYXR0ZXJuKFBhdHRlcm46OmNyZWF0ZShpbWFnZSwgcmVwZWF0WCwgcmVwZWF0WSkp
CiAgICAgLCBtX29yaWdpbkNsZWFuKG9yaWdpbkNsZWFuKQogewogfQpJbmRleDogV2ViQ29yZS9o
dG1sL0NhbnZhc1BhdHRlcm4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzUGF0
dGVybi5oCShyZXZpc2lvbiAzNTg4OSkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQ1LDE1ICs0NSwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzUGF0dGVybihp
bWFnZSwgcmVwZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pKTsKICAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgY29uc3QgUGF0dGVybiYgcGF0dGVybigpIHsgcmV0dXJuIG1fcGF0dGVybjsg
fQorCisgICAgICAgIFBhdHRlcm4qIHBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3BhdHRlcm4u
Z2V0KCk7IH0KIAogICAgICAgICBib29sIG9yaWdpbkNsZWFuKCkgY29uc3QgeyByZXR1cm4gbV9v
cmlnaW5DbGVhbjsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ2FudmFzUGF0dGVybihJbWFn
ZSosIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKTsKIAotICAg
ICAgICBQYXR0ZXJuIG1fcGF0dGVybjsKKyAgICAgICAgUmVmUHRyPFBhdHRlcm4+IG1fcGF0dGVy
bjsKICAgICAgICAgYm9vbCBtX29yaWdpbkNsZWFuOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUv
aHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAzNTg4OSkKKysrIFdl
YkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDEsOCArMTAxLDYgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpTdGF0ZTo6U3RhdGUo
KQogICAgICwgbV9zaGFkb3dDb2xvcigiYmxhY2siKQogICAgICwgbV9nbG9iYWxBbHBoYSgxKQog
ICAgICwgbV9nbG9iYWxDb21wb3NpdGUoQ29tcG9zaXRlU291cmNlT3ZlcikKLSAgICAsIG1fYXBw
bGllZFN0cm9rZVBhdHRlcm4oZmFsc2UpCi0gICAgLCBtX2FwcGxpZWRGaWxsUGF0dGVybihmYWxz
ZSkKIHsKIH0KIApAQCAtMTQxLDcgKzEzOSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpzZXRTdHJva2UKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fY2FudmFzLT5vcmln
aW5DbGVhbigpKSB7Ci0gICAgICAgIGlmIChDYW52YXNQYXR0ZXJuKiBwYXR0ZXJuID0gc3R5bGUt
PnBhdHRlcm4oKSkgeworICAgICAgICBpZiAoQ2FudmFzUGF0dGVybiogcGF0dGVybiA9IHN0eWxl
LT5jYW52YXNQYXR0ZXJuKCkpIHsKICAgICAgICAgICAgIGlmICghcGF0dGVybi0+b3JpZ2luQ2xl
YW4oKSkKICAgICAgICAgICAgICAgICBtX2NhbnZhcy0+c2V0T3JpZ2luVGFpbnRlZCgpOwogICAg
ICAgICB9CkBAIC0xNTIsNyArMTUwLDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldFN0cm9rZQogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwogICAgIHN0YXRlKCkubV9z
dHJva2VTdHlsZS0+YXBwbHlTdHJva2VDb2xvcihjKTsKLSAgICBzdGF0ZSgpLm1fYXBwbGllZFN0
cm9rZVBhdHRlcm4gPSBmYWxzZTsKIH0KIAogQ2FudmFzU3R5bGUqIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZmlsbFN0eWxlKCkgY29uc3QKQEAgLTE2Niw3ICsxNjMsNyBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbFN0CiAgICAgICAgIHJldHVybjsKICAKICAgICBp
ZiAobV9jYW52YXMtPm9yaWdpbkNsZWFuKCkpIHsKLSAgICAgICAgaWYgKENhbnZhc1BhdHRlcm4q
IHBhdHRlcm4gPSBzdHlsZS0+cGF0dGVybigpKSB7CisgICAgICAgIGlmIChDYW52YXNQYXR0ZXJu
KiBwYXR0ZXJuID0gc3R5bGUtPmNhbnZhc1BhdHRlcm4oKSkgewogICAgICAgICAgICAgaWYgKCFw
YXR0ZXJuLT5vcmlnaW5DbGVhbigpKQogICAgICAgICAgICAgICAgIG1fY2FudmFzLT5zZXRPcmln
aW5UYWludGVkKCk7CiAgICAgICAgIH0KQEAgLTE3Nyw3ICsxNzQsNiBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbFN0CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47
CiAgICAgc3RhdGUoKS5tX2ZpbGxTdHlsZS0+YXBwbHlGaWxsQ29sb3IoYyk7Ci0gICAgc3RhdGUo
KS5tX2FwcGxpZWRGaWxsUGF0dGVybiA9IGZhbHNlOwogfQogCiBmbG9hdCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmxpbmVXaWR0aCgpIGNvbnN0CkBAIC01NDIsNDcgKzUzOCw3IEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsKCkKICAgICBpZiAoIW1fcGF0aC5pc0VtcHR5
KCkpCiAgICAgICAgIHdpbGxEcmF3KG1fcGF0aC5ib3VuZGluZ1JlY3QoKSk7CiAKLSNpZiBQTEFU
Rk9STShDRykKLSAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkg
ewotICAgICAgICAvLyBTaGFkaW5nIHdvcmtzIG9uIHRoZSBlbnRpcmUgY2xpcCByZWdpb24sIHNv
IGNvbnZlcnQgdGhlIGN1cnJlbnQgcGF0aCB0byBhIGNsaXAuCi0gICAgICAgIGMtPnNhdmUoKTsK
LSAgICAgICAgQ0dDb250ZXh0Q2xpcChjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgICAgIENH
Q29udGV4dERyYXdTaGFkaW5nKGMtPnBsYXRmb3JtQ29udGV4dCgpLCBzdGF0ZSgpLm1fZmlsbFN0
eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRmb3JtR3JhZGllbnQoKSk7ICAg
ICAgICAKLSAgICAgICAgYy0+cmVzdG9yZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChz
dGF0ZSgpLm1fZmlsbFN0eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseUZpbGxQYXR0
ZXJuKCk7Ci0gICAgICAgIENHQ29udGV4dEZpbGxQYXRoKGMtPnBsYXRmb3JtQ29udGV4dCgpKTsK
LSAgICB9Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICBRUGFpbnRlclBhdGgqIHBhdGggPSBtX3Bh
dGgucGxhdGZvcm1QYXRoKCk7Ci0gICAgUVBhaW50ZXIqIHAgPSBzdGF0aWNfY2FzdDxRUGFpbnRl
cio+KGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+
Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAgICBwLT5maWxsUGF0aCgqcGF0aCwgUUJydXNoKCoo
c3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKS0+Z3JhZGllbnQoKS5wbGF0Zm9y
bUdyYWRpZW50KCkpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHN0YXRlKCkubV9maWxs
U3R5bGUtPnBhdHRlcm4oKSkKLSAgICAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKLSAgICAg
ICAgcC0+ZmlsbFBhdGgoKnBhdGgsIHAtPmJydXNoKCkpOwotICAgIH0KLSNlbGlmIFBMQVRGT1JN
KENBSVJPKQotICAgIGNhaXJvX3QqIGNyID0gYy0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgY2Fp
cm9fc2F2ZShjcik7Ci0KLSAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGll
bnQoKSkgewotICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBzdGF0ZSgpLm1fZmlsbFN0eWxl
LT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRmb3JtR3JhZGllbnQoKSk7Ci0gICAg
ICAgIGNhaXJvX2ZpbGwoY3IpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1f
ZmlsbFN0eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgZmxvYXQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7
Ci0gICAgICAgICAgICBjLT5maWxsQ29sb3IoKS5nZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhKTsKLSAgICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGEpOwotICAgICAgICB9Ci0gICAgICAgIGNhaXJvX2ZpbGwoY3IpOwotICAgIH0K
LSAgICBjYWlyb19yZXN0b3JlKGNyKTsKLSNlbmRpZgorICAgIGMtPmZpbGxQYXRoKCk7CiAKICNp
ZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAgICAgY2xlYXJQYXRoRm9yRGFzaGJvYXJkQmFj
a3dhcmRDb21wYXRpYmlsaXR5TW9kZSgpOwpAQCAtNjA1LDU0ICs1NjEsOCBAQCB2b2lkIENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRDo6c3Ryb2tlKCkKICAgICAgICAgYm91bmRpbmdSZWN0LmluZmxh
dGUoaW5zZXQpOwogICAgICAgICB3aWxsRHJhdyhib3VuZGluZ1JlY3QpOwogICAgIH0KLSAgICAK
LSAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBo
aWNzQ29udGV4dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgaWYgKHN0YXRlKCkubV9zdHJv
a2VTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAgICAvLyBTaGFkaW5nIHdvcmtzIG9u
IHRoZSBlbnRpcmUgY2xpcCByZWdpb24sIHNvIGNvbnZlcnQgdGhlIGN1cnJlbnQgcGF0aCB0byBh
IGNsaXAuCi0gICAgICAgIGMtPnNhdmUoKTsKLSAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhX
aXRoU3Ryb2tlZFBhdGgoYy0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgICAgICBDR0NvbnRleHRD
bGlwKGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmco
Yy0+cGxhdGZvcm1Db250ZXh0KCksIHN0YXRlKCkubV9zdHJva2VTdHlsZS0+Y2FudmFzR3JhZGll
bnQoKS0+Z3JhZGllbnQoKS5wbGF0Zm9ybUdyYWRpZW50KCkpOyAgICAgICAgCi0gICAgICAgIGMt
PnJlc3RvcmUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX3N0cm9rZVN0
eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4oKTsKLSAgICAg
ICAgQ0dDb250ZXh0U3Ryb2tlUGF0aChjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgfQotI2Vs
aWYgUExBVEZPUk0oUVQpCi0gICAgUVBhaW50ZXJQYXRoKiBwYXRoID0gbV9wYXRoLnBsYXRmb3Jt
UGF0aCgpOwotICAgIFFQYWludGVyKiBwID0gc3RhdGljX2Nhc3Q8UVBhaW50ZXIqPihjLT5wbGF0
Zm9ybUNvbnRleHQoKSk7Ci0gICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS0+Y2FudmFzR3Jh
ZGllbnQoKSkgewotICAgICAgICBwLT5zYXZlKCk7Ci0gICAgICAgIHAtPnNldEJydXNoKCooc3Rh
dGUoKS5tX3N0cm9rZVN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRmb3Jt
R3JhZGllbnQoKSkpOwotICAgICAgICBwLT5zdHJva2VQYXRoKCpwYXRoLCBwLT5wZW4oKSk7Ci0g
ICAgICAgIHAtPnJlc3RvcmUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5t
X3N0cm9rZVN0eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4o
KTsKLSAgICAgICAgcC0+c3Ryb2tlUGF0aCgqcGF0aCwgcC0+cGVuKCkpOwotICAgIH0KLSNlbGlm
IFBMQVRGT1JNKENBSVJPKQotICAgIGNhaXJvX3QqIGNyID0gYy0+cGxhdGZvcm1Db250ZXh0KCk7
Ci0gICAgY2Fpcm9fc2F2ZShjcik7Ci0gICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS0+Y2Fu
dmFzR3JhZGllbnQoKSkgewotICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBzdGF0ZSgpLm1f
c3Ryb2tlU3R5bGUtPmNhbnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkucGxhdGZvcm1HcmFkaWVu
dCgpKTsKLSAgICAgICAgYy0+YWRkUGF0aChtX3BhdGgpOwotICAgICAgICBjYWlyb19zdHJva2Uo
Y3IpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPnBh
dHRlcm4oKSkKLSAgICAgICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAgICAgICBlbHNl
IHsKLSAgICAgICAgICAgIGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwotICAgICAgICAg
ICAgYy0+c3Ryb2tlQ29sb3IoKS5nZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAg
ICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGEpOwotICAgICAgICB9Ci0gICAgICAgIGMtPmFkZFBhdGgobV9wYXRoKTsKLSAgICAgICAgY2Fp
cm9fc3Ryb2tlKGNyKTsKLSAgICB9Ci0gICAgY2Fpcm9fcmVzdG9yZShjcik7Ci0jZW5kaWYKKwor
ICAgIGMtPnN0cm9rZVBhdGgoKTsKIAogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKICAg
ICBjbGVhclBhdGhGb3JEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKCk7CkBAIC03
MDksNDIgKzYxOSw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsUmVjdCgK
ICAgICBGbG9hdFJlY3QgcmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB3aWxsRHJhdyhy
ZWN0KTsKIAotICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRl
bnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNpZiBQTEFURk9STShDRykKLSAgICBpZiAoc3RhdGUo
KS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAgICBjLT5zYXZlKCk7Ci0g
ICAgICAgIHN0YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCku
ZmlsbChjLCByZWN0KTsKLSAgICAgICAgYy0+cmVzdG9yZSgpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBs
eUZpbGxQYXR0ZXJuKCk7Ci0gICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGMtPnBsYXRmb3JtQ29u
dGV4dCgpLCByZWN0KTsKLSAgICB9Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICBRUGFpbnRlciog
cCA9IHN0YXRpY19jYXN0PFFQYWludGVyKj4oYy0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgIGlm
IChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpKSB7Ci0gICAgICAgIHAtPmZp
bGxSZWN0KHJlY3QsIFFCcnVzaCgqKHN0YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dyYWRpZW50
KCktPmdyYWRpZW50KCkucGxhdGZvcm1HcmFkaWVudCgpKSkpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBs
eUZpbGxQYXR0ZXJuKCk7Ci0gICAgICAgIHAtPmZpbGxSZWN0KHJlY3QsIHAtPmJydXNoKCkpOwot
ICAgIH0KLSNlbGlmIFBMQVRGT1JNKENBSVJPKQotICAgIGNhaXJvX3QqIGNyID0gYy0+cGxhdGZv
cm1Db250ZXh0KCk7Ci0gICAgY2Fpcm9fc2F2ZShjcik7Ci0gICAgaWYgKHN0YXRlKCkubV9maWxs
U3R5bGUtPmNhbnZhc0dyYWRpZW50KCkpIHsKLSAgICAgICAgc3RhdGUoKS5tX2ZpbGxTdHlsZS0+
Y2FudmFzR3JhZGllbnQoKS0+Z3JhZGllbnQoKS5maWxsKGMsIHJlY3QpOwotICAgIH0gZWxzZSB7
Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5wYXR0ZXJuKCkpIHsKLSAgICAgICAg
ICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKLSAgICAgICAgICAgIGNhaXJvX3JlY3RhbmdsZShjciwg
eCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgICAgICAgICBjYWlyb19maWxsKGNyKTsKLSAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBjLT5maWxsUmVjdChyZWN0LCBjLT5maWxsQ29sb3IoKSk7
Ci0gICAgfQotICAgIAotICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwotI2VuZGlmCisgICAgYy0+c2F2
ZSgpOworICAgIGMtPmZpbGxSZWN0KHJlY3QpOworICAgIGMtPnJlc3RvcmUoKTsKIH0KIAogdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVJlY3QoZmxvYXQgeCwgZmxvYXQgeSwg
ZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKQEAgLTc3MiwxMCArNjQ5LDYgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVJlYwogICAgIGJvdW5kaW5nUmVjdC5pbmZsYXRl
KGxpbmVXaWR0aCAvIDIpOwogICAgIHdpbGxEcmF3KGJvdW5kaW5nUmVjdCk7CiAKLSAgICAvLyBG
SVhNRTogTm8gc3VwcG9ydCBmb3IgZ3JhZGllbnRzIQotICAgIGlmIChzdGF0ZSgpLm1fc3Ryb2tl
U3R5bGUtPnBhdHRlcm4oKSkKLSAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7Ci0KICAgICBj
LT5zdHJva2VSZWN0KHJlY3QsIGxpbmVXaWR0aCk7CiB9CiAKQEAgLTExNjgsNTggKzEwNDEsNiBA
QCBHcmFwaGljc0NvbnRleHQqIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyCiAgICAgcmV0dXJuIG1f
Y2FudmFzLT5kcmF3aW5nQ29udGV4dCgpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6YXBwbHlTdHJva2VQYXR0ZXJuKCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBk
cmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
RklYTUU6IENhbiB0aGlzIGNoZWNrIGJlIG1vdmVkIGludG8gR3JhcGhpY3NDb250ZXh0PyBvciBy
ZW1vdmVkPwotI2lmIFBMQVRGT1JNKENHKQotICAgIC8vIENoZWNrIGZvciBjYXNlIHdoZXJlIHRo
ZSBwYXR0ZXJuIGlzIGFscmVhZHkgc2V0LgotICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBjLT5n
ZXRDVE0oKTsKLSAgICBpZiAoc3RhdGUoKS5tX2FwcGxpZWRTdHJva2VQYXR0ZXJuICYmIGN0bSA9
PSBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGVQYXR0ZXJuVHJhbnNmb3JtKQotICAgICAgICByZXR1cm47
Ci0jZW5kaWYKLQotICAgIENhbnZhc1BhdHRlcm4qIHBhdHRlcm4gPSBzdGF0ZSgpLm1fc3Ryb2tl
U3R5bGUtPnBhdHRlcm4oKTsKLSAgICBpZiAoIXBhdHRlcm4pCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGMtPmFwcGx5U3Ryb2tlUGF0dGVybihwYXR0ZXJuLT5wYXR0ZXJuKCkpOwotCi0jaWYgUExB
VEZPUk0oQ0cpCi0gICAgc3RhdGUoKS5tX3N0cm9rZVN0eWxlUGF0dGVyblRyYW5zZm9ybSA9IGN0
bTsKLSNlbmRpZgotICAgIHN0YXRlKCkubV9hcHBsaWVkU3Ryb2tlUGF0dGVybiA9IHRydWU7Ci19
Ci0KLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjphcHBseUZpbGxQYXR0ZXJuKCkKLXsK
LSAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghYykK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IENhbiB0aGlzIGNoZWNrIGJlIG1vdmVk
IGludG8gR3JhcGhpY3NDb250ZXh0PyBvciByZW1vdmVkPwotI2lmIFBMQVRGT1JNKENHKQotICAg
IC8vIENoZWNrIGZvciBjYXNlIHdoZXJlIHRoZSBwYXR0ZXJuIGlzIGFscmVhZHkgc2V0LgotICAg
IEFmZmluZVRyYW5zZm9ybSBjdG0gPSBjLT5nZXRDVE0oKTsKLSAgICBpZiAoc3RhdGUoKS5tX2Fw
cGxpZWRGaWxsUGF0dGVybiAmJiBjdG0gPT0gc3RhdGUoKS5tX2ZpbGxTdHlsZVBhdHRlcm5UcmFu
c2Zvcm0pCi0gICAgICAgIHJldHVybjsKLSNlbmRpZgotCi0gICAgQ2FudmFzUGF0dGVybiogcGF0
dGVybiA9IHN0YXRlKCkubV9maWxsU3R5bGUtPnBhdHRlcm4oKTsKLSAgICBpZiAoIXBhdHRlcm4p
Ci0gICAgICAgIHJldHVybjsKLQotICAgIGMtPmFwcGx5RmlsbFBhdHRlcm4ocGF0dGVybi0+cGF0
dGVybigpKTsKLQotI2lmIFBMQVRGT1JNKENHKQotICAgIHN0YXRlKCkubV9maWxsU3R5bGVQYXR0
ZXJuVHJhbnNmb3JtID0gY3RtOwotI2VuZGlmCi0gICAgc3RhdGUoKS5tX2FwcGxpZWRGaWxsUGF0
dGVybiA9IHRydWU7Ci19Ci0KIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlRGF0YT4gY3JlYXRlRW1w
dHlJbWFnZURhdGEoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBQYXNzUmVmUHRyPEltYWdl
RGF0YT4gZGF0YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQo
KSk7CkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCShyZXZpc2lv
biAzNTg4OSkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTkxLDEzICsxOTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgICAgICBTdHJpbmcgbV9zaGFkb3dDb2xvcjsKICAgICAgICAgICAgIGZsb2F0IG1fZ2xvYmFs
QWxwaGE7CiAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBtX2dsb2JhbENvbXBvc2l0ZTsK
LSAgICAgICAgICAgIGJvb2wgbV9hcHBsaWVkU3Ryb2tlUGF0dGVybjsKLSAgICAgICAgICAgIGJv
b2wgbV9hcHBsaWVkRmlsbFBhdHRlcm47CiAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV90
cmFuc2Zvcm07Ci0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0g
bV9zdHJva2VTdHlsZVBhdHRlcm5UcmFuc2Zvcm07Ci0gICAgICAgICAgICBBZmZpbmVUcmFuc2Zv
cm0gbV9maWxsU3R5bGVQYXR0ZXJuVHJhbnNmb3JtOwotI2VuZGlmCiAgICAgICAgIH07CiAgICAg
ICAgIFBhdGggbV9wYXRoOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFzU3R5bGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDM1ODg5
KQorKysgV2ViQ29yZS9odG1sL0NhbnZhc1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQx
LDcgKzE0MSwxMCBAQCB2b2lkIENhbnZhc1N0eWxlOjphcHBseVN0cm9rZUNvbG9yKEdyYXBoCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdyYWRpZW50OgorICAg
ICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlR3JhZGllbnQoY2FudmFzR3JhZGllbnQoKS0+Z3Jh
ZGllbnQoKSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbWFnZVBhdHRlcm46
CisgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VQYXR0ZXJuKGNhbnZhc1BhdHRlcm4oKS0+
cGF0dGVybigpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAgLTE4Nyw3ICsxOTAs
MTAgQEAgdm9pZCBDYW52YXNTdHlsZTo6YXBwbHlGaWxsQ29sb3IoR3JhcGhpYwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHcmFkaWVudDoKKyAgICAgICAgICAg
IGNvbnRleHQtPnNldEZpbGxHcmFkaWVudChjYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpKTsK
KyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEltYWdlUGF0dGVybjoKKyAgICAgICAg
ICAgIGNvbnRleHQtPnNldEZpbGxQYXR0ZXJuKGNhbnZhc1BhdHRlcm4oKS0+cGF0dGVybigpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNT
dHlsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNTdHlsZS5oCShyZXZpc2lv
biAzNTg4OSkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC00Nyw5ICs0Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBTdHJpbmcgY29s
b3IoKSBjb25zdCB7IHJldHVybiBtX2NvbG9yOyB9CiAgICAgICAgIENhbnZhc0dyYWRpZW50KiBj
YW52YXNHcmFkaWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhZGllbnQuZ2V0KCk7IH0KLSAgICAg
ICAgQ2FudmFzUGF0dGVybiogcGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fcGF0dGVybi5nZXQo
KTsgfQorICAgICAgICBDYW52YXNQYXR0ZXJuKiBjYW52YXNQYXR0ZXJuKCkgY29uc3QgeyByZXR1
cm4gbV9wYXR0ZXJuLmdldCgpOyB9CiAKLSAgICAgICAgLy8gVGhlc2UgZG8gbm90aGluZyBmb3Ig
Z3JhZGllbnRzIG9yIHBhdHRlcm5zLgogICAgICAgICB2b2lkIGFwcGx5RmlsbENvbG9yKEdyYXBo
aWNzQ29udGV4dCopOwogICAgICAgICB2b2lkIGFwcGx5U3Ryb2tlQ29sb3IoR3JhcGhpY3NDb250
ZXh0Kik7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdl
LmgJKHJldmlzaW9uIDM1ODg5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0
ZWRJbWFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNiArMzAsMTYgQEAKIAogI2luY2x1ZGUg
IkdlbmVyYXRvci5oIgogI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIEdlbmVyYXRlZEltYWdlIDogcHVibGljIEltYWdlIHsKIHB1YmxpYzoKLSAgICBHZW5lcmF0
ZWRJbWFnZShHZW5lcmF0b3IqIGdlbmVyYXRvciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLSAgICA6
IG1fc2l6ZShzaXplKQorICAgIEdlbmVyYXRlZEltYWdlKFBhc3NSZWZQdHI8R2VuZXJhdG9yPiBn
ZW5lcmF0b3IsIGNvbnN0IEludFNpemUmIHNpemUpCisgICAgICAgIDogbV9nZW5lcmF0b3IoZ2Vu
ZXJhdG9yKQorICAgICAgICAsIG1fc2l6ZShzaXplKQogICAgIHsKLSAgICAgICAgbV9nZW5lcmF0
b3Iuc2V0KGdlbmVyYXRvcik7CiAgICAgfQogICAgIHZpcnR1YWwgfkdlbmVyYXRlZEltYWdlKCkg
e30KIApAQCAtNjEsNyArNjEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb21wb3NpdGVPcGVyYXRvciwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCk7CiAgICAgCiBwcm90ZWN0ZWQ6Ci0gICAgT3duUHRyPEdlbmVy
YXRvcj4gbV9nZW5lcmF0b3I7CisgICAgUmVmUHRyPEdlbmVyYXRvcj4gbV9nZW5lcmF0b3I7CiAg
ICAgSW50U2l6ZSBtX3NpemU7CiB9OwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2Vu
ZXJhdG9yLmgJKHJldmlzaW9uIDM1ODg5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
ZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDE0IEBACiAjaWZuZGVmIEdl
bmVyYXRvcl9oCiAjZGVmaW5lIEdlbmVyYXRvcl9oCiAKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIAotY2xhc3MgR2Vu
ZXJhdG9yIDogTm9uY29weWFibGUgeworY2xhc3MgR2VuZXJhdG9yIDogcHVibGljIFJlZkNvdW50
ZWQ8R2VuZXJhdG9yPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+R2VuZXJhdG9yKCkge307CiAg
ICAgCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCShyZXZpc2lvbiAzNTg4
OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkdlbmVyYXRvci5oIgogCiAjaW5jbHVkZSAi
RmxvYXRQb2ludC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiAjaWYgUExBVEZPUk0oQ0cpCkBAIC01OCw4ICs1OSwxNCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBHcmFkaWVudCA6IHB1YmxpYyBHZW5lcmF0b3Igewog
ICAgIHB1YmxpYzoKLSAgICAgICAgR3JhZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0
IEZsb2F0UG9pbnQmIHAxKTsKLSAgICAgICAgR3JhZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAs
IGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQgcjEpOworICAgICAgICBzdGF0
aWMgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25z
dCBGbG9hdFBvaW50JiBwMSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBHcmFkaWVudChwMCwgcDEpKTsKKyAgICAgICAgfQorICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29u
c3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIxKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEdyYWRpZW50KHAwLCByMCwgcDEsIHIxKSk7CisgICAgICAgIH0KICAg
ICAgICAgdmlydHVhbCB+R3JhZGllbnQoKTsKIAogICAgICAgICB2b2lkIGFkZENvbG9yU3RvcChm
bG9hdCwgY29uc3QgU3RyaW5nJik7CkBAIC04NSw2ICs5Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgdmlydHVhbCB2b2lkIGZpbGwoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxv
YXRSZWN0Jik7CiAKICAgICBwcml2YXRlOgorICAgICAgICBHcmFkaWVudChjb25zdCBGbG9hdFBv
aW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEpOworICAgICAgICBHcmFkaWVudChjb25zdCBG
bG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBmbG9hdCByMSk7
CisKICAgICAgICAgdm9pZCBwbGF0Zm9ybUluaXQoKSB7IG1fZ3JhZGllbnQgPSAwOyB9CiAgICAg
ICAgIHZvaWQgcGxhdGZvcm1EZXN0cm95KCk7CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDM1ODg5KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzQsNiArMTM0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVN0eWxlKGNv
bgogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNv
bG9yKQogeworICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VDb2xvclNwYWNlID0gU29saWRDb2xv
clNwYWNlOwogICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VDb2xvciA9IGNvbG9yOwogICAgIHNl
dFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29sb3IpOwogfQpAQCAtMTgwLDYgKzE4MSw3IEBAIENvbG9y
IEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQ29sb3IoKSBjb24KIAogdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7CisgICAgbV9jb21tb24tPnN0
YXRlLmZpbGxDb2xvclNwYWNlID0gU29saWRDb2xvclNwYWNlOwogICAgIG1fY29tbW9uLT5zdGF0
ZS5maWxsQ29sb3IgPSBjb2xvcjsKICAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb2xvcik7CiB9
CkBAIC0xODksNiArMTkxLDM0IEBAIENvbG9yIEdyYXBoaWNzQ29udGV4dDo6ZmlsbENvbG9yKCkg
Y29uc3QKICAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLmZpbGxDb2xvcjsKIH0KIAordm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVBhdHRlcm4oUGFzc1JlZlB0cjxQYXR0ZXJuPiBwYXR0
ZXJuKQoreworICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VDb2xvclNwYWNlID0gUGF0dGVybkNv
bG9yU3BhY2U7CisgICAgbV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4gPSBwYXR0ZXJuOwor
ICAgIC8vc2V0UGxhdGZvcm1TdHJva2VQYXR0ZXJuKG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0
ZXJuLmdldCgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKFBh
c3NSZWZQdHI8UGF0dGVybj4gcGF0dGVybikKK3sKKyAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbENv
bG9yU3BhY2UgPSBQYXR0ZXJuQ29sb3JTcGFjZTsKKyAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbFBh
dHRlcm4gPSBwYXR0ZXJuOworICAgIC8vc2V0UGxhdGZvcm1GaWxsUGF0dGVybihtX2NvbW1vbi0+
c3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
U3Ryb2tlR3JhZGllbnQoUGFzc1JlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQpCit7CisgICAgbV9j
b21tb24tPnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UgPSBHcmFkaWVudENvbG9yU3BhY2U7CisgICAg
bV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50ID0gZ3JhZGllbnQ7CisgICAgLy9zZXRQbGF0
Zm9ybVN0cm9rZUdyYWRpZW50KG1fY29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudC5nZXQoKSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsR3JhZGllbnQoUGFzc1JlZlB0cjxH
cmFkaWVudD4gZ3JhZGllbnQpCit7CisgICAgbV9jb21tb24tPnN0YXRlLmZpbGxDb2xvclNwYWNl
ID0gR3JhZGllbnRDb2xvclNwYWNlOworICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQg
PSBncmFkaWVudDsKKyAgICAvL3NldFBsYXRmb3JtRmlsbEdyYWRpZW50KG1fY29tbW9uLT5zdGF0
ZS5maWxsR3JhZGllbnQuZ2V0KCkpOworfQorCiBib29sIEdyYXBoaWNzQ29udGV4dDo6dXBkYXRp
bmdDb250cm9sVGludHMoKSBjb25zdAogewogICAgIHJldHVybiBtX2NvbW1vbi0+bV91cGRhdGlu
Z0NvbnRyb2xUaW50czsKQEAgLTQyNiwxNCArNDU2LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtVGV4dERyYQogfQogI2VuZGlmCiAKLSNpZiAhUExBVEZPUk0oQ0cpICYmICFQ
TEFURk9STShDQUlSTykKLS8vIE90aGVyIHBsYXRmb3JtcyBuZWVkIHRvIGltcGxlbWVudCB0aGlz
Lgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVj
dCYsIGNvbnN0IEltYWdlQnVmZmVyKikKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotI2Vu
ZGlmCi0KICNpZiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShDQUlSTykKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKGNvbnN0IFN0cm9rZVN0eWxlJikKIHsK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2
aXNpb24gMzU4ODkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICAgICBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiAgICAgY2xhc3MgRm9udDsKICAgICBjbGFzcyBH
ZW5lcmF0b3I7CisgICAgY2xhc3MgR3JhZGllbnQ7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0
UHJpdmF0ZTsKICAgICBjbGFzcyBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU7CiAgICAg
Y2xhc3MgSW1hZ2VCdWZmZXI7CkBAIC0xMzksMzAgKzE0MCwzOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZvaWQgc2V0U3Ryb2tlU3R5bGUoY29uc3QgU3Ryb2tlU3R5bGUmIHN0eWxl
KTsKICAgICAgICAgQ29sb3Igc3Ryb2tlQ29sb3IoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRT
dHJva2VDb2xvcihjb25zdCBDb2xvciYpOworICAgICAgICB2b2lkIHNldFN0cm9rZVBhdHRlcm4o
UGFzc1JlZlB0cjxQYXR0ZXJuPik7CisgICAgICAgIHZvaWQgc2V0U3Ryb2tlR3JhZGllbnQoUGFz
c1JlZlB0cjxHcmFkaWVudD4pOwogCisgICAgICAgIHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUp
OwogICAgICAgICBDb2xvciBmaWxsQ29sb3IoKSBjb25zdDsKICAgICAgICAgdm9pZCBzZXRGaWxs
Q29sb3IoY29uc3QgQ29sb3ImKTsKLQotICAgICAgICB2b2lkIGFwcGx5U3Ryb2tlUGF0dGVybihj
b25zdCBQYXR0ZXJuJik7Ci0gICAgICAgIHZvaWQgYXBwbHlGaWxsUGF0dGVybihjb25zdCBQYXR0
ZXJuJik7CisgICAgICAgIHZvaWQgc2V0RmlsbFBhdHRlcm4oUGFzc1JlZlB0cjxQYXR0ZXJuPik7
CisgICAgICAgIHZvaWQgc2V0RmlsbEdyYWRpZW50KFBhc3NSZWZQdHI8R3JhZGllbnQ+KTsKIAog
ICAgICAgICB2b2lkIHNhdmUoKTsKICAgICAgICAgdm9pZCByZXN0b3JlKCk7Ci0gICAgICAgIAor
CiAgICAgICAgIC8vIFRoZXNlIGRyYXcgbWV0aG9kcyB3aWxsIGRvIGJvdGggc3Ryb2tpbmcgYW5k
IGZpbGxpbmcuCiAgICAgICAgIHZvaWQgZHJhd1JlY3QoY29uc3QgSW50UmVjdCYpOwogICAgICAg
ICB2b2lkIGRyYXdMaW5lKGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmKTsKICAgICAg
ICAgdm9pZCBkcmF3RWxsaXBzZShjb25zdCBJbnRSZWN0Jik7CiAgICAgICAgIHZvaWQgZHJhd0Nv
bnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywgY29uc3QgRmxvYXRQb2ludCosIGJvb2wgc2hv
dWxkQW50aWFsaWFzID0gZmFsc2UpOwogCisgICAgICAgIHZvaWQgZHJhd1BhdGgoKTsKKyAgICAg
ICAgdm9pZCBmaWxsUGF0aCgpOworICAgICAgICB2b2lkIHN0cm9rZVBhdGgoKTsKKwogICAgICAg
ICAvLyBBcmMgZHJhd2luZyAodXNlZCBieSBib3JkZXItcmFkaXVzIGluIENTUykganVzdCBzdXBw
b3J0cyBzdHJva2luZyBhdCB0aGUgbW9tZW50LgogICAgICAgICB2b2lkIHN0cm9rZUFyYyhjb25z
dCBJbnRSZWN0JiwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNwYW4pOwotICAgICAgICAKLSAg
ICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBJbnRSZWN0JiwgY29uc3QgQ29sb3ImKTsKKworICAg
ICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogICAgICAgICB2b2lkIGZpbGxS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJik7CiAgICAgICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgR2VuZXJhdG9yJik7CiAgICAgICAgIHZvaWQgZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRT
aXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYg
Ym90dG9tUmlnaHQsIGNvbnN0IENvbG9yJik7CisKICAgICAgICAgdm9pZCBjbGVhclJlY3QoY29u
c3QgRmxvYXRSZWN0Jik7CisKKyAgICAgICAgdm9pZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVj
dCYpOwogICAgICAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQgbGlu
ZVdpZHRoKTsKIAogICAgICAgICB2b2lkIGRyYXdJbWFnZShJbWFnZSosIGNvbnN0IEludFBvaW50
JiwgQ29tcG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKQEAgLTE3NywxMyAr
MTg3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEltYWdlOjpUaWxlUnVsZSBoUnVsZSA9IEltYWdlOjpTdHJldGNoVGlsZSwgSW1hZ2U6OlRpbGVS
dWxlIHZSdWxlID0gSW1hZ2U6OlN0cmV0Y2hUaWxlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7CiAKLSNpZiBQTEFU
Rk9STShDRykKICAgICAgICAgdm9pZCBzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVy
cG9sYXRpb25RdWFsaXR5KTsKICAgICAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0OwotI2Vsc2UKLSAgICAgICAgdm9pZCBzZXRJbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5KSB7fQotICAgICAgICBJbnRl
cnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QgeyByZXR1
cm4gSW50ZXJwb2xhdGlvbkRlZmF1bHQ7IH0KLSNlbmRpZgogCiAgICAgICAgIHZvaWQgY2xpcChj
b25zdCBGbG9hdFJlY3QmKTsKICAgICAgICAgdm9pZCBhZGRSb3VuZGVkUmVjdENsaXAoY29uc3Qg
SW50UmVjdCYsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRvcFJpZ2h0
LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21SaWdodCk7
CkBAIC0yODgsNyArMjkzLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgUExBVEZPUk0o
UVQpCiAgICAgICAgIGJvb2wgaW5UcmFuc3BhcmVuY3lMYXllcigpIGNvbnN0OwotICAgICAgICB2
b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlKTsKICAgICAgICAgUGxhdGZvcm1QYXRoKiBjdXJyZW50
UGF0aCgpOwogI2VuZGlmCiAKQEAgLTMwMSwxMiArMzA1LDIwIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHNhdmVQbGF0Zm9ybVN0YXRlKCk7CiAgICAg
ICAgIHZvaWQgcmVzdG9yZVBsYXRmb3JtU3RhdGUoKTsKKwogICAgICAgICB2b2lkIHNldFBsYXRm
b3JtVGV4dERyYXdpbmdNb2RlKGludCk7CisgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1Gb250KGNv
bnN0IEZvbnQmIGZvbnQpOworCiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJva2VDb2xvcihj
b25zdCBDb2xvciYpOworICAgICAgICAvL3ZvaWQgc2V0UGxhdGZvcm1TdHJva2VQYXR0ZXJuKFBh
dHRlcm4qKTsKKyAgICAgICAgLy92b2lkIHNldFBsYXRmb3JtU3Ryb2tlR3JhZGllbnQoR3JhZGll
bnQqKTsKICAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKGNvbnN0IFN0cm9rZVN0
eWxlJik7CiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxvYXQpOwor
CiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICAg
ICAgdm9pZCBzZXRQbGF0Zm9ybUZvbnQoY29uc3QgRm9udCYgZm9udCk7CisgICAgICAgIC8vdm9p
ZCBzZXRQbGF0Zm9ybUZpbGxQYXR0ZXJuKFBhdHRlcm4qKTsKKyAgICAgICAgLy92b2lkIHNldFBs
YXRmb3JtRmlsbEdyYWRpZW50KEdyYWRpZW50Kik7CisKICAgICAgICAgdm9pZCBzZXRQbGF0Zm9y
bVNoYWRvdyhjb25zdCBJbnRTaXplJiwgaW50IGJsdXIsIGNvbnN0IENvbG9yJik7CiAgICAgICAg
IHZvaWQgY2xlYXJQbGF0Zm9ybVNoYWRvdygpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaAkocmV2aXNpb24gMzU4ODkp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjcsMjggKzI3LDU1IEBACiAjZGVmaW5lIEdyYXBoaWNzQ29udGV4
dFByaXZhdGVfaAogCiAjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCisj
aW5jbHVkZSAiUGF0dGVybi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICAvLyBlc2Vp
ZGVsOiBUaGlzIGlzIGEgcGxhY2UtaG9sZGVyIHVudGlsIHNvbWUgZGF5IHdoZW4gd2UgZGVjaWRl
IHRvIGFkZAorICAgIC8vIHJlYWxsIGNvbG9yLXNwYWNlIHN1cHBvcnQgdG8gV2ViQ29yZS4gIEF0
IHRoYXQgdGltZSwgQ29sb3JTcGFjZXMKKyAgICAvLyB3aWxsIGJlY29tZSByZWFsIG9iamVjdHMg
aGVsZCBvZmYgb2YgQ29sb3JzLCBhbmQgdGhlcmUgd2lsbCBiZQorICAgIC8vIHNwZWNpYWwgc2lu
Z2xldG9uIEdyYWRpZW50IGFuZCBQYXR0ZXJuIGNvbG9yc3BhY2VzIHRvIG1hcmsgd2hlbgorICAg
IC8vIGEgZmlsbCBvciBzdHJva2UgaXMgdXNpbmcgYSBncmFkaWVudCBvciBwYXR0ZXJuIGluc3Rl
YWQgb2YgYSBzb2xpZCBjb2xvcgorICAgIGVudW0gQ29sb3JTcGFjZSB7CisgICAgICAgIFNvbGlk
Q29sb3JTcGFjZSwKKyAgICAgICAgUGF0dGVybkNvbG9yU3BhY2UsCisgICAgICAgIEdyYWRpZW50
Q29sb3JTcGFjZQorICAgIH07CisKICAgICBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUgewog
ICAgICAgICBHcmFwaGljc0NvbnRleHRTdGF0ZSgpCi0gICAgICAgICAgICA6IHN0cm9rZVN0eWxl
KFNvbGlkU3Ryb2tlKQorICAgICAgICAgICAgOiB0ZXh0RHJhd2luZ01vZGUoY1RleHRGaWxsKQor
ICAgICAgICAgICAgLCBzdHJva2VTdHlsZShTb2xpZFN0cm9rZSkKICAgICAgICAgICAgICwgc3Ry
b2tlVGhpY2tuZXNzKDApCisgICAgICAgICAgICAsIHN0cm9rZUNvbG9yU3BhY2UoU29saWRDb2xv
clNwYWNlKQogICAgICAgICAgICAgLCBzdHJva2VDb2xvcihDb2xvcjo6YmxhY2spCisgICAgICAg
ICAgICAsIGZpbGxSdWxlKFJVTEVfTk9OWkVSTykKKyAgICAgICAgICAgICwgZmlsbENvbG9yU3Bh
Y2UoU29saWRDb2xvclNwYWNlKQogICAgICAgICAgICAgLCBmaWxsQ29sb3IoQ29sb3I6OmJsYWNr
KQotICAgICAgICAgICAgLCB0ZXh0RHJhd2luZ01vZGUoY1RleHRGaWxsKQogICAgICAgICAgICAg
LCBwYWludGluZ0Rpc2FibGVkKGZhbHNlKQogICAgICAgICAgICAgLCBzaGFkb3dCbHVyKDApCiAg
ICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIEZvbnQgZm9udDsKKyAgICAgICAgaW50IHRl
eHREcmF3aW5nTW9kZTsKKyAgICAgICAgCiAgICAgICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxl
OwogICAgICAgICBmbG9hdCBzdHJva2VUaGlja25lc3M7CisgICAgICAgIENvbG9yU3BhY2Ugc3Ry
b2tlQ29sb3JTcGFjZTsKICAgICAgICAgQ29sb3Igc3Ryb2tlQ29sb3I7CisgICAgICAgIFJlZlB0
cjxHcmFkaWVudD4gc3Ryb2tlR3JhZGllbnQ7CisgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBzdHJv
a2VQYXR0ZXJuOworICAgICAgICAKKyAgICAgICAgV2luZFJ1bGUgZmlsbFJ1bGU7CisgICAgICAg
IENvbG9yU3BhY2UgZmlsbENvbG9yU3BhY2U7CiAgICAgICAgIENvbG9yIGZpbGxDb2xvcjsKLSAg
ICAgICAgaW50IHRleHREcmF3aW5nTW9kZTsKKyAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBmaWxs
R3JhZGllbnQ7CisgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBmaWxsUGF0dGVybjsKKwogICAgICAg
ICBib29sIHBhaW50aW5nRGlzYWJsZWQ7CisgICAgICAgIAogICAgICAgICBJbnRTaXplIHNoYWRv
d1NpemU7CiAgICAgICAgIHVuc2lnbmVkIHNoYWRvd0JsdXI7CiAgICAgICAgIENvbG9yIHNoYWRv
d0NvbG9yOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHJldmlzaW9uIDM1ODg5KQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTk4
LDggKzk4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgbW92ZVRvKGNv
bnN0IEZsb2F0UG9pbnQmKTsKICAgICAgICAgdm9pZCBhZGRMaW5lVG8oY29uc3QgRmxvYXRQb2lu
dCYpOwotICAgICAgICB2b2lkIGFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRy
b2xQb2ludCwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpOwotICAgICAgICB2b2lkIGFkZEJlemll
ckN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50MSwgY29uc3QgRmxvYXRQb2lu
dCYgY29udHJvbFBvaW50MiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgICAgICB2b2lkIGFkZFF1
YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludCwgY29uc3QgRmxvYXRQb2lu
dCYgZW5kUG9pbnQpOworICAgICAgICB2b2lkIGFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQ
b2ludCYgY29udHJvbFBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50MiwgY29u
c3QgRmxvYXRQb2ludCYgZW5kUG9pbnQpOwogICAgICAgICB2b2lkIGFkZEFyY1RvKGNvbnN0IEZs
b2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgcmFkaXVzKTsKICAgICAgICAgdm9p
ZCBjbG9zZVN1YnBhdGgoKTsKIApAQCAtMTA5LDkgKzEwOSw2IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgICAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmKTsKIAotICAgICAg
ICB2b2lkIHNldFdpbmRpbmdSdWxlKFdpbmRSdWxlIHJ1bGUpIHsgbV9ydWxlID0gcnVsZTsgfQot
ICAgICAgICBXaW5kUnVsZSB3aW5kaW5nUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZTsgfQot
CiAgICAgICAgIFN0cmluZyBkZWJ1Z1N0cmluZygpIGNvbnN0OwogCiAgICAgICAgIFBsYXRmb3Jt
UGF0aCogcGxhdGZvcm1QYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CkBAIC0xMjgsNyAr
MTI1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUGxh
dGZvcm1QYXRoKiBtX3BhdGg7Ci0gICAgICAgIFdpbmRSdWxlIG1fcnVsZTsKICAgICB9OwogCiB9
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAkocmV2aXNpb24gMzU4ODkpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNyArMjcsOCBAQAogI2lmbmRlZiBQYXR0ZXJuX2gKICNkZWZpbmUgUGF0dGVybl9oCiAKLSNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiAj
aWYgUExBVEZPUk0oQ0cpCkBAIC01NiwxNyArNTcsMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKICAgICBjbGFzcyBJbWFnZTsKIAotICAgIGNsYXNz
IFBhdHRlcm4gOiBOb25jb3B5YWJsZSB7CisgICAgY2xhc3MgUGF0dGVybiA6IHB1YmxpYyBSZWZD
b3VudGVkPFBhdHRlcm4+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFBhdHRlcm4oSW1hZ2UqLCBi
b29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSk7Ci0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
UGF0dGVybj4gY3JlYXRlKEltYWdlKiB0aWxlSW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBl
YXRZKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBhdHRlcm4o
dGlsZUltYWdlLCByZXBlYXRYLCByZXBlYXRZKSk7CisgICAgICAgIH0KICAgICAgICAgdmlydHVh
bCB+UGF0dGVybigpOwotICAgICAgICAKKwogICAgICAgICBJbWFnZSogdGlsZUltYWdlKCkgY29u
c3QgeyByZXR1cm4gbV90aWxlSW1hZ2UuZ2V0KCk7IH0KIAogICAgICAgICBQbGF0Zm9ybVBhdHRl
cm5QdHIgY3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSkgY29uc3Q7CiAKICAgICBwcml2YXRlOgorICAgICAgICBQYXR0ZXJuKEltYWdl
KiwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFkpOworCiAgICAgICAgIFJlZlB0cjxJbWFnZT4g
bV90aWxlSW1hZ2U7CiAgICAgICAgIGJvb2wgbV9yZXBlYXRYOwogICAgICAgICBib29sIG1fcmVw
ZWF0WTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhZGllbnRDYWly
by5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFk
aWVudENhaXJvLmNwcAkocmV2aXNpb24gMzU4ODkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYWRpZW50Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3
IEBAIGNhaXJvX3BhdHRlcm5fdCogR3JhZGllbnQ6OnBsYXRmb3JtR3JhZGkKIAogICAgIFZlY3Rv
cjxDb2xvclN0b3A+OjppdGVyYXRvciBzdG9wSXRlcmF0b3IgPSBtX3N0b3BzLmJlZ2luKCk7CiAg
ICAgd2hpbGUgKHN0b3BJdGVyYXRvciAhPSBtX3N0b3BzLmVuZCgpKSB7CisgICAgICAgIHByaW50
ZigiJWYsICVmLCAlZiwgJWZcbiIsc3RvcEl0ZXJhdG9yLT5zdG9wLCBzdG9wSXRlcmF0b3ItPnJl
ZCwgc3RvcEl0ZXJhdG9yLT5ncmVlbiwgc3RvcEl0ZXJhdG9yLT5ibHVlLCBzdG9wSXRlcmF0b3It
PmFscGhhKTsKICAgICAgICAgY2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKG1fZ3Jh
ZGllbnQsIHN0b3BJdGVyYXRvci0+c3RvcCwgc3RvcEl0ZXJhdG9yLT5yZWQsIHN0b3BJdGVyYXRv
ci0+Z3JlZW4sIHN0b3BJdGVyYXRvci0+Ymx1ZSwgc3RvcEl0ZXJhdG9yLT5hbHBoYSk7CiAgICAg
ICAgICsrc3RvcEl0ZXJhdG9yOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lv
biAzNTg4OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250
ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjZWxpZiBQTEFU
Rk9STShXSU4pCiAjaW5jbHVkZSA8Y2Fpcm8td2luMzIuaD4KICNlbmRpZgorI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGVDYWlyby5oIgogCiAjaWZuZGVmIE1fUEkKQEAgLTM1NSwxMyArMzU2LDk0IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbigKICAgICBjYWlyb19yZXN0b3Jl
KGNyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEludFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0
aCgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKGNvbG9yLmFscGhhKCkpCi0gICAgICAgIGZpbGxSZWN0U291cmNlT3ZlcihtX2RhdGEt
PmNyLCByZWN0LCBjb2xvcik7CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOworCisgICAg
c3dpdGNoIChtX2NvbW1vbi0+c3RhdGUuZmlsbENvbG9yU3BhY2UpIHsKKyAgICBjYXNlIFNvbGlk
Q29sb3JTcGFjZToKKyAgICAgICAgaWYgKGZpbGxDb2xvcigpLmFscGhhKCkpIHsKKyAgICAgICAg
ICAgIHNldENvbG9yKGNyLCBmaWxsQ29sb3IoKSk7CisgICAgICAgICAgICBjYWlyb19maWxsKGNy
KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhdHRlcm5Db2xvclNwYWNl
OgorICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRl
cm4uZ2V0KCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSkpOworICAgICAgICBjYWly
b19maWxsKGNyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFkaWVudENvbG9yU3BhY2U6
CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGll
bnQuZ2V0KCktPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAgIGNhaXJvX2ZpbGwoY3IpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQ
YXRoKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CisKKyAgICBzd2l0Y2ggKG1fY29tbW9uLT5z
dGF0ZS5zdHJva2VDb2xvclNwYWNlKSB7CisgICAgY2FzZSBTb2xpZENvbG9yU3BhY2U6CisgICAg
ICAgIGlmIChzdHJva2VDb2xvcigpLmFscGhhKCkpIHsKKyAgICAgICAgICAgIHNldENvbG9yKGNy
LCBzdHJva2VDb2xvcigpKTsKKyAgICAgICAgICAgIGNhaXJvX3N0cm9rZShjcik7CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXR0ZXJuQ29sb3JTcGFjZToKKyAgICAgICAg
Y2Fpcm9fc2V0X3NvdXJjZShjciwgbV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkt
PmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSkpOworICAgICAgICBjYWlyb19zdHJva2Uo
Y3IpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZToKKyAgICAg
ICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50Lmdl
dCgpLT5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAgICAgICBjYWlyb19zdHJva2UoY3IpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
ICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCgp
IHsKKyAgICBmaWxsUGF0aCgpOworICAgIHN0cm9rZVBhdGgoKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWlyb190KiBjciA9IG1f
ZGF0YS0+Y3I7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByZWN0LngoKSwgcmVjdC55KCksIHJl
Y3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisKKyAgICBzd2l0Y2ggKG1fY29tbW9uLT5zdGF0
ZS5maWxsQ29sb3JTcGFjZSkgeworICAgIGNhc2UgU29saWRDb2xvclNwYWNlOgorICAgICAgICBp
ZiAoZmlsbENvbG9yKCkuYWxwaGEoKSkgeworICAgICAgICAgICAgc2V0Q29sb3IoY3IsIGZpbGxD
b2xvcigpKTsKKyAgICAgICAgICAgIGNhaXJvX2ZpbGwoY3IpOworICAgICAgICB9CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUGF0dGVybkNvbG9yU3BhY2U6CisgICAgICAgIGNhaXJvX3NldF9z
b3VyY2UoY3IsIG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi5nZXQoKS0+Y3JlYXRlUGxhdGZv
cm1QYXR0ZXJuKGdldENUTSgpKSk7CisgICAgICAgIGNhaXJvX2ZpbGwoY3IpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZToKKyAgICAgICAgY2Fpcm9fc2V0X3Nv
dXJjZShjciwgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC5nZXQoKS0+cGxhdGZvcm1HcmFk
aWVudCgpKTsKKyAgICAgICAgY2Fpcm9fZmlsbChjcik7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
IH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtNDk3LDMzICs1NzksMTYgQEAgSW50UG9pbnQgR3Jh
cGhpY3NDb250ZXh0OjpvcmlnaW4oKQogICAgIHJldHVybiBJbnRQb2ludChzdGF0aWNfY2FzdDxp
bnQ+KG1hdHJpeC54MCksIHN0YXRpY19jYXN0PGludD4obWF0cml4LnkwKSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oY29uc3QgUGF0dGVybiYgcGF0dGVy
bikKLXsKLSAgICBjYWlyb19wYXR0ZXJuX3QqIHBsYXRmb3JtUGF0dGVybiA9IHBhdHRlcm4uY3Jl
YXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKTsKLSAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgY2Fpcm9fc2V0X3NvdXJjZShwbGF0Zm9ybUNvbnRleHQo
KSwgcGxhdGZvcm1QYXR0ZXJuKTsKLSAgICBjYWlyb19wYXR0ZXJuX2Rlc3Ryb3kocGxhdGZvcm1Q
YXR0ZXJuKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oY29u
c3QgUGF0dGVybiYgcGF0dGVybikKLXsKLSAgICAvLyBUaGUgQ2Fpcm8gY29kZXBhdGggZG9lc24n
dCBzZWVtIHRvIHN1cHBvcnQgc2VwYXJhdGUgc3Ryb2tlL2ZpbGw/Ci0gICAgLy8gVGhlIGNvZGUg
SSByZWZhY3RvcmVkIHRvIGNyZWF0ZSB0aGVzZSBtZXRob2RzIHdhcyBpZGVudGljYWwgZm9yIENh
aXJvCi0gICAgYXBwbHlTdHJva2VQYXR0ZXJuKHBhdHRlcm4pOwotfQotCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImIGNvbCkKIHsKLSAgICAv
LyBGSVhNRTogdGhpcyBpcyBwcm9iYWJseSBhIG5vLW9wIGJ1dCBJJ20gbm90IHN1cmUKLSAgICAv
LyBub3RJbXBsZW1lbnRlZCgpOyAvLyBjb21tZW50ZWQtb3V0IGJlY2F1c2UgaXQncyBjaGF0dHkg
YW5kIGNsdXR0ZXJzIG91dHB1dAorICAgIC8vIENhaXJvIGNvbnRleHRzIGNhbid0IGhvbGQgc2Vw
YXJhdGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycworICAgIC8vIHNvIHdlIHNldCB0aGVtIGp1c3Qg
YmVmb3JlIHdlIGFjdHVhbGx5IGZpbGwgb3Igc3Ryb2tlCiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2wpCiB7Ci0gICAgLy8g
RklYTUU6IHRoaXMgaXMgcHJvYmFibHkgYSBuby1vcCBidXQgSSdtIG5vdCBzdXJlCi0gICAgLy9u
b3RJbXBsZW1lbnRlZCgpOyAvLyBjb21tZW50ZWQtb3V0IGJlY2F1c2UgaXQncyBjaGF0dHkgYW5k
IGNsdXR0ZXJzIG91dHB1dAorICAgIC8vIENhaXJvIGNvbnRleHRzIGNhbid0IGhvbGQgc2VwYXJh
dGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycworICAgIC8vIHNvIHdlIHNldCB0aGVtIGp1c3QgYmVm
b3JlIHdlIGFjdHVhbGx5IGZpbGwgb3Igc3Ryb2tlCiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCBzdHJva2VUaGlja25lc3MpCkBAIC02
NjMsMTIgKzcyOCwyOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBG
CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKLSAgICBj
YWlyb19zYXZlKGNyKTsKICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHJlY3QueCgpLCByZWN0Lnko
KSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBzZXRDb2xvcihjciwgc3Ryb2tl
Q29sb3IoKSk7CiAgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY3IsIHdpZHRoKTsKLSAgICBjYWly
b19zdHJva2UoY3IpOwotICAgIGNhaXJvX3Jlc3RvcmUoY3IpOworCisgICAgc3dpdGNoIChtX2Nv
bW1vbi0+c3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSkgeworICAgIGNhc2UgU29saWRDb2xvclNwYWNl
OgorICAgICAgICBpZiAoc3Ryb2tlQ29sb3IoKS5hbHBoYSgpKSB7CisgICAgICAgICAgICBzZXRD
b2xvcihjciwgc3Ryb2tlQ29sb3IoKSk7CisgICAgICAgICAgICBjYWlyb19zdHJva2UoY3IpOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGF0dGVybkNvbG9yU3BhY2U6Cisg
ICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJu
LmdldCgpLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpKTsKKyAgICAgICAgY2Fpcm9f
ZmlsbChjcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgor
ICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGll
bnQuZ2V0KCktPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAgIGNhaXJvX3N0cm9rZShjcik7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVDYXAoTGluZUNhcCBsaW5lQ2FwKQpAQCAtOTExLDYgKzk5MiwxNSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0VXNlQW50aWFsaWFzaW5nCiAgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhtX2Rh
dGEtPmNyLCBlbmFibGUgPyBDQUlST19BTlRJQUxJQVNfREVGQVVMVCA6IENBSVJPX0FOVElBTElB
U19OT05FKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpCit7Cit9CisKK0ludGVycG9sYXRpb25RdWFs
aXR5IEdyYXBoaWNzQ29udGV4dDo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIEludGVycG9sYXRpb25EZWZhdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBQTEFURk9STShDQUlSTykKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCShyZXZpc2lvbiAz
NTg4OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlQ0cuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIktVUkwuaCIK
QEAgLTM5MiwxOCArMzkzLDgxIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9s
eWdvbigKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKCkKIHsKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKGNvbG9yLmFscGhhKCkp
IHsKLSAgICAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLSAg
ICAgICAgQ29sb3Igb2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7Ci0gICAgICAgIGlmIChvbGRG
aWxsQ29sb3IgIT0gY29sb3IpCi0gICAgICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBj
b2xvcik7Ci0gICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIHJlY3QpOwotICAgICAg
ICBpZiAob2xkRmlsbENvbG9yICE9IGNvbG9yKQotICAgICAgICAgICAgc2V0Q0dGaWxsQ29sb3Io
Y29udGV4dCwgb2xkRmlsbENvbG9yKTsKKworICAgIC8vIFdlIHNob3VsZCBpbnZlc3RpZ2F0ZSB1
c2luZyBDR0NvbnRleHREcmF3UGF0aCBmb3IgcG9zc2libGUgb3B0aW1pemF0aW9uCisgICAgZmls
bFBhdGgoKTsKKyAgICBzdHJva2VQYXRoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUGF0aCgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBz
d2l0Y2ggKG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3JTcGFjZSkgeworICAgIGNhc2UgU29saWRD
b2xvclNwYWNlOgorICAgICAgICBpZiAoIWZpbGxDb2xvcigpLmFscGhhKCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgIGNhc2UgUGF0dGVybkNvbG9y
U3BhY2U6CisgICAgICAgIGlmIChtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGUgPT0gUlVMRV9FVkVO
T0REKQorICAgICAgICAgICAgQ0dDb250ZXh0RU9GaWxsUGF0aChjb250ZXh0KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgQ0dDb250ZXh0RmlsbFBhdGgoY29udGV4dCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgorICAgICAgICBpZiAobV9jb21tb24t
PnN0YXRlLmZpbGxSdWxlID09IFJVTEVfRVZFTk9ERCkKKyAgICAgICAgICAgIENHQ29udGV4dEVP
Q2xpcChjb250ZXh0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQ0dDb250ZXh0Q2xpcChj
b250ZXh0KTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgbV9jb21tb24t
PnN0YXRlLmZpbGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aCgpCit7CisgICAg
aWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dDb250ZXh0
UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBzd2l0Y2ggKG1fY29tbW9uLT5z
dGF0ZS5zdHJva2VDb2xvclNwYWNlKSB7CisgICAgY2FzZSBTb2xpZENvbG9yU3BhY2U6CisgICAg
ICAgIGlmICghZmlsbENvbG9yKCkuYWxwaGEoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgLy8gZmFsbCB0aHJvdWdoCisgICAgY2FzZSBQYXR0ZXJuQ29sb3JTcGFjZToKKyAgICAgICAg
Q0dDb250ZXh0U3Ryb2tlUGF0aChjb250ZXh0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
cmFkaWVudENvbG9yU3BhY2U6CisgICAgICAgIENHQ29udGV4dFJlcGxhY2VQYXRoV2l0aFN0cm9r
ZWRQYXRoKGNvbnRleHQpOworICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOworICAgICAg
ICBDR0NvbnRleHREcmF3U2hhZGluZyhjb250ZXh0LCBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRp
ZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7Cisg
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHN3aXRjaCAo
bV9jb21tb24tPnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UpIHsKKyAgICBjYXNlIFNvbGlkQ29sb3JT
cGFjZToKKyAgICAgICAgaWYgKGZpbGxDb2xvcigpLmFscGhhKCkpCisgICAgICAgICAgICBDR0Nv
bnRleHRGaWxsUmVjdChwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUGF0dGVybkNvbG9yU3BhY2U6CisgICAgICAgIENHQ29udGV4dEZpbGxSZWN0KHBs
YXRmb3JtQ29udGV4dCgpLCByZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFkaWVu
dENvbG9yU3BhY2U6CisgICAgICAgIGNsaXAocmVjdCk7CisgICAgICAgIENHQ29udGV4dERyYXdT
aGFkaW5nKHBsYXRmb3JtQ29udGV4dCgpLCBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5w
bGF0Zm9ybUdyYWRpZW50KCkpOworICAgICAgICBicmVhazsKICAgICB9CiB9CiAKQEAgLTQzOSw3
ICs1MDMsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KGNvCiAgICAg
ICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIG9sZEZpbGxDb2xvcik7CiB9CiAKLQogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCkBAIC05MTAsOSArOTczLDExIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybVRleHREcmEKICAgICB9CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjphcHBseVN0cm9rZVBhdHRlcm4oY29uc3QgUGF0dGVybiYgcGF0dGVybikKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVBhdHRlcm4oUGF0dGVybiogcGF0dGVybikKIHsK
LSAgICBDR1BhdHRlcm5SZWYgcGxhdGZvcm1QYXR0ZXJuID0gcGF0dGVybi5jcmVhdGVQbGF0Zm9y
bVBhdHRlcm4oZ2V0Q1RNKCkpOworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBDR1BhdHRlcm5SZWYgcGxhdGZvcm1QYXR0ZXJuID0gcGF0dGVybi0+Y3Jl
YXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKTsKICAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikK
ICAgICAgICAgcmV0dXJuOwogCkBAIC05MjUsOSArOTkwLDExIEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4KICAgICBDR1BhdHRlcm5SZWxlYXNlKHBsYXRmb3JtUGF0
dGVybik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKGNvbnN0
IFBhdHRlcm4mIHBhdHRlcm4pCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxs
UGF0dGVybihQYXR0ZXJuKiBwYXR0ZXJuKQogewotICAgIENHUGF0dGVyblJlZiBwbGF0Zm9ybVBh
dHRlcm4gPSBwYXR0ZXJuLmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSk7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIENHUGF0dGVyblJlZiBw
bGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkp
OwogICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQogICAgICAgICByZXR1cm47CiAKQEAgLTk0MCw2
ICsxMDA3LDE4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKGMKICAg
ICBDR1BhdHRlcm5SZWxlYXNlKHBsYXRmb3JtUGF0dGVybik7CiB9CiAKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUdyYWRpZW50KEdyYWRpZW50KikKK3sKKyAgICAvLyBD
b3JlR3JhcGhpY3MgZG9lcyBub3Qgc3VwcG9ydCBzZXR0aW5nIGEgInN0cm9rZSBncmFkaWVudCIs
IG9ubHkKKyAgICAvLyBmaWxsaW5nIGEgY2xpcCByZWdpb24gd2l0aCBhIGdyYWRpZW50LCB3aGlj
aCB3ZSBkbyBhdCBkcmF3IHRpbWUKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtRmlsbEdyYWRpZW50KEdyYWRpZW50KikKK3sKKyAgICAvLyBDb3JlR3JhcGhpY3MgZG9lcyBu
b3Qgc3VwcG9ydCBzZXR0aW5nIGEgImZpbGwgZ3JhZGllbnQiLCBvbmx5CisgICAgLy8gZmlsbGlu
ZyBhIGNsaXAgcmVnaW9uIHdpdGggYSBncmFkaWVudCwgd2hpY2ggd2UgZG8gYXQgZHJhdyB0aW1l
Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0
IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJ
KHJldmlzaW9uIDM1ODg5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGlj
c0NvbnRleHRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0OSw2ICs4NDksMTEgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmNsaXBPdXRFbGxpcHNlSW5SZQogICAgIHAtPnNldENsaXBQYXRoKG5l
d0NsaXAsIFF0OjpJbnRlcnNlY3RDbGlwKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlQnVmZmVyKikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5u
ZXJSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGhpY2tuZXNzKQogewpAQCAtOTI2LDIw
ICs5MzEsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sCiAgICAg
bV9kYXRhLT5wKCktPnNldEJydXNoKFFCcnVzaChjb2xvcikpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mIHBhdHRlcm4pCi17Ci0g
ICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG5vdEltcGxl
bWVudGVkKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKGNv
bnN0IFBhdHRlcm4mIHBhdHRlcm4pCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRVc2VBbnRpYWxpYXNpbmcoYm9vbCBlbmFibGUpCiB7CiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKQEAgLTEwMzMsNiArMTAyNCwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6cmVsZWFzZVdpbmRvd3NDb250CiB9CiAjZW5kaWYKIAordm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpCit7Cit9
CisKK0ludGVycG9sYXRpb25RdWFsaXR5IEdyYXBoaWNzQ29udGV4dDo6aW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEludGVycG9sYXRpb25EZWZhdWx0Owor
fQorCiB9CiAKIC8vIHZpbTogdHM9NCBzdz00IGV0CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAkocmV2aXNpb24gMzU4ODkp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3d4L0dyYXBoaWNzQ29udGV4dFd4LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzU0LDYgKzM1NCwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcChjb25zdCBQYXRoJikgCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IElt
YWdlQnVmZmVyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiBBZmZpbmVUcmFuc2Zv
cm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oKSBjb25zdAogeyAKICAgICBub3RJbXBsZW1lbnRl
ZCgpOwpAQCAtNDc2LDE4ICs0ODEsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVzZUFu
dGlhbGlhc2luZwogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0OjphcHBseUZpbGxQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mKQordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpCiB7
Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIG5vdElt
cGxlbWVudGVkKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRl
cm4oY29uc3QgUGF0dGVybiYpCitJbnRlcnBvbGF0aW9uUXVhbGl0eSBHcmFwaGljc0NvbnRleHQ6
OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdAogewotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiBJbnRlcnBvbGF0aW9uRGVmYXVsdDsKIH0KIAogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22984</attachid>
            <date>2008-08-25 11:47:37 -0700</date>
            <delta_ts>2008-08-27 05:40:07 -0700</delta_ts>
            <desc>Qt implementation</desc>
            <filename>Canvas-Qt.patch</filename>
            <type>text/plain</type>
            <size>5283</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250
ZXh0UXQuY3BwCShyZXZpc2lvbiAzNTg4OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBA
CiAjaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oIgogI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIlBlbi5o
IgpAQCAtNDk1LDEyICs0OTYsODAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQ
b2x5Z29uKAogICAgIHAtPnJlc3RvcmUoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxQYXRoKCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX2RhdGEtPnAoKS0+ZmlsbFJlY3QocmVjdCwgUUNvbG9yKGMp
KTsKKyAgICBRUGFpbnRlciAqcCA9IG1fZGF0YS0+cCgpOworICAgIFFQYWludGVyUGF0aCBwYXRo
ID0gbV9kYXRhLT5jdXJyZW50UGF0aDsKKworICAgIHN3aXRjaCAobV9jb21tb24tPnN0YXRlLmZp
bGxDb2xvclNwYWNlKSB7CisgICAgY2FzZSBTb2xpZENvbG9yU3BhY2U6CisgICAgICAgIGlmIChm
aWxsQ29sb3IoKS5hbHBoYSgpKQorICAgICAgICAgICAgcC0+ZmlsbFBhdGgocGF0aCwgcC0+YnJ1
c2goKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGF0dGVybkNvbG9yU3BhY2U6CisgICAg
ICAgIHAtPmZpbGxQYXRoKHBhdGgsIFFCcnVzaCgqKG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVy
bi5nZXQoKS0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKSkpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHcmFkaWVudENvbG9yU3BhY2U6CisgICAgICAgIHAtPmZpbGxQYXRoKHBh
dGgsIFFCcnVzaCgqKG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCktPnBsYXRmb3Jt
R3JhZGllbnQoKSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c3Ryb2tlUGF0aCgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgUVBhaW50ZXIgKnAgPSBtX2RhdGEtPnAoKTsKKyAgICBRUGFp
bnRlclBhdGggcGF0aCA9IG1fZGF0YS0+Y3VycmVudFBhdGg7CisKKyAgICBzd2l0Y2ggKG1fY29t
bW9uLT5zdGF0ZS5zdHJva2VDb2xvclNwYWNlKSB7CisgICAgY2FzZSBTb2xpZENvbG9yU3BhY2U6
CisgICAgICAgIGlmIChzdHJva2VDb2xvcigpLmFscGhhKCkpCisgICAgICAgICAgICBwLT5zdHJv
a2VQYXRoKHBhdGgsIHAtPnBlbigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXR0ZXJu
Q29sb3JTcGFjZToKKyAgICAgICAgcC0+c2V0QnJ1c2goKihtX2NvbW1vbi0+c3RhdGUuc3Ryb2tl
UGF0dGVybi5nZXQoKS0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKSkpOworICAgICAg
ICBwLT5zdHJva2VQYXRoKHBhdGgsIHAtPnBlbigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHcmFkaWVudENvbG9yU3BhY2U6CisgICAgICAgIHAtPnNldEJydXNoKCoobV9jb21tb24tPnN0
YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpLT5wbGF0Zm9ybUdyYWRpZW50KCkpKTsKKyAgICAgICAg
cC0+c3Ryb2tlUGF0aChwYXRoLCBwLT5wZW4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkK
K3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBR
UGFpbnRlciAqcCA9IG1fZGF0YS0+cCgpOworCisgICAgc3dpdGNoIChtX2NvbW1vbi0+c3RhdGUu
ZmlsbENvbG9yU3BhY2UpIHsKKyAgICBjYXNlIFNvbGlkQ29sb3JTcGFjZToKKyAgICAgICAgaWYg
KGZpbGxDb2xvcigpLmFscGhhKCkpCisgICAgICAgICAgICBwLT5maWxsUmVjdChyZWN0LCBwLT5i
cnVzaCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXR0ZXJuQ29sb3JTcGFjZToKKyAg
ICAgICAgcC0+ZmlsbFJlY3QocmVjdCwgUUJydXNoKCoobV9jb21tb24tPnN0YXRlLmZpbGxQYXR0
ZXJuLmdldCgpLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpKSkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZToKKyAgICAgICAgcC0+ZmlsbFJlY3Qo
cmVjdCwgUUJydXNoKCoobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC5nZXQoKS0+cGxhdGZv
cm1HcmFkaWVudCgpKSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBj
KQpAQCAtNzEwLDcgKzc3OSwyNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChj
b25zdCBGCiAgICAgcGF0aC5hZGRSZWN0KHJlY3QpOwogICAgIFFQZW4gblBlbiA9IHAtPnBlbigp
OwogICAgIG5QZW4uc2V0V2lkdGhGKHdpZHRoKTsKLSAgICBwLT5zdHJva2VQYXRoKHBhdGgsIG5Q
ZW4pOworCisgICAgc3dpdGNoIChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSkgewor
ICAgIGNhc2UgU29saWRDb2xvclNwYWNlOgorICAgICAgICBpZiAoc3Ryb2tlQ29sb3IoKS5hbHBo
YSgpKQorICAgICAgICAgICAgcC0+c3Ryb2tlUGF0aChwYXRoLCBuUGVuKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQYXR0ZXJuQ29sb3JTcGFjZToKKyAgICAgICAgcC0+c2V0QnJ1c2goKiht
X2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKS0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJu
KGdldENUTSgpKSkpOworICAgICAgICBwLT5zdHJva2VQYXRoKHBhdGgsIG5QZW4pOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZToKKyAgICAgICAgcC0+c2V0QnJ1
c2goKihtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCktPnBsYXRmb3JtR3JhZGll
bnQoKSkpOworICAgICAgICBwLT5zdHJva2VQYXRoKHBhdGgsIG5QZW4pOworICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBicmVh
azsKKyAgICB9CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAg
bGMpCkBAIC04NDksNiArOTM1LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0RWxs
aXBzZUluUmUKICAgICBwLT5zZXRDbGlwUGF0aChuZXdDbGlwLCBRdDo6SW50ZXJzZWN0Q2xpcCk7
CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9h
dFJlY3QmLCBjb25zdCBJbWFnZUJ1ZmZlciopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlY3RDbGlwKGNvbnN0IElu
dFJlY3QmIHJlY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IHRoaWNrbmVzcykKIHsKQEAgLTkwOSw2ICsxMDAwLDIyIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVMKICAgICBwLT5zZXRQZW4obmV3UGVuKTsKIH0KIAor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbFBhdHRlcm4oUGF0dGVybiogcGF0
dGVybikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlUGF0
dGVybihQYXR0ZXJuKiBwYXR0ZXJuKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1GaWxsR3JhZGllbnQoR3JhZGllbnQqIGdyYWRpZW50KQoreworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VHcmFkaWVudChHcmFkaWVudCogZ3JhZGll
bnQpCit7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNr
bmVzcyhmbG9hdCB0aGlja25lc3MpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAg
LTkyNiwyMCArMTAzMyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxD
b2wKICAgICBtX2RhdGEtPnAoKS0+c2V0QnJ1c2goUUJydXNoKGNvbG9yKSk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4oY29uc3QgUGF0dGVybiYgcGF0dGVy
bikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAg
bm90SW1wbGVtZW50ZWQoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBh
dHRlcm4oY29uc3QgUGF0dGVybiYgcGF0dGVybikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFVzZUFudGlhbGlhc2luZyhib29sIGVuYWJsZSkKIHsKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtMTAzMyw2ICsxMTI2LDE1IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpyZWxlYXNlV2luZG93c0NvbnQKIH0KICNlbmRpZgogCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0
eSkKK3sKK30KKworSW50ZXJwb2xhdGlvblF1YWxpdHkgR3JhcGhpY3NDb250ZXh0OjppbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50ZXJwb2xhdGlvbkRl
ZmF1bHQ7Cit9CisKIH0KIAogLy8gdmltOiB0cz00IHN3PTQgZXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23000</attachid>
            <date>2008-08-26 06:14:49 -0700</date>
            <delta_ts>2008-08-27 05:40:15 -0700</delta_ts>
            <desc>Fixes Cg</desc>
            <filename>All-in-one.patch</filename>
            <type>text/plain</type>
            <size>97101</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzU4ODkpCisrKyBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjM4LDkgKzE2MzgsNiBAQAogCQkJcHJvZHVjdFJlZkdyb3VwID0gMDM0NzY4REZGRjM4QTUw
NDExREI5QzhCIC8qIFByb2R1Y3RzICovOwogCQkJcHJvamVjdERpclBhdGggPSAiIjsKIAkJCXBy
b2plY3RSb290ID0gIiI7Ci0JCQlwcm9qZWN0Um9vdHMgPSAoCi0JCQkJIiIsCi0JCQkpOwogCQkJ
dGFyZ2V0cyA9ICgKIAkJCQk5MzJGNUJFMzA4MjJBMUM3MDA3MzY5NzUgLyogQWxsICovLAogCQkJ
CTkzMkY1QjNFMDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0Q29yZSAqLywKSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzNTg4OSkK
KysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjkyLDYgKzIyOTIsNyBAQAogCQlBODhBRDUyRjA5NTI0QjkyMDAxREQxOTYgLyog
UXVhcnR6Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBODVEN0EyRjA4NzlFQkE5MDA2QTkxNzIgLyogUXVhcnR6Q29yZS5mcmFt
ZXdvcmsgKi87IH07CiAJCUE4OERENDg3MEI0NjI5QTMwMEMwMjk5MCAvKiBQYXRoVHJhdmVyc2Fs
U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4
OERENDg2MEI0NjI5QTMwMEMwMjk5MCAvKiBQYXRoVHJhdmVyc2FsU3RhdGUuaCAqLzsgfTsKIAkJ
QTg4REQ0ODkwQjQ2MjlCMDAwQzAyOTkwIC8qIFBhdGhUcmF2ZXJzYWxTdGF0ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODhERDQ4ODBCNDYyOUIw
MDBDMDI5OTAgLyogUGF0aFRyYXZlcnNhbFN0YXRlLmNwcCAqLzsgfTsKKwkJQTg4RkUzMzQwRTVF
RUU4NzAwOEQ4QzBGIC8qIEdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4OEZFMzMzMEU1RUVFODcwMDhEOEMwRiAv
KiBHcmFwaGljc0NvbnRleHRQcml2YXRlLmggKi87IH07CiAJCUE4OTk0MzI4MEI0MjMzODgwMEQ3
QzgwMiAvKiBCaXRtYXBJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQTg5OTQzMjYwQjQyMzM4NzAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmggKi87
IH07CiAJCUE4OTk0MzI5MEI0MjMzODgwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODk5NDMyNzBCNDIzMzg3
MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwICovOyB9OwogCQlBOEE5MDlBQzBDQkNENkI1MDAy
OUI4MDcgLyogUmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBOTA5QUEwQ0JDRDZCNTAwMjlCODA3
IC8qIFJlbmRlclNWR1RyYW5zZm9ybWFibGVDb250YWluZXIuaCAqLzsgfTsKQEAgLTY2NjEsNiAr
NjY2Miw3IEBACiAJCUE4NzFERkUxMEExNTM3NkIwMEIxMkE2OCAvKiBSZW5kZXJXaWRnZXQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlcldpZGdldC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4OERENDg2MEI0NjI5QTMwMEMwMjk5MCAv
KiBQYXRoVHJhdmVyc2FsU3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGF0aFRyYXZlcnNhbFN0YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4OERE
NDg4MEI0NjI5QjAwMEMwMjk5MCAvKiBQYXRoVHJhdmVyc2FsU3RhdGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGF0aFRyYXZlcnNhbFN0YXRlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTg4RkUzMzMwRTVFRUU4NzAwOEQ4QzBGIC8qIEdyYXBo
aWNzQ29udGV4dFByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODk5
NDMyNjBCNDIzMzg3MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQml0bWFwSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTg5OTQzMjcwQjQyMzM4NzAwRDdDODAyIC8qIEJpdG1hcEltYWdlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdG1hcEltYWdlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQThBOTA5QUEwQ0JDRDZCNTAwMjlCODA3IC8qIFJlbmRlclNWR1Ry
YW5zZm9ybWFibGVDb250YWluZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyU1ZHVHJhbnNmb3JtYWJsZUNvbnRhaW5lci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTIyMjAsNiArMTIyMjIsNyBAQAogCQkJCUIyQzNEQTVGMEQwMDZDRDYwMEVGNkYy
NiAvKiBHbHlwaFdpZHRoTWFwLmggKi8sCiAJCQkJQkM1M0M2MDcwREE1NkM1NzAwMjFFQjVEIC8q
IEdyYWRpZW50LmNwcCAqLywKIAkJCQlCQzUzQzVGNDBEQTU2QjkyMDAyMUVCNUQgLyogR3JhZGll
bnQuaCAqLywKKwkJCQlBODhGRTMzMzBFNUVFRTg3MDA4RDhDMEYgLyogR3JhcGhpY3NDb250ZXh0
UHJpdmF0ZS5oICovLAogCQkJCUIyQTAxNTkyMEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc0Nv
bnRleHQuY3BwICovLAogCQkJCUIyQTAxNTkzMEFGNkNENTMwMDZCQ0UwRSAvKiBHcmFwaGljc0Nv
bnRleHQuaCAqLywKIAkJCQlCMkEwMTU5NDBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NUeXBl
cy5jcHAgKi8sCkBAIC0xNTQzNyw2ICsxNTQ0MCw3IEBACiAJCQkJMjlBQUM1MUYwRTUzOTYzQjAw
OEY5QjNCIC8qIEFjY2Vzc2liaWxpdHlUYWJsZUhlYWRlckNvbnRhaW5lci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDhBNDg0NzgwRTUyNzJDNTAwQzNGRTc2IC8qIFNjcmlwdEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4RkE2RTVEMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggaW4g
SGVhZGVycyAqLywKKwkJCQlBODhGRTMzNDBFNUVFRTg3MDA4RDhDMEYgLyogR3JhcGhpY3NDb250
ZXh0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pT
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNp
b24gMzU4ODkpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsOCArNDQsOCBAQCBzdGF0aWMgSlNW
YWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4ZWMsIENhCiB7CiAgICAgaWYgKHN0eWxlLT5jYW52YXNH
cmFkaWVudCgpKQogICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBzdHlsZS0+Y2FudmFzR3JhZGll
bnQoKSk7Ci0gICAgaWYgKHN0eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgIHJldHVybiB0b0pTKGV4
ZWMsIHN0eWxlLT5wYXR0ZXJuKCkpOworICAgIGlmIChzdHlsZS0+Y2FudmFzUGF0dGVybigpKQor
ICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBzdHlsZS0+Y2FudmFzUGF0dGVybigpKTsKICAgICBy
ZXR1cm4ganNTdHJpbmcoZXhlYywgc3R5bGUtPmNvbG9yKCkpOwogfQogCkluZGV4OiBXZWJDb3Jl
L2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NH
cmFkaWVudFZhbHVlLmNwcAkocmV2aXNpb24gMzU4ODkpCisrKyBXZWJDb3JlL2Nzcy9DU1NHcmFk
aWVudFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBTdHJpbmcgQ1NT
R3JhZGllbnRWYWx1ZTo6Y3NzVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAot
R3JhZGllbnQqIENTU0dyYWRpZW50VmFsdWU6OmNyZWF0ZUdyYWRpZW50KFJlbmRlck9iamVjdCog
cmVuZGVyZXIsIGNvbnN0IEludFNpemUmIHNpemUpCitQYXNzUmVmUHRyPEdyYWRpZW50PiBDU1NH
cmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25z
dCBJbnRTaXplJiBzaXplKQogewogICAgIEFTU0VSVCghc2l6ZS5pc0VtcHR5KCkpOwogICAgIApA
QCAtODAsMTMgKzgwLDEzIEBAIEdyYWRpZW50KiBDU1NHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFk
aWUKICAgICBGbG9hdFBvaW50IGZpcnN0UG9pbnQgPSByZXNvbHZlUG9pbnQobV9maXJzdFguZ2V0
KCksIG1fZmlyc3RZLmdldCgpLCBzaXplLCB6b29tRmFjdG9yKTsKICAgICBGbG9hdFBvaW50IHNl
Y29uZFBvaW50ID0gcmVzb2x2ZVBvaW50KG1fc2Vjb25kWC5nZXQoKSwgbV9zZWNvbmRZLmdldCgp
LCBzaXplLCB6b29tRmFjdG9yKTsKICAgICAKLSAgICBHcmFkaWVudCogZ3JhZGllbnQgPSAwOwor
ICAgIFJlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQ7CiAgICAgaWYgKG1fdHlwZSA9PSBDU1NMaW5l
YXJHcmFkaWVudCkKLSAgICAgICAgZ3JhZGllbnQgPSBuZXcgR3JhZGllbnQoZmlyc3RQb2ludCwg
c2Vjb25kUG9pbnQpOworICAgICAgICBncmFkaWVudCA9IEdyYWRpZW50OjpjcmVhdGUoZmlyc3RQ
b2ludCwgc2Vjb25kUG9pbnQpOwogICAgIGVsc2UgewogICAgICAgICBmbG9hdCBmaXJzdFJhZGl1
cyA9IHJlc29sdmVSYWRpdXMobV9maXJzdFJhZGl1cy5nZXQoKSwgem9vbUZhY3Rvcik7CiAgICAg
ICAgIGZsb2F0IHNlY29uZFJhZGl1cyA9IHJlc29sdmVSYWRpdXMobV9zZWNvbmRSYWRpdXMuZ2V0
KCksIHpvb21GYWN0b3IpOwotICAgICAgICBncmFkaWVudCA9IG5ldyBHcmFkaWVudChmaXJzdFBv
aW50LCBmaXJzdFJhZGl1cywgc2Vjb25kUG9pbnQsIHNlY29uZFJhZGl1cyk7CisgICAgICAgIGdy
YWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0ZShmaXJzdFBvaW50LCBmaXJzdFJhZGl1cywgc2Vjb25k
UG9pbnQsIHNlY29uZFJhZGl1cyk7CiAgICAgfQogCiAgICAgLy8gTm93IGFkZCB0aGUgc3RvcHMu
CkBAIC0xMDEsNyArMTAxLDcgQEAgR3JhZGllbnQqIENTU0dyYWRpZW50VmFsdWU6OmNyZWF0ZUdy
YWRpZQogICAgIC8vIFRoZSBiYWNrIGVuZCBhbHJlYWR5IHNvcnRlZCB0aGUgc3RvcHMuCiAgICAg
Z3JhZGllbnQtPnNldFN0b3BzU29ydGVkKHRydWUpOwogCi0gICAgcmV0dXJuIGdyYWRpZW50Owor
ICAgIHJldHVybiBncmFkaWVudC5yZWxlYXNlKCk7CiB9CiAKIEltYWdlKiBDU1NHcmFkaWVudFZh
bHVlOjppbWFnZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQpJ
bmRleDogV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuaAkocmV2aXNpb24gMzU4ODkpCisrKyBXZWJDb3JlL2Nz
cy9DU1NHcmFkaWVudFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDcgKzgyLDcgQEAgcHJp
dmF0ZToKICAgICB9CiAgICAgCiAgICAgLy8gQ3JlYXRlIHRoZSBncmFkaWVudCBmb3IgYSBnaXZl
biBzaXplLgotICAgIEdyYWRpZW50KiBjcmVhdGVHcmFkaWVudChSZW5kZXJPYmplY3QqLCBjb25z
dCBJbnRTaXplJik7CisgICAgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlR3JhZGllbnQoUmVu
ZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpOwogICAgIAogICAgIC8vIFJlc29sdmUgcG9pbnRz
L3JhZGlpIHRvIGZyb250IGVuZCB2YWx1ZXMuCiAgICAgRmxvYXRQb2ludCByZXNvbHZlUG9pbnQo
Q1NTUHJpbWl0aXZlVmFsdWUqLCBDU1NQcmltaXRpdmVWYWx1ZSosIGNvbnN0IEludFNpemUmLCBm
bG9hdCB6b29tRmFjdG9yKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNHcmFkaWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0NhbnZhc0dyYWRpZW50LmNwcAkocmV2aXNpb24g
MzU4ODkpCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFzR3JhZGllbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMiwxMiArMzIsMTIgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ2FudmFzR3JhZGll
bnQ6OkNhbnZhc0dyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50
JiBwMSkKLSAgICA6IG1fZ3JhZGllbnQocDAsIHAxKQorICAgIDogbV9ncmFkaWVudChHcmFkaWVu
dDo6Y3JlYXRlKHAwLCBwMSkpCiB7CiB9CiAKIENhbnZhc0dyYWRpZW50OjpDYW52YXNHcmFkaWVu
dChjb25zdCBGbG9hdFBvaW50JiBwMCwgZmxvYXQgcjAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBm
bG9hdCByMSkKLSAgICA6IG1fZ3JhZGllbnQocDAsIHIwLCBwMSwgcjEpCisgICAgOiBtX2dyYWRp
ZW50KEdyYWRpZW50OjpjcmVhdGUocDAsIHIwLCBwMSwgcjEpKQogewogfQogCkluZGV4OiBXZWJD
b3JlL2h0bWwvQ2FudmFzR3JhZGllbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2Fu
dmFzR3JhZGllbnQuaAkocmV2aXNpb24gMzU4ODkpCisrKyBXZWJDb3JlL2h0bWwvQ2FudmFzR3Jh
ZGllbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsMTcgKzQ2LDE3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzR3JhZGllbnQocDAs
IHIwLCBwMSwgcjEpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgR3JhZGllbnQmIGdy
YWRpZW50KCkgeyByZXR1cm4gbV9ncmFkaWVudDsgfQorICAgICAgICBHcmFkaWVudCogZ3JhZGll
bnQoKSBjb25zdCB7IHJldHVybiBtX2dyYWRpZW50LmdldCgpOyB9CiAKLSAgICAgICAgdm9pZCBh
ZGRDb2xvclN0b3AoZmxvYXQgdmFsdWUsIGNvbnN0IFN0cmluZyYgY29sb3IpIHsgbV9ncmFkaWVu
dC5hZGRDb2xvclN0b3AodmFsdWUsIGNvbG9yKTsgfQorICAgICAgICB2b2lkIGFkZENvbG9yU3Rv
cChmbG9hdCB2YWx1ZSwgY29uc3QgU3RyaW5nJiBjb2xvcikgeyBtX2dyYWRpZW50LT5hZGRDb2xv
clN0b3AodmFsdWUsIGNvbG9yKTsgfQogCi0gICAgICAgIHZvaWQgZ2V0Q29sb3IoZmxvYXQgdmFs
dWUsIGZsb2F0KiByLCBmbG9hdCogZywgZmxvYXQqIGIsIGZsb2F0KiBhKSBjb25zdCB7IG1fZ3Jh
ZGllbnQuZ2V0Q29sb3IodmFsdWUsIHIsIGcsIGIsIGEpOyB9CisgICAgICAgIHZvaWQgZ2V0Q29s
b3IoZmxvYXQgdmFsdWUsIGZsb2F0KiByLCBmbG9hdCogZywgZmxvYXQqIGIsIGZsb2F0KiBhKSBj
b25zdCB7IG1fZ3JhZGllbnQtPmdldENvbG9yKHZhbHVlLCByLCBnLCBiLCBhKTsgfQogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgQ2FudmFzR3JhZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNv
bnN0IEZsb2F0UG9pbnQmIHAxKTsKICAgICAgICAgQ2FudmFzR3JhZGllbnQoY29uc3QgRmxvYXRQ
b2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQgcjEpOwogICAg
ICAgICAKLSAgICAgICAgR3JhZGllbnQgbV9ncmFkaWVudDsKKyAgICAgICAgUmVmUHRyPEdyYWRp
ZW50PiBtX2dyYWRpZW50OwogICAgIH07CiAKIH0gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUv
aHRtbC9DYW52YXNQYXR0ZXJuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFz
UGF0dGVybi5jcHAJKHJldmlzaW9uIDM1ODg5KQorKysgV2ViQ29yZS9odG1sL0NhbnZhc1BhdHRl
cm4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgQ2FudmFzUGF0dGVy
bjo6cGFyc2VSZXBldGl0aW9uVHlwZSgKIH0KIAogQ2FudmFzUGF0dGVybjo6Q2FudmFzUGF0dGVy
bihJbWFnZSogaW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNs
ZWFuKQotICAgIDogbV9wYXR0ZXJuKGltYWdlLCByZXBlYXRYLCByZXBlYXRZKQorICAgIDogbV9w
YXR0ZXJuKFBhdHRlcm46OmNyZWF0ZShpbWFnZSwgcmVwZWF0WCwgcmVwZWF0WSkpCiAgICAgLCBt
X29yaWdpbkNsZWFuKG9yaWdpbkNsZWFuKQogewogfQpJbmRleDogV2ViQ29yZS9odG1sL0NhbnZh
c1BhdHRlcm4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5oCShy
ZXZpc2lvbiAzNTg4OSkKKysrIFdlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ1LDE1ICs0NSwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2FudmFzUGF0dGVybihpbWFnZSwgcmVw
ZWF0WCwgcmVwZWF0WSwgb3JpZ2luQ2xlYW4pKTsKICAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgY29uc3QgUGF0dGVybiYgcGF0dGVybigpIHsgcmV0dXJuIG1fcGF0dGVybjsgfQorCisgICAg
ICAgIFBhdHRlcm4qIHBhdHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3BhdHRlcm4uZ2V0KCk7IH0K
IAogICAgICAgICBib29sIG9yaWdpbkNsZWFuKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW5DbGVh
bjsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ2FudmFzUGF0dGVybihJbWFnZSosIGJvb2wg
cmVwZWF0WCwgYm9vbCByZXBlYXRZLCBib29sIG9yaWdpbkNsZWFuKTsKIAotICAgICAgICBQYXR0
ZXJuIG1fcGF0dGVybjsKKyAgICAgICAgUmVmUHRyPFBhdHRlcm4+IG1fcGF0dGVybjsKICAgICAg
ICAgYm9vbCBtX29yaWdpbkNsZWFuOwogICAgIH07CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiAzNTg4OSkKKysrIFdlYkNvcmUvaHRt
bC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEsOCAr
MTAxLDYgQEAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpTdGF0ZTo6U3RhdGUoKQogICAgICwg
bV9zaGFkb3dDb2xvcigiYmxhY2siKQogICAgICwgbV9nbG9iYWxBbHBoYSgxKQogICAgICwgbV9n
bG9iYWxDb21wb3NpdGUoQ29tcG9zaXRlU291cmNlT3ZlcikKLSAgICAsIG1fYXBwbGllZFN0cm9r
ZVBhdHRlcm4oZmFsc2UpCi0gICAgLCBtX2FwcGxpZWRGaWxsUGF0dGVybihmYWxzZSkKIHsKIH0K
IApAQCAtMTQxLDcgKzEzOSw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRT
dHJva2UKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKG1fY2FudmFzLT5vcmlnaW5DbGVhbigp
KSB7Ci0gICAgICAgIGlmIChDYW52YXNQYXR0ZXJuKiBwYXR0ZXJuID0gc3R5bGUtPnBhdHRlcm4o
KSkgeworICAgICAgICBpZiAoQ2FudmFzUGF0dGVybiogcGF0dGVybiA9IHN0eWxlLT5jYW52YXNQ
YXR0ZXJuKCkpIHsKICAgICAgICAgICAgIGlmICghcGF0dGVybi0+b3JpZ2luQ2xlYW4oKSkKICAg
ICAgICAgICAgICAgICBtX2NhbnZhcy0+c2V0T3JpZ2luVGFpbnRlZCgpOwogICAgICAgICB9CkBA
IC0xNTIsNyArMTUwLDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9r
ZQogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwogICAgIHN0YXRlKCkubV9zdHJva2VTdHls
ZS0+YXBwbHlTdHJva2VDb2xvcihjKTsKLSAgICBzdGF0ZSgpLm1fYXBwbGllZFN0cm9rZVBhdHRl
cm4gPSBmYWxzZTsKIH0KIAogQ2FudmFzU3R5bGUqIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
ZmlsbFN0eWxlKCkgY29uc3QKQEAgLTE2Niw3ICsxNjMsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0RmlsbFN0CiAgICAgICAgIHJldHVybjsKICAKICAgICBpZiAobV9jYW52
YXMtPm9yaWdpbkNsZWFuKCkpIHsKLSAgICAgICAgaWYgKENhbnZhc1BhdHRlcm4qIHBhdHRlcm4g
PSBzdHlsZS0+cGF0dGVybigpKSB7CisgICAgICAgIGlmIChDYW52YXNQYXR0ZXJuKiBwYXR0ZXJu
ID0gc3R5bGUtPmNhbnZhc1BhdHRlcm4oKSkgewogICAgICAgICAgICAgaWYgKCFwYXR0ZXJuLT5v
cmlnaW5DbGVhbigpKQogICAgICAgICAgICAgICAgIG1fY2FudmFzLT5zZXRPcmlnaW5UYWludGVk
KCk7CiAgICAgICAgIH0KQEAgLTE3Nyw3ICsxNzQsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2V0RmlsbFN0CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CiAgICAgc3Rh
dGUoKS5tX2ZpbGxTdHlsZS0+YXBwbHlGaWxsQ29sb3IoYyk7Ci0gICAgc3RhdGUoKS5tX2FwcGxp
ZWRGaWxsUGF0dGVybiA9IGZhbHNlOwogfQogCiBmbG9hdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OmxpbmVXaWR0aCgpIGNvbnN0CkBAIC01NDIsNDcgKzUzOCw3IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpmaWxsKCkKICAgICBpZiAoIW1fcGF0aC5pc0VtcHR5KCkpCiAgICAg
ICAgIHdpbGxEcmF3KG1fcGF0aC5ib3VuZGluZ1JlY3QoKSk7CiAKLSNpZiBQTEFURk9STShDRykK
LSAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAg
ICAvLyBTaGFkaW5nIHdvcmtzIG9uIHRoZSBlbnRpcmUgY2xpcCByZWdpb24sIHNvIGNvbnZlcnQg
dGhlIGN1cnJlbnQgcGF0aCB0byBhIGNsaXAuCi0gICAgICAgIGMtPnNhdmUoKTsKLSAgICAgICAg
Q0dDb250ZXh0Q2xpcChjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgICAgIENHQ29udGV4dERy
YXdTaGFkaW5nKGMtPnBsYXRmb3JtQ29udGV4dCgpLCBzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52
YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRmb3JtR3JhZGllbnQoKSk7ICAgICAgICAKLSAg
ICAgICAgYy0+cmVzdG9yZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1f
ZmlsbFN0eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0g
ICAgICAgIENHQ29udGV4dEZpbGxQYXRoKGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICB9Ci0j
ZWxpZiBQTEFURk9STShRVCkKLSAgICBRUGFpbnRlclBhdGgqIHBhdGggPSBtX3BhdGgucGxhdGZv
cm1QYXRoKCk7Ci0gICAgUVBhaW50ZXIqIHAgPSBzdGF0aWNfY2FzdDxRUGFpbnRlcio+KGMtPnBs
YXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3Jh
ZGllbnQoKSkgewotICAgICAgICBwLT5maWxsUGF0aCgqcGF0aCwgUUJydXNoKCooc3RhdGUoKS5t
X2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKS0+Z3JhZGllbnQoKS5wbGF0Zm9ybUdyYWRpZW50
KCkpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHN0YXRlKCkubV9maWxsU3R5bGUtPnBh
dHRlcm4oKSkKLSAgICAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKLSAgICAgICAgcC0+Zmls
bFBhdGgoKnBhdGgsIHAtPmJydXNoKCkpOwotICAgIH0KLSNlbGlmIFBMQVRGT1JNKENBSVJPKQot
ICAgIGNhaXJvX3QqIGNyID0gYy0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgY2Fpcm9fc2F2ZShj
cik7Ci0KLSAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkgewot
ICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNH
cmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRmb3JtR3JhZGllbnQoKSk7Ci0gICAgICAgIGNhaXJv
X2ZpbGwoY3IpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxl
LT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgZmxvYXQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7Ci0gICAgICAg
ICAgICBjLT5maWxsQ29sb3IoKS5nZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAg
ICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGEpOwotICAgICAgICB9Ci0gICAgICAgIGNhaXJvX2ZpbGwoY3IpOwotICAgIH0KLSAgICBjYWly
b19yZXN0b3JlKGNyKTsKLSNlbmRpZgorICAgIGMtPmZpbGxQYXRoKCk7CiAKICNpZiBFTkFCTEUo
REFTSEJPQVJEX1NVUFBPUlQpCiAgICAgY2xlYXJQYXRoRm9yRGFzaGJvYXJkQmFja3dhcmRDb21w
YXRpYmlsaXR5TW9kZSgpOwpAQCAtNjA1LDU0ICs1NjEsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c3Ryb2tlKCkKICAgICAgICAgYm91bmRpbmdSZWN0LmluZmxhdGUoaW5zZXQp
OwogICAgICAgICB3aWxsRHJhdyhib3VuZGluZ1JlY3QpOwogICAgIH0KLSAgICAKLSAgICAvLyBG
SVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4
dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS0+
Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAgICAvLyBTaGFkaW5nIHdvcmtzIG9uIHRoZSBlbnRp
cmUgY2xpcCByZWdpb24sIHNvIGNvbnZlcnQgdGhlIGN1cnJlbnQgcGF0aCB0byBhIGNsaXAuCi0g
ICAgICAgIGMtPnNhdmUoKTsKLSAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tl
ZFBhdGgoYy0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgICAgICBDR0NvbnRleHRDbGlwKGMtPnBs
YXRmb3JtQ29udGV4dCgpKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoYy0+cGxhdGZv
cm1Db250ZXh0KCksIHN0YXRlKCkubV9zdHJva2VTdHlsZS0+Y2FudmFzR3JhZGllbnQoKS0+Z3Jh
ZGllbnQoKS5wbGF0Zm9ybUdyYWRpZW50KCkpOyAgICAgICAgCi0gICAgICAgIGMtPnJlc3RvcmUo
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5wYXR0
ZXJuKCkpCi0gICAgICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4oKTsKLSAgICAgICAgQ0dDb250
ZXh0U3Ryb2tlUGF0aChjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgfQotI2VsaWYgUExBVEZP
Uk0oUVQpCi0gICAgUVBhaW50ZXJQYXRoKiBwYXRoID0gbV9wYXRoLnBsYXRmb3JtUGF0aCgpOwot
ICAgIFFQYWludGVyKiBwID0gc3RhdGljX2Nhc3Q8UVBhaW50ZXIqPihjLT5wbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkg
ewotICAgICAgICBwLT5zYXZlKCk7Ci0gICAgICAgIHAtPnNldEJydXNoKCooc3RhdGUoKS5tX3N0
cm9rZVN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRmb3JtR3JhZGllbnQo
KSkpOwotICAgICAgICBwLT5zdHJva2VQYXRoKCpwYXRoLCBwLT5wZW4oKSk7Ci0gICAgICAgIHAt
PnJlc3RvcmUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX3N0cm9rZVN0
eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4oKTsKLSAgICAg
ICAgcC0+c3Ryb2tlUGF0aCgqcGF0aCwgcC0+cGVuKCkpOwotICAgIH0KLSNlbGlmIFBMQVRGT1JN
KENBSVJPKQotICAgIGNhaXJvX3QqIGNyID0gYy0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgY2Fp
cm9fc2F2ZShjcik7Ci0gICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS0+Y2FudmFzR3JhZGll
bnQoKSkgewotICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBzdGF0ZSgpLm1fc3Ryb2tlU3R5
bGUtPmNhbnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkucGxhdGZvcm1HcmFkaWVudCgpKTsKLSAg
ICAgICAgYy0+YWRkUGF0aChtX3BhdGgpOwotICAgICAgICBjYWlyb19zdHJva2UoY3IpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPnBhdHRlcm4oKSkK
LSAgICAgICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwotICAgICAgICAgICAgYy0+c3Ry
b2tlQ29sb3IoKS5nZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICAgICAgICAg
IGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAg
ICAgICB9Ci0gICAgICAgIGMtPmFkZFBhdGgobV9wYXRoKTsKLSAgICAgICAgY2Fpcm9fc3Ryb2tl
KGNyKTsKLSAgICB9Ci0gICAgY2Fpcm9fcmVzdG9yZShjcik7Ci0jZW5kaWYKKworICAgIGMtPnN0
cm9rZVBhdGgoKTsKIAogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKICAgICBjbGVhclBh
dGhGb3JEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKCk7CkBAIC03MDksNDIgKzYx
OSw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsUmVjdCgKICAgICBGbG9h
dFJlY3QgcmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB3aWxsRHJhdyhyZWN0KTsKIAot
ICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBlbmRlbnQgR3JhcGhp
Y3NDb250ZXh0IEFQSS4KLSNpZiBQTEFURk9STShDRykKLSAgICBpZiAoc3RhdGUoKS5tX2ZpbGxT
dHlsZS0+Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAgICBjLT5zYXZlKCk7Ci0gICAgICAgIHN0
YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkuZmlsbChjLCBy
ZWN0KTsKLSAgICAgICAgYy0+cmVzdG9yZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChz
dGF0ZSgpLm1fZmlsbFN0eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseUZpbGxQYXR0
ZXJuKCk7Ci0gICAgICAgIENHQ29udGV4dEZpbGxSZWN0KGMtPnBsYXRmb3JtQ29udGV4dCgpLCBy
ZWN0KTsKLSAgICB9Ci0jZWxpZiBQTEFURk9STShRVCkKLSAgICBRUGFpbnRlciogcCA9IHN0YXRp
Y19jYXN0PFFQYWludGVyKj4oYy0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgIGlmIChzdGF0ZSgp
Lm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpKSB7Ci0gICAgICAgIHAtPmZpbGxSZWN0KHJl
Y3QsIFFCcnVzaCgqKHN0YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dyYWRpZW50KCktPmdyYWRp
ZW50KCkucGxhdGZvcm1HcmFkaWVudCgpKSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChz
dGF0ZSgpLm1fZmlsbFN0eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseUZpbGxQYXR0
ZXJuKCk7Ci0gICAgICAgIHAtPmZpbGxSZWN0KHJlY3QsIHAtPmJydXNoKCkpOwotICAgIH0KLSNl
bGlmIFBMQVRGT1JNKENBSVJPKQotICAgIGNhaXJvX3QqIGNyID0gYy0+cGxhdGZvcm1Db250ZXh0
KCk7Ci0gICAgY2Fpcm9fc2F2ZShjcik7Ci0gICAgaWYgKHN0YXRlKCkubV9maWxsU3R5bGUtPmNh
bnZhc0dyYWRpZW50KCkpIHsKLSAgICAgICAgc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3Jh
ZGllbnQoKS0+Z3JhZGllbnQoKS5maWxsKGMsIHJlY3QpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5wYXR0ZXJuKCkpIHsKLSAgICAgICAgICAgIGFwcGx5
RmlsbFBhdHRlcm4oKTsKLSAgICAgICAgICAgIGNhaXJvX3JlY3RhbmdsZShjciwgeCwgeSwgd2lk
dGgsIGhlaWdodCk7Ci0gICAgICAgICAgICBjYWlyb19maWxsKGNyKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICBjLT5maWxsUmVjdChyZWN0LCBjLT5maWxsQ29sb3IoKSk7Ci0gICAgfQot
ICAgIAotICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwotI2VuZGlmCisgICAgYy0+c2F2ZSgpOworICAg
IGMtPmZpbGxSZWN0KHJlY3QpOworICAgIGMtPnJlc3RvcmUoKTsKIH0KIAogdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVJlY3QoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lk
dGgsIGZsb2F0IGhlaWdodCkKQEAgLTc3MiwxMCArNjQ5LDYgQEAgdm9pZCBDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnN0cm9rZVJlYwogICAgIGJvdW5kaW5nUmVjdC5pbmZsYXRlKGxpbmVXaWR0
aCAvIDIpOwogICAgIHdpbGxEcmF3KGJvdW5kaW5nUmVjdCk7CiAKLSAgICAvLyBGSVhNRTogTm8g
c3VwcG9ydCBmb3IgZ3JhZGllbnRzIQotICAgIGlmIChzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPnBh
dHRlcm4oKSkKLSAgICAgICAgYXBwbHlTdHJva2VQYXR0ZXJuKCk7Ci0KICAgICBjLT5zdHJva2VS
ZWN0KHJlY3QsIGxpbmVXaWR0aCk7CiB9CiAKQEAgLTExNjgsNTggKzEwNDEsNiBAQCBHcmFwaGlj
c0NvbnRleHQqIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyCiAgICAgcmV0dXJuIG1fY2FudmFzLT5k
cmF3aW5nQ29udGV4dCgpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXBw
bHlTdHJva2VQYXR0ZXJuKCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29u
dGV4dCgpOwotICAgIGlmICghYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IENh
biB0aGlzIGNoZWNrIGJlIG1vdmVkIGludG8gR3JhcGhpY3NDb250ZXh0PyBvciByZW1vdmVkPwot
I2lmIFBMQVRGT1JNKENHKQotICAgIC8vIENoZWNrIGZvciBjYXNlIHdoZXJlIHRoZSBwYXR0ZXJu
IGlzIGFscmVhZHkgc2V0LgotICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBjLT5nZXRDVE0oKTsK
LSAgICBpZiAoc3RhdGUoKS5tX2FwcGxpZWRTdHJva2VQYXR0ZXJuICYmIGN0bSA9PSBzdGF0ZSgp
Lm1fc3Ryb2tlU3R5bGVQYXR0ZXJuVHJhbnNmb3JtKQotICAgICAgICByZXR1cm47Ci0jZW5kaWYK
LQotICAgIENhbnZhc1BhdHRlcm4qIHBhdHRlcm4gPSBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPnBh
dHRlcm4oKTsKLSAgICBpZiAoIXBhdHRlcm4pCi0gICAgICAgIHJldHVybjsKLQotICAgIGMtPmFw
cGx5U3Ryb2tlUGF0dGVybihwYXR0ZXJuLT5wYXR0ZXJuKCkpOwotCi0jaWYgUExBVEZPUk0oQ0cp
Ci0gICAgc3RhdGUoKS5tX3N0cm9rZVN0eWxlUGF0dGVyblRyYW5zZm9ybSA9IGN0bTsKLSNlbmRp
ZgotICAgIHN0YXRlKCkubV9hcHBsaWVkU3Ryb2tlUGF0dGVybiA9IHRydWU7Ci19Ci0KLXZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjphcHBseUZpbGxQYXR0ZXJuKCkKLXsKLSAgICBHcmFw
aGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghYykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gRklYTUU6IENhbiB0aGlzIGNoZWNrIGJlIG1vdmVkIGludG8gR3Jh
cGhpY3NDb250ZXh0PyBvciByZW1vdmVkPwotI2lmIFBMQVRGT1JNKENHKQotICAgIC8vIENoZWNr
IGZvciBjYXNlIHdoZXJlIHRoZSBwYXR0ZXJuIGlzIGFscmVhZHkgc2V0LgotICAgIEFmZmluZVRy
YW5zZm9ybSBjdG0gPSBjLT5nZXRDVE0oKTsKLSAgICBpZiAoc3RhdGUoKS5tX2FwcGxpZWRGaWxs
UGF0dGVybiAmJiBjdG0gPT0gc3RhdGUoKS5tX2ZpbGxTdHlsZVBhdHRlcm5UcmFuc2Zvcm0pCi0g
ICAgICAgIHJldHVybjsKLSNlbmRpZgotCi0gICAgQ2FudmFzUGF0dGVybiogcGF0dGVybiA9IHN0
YXRlKCkubV9maWxsU3R5bGUtPnBhdHRlcm4oKTsKLSAgICBpZiAoIXBhdHRlcm4pCi0gICAgICAg
IHJldHVybjsKLQotICAgIGMtPmFwcGx5RmlsbFBhdHRlcm4ocGF0dGVybi0+cGF0dGVybigpKTsK
LQotI2lmIFBMQVRGT1JNKENHKQotICAgIHN0YXRlKCkubV9maWxsU3R5bGVQYXR0ZXJuVHJhbnNm
b3JtID0gY3RtOwotI2VuZGlmCi0gICAgc3RhdGUoKS5tX2FwcGxpZWRGaWxsUGF0dGVybiA9IHRy
dWU7Ci19Ci0KIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlRGF0YT4gY3JlYXRlRW1wdHlJbWFnZURh
dGEoY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZGF0
YSA9IEltYWdlRGF0YTo6Y3JlYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CkluZGV4
OiBXZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCShyZXZpc2lvbiAzNTg4OSkK
KysrIFdlYkNvcmUvaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTkxLDEzICsxOTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBT
dHJpbmcgbV9zaGFkb3dDb2xvcjsKICAgICAgICAgICAgIGZsb2F0IG1fZ2xvYmFsQWxwaGE7CiAg
ICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRvciBtX2dsb2JhbENvbXBvc2l0ZTsKLSAgICAgICAg
ICAgIGJvb2wgbV9hcHBsaWVkU3Ryb2tlUGF0dGVybjsKLSAgICAgICAgICAgIGJvb2wgbV9hcHBs
aWVkRmlsbFBhdHRlcm47CiAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07
Ci0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9zdHJva2VT
dHlsZVBhdHRlcm5UcmFuc2Zvcm07Ci0gICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9maWxs
U3R5bGVQYXR0ZXJuVHJhbnNmb3JtOwotI2VuZGlmCiAgICAgICAgIH07CiAgICAgICAgIFBhdGgg
bV9wYXRoOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvQ2FudmFzU3R5bGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9DYW52YXNTdHlsZS5jcHAJKHJldmlzaW9uIDM1ODg5KQorKysgV2Vi
Q29yZS9odG1sL0NhbnZhc1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSwx
MCBAQCB2b2lkIENhbnZhc1N0eWxlOjphcHBseVN0cm9rZUNvbG9yKEdyYXBoCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIEdyYWRpZW50OgorICAgICAgICAgICAg
Y29udGV4dC0+c2V0U3Ryb2tlR3JhZGllbnQoY2FudmFzR3JhZGllbnQoKS0+Z3JhZGllbnQoKSk7
CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBJbWFnZVBhdHRlcm46CisgICAgICAg
ICAgICBjb250ZXh0LT5zZXRTdHJva2VQYXR0ZXJuKGNhbnZhc1BhdHRlcm4oKS0+cGF0dGVybigp
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAgLTE4Nyw3ICsxOTAsMTAgQEAgdm9p
ZCBDYW52YXNTdHlsZTo6YXBwbHlGaWxsQ29sb3IoR3JhcGhpYwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHcmFkaWVudDoKKyAgICAgICAgICAgIGNvbnRleHQt
PnNldEZpbGxHcmFkaWVudChjYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpKTsKKyAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIEltYWdlUGF0dGVybjoKKyAgICAgICAgICAgIGNvbnRl
eHQtPnNldEZpbGxQYXR0ZXJuKGNhbnZhc1BhdHRlcm4oKS0+cGF0dGVybigpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgIH0KIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9DYW52YXNTdHlsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9DYW52YXNTdHlsZS5oCShyZXZpc2lvbiAzNTg4OSkK
KysrIFdlYkNvcmUvaHRtbC9DYW52YXNTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw5ICs0
Nyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBTdHJpbmcgY29sb3IoKSBjb25z
dCB7IHJldHVybiBtX2NvbG9yOyB9CiAgICAgICAgIENhbnZhc0dyYWRpZW50KiBjYW52YXNHcmFk
aWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZ3JhZGllbnQuZ2V0KCk7IH0KLSAgICAgICAgQ2FudmFz
UGF0dGVybiogcGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fcGF0dGVybi5nZXQoKTsgfQorICAg
ICAgICBDYW52YXNQYXR0ZXJuKiBjYW52YXNQYXR0ZXJuKCkgY29uc3QgeyByZXR1cm4gbV9wYXR0
ZXJuLmdldCgpOyB9CiAKLSAgICAgICAgLy8gVGhlc2UgZG8gbm90aGluZyBmb3IgZ3JhZGllbnRz
IG9yIHBhdHRlcm5zLgogICAgICAgICB2b2lkIGFwcGx5RmlsbENvbG9yKEdyYXBoaWNzQ29udGV4
dCopOwogICAgICAgICB2b2lkIGFwcGx5U3Ryb2tlQ29sb3IoR3JhcGhpY3NDb250ZXh0Kik7CiAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAkocmV2aXNpb24gMzU4ODkp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02Nyw2ICs2NywxMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2hlaWdodCA+IG90aGVy
Lm1faGVpZ2h0ID8gbV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7CiAgICAgfQogCisgICAgRmxv
YXRTaXplIHNocnVua1RvKGNvbnN0IEZsb2F0U2l6ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gRmxvYXRTaXplKG1fd2lkdGggPCBvdGhlci5tX3dpZHRoID8gbV93aWR0aCA6
IG90aGVyLm1fd2lkdGgsCisgICAgICAgICAgICBtX2hlaWdodCA8IG90aGVyLm1faGVpZ2h0ID8g
bV9oZWlnaHQgOiBvdGhlci5tX2hlaWdodCk7CisgICAgfQorCiAjaWYgUExBVEZPUk0oQ0cpCiAg
ICAgZXhwbGljaXQgRmxvYXRTaXplKGNvbnN0IENHU2l6ZSYpOyAvLyBkb24ndCBkbyB0aGlzIGlt
cGxpY2l0bHkgc2luY2UgaXQncyBsb3NzeQogICAgIG9wZXJhdG9yIENHU2l6ZSgpIGNvbnN0OwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAkocmV2aXNp
b24gMzU4ODkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDE2ICszMCwxNiBAQAogCiAjaW5jbHVkZSAiR2VuZXJhdG9y
LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgR2VuZXJh
dGVkSW1hZ2UgOiBwdWJsaWMgSW1hZ2UgewogcHVibGljOgotICAgIEdlbmVyYXRlZEltYWdlKEdl
bmVyYXRvciogZ2VuZXJhdG9yLCBjb25zdCBJbnRTaXplJiBzaXplKQotICAgIDogbV9zaXplKHNp
emUpCisgICAgR2VuZXJhdGVkSW1hZ2UoUGFzc1JlZlB0cjxHZW5lcmF0b3I+IGdlbmVyYXRvciwg
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBtX2dlbmVyYXRvcihnZW5lcmF0b3IpCisg
ICAgICAgICwgbV9zaXplKHNpemUpCiAgICAgewotICAgICAgICBtX2dlbmVyYXRvci5zZXQoZ2Vu
ZXJhdG9yKTsKICAgICB9CiAgICAgdmlydHVhbCB+R2VuZXJhdGVkSW1hZ2UoKSB7fQogCkBAIC02
MSw3ICs2MSw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBjb25zdCBGbG9hdFJlY3Qm
IGRlc3RSZWN0KTsKICAgICAKIHByb3RlY3RlZDoKLSAgICBPd25QdHI8R2VuZXJhdG9yPiBtX2dl
bmVyYXRvcjsKKyAgICBSZWZQdHI8R2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKICAgICBJbnRTaXpl
IG1fc2l6ZTsKIH07CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdG9y
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0b3IuaAko
cmV2aXNpb24gMzU4ODkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVyYXRvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMTQgQEAKICNpZm5kZWYgR2VuZXJhdG9yX2gK
ICNkZWZpbmUgR2VuZXJhdG9yX2gKIAotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
RmxvYXRSZWN0OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogCi1jbGFzcyBHZW5lcmF0b3IgOiBO
b25jb3B5YWJsZSB7CitjbGFzcyBHZW5lcmF0b3IgOiBwdWJsaWMgUmVmQ291bnRlZDxHZW5lcmF0
b3I+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5HZW5lcmF0b3IoKSB7fTsKICAgICAKSW5kZXg6
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmgJKHJldmlzaW9uIDM1ODg5KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2
ICszMCw3IEBACiAjaW5jbHVkZSAiR2VuZXJhdG9yLmgiCiAKICNpbmNsdWRlICJGbG9hdFBvaW50
LmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CiAKICNpZiBQTEFURk9STShDRykKQEAgLTU4LDggKzU5LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogICAgIGNsYXNzIEdyYWRpZW50IDogcHVibGljIEdlbmVyYXRvciB7CiAgICAgcHVibGlj
OgotICAgICAgICBHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2lu
dCYgcDEpOwotICAgICAgICBHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgZmxvYXQgcjAs
IGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBmbG9hdCByMSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEdyYWRpZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9p
bnQmIHAxKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdyYWRp
ZW50KHAwLCBwMSkpOworICAgICAgICB9CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdyYWRp
ZW50PiBjcmVhdGUoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBv
aW50JiBwMSwgZmxvYXQgcjEpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgR3JhZGllbnQocDAsIHIwLCBwMSwgcjEpKTsKKyAgICAgICAgfQogICAgICAgICB2aXJ0
dWFsIH5HcmFkaWVudCgpOwogCiAgICAgICAgIHZvaWQgYWRkQ29sb3JTdG9wKGZsb2F0LCBjb25z
dCBTdHJpbmcmKTsKQEAgLTc1LDcgKzgyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICAgICAgZmxvYXQgZ3JlZW47CiAgICAgICAgICAgICBmbG9hdCBibHVlOwogICAgICAgICAgICAg
ZmxvYXQgYWxwaGE7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgQ29sb3JTdG9wKCkgOiBz
dG9wKDApLCByZWQoMCksIGdyZWVuKDApLCBibHVlKDApLCBhbHBoYSgwKSB7IH0KICAgICAgICAg
ICAgIENvbG9yU3RvcChmbG9hdCBzLCBmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBh
KSA6IHN0b3AocyksIHJlZChyKSwgZ3JlZW4oZyksIGJsdWUoYiksIGFscGhhKGEpIHsgfQogICAg
ICAgICB9OwpAQCAtODUsNiArOTIsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZp
cnR1YWwgdm9pZCBmaWxsKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYpOwogCiAg
ICAgcHJpdmF0ZToKKyAgICAgICAgR3JhZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0
IEZsb2F0UG9pbnQmIHAxKTsKKyAgICAgICAgR3JhZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAs
IGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQgcjEpOworCiAgICAgICAgIHZv
aWQgcGxhdGZvcm1Jbml0KCkgeyBtX2dyYWRpZW50ID0gMDsgfQogICAgICAgICB2b2lkIHBsYXRm
b3JtRGVzdHJveSgpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuY3BwCShyZXZpc2lvbiAzNTg4OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDYgKzEzNCw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VTdHlsZShjb24KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKKyAgICBt
X2NvbW1vbi0+c3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSA9IFNvbGlkQ29sb3JTcGFjZTsKICAgICBt
X2NvbW1vbi0+c3RhdGUuc3Ryb2tlQ29sb3IgPSBjb2xvcjsKICAgICBzZXRQbGF0Zm9ybVN0cm9r
ZUNvbG9yKGNvbG9yKTsKIH0KQEAgLTE3OCw4ICsxNzksMTkgQEAgQ29sb3IgR3JhcGhpY3NDb250
ZXh0OjpzdHJva2VDb2xvcigpIGNvbgogICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tl
Q29sb3I7CiB9CiAKK1dpbmRSdWxlIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJ1bGUoKSBjb25zdAor
eworICAgIHJldHVybiBtX2NvbW1vbi0+c3RhdGUuZmlsbFJ1bGU7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRGaWxsUnVsZShXaW5kUnVsZSBmaWxsUnVsZSkKK3sKKyAgICBtX2NvbW1v
bi0+c3RhdGUuZmlsbFJ1bGUgPSBmaWxsUnVsZTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7CisgICAgbV9jb21tb24tPnN0YXRl
LmZpbGxDb2xvclNwYWNlID0gU29saWRDb2xvclNwYWNlOwogICAgIG1fY29tbW9uLT5zdGF0ZS5m
aWxsQ29sb3IgPSBjb2xvcjsKICAgICBzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb2xvcik7CiB9CkBA
IC0xODksNiArMjAxLDU0IEBAIENvbG9yIEdyYXBoaWNzQ29udGV4dDo6ZmlsbENvbG9yKCkgY29u
c3QKICAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLmZpbGxDb2xvcjsKIH0KIAordm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFN0cm9rZVBhdHRlcm4oUGFzc1JlZlB0cjxQYXR0ZXJuPiBwYXR0ZXJu
KQoreworICAgIEFTU0VSVChwYXR0ZXJuKTsKKyAgICBpZiAoIXBhdHRlcm4pIHsKKyAgICAgICAg
c2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSA9IFBhdHRlcm5Db2xvclNwYWNlOwor
ICAgIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuID0gcGF0dGVybjsKKyAgICBzZXRQbGF0
Zm9ybVN0cm9rZVBhdHRlcm4obV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCkpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFBhdHRlcm4oUGFzc1JlZlB0cjxQYXR0
ZXJuPiBwYXR0ZXJuKQoreworICAgIEFTU0VSVChwYXR0ZXJuKTsKKyAgICBpZiAoIXBhdHRlcm4p
IHsKKyAgICAgICAgc2V0RmlsbENvbG9yKENvbG9yOjpibGFjayk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgbV9jb21tb24tPnN0YXRlLmZpbGxDb2xvclNwYWNlID0gUGF0dGVybkNvbG9y
U3BhY2U7CisgICAgbV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJuID0gcGF0dGVybjsKKyAgICBz
ZXRQbGF0Zm9ybUZpbGxQYXR0ZXJuKG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi5nZXQoKSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTdHJva2VHcmFkaWVudChQYXNzUmVmUHRy
PEdyYWRpZW50PiBncmFkaWVudCkKK3sKKyAgICBBU1NFUlQoZ3JhZGllbnQpOworICAgIGlmICgh
Z3JhZGllbnQpIHsKKyAgICAgICAgc2V0U3Ryb2tlQ29sb3IoQ29sb3I6OmJsYWNrKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSA9
IEdyYWRpZW50Q29sb3JTcGFjZTsKKyAgICBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQg
PSBncmFkaWVudDsKKyAgICBzZXRQbGF0Zm9ybVN0cm9rZUdyYWRpZW50KG1fY29tbW9uLT5zdGF0
ZS5zdHJva2VHcmFkaWVudC5nZXQoKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRG
aWxsR3JhZGllbnQoUGFzc1JlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQpCit7CisgICAgQVNTRVJU
KGdyYWRpZW50KTsKKyAgICBpZiAoIWdyYWRpZW50KSB7CisgICAgICAgIHNldEZpbGxDb2xvcihD
b2xvcjo6YmxhY2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fY29tbW9uLT5zdGF0
ZS5maWxsQ29sb3JTcGFjZSA9IEdyYWRpZW50Q29sb3JTcGFjZTsKKyAgICBtX2NvbW1vbi0+c3Rh
dGUuZmlsbEdyYWRpZW50ID0gZ3JhZGllbnQ7CisgICAgc2V0UGxhdGZvcm1GaWxsR3JhZGllbnQo
bV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC5nZXQoKSk7Cit9CisKIGJvb2wgR3JhcGhpY3ND
b250ZXh0Ojp1cGRhdGluZ0NvbnRyb2xUaW50cygpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY29t
bW9uLT5tX3VwZGF0aW5nQ29udHJvbFRpbnRzOwpAQCAtNDI2LDE0ICs0ODYsNiBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1UZXh0RHJhCiB9CiAjZW5kaWYKIAotI2lmICFQTEFU
Rk9STShDRykgJiYgIVBMQVRGT1JNKENBSVJPKQotLy8gT3RoZXIgcGxhdGZvcm1zIG5lZWQgdG8g
aW1wbGVtZW50IHRoaXMuCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIo
Y29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VCdWZmZXIqKQotewotICAgIG5vdEltcGxlbWVu
dGVkKCk7Ci19Ci0jZW5kaWYKLQogI2lmICFQTEFURk9STShRVCkgJiYgIVBMQVRGT1JNKENBSVJP
KQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoY29uc3QgU3Ry
b2tlU3R5bGUmKQogewpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oCShyZXZpc2lvbiAzNTg4OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKICAgICBjbGFzcyBGb250
OwogICAgIGNsYXNzIEdlbmVyYXRvcjsKKyAgICBjbGFzcyBHcmFkaWVudDsKICAgICBjbGFzcyBH
cmFwaGljc0NvbnRleHRQcml2YXRlOwogICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZTsKICAgICBjbGFzcyBJbWFnZUJ1ZmZlcjsKQEAgLTEzOSwzMCArMTQwLDQwIEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRTdHJva2VTdHlsZShjb25zdCBTdHJv
a2VTdHlsZSYgc3R5bGUpOwogICAgICAgICBDb2xvciBzdHJva2VDb2xvcigpIGNvbnN0OwogICAg
ICAgICB2b2lkIHNldFN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJik7CisgICAgICAgIHZvaWQgc2V0
U3Ryb2tlUGF0dGVybihQYXNzUmVmUHRyPFBhdHRlcm4+KTsKKyAgICAgICAgdm9pZCBzZXRTdHJv
a2VHcmFkaWVudChQYXNzUmVmUHRyPEdyYWRpZW50Pik7CiAKKyAgICAgICAgV2luZFJ1bGUgZmls
bFJ1bGUoKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSk7CiAgICAg
ICAgIENvbG9yIGZpbGxDb2xvcigpIGNvbnN0OwogICAgICAgICB2b2lkIHNldEZpbGxDb2xvcihj
b25zdCBDb2xvciYpOwotCi0gICAgICAgIHZvaWQgYXBwbHlTdHJva2VQYXR0ZXJuKGNvbnN0IFBh
dHRlcm4mKTsKLSAgICAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mKTsK
KyAgICAgICAgdm9pZCBzZXRGaWxsUGF0dGVybihQYXNzUmVmUHRyPFBhdHRlcm4+KTsKKyAgICAg
ICAgdm9pZCBzZXRGaWxsR3JhZGllbnQoUGFzc1JlZlB0cjxHcmFkaWVudD4pOwogCiAgICAgICAg
IHZvaWQgc2F2ZSgpOwogICAgICAgICB2b2lkIHJlc3RvcmUoKTsKLSAgICAgICAgCisKICAgICAg
ICAgLy8gVGhlc2UgZHJhdyBtZXRob2RzIHdpbGwgZG8gYm90aCBzdHJva2luZyBhbmQgZmlsbGlu
Zy4KICAgICAgICAgdm9pZCBkcmF3UmVjdChjb25zdCBJbnRSZWN0Jik7CiAgICAgICAgIHZvaWQg
ZHJhd0xpbmUoY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRQb2ludCYpOwogICAgICAgICB2b2lk
IGRyYXdFbGxpcHNlKGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdm9pZCBkcmF3Q29udmV4UG9s
eWdvbihzaXplX3QgbnVtUG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiwgYm9vbCBzaG91bGRBbnRp
YWxpYXMgPSBmYWxzZSk7CiAKKyAgICAgICAgdm9pZCBkcmF3UGF0aCgpOworICAgICAgICB2b2lk
IGZpbGxQYXRoKCk7CisgICAgICAgIHZvaWQgc3Ryb2tlUGF0aCgpOworCiAgICAgICAgIC8vIEFy
YyBkcmF3aW5nICh1c2VkIGJ5IGJvcmRlci1yYWRpdXMgaW4gQ1NTKSBqdXN0IHN1cHBvcnRzIHN0
cm9raW5nIGF0IHRoZSBtb21lbnQuCiAgICAgICAgIHZvaWQgc3Ryb2tlQXJjKGNvbnN0IEludFJl
Y3QmLCBpbnQgc3RhcnRBbmdsZSwgaW50IGFuZ2xlU3Bhbik7Ci0gICAgICAgIAotICAgICAgICB2
b2lkIGZpbGxSZWN0KGNvbnN0IEludFJlY3QmLCBjb25zdCBDb2xvciYpOworCisgICAgICAgIHZv
aWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgICAgIHZvaWQgZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKTsKICAgICAgICAgdm9pZCBmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBHZW5lcmF0b3ImKTsKICAgICAgICAgdm9pZCBmaWxsUm91bmRlZFJlY3Qo
Y29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRv
cFJpZ2h0LCBjb25zdCBJbnRTaXplJiBib3R0b21MZWZ0LCBjb25zdCBJbnRTaXplJiBib3R0b21S
aWdodCwgY29uc3QgQ29sb3ImKTsKKwogICAgICAgICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9h
dFJlY3QmKTsKKworICAgICAgICB2b2lkIHN0cm9rZVJlY3QoY29uc3QgRmxvYXRSZWN0Jik7CiAg
ICAgICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmLCBmbG9hdCBsaW5lV2lkdGgp
OwogCiAgICAgICAgIHZvaWQgZHJhd0ltYWdlKEltYWdlKiwgY29uc3QgSW50UG9pbnQmLCBDb21w
b3NpdGVPcGVyYXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIpOwpAQCAtMTc3LDEzICsxODgsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2U6
OlRpbGVSdWxlIGhSdWxlID0gSW1hZ2U6OlN0cmV0Y2hUaWxlLCBJbWFnZTo6VGlsZVJ1bGUgdlJ1
bGUgPSBJbWFnZTo6U3RyZXRjaFRpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29t
cG9zaXRlT3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKIAotI2lmIFBMQVRGT1JNKENH
KQogICAgICAgICB2b2lkIHNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xhdGlv
blF1YWxpdHkpOwogICAgICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KCkgY29uc3Q7Ci0jZWxzZQotICAgICAgICB2b2lkIHNldEltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpIHt9Ci0gICAgICAgIEludGVycG9sYXRp
b25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdCB7IHJldHVybiBJbnRl
cnBvbGF0aW9uRGVmYXVsdDsgfQotI2VuZGlmCiAKICAgICAgICAgdm9pZCBjbGlwKGNvbnN0IEZs
b2F0UmVjdCYpOwogICAgICAgICB2b2lkIGFkZFJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0
JiwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsIGNvbnN0
IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0KTsKQEAgLTI4
OCw3ICsyOTQsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBQTEFURk9STShRVCkKICAg
ICAgICAgYm9vbCBpblRyYW5zcGFyZW5jeUxheWVyKCkgY29uc3Q7Ci0gICAgICAgIHZvaWQgc2V0
RmlsbFJ1bGUoV2luZFJ1bGUpOwogICAgICAgICBQbGF0Zm9ybVBhdGgqIGN1cnJlbnRQYXRoKCk7
CiAjZW5kaWYKIApAQCAtMzAxLDEyICszMDYsMjAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2F2ZVBsYXRmb3JtU3RhdGUoKTsKICAgICAgICAgdm9p
ZCByZXN0b3JlUGxhdGZvcm1TdGF0ZSgpOworCiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1UZXh0
RHJhd2luZ01vZGUoaW50KTsKKyAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybUZvbnQoY29uc3QgRm9u
dCYgZm9udCk7CisKICAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENv
bG9yJik7CisgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJva2VQYXR0ZXJuKFBhdHRlcm4qKTsK
KyAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVN0cm9rZUdyYWRpZW50KEdyYWRpZW50Kik7CiAgICAg
ICAgIHZvaWQgc2V0UGxhdGZvcm1TdHJva2VTdHlsZShjb25zdCBTdHJva2VTdHlsZSYpOwogICAg
ICAgICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKGZsb2F0KTsKKwogICAgICAgICB2
b2lkIHNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJik7Ci0gICAgICAgIHZvaWQgc2V0
UGxhdGZvcm1Gb250KGNvbnN0IEZvbnQmIGZvbnQpOworICAgICAgICB2b2lkIHNldFBsYXRmb3Jt
RmlsbFBhdHRlcm4oUGF0dGVybiopOworICAgICAgICB2b2lkIHNldFBsYXRmb3JtRmlsbEdyYWRp
ZW50KEdyYWRpZW50Kik7CisKICAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVNoYWRvdyhjb25zdCBJ
bnRTaXplJiwgaW50IGJsdXIsIGNvbnN0IENvbG9yJik7CiAgICAgICAgIHZvaWQgY2xlYXJQbGF0
Zm9ybVNoYWRvdygpOwogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dFByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaAkocmV2aXNpb24gMzU4ODkpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dFByaXZhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMjcsMjggKzI3LDU1IEBACiAjZGVmaW5lIEdyYXBoaWNzQ29udGV4dFByaXZhdGVfaAogCiAj
aW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUgIkdyYWRpZW50LmgiCisjaW5jbHVkZSAiUGF0dGVy
bi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyAgICAvLyBlc2VpZGVsOiBUaGlzIGlzIGEg
cGxhY2UtaG9sZGVyIHVudGlsIHNvbWUgZGF5IHdoZW4gd2UgZGVjaWRlIHRvIGFkZAorICAgIC8v
IHJlYWxsIGNvbG9yLXNwYWNlIHN1cHBvcnQgdG8gV2ViQ29yZS4gIEF0IHRoYXQgdGltZSwgQ29s
b3JTcGFjZXMKKyAgICAvLyB3aWxsIGJlY29tZSByZWFsIG9iamVjdHMgaGVsZCBvZmYgb2YgQ29s
b3JzLCBhbmQgdGhlcmUgd2lsbCBiZQorICAgIC8vIHNwZWNpYWwgc2luZ2xldG9uIEdyYWRpZW50
IGFuZCBQYXR0ZXJuIGNvbG9yc3BhY2VzIHRvIG1hcmsgd2hlbgorICAgIC8vIGEgZmlsbCBvciBz
dHJva2UgaXMgdXNpbmcgYSBncmFkaWVudCBvciBwYXR0ZXJuIGluc3RlYWQgb2YgYSBzb2xpZCBj
b2xvcgorICAgIGVudW0gQ29sb3JTcGFjZSB7CisgICAgICAgIFNvbGlkQ29sb3JTcGFjZSwKKyAg
ICAgICAgUGF0dGVybkNvbG9yU3BhY2UsCisgICAgICAgIEdyYWRpZW50Q29sb3JTcGFjZQorICAg
IH07CisKICAgICBzdHJ1Y3QgR3JhcGhpY3NDb250ZXh0U3RhdGUgewogICAgICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZSgpCi0gICAgICAgICAgICA6IHN0cm9rZVN0eWxlKFNvbGlkU3Ryb2tlKQor
ICAgICAgICAgICAgOiB0ZXh0RHJhd2luZ01vZGUoY1RleHRGaWxsKQorICAgICAgICAgICAgLCBz
dHJva2VTdHlsZShTb2xpZFN0cm9rZSkKICAgICAgICAgICAgICwgc3Ryb2tlVGhpY2tuZXNzKDAp
CisgICAgICAgICAgICAsIHN0cm9rZUNvbG9yU3BhY2UoU29saWRDb2xvclNwYWNlKQogICAgICAg
ICAgICAgLCBzdHJva2VDb2xvcihDb2xvcjo6YmxhY2spCisgICAgICAgICAgICAsIGZpbGxSdWxl
KFJVTEVfTk9OWkVSTykKKyAgICAgICAgICAgICwgZmlsbENvbG9yU3BhY2UoU29saWRDb2xvclNw
YWNlKQogICAgICAgICAgICAgLCBmaWxsQ29sb3IoQ29sb3I6OmJsYWNrKQotICAgICAgICAgICAg
LCB0ZXh0RHJhd2luZ01vZGUoY1RleHRGaWxsKQogICAgICAgICAgICAgLCBwYWludGluZ0Rpc2Fi
bGVkKGZhbHNlKQogICAgICAgICAgICAgLCBzaGFkb3dCbHVyKDApCiAgICAgICAgIHsKICAgICAg
ICAgfQogCiAgICAgICAgIEZvbnQgZm9udDsKKyAgICAgICAgaW50IHRleHREcmF3aW5nTW9kZTsK
KyAgICAgICAgCiAgICAgICAgIFN0cm9rZVN0eWxlIHN0cm9rZVN0eWxlOwogICAgICAgICBmbG9h
dCBzdHJva2VUaGlja25lc3M7CisgICAgICAgIENvbG9yU3BhY2Ugc3Ryb2tlQ29sb3JTcGFjZTsK
ICAgICAgICAgQ29sb3Igc3Ryb2tlQ29sb3I7CisgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gc3Ry
b2tlR3JhZGllbnQ7CisgICAgICAgIFJlZlB0cjxQYXR0ZXJuPiBzdHJva2VQYXR0ZXJuOworICAg
ICAgICAKKyAgICAgICAgV2luZFJ1bGUgZmlsbFJ1bGU7CisgICAgICAgIENvbG9yU3BhY2UgZmls
bENvbG9yU3BhY2U7CiAgICAgICAgIENvbG9yIGZpbGxDb2xvcjsKLSAgICAgICAgaW50IHRleHRE
cmF3aW5nTW9kZTsKKyAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBmaWxsR3JhZGllbnQ7CisgICAg
ICAgIFJlZlB0cjxQYXR0ZXJuPiBmaWxsUGF0dGVybjsKKwogICAgICAgICBib29sIHBhaW50aW5n
RGlzYWJsZWQ7CisgICAgICAgIAogICAgICAgICBJbnRTaXplIHNoYWRvd1NpemU7CiAgICAgICAg
IHVuc2lnbmVkIHNoYWRvd0JsdXI7CiAgICAgICAgIENvbG9yIHNoYWRvd0NvbG9yOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgJKHJldmlzaW9uIDM1ODg5
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY1LDYgKzY1LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIFN0cmluZyBs
aW5lSm9pbk5hbWUoTGluZUpvaW4pOwogICAgIGJvb2wgcGFyc2VMaW5lSm9pbihjb25zdCBTdHJp
bmcmLCBMaW5lSm9pbiYpOwogCi19Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHJldmlzaW9uIDM1ODg5KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTk4LDggKzk4LDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0
UG9pbnQmKTsKICAgICAgICAgdm9pZCBhZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYpOwotICAg
ICAgICB2b2lkIGFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludCwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpOwotICAgICAgICB2b2lkIGFkZEJlemllckN1cnZlVG8o
Y29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgY29udHJv
bFBvaW50MiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgICAgICB2b2lkIGFkZFF1YWRDdXJ2ZVRv
KGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludCwgY29uc3QgRmxvYXRQb2ludCYgZW5kUG9p
bnQpOworICAgICAgICB2b2lkIGFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY29u
dHJvbFBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50MiwgY29uc3QgRmxvYXRQ
b2ludCYgZW5kUG9pbnQpOwogICAgICAgICB2b2lkIGFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQm
LCBjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgcmFkaXVzKTsKICAgICAgICAgdm9pZCBjbG9zZVN1
YnBhdGgoKTsKIApAQCAtMTA5LDkgKzEwOSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
ICAgICB2b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmKTsKIAotICAgICAgICB2b2lkIHNl
dFdpbmRpbmdSdWxlKFdpbmRSdWxlIHJ1bGUpIHsgbV9ydWxlID0gcnVsZTsgfQotICAgICAgICBX
aW5kUnVsZSB3aW5kaW5nUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZTsgfQotCiAgICAgICAg
IFN0cmluZyBkZWJ1Z1N0cmluZygpIGNvbnN0OwogCiAgICAgICAgIFBsYXRmb3JtUGF0aCogcGxh
dGZvcm1QYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CkBAIC0xMjgsNyArMTI1LDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUGxhdGZvcm1QYXRo
KiBtX3BhdGg7Ci0gICAgICAgIFdpbmRSdWxlIG1fcnVsZTsKICAgICB9OwogCiB9CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAkocmV2aXNpb24gMzU4ODkpCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaAkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcs
OCBAQAogI2lmbmRlZiBQYXR0ZXJuX2gKICNkZWZpbmUgUGF0dGVybl9oCiAKLSNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogCiAjaWYgUExBVEZP
Uk0oQ0cpCkBAIC01NiwxNyArNTcsMjEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNz
IEFmZmluZVRyYW5zZm9ybTsKICAgICBjbGFzcyBJbWFnZTsKIAotICAgIGNsYXNzIFBhdHRlcm4g
OiBOb25jb3B5YWJsZSB7CisgICAgY2xhc3MgUGF0dGVybiA6IHB1YmxpYyBSZWZDb3VudGVkPFBh
dHRlcm4+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIFBhdHRlcm4oSW1hZ2UqLCBib29sIHJlcGVh
dFgsIGJvb2wgcmVwZWF0WSk7Ci0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8UGF0dGVybj4g
Y3JlYXRlKEltYWdlKiB0aWxlSW1hZ2UsIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFBhdHRlcm4odGlsZUltYWdl
LCByZXBlYXRYLCByZXBlYXRZKSk7CisgICAgICAgIH0KICAgICAgICAgdmlydHVhbCB+UGF0dGVy
bigpOwotICAgICAgICAKKwogICAgICAgICBJbWFnZSogdGlsZUltYWdlKCkgY29uc3QgeyByZXR1
cm4gbV90aWxlSW1hZ2UuZ2V0KCk7IH0KIAogICAgICAgICBQbGF0Zm9ybVBhdHRlcm5QdHIgY3Jl
YXRlUGxhdGZvcm1QYXR0ZXJuKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9y
bSkgY29uc3Q7CiAKICAgICBwcml2YXRlOgorICAgICAgICBQYXR0ZXJuKEltYWdlKiwgYm9vbCBy
ZXBlYXRYLCBib29sIHJlcGVhdFkpOworCiAgICAgICAgIFJlZlB0cjxJbWFnZT4gbV90aWxlSW1h
Z2U7CiAgICAgICAgIGJvb2wgbV9yZXBlYXRYOwogICAgICAgICBib29sIG1fcmVwZWF0WTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhp
Y3NDb250ZXh0Q2Fpcm8uY3BwCShyZXZpc2lvbiAzNTg4OSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MSw2ICs1MSw3IEBACiAjZWxpZiBQTEFURk9STShXSU4pCiAjaW5jbHVkZSA8Y2Fpcm8td2lu
MzIuaD4KICNlbmRpZgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGVDYWlyby5oIgogCiAjaWZuZGVmIE1f
UEkKQEAgLTM1NSwxMyArMzU2LDk0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29udmV4
UG9seWdvbigKICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGNvbG9yLmFscGhhKCkpCi0gICAgICAg
IGZpbGxSZWN0U291cmNlT3ZlcihtX2RhdGEtPmNyLCByZWN0LCBjb2xvcik7CisgICAgY2Fpcm9f
dCogY3IgPSBtX2RhdGEtPmNyOworCisgICAgc3dpdGNoIChtX2NvbW1vbi0+c3RhdGUuZmlsbENv
bG9yU3BhY2UpIHsKKyAgICBjYXNlIFNvbGlkQ29sb3JTcGFjZToKKyAgICAgICAgaWYgKGZpbGxD
b2xvcigpLmFscGhhKCkpIHsKKyAgICAgICAgICAgIHNldENvbG9yKGNyLCBmaWxsQ29sb3IoKSk7
CisgICAgICAgICAgICBjYWlyb19maWxsKGNyKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBhdHRlcm5Db2xvclNwYWNlOgorICAgICAgICBjYWlyb19zZXRfc291cmNlKGNy
LCBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVy
bihnZXRDVE0oKSkpOworICAgICAgICBjYWlyb19maWxsKGNyKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBHcmFkaWVudENvbG9yU3BhY2U6CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3Is
IG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCktPnBsYXRmb3JtR3JhZGllbnQoKSk7
CisgICAgICAgIGNhaXJvX2ZpbGwoY3IpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7
CisKKyAgICBzd2l0Y2ggKG1fY29tbW9uLT5zdGF0ZS5zdHJva2VDb2xvclNwYWNlKSB7CisgICAg
Y2FzZSBTb2xpZENvbG9yU3BhY2U6CisgICAgICAgIGlmIChzdHJva2VDb2xvcigpLmFscGhhKCkp
IHsKKyAgICAgICAgICAgIHNldENvbG9yKGNyLCBzdHJva2VDb2xvcigpKTsKKyAgICAgICAgICAg
IGNhaXJvX3N0cm9rZShjcik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
YXR0ZXJuQ29sb3JTcGFjZToKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgbV9jb21tb24t
PnN0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0o
KSkpOworICAgICAgICBjYWlyb19zdHJva2UoY3IpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdyYWRpZW50Q29sb3JTcGFjZToKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgbV9jb21t
b24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpLT5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAg
ICAgICBjYWlyb19zdHJva2UoY3IpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCgpIHsKKyAgICBmaWxsUGF0aCgpOworICAgIHN0cm9r
ZVBhdGgoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CisgICAgY2Fpcm9fcmVjdGFuZ2xl
KGNyLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisK
KyAgICBzd2l0Y2ggKG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3JTcGFjZSkgeworICAgIGNhc2Ug
U29saWRDb2xvclNwYWNlOgorICAgICAgICBpZiAoZmlsbENvbG9yKCkuYWxwaGEoKSkgeworICAg
ICAgICAgICAgc2V0Q29sb3IoY3IsIGZpbGxDb2xvcigpKTsKKyAgICAgICAgICAgIGNhaXJvX2Zp
bGwoY3IpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGF0dGVybkNvbG9y
U3BhY2U6CisgICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIG1fY29tbW9uLT5zdGF0ZS5maWxs
UGF0dGVybi5nZXQoKS0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKSk7CisgICAgICAg
IGNhaXJvX2ZpbGwoY3IpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYWRpZW50Q29sb3JT
cGFjZToKKyAgICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgbV9jb21tb24tPnN0YXRlLmZpbGxH
cmFkaWVudC5nZXQoKS0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAgY2Fpcm9fZmlsbChj
cik7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQpAQCAtNDk3
LDMzICs1NzksMzIgQEAgSW50UG9pbnQgR3JhcGhpY3NDb250ZXh0OjpvcmlnaW4oKQogICAgIHJl
dHVybiBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KG1hdHJpeC54MCksIHN0YXRpY19jYXN0PGlu
dD4obWF0cml4LnkwKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBh
dHRlcm4oY29uc3QgUGF0dGVybiYgcGF0dGVybikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sKQoreworICAgIC8vIENhaXJvIGNvbnRl
eHRzIGNhbid0IGhvbGQgc2VwYXJhdGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycworICAgIC8vIHNv
IHdlIHNldCB0aGVtIGp1c3QgYmVmb3JlIHdlIGFjdHVhbGx5IGZpbGwgb3Igc3Ryb2tlCit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9y
JiBjb2wpCiB7Ci0gICAgY2Fpcm9fcGF0dGVybl90KiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJu
LmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSk7Ci0gICAgaWYgKCFwbGF0Zm9ybVBhdHRl
cm4pCi0gICAgICAgIHJldHVybjsKKyAgICAvLyBDYWlybyBjb250ZXh0cyBjYW4ndCBob2xkIHNl
cGFyYXRlIGZpbGwgYW5kIHN0cm9rZSBjb2xvcnMKKyAgICAvLyBzbyB3ZSBzZXQgdGhlbSBqdXN0
IGJlZm9yZSB3ZSBhY3R1YWxseSBmaWxsIG9yIHN0cm9rZQorfQogCi0gICAgY2Fpcm9fc2V0X3Nv
dXJjZShwbGF0Zm9ybUNvbnRleHQoKSwgcGxhdGZvcm1QYXR0ZXJuKTsKLSAgICBjYWlyb19wYXR0
ZXJuX2Rlc3Ryb3kocGxhdGZvcm1QYXR0ZXJuKTsKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQ
bGF0Zm9ybUZpbGxQYXR0ZXJuKFBhdHRlcm4qKQorewogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6YXBwbHlGaWxsUGF0dGVybihjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKQordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlUGF0dGVybihQYXR0ZXJuKikKIHsKLSAgICAvLyBU
aGUgQ2Fpcm8gY29kZXBhdGggZG9lc24ndCBzZWVtIHRvIHN1cHBvcnQgc2VwYXJhdGUgc3Ryb2tl
L2ZpbGw/Ci0gICAgLy8gVGhlIGNvZGUgSSByZWZhY3RvcmVkIHRvIGNyZWF0ZSB0aGVzZSBtZXRo
b2RzIHdhcyBpZGVudGljYWwgZm9yIENhaXJvCi0gICAgYXBwbHlTdHJva2VQYXR0ZXJuKHBhdHRl
cm4pOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29u
c3QgQ29sb3ImIGNvbCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxHcmFk
aWVudChHcmFkaWVudCopCiB7Ci0gICAgLy8gRklYTUU6IHRoaXMgaXMgcHJvYmFibHkgYSBuby1v
cCBidXQgSSdtIG5vdCBzdXJlCi0gICAgLy8gbm90SW1wbGVtZW50ZWQoKTsgLy8gY29tbWVudGVk
LW91dCBiZWNhdXNlIGl0J3MgY2hhdHR5IGFuZCBjbHV0dGVycyBvdXRwdXQKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNvbCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUdyYWRpZW50KEdyYWRpZW50
KikKIHsKLSAgICAvLyBGSVhNRTogdGhpcyBpcyBwcm9iYWJseSBhIG5vLW9wIGJ1dCBJJ20gbm90
IHN1cmUKLSAgICAvL25vdEltcGxlbWVudGVkKCk7IC8vIGNvbW1lbnRlZC1vdXQgYmVjYXVzZSBp
dCdzIGNoYXR0eSBhbmQgY2x1dHRlcnMgb3V0cHV0CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCBzdHJva2VUaGlja25lc3MpCkBAIC02
NjMsMTIgKzc0NCwyOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBG
CiAgICAgICAgIHJldHVybjsKIAogICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKLSAgICBj
YWlyb19zYXZlKGNyKTsKICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHJlY3QueCgpLCByZWN0Lnko
KSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBzZXRDb2xvcihjciwgc3Ryb2tl
Q29sb3IoKSk7CiAgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY3IsIHdpZHRoKTsKLSAgICBjYWly
b19zdHJva2UoY3IpOwotICAgIGNhaXJvX3Jlc3RvcmUoY3IpOworCisgICAgc3dpdGNoIChtX2Nv
bW1vbi0+c3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSkgeworICAgIGNhc2UgU29saWRDb2xvclNwYWNl
OgorICAgICAgICBpZiAoc3Ryb2tlQ29sb3IoKS5hbHBoYSgpKSB7CisgICAgICAgICAgICBzZXRD
b2xvcihjciwgc3Ryb2tlQ29sb3IoKSk7CisgICAgICAgICAgICBjYWlyb19zdHJva2UoY3IpOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGF0dGVybkNvbG9yU3BhY2U6Cisg
ICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJu
LmdldCgpLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpKTsKKyAgICAgICAgY2Fpcm9f
ZmlsbChjcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgor
ICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGll
bnQuZ2V0KCktPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAgIGNhaXJvX3N0cm9rZShjcik7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVDYXAoTGluZUNhcCBsaW5lQ2FwKQpAQCAtOTExLDYgKzEwMDgsMTUgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFVzZUFudGlhbGlhc2luZwogICAgIGNhaXJvX3NldF9hbnRpYWxpYXMobV9k
YXRhLT5jciwgZW5hYmxlID8gQ0FJUk9fQU5USUFMSUFTX0RFRkFVTFQgOiBDQUlST19BTlRJQUxJ
QVNfTk9ORSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRp
b25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5KQoreworfQorCitJbnRlcnBvbGF0aW9uUXVh
bGl0eSBHcmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdAor
eworICAgIHJldHVybiBJbnRlcnBvbGF0aW9uRGVmYXVsdDsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gUExBVEZPUk0oQ0FJUk8pCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkocmV2aXNpb24g
MzU4ODkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENH
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiQWZmaW5l
VHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRmb3Jt
UHJpdmF0ZUNHLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJLVVJMLmgi
CkBAIC0yNjEsMTQgKzI2Miw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShj
b25zdCAKICAgICBDR0NvbnRleHRBZGRBcmMoY29udGV4dCwgcmVjdC54KCkgKyByLCByZWN0Lnko
KSArIHIsIHIsIDAuMGYsIDIuMGYgKiBwaUZsb2F0LCAwKTsKICAgICBDR0NvbnRleHRDbG9zZVBh
dGgoY29udGV4dCk7CiAKLSAgICBpZiAoZmlsbENvbG9yKCkuYWxwaGEoKSkgewotICAgICAgICBp
ZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkKLSAgICAgICAgICAgIC8vIHN0cm9rZSBhbmQg
ZmlsbAotICAgICAgICAgICAgQ0dDb250ZXh0RHJhd1BhdGgoY29udGV4dCwga0NHUGF0aEZpbGxT
dHJva2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBDR0NvbnRleHRGaWxsUGF0aChjb250
ZXh0KTsKLSAgICB9IGVsc2UgaWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpCi0gICAgICAg
IENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CisgICAgZHJhd1BhdGgoKTsKIH0KIAogCkBA
IC0zODEsMjkgKzM3NSwxMjkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5
Z29uKAogICAgICAgICBDR0NvbnRleHRBZGRMaW5lVG9Qb2ludChjb250ZXh0LCBwb2ludHNbaV0u
eCgpLCBwb2ludHNbaV0ueSgpKTsKICAgICBDR0NvbnRleHRDbG9zZVBhdGgoY29udGV4dCk7CiAK
LSAgICBpZiAoZmlsbENvbG9yKCkuYWxwaGEoKSkgewotICAgICAgICBpZiAoc3Ryb2tlU3R5bGUo
KSAhPSBOb1N0cm9rZSkKLSAgICAgICAgICAgIENHQ29udGV4dERyYXdQYXRoKGNvbnRleHQsIGtD
R1BhdGhFT0ZpbGxTdHJva2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBDR0NvbnRleHRF
T0ZpbGxQYXRoKGNvbnRleHQpOwotICAgIH0gZWxzZQotICAgICAgICBDR0NvbnRleHRTdHJva2VQ
YXRoKGNvbnRleHQpOworICAgIGRyYXdQYXRoKCk7CiAKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0
YXRlKGNvbnRleHQpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3Qg
SW50UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yKQorc3RhdGljIGlubGluZSBib29sIGNh
bGN1bGF0ZURyYXdpbmdNb2RlKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgQ0dQYXRoRHJhd2lu
Z01vZGUmIG1vZGUpCit7CisgICAgYm9vbCBzaG91bGRGaWxsID0gY29udGV4dC0+ZmlsbENvbG9y
KCkuYWxwaGEoKTsKKyAgICBib29sIHNob3VsZFN0cm9rZSA9IGNvbnRleHQtPnN0cm9rZVN0eWxl
KCkgIT0gTm9TdHJva2U7CisgICAgYm9vbCB1c2VFT0ZpbGwgPSBjb250ZXh0LT5maWxsUnVsZSgp
ID09IFJVTEVfRVZFTk9ERDsKKworICAgIGlmIChzaG91bGRGaWxsKSB7CisgICAgICAgIGlmIChz
aG91bGRTdHJva2UpIHsKKyAgICAgICAgICAgIGlmICh1c2VFT0ZpbGwpCisgICAgICAgICAgICAg
ICAgbW9kZSA9IGtDR1BhdGhFT0ZpbGxTdHJva2U7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbW9kZSA9IGtDR1BhdGhGaWxsU3Ryb2tlOworICAgICAgICB9IGVsc2UgeyAvLyBm
aWxsLCBubyBzdHJva2UKKyAgICAgICAgICAgIGlmICh1c2VFT0ZpbGwpCisgICAgICAgICAgICAg
ICAgbW9kZSA9IGtDR1BhdGhFT0ZpbGw7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbW9kZSA9IGtDR1BhdGhGaWxsOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChzaG91bGRT
dHJva2UpIC8vIG5vIGZpbGwsIGp1c3Qgc3Ryb2tlCisgICAgICAgIG1vZGUgPSBrQ0dQYXRoU3Ry
b2tlOworCisgICAgcmV0dXJuIHNob3VsZEZpbGwgfHwgc2hvdWxkU3Ryb2tlOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgoKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBpZiAoY29sb3IuYWxwaGEoKSkgewotICAgICAgICBD
R0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwotICAgICAgICBDb2xvciBv
bGRGaWxsQ29sb3IgPSBmaWxsQ29sb3IoKTsKLSAgICAgICAgaWYgKG9sZEZpbGxDb2xvciAhPSBj
b2xvcikKLSAgICAgICAgICAgIHNldENHRmlsbENvbG9yKGNvbnRleHQsIGNvbG9yKTsKLSAgICAg
ICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgcmVjdCk7Ci0gICAgICAgIGlmIChvbGRGaWxs
Q29sb3IgIT0gY29sb3IpCi0gICAgICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBvbGRG
aWxsQ29sb3IpOworCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQo
KTsKKyAgICBzd2l0Y2ggKG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3JTcGFjZSkgeworICAgIGNh
c2UgU29saWRDb2xvclNwYWNlOgorICAgICAgICBpZiAoIWZpbGxDb2xvcigpLmFscGhhKCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgIGNhc2UgUGF0
dGVybkNvbG9yU3BhY2U6CisgICAgICAgIENHUGF0aERyYXdpbmdNb2RlIGRyYXdpbmdNb2RlOwor
ICAgICAgICBpZiAoY2FsY3VsYXRlRHJhd2luZ01vZGUodGhpcywgZHJhd2luZ01vZGUpKQorICAg
ICAgICAgICAgQ0dDb250ZXh0RHJhd1BhdGgoY29udGV4dCwgZHJhd2luZ01vZGUpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZToKKyAgICAgICAgLy8gV2UgZG9u
J3QgaGF2ZSBhbnkgb3B0aW1pemVkIHdheSB0byBmaWxsICYgc3Ryb2tlIGdyYWRpZW50cworICAg
ICAgICBmaWxsUGF0aCgpOworICAgICAgICBzdHJva2VQYXRoKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxQYXRoV2l0aEZpbGxSdWxlKENHQ29u
dGV4dFJlZiBjb250ZXh0LCBXaW5kUnVsZSBmaWxsUnVsZSkKK3sKKyAgICBpZiAoZmlsbFJ1bGUg
PT0gUlVMRV9FVkVOT0REKQorICAgICAgICBDR0NvbnRleHRFT0ZpbGxQYXRoKGNvbnRleHQpOwor
ICAgIGVsc2UKKyAgICAgICAgQ0dDb250ZXh0RmlsbFBhdGgoY29udGV4dCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQoKTsKKyAgICBzd2l0Y2ggKG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3JTcGFjZSkg
eworICAgIGNhc2UgU29saWRDb2xvclNwYWNlOgorICAgICAgICBpZiAoIWZpbGxDb2xvcigpLmFs
cGhhKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAg
IGNhc2UgUGF0dGVybkNvbG9yU3BhY2U6CisgICAgICAgIGZpbGxQYXRoV2l0aEZpbGxSdWxlKGNv
bnRleHQsIGZpbGxSdWxlKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYWRpZW50Q29s
b3JTcGFjZToKKyAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKQorICAgICAg
ICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOworICAgICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhj
b250ZXh0LCBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkp
OworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VQYXRoKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47
CisKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOworICAgIHN3
aXRjaCAobV9jb21tb24tPnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UpIHsKKyAgICBjYXNlIFNvbGlk
Q29sb3JTcGFjZToKKyAgICAgICAgaWYgKCFzdHJva2VDb2xvcigpLmFscGhhKCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgIGNhc2UgUGF0dGVybkNv
bG9yU3BhY2U6CisgICAgICAgIENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgorICAgICAgICBDR0NvbnRleHRS
ZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjb250ZXh0KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xp
cChjb250ZXh0KTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgbV9jb21t
b24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBG
bG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIHN3aXRjaCAobV9jb21tb24tPnN0YXRlLmZpbGxDb2xvclNwYWNlKSB7Cisg
ICAgY2FzZSBTb2xpZENvbG9yU3BhY2U6CisgICAgICAgIGlmIChmaWxsQ29sb3IoKS5hbHBoYSgp
KQorICAgICAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QocGxhdGZvcm1Db250ZXh0KCksIHJlY3Qp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhdHRlcm5Db2xvclNwYWNlOgorICAgICAgICBD
R0NvbnRleHRGaWxsUmVjdChwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgorICAgICAgICBjbGlwKHJlY3QpOworICAg
ICAgICBDR0NvbnRleHREcmF3U2hhZGluZyhwbGF0Zm9ybUNvbnRleHQoKSwgbV9jb21tb24tPnN0
YXRlLnN0cm9rZUdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAgICAgICBicmVhazsK
ICAgICB9CiB9CiAKQEAgLTQzMywxMyArNTI3LDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUm91bmRlZFJlY3QoY28KICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgY29sb3Ip
OwogCiAgICAgYWRkUGF0aChQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHJlY3QsIHRvcExl
ZnQsIHRvcFJpZ2h0LCBib3R0b21MZWZ0LCBib3R0b21SaWdodCkpOwotICAgIENHQ29udGV4dEZp
bGxQYXRoKGNvbnRleHQpOworICAgIGZpbGxQYXRoKCk7CiAKICAgICBpZiAob2xkRmlsbENvbG9y
ICE9IGNvbG9yKQogICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3Ip
OwogfQogCi0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVj
dCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtOTEwLDkgKzEwMDMsMTEgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYQogICAgIH0KIH0KIAotdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybihjb25zdCBQYXR0ZXJuJiBwYXR0
ZXJuKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlUGF0dGVybihQYXR0
ZXJuKiBwYXR0ZXJuKQogewotICAgIENHUGF0dGVyblJlZiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0
ZXJuLmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSk7CisgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIENHUGF0dGVyblJlZiBwbGF0Zm9ybVBhdHRl
cm4gPSBwYXR0ZXJuLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpOwogICAgIGlmICgh
cGxhdGZvcm1QYXR0ZXJuKQogICAgICAgICByZXR1cm47CiAKQEAgLTkyNSw5ICsxMDIwLDExIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0cm9rZVBhdHRlcm4KICAgICBDR1BhdHRlcm5S
ZWxlYXNlKHBsYXRmb3JtUGF0dGVybik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBs
eUZpbGxQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mIHBhdHRlcm4pCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1GaWxsUGF0dGVybihQYXR0ZXJuKiBwYXR0ZXJuKQogewotICAgIENHUGF0
dGVyblJlZiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLmNyZWF0ZVBsYXRmb3JtUGF0dGVybihn
ZXRDVE0oKSk7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIENHUGF0dGVyblJlZiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLT5jcmVhdGVQbGF0Zm9y
bVBhdHRlcm4oZ2V0Q1RNKCkpOwogICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTk0MCw2ICsxMDM3LDE4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBs
eUZpbGxQYXR0ZXJuKGMKICAgICBDR1BhdHRlcm5SZWxlYXNlKHBsYXRmb3JtUGF0dGVybik7CiB9
CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUdyYWRpZW50KEdyYWRp
ZW50KikKK3sKKyAgICAvLyBDb3JlR3JhcGhpY3MgZG9lcyBub3Qgc3VwcG9ydCBzZXR0aW5nIGEg
InN0cm9rZSBncmFkaWVudCIsIG9ubHkKKyAgICAvLyBmaWxsaW5nIGEgY2xpcCByZWdpb24gd2l0
aCBhIGdyYWRpZW50LCB3aGljaCB3ZSBkbyBhdCBkcmF3IHRpbWUKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbEdyYWRpZW50KEdyYWRpZW50KikKK3sKKyAgICAvLyBD
b3JlR3JhcGhpY3MgZG9lcyBub3Qgc3VwcG9ydCBzZXR0aW5nIGEgImZpbGwgZ3JhZGllbnQiLCBv
bmx5CisgICAgLy8gZmlsbGluZyBhIGNsaXAgcmVnaW9uIHdpdGggYSBncmFkaWVudCwgd2hpY2gg
d2UgZG8gYXQgZHJhdyB0aW1lCit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVN0cm9rZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRl
eHRRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHRRdC5jcHAJKHJldmlzaW9uIDM1ODg5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYg
KzQzLDcgQEAKICNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQcml2YXRl
LmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVk
ZSAiUGVuLmgiCkBAIC00OTUsMTIgKzQ5Niw4MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0NvbnZleFBvbHlnb24oCiAgICAgcC0+cmVzdG9yZSgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZmlsbFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGMpCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZGF0YS0+cCgpLT5maWxsUmVjdChyZWN0LCBR
Q29sb3IoYykpOworICAgIFFQYWludGVyICpwID0gbV9kYXRhLT5wKCk7CisgICAgUVBhaW50ZXJQ
YXRoIHBhdGggPSBtX2RhdGEtPmN1cnJlbnRQYXRoOworCisgICAgc3dpdGNoIChtX2NvbW1vbi0+
c3RhdGUuZmlsbENvbG9yU3BhY2UpIHsKKyAgICBjYXNlIFNvbGlkQ29sb3JTcGFjZToKKyAgICAg
ICAgaWYgKGZpbGxDb2xvcigpLmFscGhhKCkpCisgICAgICAgICAgICBwLT5maWxsUGF0aChwYXRo
LCBwLT5icnVzaCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXR0ZXJuQ29sb3JTcGFj
ZToKKyAgICAgICAgcC0+ZmlsbFBhdGgocGF0aCwgUUJydXNoKCoobV9jb21tb24tPnN0YXRlLmZp
bGxQYXR0ZXJuLmdldCgpLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpKSkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZToKKyAgICAgICAgcC0+Zmls
bFBhdGgocGF0aCwgUUJydXNoKCoobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC5nZXQoKS0+
cGxhdGZvcm1HcmFkaWVudCgpKSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBRUGFpbnRlciAqcCA9IG1fZGF0YS0+cCgpOwor
ICAgIFFQYWludGVyUGF0aCBwYXRoID0gbV9kYXRhLT5jdXJyZW50UGF0aDsKKworICAgIHN3aXRj
aCAobV9jb21tb24tPnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UpIHsKKyAgICBjYXNlIFNvbGlkQ29s
b3JTcGFjZToKKyAgICAgICAgaWYgKHN0cm9rZUNvbG9yKCkuYWxwaGEoKSkKKyAgICAgICAgICAg
IHAtPnN0cm9rZVBhdGgocGF0aCwgcC0+cGVuKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBhdHRlcm5Db2xvclNwYWNlOgorICAgICAgICBwLT5zZXRCcnVzaCgqKG1fY29tbW9uLT5zdGF0
ZS5zdHJva2VQYXR0ZXJuLmdldCgpLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpKSk7
CisgICAgICAgIHAtPnN0cm9rZVBhdGgocGF0aCwgcC0+cGVuKCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZToKKyAgICAgICAgcC0+c2V0QnJ1c2goKihtX2Nv
bW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCktPnBsYXRmb3JtR3JhZGllbnQoKSkpOwor
ICAgICAgICBwLT5zdHJva2VQYXRoKHBhdGgsIHAtPnBlbigpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0
JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIFFQYWludGVyICpwID0gbV9kYXRhLT5wKCk7CisKKyAgICBzd2l0Y2ggKG1fY29tbW9u
LT5zdGF0ZS5maWxsQ29sb3JTcGFjZSkgeworICAgIGNhc2UgU29saWRDb2xvclNwYWNlOgorICAg
ICAgICBpZiAoZmlsbENvbG9yKCkuYWxwaGEoKSkKKyAgICAgICAgICAgIHAtPmZpbGxSZWN0KHJl
Y3QsIHAtPmJydXNoKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhdHRlcm5Db2xvclNw
YWNlOgorICAgICAgICBwLT5maWxsUmVjdChyZWN0LCBRQnJ1c2goKihtX2NvbW1vbi0+c3RhdGUu
ZmlsbFBhdHRlcm4uZ2V0KCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSkpKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgorICAgICAgICBwLT5m
aWxsUmVjdChyZWN0LCBRQnJ1c2goKihtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LmdldCgp
LT5wbGF0Zm9ybUdyYWRpZW50KCkpKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KIH0KIAogdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGMpCkBAIC01MzUsMTAgKzYwNCwxMCBAQCBib29sIEdyYXBoaWNzQ29udGV4dDo6aW5U
cmFuc3BhcmVuY3lMYXllCiAgICAgcmV0dXJuICFtX2RhdGEtPmxheWVycy5pc0VtcHR5KCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUnVsZShXaW5kUnVsZSBydWxlKQorLyp2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1bGUoV2luZFJ1bGUgcnVsZSkKIHsKICAgICBt
X2RhdGEtPmN1cnJlbnRQYXRoLnNldEZpbGxSdWxlKHJ1bGUgPT0gUlVMRV9FVkVOT0REID8gUXQ6
Ok9kZEV2ZW5GaWxsIDogUXQ6OldpbmRpbmdGaWxsKTsKLX0KK30qLwogCiBQbGF0Zm9ybVBhdGgq
IEdyYXBoaWNzQ29udGV4dDo6Y3VycmVudFBhdGgoKQogewpAQCAtNzEwLDcgKzc3OSwyNCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGCiAgICAgcGF0aC5hZGRSZWN0
KHJlY3QpOwogICAgIFFQZW4gblBlbiA9IHAtPnBlbigpOwogICAgIG5QZW4uc2V0V2lkdGhGKHdp
ZHRoKTsKLSAgICBwLT5zdHJva2VQYXRoKHBhdGgsIG5QZW4pOworCisgICAgc3dpdGNoIChtX2Nv
bW1vbi0+c3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSkgeworICAgIGNhc2UgU29saWRDb2xvclNwYWNl
OgorICAgICAgICBpZiAoc3Ryb2tlQ29sb3IoKS5hbHBoYSgpKQorICAgICAgICAgICAgcC0+c3Ry
b2tlUGF0aChwYXRoLCBuUGVuKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXR0ZXJuQ29s
b3JTcGFjZToKKyAgICAgICAgcC0+c2V0QnJ1c2goKihtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0
dGVybi5nZXQoKS0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKSkpOworICAgICAgICBw
LT5zdHJva2VQYXRoKHBhdGgsIG5QZW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYWRp
ZW50Q29sb3JTcGFjZToKKyAgICAgICAgcC0+c2V0QnJ1c2goKihtX2NvbW1vbi0+c3RhdGUuc3Ry
b2tlR3JhZGllbnQuZ2V0KCktPnBsYXRmb3JtR3JhZGllbnQoKSkpOworICAgICAgICBwLT5zdHJv
a2VQYXRoKHBhdGgsIG5QZW4pOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgbGMpCkBAIC04NDksNiArOTM1LDExIEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0RWxsaXBzZUluUmUKICAgICBwLT5zZXRDbGlw
UGF0aChuZXdDbGlwLCBRdDo6SW50ZXJzZWN0Q2xpcCk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZUJ1ZmZl
ciopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmFkZElubmVyUm91bmRlZFJlY3RDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRoaWNrbmVzcykKIHsKQEAg
LTkwOSw2ICsxMDAwLDIyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9r
ZVMKICAgICBwLT5zZXRQZW4obmV3UGVuKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtRmlsbFBhdHRlcm4oUGF0dGVybiogcGF0dGVybikKK3sKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlUGF0dGVybihQYXR0ZXJuKiBwYXR0ZXJuKQor
eworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsR3JhZGllbnQoR3Jh
ZGllbnQqIGdyYWRpZW50KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TdHJva2VHcmFkaWVudChHcmFkaWVudCogZ3JhZGllbnQpCit7Cit9CisKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCB0aGlja25lc3MpCiB7
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTkyNiwyMCArMTAzMyw2IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2wKICAgICBtX2RhdGEtPnAoKS0+c2V0
QnJ1c2goUUJydXNoKGNvbG9yKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0
cm9rZVBhdHRlcm4oY29uc3QgUGF0dGVybiYgcGF0dGVybikKLXsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oY29uc3QgUGF0dGVybiYgcGF0
dGVybikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVzZUFu
dGlhbGlhc2luZyhib29sIGVuYWJsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpA
QCAtMTAzMyw2ICsxMTI2LDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93
c0NvbnQKIH0KICNlbmRpZgogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SW1hZ2VJbnRlcnBv
bGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSkKK3sKK30KKworSW50ZXJwb2xhdGlv
blF1YWxpdHkgR3JhcGhpY3NDb250ZXh0OjppbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gSW50ZXJwb2xhdGlvbkRlZmF1bHQ7Cit9CisKIH0KIAogLy8gdmlt
OiB0cz00IHN3PTQgZXQKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhp
Y3NDb250ZXh0V3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCShyZXZpc2lvbiAzNTg4OSkKKysrIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNTQsNiArMzU0LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgm
KSAKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VCdWZmZXIqKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIEFmZmluZVRyYW5zZm9ybSBHcmFwaGljc0NvbnRl
eHQ6OmdldENUTSgpIGNvbnN0CiB7IAogICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC00NzYsMTgg
KzQ4MSwxMyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VXNlQW50aWFsaWFzaW5nCiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBh
dHRlcm4oY29uc3QgUGF0dGVybiYpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SW1hZ2VJbnRl
cnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSkKIHsKLSAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKIH0K
IAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybihjb25zdCBQYXR0ZXJu
JikKK0ludGVycG9sYXRpb25RdWFsaXR5IEdyYXBoaWNzQ29udGV4dDo6aW1hZ2VJbnRlcnBvbGF0
aW9uUXVhbGl0eSgpIGNvbnN0CiB7Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuOwotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEludGVycG9sYXRp
b25EZWZhdWx0OwogfQogCiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVl
QXNUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5kZXJUcmVl
QXNUZXh0LmNwcAkocmV2aXNpb24gMzU4ODkpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9TVkdSZW5k
ZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc4LDcgKzE3OCw2IEBAIHN0YXRp
YyB2b2lkIHdyaXRlSW5kZW50KFRleHRTdHJlYW0mIHRzLCAKICAgICAgICAgdHMgPDwgIiAgIjsK
IH0KIAotLy8gRklYTUU6IE1heWJlIHRoaXMgc2hvdWxkIGJlIGluIEtDYW52YXNSZW5kZXJpbmdT
dHlsZS5jcHAKIHN0YXRpYyBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBEYXNoQXJyYXkmIGEpCiB7CiAgICAgdHMgPDwgInsiOwpJbmRleDogV2ViQ29yZS9zdmcv
R3JhZGllbnRBdHRyaWJ1dGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvR3JhZGllbnRB
dHRyaWJ1dGVzLmgJKHJldmlzaW9uIDM1ODg5KQorKysgV2ViQ29yZS9zdmcvR3JhZGllbnRBdHRy
aWJ1dGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDggQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUKIHsKLSAgICBzdHJ1Y3QgR3JhZGllbnRBdHRyaWJ1dGVzIHsKKyAgICBjbGFzcyBHcmFk
aWVudEF0dHJpYnV0ZXMgeworICAgIHB1YmxpYzoKICAgICAgICAgR3JhZGllbnRBdHRyaWJ1dGVz
KCkKICAgICAgICAgICAgIDogbV9zcHJlYWRNZXRob2QoU1BSRUFETUVUSE9EX1BBRCkKICAgICAg
ICAgICAgICwgbV9ib3VuZGluZ0JveE1vZGUodHJ1ZSkKQEAgLTM2LDYgKzM3LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUKICAgICAgICAgICAgICwgbV9zdG9wc1NldChmYWxzZSkKICAgICAgICAgewog
ICAgICAgICB9CisgICAgICAgIHZpcnR1YWwgfkdyYWRpZW50QXR0cmlidXRlcygpIHt9CiAKICAg
ICAgICAgU1ZHR3JhZGllbnRTcHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKCkgY29uc3QgeyByZXR1
cm4gbV9zcHJlYWRNZXRob2Q7IH0KICAgICAgICAgYm9vbCBib3VuZGluZ0JveE1vZGUoKSBjb25z
dCB7IHJldHVybiBtX2JvdW5kaW5nQm94TW9kZTsgfQpAQCAtNTIsMTIgKzU0LDIwIEBAIG5hbWVz
cGFjZSBXZWJDb3JlCiAgICAgICAgIGJvb2wgaGFzR3JhZGllbnRUcmFuc2Zvcm0oKSBjb25zdCB7
IHJldHVybiBtX2dyYWRpZW50VHJhbnNmb3JtU2V0OyB9CiAgICAgICAgIGJvb2wgaGFzU3RvcHMo
KSBjb25zdCB7IHJldHVybiBtX3N0b3BzU2V0OyB9CiAKKyAgICAgICAgdmlydHVhbCBQYXNzUmVm
UHRyPEdyYWRpZW50PiBjcmVhdGVHcmFkaWVudCgpID0gMDsKKworICAgICAgICB2b2lkIGFkZFN0
b3BzVG9HcmFkaWVudChHcmFkaWVudCogZ3JhZGllbnQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgeCA9IDA7IHggPCBtX3N0b3BzLnNpemUoKTsgeCsrKQorICAgICAgICAg
ICAgICAgIGdyYWRpZW50LT5hZGRDb2xvclN0b3AobV9zdG9wc1t4XS5maXJzdCwgbV9zdG9wc1t4
XS5zZWNvbmQpOworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICAvLyBQcm9wZXJ0
aWVzCiAgICAgICAgIFNWR0dyYWRpZW50U3ByZWFkTWV0aG9kIG1fc3ByZWFkTWV0aG9kOwotICAg
ICAgICBib29sIG1fYm91bmRpbmdCb3hNb2RlOwogICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9n
cmFkaWVudFRyYW5zZm9ybTsKICAgICAgICAgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4gbV9zdG9w
czsKKyAgICAgICAgYm9vbCBtX2JvdW5kaW5nQm94TW9kZTsKIAogICAgICAgICAvLyBQcm9wZXJ0
eSBzdGF0ZXMKICAgICAgICAgYm9vbCBtX3NwcmVhZE1ldGhvZFNldCA6IDE7CkluZGV4OiBXZWJD
b3JlL3N2Zy9MaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3N2Zy9MaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMuaAkocmV2aXNpb24gMzU4ODkpCisrKyBXZWJD
b3JlL3N2Zy9MaW5lYXJHcmFkaWVudEF0dHJpYnV0ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4
ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8
emltbWVybWFubkBrZGUub3JnPgogCi0gICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBw
cm9qZWN0Ci0KICAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKICAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKQEAgLTI4LDcgKzI2LDggQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUKIHsKLSAgICBzdHJ1Y3QgTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVz
IDogR3JhZGllbnRBdHRyaWJ1dGVzIHsKKyAgICBjbGFzcyBMaW5lYXJHcmFkaWVudEF0dHJpYnV0
ZXMgOiBwdWJsaWMgR3JhZGllbnRBdHRyaWJ1dGVzIHsKKyAgICBwdWJsaWM6CiAgICAgICAgIExp
bmVhckdyYWRpZW50QXR0cmlidXRlcygpCiAgICAgICAgICAgICA6IG1feDEoMC4wKQogICAgICAg
ICAgICAgLCBtX3kxKDAuMCkKQEAgLTU2LDYgKzU1LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAg
ICAgICAgIGJvb2wgaGFzWDIoKSBjb25zdCB7IHJldHVybiBtX3gyU2V0OyB9CiAgICAgICAgIGJv
b2wgaGFzWTIoKSBjb25zdCB7IHJldHVybiBtX3kyU2V0OyB9CiAKKyAgICAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPEdyYWRpZW50PiBjcmVhdGVHcmFkaWVudCgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIFJlZlB0cjxHcmFkaWVudD4gZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKAorICAgICAg
ICAgICAgICAgIEZsb2F0UG9pbnQ6Om5hcnJvd1ByZWNpc2lvbihtX3gxLCBtX3kxKSwKKyAgICAg
ICAgICAgICAgICBGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24obV94MiwgbV95MikpOworCisg
ICAgICAgICAgICBhZGRTdG9wc1RvR3JhZGllbnQoZ3JhZGllbnQuZ2V0KCkpOworICAgICAgICAg
ICAgcmV0dXJuIGdyYWRpZW50LnJlbGVhc2UoKTsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToK
ICAgICAgICAgLy8gUHJvcGVydGllcwogICAgICAgICBkb3VibGUgbV94MTsKSW5kZXg6IFdlYkNv
cmUvc3ZnL1JhZGlhbEdyYWRpZW50QXR0cmlidXRlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
c3ZnL1JhZGlhbEdyYWRpZW50QXR0cmlidXRlcy5oCShyZXZpc2lvbiAzNTg4OSkKKysrIFdlYkNv
cmUvc3ZnL1JhZGlhbEdyYWRpZW50QXR0cmlidXRlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlCiB7Ci0gICAgc3RydWN0IFJhZGlhbEdyYWRp
ZW50QXR0cmlidXRlcyA6IEdyYWRpZW50QXR0cmlidXRlcyB7CisgICAgY2xhc3MgUmFkaWFsR3Jh
ZGllbnRBdHRyaWJ1dGVzIDogcHVibGljIEdyYWRpZW50QXR0cmlidXRlcyB7CisgICAgcHVibGlj
OgogICAgICAgICBSYWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMoKQogICAgICAgICAgICAgOiBtX2N4
KDAuNSkKICAgICAgICAgICAgICwgbV9jeSgwLjUpCkBAIC02MSw2ICs2MiwxOCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZQogICAgICAgICBib29sIGhhc0Z4KCkgY29uc3QgeyByZXR1cm4gbV9meFNldDsg
fQogICAgICAgICBib29sIGhhc0Z5KCkgY29uc3QgeyByZXR1cm4gbV9meVNldDsgfQogCisgICAg
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlR3JhZGllbnQoKQorICAgICAg
ICB7CisgICAgICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50ID0gR3JhZGllbnQ6OmNy
ZWF0ZSgKKyAgICAgICAgICAgICAgICBGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24obV9meCwg
bV9meSksCisgICAgICAgICAgICAgICAgMC5mLAorICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQ6
Om5hcnJvd1ByZWNpc2lvbihtX2N4LCBtX2N5KSwKKyAgICAgICAgICAgICAgICBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KG1fcikpOworCisgICAgICAgICAgICBhZGRTdG9wc1RvR3JhZGllbnQoZ3Jh
ZGllbnQuZ2V0KCkpOworICAgICAgICAgICAgcmV0dXJuIGdyYWRpZW50LnJlbGVhc2UoKTsKKyAg
ICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgLy8gUHJvcGVydGllcwogICAgICAgICBk
b3VibGUgbV9jeDsKSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24g
MzU4ODkpCisrKyBXZWJDb3JlL3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTksNyArMTU5LDcgQEAgVmVjdG9yPFNWR0dyYWRpZW50U3RvcD4gU1ZHR3JhZGll
bnRFbGVtZQogICAgICAgICAgICAgICAgIHN0b3BTdHlsZS0+ZGVyZWYoZG9jdW1lbnQoKS0+cmVu
ZGVyQXJlbmEoKSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHN0b3BzLmFwcGVuZCht
YWtlR3JhZGllbnRTdG9wKHN0b3BPZmZzZXQsIG1ha2VSR0JBKGNvbG9yLnJlZCgpLCBjb2xvci5n
cmVlbigpLCBjb2xvci5ibHVlKCksIGludChvcGFjaXR5ICogMjU1LikpKSk7CisgICAgICAgICAg
ICBzdG9wcy5hcHBlbmQobWFrZUdyYWRpZW50U3RvcChzdG9wT2Zmc2V0LCBjb2xvcldpdGhPdmVy
cmlkZUFscGhhKGNvbG9yLnJnYigpLCBvcGFjaXR5KSkpOwogICAgICAgICB9CiAgICAgfQogCklu
ZGV4OiBXZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvc3ZnL1NWR0xpbmVhckdyYWRpZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDM1
ODg5KQorKysgV2ViQ29yZS9zdmcvU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODYsMTIgKzg2LDE1IEBAIHZvaWQgU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50
OjpidWlsZEdyYWQKIAogICAgIFJlZlB0cjxTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50PiBs
aW5lYXJHcmFkaWVudCA9IFdURjo6c3RhdGljX3BvaW50ZXJfY2FzdDxTVkdQYWludFNlcnZlckxp
bmVhckdyYWRpZW50PihtX3Jlc291cmNlKTsKIAotICAgIGxpbmVhckdyYWRpZW50LT5zZXRHcmFk
aWVudFN0b3BzKGF0dHJpYnV0ZXMuc3RvcHMoKSk7CisgICAgbGluZWFyR3JhZGllbnQtPnNldEdy
YWRpZW50KGF0dHJpYnV0ZXMuY3JlYXRlR3JhZGllbnQoKSk7CisKKyAgICAvLyBUaGlzIGNvZGUg
c2hvdWxkIGdvIGF3YXkuICBQYWludFNlcnZlcnMgc2hvdWxkIGdvIGF3YXkgdG9vLgorICAgIC8v
IE9ubHkgdGhpcyBjb2RlIHNob3VsZCBjYXJlIGFib3V0IGJvdW5kaW5nIGJveGVzCiAgICAgbGlu
ZWFyR3JhZGllbnQtPnNldEJvdW5kaW5nQm94TW9kZShhdHRyaWJ1dGVzLmJvdW5kaW5nQm94TW9k
ZSgpKTsKKyAgICAKKyAgICAvLyBUaGVzZSBzaG91bGQgcG9zc2libHkgYmUgc3VwcG9ydGVkIG9u
IEdyYWRpZW50CiAgICAgbGluZWFyR3JhZGllbnQtPnNldEdyYWRpZW50U3ByZWFkTWV0aG9kKGF0
dHJpYnV0ZXMuc3ByZWFkTWV0aG9kKCkpOwogICAgIGxpbmVhckdyYWRpZW50LT5zZXRHcmFkaWVu
dFRyYW5zZm9ybShhdHRyaWJ1dGVzLmdyYWRpZW50VHJhbnNmb3JtKCkpOwotICAgIGxpbmVhckdy
YWRpZW50LT5zZXRHcmFkaWVudFN0YXJ0KEZsb2F0UG9pbnQ6Om5hcnJvd1ByZWNpc2lvbihhdHRy
aWJ1dGVzLngxKCksIGF0dHJpYnV0ZXMueTEoKSkpOwotICAgIGxpbmVhckdyYWRpZW50LT5zZXRH
cmFkaWVudEVuZChGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24oYXR0cmlidXRlcy54MigpLCBh
dHRyaWJ1dGVzLnkyKCkpKTsKIH0KIAogTGluZWFyR3JhZGllbnRBdHRyaWJ1dGVzIFNWR0xpbmVh
ckdyYWRpZW50RWxlbWVudDo6Y29sbGVjdEdyYWRpZW50UHJvcGVydGllcygpIGNvbnN0CkluZGV4
OiBXZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaAkocmV2aXNpb24gMzU4ODkpCisr
KyBXZWJDb3JlL3N2Zy9TVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMiw4ICsyLDYgQEAKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgg
Tmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgICAgICAgICAgICAgICAg
ICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAKLSAgICBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKLQogICAgIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAgICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwogICAgIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgpJbmRleDogV2ViQ29yZS9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCShyZXZpc2lv
biAzNTg4OSkKKysrIFdlYkNvcmUvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk0LDE0ICs5NCwxMSBAQCB2b2lkIFNWR1JhZGlhbEdyYWRpZW50RWxl
bWVudDo6YnVpbGRHcmFkCiAgICAgICAgIHJldHVybjsKIAogICAgIFJlZlB0cjxTVkdQYWludFNl
cnZlclJhZGlhbEdyYWRpZW50PiByYWRpYWxHcmFkaWVudCA9IFdURjo6c3RhdGljX3BvaW50ZXJf
Y2FzdDxTVkdQYWludFNlcnZlclJhZGlhbEdyYWRpZW50PihtX3Jlc291cmNlKTsKKyAgICByYWRp
YWxHcmFkaWVudC0+c2V0R3JhZGllbnQoYXR0cmlidXRlcy5jcmVhdGVHcmFkaWVudCgpKTsKIAot
ICAgIHJhZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudFN0b3BzKGF0dHJpYnV0ZXMuc3RvcHMoKSk7
CiAgICAgcmFkaWFsR3JhZGllbnQtPnNldEJvdW5kaW5nQm94TW9kZShhdHRyaWJ1dGVzLmJvdW5k
aW5nQm94TW9kZSgpKTsKICAgICByYWRpYWxHcmFkaWVudC0+c2V0R3JhZGllbnRTcHJlYWRNZXRo
b2QoYXR0cmlidXRlcy5zcHJlYWRNZXRob2QoKSk7IAogICAgIHJhZGlhbEdyYWRpZW50LT5zZXRH
cmFkaWVudFRyYW5zZm9ybShhdHRyaWJ1dGVzLmdyYWRpZW50VHJhbnNmb3JtKCkpOwotICAgIHJh
ZGlhbEdyYWRpZW50LT5zZXRHcmFkaWVudENlbnRlcihGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNp
b24oYXR0cmlidXRlcy5jeCgpLCBhdHRyaWJ1dGVzLmN5KCkpKTsKLSAgICByYWRpYWxHcmFkaWVu
dC0+c2V0R3JhZGllbnRGb2NhbChGbG9hdFBvaW50OjpuYXJyb3dQcmVjaXNpb24oYXR0cmlidXRl
cy5meCgpLCBhdHRyaWJ1dGVzLmZ5KCkpKTsKLSAgICByYWRpYWxHcmFkaWVudC0+c2V0R3JhZGll
bnRSYWRpdXMobmFycm93UHJlY2lzaW9uVG9GbG9hdChhdHRyaWJ1dGVzLnIoKSkpOwogfQogCiBS
YWRpYWxHcmFkaWVudEF0dHJpYnV0ZXMgU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50Ojpjb2xsZWN0
R3JhZGllbnRQcm9wZXJ0aWVzKCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvc3ZnL2dyYXBoaWNzL1NW
R1BhaW50U2VydmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvZ3JhcGhpY3MvU1ZHUGFp
bnRTZXJ2ZXIuaAkocmV2aXNpb24gMzU4ODkpCisrKyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQ
YWludFNlcnZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04OSwxOCArODksMTEgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBzdGF0aWMgU1ZHUGFpbnRTZXJ2ZXJTb2xpZCogc2hhcmVkU29s
aWRQYWludFNlcnZlcigpOwogCiAgICAgcHJvdGVjdGVkOgotI2lmIFBMQVRGT1JNKENHKQotICAg
ICAgICB2b2lkIHN0cm9rZVBhdGgoQ0dDb250ZXh0UmVmLCBjb25zdCBSZW5kZXJPYmplY3QqKSBj
b25zdDsKLSAgICAgICAgdm9pZCBjbGlwVG9TdHJva2VQYXRoKENHQ29udGV4dFJlZiwgY29uc3Qg
UmVuZGVyT2JqZWN0KikgY29uc3Q7Ci0gICAgICAgIHZvaWQgZmlsbFBhdGgoQ0dDb250ZXh0UmVm
LCBjb25zdCBSZW5kZXJPYmplY3QqKSBjb25zdDsKLSAgICAgICAgdm9pZCBjbGlwVG9GaWxsUGF0
aChDR0NvbnRleHRSZWYsIGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0OwotI2VuZGlmCi0KICNp
ZiBQTEFURk9STShRVCkKICAgICAgICAgdm9pZCBzZXRQZW5Qcm9wZXJ0aWVzKGNvbnN0IFJlbmRl
ck9iamVjdCosIGNvbnN0IFJlbmRlclN0eWxlKiwgUVBlbiYpIGNvbnN0OwogI2VuZGlmCiAgICAg
cHJvdGVjdGVkOgotICAgICAgICBTVkdQYWludFNlcnZlcigpOyAgICAgICAgCisgICAgICAgIFNW
R1BhaW50U2VydmVyKCk7CiAgICAgfTsKIAogICAgIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYsIGNvbnN0IFNWR1BhaW50U2VydmVyJik7CkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFw
aGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2
Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAkocmV2aXNpb24gMzU4ODkpCisr
KyBXZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiU1ZHR3JhZGllbnRFbGVtZW50
LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVyVHJlZUFzVGV4dC5oIgorI2luY2x1ZGUgIkltYWdlQnVm
ZmVyLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjMsMTAgKzY0LDcgQEAgU1ZHUGFp
bnRTZXJ2ZXJHcmFkaWVudDo6U1ZHUGFpbnRTZXJ2ZXJHcgogICAgIDogbV9zcHJlYWRNZXRob2Qo
U1BSRUFETUVUSE9EX1BBRCkKICAgICAsIG1fYm91bmRpbmdCb3hNb2RlKHRydWUpCiAgICAgLCBt
X293bmVyRWxlbWVudChvd25lcikKLQogI2lmIFBMQVRGT1JNKENHKQotICAgICwgbV9zdG9wc0Nh
Y2hlKDApCi0gICAgLCBtX3NoYWRpbmdDYWNoZSgwKQogICAgICwgbV9zYXZlZENvbnRleHQoMCkK
ICAgICAsIG1faW1hZ2VCdWZmZXIoMCkKICNlbmRpZgpAQCAtNzYsMTkgKzc0LDE2IEBAIFNWR1Bh
aW50U2VydmVyR3JhZGllbnQ6OlNWR1BhaW50U2VydmVyR3IKIAogU1ZHUGFpbnRTZXJ2ZXJHcmFk
aWVudDo6flNWR1BhaW50U2VydmVyR3JhZGllbnQoKQogewotI2lmIFBMQVRGT1JNKENHKQotICAg
IENHU2hhZGluZ1JlbGVhc2UobV9zaGFkaW5nQ2FjaGUpOwotI2VuZGlmCiB9CiAKLWNvbnN0IFZl
Y3RvcjxTVkdHcmFkaWVudFN0b3A+JiBTVkdQYWludFNlcnZlckdyYWRpZW50OjpncmFkaWVudFN0
b3BzKCkgY29uc3QKK0dyYWRpZW50KiBTVkdQYWludFNlcnZlckdyYWRpZW50OjpncmFkaWVudCgp
IGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fc3RvcHM7CisgICAgcmV0dXJuIG1fZ3JhZGllbnQuZ2V0
KCk7CiB9CiAKLXZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0R3JhZGllbnRTdG9wcyhj
b25zdCBWZWN0b3I8U1ZHR3JhZGllbnRTdG9wPiYgc3RvcHMpCit2b2lkIFNWR1BhaW50U2VydmVy
R3JhZGllbnQ6OnNldEdyYWRpZW50KFBhc3NSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50KQogewot
ICAgIG1fc3RvcHMgPSBzdG9wczsKKyAgICBtX2dyYWRpZW50ID0gZ3JhZGllbnQ7CiB9CiAKIFNW
R0dyYWRpZW50U3ByZWFkTWV0aG9kIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNwcmVhZE1ldGhv
ZCgpIGNvbnN0CkBAIC0xMjcsNyArMTIyLDcgQEAgVGV4dFN0cmVhbSYgU1ZHUGFpbnRTZXJ2ZXJH
cmFkaWVudDo6ZXh0ZQogICAgIG1fb3duZXJFbGVtZW50LT5idWlsZEdyYWRpZW50KCk7CiAKICAg
ICAvLyBhYnN0cmFjdCwgZG9uJ3Qgc3RyZWFtIHR5cGUKLSAgICB0cyAgPDwgIltzdG9wcz0iIDw8
IGdyYWRpZW50U3RvcHMoKSA8PCAiXSI7CisgICAgLy90cyAgPDwgIltzdG9wcz0iIDw8IGdyYWRp
ZW50KCktPnN0b3BzKCkgPDwgIl0iOwogICAgIGlmIChzcHJlYWRNZXRob2QoKSAhPSBTUFJFQURN
RVRIT0RfUEFEKQogICAgICAgICB0cyA8PCAiW21ldGhvZD0iIDw8IHNwcmVhZE1ldGhvZCgpIDw8
ICJdIjsKICAgICBpZiAoIWJvdW5kaW5nQm94TW9kZSgpKQpJbmRleDogV2ViQ29yZS9zdmcvZ3Jh
cGhpY3MvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3Zn
L2dyYXBoaWNzL1NWR1BhaW50U2VydmVyR3JhZGllbnQuaAkocmV2aXNpb24gMzU4ODkpCisrKyBX
ZWJDb3JlL3N2Zy9ncmFwaGljcy9TVkdQYWludFNlcnZlckdyYWRpZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgogI2lu
Y2x1ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiR3JhZGllbnQuaCIKICNpbmNsdWRlICJTVkdQYWlu
dFNlcnZlci5oIgogCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KQEAgLTU0LDE5ICs1NSwx
NCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFNQUkVBRE1FVEhPRF9SRVBFQVQgPSAz
CiAgICAgfTsKIAotI2lmIFBMQVRGT1JNKENHKQotICAgIHR5cGVkZWYgc3RkOjpwYWlyPENHRmxv
YXQsIENvbG9yPiBTVkdHcmFkaWVudFN0b3A7Ci0jZWxzZQogICAgIHR5cGVkZWYgc3RkOjpwYWly
PGZsb2F0LCBDb2xvcj4gU1ZHR3JhZGllbnRTdG9wOwotI2VuZGlmCi0KIAogICAgIGNsYXNzIFNW
R1BhaW50U2VydmVyR3JhZGllbnQgOiBwdWJsaWMgU1ZHUGFpbnRTZXJ2ZXIgewogICAgIHB1Ymxp
YzoKICAgICAgICAgdmlydHVhbCB+U1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudCgpOwogCi0gICAgICAg
IGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+JiBncmFkaWVudFN0b3BzKCkgY29uc3Q7Ci0g
ICAgICAgIHZvaWQgc2V0R3JhZGllbnRTdG9wcyhjb25zdCBWZWN0b3I8U1ZHR3JhZGllbnRTdG9w
PiYpOworICAgICAgICB2b2lkIHNldEdyYWRpZW50KFBhc3NSZWZQdHI8R3JhZGllbnQ+KTsKKyAg
ICAgICAgR3JhZGllbnQqIGdyYWRpZW50KCkgY29uc3Q7CiAKICAgICAgICAgU1ZHR3JhZGllbnRT
cHJlYWRNZXRob2Qgc3ByZWFkTWV0aG9kKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0R3JhZGll
bnRTcHJlYWRNZXRob2QoY29uc3QgU1ZHR3JhZGllbnRTcHJlYWRNZXRob2QmKTsKQEAgLTg2LDEz
ICs4Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiBQTEFURk9STShDRykKICAgICAgICAg
dmlydHVhbCB2b2lkIHRlYXJkb3duKEdyYXBoaWNzQ29udGV4dComLCBjb25zdCBSZW5kZXJPYmpl
Y3QqLCBTVkdQYWludFRhcmdldFR5cGUsIGJvb2wgaXNQYWludGluZ1RleHQpIGNvbnN0OwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgcmVuZGVyUGF0aChHcmFwaGljc0NvbnRleHQqJiwgY29uc3QgUmVu
ZGVyT2JqZWN0KiwgU1ZHUGFpbnRUYXJnZXRUeXBlKSBjb25zdDsKLQotICAgICAgICB2aXJ0dWFs
IHZvaWQgaW52YWxpZGF0ZSgpOwotCi0gICAgICAgIC8vIEhlbHBlcnMKLSAgICAgICAgdm9pZCB1
cGRhdGVRdWFydHpHcmFkaWVudFN0b3BzQ2FjaGUoY29uc3QgVmVjdG9yPFNWR0dyYWRpZW50U3Rv
cD4mKTsKLSAgICAgICAgdm9pZCB1cGRhdGVRdWFydHpHcmFkaWVudENhY2hlKGNvbnN0IFNWR1Bh
aW50U2VydmVyR3JhZGllbnQqKTsKLSAgICAgICAgdm9pZCBoYW5kbGVCb3VuZGluZ0JveE1vZGVB
bmRHcmFkaWVudFRyYW5zZm9ybWF0aW9uKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVj
dCYgdGFyZ2V0UmVjdCkgY29uc3Q7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQpAQCAtMTAz
LDkgKzkyLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJvdGVjdGVkOgogICAgICAg
ICBTVkdQYWludFNlcnZlckdyYWRpZW50KGNvbnN0IFNWR0dyYWRpZW50RWxlbWVudCogb3duZXIp
OwotICAgICAgICAKKwogICAgIHByaXZhdGU6Ci0gICAgICAgIFZlY3RvcjxTVkdHcmFkaWVudFN0
b3A+IG1fc3RvcHM7CisgICAgICAgIFJlZlB0cjxHcmFkaWVudD4gbV9ncmFkaWVudDsKICAgICAg
ICAgU1ZHR3JhZGllbnRTcHJlYWRNZXRob2QgbV9zcHJlYWRNZXRob2Q7CiAgICAgICAgIGJvb2wg
bV9ib3VuZGluZ0JveE1vZGU7CiAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBtX2dyYWRpZW50VHJh
bnNmb3JtOwpAQCAtMTEzLDI3ICsxMDIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBQ
TEFURk9STShDRykKICAgICBwdWJsaWM6Ci0gICAgICAgIHR5cGVkZWYgc3RydWN0IHsKLSAgICAg
ICAgICAgIENHRmxvYXQgY29sb3JBcnJheVs0XTsKLSAgICAgICAgICAgIENHRmxvYXQgb2Zmc2V0
OwotICAgICAgICAgICAgQ0dGbG9hdCBwcmV2aW91c0RlbHRhSW52ZXJzZTsKLSAgICAgICAgfSBR
dWFydHpHcmFkaWVudFN0b3A7Ci0gICAgICAgIAotICAgICAgICBzdHJ1Y3QgU2hhcmVkU3RvcENh
Y2hlIDogcHVibGljIFJlZkNvdW50ZWQ8U2hhcmVkU3RvcENhY2hlPiB7Ci0gICAgICAgIHB1Ymxp
YzoKLSAgICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZFN0b3BDYWNoZT4gY3JlYXRl
KCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZFN0b3BDYWNoZSk7IH0KLSAgICAgICAgICAg
IAotICAgICAgICAgICAgVmVjdG9yPFF1YXJ0ekdyYWRpZW50U3RvcD4gbV9zdG9wczsKLSAgICAg
ICAgCi0gICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICBTaGFyZWRTdG9wQ2FjaGUoKSB7IH0K
LSAgICAgICAgfTsKLQotICAgICAgICBSZWZQdHI8U2hhcmVkU3RvcENhY2hlPiBtX3N0b3BzQ2Fj
aGU7Ci0KLSAgICAgICAgQ0dTaGFkaW5nUmVmIG1fc2hhZGluZ0NhY2hlOwogICAgICAgICBtdXRh
YmxlIEdyYXBoaWNzQ29udGV4dCogbV9zYXZlZENvbnRleHQ7Ci0gICAgICAgIG11dGFibGUgSW1h
Z2VCdWZmZXIqIG1faW1hZ2VCdWZmZXI7CisgICAgICAgIG11dGFibGUgT3duUHRyPEltYWdlQnVm
ZmVyPiBtX2ltYWdlQnVmZmVyOwogI2VuZGlmCiAgICAgfTsKIApJbmRleDogV2ViQ29yZS9zdmcv
Z3JhcGhpY3MvY2Fpcm8vU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENhaXJvLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jYWlyby9TVkdQYWludFNlcnZlckdyYWRpZW50Q2Fp
cm8uY3BwCShyZXZpc2lvbiAzNTg4OSkKKysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NhaXJvL1NW
R1BhaW50U2VydmVyR3JhZGllbnRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3
LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gVE9ETzogU2hhcmUgdGhpcyBjb2RlIHdpdGgg
YWxsIFNWR1BhaW50U2VydmVycwogc3RhdGljIHZvaWQgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdHlsZSwg
Y29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKTsKLQogICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhT
VkdSZW5kZXJTdHlsZTo6Y3NzUHJpbWl0aXZlVG9MZW5ndGgob2JqZWN0LCBzdHlsZS0+c3Ryb2tl
V2lkdGgoKSwgMS4wKSk7CiAgICAgY29udGV4dC0+c2V0TGluZUNhcChzdHlsZS0+Y2FwU3R5bGUo
KSk7CiAgICAgY29udGV4dC0+c2V0TGluZUpvaW4oc3R5bGUtPmpvaW5TdHlsZSgpKTsKQEAgLTUw
LDg2ICs0OCwzMiBAQCBzdGF0aWMgdm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KEdyCiAg
ICAgZm9yIChzaXplX3QgaSA9IDAgOyBpIDwgZGFzaGVzLnNpemUoKSA7IGkrKykKICAgICAgICAg
ZHNoW2ldID0gZGFzaGVzW2ldOwogICAgIGRvdWJsZSBkYXNoT2Zmc2V0ID0gU1ZHUmVuZGVyU3R5
bGU6OmNzc1ByaW1pdGl2ZVRvTGVuZ3RoKG9iamVjdCwgc3R5bGUtPnN0cm9rZURhc2hPZmZzZXQo
KSwgMC4wKTsKLSAgICBjYWlyb19zZXRfZGFzaChjciwgZHNoLmdldCgpLCBkYXNoZXMuc2l6ZSgp
LCBkYXNoT2Zmc2V0KTsKKyAgICBjYWlyb19zZXRfZGFzaChjb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKSwgZHNoLmdldCgpLCBkYXNoZXMuc2l6ZSgpLCBkYXNoT2Zmc2V0KTsKIH0KIAogYm9vbCBT
VkdQYWludFNlcnZlckdyYWRpZW50OjpzZXR1cChHcmFwaGljc0NvbnRleHQqJiBjb250ZXh0LCBj
b25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCwgU1ZHUGFpbnRUYXJnZXRUeXBlIHR5cGUsIGJvb2wg
aXNQYWludGluZ1RleHQpIGNvbnN0CiB7CiAgICAgbV9vd25lckVsZW1lbnQtPmJ1aWxkR3JhZGll
bnQoKTsKIAotICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0g
ICAgY2Fpcm9fcGF0dGVybl90KiBwYXR0ZXJuOwotCi0gICAgY2Fpcm9fbWF0cml4X3QgbWF0cml4
OwotICAgIGNhaXJvX21hdHJpeF9pbml0X2lkZW50aXR5ICgmbWF0cml4KTsKLSAgICBjb25zdCBj
YWlyb19tYXRyaXhfdCBncmFkaWVudF9tYXRyaXggPSBncmFkaWVudFRyYW5zZm9ybSgpOwogICAg
IGNvbnN0IFNWR1JlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUo
KTsKIAotICAgIGlmICh0aGlzLT50eXBlKCkgPT0gTGluZWFyR3JhZGllbnRQYWludFNlcnZlcikg
ewotICAgICAgICBjb25zdCBTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50KiBsaW5lYXIgPSBz
dGF0aWNfY2FzdDxjb25zdCBTVkdQYWludFNlcnZlckxpbmVhckdyYWRpZW50Kj4odGhpcyk7Ci0K
LSAgICAgICAgaWYgKGJvdW5kaW5nQm94TW9kZSgpKSB7Ci0gICAgICAgICAgICBGbG9hdFJlY3Qg
YmJveCA9IG9iamVjdC0+cmVsYXRpdmVCQm94KGZhbHNlKTsKLSAgICAgICAgICAgIGlmIChiYm94
LndpZHRoKCkgPT0gMCB8fCBiYm94LmhlaWdodCgpID09IDApIHsKLSAgICAgICAgICAgICAgICBh
cHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KGNvbnRleHQsIHN0eWxlLCBvYmplY3QpOwotICAgICAg
ICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiKGNyLCAwLCAwLCAwKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhaXJvX21hdHJp
eF90cmFuc2xhdGUoJm1hdHJpeCwgYmJveC54KCksIGJib3gueSgpKTsKLSAgICAgICAgICAgIGNh
aXJvX21hdHJpeF9zY2FsZSgmbWF0cml4LCBiYm94LndpZHRoKCksIGJib3guaGVpZ2h0KCkpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgZG91YmxlIHgwID0gbGluZWFyLT5ncmFkaWVudFN0YXJ0KCku
eCgpOwotICAgICAgICBkb3VibGUgeTAgPSBsaW5lYXItPmdyYWRpZW50U3RhcnQoKS55KCk7Ci0g
ICAgICAgIGRvdWJsZSB4MSA9IGxpbmVhci0+Z3JhZGllbnRFbmQoKS54KCk7Ci0gICAgICAgIGRv
dWJsZSB5MSA9IGxpbmVhci0+Z3JhZGllbnRFbmQoKS55KCk7Ci0KLSAgICAgICAgcGF0dGVybiA9
IGNhaXJvX3BhdHRlcm5fY3JlYXRlX2xpbmVhcih4MCwgeTAsIHgxLCB5MSk7Ci0KLSAgICB9IGVs
c2UgaWYgKHRoaXMtPnR5cGUoKSA9PSBSYWRpYWxHcmFkaWVudFBhaW50U2VydmVyKSB7Ci0gICAg
ICAgIGNvbnN0IFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQqIHJhZGlhbCA9IHN0YXRpY19j
YXN0PGNvbnN0IFNWR1BhaW50U2VydmVyUmFkaWFsR3JhZGllbnQqPih0aGlzKTsKLQotICAgICAg
ICBpZiAoYm91bmRpbmdCb3hNb2RlKCkpIHsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBiYm94ID0g
b2JqZWN0LT5yZWxhdGl2ZUJCb3goZmFsc2UpOwotICAgICAgICAgICAgaWYgKGJib3gud2lkdGgo
KSA9PSAwIHx8IGJib3guaGVpZ2h0KCkgPT0gMCkgewotICAgICAgICAgICAgICAgIGFwcGx5U3Ry
b2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5bGUsIG9iamVjdCk7Ci0gICAgICAgICAgICAg
ICAgY2Fpcm9fc2V0X3NvdXJjZV9yZ2IoY3IsIDAsIDAsIDApOwotICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2Fpcm9fbWF0cml4X3RyYW5z
bGF0ZSgmbWF0cml4LCBiYm94LngoKSwgYmJveC55KCkpOwotICAgICAgICAgICAgY2Fpcm9fbWF0
cml4X3NjYWxlKCZtYXRyaXgsIGJib3gud2lkdGgoKSwgYmJveC5oZWlnaHQoKSk7Ci0gICAgICAg
IH0KLQotICAgICAgICBkb3VibGUgY3ggPSByYWRpYWwtPmdyYWRpZW50Q2VudGVyKCkueCgpOwot
ICAgICAgICBkb3VibGUgY3kgPSByYWRpYWwtPmdyYWRpZW50Q2VudGVyKCkueSgpOwotICAgICAg
ICBkb3VibGUgcmFkaXVzID0gcmFkaWFsLT5ncmFkaWVudFJhZGl1cygpOwotICAgICAgICBkb3Vi
bGUgZnggPSByYWRpYWwtPmdyYWRpZW50Rm9jYWwoKS54KCk7Ci0gICAgICAgIGRvdWJsZSBmeSA9
IHJhZGlhbC0+Z3JhZGllbnRGb2NhbCgpLnkoKTsKLQotICAgICAgICBmeCAtPSBjeDsKLSAgICAg
ICAgZnkgLT0gY3k7Ci0KLSAgICAgICAgZG91YmxlIGZyYWRpdXMgPSAwLjA7Ci0KLSAgICAgICAg
aWYgKHNxcnQoZnggKiBmeCArIGZ5ICogZnkpID49IHJhZGl1cykgewotICAgICAgICAgICAgZG91
YmxlIGFuZ2xlID0gYXRhbjIoZnksIGZ4KTsKLSAgICAgICAgICAgIGlmICgoZnggKyBjeCkgPCBj
eCkKLSAgICAgICAgICAgICAgICBmeCA9IGNvcyhhbmdsZSkgKiByYWRpdXMgKyAwLjAwMjsKLSAg
ICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBmeCA9IGNvcyhhbmdsZSkgKiByYWRpdXMg
LSAwLjAwMjsKLSAgICAgICAgICAgIGlmICgoZnkgKyBjeSkgPCBjeSkKLSAgICAgICAgICAgICAg
ICBmeSA9IHNpbihhbmdsZSkgKiByYWRpdXMgKyAwLjAwMjsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBmeSA9IHNpbihhbmdsZSkgKiByYWRpdXMgLSAwLjAwMjsKLSAgICAgICAg
fQorICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXg7CisgICAgaWYgKGJvdW5kaW5nQm94TW9kZSgp
KSB7CisgICAgICAgIEZsb2F0UmVjdCBiYm94ID0gb2JqZWN0LT5yZWxhdGl2ZUJCb3goZmFsc2Up
OworICAgICAgICBtYXRyaXgudHJhbnNsYXRlKGJib3gueCgpLCBiYm94LnkoKSk7CisgICAgICAg
IG1hdHJpeC5zY2FsZShiYm94LndpZHRoKCksIGJib3guaGVpZ2h0KCkpOworICAgIH0KKyAgICBt
YXRyaXgubXVsdGlwbHkoZ3JhZGllbnRUcmFuc2Zvcm0oKSk7CiAKLSAgICAgICAgcGF0dGVybiA9
IGNhaXJvX3BhdHRlcm5fY3JlYXRlX3JhZGlhbChmeCArIGN4LCBmeSArIGN5LCBmcmFkaXVzLCBj
eCwgY3ksIHJhZGl1cyk7CisgICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAm
JiBzdHlsZS0+aGFzRmlsbCgpKQorICAgICAgICBjb250ZXh0LT5zZXRGaWxsUnVsZShzdHlsZS0+
ZmlsbFJ1bGUoKSk7CiAKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQorICAgIGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiBzdHlsZS0+aGFz
U3Ryb2tlKCkpCisgICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5
bGUsIG9iamVjdCk7CiAKLSAgICBjYWlyb19wYXR0ZXJuX3NldF9maWx0ZXIocGF0dGVybiwgQ0FJ
Uk9fRklMVEVSX0JJTElORUFSKTsKKyAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpOworICAgIGNhaXJvX3BhdHRlcm5fdCogcGF0dGVybjsKKyAgICBwYXR0ZXJuID0g
Z3JhZGllbnQoKS0+cGxhdGZvcm1HcmFkaWVudCgpOwogCiAgICAgc3dpdGNoIChzcHJlYWRNZXRo
b2QoKSkgewogICAgICAgICBjYXNlIFNQUkVBRE1FVEhPRF9QQUQ6CkBAIC0xNDYsMjkgKzkwLDEx
IEBAIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXAoR3JhcGgKICAgICAgICAgICAg
IGJyZWFrOwogICAgIH0KIAotICAgIGNhaXJvX21hdHJpeF9tdWx0aXBseSgmbWF0cml4LCAmbWF0
cml4LCAmZ3JhZGllbnRfbWF0cml4KTsKLSAgICBjYWlyb19tYXRyaXhfaW52ZXJ0KCZtYXRyaXgp
OwotICAgIGNhaXJvX3BhdHRlcm5fc2V0X21hdHJpeChwYXR0ZXJuLCAmbWF0cml4KTsKLQotICAg
IGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+JiBzdG9wcyA9IGdyYWRpZW50U3RvcHMoKTsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdG9wcy5zaXplKCk7ICsraSkgewotICAg
ICAgICBmbG9hdCBvZmZzZXQgPSBzdG9wc1tpXS5maXJzdDsKLSAgICAgICAgQ29sb3IgY29sb3Ig
PSBzdG9wc1tpXS5zZWNvbmQ7Ci0gICAgICAgIGlmIChpID4gMCAmJiBvZmZzZXQgPCBzdG9wc1tp
IC0gMV0uZmlyc3QpCi0gICAgICAgICAgICBvZmZzZXQgPSBzdG9wc1tpIC0gMV0uZmlyc3Q7Ci0K
LSAgICAgICAgY2Fpcm9fcGF0dGVybl9hZGRfY29sb3Jfc3RvcF9yZ2JhKHBhdHRlcm4sIG9mZnNl
dCwgY29sb3IucmVkKCkgLyAyNTUuMCwgY29sb3IuZ3JlZW4oKSAvIDI1NS4wLCBjb2xvci5ibHVl
KCkgLyAyNTUuMCwgY29sb3IuYWxwaGEoKSAvIDI1NS4wKTsKLSAgICB9Ci0KLSAgICBpZiAoKHR5
cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHN0eWxlLT5oYXNGaWxsKCkpCi0gICAgICAg
IGNhaXJvX3NldF9maWxsX3J1bGUoY3IsIHN0eWxlLT5maWxsUnVsZSgpID09IFJVTEVfRVZFTk9E
RCA/IENBSVJPX0ZJTExfUlVMRV9FVkVOX09ERCA6IENBSVJPX0ZJTExfUlVMRV9XSU5ESU5HKTsK
LQotICAgIGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiBzdHlsZS0+aGFz
U3Ryb2tlKCkpCi0gICAgICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3R5
bGUsIG9iamVjdCk7CisgICAgY29uc3QgY2Fpcm9fbWF0cml4X3QgZ3JhZGllbnRfbWF0cml4ID0g
bWF0cml4LmludmVyc2UoKTsKKyAgICBjYWlyb19wYXR0ZXJuX3NldF9tYXRyaXgocGF0dGVybiwg
JmdyYWRpZW50X21hdHJpeCk7CiAKICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBwYXR0ZXJuKTsK
LSAgICBjYWlyb19wYXR0ZXJuX2Rlc3Ryb3kocGF0dGVybik7CisgICAgLy9jYWlyb19wYXR0ZXJu
X2Rlc3Ryb3kocGF0dGVybik7CiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KSW5kZXg6IFdlYkNvcmUv
c3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyQ2cuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyQ2cuY3BwCShyZXZpc2lvbiAzNTg4OSkK
KysrIFdlYkNvcmUvc3ZnL2dyYXBoaWNzL2NnL1NWR1BhaW50U2VydmVyQ2cuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw0MCArNDYsMTIgQEAgdm9pZCBTVkdQYWludFNlcnZlcjo6dGVhcmRvd24o
R3JhcGhpY3NDbwogdm9pZCBTVkdQYWludFNlcnZlcjo6cmVuZGVyUGF0aChHcmFwaGljc0NvbnRl
eHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHBhdGgsIFNWR1BhaW50VGFyZ2V0VHlw
ZSB0eXBlKSBjb25zdAogewogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHBhdGggPyBwYXRoLT5z
dHlsZSgpIDogMDsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dFJlZiA9IGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpOwogCiAgICAgaWYgKCh0eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAm
JiAoIXN0eWxlIHx8IHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxsKCkpKQotICAgICAgICBmaWxs
UGF0aChjb250ZXh0UmVmLCBwYXRoKTsKKyAgICAgICAgY29udGV4dC0+ZmlsbFBhdGgoKTsKIAog
ICAgIGlmICgodHlwZSAmIEFwcGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiAoIXN0eWxlIHx8IHN0
eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJva2UoKSkpCi0gICAgICAgIHN0cm9rZVBhdGgoY29udGV4
dFJlZiwgcGF0aCk7Ci19Ci0KLXZvaWQgU1ZHUGFpbnRTZXJ2ZXI6OnN0cm9rZVBhdGgoQ0dDb250
ZXh0UmVmIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCopIGNvbnN0Ci17Ci0gICAgQ0dDb250
ZXh0U3Ryb2tlUGF0aChjb250ZXh0KTsKLX0KLQotdm9pZCBTVkdQYWludFNlcnZlcjo6Y2xpcFRv
U3Ryb2tlUGF0aChDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KikgY29u
c3QKLXsKLSAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0aChjb250ZXh0KTsK
LSAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOwotfQotCi12b2lkIFNWR1BhaW50U2VydmVyOjpm
aWxsUGF0aChDR0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXRoKSBj
b25zdAotewotICAgIGlmICghcGF0aCB8fCBwYXRoLT5zdHlsZSgpLT5zdmdTdHlsZSgpLT5maWxs
UnVsZSgpID09IFJVTEVfRVZFTk9ERCkKLSAgICAgICAgQ0dDb250ZXh0RU9GaWxsUGF0aChjb250
ZXh0KTsKLSAgICBlbHNlCi0gICAgICAgIENHQ29udGV4dEZpbGxQYXRoKGNvbnRleHQpOwotfQot
Ci12b2lkIFNWR1BhaW50U2VydmVyOjpjbGlwVG9GaWxsUGF0aChDR0NvbnRleHRSZWYgY29udGV4
dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBwYXRoKSBjb25zdAotewotICAgIGlmICghcGF0aCB8fCBw
YXRoLT5zdHlsZSgpLT5zdmdTdHlsZSgpLT5maWxsUnVsZSgpID09IFJVTEVfRVZFTk9ERCkKLSAg
ICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOwotICAgIGVsc2UKLSAgICAgICAgQ0dDb250
ZXh0Q2xpcChjb250ZXh0KTsKKyAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9jZy9TVkdQ
YWludFNlcnZlckdyYWRpZW50Q2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBo
aWNzL2NnL1NWR1BhaW50U2VydmVyR3JhZGllbnRDZy5jcHAJKHJldmlzaW9uIDM1ODg5KQorKysg
V2ViQ29yZS9zdmcvZ3JhcGhpY3MvY2cvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudENnLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzUsMjA2ICszNSwxMTcgQEAKICNpbmNsdWRlICJTVkdSZW5kZXJTdXBw
b3J0LmgiCiAKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1zdGF0aWMgdm9pZCByZWxlYXNlQ2FjaGVkU3RvcHModm9pZCogaW5mbykKLXsKLSAgICBzdGF0
aWNfY2FzdDxTVkdQYWludFNlcnZlckdyYWRpZW50OjpTaGFyZWRTdG9wQ2FjaGUqPihpbmZvKS0+
ZGVyZWYoKTsKLX0KLQotc3RhdGljIHZvaWQgY2dHcmFkaWVudENhbGxiYWNrKHZvaWQqIGluZm8s
IGNvbnN0IENHRmxvYXQqIGluVmFsdWVzLCBDR0Zsb2F0KiBvdXRDb2xvcikKKy8vIEhlbHBlciBm
dW5jdGlvbiBmb3IgdGV4dCBwYWludGluZworc3RhdGljIGlubGluZSBjb25zdCBSZW5kZXJPYmpl
Y3QqIGZpbmRUZXh0Um9vdE9iamVjdChjb25zdCBSZW5kZXJPYmplY3QqIHN0YXJ0KQogewotICAg
IFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OlNoYXJlZFN0b3BDYWNoZSogc3RvcHNDYWNoZSA9IHN0
YXRpY19jYXN0PFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OlNoYXJlZFN0b3BDYWNoZSo+KGluZm8p
OwotICAgIAotICAgIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OlF1YXJ0ekdyYWRpZW50U3RvcCog
c3RvcHMgPSBzdG9wc0NhY2hlLT5tX3N0b3BzLmRhdGEoKTsKLSAgICAgICAgCi0gICAgaW50IHN0
b3BzQ291bnQgPSBzdG9wc0NhY2hlLT5tX3N0b3BzLnNpemUoKTsKLQotICAgIENHRmxvYXQgaW5W
YWx1ZSA9IGluVmFsdWVzWzBdOwotCi0gICAgaWYgKCFzdG9wc0NvdW50KSB7Ci0gICAgICAgIG91
dENvbG9yWzBdID0gMDsKLSAgICAgICAgb3V0Q29sb3JbMV0gPSAwOwotICAgICAgICBvdXRDb2xv
clsyXSA9IDA7Ci0gICAgICAgIG91dENvbG9yWzNdID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0gZWxzZSBpZiAoc3RvcHNDb3VudCA9PSAxKSB7Ci0gICAgICAgIG1lbWNweShvdXRDb2xvciwg
c3RvcHNbMF0uY29sb3JBcnJheSwgNCAqIHNpemVvZihDR0Zsb2F0KSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoIShpblZhbHVlID4gc3RvcHNbMF0ub2Zmc2V0KSkKLSAgICAg
ICAgbWVtY3B5KG91dENvbG9yLCBzdG9wc1swXS5jb2xvckFycmF5LCA0ICogc2l6ZW9mKENHRmxv
YXQpKTsKLSAgICBlbHNlIGlmICghKGluVmFsdWUgPCBzdG9wc1tzdG9wc0NvdW50IC0gMV0ub2Zm
c2V0KSkKLSAgICAgICAgbWVtY3B5KG91dENvbG9yLCBzdG9wc1tzdG9wc0NvdW50IC0gMV0uY29s
b3JBcnJheSwgNCAqIHNpemVvZihDR0Zsb2F0KSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGludCBu
ZXh0U3RvcEluZGV4ID0gMDsKLSAgICAgICAgd2hpbGUgKChuZXh0U3RvcEluZGV4IDwgc3RvcHND
b3VudCkgJiYgKHN0b3BzW25leHRTdG9wSW5kZXhdLm9mZnNldCA8IGluVmFsdWUpKQotICAgICAg
ICAgICAgbmV4dFN0b3BJbmRleCsrOwotCi0gICAgICAgIENHRmxvYXQqIG5leHRDb2xvckFycmF5
ID0gc3RvcHNbbmV4dFN0b3BJbmRleF0uY29sb3JBcnJheTsKLSAgICAgICAgQ0dGbG9hdCogcHJl
dmlvdXNDb2xvckFycmF5ID0gc3RvcHNbbmV4dFN0b3BJbmRleCAtIDFdLmNvbG9yQXJyYXk7Ci0g
ICAgICAgIENHRmxvYXQgZGlmZkZyb21QcmV2aW91cyA9IGluVmFsdWUgLSBzdG9wc1tuZXh0U3Rv
cEluZGV4IC0gMV0ub2Zmc2V0OwotICAgICAgICBDR0Zsb2F0IHBlcmNlbnQgPSBkaWZmRnJvbVBy
ZXZpb3VzICogc3RvcHNbbmV4dFN0b3BJbmRleF0ucHJldmlvdXNEZWx0YUludmVyc2U7Ci0KLSAg
ICAgICAgb3V0Q29sb3JbMF0gPSAoKDEuMGYgLSBwZXJjZW50KSAqIHByZXZpb3VzQ29sb3JBcnJh
eVswXSArIHBlcmNlbnQgKiBuZXh0Q29sb3JBcnJheVswXSk7Ci0gICAgICAgIG91dENvbG9yWzFd
ID0gKCgxLjBmIC0gcGVyY2VudCkgKiBwcmV2aW91c0NvbG9yQXJyYXlbMV0gKyBwZXJjZW50ICog
bmV4dENvbG9yQXJyYXlbMV0pOwotICAgICAgICBvdXRDb2xvclsyXSA9ICgoMS4wZiAtIHBlcmNl
bnQpICogcHJldmlvdXNDb2xvckFycmF5WzJdICsgcGVyY2VudCAqIG5leHRDb2xvckFycmF5WzJd
KTsKLSAgICAgICAgb3V0Q29sb3JbM10gPSAoKDEuMGYgLSBwZXJjZW50KSAqIHByZXZpb3VzQ29s
b3JBcnJheVszXSArIHBlcmNlbnQgKiBuZXh0Q29sb3JBcnJheVszXSk7Ci0gICAgfQotICAgIC8v
IEZJWE1FOiBoYXZlIHRvIGhhbmRsZSB0aGUgc3ByZWFkTWV0aG9kKClzIGhlcmUgU1BSRUFETUVU
SE9EX1JFUEVBVCwgZXRjLgotfQorICAgIHdoaWxlIChzdGFydCAmJiAhc3RhcnQtPmlzU1ZHVGV4
dCgpKQorICAgICAgICBzdGFydCA9IHN0YXJ0LT5wYXJlbnQoKTsKIAotc3RhdGljIENHU2hhZGlu
Z1JlZiBDR1NoYWRpbmdSZWZGb3JMaW5lYXJHcmFkaWVudChjb25zdCBTVkdQYWludFNlcnZlckxp
bmVhckdyYWRpZW50KiBzZXJ2ZXIpCi17Ci0gICAgQ0dQb2ludCBzdGFydCA9IENHUG9pbnQoc2Vy
dmVyLT5ncmFkaWVudFN0YXJ0KCkpOwotICAgIENHUG9pbnQgZW5kID0gQ0dQb2ludChzZXJ2ZXIt
PmdyYWRpZW50RW5kKCkpOworICAgIEFTU0VSVChzdGFydCk7CisgICAgQVNTRVJUKHN0YXJ0LT5p
c1NWR1RleHQoKSk7CiAKLSAgICBDR0Z1bmN0aW9uQ2FsbGJhY2tzIGNhbGxiYWNrcyA9IHswLCBj
Z0dyYWRpZW50Q2FsbGJhY2ssIHJlbGVhc2VDYWNoZWRTdG9wc307Ci0gICAgQ0dGbG9hdCBkb21h
aW5MaW1pdHNbMl0gPSB7MCwgMX07Ci0gICAgQ0dGbG9hdCByYW5nZUxpbWl0c1s4XSA9IHswLCAx
LCAwLCAxLCAwLCAxLCAwLCAxfTsKLSAgICBzZXJ2ZXItPm1fc3RvcHNDYWNoZS0+cmVmKCk7Ci0g
ICAgQ0dGdW5jdGlvblJlZiBzaGFkaW5nRnVuY3Rpb24gPSBDR0Z1bmN0aW9uQ3JlYXRlKHNlcnZl
ci0+bV9zdG9wc0NhY2hlLmdldCgpLCAxLCBkb21haW5MaW1pdHMsIDQsIHJhbmdlTGltaXRzLCAm
Y2FsbGJhY2tzKTsKLQotICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gQ0dDb2xvclNw
YWNlQ3JlYXRlRGV2aWNlUkdCKCk7Ci0gICAgQ0dTaGFkaW5nUmVmIHNoYWRpbmcgPSBDR1NoYWRp
bmdDcmVhdGVBeGlhbChjb2xvclNwYWNlLCBzdGFydCwgZW5kLCBzaGFkaW5nRnVuY3Rpb24sIHRy
dWUsIHRydWUpOwotICAgIENHQ29sb3JTcGFjZVJlbGVhc2UoY29sb3JTcGFjZSk7Ci0gICAgQ0dG
dW5jdGlvblJlbGVhc2Uoc2hhZGluZ0Z1bmN0aW9uKTsKLSAgICByZXR1cm4gc2hhZGluZzsKKyAg
ICByZXR1cm4gc3RhcnQ7CiB9CiAKLXN0YXRpYyBDR1NoYWRpbmdSZWYgQ0dTaGFkaW5nUmVmRm9y
UmFkaWFsR3JhZGllbnQoY29uc3QgU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCogc2VydmVy
KQorc3RhdGljIGlubGluZSB2b2lkIGhhbmRsZUJvdW5kaW5nQm94TW9kZUFuZEdyYWRpZW50VHJh
bnNmb3JtYXRpb24oCisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBib29sIGJvdW5kaW5n
Qm94TW9kZSwKKyAgICBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGdyYWRpZW50VHJhbnNmb3JtLCBj
b25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QpCiB7Ci0gICAgQ0dQb2ludCBjZW50ZXIgPSBDR1Bv
aW50KHNlcnZlci0+Z3JhZGllbnRDZW50ZXIoKSk7Ci0gICAgQ0dQb2ludCBmb2N1cyA9IENHUG9p
bnQoc2VydmVyLT5ncmFkaWVudEZvY2FsKCkpOwotICAgIGRvdWJsZSByYWRpdXMgPSBzZXJ2ZXIt
PmdyYWRpZW50UmFkaXVzKCk7Ci0KLSAgICBkb3VibGUgZmR4ID0gZm9jdXMueCAtIGNlbnRlci54
OwotICAgIGRvdWJsZSBmZHkgPSBmb2N1cy55IC0gY2VudGVyLnk7Ci0KLSAgICAvLyBTcGVjOiBJ
ZiAoZngsIGZ5KSBsaWVzIG91dHNpZGUgdGhlIGNpcmNsZSBkZWZpbmVkIGJ5IChjeCwgY3kpIGFu
ZCByLCBzZXQgKGZ4LCBmeSkKLSAgICAvLyB0byB0aGUgcG9pbnQgb2YgaW50ZXJzZWN0aW9uIG9m
IHRoZSBsaW5lIHRocm91Z2ggKGZ4LCBmeSkgYW5kIHRoZSBjaXJjbGUuCi0gICAgaWYgKHNxcnQo
ZmR4ICogZmR4ICsgZmR5ICogZmR5KSA+IHJhZGl1cykgeyAKLSAgICAgICAgZG91YmxlIGFuZ2xl
ID0gYXRhbjIoZm9jdXMueSAqIDEwMC4wLCBmb2N1cy54ICogMTAwLjApOwotICAgICAgICBmb2N1
cy54ID0gbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KGNvcyhhbmdsZSkgKiByYWRpdXMpOwotICAg
ICAgICBmb2N1cy55ID0gbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KHNpbihhbmdsZSkgKiByYWRp
dXMpOwotICAgIH0KLQotICAgIENHRnVuY3Rpb25DYWxsYmFja3MgY2FsbGJhY2tzID0gezAsIGNn
R3JhZGllbnRDYWxsYmFjaywgcmVsZWFzZUNhY2hlZFN0b3BzfTsKLSAgICBDR0Zsb2F0IGRvbWFp
bkxpbWl0c1syXSA9IHswLCAxfTsKLSAgICBDR0Zsb2F0IHJhbmdlTGltaXRzWzhdID0gezAsIDEs
IDAsIDEsIDAsIDEsIDAsIDF9OwotICAgIHNlcnZlci0+bV9zdG9wc0NhY2hlLT5yZWYoKTsKLSAg
ICBDR0Z1bmN0aW9uUmVmIHNoYWRpbmdGdW5jdGlvbiA9IENHRnVuY3Rpb25DcmVhdGUoc2VydmVy
LT5tX3N0b3BzQ2FjaGUuZ2V0KCksIDEsIGRvbWFpbkxpbWl0cywgNCwgcmFuZ2VMaW1pdHMsICZj
YWxsYmFja3MpOwotCi0gICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3Bh
Y2VDcmVhdGVEZXZpY2VSR0IoKTsKLSAgICBDR1NoYWRpbmdSZWYgc2hhZGluZyA9IENHU2hhZGlu
Z0NyZWF0ZVJhZGlhbChjb2xvclNwYWNlLCBmb2N1cywgMCwgY2VudGVyLCBuYXJyb3dQcmVjaXNp
b25Ub0NHRmxvYXQocmFkaXVzKSwgc2hhZGluZ0Z1bmN0aW9uLCB0cnVlLCB0cnVlKTsKLSAgICBD
R0NvbG9yU3BhY2VSZWxlYXNlKGNvbG9yU3BhY2UpOwotICAgIENHRnVuY3Rpb25SZWxlYXNlKHNo
YWRpbmdGdW5jdGlvbik7Ci0gICAgcmV0dXJuIHNoYWRpbmc7Ci19CisgICAgaWYgKGJvdW5kaW5n
Qm94TW9kZSkgeworICAgICAgICAvLyBDaG9vc2UgZGVmYXVsdCBncmFkaWVudCBib3VuZGluZyBi
b3gKKyAgICAgICAgQ0dSZWN0IGdyYWRpZW50QkJveCA9IENHUmVjdE1ha2UoMC4wZiwgMC4wZiwg
MS4wZiwgMS4wZik7CiAKLXZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6dXBkYXRlUXVhcnR6
R3JhZGllbnRTdG9wc0NhY2hlKGNvbnN0IFZlY3RvcjxTVkdHcmFkaWVudFN0b3A+JiBzdG9wcykK
LXsKLSAgICBtX3N0b3BzQ2FjaGUgPSBTaGFyZWRTdG9wQ2FjaGU6OmNyZWF0ZSgpOwotICAgIFZl
Y3RvcjxRdWFydHpHcmFkaWVudFN0b3A+JiBzdG9wc0NhY2hlID0gbV9zdG9wc0NhY2hlLT5tX3N0
b3BzOwotICAgIHN0b3BzQ2FjaGUucmVzaXplKHN0b3BzLnNpemUoKSk7Ci0gICAgQ0dGbG9hdCBw
cmV2aW91c09mZnNldCA9IDAuMGY7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0b3Bz
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIENHRmxvYXQgY3Vyck9mZnNldCA9IG1pbihtYXgoc3Rv
cHNbaV0uZmlyc3QsIHByZXZpb3VzT2Zmc2V0KSwgc3RhdGljX2Nhc3Q8Q0dGbG9hdD4oMS4wKSk7
Ci0gICAgICAgIHN0b3BzQ2FjaGVbaV0ub2Zmc2V0ID0gY3Vyck9mZnNldDsKLSAgICAgICAgc3Rv
cHNDYWNoZVtpXS5wcmV2aW91c0RlbHRhSW52ZXJzZSA9IDEuMGYgLyAoY3Vyck9mZnNldCAtIHBy
ZXZpb3VzT2Zmc2V0KTsKLSAgICAgICAgcHJldmlvdXNPZmZzZXQgPSBjdXJyT2Zmc2V0OwotICAg
ICAgICBDR0Zsb2F0KiBjYSA9IHN0b3BzQ2FjaGVbaV0uY29sb3JBcnJheTsKLSAgICAgICAgc3Rv
cHNbaV0uc2Vjb25kLmdldFJHQkEoY2FbMF0sIGNhWzFdLCBjYVsyXSwgY2FbM10pOworICAgICAg
ICAvLyBHZW5lcmF0ZSBhIHRyYW5zZm9ybSB0byBtYXAgYmV0d2VlbiBib3RoIGJvdW5kaW5nIGJv
eGVzCisgICAgICAgIENHQWZmaW5lVHJhbnNmb3JtIGdyYWRpZW50SW50b09iamVjdEJCb3ggPSBD
R0FmZmluZVRyYW5zZm9ybU1ha2VNYXBCZXR3ZWVuUmVjdHMoZ3JhZGllbnRCQm94LCBDR1JlY3Qo
dGFyZ2V0UmVjdCkpOworICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0oZ3JhZGllbnRJbnRvT2Jq
ZWN0QkJveCk7CiAgICAgfQotfQogCi12b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnVwZGF0
ZVF1YXJ0ekdyYWRpZW50Q2FjaGUoY29uc3QgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudCogc2VydmVy
KQotewotICAgIC8vIGNhY2hlIG91ciBvd24gY29weSBvZiB0aGUgc3RvcHMgZm9yIGZhc3RlciBh
Y2Nlc3MuCi0gICAgLy8gdGhpcyBpcyBsZWdhY3kgY29kZSwgcHJvYmFibHkgY291bGQgYmUgcmV3
b3JrZWQuCi0gICAgaWYgKCFtX3N0b3BzQ2FjaGUpCi0gICAgICAgIHVwZGF0ZVF1YXJ0ekdyYWRp
ZW50U3RvcHNDYWNoZShncmFkaWVudFN0b3BzKCkpOwotCi0gICAgQ0dTaGFkaW5nUmVsZWFzZSht
X3NoYWRpbmdDYWNoZSk7Ci0KLSAgICBpZiAodHlwZSgpID09IFJhZGlhbEdyYWRpZW50UGFpbnRT
ZXJ2ZXIpIHsKLSAgICAgICAgY29uc3QgU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCogcmFk
aWFsID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHUGFpbnRTZXJ2ZXJSYWRpYWxHcmFkaWVudCo+KHNl
cnZlcik7Ci0gICAgICAgIG1fc2hhZGluZ0NhY2hlID0gQ0dTaGFkaW5nUmVmRm9yUmFkaWFsR3Jh
ZGllbnQocmFkaWFsKTsKLSAgICB9IGVsc2UgaWYgKHR5cGUoKSA9PSBMaW5lYXJHcmFkaWVudFBh
aW50U2VydmVyKSB7Ci0gICAgICAgIGNvbnN0IFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQq
IGxpbmVhciA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR1BhaW50U2VydmVyTGluZWFyR3JhZGllbnQq
PihzZXJ2ZXIpOwotICAgICAgICBtX3NoYWRpbmdDYWNoZSA9IENHU2hhZGluZ1JlZkZvckxpbmVh
ckdyYWRpZW50KGxpbmVhcik7Ci0gICAgfQorICAgIC8vIEFwcGx5IHRoZSBncmFkaWVudCdzIG93
biB0cmFuc2Zvcm0KKyAgICBjb250ZXh0LT5jb25jYXRDVE0oZ3JhZGllbnRUcmFuc2Zvcm0pOwog
fQogCi0vLyBIZWxwZXIgZnVuY3Rpb24gZm9yIHRleHQgcGFpbnRpbmcKLXN0YXRpYyBpbmxpbmUg
Y29uc3QgUmVuZGVyT2JqZWN0KiBmaW5kVGV4dFJvb3RPYmplY3QoY29uc3QgUmVuZGVyT2JqZWN0
KiBzdGFydCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBjcmVhdGVNYXNrQW5kU3dhcENvbnRleHRGb3JU
ZXh0R3JhZGllbnQoCisgICAgR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgR3JhcGhpY3NDb250
ZXh0KiYgc2F2ZWRDb250ZXh0LAorICAgIE93blB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVy
LCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVjdCkKIHsKLSAgICB3aGlsZSAoc3RhcnQgJiYgIXN0
YXJ0LT5pc1NWR1RleHQoKSkKLSAgICAgICAgc3RhcnQgPSBzdGFydC0+cGFyZW50KCk7CisgICAg
RmxvYXRSZWN0IG1hc2tCQm94ID0gY29uc3RfY2FzdDxSZW5kZXJPYmplY3QqPihmaW5kVGV4dFJv
b3RPYmplY3Qob2JqZWN0KSktPnJlbGF0aXZlQkJveChmYWxzZSk7CisgICAgSW50UmVjdCBtYXNr
UmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qob2JqZWN0LT5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJl
Y3QobWFza0JCb3gpKTsKIAotICAgIEFTU0VSVChzdGFydCk7Ci0gICAgQVNTRVJUKHN0YXJ0LT5p
c1NWR1RleHQoKSk7Ci0KLSAgICByZXR1cm4gc3RhcnQ7Ci19CisgICAgSW50U2l6ZSBtYXNrU2l6
ZShtYXNrUmVjdC53aWR0aCgpLCBtYXNrUmVjdC5oZWlnaHQoKSk7CisgICAgY2xhbXBJbWFnZUJ1
ZmZlclNpemVUb1ZpZXdwb3J0KG9iamVjdC0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSwgbWFza1Np
emUpOwogCi12b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnRlYXJkb3duKEdyYXBoaWNzQ29u
dGV4dComIGNvbnRleHQsIGNvbnN0IFJlbmRlck9iamVjdCogb2JqZWN0LCBTVkdQYWludFRhcmdl
dFR5cGUgdHlwZSwgYm9vbCBpc1BhaW50aW5nVGV4dCkgY29uc3QKLXsKLSAgICBDR1NoYWRpbmdS
ZWYgc2hhZGluZyA9IG1fc2hhZGluZ0NhY2hlOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0UmVm
ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgQVNTRVJUKGNvbnRleHRSZWYpOwor
ICAgIGF1dG9fcHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KG1hc2tTaXplLCBmYWxzZSk7CiAKLSAgICAvLyBBcyByZW5kZXJQYXRoKCkgaXMgbm90IHVzZWQg
d2hlbiBwYWludGluZyB0ZXh0LCBzcGVjaWFsIGxvZ2ljIG5lZWRlZCBoZXJlLgotICAgIGlmIChp
c1BhaW50aW5nVGV4dCkgewotICAgICAgICBpZiAobV9zYXZlZENvbnRleHQpIHsKLSAgICAgICAg
ICAgIEZsb2F0UmVjdCBtYXNrQkJveCA9IGNvbnN0X2Nhc3Q8UmVuZGVyT2JqZWN0Kj4oZmluZFRl
eHRSb290T2JqZWN0KG9iamVjdCkpLT5yZWxhdGl2ZUJCb3goZmFsc2UpOworICAgIGlmICghbWFz
a0ltYWdlLmdldCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIC8vIEZp
eHVwIHRyYW5zZm9ybWF0aW9ucyB0byBiZSBhYmxlIHRvIGNsaXAgdG8gbWFzawotICAgICAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IG9iamVjdC0+YWJzb2x1dGVUcmFuc2Zvcm0o
KTsKLSAgICAgICAgICAgIEZsb2F0UmVjdCB0ZXh0Qm91bmRhcnkgPSB0cmFuc2Zvcm0ubWFwUmVj
dChtYXNrQkJveCk7CisgICAgR3JhcGhpY3NDb250ZXh0KiBtYXNrSW1hZ2VDb250ZXh0ID0gbWFz
a0ltYWdlLT5jb250ZXh0KCk7CisgICAgbWFza0ltYWdlQ29udGV4dC0+c2F2ZSgpOworICAgIG1h
c2tJbWFnZUNvbnRleHQtPnRyYW5zbGF0ZSgtbWFza1JlY3QueCgpLCAtbWFza1JlY3QueSgpKTsK
KyAgICBtYXNrSW1hZ2VDb250ZXh0LT5jb25jYXRDVE0ob2JqZWN0LT5hYnNvbHV0ZVRyYW5zZm9y
bSgpKTsKIAotICAgICAgICAgICAgSW50U2l6ZSBtYXNrU2l6ZShscm91bmRmKHRleHRCb3VuZGFy
eS53aWR0aCgpKSwgbHJvdW5kZih0ZXh0Qm91bmRhcnkuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAg
IGNsYW1wSW1hZ2VCdWZmZXJTaXplVG9WaWV3cG9ydChvYmplY3QtPmRvY3VtZW50KCktPnJlbmRl
cmVyKCksIG1hc2tTaXplKTsKKyAgICBpbWFnZUJ1ZmZlci5zZXQobWFza0ltYWdlLnJlbGVhc2Uo
KSk7CisgICAgc2F2ZWRDb250ZXh0ID0gY29udGV4dDsKIAotICAgICAgICAgICAgaWYgKG1hc2tT
aXplLndpZHRoKCkgPCBzdGF0aWNfY2FzdDxpbnQ+KHRleHRCb3VuZGFyeS53aWR0aCgpKSkKLSAg
ICAgICAgICAgICAgICB0ZXh0Qm91bmRhcnkuc2V0V2lkdGgobWFza1NpemUud2lkdGgoKSk7Cisg
ICAgY29udGV4dCA9IG1hc2tJbWFnZUNvbnRleHQ7CiAKLSAgICAgICAgICAgIGlmIChtYXNrU2l6
ZS5oZWlnaHQoKSA8IHN0YXRpY19jYXN0PGludD4odGV4dEJvdW5kYXJ5LmhlaWdodCgpKSkKLSAg
ICAgICAgICAgICAgICB0ZXh0Qm91bmRhcnkuc2V0SGVpZ2h0KG1hc2tTaXplLmhlaWdodCgpKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgICAgICAgICAgLy8gQ2xpcCBjdXJyZW50IGNvbnRl
eHQgdG8gbWFzayBpbWFnZSAoZ3JhZGllbnQpCi0gICAgICAgICAgICBtX3NhdmVkQ29udGV4dC0+
Y29uY2F0Q1RNKHRyYW5zZm9ybS5pbnZlcnNlKCkpOwotICAgICAgICAgICAgbV9zYXZlZENvbnRl
eHQtPmNsaXBUb0ltYWdlQnVmZmVyKHRleHRCb3VuZGFyeSwgbV9pbWFnZUJ1ZmZlcik7Ci0gICAg
ICAgICAgICBtX3NhdmVkQ29udGV4dC0+Y29uY2F0Q1RNKHRyYW5zZm9ybSk7CitzdGF0aWMgaW5s
aW5lIHZvaWQgY2xpcFRvVGV4dE1hc2soR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAorICAgIE93
blB0cjxJbWFnZUJ1ZmZlcj4mIGltYWdlQnVmZmVyLCBjb25zdCBSZW5kZXJPYmplY3QqIG9iamVj
dCwKKyAgICBjb25zdCBTVkdQYWludFNlcnZlckdyYWRpZW50KiBncmFkaWVudFNlcnZlcikKK3sK
KyAgICBGbG9hdFJlY3QgbWFza0JCb3ggPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGZpbmRU
ZXh0Um9vdE9iamVjdChvYmplY3QpKS0+cmVsYXRpdmVCQm94KGZhbHNlKTsKKworICAgIC8vIEZp
eHVwIHRyYW5zZm9ybWF0aW9ucyB0byBiZSBhYmxlIHRvIGNsaXAgdG8gbWFzaworICAgIEFmZmlu
ZVRyYW5zZm9ybSB0cmFuc2Zvcm0gPSBvYmplY3QtPmFic29sdXRlVHJhbnNmb3JtKCk7CisgICAg
RmxvYXRSZWN0IHRleHRCb3VuZGFyeSA9IHRyYW5zZm9ybS5tYXBSZWN0KG1hc2tCQm94KTsKKwor
ICAgIEludFNpemUgbWFza1NpemUobHJvdW5kZih0ZXh0Qm91bmRhcnkud2lkdGgoKSksIGxyb3Vu
ZGYodGV4dEJvdW5kYXJ5LmhlaWdodCgpKSk7CisgICAgY2xhbXBJbWFnZUJ1ZmZlclNpemVUb1Zp
ZXdwb3J0KG9iamVjdC0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSwgbWFza1NpemUpOworICAgIHRl
eHRCb3VuZGFyeS5zZXRTaXplKHRleHRCb3VuZGFyeS5zaXplKCkuc2hydW5rVG8obWFza1NpemUp
KTsKKworICAgIC8vIENsaXAgY3VycmVudCBjb250ZXh0IHRvIG1hc2sgaW1hZ2UgKGdyYWRpZW50
KQorICAgIGNvbnRleHQtPmNvbmNhdENUTSh0cmFuc2Zvcm0uaW52ZXJzZSgpKTsKKyAgICBjb250
ZXh0LT5jbGlwVG9JbWFnZUJ1ZmZlcih0ZXh0Qm91bmRhcnksIGltYWdlQnVmZmVyLmdldCgpKTsK
KyAgICBjb250ZXh0LT5jb25jYXRDVE0odHJhbnNmb3JtKTsKKworICAgIGhhbmRsZUJvdW5kaW5n
Qm94TW9kZUFuZEdyYWRpZW50VHJhbnNmb3JtYXRpb24oY29udGV4dCwKKyAgICAgICAgICAgIGdy
YWRpZW50U2VydmVyLT5ib3VuZGluZ0JveE1vZGUoKSwKKyAgICAgICAgICAgIGdyYWRpZW50U2Vy
dmVyLT5ncmFkaWVudFRyYW5zZm9ybSgpLCBtYXNrQkJveCk7Cit9CiAKLSAgICAgICAgICAgIGhh
bmRsZUJvdW5kaW5nQm94TW9kZUFuZEdyYWRpZW50VHJhbnNmb3JtYXRpb24obV9zYXZlZENvbnRl
eHQsIG1hc2tCQm94KTsKK3ZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6dGVhcmRvd24oR3Jh
cGhpY3NDb250ZXh0KiYgY29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1Bh
aW50VGFyZ2V0VHlwZSB0eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdAoreworICAgIC8v
IHJlbmRlclBhdGgoKSBpcyBub3QgdXNlZCB3aGVuIHBhaW50aW5nIHRleHQsIHNvIHdlIHBhaW50
IHRoZSBncmFkaWVudCBkdXJpbmcgdGVhcmRvd24oKQorICAgIGlmIChpc1BhaW50aW5nVGV4dCAm
JiBtX3NhdmVkQ29udGV4dCkgeworICAgICAgICAvLyBSZXN0b3JlIG9uLXNjcmVlbiBkcmF3aW5n
IGNvbnRleHQKKyAgICAgICAgY29udGV4dCA9IG1fc2F2ZWRDb250ZXh0OworICAgICAgICBtX3Nh
dmVkQ29udGV4dCA9IDA7CiAKLSAgICAgICAgICAgIC8vIFJlc3RvcmUgb24tc2NyZWVuIGRyYXdp
bmcgY29udGV4dCwgYWZ0ZXIgd2UgZ290IHRoZSBpbWFnZSBvZiB0aGUgZ3JhZGllbnQKLSAgICAg
ICAgICAgIGRlbGV0ZSBtX2ltYWdlQnVmZmVyOworICAgICAgICBjbGlwVG9UZXh0TWFzayhjb250
ZXh0LCBtX2ltYWdlQnVmZmVyLCBvYmplY3QsIHRoaXMpOwogCi0gICAgICAgICAgICBjb250ZXh0
ID0gbV9zYXZlZENvbnRleHQ7Ci0gICAgICAgICAgICBjb250ZXh0UmVmID0gY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCk7CisgICAgICAgIC8vIGZpbmFsbHkgZmlsbCB0aGUgdGV4dCBjbGlwIHdp
dGggdGhlIHNoYWRpbmcKKyAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCksIG1fZ3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CiAKLSAgICAg
ICAgICAgIG1fc2F2ZWRDb250ZXh0ID0gMDsKLSAgICAgICAgICAgIG1faW1hZ2VCdWZmZXIgPSAw
OwotICAgICAgICB9CisgICAgICAgIG1faW1hZ2VCdWZmZXIuY2xlYXIoKTsgLy8gd2UncmUgZG9u
ZSB3aXRoIG91ciB0ZXh0IG1hc2sgYnVmZmVyCiAgICAgfQotCi0gICAgQ0dDb250ZXh0RHJhd1No
YWRpbmcoY29udGV4dFJlZiwgc2hhZGluZyk7Ci0gICAgY29udGV4dC0+cmVzdG9yZSgpOworICAg
IGNvbnRleHQtPnJlc3RvcmUoKTsgLy8gc2F2ZSB3YXMgY2FsbGVkIGR1cmluZyBzZXR1cCgpCiB9
CiAKIHZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6cmVuZGVyUGF0aChHcmFwaGljc0NvbnRl
eHQqJiBjb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QqIHBhdGgsIFNWR1BhaW50VGFyZ2V0VHlw
ZSB0eXBlKSBjb25zdAogewotICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHBhdGgtPnN0eWxlKCk7
Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHRSZWYgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KTsKLSAgICBBU1NFUlQoY29udGV4dFJlZik7Ci0gICAgCi0gICAgYm9vbCBpc0ZpbGxlZCA9ICh0
eXBlICYgQXBwbHlUb0ZpbGxUYXJnZXRUeXBlKSAmJiBzdHlsZS0+c3ZnU3R5bGUoKS0+aGFzRmls
bCgpOworICAgIGlmICgodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYgcGF0aC0+c3R5
bGUoKS0+c3ZnU3R5bGUoKS0+aGFzRmlsbCgpKQorICAgICAgICBjb250ZXh0LT5maWxsUGF0aCgp
OworICAgIGVsc2UKKyAgICAgICAgY29udGV4dC0+c3Ryb2tlUGF0aCgpOwogCiAgICAgLy8gQ29t
cHV0ZSBkZXN0aW5hdGlvbiBvYmplY3QgYm91bmRpbmcgYm94CiAgICAgRmxvYXRSZWN0IG9iamVj
dEJCb3g7CkBAIC0yNDQsOTggKzE1NSw0MiBAQCB2b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6
OnJlbmRlclBhdGgoCiAgICAgICAgICAgICBvYmplY3RCQm94ID0gYmJveDsKICAgICB9CiAKLSAg
ICBpZiAoaXNGaWxsZWQpCi0gICAgICAgIGNsaXBUb0ZpbGxQYXRoKGNvbnRleHRSZWYsIHBhdGgp
OwotICAgIGVsc2UKLSAgICAgICAgY2xpcFRvU3Ryb2tlUGF0aChjb250ZXh0UmVmLCBwYXRoKTsK
LQotICAgIGhhbmRsZUJvdW5kaW5nQm94TW9kZUFuZEdyYWRpZW50VHJhbnNmb3JtYXRpb24oY29u
dGV4dCwgb2JqZWN0QkJveCk7Ci19Ci0KLXZvaWQgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6aGFu
ZGxlQm91bmRpbmdCb3hNb2RlQW5kR3JhZGllbnRUcmFuc2Zvcm1hdGlvbihHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCkgY29uc3QKLXsKLSAgICBD
R0NvbnRleHRSZWYgY29udGV4dFJlZiA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotCi0g
ICAgaWYgKGJvdW5kaW5nQm94TW9kZSgpKSB7Ci0gICAgICAgIC8vIENob29zZSBkZWZhdWx0IGdy
YWRpZW50IGJvdW5kaW5nIGJveAotICAgICAgICBDR1JlY3QgZ3JhZGllbnRCQm94ID0gQ0dSZWN0
TWFrZSgwLjBmLCAwLjBmLCAxLjBmLCAxLjBmKTsKLQotICAgICAgICAvLyBHZW5lcmF0ZSBhIHRy
YW5zZm9ybSB0byBtYXAgYmV0d2VlbiBib3RoIGJvdW5kaW5nIGJveGVzCi0gICAgICAgIENHQWZm
aW5lVHJhbnNmb3JtIGdyYWRpZW50SW50b09iamVjdEJCb3ggPSBDR0FmZmluZVRyYW5zZm9ybU1h
a2VNYXBCZXR3ZWVuUmVjdHMoZ3JhZGllbnRCQm94LCBDR1JlY3QodGFyZ2V0UmVjdCkpOwotICAg
ICAgICBDR0NvbnRleHRDb25jYXRDVE0oY29udGV4dFJlZiwgZ3JhZGllbnRJbnRvT2JqZWN0QkJv
eCk7Ci0gICAgfQotCi0gICAgLy8gQXBwbHkgdGhlIGdyYWRpZW50J3Mgb3duIHRyYW5zZm9ybQot
ICAgIENHQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybSA9IGdyYWRpZW50VHJhbnNmb3JtKCk7Ci0g
ICAgQ0dDb250ZXh0Q29uY2F0Q1RNKGNvbnRleHRSZWYsIHRyYW5zZm9ybSk7CisgICAgaGFuZGxl
Qm91bmRpbmdCb3hNb2RlQW5kR3JhZGllbnRUcmFuc2Zvcm1hdGlvbihjb250ZXh0LCBib3VuZGlu
Z0JveE1vZGUoKSwKKyAgICAgICAgZ3JhZGllbnRUcmFuc2Zvcm0oKSwgb2JqZWN0QkJveCk7CiB9
CiAKIGJvb2wgU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudDo6c2V0dXAoR3JhcGhpY3NDb250ZXh0KiYg
Y29udGV4dCwgY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QsIFNWR1BhaW50VGFyZ2V0VHlwZSB0
eXBlLCBib29sIGlzUGFpbnRpbmdUZXh0KSBjb25zdAogewogICAgIG1fb3duZXJFbGVtZW50LT5i
dWlsZEdyYWRpZW50KCk7CiAKLSAgICAvLyBXZSBuZWVkIGEgaG9vayB0byBjYWxsIHRoaXMgd2hl
biB0aGUgZ3JhZGllbnQgZ2V0cyB1cGRhdGVkLCBiZWZvcmUgZHJhd24uCi0gICAgaWYgKCFtX3No
YWRpbmdDYWNoZSkKLSAgICAgICAgY29uc3RfY2FzdDxTVkdQYWludFNlcnZlckdyYWRpZW50Kj4o
dGhpcyktPnVwZGF0ZVF1YXJ0ekdyYWRpZW50Q2FjaGUodGhpcyk7Ci0KLSAgICBDR0NvbnRleHRS
ZWYgY29udGV4dFJlZiA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIEFTU0VSVChj
b250ZXh0UmVmKTsKLQogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsK
KyAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSogc3ZnU3R5bGUgPSBzdHlsZS0+c3ZnU3R5bGUoKTsK
IAotICAgIGJvb2wgaXNGaWxsZWQgPSAodHlwZSAmIEFwcGx5VG9GaWxsVGFyZ2V0VHlwZSkgJiYg
c3R5bGUtPnN2Z1N0eWxlKCktPmhhc0ZpbGwoKTsKLSAgICBib29sIGlzU3Ryb2tlZCA9ICh0eXBl
ICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYmIHN0eWxlLT5zdmdTdHlsZSgpLT5oYXNTdHJv
a2UoKTsKKyAgICBib29sIGlzRmlsbGVkID0gKHR5cGUgJiBBcHBseVRvRmlsbFRhcmdldFR5cGUp
ICYmIHN2Z1N0eWxlLT5oYXNGaWxsKCk7CisgICAgYm9vbCBpc1N0cm9rZWQgPSAodHlwZSAmIEFw
cGx5VG9TdHJva2VUYXJnZXRUeXBlKSAmJiBzdmdTdHlsZS0+aGFzU3Ryb2tlKCk7CiAKICAgICBB
U1NFUlQoaXNGaWxsZWQgJiYgIWlzU3Ryb2tlZCB8fCAhaXNGaWxsZWQgJiYgaXNTdHJva2VkKTsK
IAotICAgIGNvbnRleHQtPnNhdmUoKTsKLSAgICBDR0NvbnRleHRTZXRBbHBoYShjb250ZXh0UmVm
LCBpc0ZpbGxlZCA/IHN0eWxlLT5zdmdTdHlsZSgpLT5maWxsT3BhY2l0eSgpIDogc3R5bGUtPnN2
Z1N0eWxlKCktPnN0cm9rZU9wYWNpdHkoKSk7CisgICAgY29udGV4dC0+c2F2ZSgpOyAvLyByZXN0
b3JlIGlzIGNhbGxlZCBkdXJpbmcgdGVhcmRvd24oKQorICAgIGNvbnRleHQtPnNldEFscGhhKGlz
RmlsbGVkID8gc3ZnU3R5bGUtPmZpbGxPcGFjaXR5KCkgOiBzdmdTdHlsZS0+c3Ryb2tlT3BhY2l0
eSgpKTsKIAogICAgIGlmIChpc1BhaW50aW5nVGV4dCkgewotICAgICAgICBGbG9hdFJlY3QgbWFz
a0JCb3ggPSBjb25zdF9jYXN0PFJlbmRlck9iamVjdCo+KGZpbmRUZXh0Um9vdE9iamVjdChvYmpl
Y3QpKS0+cmVsYXRpdmVCQm94KGZhbHNlKTsKLSAgICAgICAgSW50UmVjdCBtYXNrUmVjdCA9IGVu
Y2xvc2luZ0ludFJlY3Qob2JqZWN0LT5hYnNvbHV0ZVRyYW5zZm9ybSgpLm1hcFJlY3QobWFza0JC
b3gpKTsKLQotICAgICAgICBJbnRTaXplIG1hc2tTaXplKG1hc2tSZWN0LndpZHRoKCksIG1hc2tS
ZWN0LmhlaWdodCgpKTsKLSAgICAgICAgY2xhbXBJbWFnZUJ1ZmZlclNpemVUb1ZpZXdwb3J0KG9i
amVjdC0+ZG9jdW1lbnQoKS0+cmVuZGVyZXIoKSwgbWFza1NpemUpOwotCi0gICAgICAgIGF1dG9f
cHRyPEltYWdlQnVmZmVyPiBtYXNrSW1hZ2UgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1hc2tTaXpl
LCBmYWxzZSk7Ci0KLSAgICAgICAgaWYgKCFtYXNrSW1hZ2UuZ2V0KCkpIHsKKyAgICAgICAgaWYg
KCFjcmVhdGVNYXNrQW5kU3dhcENvbnRleHRGb3JUZXh0R3JhZGllbnQoY29udGV4dCwgbV9zYXZl
ZENvbnRleHQsIG1faW1hZ2VCdWZmZXIsIG9iamVjdCkpIHsKICAgICAgICAgICAgIGNvbnRleHQt
PnJlc3RvcmUoKTsKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotCi0gICAg
ICAgIEdyYXBoaWNzQ29udGV4dCogbWFza0ltYWdlQ29udGV4dCA9IG1hc2tJbWFnZS0+Y29udGV4
dCgpOwotICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT5zYXZlKCk7Ci0KLSAgICAgICAgbWFza0lt
YWdlQ29udGV4dC0+c2V0VGV4dERyYXdpbmdNb2RlKGlzRmlsbGVkID8gY1RleHRGaWxsIDogY1Rl
eHRTdHJva2UpOwotICAgICAgICBtYXNrSW1hZ2VDb250ZXh0LT50cmFuc2xhdGUoLW1hc2tSZWN0
LngoKSwgLW1hc2tSZWN0LnkoKSk7Ci0gICAgICAgIG1hc2tJbWFnZUNvbnRleHQtPmNvbmNhdENU
TShvYmplY3QtPmFic29sdXRlVHJhbnNmb3JtKCkpOwotCi0gICAgICAgIG1faW1hZ2VCdWZmZXIg
PSBtYXNrSW1hZ2UucmVsZWFzZSgpOwotICAgICAgICBtX3NhdmVkQ29udGV4dCA9IGNvbnRleHQ7
Ci0KLSAgICAgICAgY29udGV4dCA9IG1hc2tJbWFnZUNvbnRleHQ7Ci0gICAgICAgIGNvbnRleHRS
ZWYgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICAgICAgY29udGV4dC0+c2V0VGV4
dERyYXdpbmdNb2RlKGlzRmlsbGVkID8gY1RleHRGaWxsIDogY1RleHRTdHJva2UpOwogICAgIH0K
IAorICAgIGlmIChpc0ZpbGxlZCkKKyAgICAgICAgY29udGV4dC0+c2V0RmlsbFJ1bGUoc3ZnU3R5
bGUtPmZpbGxSdWxlKCkpOworCiAgICAgaWYgKGlzU3Ryb2tlZCkKICAgICAgICAgYXBwbHlTdHJv
a2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHlsZSwgb2JqZWN0KTsKIAogICAgIHJldHVybiB0
cnVlOwogfQogCi12b2lkIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OmludmFsaWRhdGUoKQotewot
ICAgIFNWR1BhaW50U2VydmVyOjppbnZhbGlkYXRlKCk7Ci0KLSAgICAvLyBJbnZhbGlkYXRlIGNh
Y2hlcwotICAgIENHU2hhZGluZ1JlbGVhc2UobV9zaGFkaW5nQ2FjaGUpOwotCi0gICAgbV9zdG9w
c0NhY2hlID0gMDsKLSAgICBtX3NoYWRpbmdDYWNoZSA9IDA7Ci19Ci0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL3N2Zy9ncmFwaGljcy9xdC9TVkdQYWlu
dFNlcnZlckdyYWRpZW50UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL2dyYXBoaWNz
L3F0L1NWR1BhaW50U2VydmVyR3JhZGllbnRRdC5jcHAJKHJldmlzaW9uIDM1ODg5KQorKysgV2Vi
Q29yZS9zdmcvZ3JhcGhpY3MvcXQvU1ZHUGFpbnRTZXJ2ZXJHcmFkaWVudFF0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBib29sIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNl
dHVwKEdyYXBoCiAgICAgZG91YmxlIG9wYWNpdHkgPSAxLjA7CiAKICAgICBpZiAoKHR5cGUgJiBB
cHBseVRvRmlsbFRhcmdldFR5cGUpICYmIHJlbmRlclN0eWxlLT5zdmdTdHlsZSgpLT5oYXNGaWxs
KCkpIHsKLSAgICAgICAgZmlsbENvbG9yQXJyYXkoZ3JhZGllbnQsIGdyYWRpZW50U3RvcHMoKSwg
b3BhY2l0eSk7CisgICAgICAgIC8vZmlsbENvbG9yQXJyYXkoZ3JhZGllbnQsIGdyYWRpZW50U3Rv
cHMoKSwgb3BhY2l0eSk7CiAKICAgICAgICAgUUJydXNoIGJydXNoKGdyYWRpZW50KTsKICAgICAg
ICAgYnJ1c2guc2V0TWF0cml4KGdyYWRpZW50VHJhbnNmb3JtKCkpOwpAQCAtODgsNyArODgsNyBA
QCBib29sIFNWR1BhaW50U2VydmVyR3JhZGllbnQ6OnNldHVwKEdyYXBoCiAgICAgfQogCiAgICAg
aWYgKCh0eXBlICYgQXBwbHlUb1N0cm9rZVRhcmdldFR5cGUpICYmIHJlbmRlclN0eWxlLT5zdmdT
dHlsZSgpLT5oYXNTdHJva2UoKSkgewotICAgICAgICBmaWxsQ29sb3JBcnJheShncmFkaWVudCwg
Z3JhZGllbnRTdG9wcygpLCBvcGFjaXR5KTsKKyAgICAgICAgLy9maWxsQ29sb3JBcnJheShncmFk
aWVudCwgZ3JhZGllbnRTdG9wcygpLCBvcGFjaXR5KTsKIAogICAgICAgICBRUGVuIHBlbjsKICAg
ICAgICAgUUJydXNoIGJydXNoKGdyYWRpZW50KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23023</attachid>
            <date>2008-08-27 05:41:39 -0700</date>
            <delta_ts>2008-08-27 14:59:22 -0700</delta_ts>
            <desc>Add stroke/fill Gradient and Pattern support to GraphicsContext and update &lt;canvas&gt; to use it.</desc>
            <filename>Add-stroke-fill-Gradient-and-Pattern-support-to-GraphicsContext-and-update-canvas-to-use-it..patch</filename>
            <type>text/plain</type>
            <size>49701</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">ZWNlNjM0MWMzZDMzMTg0NzQyNzZiMDllYTJiMDA1MDc0YmY3MWM0OQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzYzEwMzdjLi5mMjBjYzAzIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjI5Myw2ICsyMjkzLDcg
QEAKIAkJQTg4QUQ1MkYwOTUyNEI5MjAwMUREMTk2IC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3JrIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg1RDdBMkYw
ODc5RUJBOTAwNkE5MTcyIC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3JrICovOyB9OwogCQlBODhERDQ4
NzBCNDYyOUEzMDBDMDI5OTAgLyogUGF0aFRyYXZlcnNhbFN0YXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODhERDQ4NjBCNDYyOUEzMDBDMDI5OTAg
LyogUGF0aFRyYXZlcnNhbFN0YXRlLmggKi87IH07CiAJCUE4OERENDg5MEI0NjI5QjAwMEMwMjk5
MCAvKiBQYXRoVHJhdmVyc2FsU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTg4REQ0ODgwQjQ2MjlCMDAwQzAyOTkwIC8qIFBhdGhUcmF2ZXJz
YWxTdGF0ZS5jcHAgKi87IH07CisJCUE4OEZFMzM0MEU1RUVFODcwMDhEOEMwRiAvKiBHcmFwaGlj
c0NvbnRleHRQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBODhGRTMzMzBFNUVFRTg3MDA4RDhDMEYgLyogR3JhcGhpY3NDb250ZXh0UHJpdmF0
ZS5oICovOyB9OwogCQlBODk5NDMyODBCNDIzMzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4OTk0MzI2MEI0
MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5oICovOyB9OwogCQlBODk5NDMyOTBCNDIzMzg4
MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTg5OTQzMjcwQjQyMzM4NzAwRDdDODAyIC8qIEJpdG1hcEltYWdl
LmNwcCAqLzsgfTsKIAkJQThBOTA5QUMwQ0JDRDZCNTAwMjlCODA3IC8qIFJlbmRlclNWR1RyYW5z
Zm9ybWFibGVDb250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4QTkwOUFBMENCQ0Q2QjUwMDI5QjgwNyAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyLmggKi87IH07CkBAIC02NjYzLDYgKzY2NjQsNyBAQAogCQlBODcxREZFMTBB
MTUzNzZCMDBCMTJBNjggLyogUmVuZGVyV2lkZ2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZW5kZXJXaWRnZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBODhERDQ4NjBCNDYyOUEzMDBDMDI5OTAgLyogUGF0aFRyYXZlcnNhbFN0YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhdGhUcmF2ZXJzYWxTdGF0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODhERDQ4ODBCNDYyOUIwMDBDMDI5OTAgLyog
UGF0aFRyYXZlcnNhbFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBhdGhUcmF2ZXJzYWxTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUE4OEZFMzMzMEU1RUVFODcwMDhEOEMwRiAvKiBHcmFwaGljc0NvbnRleHRQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dFByaXZhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg5OTQzMjYwQjQyMzM4NzAwRDdDODAyIC8q
IEJpdG1hcEltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpdG1hcElt
YWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4OTk0MzI3MEI0MjMzODcwMEQ3
QzgwMiAvKiBCaXRtYXBJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBCaXRtYXBJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTkw
OUFBMENCQ0Q2QjUwMDI5QjgwNyAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1RyYW5zZm9ybWFibGVD
b250YWluZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMjIzLDYgKzEyMjI1
LDcgQEAKIAkJCQlCMkMzREE1RjBEMDA2Q0Q2MDBFRjZGMjYgLyogR2x5cGhXaWR0aE1hcC5oICov
LAogCQkJCUJDNTNDNjA3MERBNTZDNTcwMDIxRUI1RCAvKiBHcmFkaWVudC5jcHAgKi8sCiAJCQkJ
QkM1M0M1RjQwREE1NkI5MjAwMjFFQjVEIC8qIEdyYWRpZW50LmggKi8sCisJCQkJQTg4RkUzMzMw
RTVFRUU4NzAwOEQ4QzBGIC8qIEdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCAqLywKIAkJCQlCMkEw
MTU5MjBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmNwcCAqLywKIAkJCQlCMkEw
MTU5MzBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmggKi8sCiAJCQkJQjJBMDE1
OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwICovLApAQCAtMTU0NDAsNiAr
MTU0NDMsNyBAQAogCQkJCTI5QUFDNTFGMEU1Mzk2M0IwMDhGOUIzQiAvKiBBY2Nlc3NpYmlsaXR5
VGFibGVIZWFkZXJDb250YWluZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4QTQ4NDc4MEU1Mjcy
QzUwMEMzRkU3NiAvKiBTY3JpcHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEZBNkU1
RDBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTg4RkUz
MzQwRTVFRUU4NzAwOEQ4QzBGIC8qIEdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQ3VzdG9tLmNwcAppbmRleCA5MmVkOGU4Li4zN2UyNTRmIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9t
LmNwcApAQCAtNDQsOCArNDQsOCBAQCBzdGF0aWMgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4
ZWMsIENhbnZhc1N0eWxlKiBzdHlsZSkKIHsKICAgICBpZiAoc3R5bGUtPmNhbnZhc0dyYWRpZW50
KCkpCiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIHN0eWxlLT5jYW52YXNHcmFkaWVudCgpKTsK
LSAgICBpZiAoc3R5bGUtPnBhdHRlcm4oKSkKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgc3R5
bGUtPnBhdHRlcm4oKSk7CisgICAgaWYgKHN0eWxlLT5jYW52YXNQYXR0ZXJuKCkpCisgICAgICAg
IHJldHVybiB0b0pTKGV4ZWMsIHN0eWxlLT5jYW52YXNQYXR0ZXJuKCkpOwogICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCBzdHlsZS0+Y29sb3IoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
Y3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5j
cHAKaW5kZXggN2E3MjEzNC4uZmQwY2E1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTR3Jh
ZGllbnRWYWx1ZS5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKQEAg
LTcxLDcgKzcxLDcgQEAgU3RyaW5nIENTU0dyYWRpZW50VmFsdWU6OmNzc1RleHQoKSBjb25zdAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUdyYWRpZW50KiBDU1NHcmFkaWVudFZhbHVlOjpjcmVh
dGVHcmFkaWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQor
UGFzc1JlZlB0cjxHcmFkaWVudD4gQ1NTR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBBU1NFUlQo
IXNpemUuaXNFbXB0eSgpKTsKICAgICAKQEAgLTgwLDEzICs4MCwxMyBAQCBHcmFkaWVudCogQ1NT
R3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29u
c3QgSW50U2l6ZQogICAgIEZsb2F0UG9pbnQgZmlyc3RQb2ludCA9IHJlc29sdmVQb2ludChtX2Zp
cnN0WC5nZXQoKSwgbV9maXJzdFkuZ2V0KCksIHNpemUsIHpvb21GYWN0b3IpOwogICAgIEZsb2F0
UG9pbnQgc2Vjb25kUG9pbnQgPSByZXNvbHZlUG9pbnQobV9zZWNvbmRYLmdldCgpLCBtX3NlY29u
ZFkuZ2V0KCksIHNpemUsIHpvb21GYWN0b3IpOwogICAgIAotICAgIEdyYWRpZW50KiBncmFkaWVu
dCA9IDA7CisgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudDsKICAgICBpZiAobV90eXBlID09
IENTU0xpbmVhckdyYWRpZW50KQotICAgICAgICBncmFkaWVudCA9IG5ldyBHcmFkaWVudChmaXJz
dFBvaW50LCBzZWNvbmRQb2ludCk7CisgICAgICAgIGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0
ZShmaXJzdFBvaW50LCBzZWNvbmRQb2ludCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGZsb2F0IGZp
cnN0UmFkaXVzID0gcmVzb2x2ZVJhZGl1cyhtX2ZpcnN0UmFkaXVzLmdldCgpLCB6b29tRmFjdG9y
KTsKICAgICAgICAgZmxvYXQgc2Vjb25kUmFkaXVzID0gcmVzb2x2ZVJhZGl1cyhtX3NlY29uZFJh
ZGl1cy5nZXQoKSwgem9vbUZhY3Rvcik7Ci0gICAgICAgIGdyYWRpZW50ID0gbmV3IEdyYWRpZW50
KGZpcnN0UG9pbnQsIGZpcnN0UmFkaXVzLCBzZWNvbmRQb2ludCwgc2Vjb25kUmFkaXVzKTsKKyAg
ICAgICAgZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKGZpcnN0UG9pbnQsIGZpcnN0UmFkaXVz
LCBzZWNvbmRQb2ludCwgc2Vjb25kUmFkaXVzKTsKICAgICB9CiAKICAgICAvLyBOb3cgYWRkIHRo
ZSBzdG9wcy4KQEAgLTEwMSw3ICsxMDEsNyBAQCBHcmFkaWVudCogQ1NTR3JhZGllbnRWYWx1ZTo6
Y3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZQogICAg
IC8vIFRoZSBiYWNrIGVuZCBhbHJlYWR5IHNvcnRlZCB0aGUgc3RvcHMuCiAgICAgZ3JhZGllbnQt
PnNldFN0b3BzU29ydGVkKHRydWUpOwogCi0gICAgcmV0dXJuIGdyYWRpZW50OworICAgIHJldHVy
biBncmFkaWVudC5yZWxlYXNlKCk7CiB9CiAKIEltYWdlKiBDU1NHcmFkaWVudFZhbHVlOjppbWFn
ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oIGIvV2ViQ29yZS9jc3MvQ1NTR3JhZGll
bnRWYWx1ZS5oCmluZGV4IGI5MGQzMDcuLjRjOTBiZTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3Nz
L0NTU0dyYWRpZW50VmFsdWUuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgK
QEAgLTgyLDcgKzgyLDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgLy8gQ3JlYXRlIHRo
ZSBncmFkaWVudCBmb3IgYSBnaXZlbiBzaXplLgotICAgIEdyYWRpZW50KiBjcmVhdGVHcmFkaWVu
dChSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJik7CisgICAgUGFzc1JlZlB0cjxHcmFkaWVu
dD4gY3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpOwogICAgIAog
ICAgIC8vIFJlc29sdmUgcG9pbnRzL3JhZGlpIHRvIGZyb250IGVuZCB2YWx1ZXMuCiAgICAgRmxv
YXRQb2ludCByZXNvbHZlUG9pbnQoQ1NTUHJpbWl0aXZlVmFsdWUqLCBDU1NQcmltaXRpdmVWYWx1
ZSosIGNvbnN0IEludFNpemUmLCBmbG9hdCB6b29tRmFjdG9yKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9DYW52YXNHcmFkaWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvQ2FudmFzR3JhZGllbnQu
Y3BwCmluZGV4IGMxNTYzMzguLmFhNWYwM2MgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9DYW52
YXNHcmFkaWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc0dyYWRpZW50LmNwcApAQCAt
MzIsMTIgKzMyLDEyIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENhbnZhc0dyYWRpZW50OjpD
YW52YXNHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEp
Ci0gICAgOiBtX2dyYWRpZW50KHAwLCBwMSkKKyAgICA6IG1fZ3JhZGllbnQoR3JhZGllbnQ6OmNy
ZWF0ZShwMCwgcDEpKQogewogfQogCiBDYW52YXNHcmFkaWVudDo6Q2FudmFzR3JhZGllbnQoY29u
c3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQg
cjEpCi0gICAgOiBtX2dyYWRpZW50KHAwLCByMCwgcDEsIHIxKQorICAgIDogbV9ncmFkaWVudChH
cmFkaWVudDo6Y3JlYXRlKHAwLCByMCwgcDEsIHIxKSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0NhbnZhc0dyYWRpZW50LmggYi9XZWJDb3JlL2h0bWwvQ2FudmFzR3JhZGllbnQu
aAppbmRleCBmMDhiZmZmLi40MDcyOTVlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFz
R3JhZGllbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvQ2FudmFzR3JhZGllbnQuaApAQCAtNDYsMTcg
KzQ2LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ2FudmFzR3JhZGllbnQocDAsIHIwLCBwMSwgcjEpKTsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgR3JhZGllbnQmIGdyYWRpZW50KCkgeyByZXR1cm4gbV9ncmFkaWVudDsgfQor
ICAgICAgICBHcmFkaWVudCogZ3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX2dyYWRpZW50Lmdl
dCgpOyB9CiAKLSAgICAgICAgdm9pZCBhZGRDb2xvclN0b3AoZmxvYXQgdmFsdWUsIGNvbnN0IFN0
cmluZyYgY29sb3IpIHsgbV9ncmFkaWVudC5hZGRDb2xvclN0b3AodmFsdWUsIGNvbG9yKTsgfQor
ICAgICAgICB2b2lkIGFkZENvbG9yU3RvcChmbG9hdCB2YWx1ZSwgY29uc3QgU3RyaW5nJiBjb2xv
cikgeyBtX2dyYWRpZW50LT5hZGRDb2xvclN0b3AodmFsdWUsIGNvbG9yKTsgfQogCi0gICAgICAg
IHZvaWQgZ2V0Q29sb3IoZmxvYXQgdmFsdWUsIGZsb2F0KiByLCBmbG9hdCogZywgZmxvYXQqIGIs
IGZsb2F0KiBhKSBjb25zdCB7IG1fZ3JhZGllbnQuZ2V0Q29sb3IodmFsdWUsIHIsIGcsIGIsIGEp
OyB9CisgICAgICAgIHZvaWQgZ2V0Q29sb3IoZmxvYXQgdmFsdWUsIGZsb2F0KiByLCBmbG9hdCog
ZywgZmxvYXQqIGIsIGZsb2F0KiBhKSBjb25zdCB7IG1fZ3JhZGllbnQtPmdldENvbG9yKHZhbHVl
LCByLCBnLCBiLCBhKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ2FudmFzR3JhZGllbnQo
Y29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKTsKICAgICAgICAgQ2Fu
dmFzR3JhZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBv
aW50JiBwMSwgZmxvYXQgcjEpOwogICAgICAgICAKLSAgICAgICAgR3JhZGllbnQgbV9ncmFkaWVu
dDsKKyAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBtX2dyYWRpZW50OwogICAgIH07CiAKIH0gLy9u
YW1lc3BhY2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmNwcCBiL1dl
YkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmNwcAppbmRleCA0NGZhMjFhLi42MmE0NjIwIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5jcHAKKysrIGIvV2ViQ29yZS9odG1s
L0NhbnZhc1BhdHRlcm4uY3BwCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgQ2FudmFzUGF0dGVybjo6
cGFyc2VSZXBldGl0aW9uVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHJlcGVhdFgsIGJv
b2wmCiB9CiAKIENhbnZhc1BhdHRlcm46OkNhbnZhc1BhdHRlcm4oSW1hZ2UqIGltYWdlLCBib29s
IHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKLSAgICA6IG1fcGF0dGVy
bihpbWFnZSwgcmVwZWF0WCwgcmVwZWF0WSkKKyAgICA6IG1fcGF0dGVybihQYXR0ZXJuOjpjcmVh
dGUoaW1hZ2UsIHJlcGVhdFgsIHJlcGVhdFkpKQogICAgICwgbV9vcmlnaW5DbGVhbihvcmlnaW5D
bGVhbikKIHsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmggYi9X
ZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5oCmluZGV4IDc5Yzc4NzIuLjZjMDEyZDEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmgKKysrIGIvV2ViQ29yZS9odG1sL0Nh
bnZhc1BhdHRlcm4uaApAQCAtNDUsMTUgKzQ1LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNQYXR0ZXJuKGlt
YWdlLCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikpOwogICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKCkgeyByZXR1cm4gbV9wYXR0ZXJuOyB9
CisKKyAgICAgICAgUGF0dGVybiogcGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fcGF0dGVybi5n
ZXQoKTsgfQogCiAgICAgICAgIGJvb2wgb3JpZ2luQ2xlYW4oKSBjb25zdCB7IHJldHVybiBtX29y
aWdpbkNsZWFuOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBDYW52YXNQYXR0ZXJuKEltYWdl
KiwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pOwogCi0gICAg
ICAgIFBhdHRlcm4gbV9wYXR0ZXJuOworICAgICAgICBSZWZQdHI8UGF0dGVybj4gbV9wYXR0ZXJu
OwogICAgICAgICBib29sIG1fb3JpZ2luQ2xlYW47CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9XZWJDb3JlL2h0bWwvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCA3ZDM5MWEyLi4wMWMwOGQ3IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJD
b3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMiw2ICsyLDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQog
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAxLDggKzEwMiw2IEBAIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6U3RhdGU6OlN0YXRlKCkKICAgICAsIG1fc2hhZG93Q29sb3IoImJsYWNrIikKICAg
ICAsIG1fZ2xvYmFsQWxwaGEoMSkKICAgICAsIG1fZ2xvYmFsQ29tcG9zaXRlKENvbXBvc2l0ZVNv
dXJjZU92ZXIpCi0gICAgLCBtX2FwcGxpZWRTdHJva2VQYXR0ZXJuKGZhbHNlKQotICAgICwgbV9h
cHBsaWVkRmlsbFBhdHRlcm4oZmFsc2UpCiB7CiB9CiAKQEAgLTE0MSw3ICsxNDAsNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlU3R5bGUoUGFzc1JlZlB0cjxDYW52
YXNTdHlsZT4gc3R5bGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2NhbnZhcy0+b3Jp
Z2luQ2xlYW4oKSkgewotICAgICAgICBpZiAoQ2FudmFzUGF0dGVybiogcGF0dGVybiA9IHN0eWxl
LT5wYXR0ZXJuKCkpIHsKKyAgICAgICAgaWYgKENhbnZhc1BhdHRlcm4qIHBhdHRlcm4gPSBzdHls
ZS0+Y2FudmFzUGF0dGVybigpKSB7CiAgICAgICAgICAgICBpZiAoIXBhdHRlcm4tPm9yaWdpbkNs
ZWFuKCkpCiAgICAgICAgICAgICAgICAgbV9jYW52YXMtPnNldE9yaWdpblRhaW50ZWQoKTsKICAg
ICAgICAgfQpAQCAtMTUyLDcgKzE1MSw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpzZXRTdHJva2VTdHlsZShQYXNzUmVmUHRyPENhbnZhc1N0eWxlPiBzdHlsZSkKICAgICBpZiAo
IWMpCiAgICAgICAgIHJldHVybjsKICAgICBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPmFwcGx5U3Ry
b2tlQ29sb3IoYyk7Ci0gICAgc3RhdGUoKS5tX2FwcGxpZWRTdHJva2VQYXR0ZXJuID0gZmFsc2U7
CiB9CiAKIENhbnZhc1N0eWxlKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxTdHlsZSgp
IGNvbnN0CkBAIC0xNjYsNyArMTY0LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldEZpbGxTdHlsZShQYXNzUmVmUHRyPENhbnZhc1N0eWxlPiBzdHlsZSkKICAgICAgICAgcmV0
dXJuOwogIAogICAgIGlmIChtX2NhbnZhcy0+b3JpZ2luQ2xlYW4oKSkgewotICAgICAgICBpZiAo
Q2FudmFzUGF0dGVybiogcGF0dGVybiA9IHN0eWxlLT5wYXR0ZXJuKCkpIHsKKyAgICAgICAgaWYg
KENhbnZhc1BhdHRlcm4qIHBhdHRlcm4gPSBzdHlsZS0+Y2FudmFzUGF0dGVybigpKSB7CiAgICAg
ICAgICAgICBpZiAoIXBhdHRlcm4tPm9yaWdpbkNsZWFuKCkpCiAgICAgICAgICAgICAgICAgbV9j
YW52YXMtPnNldE9yaWdpblRhaW50ZWQoKTsKICAgICAgICAgfQpAQCAtMTc3LDcgKzE3NSw2IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsU3R5bGUoUGFzc1JlZlB0cjxD
YW52YXNTdHlsZT4gc3R5bGUpCiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CiAgICAgc3Rh
dGUoKS5tX2ZpbGxTdHlsZS0+YXBwbHlGaWxsQ29sb3IoYyk7Ci0gICAgc3RhdGUoKS5tX2FwcGxp
ZWRGaWxsUGF0dGVybiA9IGZhbHNlOwogfQogCiBmbG9hdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OmxpbmVXaWR0aCgpIGNvbnN0CkBAIC01NDIsNDcgKzUzOSw3IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpmaWxsKCkKICAgICBpZiAoIW1fcGF0aC5pc0VtcHR5KCkpCiAgICAg
ICAgIHdpbGxEcmF3KG1fcGF0aC5ib3VuZGluZ1JlY3QoKSk7CiAKLSNpZiBQTEFURk9STShDRykK
LSAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAg
ICAvLyBTaGFkaW5nIHdvcmtzIG9uIHRoZSBlbnRpcmUgY2xpcCByZWdpb24sIHNvIGNvbnZlcnQg
dGhlIGN1cnJlbnQgcGF0aCB0byBhIGNsaXAuCi0gICAgICAgIGMtPnNhdmUoKTsKLSAgICAgICAg
Q0dDb250ZXh0Q2xpcChjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgICAgIENHQ29udGV4dERy
YXdTaGFkaW5nKGMtPnBsYXRmb3JtQ29udGV4dCgpLCBzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52
YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRmb3JtR3JhZGllbnQoKSk7ICAgICAgICAKLSAg
ICAgICAgYy0+cmVzdG9yZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1f
ZmlsbFN0eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0g
ICAgICAgIENHQ29udGV4dEZpbGxQYXRoKGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICB9Ci0j
ZWxpZiBQTEFURk9STShRVCkKLSAgICBRUGFpbnRlclBhdGgqIHBhdGggPSBtX3BhdGgucGxhdGZv
cm1QYXRoKCk7Ci0gICAgUVBhaW50ZXIqIHAgPSBzdGF0aWNfY2FzdDxRUGFpbnRlcio+KGMtPnBs
YXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3Jh
ZGllbnQoKSkgewotICAgICAgICBwLT5maWxsUGF0aCgqcGF0aCwgUUJydXNoKCooc3RhdGUoKS5t
X2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKS0+Z3JhZGllbnQoKS5wbGF0Zm9ybUdyYWRpZW50
KCkpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHN0YXRlKCkubV9maWxsU3R5bGUtPnBh
dHRlcm4oKSkKLSAgICAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKLSAgICAgICAgcC0+Zmls
bFBhdGgoKnBhdGgsIHAtPmJydXNoKCkpOwotICAgIH0KLSNlbGlmIFBMQVRGT1JNKENBSVJPKQot
ICAgIGNhaXJvX3QqIGNyID0gYy0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgY2Fpcm9fc2F2ZShj
cik7Ci0KLSAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkgewot
ICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNH
cmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRmb3JtR3JhZGllbnQoKSk7Ci0gICAgICAgIGNhaXJv
X2ZpbGwoY3IpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxl
LT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgZmxvYXQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7Ci0gICAgICAg
ICAgICBjLT5maWxsQ29sb3IoKS5nZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAg
ICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGEpOwotICAgICAgICB9Ci0gICAgICAgIGNhaXJvX2ZpbGwoY3IpOwotICAgIH0KLSAgICBjYWly
b19yZXN0b3JlKGNyKTsKLSNlbmRpZgorICAgIGMtPmZpbGxQYXRoKCk7CiAKICNpZiBFTkFCTEUo
REFTSEJPQVJEX1NVUFBPUlQpCiAgICAgY2xlYXJQYXRoRm9yRGFzaGJvYXJkQmFja3dhcmRDb21w
YXRpYmlsaXR5TW9kZSgpOwpAQCAtNjA1LDU0ICs1NjIsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c3Ryb2tlKCkKICAgICAgICAgYm91bmRpbmdSZWN0LmluZmxhdGUoaW5zZXQp
OwogICAgICAgICB3aWxsRHJhdyhib3VuZGluZ1JlY3QpOwogICAgIH0KLSAgICAKLSAgICAvLyBG
SVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4
dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS0+
Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAgICAvLyBTaGFkaW5nIHdvcmtzIG9uIHRoZSBlbnRp
cmUgY2xpcCByZWdpb24sIHNvIGNvbnZlcnQgdGhlIGN1cnJlbnQgcGF0aCB0byBhIGNsaXAuCi0g
ICAgICAgIGMtPnNhdmUoKTsKLSAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tl
ZFBhdGgoYy0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgICAgICBDR0NvbnRleHRDbGlwKGMtPnBs
YXRmb3JtQ29udGV4dCgpKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoYy0+cGxhdGZv
cm1Db250ZXh0KCksIHN0YXRlKCkubV9zdHJva2VTdHlsZS0+Y2FudmFzR3JhZGllbnQoKS0+Z3Jh
ZGllbnQoKS5wbGF0Zm9ybUdyYWRpZW50KCkpOyAgICAgICAgCi0gICAgICAgIGMtPnJlc3RvcmUo
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5wYXR0
ZXJuKCkpCi0gICAgICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4oKTsKLSAgICAgICAgQ0dDb250
ZXh0U3Ryb2tlUGF0aChjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgfQotI2VsaWYgUExBVEZP
Uk0oUVQpCi0gICAgUVBhaW50ZXJQYXRoKiBwYXRoID0gbV9wYXRoLnBsYXRmb3JtUGF0aCgpOwot
ICAgIFFQYWludGVyKiBwID0gc3RhdGljX2Nhc3Q8UVBhaW50ZXIqPihjLT5wbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkg
ewotICAgICAgICBwLT5zYXZlKCk7Ci0gICAgICAgIHAtPnNldEJydXNoKCooc3RhdGUoKS5tX3N0
cm9rZVN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRmb3JtR3JhZGllbnQo
KSkpOwotICAgICAgICBwLT5zdHJva2VQYXRoKCpwYXRoLCBwLT5wZW4oKSk7Ci0gICAgICAgIHAt
PnJlc3RvcmUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX3N0cm9rZVN0
eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4oKTsKLSAgICAg
ICAgcC0+c3Ryb2tlUGF0aCgqcGF0aCwgcC0+cGVuKCkpOwotICAgIH0KLSNlbGlmIFBMQVRGT1JN
KENBSVJPKQotICAgIGNhaXJvX3QqIGNyID0gYy0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgY2Fp
cm9fc2F2ZShjcik7Ci0gICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS0+Y2FudmFzR3JhZGll
bnQoKSkgewotICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBzdGF0ZSgpLm1fc3Ryb2tlU3R5
bGUtPmNhbnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkucGxhdGZvcm1HcmFkaWVudCgpKTsKLSAg
ICAgICAgYy0+YWRkUGF0aChtX3BhdGgpOwotICAgICAgICBjYWlyb19zdHJva2UoY3IpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPnBhdHRlcm4oKSkK
LSAgICAgICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwotICAgICAgICAgICAgYy0+c3Ry
b2tlQ29sb3IoKS5nZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICAgICAgICAg
IGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAg
ICAgICB9Ci0gICAgICAgIGMtPmFkZFBhdGgobV9wYXRoKTsKLSAgICAgICAgY2Fpcm9fc3Ryb2tl
KGNyKTsKLSAgICB9Ci0gICAgY2Fpcm9fcmVzdG9yZShjcik7Ci0jZW5kaWYKKworICAgIGMtPnN0
cm9rZVBhdGgoKTsKIAogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKICAgICBjbGVhclBh
dGhGb3JEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKCk7CkBAIC03MDksNDIgKzYy
MCw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsUmVjdChmbG9hdCB4LCBm
bG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpCiAgICAgRmxvYXRSZWN0IHJlY3QoeCwgeSwg
d2lkdGgsIGhlaWdodCk7CiAgICAgd2lsbERyYXcocmVjdCk7CiAKLSAgICAvLyBGSVhNRTogRG8g
dGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0j
aWYgUExBVEZPUk0oQ0cpCi0gICAgaWYgKHN0YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dyYWRp
ZW50KCkpIHsKLSAgICAgICAgYy0+c2F2ZSgpOwotICAgICAgICBzdGF0ZSgpLm1fZmlsbFN0eWxl
LT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLmZpbGwoYywgcmVjdCk7Ci0gICAgICAgIGMt
PnJlc3RvcmUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHls
ZS0+cGF0dGVybigpKQotICAgICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwotICAgICAgICBD
R0NvbnRleHRGaWxsUmVjdChjLT5wbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7Ci0gICAgfQotI2Vs
aWYgUExBVEZPUk0oUVQpCi0gICAgUVBhaW50ZXIqIHAgPSBzdGF0aWNfY2FzdDxRUGFpbnRlcio+
KGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2Fu
dmFzR3JhZGllbnQoKSkgewotICAgICAgICBwLT5maWxsUmVjdChyZWN0LCBRQnJ1c2goKihzdGF0
ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRmb3JtR3Jh
ZGllbnQoKSkpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHls
ZS0+cGF0dGVybigpKQotICAgICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwotICAgICAgICBw
LT5maWxsUmVjdChyZWN0LCBwLT5icnVzaCgpKTsKLSAgICB9Ci0jZWxpZiBQTEFURk9STShDQUlS
TykKLSAgICBjYWlyb190KiBjciA9IGMtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNhaXJvX3Nh
dmUoY3IpOwotICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpKSB7
Ci0gICAgICAgIHN0YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dyYWRpZW50KCktPmdyYWRpZW50
KCkuZmlsbChjLCByZWN0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX2Zp
bGxTdHlsZS0+cGF0dGVybigpKSB7Ci0gICAgICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0g
ICAgICAgICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAg
ICAgICAgICAgY2Fpcm9fZmlsbChjcik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYy0+
ZmlsbFJlY3QocmVjdCwgYy0+ZmlsbENvbG9yKCkpOwotICAgIH0KLSAgICAKLSAgICBjYWlyb19y
ZXN0b3JlKGNyKTsKLSNlbmRpZgorICAgIGMtPnNhdmUoKTsKKyAgICBjLT5maWxsUmVjdChyZWN0
KTsKKyAgICBjLT5yZXN0b3JlKCk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpzdHJva2VSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQp
CkBAIC03NzIsMTAgKzY1MCw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJv
a2VSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoCiAgICAgYm91bmRp
bmdSZWN0LmluZmxhdGUobGluZVdpZHRoIC8gMik7CiAgICAgd2lsbERyYXcoYm91bmRpbmdSZWN0
KTsKIAotICAgIC8vIEZJWE1FOiBObyBzdXBwb3J0IGZvciBncmFkaWVudHMhCi0gICAgaWYgKHN0
YXRlKCkubV9zdHJva2VTdHlsZS0+cGF0dGVybigpKQotICAgICAgICBhcHBseVN0cm9rZVBhdHRl
cm4oKTsKLQogICAgIGMtPnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKIH0KIApAQCAtMTE3
NCw1OCArMTA0OCw2IEBAIEdyYXBoaWNzQ29udGV4dCogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpkcmF3aW5nQ29udGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fY2FudmFzLT5kcmF3aW5nQ29u
dGV4dCgpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXBwbHlTdHJva2VQ
YXR0ZXJuKCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwot
ICAgIGlmICghYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IENhbiB0aGlzIGNo
ZWNrIGJlIG1vdmVkIGludG8gR3JhcGhpY3NDb250ZXh0PyBvciByZW1vdmVkPwotI2lmIFBMQVRG
T1JNKENHKQotICAgIC8vIENoZWNrIGZvciBjYXNlIHdoZXJlIHRoZSBwYXR0ZXJuIGlzIGFscmVh
ZHkgc2V0LgotICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBjLT5nZXRDVE0oKTsKLSAgICBpZiAo
c3RhdGUoKS5tX2FwcGxpZWRTdHJva2VQYXR0ZXJuICYmIGN0bSA9PSBzdGF0ZSgpLm1fc3Ryb2tl
U3R5bGVQYXR0ZXJuVHJhbnNmb3JtKQotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLQotICAgIENh
bnZhc1BhdHRlcm4qIHBhdHRlcm4gPSBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPnBhdHRlcm4oKTsK
LSAgICBpZiAoIXBhdHRlcm4pCi0gICAgICAgIHJldHVybjsKLQotICAgIGMtPmFwcGx5U3Ryb2tl
UGF0dGVybihwYXR0ZXJuLT5wYXR0ZXJuKCkpOwotCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgc3Rh
dGUoKS5tX3N0cm9rZVN0eWxlUGF0dGVyblRyYW5zZm9ybSA9IGN0bTsKLSNlbmRpZgotICAgIHN0
YXRlKCkubV9hcHBsaWVkU3Ryb2tlUGF0dGVybiA9IHRydWU7Ci19Ci0KLXZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjphcHBseUZpbGxQYXR0ZXJuKCkKLXsKLSAgICBHcmFwaGljc0NvbnRl
eHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghYykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gRklYTUU6IENhbiB0aGlzIGNoZWNrIGJlIG1vdmVkIGludG8gR3JhcGhpY3NDb250
ZXh0PyBvciByZW1vdmVkPwotI2lmIFBMQVRGT1JNKENHKQotICAgIC8vIENoZWNrIGZvciBjYXNl
IHdoZXJlIHRoZSBwYXR0ZXJuIGlzIGFscmVhZHkgc2V0LgotICAgIEFmZmluZVRyYW5zZm9ybSBj
dG0gPSBjLT5nZXRDVE0oKTsKLSAgICBpZiAoc3RhdGUoKS5tX2FwcGxpZWRGaWxsUGF0dGVybiAm
JiBjdG0gPT0gc3RhdGUoKS5tX2ZpbGxTdHlsZVBhdHRlcm5UcmFuc2Zvcm0pCi0gICAgICAgIHJl
dHVybjsKLSNlbmRpZgotCi0gICAgQ2FudmFzUGF0dGVybiogcGF0dGVybiA9IHN0YXRlKCkubV9m
aWxsU3R5bGUtPnBhdHRlcm4oKTsKLSAgICBpZiAoIXBhdHRlcm4pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGMtPmFwcGx5RmlsbFBhdHRlcm4ocGF0dGVybi0+cGF0dGVybigpKTsKLQotI2lmIFBM
QVRGT1JNKENHKQotICAgIHN0YXRlKCkubV9maWxsU3R5bGVQYXR0ZXJuVHJhbnNmb3JtID0gY3Rt
OwotI2VuZGlmCi0gICAgc3RhdGUoKS5tX2FwcGxpZWRGaWxsUGF0dGVybiA9IHRydWU7Ci19Ci0K
IHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlRGF0YT4gY3JlYXRlRW1wdHlJbWFnZURhdGEoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKIHsKICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZGF0YSA9IEltYWdl
RGF0YTo6Y3JlYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggYi9XZWJDb3JlL2h0bWwvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmgKaW5kZXggMTY4YjczMC4uOWE3ZmRhZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCisrKyBiL1dlYkNvcmUv
aHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaApAQCAtMTkxLDEzICsxOTEsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBTdHJpbmcgbV9zaGFkb3dDb2xvcjsKICAgICAg
ICAgICAgIGZsb2F0IG1fZ2xvYmFsQWxwaGE7CiAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRv
ciBtX2dsb2JhbENvbXBvc2l0ZTsKLSAgICAgICAgICAgIGJvb2wgbV9hcHBsaWVkU3Ryb2tlUGF0
dGVybjsKLSAgICAgICAgICAgIGJvb2wgbV9hcHBsaWVkRmlsbFBhdHRlcm47CiAgICAgICAgICAg
ICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Ci0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9zdHJva2VTdHlsZVBhdHRlcm5UcmFuc2Zvcm07Ci0gICAg
ICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9maWxsU3R5bGVQYXR0ZXJuVHJhbnNmb3JtOwotI2Vu
ZGlmCiAgICAgICAgIH07CiAgICAgICAgIFBhdGggbV9wYXRoOwogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvQ2FudmFzU3R5bGUuY3BwIGIvV2ViQ29yZS9odG1sL0NhbnZhc1N0eWxlLmNwcApp
bmRleCA1NjEzMGRmLi41OWY3MDYyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzU3R5
bGUuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9DYW52YXNTdHlsZS5jcHAKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKICAqIENvcHlyaWdodCAo
QykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTE0MSw3ICsxNDIsMTAgQEAgdm9pZCBDYW52YXNTdHlsZTo6YXBwbHlTdHJva2VD
b2xvcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIEdyYWRpZW50OgorICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ry
b2tlR3JhZGllbnQoY2FudmFzR3JhZGllbnQoKS0+Z3JhZGllbnQoKSk7CisgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBJbWFnZVBhdHRlcm46CisgICAgICAgICAgICBjb250ZXh0LT5z
ZXRTdHJva2VQYXR0ZXJuKGNhbnZhc1BhdHRlcm4oKS0+cGF0dGVybigpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgIH0KIH0KQEAgLTE4Nyw3ICsxOTEsMTAgQEAgdm9pZCBDYW52YXNTdHlsZTo6
YXBwbHlGaWxsQ29sb3IoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHcmFkaWVudDoKKyAgICAgICAgICAgIGNvbnRl
eHQtPnNldEZpbGxHcmFkaWVudChjYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEltYWdlUGF0dGVybjoKKyAgICAgICAgICAgIGNv
bnRleHQtPnNldEZpbGxQYXR0ZXJuKGNhbnZhc1BhdHRlcm4oKS0+cGF0dGVybigpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNT
dHlsZS5oIGIvV2ViQ29yZS9odG1sL0NhbnZhc1N0eWxlLmgKaW5kZXggMDc5YWI2Zi4uZmUwMWJk
MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0NhbnZhc1N0eWxlLmgKKysrIGIvV2ViQ29yZS9o
dG1sL0NhbnZhc1N0eWxlLmgKQEAgLTQ3LDkgKzQ3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIFN0cmluZyBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KICAgICAg
ICAgQ2FudmFzR3JhZGllbnQqIGNhbnZhc0dyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9ncmFk
aWVudC5nZXQoKTsgfQotICAgICAgICBDYW52YXNQYXR0ZXJuKiBwYXR0ZXJuKCkgY29uc3QgeyBy
ZXR1cm4gbV9wYXR0ZXJuLmdldCgpOyB9CisgICAgICAgIENhbnZhc1BhdHRlcm4qIGNhbnZhc1Bh
dHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3BhdHRlcm4uZ2V0KCk7IH0KIAotICAgICAgICAvLyBU
aGVzZSBkbyBub3RoaW5nIGZvciBncmFkaWVudHMgb3IgcGF0dGVybnMuCiAgICAgICAgIHZvaWQg
YXBwbHlGaWxsQ29sb3IoR3JhcGhpY3NDb250ZXh0Kik7CiAgICAgICAgIHZvaWQgYXBwbHlTdHJv
a2VDb2xvcihHcmFwaGljc0NvbnRleHQqKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
ZW5lcmF0ZWRJbWFnZS5oCmluZGV4IDJjY2I0YjAuLjVlNzg5ODkgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgKQEAgLTMwLDE2ICszMCwxNiBAQAogCiAjaW5j
bHVkZSAiR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgR2VuZXJhdGVkSW1hZ2UgOiBwdWJsaWMgSW1hZ2UgewogcHVibGljOgotICAgIEdl
bmVyYXRlZEltYWdlKEdlbmVyYXRvciogZ2VuZXJhdG9yLCBjb25zdCBJbnRTaXplJiBzaXplKQot
ICAgIDogbV9zaXplKHNpemUpCisgICAgR2VuZXJhdGVkSW1hZ2UoUGFzc1JlZlB0cjxHZW5lcmF0
b3I+IGdlbmVyYXRvciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBtX2dlbmVyYXRv
cihnZW5lcmF0b3IpCisgICAgICAgICwgbV9zaXplKHNpemUpCiAgICAgewotICAgICAgICBtX2dl
bmVyYXRvci5zZXQoZ2VuZXJhdG9yKTsKICAgICB9CiAgICAgdmlydHVhbCB+R2VuZXJhdGVkSW1h
Z2UoKSB7fQogCkBAIC02Myw3ICs2Myw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKICAgICAKIHByb3RlY3RlZDoKLSAgICBPd25QdHI8
R2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKKyAgICBSZWZQdHI8R2VuZXJhdG9yPiBtX2dlbmVyYXRv
cjsKICAgICBJbnRTaXplIG1fc2l6ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR2VuZXJhdG9yLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVy
YXRvci5oCmluZGV4IGE1NDVhZDUuLmEwYWY2ODkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR2VuZXJhdG9yLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
ZW5lcmF0b3IuaApAQCAtMjYsMTQgKzI2LDE0IEBACiAjaWZuZGVmIEdlbmVyYXRvcl9oCiAjZGVm
aW5lIEdlbmVyYXRvcl9oCiAKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0
UmVjdDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIAotY2xhc3MgR2VuZXJhdG9yIDogTm9uY29w
eWFibGUgeworY2xhc3MgR2VuZXJhdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8R2VuZXJhdG9yPiB7
CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+R2VuZXJhdG9yKCkge307CiAgICAgCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmggYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYWRpZW50LmgKaW5kZXggYmVkYzE1Yy4uNzEzYTIwMCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhZGllbnQuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkdlbmVy
YXRvci5oIgogCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgUExBVEZPUk0oQ0cpCkBAIC01
OCw4ICs1OSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBHcmFkaWVudCA6
IHB1YmxpYyBHZW5lcmF0b3IgewogICAgIHB1YmxpYzoKLSAgICAgICAgR3JhZGllbnQoY29uc3Qg
RmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKTsKLSAgICAgICAgR3JhZGllbnQo
Y29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxv
YXQgcjEpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlKGNvbnN0
IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHcmFkaWVudChwMCwgcDEpKTsKKyAgICAgICAgfQor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9p
bnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIxKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdyYWRpZW50KHAwLCByMCwgcDEs
IHIxKSk7CisgICAgICAgIH0KICAgICAgICAgdmlydHVhbCB+R3JhZGllbnQoKTsKIAogICAgICAg
ICB2b2lkIGFkZENvbG9yU3RvcChmbG9hdCwgY29uc3QgU3RyaW5nJik7CkBAIC03NSw3ICs4Miw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIGZsb2F0IGdyZWVuOwogICAgICAg
ICAgICAgZmxvYXQgYmx1ZTsKICAgICAgICAgICAgIGZsb2F0IGFscGhhOwotICAgICAgICAgICAg
CisKICAgICAgICAgICAgIENvbG9yU3RvcCgpIDogc3RvcCgwKSwgcmVkKDApLCBncmVlbigwKSwg
Ymx1ZSgwKSwgYWxwaGEoMCkgeyB9CiAgICAgICAgICAgICBDb2xvclN0b3AoZmxvYXQgcywgZmxv
YXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkgOiBzdG9wKHMpLCByZWQociksIGdyZWVu
KGcpLCBibHVlKGIpLCBhbHBoYShhKSB7IH0KICAgICAgICAgfTsKQEAgLTg1LDYgKzkyLDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZmlsbChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKTsKIAogICAgIHByaXZhdGU6CisgICAgICAgIEdyYWRp
ZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSk7CisgICAgICAg
IEdyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2lu
dCYgcDEsIGZsb2F0IHIxKTsKKwogICAgICAgICB2b2lkIHBsYXRmb3JtSW5pdCgpIHsgbV9ncmFk
aWVudCA9IDA7IH0KICAgICAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDRlYjE5ZWYuLjll
Y2I1ZWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5j
cHAKQEAgLTEzNCw2ICsxMzQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlU3R5
bGUoY29uc3QgU3Ryb2tlU3R5bGUmIHN0eWxlKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogeworICAgIG1fY29tbW9uLT5zdGF0ZS5z
dHJva2VDb2xvclNwYWNlID0gU29saWRDb2xvclNwYWNlOwogICAgIG1fY29tbW9uLT5zdGF0ZS5z
dHJva2VDb2xvciA9IGNvbG9yOwogICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29sb3IpOwog
fQpAQCAtMTc4LDggKzE3OSwxOSBAQCBDb2xvciBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUNvbG9y
KCkgY29uc3QKICAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLnN0cm9rZUNvbG9yOwogfQogCitX
aW5kUnVsZSBHcmFwaGljc0NvbnRleHQ6OmZpbGxSdWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9jb21tb24tPnN0YXRlLmZpbGxSdWxlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
RmlsbFJ1bGUoV2luZFJ1bGUgZmlsbFJ1bGUpCit7CisgICAgbV9jb21tb24tPnN0YXRlLmZpbGxS
dWxlID0gZmlsbFJ1bGU7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQogeworICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3JTcGFj
ZSA9IFNvbGlkQ29sb3JTcGFjZTsKICAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbENvbG9yID0gY29s
b3I7CiAgICAgc2V0UGxhdGZvcm1GaWxsQ29sb3IoY29sb3IpOwogfQpAQCAtMTg5LDYgKzIwMSw1
NCBAQCBDb2xvciBHcmFwaGljc0NvbnRleHQ6OmZpbGxDb2xvcigpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3I7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRTdHJva2VQYXR0ZXJuKFBhc3NSZWZQdHI8UGF0dGVybj4gcGF0dGVybikKK3sKKyAgICBBU1NF
UlQocGF0dGVybik7CisgICAgaWYgKCFwYXR0ZXJuKSB7CisgICAgICAgIHNldFN0cm9rZUNvbG9y
KENvbG9yOjpibGFjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jb21tb24tPnN0
YXRlLnN0cm9rZUNvbG9yU3BhY2UgPSBQYXR0ZXJuQ29sb3JTcGFjZTsKKyAgICBtX2NvbW1vbi0+
c3RhdGUuc3Ryb2tlUGF0dGVybiA9IHBhdHRlcm47CisgICAgc2V0UGxhdGZvcm1TdHJva2VQYXR0
ZXJuKG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKFBhc3NSZWZQdHI8UGF0dGVybj4gcGF0dGVybikK
K3sKKyAgICBBU1NFUlQocGF0dGVybik7CisgICAgaWYgKCFwYXR0ZXJuKSB7CisgICAgICAgIHNl
dEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1f
Y29tbW9uLT5zdGF0ZS5maWxsQ29sb3JTcGFjZSA9IFBhdHRlcm5Db2xvclNwYWNlOworICAgIG1f
Y29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybiA9IHBhdHRlcm47CisgICAgc2V0UGxhdGZvcm1GaWxs
UGF0dGVybihtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQoUGFzc1JlZlB0cjxHcmFkaWVudD4gZ3Jh
ZGllbnQpCit7CisgICAgQVNTRVJUKGdyYWRpZW50KTsKKyAgICBpZiAoIWdyYWRpZW50KSB7Cisg
ICAgICAgIHNldFN0cm9rZUNvbG9yKENvbG9yOjpibGFjayk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgbV9jb21tb24tPnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UgPSBHcmFkaWVudENvbG9y
U3BhY2U7CisgICAgbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50ID0gZ3JhZGllbnQ7Cisg
ICAgc2V0UGxhdGZvcm1TdHJva2VHcmFkaWVudChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGll
bnQuZ2V0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KFBh
c3NSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50KQoreworICAgIEFTU0VSVChncmFkaWVudCk7Cisg
ICAgaWYgKCFncmFkaWVudCkgeworICAgICAgICBzZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbENvbG9yU3Bh
Y2UgPSBHcmFkaWVudENvbG9yU3BhY2U7CisgICAgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVu
dCA9IGdyYWRpZW50OworICAgIHNldFBsYXRmb3JtRmlsbEdyYWRpZW50KG1fY29tbW9uLT5zdGF0
ZS5maWxsR3JhZGllbnQuZ2V0KCkpOworfQorCiBib29sIEdyYXBoaWNzQ29udGV4dDo6dXBkYXRp
bmdDb250cm9sVGludHMoKSBjb25zdAogewogICAgIHJldHVybiBtX2NvbW1vbi0+bV91cGRhdGlu
Z0NvbnRyb2xUaW50czsKQEAgLTQyNiwxNCArNDg2LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKGludCBtb2RlKQogfQogI2VuZGlmCiAKLSNpZiAh
UExBVEZPUk0oQ0cpICYmICFQTEFURk9STShDQUlSTykKLS8vIE90aGVyIHBsYXRmb3JtcyBuZWVk
IHRvIGltcGxlbWVudCB0aGlzLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlQnVmZmVyKikKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotI2VuZGlmCi0KICNpZiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShD
QUlSTykKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKGNvbnN0
IFN0cm9rZVN0eWxlJikKIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCmluZGV4IDVhNTEwYWYuLjc1M2ZmNjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtOTQsNiArOTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogICAgIGNsYXNzIEZvbnQ7CiAgICAgY2xh
c3MgR2VuZXJhdG9yOworICAgIGNsYXNzIEdyYWRpZW50OwogICAgIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dFByaXZhdGU7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOwog
ICAgIGNsYXNzIEltYWdlQnVmZmVyOwpAQCAtMTM5LDMwICsxNDAsNDAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2b2lkIHNldFN0cm9rZVN0eWxlKGNvbnN0IFN0cm9rZVN0eWxlJiBz
dHlsZSk7CiAgICAgICAgIENvbG9yIHN0cm9rZUNvbG9yKCkgY29uc3Q7CiAgICAgICAgIHZvaWQg
c2V0U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICAgICAgdm9pZCBzZXRTdHJva2VQYXR0
ZXJuKFBhc3NSZWZQdHI8UGF0dGVybj4pOworICAgICAgICB2b2lkIHNldFN0cm9rZUdyYWRpZW50
KFBhc3NSZWZQdHI8R3JhZGllbnQ+KTsKIAorICAgICAgICBXaW5kUnVsZSBmaWxsUnVsZSgpIGNv
bnN0OworICAgICAgICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlKTsKICAgICAgICAgQ29sb3Ig
ZmlsbENvbG9yKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9y
Jik7Ci0KLSAgICAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oY29uc3QgUGF0dGVybiYpOwot
ICAgICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oY29uc3QgUGF0dGVybiYpOworICAgICAgICB2
b2lkIHNldEZpbGxQYXR0ZXJuKFBhc3NSZWZQdHI8UGF0dGVybj4pOworICAgICAgICB2b2lkIHNl
dEZpbGxHcmFkaWVudChQYXNzUmVmUHRyPEdyYWRpZW50Pik7CiAKICAgICAgICAgdm9pZCBzYXZl
KCk7CiAgICAgICAgIHZvaWQgcmVzdG9yZSgpOwotICAgICAgICAKKwogICAgICAgICAvLyBUaGVz
ZSBkcmF3IG1ldGhvZHMgd2lsbCBkbyBib3RoIHN0cm9raW5nIGFuZCBmaWxsaW5nLgogICAgICAg
ICB2b2lkIGRyYXdSZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdm9pZCBkcmF3TGluZShj
b25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50Jik7CiAgICAgICAgIHZvaWQgZHJhd0VsbGlw
c2UoY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2b2lkIGRyYXdDb252ZXhQb2x5Z29uKHNpemVf
dCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqLCBib29sIHNob3VsZEFudGlhbGlhcyA9IGZh
bHNlKTsKIAorICAgICAgICB2b2lkIGRyYXdQYXRoKCk7CisgICAgICAgIHZvaWQgZmlsbFBhdGgo
KTsKKyAgICAgICAgdm9pZCBzdHJva2VQYXRoKCk7CisKICAgICAgICAgLy8gQXJjIGRyYXdpbmcg
KHVzZWQgYnkgYm9yZGVyLXJhZGl1cyBpbiBDU1MpIGp1c3Qgc3VwcG9ydHMgc3Ryb2tpbmcgYXQg
dGhlIG1vbWVudC4KICAgICAgICAgdm9pZCBzdHJva2VBcmMoY29uc3QgSW50UmVjdCYsIGludCBz
dGFydEFuZ2xlLCBpbnQgYW5nbGVTcGFuKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgSW50UmVjdCYsIGNvbnN0IENvbG9yJik7CisKKyAgICAgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmKTsKICAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBDb2xvciYpOwogICAgICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIEdlbmVyYXRvciYpOwogICAgICAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRS
ZWN0JiwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsIGNv
bnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0LCBjb25z
dCBDb2xvciYpOworCiAgICAgICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwor
CisgICAgICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKICAgICAgICAgdm9p
ZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCk7CiAKICAgICAg
ICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYsIENvbXBvc2l0ZU9wZXJh
dG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7CkBAIC0xNzcsMTMgKzE4OCw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZTo6VGlsZVJ1bGUg
aFJ1bGUgPSBJbWFnZTo6U3RyZXRjaFRpbGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSA9IEltYWdl
OjpTdHJldGNoVGlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVy
YXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIpOwogCi0jaWYgUExBVEZPUk0oQ0cpCiAgICAgICAg
IHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSk7
CiAgICAgICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
KSBjb25zdDsKLSNlbHNlCi0gICAgICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eShJbnRlcnBvbGF0aW9uUXVhbGl0eSkge30KLSAgICAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkg
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIEludGVycG9sYXRpb25E
ZWZhdWx0OyB9Ci0jZW5kaWYKIAogICAgICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7
CiAgICAgICAgIHZvaWQgYWRkUm91bmRlZFJlY3RDbGlwKGNvbnN0IEludFJlY3QmLCBjb25zdCBJ
bnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYg
Ym90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQpOwpAQCAtMjg4LDcgKzI5NCw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICBib29s
IGluVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRGaWxsUnVsZShX
aW5kUnVsZSk7CiAgICAgICAgIFBsYXRmb3JtUGF0aCogY3VycmVudFBhdGgoKTsKICNlbmRpZgog
CkBAIC0zMDEsMTIgKzMwNiwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToK
ICAgICAgICAgdm9pZCBzYXZlUGxhdGZvcm1TdGF0ZSgpOwogICAgICAgICB2b2lkIHJlc3RvcmVQ
bGF0Zm9ybVN0YXRlKCk7CisKICAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9k
ZShpbnQpOworICAgICAgICB2b2lkIHNldFBsYXRmb3JtRm9udChjb25zdCBGb250JiBmb250KTsK
KwogICAgICAgICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAg
ICAgICAgdm9pZCBzZXRQbGF0Zm9ybVN0cm9rZVBhdHRlcm4oUGF0dGVybiopOworICAgICAgICB2
b2lkIHNldFBsYXRmb3JtU3Ryb2tlR3JhZGllbnQoR3JhZGllbnQqKTsKICAgICAgICAgdm9pZCBz
ZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKGNvbnN0IFN0cm9rZVN0eWxlJik7CiAgICAgICAgIHZvaWQg
c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxvYXQpOworCiAgICAgICAgIHZvaWQgc2V0UGxh
dGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybUZv
bnQoY29uc3QgRm9udCYgZm9udCk7CisgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1GaWxsUGF0dGVy
bihQYXR0ZXJuKik7CisgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1GaWxsR3JhZGllbnQoR3JhZGll
bnQqKTsKKwogICAgICAgICB2b2lkIHNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEludFNpemUmLCBp
bnQgYmx1ciwgY29uc3QgQ29sb3ImKTsKICAgICAgICAgdm9pZCBjbGVhclBsYXRmb3JtU2hhZG93
KCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0UHJpdmF0ZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQ
cml2YXRlLmgKaW5kZXggMDJjNzQxNS4uNWMzZjhlYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmgKQEAgLTI3LDI4ICsyNyw1NSBA
QAogI2RlZmluZSBHcmFwaGljc0NvbnRleHRQcml2YXRlX2gKIAogI2luY2x1ZGUgIkZvbnQuaCIK
KyNpbmNsdWRlICJHcmFkaWVudC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCisgICAgLy8gZXNlaWRlbDogVGhpcyBpcyBhIHBsYWNlLWhvbGRlciB1bnRp
bCBzb21lIGRheSB3aGVuIHdlIGRlY2lkZSB0byBhZGQKKyAgICAvLyByZWFsbCBjb2xvci1zcGFj
ZSBzdXBwb3J0IHRvIFdlYkNvcmUuICBBdCB0aGF0IHRpbWUsIENvbG9yU3BhY2VzCisgICAgLy8g
d2lsbCBiZWNvbWUgcmVhbCBvYmplY3RzIGhlbGQgb2ZmIG9mIENvbG9ycywgYW5kIHRoZXJlIHdp
bGwgYmUKKyAgICAvLyBzcGVjaWFsIHNpbmdsZXRvbiBHcmFkaWVudCBhbmQgUGF0dGVybiBjb2xv
cnNwYWNlcyB0byBtYXJrIHdoZW4KKyAgICAvLyBhIGZpbGwgb3Igc3Ryb2tlIGlzIHVzaW5nIGEg
Z3JhZGllbnQgb3IgcGF0dGVybiBpbnN0ZWFkIG9mIGEgc29saWQgY29sb3IKKyAgICBlbnVtIENv
bG9yU3BhY2UgeworICAgICAgICBTb2xpZENvbG9yU3BhY2UsCisgICAgICAgIFBhdHRlcm5Db2xv
clNwYWNlLAorICAgICAgICBHcmFkaWVudENvbG9yU3BhY2UKKyAgICB9OworCiAgICAgc3RydWN0
IEdyYXBoaWNzQ29udGV4dFN0YXRlIHsKICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUoKQot
ICAgICAgICAgICAgOiBzdHJva2VTdHlsZShTb2xpZFN0cm9rZSkKKyAgICAgICAgICAgIDogdGV4
dERyYXdpbmdNb2RlKGNUZXh0RmlsbCkKKyAgICAgICAgICAgICwgc3Ryb2tlU3R5bGUoU29saWRT
dHJva2UpCiAgICAgICAgICAgICAsIHN0cm9rZVRoaWNrbmVzcygwKQorICAgICAgICAgICAgLCBz
dHJva2VDb2xvclNwYWNlKFNvbGlkQ29sb3JTcGFjZSkKICAgICAgICAgICAgICwgc3Ryb2tlQ29s
b3IoQ29sb3I6OmJsYWNrKQorICAgICAgICAgICAgLCBmaWxsUnVsZShSVUxFX05PTlpFUk8pCisg
ICAgICAgICAgICAsIGZpbGxDb2xvclNwYWNlKFNvbGlkQ29sb3JTcGFjZSkKICAgICAgICAgICAg
ICwgZmlsbENvbG9yKENvbG9yOjpibGFjaykKLSAgICAgICAgICAgICwgdGV4dERyYXdpbmdNb2Rl
KGNUZXh0RmlsbCkKICAgICAgICAgICAgICwgcGFpbnRpbmdEaXNhYmxlZChmYWxzZSkKICAgICAg
ICAgICAgICwgc2hhZG93Qmx1cigwKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBG
b250IGZvbnQ7CisgICAgICAgIGludCB0ZXh0RHJhd2luZ01vZGU7CisgICAgICAgIAogICAgICAg
ICBTdHJva2VTdHlsZSBzdHJva2VTdHlsZTsKICAgICAgICAgZmxvYXQgc3Ryb2tlVGhpY2tuZXNz
OworICAgICAgICBDb2xvclNwYWNlIHN0cm9rZUNvbG9yU3BhY2U7CiAgICAgICAgIENvbG9yIHN0
cm9rZUNvbG9yOworICAgICAgICBSZWZQdHI8R3JhZGllbnQ+IHN0cm9rZUdyYWRpZW50OworICAg
ICAgICBSZWZQdHI8UGF0dGVybj4gc3Ryb2tlUGF0dGVybjsKKyAgICAgICAgCisgICAgICAgIFdp
bmRSdWxlIGZpbGxSdWxlOworICAgICAgICBDb2xvclNwYWNlIGZpbGxDb2xvclNwYWNlOwogICAg
ICAgICBDb2xvciBmaWxsQ29sb3I7Ci0gICAgICAgIGludCB0ZXh0RHJhd2luZ01vZGU7CisgICAg
ICAgIFJlZlB0cjxHcmFkaWVudD4gZmlsbEdyYWRpZW50OworICAgICAgICBSZWZQdHI8UGF0dGVy
bj4gZmlsbFBhdHRlcm47CisKICAgICAgICAgYm9vbCBwYWludGluZ0Rpc2FibGVkOworICAgICAg
ICAKICAgICAgICAgSW50U2l6ZSBzaGFkb3dTaXplOwogICAgICAgICB1bnNpZ25lZCBzaGFkb3dC
bHVyOwogICAgICAgICBDb2xvciBzaGFkb3dDb2xvcjsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc1R5cGVzLmgKaW5kZXggYjNjYTk5YS4uYWU1OWM1OSAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmgKQEAgLTY1LDYgKzY1LDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIFN0cmluZyBsaW5lSm9pbk5hbWUoTGluZUpvaW4pOwogICAgIGJvb2wg
cGFyc2VMaW5lSm9pbihjb25zdCBTdHJpbmcmLCBMaW5lSm9pbiYpOwogCi19Cit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9QYXRoLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaAppbmRleCA3MzQz
MDZlLi40ZWZkMzQwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGgu
aAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdGguaApAQCAtOTgsOCArOTgsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICAgICAgdm9pZCBtb3ZlVG8oY29uc3QgRmxvYXRQ
b2ludCYpOwogICAgICAgICB2b2lkIGFkZExpbmVUbyhjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAg
ICAgIHZvaWQgYWRkUXVhZEN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50LCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCk7Ci0gICAgICAgIHZvaWQgYWRkQmV6aWVyQ3VydmVUbyhj
b25zdCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBjb250cm9s
UG9pbnQyLCBjb25zdCBGbG9hdFBvaW50Jik7CisgICAgICAgIHZvaWQgYWRkUXVhZEN1cnZlVG8o
Y29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50LCBjb25zdCBGbG9hdFBvaW50JiBlbmRQb2lu
dCk7CisgICAgICAgIHZvaWQgYWRkQmV6aWVyQ3VydmVUbyhjb25zdCBGbG9hdFBvaW50JiBjb250
cm9sUG9pbnQxLCBjb25zdCBGbG9hdFBvaW50JiBjb250cm9sUG9pbnQyLCBjb25zdCBGbG9hdFBv
aW50JiBlbmRQb2ludCk7CiAgICAgICAgIHZvaWQgYWRkQXJjVG8oY29uc3QgRmxvYXRQb2ludCYs
IGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCByYWRpdXMpOwogICAgICAgICB2b2lkIGNsb3NlU3Vi
cGF0aCgpOwogCkBAIC0xMDksOSArMTA5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAg
ICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYpOwogCi0gICAgICAgIHZvaWQgc2V0
V2luZGluZ1J1bGUoV2luZFJ1bGUgcnVsZSkgeyBtX3J1bGUgPSBydWxlOyB9Ci0gICAgICAgIFdp
bmRSdWxlIHdpbmRpbmdSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9ydWxlOyB9Ci0KICAgICAgICAg
U3RyaW5nIGRlYnVnU3RyaW5nKCkgY29uc3Q7CiAKICAgICAgICAgUGxhdGZvcm1QYXRoKiBwbGF0
Zm9ybVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KQEAgLTEyOCw3ICsxMjUsNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBwcml2YXRlOgogICAgICAgICBQbGF0Zm9ybVBhdGgq
IG1fcGF0aDsKLSAgICAgICAgV2luZFJ1bGUgbV9ydWxlOwogICAgIH07CiAKIH0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXR0ZXJuLmgKaW5kZXggYjE1ZWU4NC4uM2MyMGI2ZSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXR0ZXJuLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9QYXR0ZXJuLmgKQEAgLTI3LDcgKzI3LDggQEAKICNpZm5kZWYgUGF0dGVybl9o
CiAjZGVmaW5lIFBhdHRlcm5faAogCi0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAogI2lmIFBMQVRGT1JNKENHKQpAQCAtNTYsMTcgKzU3LDIx
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07CiAgICAg
Y2xhc3MgSW1hZ2U7CiAKLSAgICBjbGFzcyBQYXR0ZXJuIDogTm9uY29weWFibGUgeworICAgIGNs
YXNzIFBhdHRlcm4gOiBwdWJsaWMgUmVmQ291bnRlZDxQYXR0ZXJuPiB7CiAgICAgcHVibGljOgot
ICAgICAgICBQYXR0ZXJuKEltYWdlKiwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFkpOwotCisg
ICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBhdHRlcm4+IGNyZWF0ZShJbWFnZSogdGlsZUltYWdl
LCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBQYXR0ZXJuKHRpbGVJbWFnZSwgcmVwZWF0WCwgcmVwZWF0WSkpOwor
ICAgICAgICB9CiAgICAgICAgIHZpcnR1YWwgflBhdHRlcm4oKTsKLSAgICAgICAgCisKICAgICAg
ICAgSW1hZ2UqIHRpbGVJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZUltYWdlLmdldCgpOyB9
CiAKICAgICAgICAgUGxhdGZvcm1QYXR0ZXJuUHRyIGNyZWF0ZVBsYXRmb3JtUGF0dGVybihjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0pIGNvbnN0OwogCiAgICAgcHJpdmF0
ZToKKyAgICAgICAgUGF0dGVybihJbWFnZSosIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKTsK
KwogICAgICAgICBSZWZQdHI8SW1hZ2U+IG1fdGlsZUltYWdlOwogICAgICAgICBib29sIG1fcmVw
ZWF0WDsKICAgICAgICAgYm9vbCBtX3JlcGVhdFk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCmluZGV4IDE3ZDY4
ZDUuLmZhNWIzOGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
R3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCkBAIC01MTYsMTQgKzUxNiwxNCBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybihjb25zdCBQYXR0ZXJuJiBwYXR0ZXJu
KQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29s
b3ImIGNvbCkKIHsKLSAgICAvLyBGSVhNRTogdGhpcyBpcyBwcm9iYWJseSBhIG5vLW9wIGJ1dCBJ
J20gbm90IHN1cmUKLSAgICAvLyBub3RJbXBsZW1lbnRlZCgpOyAvLyBjb21tZW50ZWQtb3V0IGJl
Y2F1c2UgaXQncyBjaGF0dHkgYW5kIGNsdXR0ZXJzIG91dHB1dAorICAgIC8vIENhaXJvIGNvbnRl
eHRzIGNhbid0IGhvbGQgc2VwYXJhdGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycworICAgIC8vIHNv
IHdlIHNldCB0aGVtIGp1c3QgYmVmb3JlIHdlIGFjdHVhbGx5IGZpbGwgb3Igc3Ryb2tlCiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUNvbG9yKGNvbnN0IENvbG9y
JiBjb2wpCiB7Ci0gICAgLy8gRklYTUU6IHRoaXMgaXMgcHJvYmFibHkgYSBuby1vcCBidXQgSSdt
IG5vdCBzdXJlCi0gICAgLy9ub3RJbXBsZW1lbnRlZCgpOyAvLyBjb21tZW50ZWQtb3V0IGJlY2F1
c2UgaXQncyBjaGF0dHkgYW5kIGNsdXR0ZXJzIG91dHB1dAorICAgIC8vIENhaXJvIGNvbnRleHRz
IGNhbid0IGhvbGQgc2VwYXJhdGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycworICAgIC8vIHNvIHdl
IHNldCB0aGVtIGp1c3QgYmVmb3JlIHdlIGFjdHVhbGx5IGZpbGwgb3Igc3Ryb2tlCiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhmbG9hdCBzdHJv
a2VUaGlja25lc3MpCkBAIC05MTEsNiArOTExLDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRVc2VBbnRpYWxpYXNpbmcoYm9vbCBlbmFibGUpCiAgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyht
X2RhdGEtPmNyLCBlbmFibGUgPyBDQUlST19BTlRJQUxJQVNfREVGQVVMVCA6IENBSVJPX0FOVElB
TElBU19OT05FKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoSW50ZXJwb2xhdGlvblF1YWxpdHkpCit7Cit9CisKK0ludGVycG9sYXRpb25R
dWFsaXR5IEdyYXBoaWNzQ29udGV4dDo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIEludGVycG9sYXRpb25EZWZhdWx0OworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBQTEFURk9STShDQUlSTykKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKaW5kZXggYzI0Y2VmNi4u
NTk5MTkyNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHRDRy5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw2ICszMCw3IEBACiAKICNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
UGxhdGZvcm1Qcml2YXRlQ0cuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUg
IktVUkwuaCIKQEAgLTEwNyw2ICsxMDksOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9y
ZVBsYXRmb3JtU3RhdGUoKQogLy8gRHJhd3MgYSBmaWxsZWQgcmVjdGFuZ2xlIHdpdGggYSBzdHJv
a2VkIGJvcmRlci4KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBJbnRSZWN0
JiByZWN0KQogeworICAgIC8vIFRPRE8oZXNlaWRlbCk6IHRoaXMgZnVuY3Rpb24gZG9lcyBub3Qg
aGFuZGxlIHBhdHRlcm5zIGFuZCBncmFkaWVudHMKKyAgICAvLyBsaWtlIGRyYXdQYXRoIGRvZXMs
IGl0IHByb2JhYmx5IHNob3VsZC4KICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTI2MSwxNCArMjY1LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdFbGxpcHNlKGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgQ0dDb250ZXh0QWRkQXJjKGNvbnRl
eHQsIHJlY3QueCgpICsgciwgcmVjdC55KCkgKyByLCByLCAwLjBmLCAyLjBmICogcGlGbG9hdCwg
MCk7CiAgICAgQ0dDb250ZXh0Q2xvc2VQYXRoKGNvbnRleHQpOwogCi0gICAgaWYgKGZpbGxDb2xv
cigpLmFscGhhKCkpIHsKLSAgICAgICAgaWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpCi0g
ICAgICAgICAgICAvLyBzdHJva2UgYW5kIGZpbGwKLSAgICAgICAgICAgIENHQ29udGV4dERyYXdQ
YXRoKGNvbnRleHQsIGtDR1BhdGhGaWxsU3Ryb2tlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAg
ICAgQ0dDb250ZXh0RmlsbFBhdGgoY29udGV4dCk7Ci0gICAgfSBlbHNlIGlmIChzdHJva2VTdHls
ZSgpICE9IE5vU3Ryb2tlKQotICAgICAgICBDR0NvbnRleHRTdHJva2VQYXRoKGNvbnRleHQpOwor
ICAgIGRyYXdQYXRoKCk7CiB9CiAKIApAQCAtMzgxLDI5ICszNzgsMTI1IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnBvaW50cywgY29uc3QgRmxvYXRQ
b2ludCogcG9pbnRzCiAgICAgICAgIENHQ29udGV4dEFkZExpbmVUb1BvaW50KGNvbnRleHQsIHBv
aW50c1tpXS54KCksIHBvaW50c1tpXS55KCkpOwogICAgIENHQ29udGV4dENsb3NlUGF0aChjb250
ZXh0KTsKIAotICAgIGlmIChmaWxsQ29sb3IoKS5hbHBoYSgpKSB7Ci0gICAgICAgIGlmIChzdHJv
a2VTdHlsZSgpICE9IE5vU3Ryb2tlKQotICAgICAgICAgICAgQ0dDb250ZXh0RHJhd1BhdGgoY29u
dGV4dCwga0NHUGF0aEVPRmlsbFN0cm9rZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIENH
Q29udGV4dEVPRmlsbFBhdGgoY29udGV4dCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIENHQ29udGV4
dFN0cm9rZVBhdGgoY29udGV4dCk7CisgICAgZHJhd1BhdGgoKTsKIAogICAgIENHQ29udGV4dFJl
c3RvcmVHU3RhdGUoY29udGV4dCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCitzdGF0aWMgaW5saW5l
IGJvb2wgY2FsY3VsYXRlRHJhd2luZ01vZGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0
YXRlLCBDR1BhdGhEcmF3aW5nTW9kZSYgbW9kZSkKK3sKKyAgICBib29sIHNob3VsZEZpbGwgPSBz
dGF0ZS5maWxsQ29sb3JTcGFjZSA9PSBQYXR0ZXJuQ29sb3JTcGFjZSB8fCBzdGF0ZS5maWxsQ29s
b3IuYWxwaGEoKTsKKyAgICBib29sIHNob3VsZFN0cm9rZSA9IHN0YXRlLnN0cm9rZUNvbG9yU3Bh
Y2UgPT0gUGF0dGVybkNvbG9yU3BhY2UgfHwgKHN0YXRlLnN0cm9rZVN0eWxlICE9IE5vU3Ryb2tl
ICYmIHN0YXRlLnN0cm9rZUNvbG9yLmFscGhhKCkpOworICAgIGJvb2wgdXNlRU9GaWxsID0gc3Rh
dGUuZmlsbFJ1bGUgPT0gUlVMRV9FVkVOT0REOworCisgICAgaWYgKHNob3VsZEZpbGwpIHsKKyAg
ICAgICAgaWYgKHNob3VsZFN0cm9rZSkgeworICAgICAgICAgICAgaWYgKHVzZUVPRmlsbCkKKyAg
ICAgICAgICAgICAgICBtb2RlID0ga0NHUGF0aEVPRmlsbFN0cm9rZTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtb2RlID0ga0NHUGF0aEZpbGxTdHJva2U7CisgICAgICAgIH0g
ZWxzZSB7IC8vIGZpbGwsIG5vIHN0cm9rZQorICAgICAgICAgICAgaWYgKHVzZUVPRmlsbCkKKyAg
ICAgICAgICAgICAgICBtb2RlID0ga0NHUGF0aEVPRmlsbDsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBtb2RlID0ga0NHUGF0aEZpbGw7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
aWYgKHNob3VsZFN0cm9rZSkgLy8gbm8gZmlsbCwganVzdCBzdHJva2UKKyAgICAgICAgbW9kZSA9
IGtDR1BhdGhTdHJva2U7CisKKyAgICByZXR1cm4gc2hvdWxkRmlsbCB8fCBzaG91bGRTdHJva2U7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCgpCiB7CiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmIChjb2xvci5hbHBoYSgpKSB7
Ci0gICAgICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7Ci0gICAg
ICAgIENvbG9yIG9sZEZpbGxDb2xvciA9IGZpbGxDb2xvcigpOwotICAgICAgICBpZiAob2xkRmls
bENvbG9yICE9IGNvbG9yKQotICAgICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgY29s
b3IpOwotICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCByZWN0KTsKLSAgICAgICAg
aWYgKG9sZEZpbGxDb2xvciAhPSBjb2xvcikKLSAgICAgICAgICAgIHNldENHRmlsbENvbG9yKGNv
bnRleHQsIG9sZEZpbGxDb2xvcik7CisKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRm
b3JtQ29udGV4dCgpOworICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSA9IG1f
Y29tbW9uLT5zdGF0ZTsKKworICAgIGlmIChzdGF0ZS5maWxsQ29sb3JTcGFjZSA9PSBHcmFkaWVu
dENvbG9yU3BhY2UgfHwgc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSA9PSBHcmFkaWVudENvbG9yU3Bh
Y2UpIHsKKyAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbnkgb3B0aW1pemVkIHdheSB0byBmaWxs
ICYgc3Ryb2tlIGEgcGF0aCB1c2luZyBncmFkaWVudHMKKyAgICAgICAgZmlsbFBhdGgoKTsKKyAg
ICAgICAgc3Ryb2tlUGF0aCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ0dQYXRo
RHJhd2luZ01vZGUgZHJhd2luZ01vZGU7CisgICAgaWYgKGNhbGN1bGF0ZURyYXdpbmdNb2RlKHN0
YXRlLCBkcmF3aW5nTW9kZSkpCisgICAgICAgIENHQ29udGV4dERyYXdQYXRoKGNvbnRleHQsIGRy
YXdpbmdNb2RlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxQYXRoV2l0aEZpbGxSdWxl
KENHQ29udGV4dFJlZiBjb250ZXh0LCBXaW5kUnVsZSBmaWxsUnVsZSkKK3sKKyAgICBpZiAoZmls
bFJ1bGUgPT0gUlVMRV9FVkVOT0REKQorICAgICAgICBDR0NvbnRleHRFT0ZpbGxQYXRoKGNvbnRl
eHQpOworICAgIGVsc2UKKyAgICAgICAgQ0dDb250ZXh0RmlsbFBhdGgoY29udGV4dCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCit7CisgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKKyAgICBzd2l0Y2ggKG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3JT
cGFjZSkgeworICAgIGNhc2UgU29saWRDb2xvclNwYWNlOgorICAgICAgICBpZiAoIWZpbGxDb2xv
cigpLmFscGhhKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIC8vIGZhbGwgdGhyb3Vn
aAorICAgIGNhc2UgUGF0dGVybkNvbG9yU3BhY2U6CisgICAgICAgIGZpbGxQYXRoV2l0aEZpbGxS
dWxlKGNvbnRleHQsIGZpbGxSdWxlKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYWRp
ZW50Q29sb3JTcGFjZToKKyAgICAgICAgaWYgKGZpbGxSdWxlKCkgPT0gUlVMRV9FVkVOT0REKQor
ICAgICAgICAgICAgQ0dDb250ZXh0RU9DbGlwKGNvbnRleHQpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBDR0NvbnRleHRDbGlwKGNvbnRleHQpOworICAgICAgICBDR0NvbnRleHREcmF3U2hh
ZGluZyhjb250ZXh0LCBtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LT5wbGF0Zm9ybUdyYWRp
ZW50KCkpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzdHJva2VQYXRoKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwor
ICAgIHN3aXRjaCAobV9jb21tb24tPnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UpIHsKKyAgICBjYXNl
IFNvbGlkQ29sb3JTcGFjZToKKyAgICAgICAgaWYgKCFmaWxsQ29sb3IoKS5hbHBoYSgpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBmYWxsIHRocm91Z2gKKyAgICBjYXNlIFBhdHRl
cm5Db2xvclNwYWNlOgorICAgICAgICBDR0NvbnRleHRTdHJva2VQYXRoKGNvbnRleHQpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZToKKyAgICAgICAgQ0dDb250
ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoY29udGV4dCk7CisgICAgICAgIENHQ29udGV4
dENsaXAoY29udGV4dCk7CisgICAgICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRleHQsIG1f
Y29tbW9uLT5zdGF0ZS5zdHJva2VHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBzd2l0Y2ggKG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3JTcGFjZSkg
eworICAgIGNhc2UgU29saWRDb2xvclNwYWNlOgorICAgICAgICBpZiAoZmlsbENvbG9yKCkuYWxw
aGEoKSkKKyAgICAgICAgICAgIENHQ29udGV4dEZpbGxSZWN0KHBsYXRmb3JtQ29udGV4dCgpLCBy
ZWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXR0ZXJuQ29sb3JTcGFjZToKKyAgICAg
ICAgQ0dDb250ZXh0RmlsbFJlY3QocGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZToKKyAgICAgICAgY2xpcChyZWN0KTsK
KyAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcocGxhdGZvcm1Db250ZXh0KCksIG1fY29tbW9u
LT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAgIGJyZWFr
OwogICAgIH0KIH0KIApAQCAtNDMzLDEzICs1MjYsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRTaXplJiB0b3BM
ZWYKICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgY29sb3IpOwogCiAgICAgYWRkUGF0
aChQYXRoOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKHJlY3QsIHRvcExlZnQsIHRvcFJpZ2h0LCBi
b3R0b21MZWZ0LCBib3R0b21SaWdodCkpOwotICAgIENHQ29udGV4dEZpbGxQYXRoKGNvbnRleHQp
OworICAgIGZpbGxQYXRoKCk7CiAKICAgICBpZiAob2xkRmlsbENvbG9yICE9IGNvbG9yKQogICAg
ICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBvbGRGaWxsQ29sb3IpOwogfQogCi0KIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQpAQCAtOTEwLDkgKzEwMDIsMTYgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKGludCBtb2RlKQogICAgIH0KIH0KIAot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVybihjb25zdCBQYXR0ZXJuJiBw
YXR0ZXJuKQorLy8gVE9ETyhlc2VpZGVsKTogSXQgaXMgdW5jbGVhciBpZiBzZXR0aW5nIHBhdHRl
cm5zIG9uIHRoZSBDR0NvbnRleHQgYXQKKy8vIHNldFN0cm9rZVBhdHRlcm4vc2V0RmlsbFBhdHRl
cm4gdGltZSBpcyBzYWZlLiAgT3VyIFBhdHRlcm4gb2JqZWN0IGN1cnJlbnRseQorLy8gZGVwZW5k
cyBvbiB0aGUgQ1RNIGZvciBDR1NoYWRpbmcgY3JlYXRpb24sIHRodXMgc2V0dGluZyBhIHBhdHRl
cm4gYW5kIHRoZW4KKy8vIHRyYW5zZm9ybWluZyB0aGUgR3JhcGhpY3NDb250ZXh0IG1heSBjYXVz
ZSB0aGUgcGF0dGVybiB0byBkcmF3IGluY29ycmVjdGx5LgorLy8gSSBiZWxpZXZlIHdlIGNhbiBm
aXggb3VyIFBhdHRlcm4gb2JqZWN0IHRvIG5vdCBkZXBlbmQgb24gdGhlIENUTS4KK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVBhdHRlcm4oUGF0dGVybiogcGF0dGVybikK
IHsKLSAgICBDR1BhdHRlcm5SZWYgcGxhdGZvcm1QYXR0ZXJuID0gcGF0dGVybi5jcmVhdGVQbGF0
Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpOworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKyAgICBDR1BhdHRlcm5SZWYgcGxhdGZvcm1QYXR0ZXJuID0gcGF0dGVybi0+
Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKTsKICAgICBpZiAoIXBsYXRmb3JtUGF0dGVy
bikKICAgICAgICAgcmV0dXJuOwogCkBAIC05MjUsOSArMTAyNCwxMSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mIHBhdHRlcm4pCiAgICAg
Q0dQYXR0ZXJuUmVsZWFzZShwbGF0Zm9ybVBhdHRlcm4pOwogfQogCi12b2lkIEdyYXBoaWNzQ29u
dGV4dDo6YXBwbHlGaWxsUGF0dGVybihjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKQordm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbFBhdHRlcm4oUGF0dGVybiogcGF0dGVybikKIHsK
LSAgICBDR1BhdHRlcm5SZWYgcGxhdGZvcm1QYXR0ZXJuID0gcGF0dGVybi5jcmVhdGVQbGF0Zm9y
bVBhdHRlcm4oZ2V0Q1RNKCkpOworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAg
IHJldHVybjsKKyAgICBDR1BhdHRlcm5SZWYgcGxhdGZvcm1QYXR0ZXJuID0gcGF0dGVybi0+Y3Jl
YXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKTsKICAgICBpZiAoIXBsYXRmb3JtUGF0dGVybikK
ICAgICAgICAgcmV0dXJuOwogCkBAIC05NDAsNiArMTA0MSwxOCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6YXBwbHlGaWxsUGF0dGVybihjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKQogICAgIENHUGF0
dGVyblJlbGVhc2UocGxhdGZvcm1QYXR0ZXJuKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtU3Ryb2tlR3JhZGllbnQoR3JhZGllbnQqKQoreworICAgIC8vIENvcmVHcmFw
aGljcyBkb2VzIG5vdCBzdXBwb3J0IHNldHRpbmcgYSAic3Ryb2tlIGdyYWRpZW50Iiwgb25seQor
ICAgIC8vIGZpbGxpbmcgYSBjbGlwIHJlZ2lvbiB3aXRoIGEgZ3JhZGllbnQsIHdoaWNoIHdlIGRv
IGF0IGRyYXcgdGltZQorfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxs
R3JhZGllbnQoR3JhZGllbnQqKQoreworICAgIC8vIENvcmVHcmFwaGljcyBkb2VzIG5vdCBzdXBw
b3J0IHNldHRpbmcgYSAiZmlsbCBncmFkaWVudCIsIG9ubHkKKyAgICAvLyBmaWxsaW5nIGEgY2xp
cCByZWdpb24gd2l0aCBhIGdyYWRpZW50LCB3aGljaCB3ZSBkbyBhdCBkcmF3IHRpbWUKK30KKwog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3Im
IGNvbG9yKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dFF0LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCmluZGV4IDczNWMwNTku
LjYwMmJhZjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0UXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0UXQuY3BwCkBAIC04NDksNiArODQ5LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGlwT3V0RWxsaXBzZUluUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIHAtPnNldENs
aXBQYXRoKG5ld0NsaXAsIFF0OjpJbnRlcnNlY3RDbGlwKTsKIH0KIAordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlQnVm
ZmVyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGhpY2tuZXNzKQogewpA
QCAtOTI2LDIwICs5MzEsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxs
Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogICAgIG1fZGF0YS0+cCgpLT5zZXRCcnVzaChRQnJ1
c2goY29sb3IpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3Ryb2tlUGF0dGVy
bihjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybihjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKQotewot
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0VXNlQW50aWFsaWFzaW5n
KGJvb2wgZW5hYmxlKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBAIC0xMDMzLDYg
KzEwMjQsMTUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlbGVhc2VXaW5kb3dzQ29udGV4dChI
REMgaGRjLCBjb25zdCBJbnRSZWN0JiBkc3RSZWN0LCBib28KIH0KICNlbmRpZgogCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9u
UXVhbGl0eSkKK3sKK30KKworSW50ZXJwb2xhdGlvblF1YWxpdHkgR3JhcGhpY3NDb250ZXh0Ojpp
bWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50ZXJwb2xh
dGlvbkRlZmF1bHQ7Cit9CisKIH0KIAogLy8gdmltOiB0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAKaW5kZXggZThi
ZjI2Yy4uNzU2MWYzZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9H
cmFwaGljc0NvbnRleHRXeC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9H
cmFwaGljc0NvbnRleHRXeC5jcHAKQEAgLTM1NCw2ICszNTQsMTEgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXAoY29uc3QgUGF0aCYpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNv
bnN0IEltYWdlQnVmZmVyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiBBZmZpbmVU
cmFuc2Zvcm0gR3JhcGhpY3NDb250ZXh0OjpnZXRDVE0oKSBjb25zdAogeyAKICAgICBub3RJbXBs
ZW1lbnRlZCgpOwpAQCAtNDc2LDE4ICs0ODEsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFVzZUFudGlhbGlhc2luZyhib29sIGVuYWJsZSkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQog
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybihjb25zdCBQYXR0ZXJuJikK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVy
cG9sYXRpb25RdWFsaXR5KQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6YXBwbHlTdHJva2VQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mKQorSW50ZXJwb2xhdGlvblF1YWxp
dHkgR3JhcGhpY3NDb250ZXh0OjppbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QKIHsK
LSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gSW50ZXJwb2xhdGlvbkRlZmF1bHQ7CiB9CiAKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23024</attachid>
            <date>2008-08-27 05:41:42 -0700</date>
            <delta_ts>2008-08-27 14:59:30 -0700</delta_ts>
            <desc>Qt and Cairo support from krit</desc>
            <filename>Qt-and-Cairo-support-from-krit.patch</filename>
            <type>text/plain</type>
            <size>8735</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">Y2M1N2FmNzE3YWU1NjdkMzMyNmM4YTdlMDEwZDZhOTQ1ZTFhMzkzOApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApp
bmRleCBmYTViMzhiLi5hMDMzNWEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcApAQCAtNTEsNiArNTEsNyBA
QAogI2VsaWYgUExBVEZPUk0oV0lOKQogI2luY2x1ZGUgPGNhaXJvLXdpbjMyLmg+CiAjZW5kaWYK
KyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQcml2YXRlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0UGxhdGZvcm1Qcml2YXRlQ2Fpcm8uaCIKIAogI2lmbmRlZiBNX1BJCkBAIC0zNTUsMTMg
KzM1Niw3MCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90
IG5wb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBvaW50cwogICAgIGNhaXJvX3Jlc3RvcmUoY3Ip
OwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkK
IHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAoY29sb3IuYWxwaGEoKSkKLSAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKG1fZGF0YS0+Y3Is
IHJlY3QsIGNvbG9yKTsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CisKKyAgICBzd2l0
Y2ggKG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3JTcGFjZSkgeworICAgIGNhc2UgU29saWRDb2xv
clNwYWNlOgorICAgICAgICBpZiAoZmlsbENvbG9yKCkuYWxwaGEoKSkgeworICAgICAgICAgICAg
c2V0Q29sb3IoY3IsIGZpbGxDb2xvcigpKTsKKyAgICAgICAgICAgIGNhaXJvX2ZpbGwoY3IpOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGF0dGVybkNvbG9yU3BhY2U6Cisg
ICAgICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi5n
ZXQoKS0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKSk7CisgICAgICAgIGNhaXJvX2Zp
bGwoY3IpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZToKKyAg
ICAgICAgY2Fpcm9fc2V0X3NvdXJjZShjciwgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC5n
ZXQoKS0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAgY2Fpcm9fZmlsbChjcik7CisgICAg
ICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgo
KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKKworICAgIHN3aXRjaCAobV9jb21tb24tPnN0YXRl
LnN0cm9rZUNvbG9yU3BhY2UpIHsKKyAgICBjYXNlIFNvbGlkQ29sb3JTcGFjZToKKyAgICAgICAg
aWYgKHN0cm9rZUNvbG9yKCkuYWxwaGEoKSkgeworICAgICAgICAgICAgc2V0Q29sb3IoY3IsIHN0
cm9rZUNvbG9yKCkpOworICAgICAgICAgICAgY2Fpcm9fc3Ryb2tlKGNyKTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhdHRlcm5Db2xvclNwYWNlOgorICAgICAgICBjYWly
b19zZXRfc291cmNlKGNyLCBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0dGVybi5nZXQoKS0+Y3Jl
YXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKSk7CisgICAgICAgIGNhaXJvX3N0cm9rZShjcik7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgorICAgICAgICBj
YWlyb19zZXRfc291cmNlKGNyLCBtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGllbnQuZ2V0KCkt
PnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAgIGNhaXJvX3N0cm9rZShjcik7CisgICAgICAg
IGJyZWFrOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKCkKK3sK
KyAgICBmaWxsUGF0aCgpOworICAgIHN0cm9rZVBhdGgoKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sKKyAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWlyb190KiBjciA9IG1fZGF0
YS0+Y3I7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgZmlsbFBhdGgoKTsKIH0KIAogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3Im
IGNvbG9yKQpAQCAtNDk3LDIzICs1NTUsNiBAQCBJbnRQb2ludCBHcmFwaGljc0NvbnRleHQ6Om9y
aWdpbigpCiAgICAgcmV0dXJuIEludFBvaW50KHN0YXRpY19jYXN0PGludD4obWF0cml4LngwKSwg
c3RhdGljX2Nhc3Q8aW50PihtYXRyaXgueTApKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmFwcGx5U3Ryb2tlUGF0dGVybihjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKQotewotICAgIGNhaXJv
X3BhdHRlcm5fdCogcGxhdGZvcm1QYXR0ZXJuID0gcGF0dGVybi5jcmVhdGVQbGF0Zm9ybVBhdHRl
cm4oZ2V0Q1RNKCkpOwotICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBjYWlyb19zZXRfc291cmNlKHBsYXRmb3JtQ29udGV4dCgpLCBwbGF0Zm9ybVBhdHRl
cm4pOwotICAgIGNhaXJvX3BhdHRlcm5fZGVzdHJveShwbGF0Zm9ybVBhdHRlcm4pOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlGaWxsUGF0dGVybihjb25zdCBQYXR0ZXJuJiBwYXR0
ZXJuKQotewotICAgIC8vIFRoZSBDYWlybyBjb2RlcGF0aCBkb2Vzbid0IHNlZW0gdG8gc3VwcG9y
dCBzZXBhcmF0ZSBzdHJva2UvZmlsbD8KLSAgICAvLyBUaGUgY29kZSBJIHJlZmFjdG9yZWQgdG8g
Y3JlYXRlIHRoZXNlIG1ldGhvZHMgd2FzIGlkZW50aWNhbCBmb3IgQ2Fpcm8KLSAgICBhcHBseVN0
cm9rZVBhdHRlcm4ocGF0dGVybik7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0
Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sKQogewogICAgIC8vIENhaXJvIGNvbnRleHRz
IGNhbid0IGhvbGQgc2VwYXJhdGUgZmlsbCBhbmQgc3Ryb2tlIGNvbG9ycwpAQCAtNTU2LDkgKzU5
Nyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKGNvbnN0
IFN0cm9rZVN0eWxlJiBzdHJva2VTdHlsZSkKICAgICBjYXNlIERhc2hlZFN0cm9rZToKICAgICAg
ICAgY2Fpcm9fc2V0X2Rhc2gobV9kYXRhLT5jciwgZGFzaFBhdHRlcm4sIDIsIDApOwogICAgICAg
ICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAg
ICBicmVhazsKICAgICB9CiB9CiAKQEAgLTY2NSw5ICs3MDMsOCBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQogICAg
IGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKICAgICBjYWlyb19zYXZlKGNyKTsKICAgICBjYWly
b19yZWN0YW5nbGUoY3IsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0Lmhl
aWdodCgpKTsKLSAgICBzZXRDb2xvcihjciwgc3Ryb2tlQ29sb3IoKSk7CiAgICAgY2Fpcm9fc2V0
X2xpbmVfd2lkdGgoY3IsIHdpZHRoKTsKLSAgICBjYWlyb19zdHJva2UoY3IpOworICAgIHN0cm9r
ZVBhdGgoKTsKICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KIApAQCAtOTIwLDYgKzk1NywxNSBA
QCBJbnRlcnBvbGF0aW9uUXVhbGl0eSBHcmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkoKSBjb25zdAogICAgIHJldHVybiBJbnRlcnBvbGF0aW9uRGVmYXVsdDsKIH0KIAor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJw
b2xhdGlvblF1YWxpdHkpCit7Cit9CisKK0ludGVycG9sYXRpb25RdWFsaXR5IEdyYXBoaWNzQ29u
dGV4dDo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIElu
dGVycG9sYXRpb25EZWZhdWx0OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZiAvLyBQTEFURk9STShDQUlSTykKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9HcmFwaGljc0NvbnRleHRRdC5jcHAKaW5kZXggNjAyYmFmNS4uN2I3ZmNiYyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHRRdC5jcHAKQEAg
LTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJQYXR0ZXJuLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQ
cml2YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJGb250LmgiCiAj
aW5jbHVkZSAiUGVuLmgiCkBAIC00OTUsMTIgKzQ5Niw3MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG5wb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqIHBv
aW50cwogICAgIHAtPnJlc3RvcmUoKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxS
ZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjKQordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxQYXRoKCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBtX2RhdGEtPnAoKS0+ZmlsbFJlY3QocmVjdCwgUUNvbG9yKGMpKTsK
KyAgICBRUGFpbnRlciAqcCA9IG1fZGF0YS0+cCgpOworICAgIFFQYWludGVyUGF0aCBwYXRoID0g
bV9kYXRhLT5jdXJyZW50UGF0aDsKKworICAgIHN3aXRjaCAobV9jb21tb24tPnN0YXRlLmZpbGxD
b2xvclNwYWNlKSB7CisgICAgY2FzZSBTb2xpZENvbG9yU3BhY2U6CisgICAgICAgIGlmIChmaWxs
Q29sb3IoKS5hbHBoYSgpKQorICAgICAgICAgICAgcC0+ZmlsbFBhdGgocGF0aCwgcC0+YnJ1c2go
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGF0dGVybkNvbG9yU3BhY2U6CisgICAgICAg
IHAtPmZpbGxQYXRoKHBhdGgsIFFCcnVzaCgqKG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi5n
ZXQoKS0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKSkpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHcmFkaWVudENvbG9yU3BhY2U6CisgICAgICAgIHAtPmZpbGxQYXRoKHBhdGgs
IFFCcnVzaCgqKG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCktPnBsYXRmb3JtR3Jh
ZGllbnQoKSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c3Ryb2tlUGF0aCgpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUVBhaW50ZXIgKnAgPSBtX2RhdGEtPnAoKTsKKyAgICBRUGFpbnRl
clBhdGggcGF0aCA9IG1fZGF0YS0+Y3VycmVudFBhdGg7CisKKyAgICBzd2l0Y2ggKG1fY29tbW9u
LT5zdGF0ZS5zdHJva2VDb2xvclNwYWNlKSB7CisgICAgY2FzZSBTb2xpZENvbG9yU3BhY2U6Cisg
ICAgICAgIGlmIChzdHJva2VDb2xvcigpLmFscGhhKCkpCisgICAgICAgICAgICBwLT5zdHJva2VQ
YXRoKHBhdGgsIHAtPnBlbigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXR0ZXJuQ29s
b3JTcGFjZToKKyAgICAgICAgcC0+c2V0QnJ1c2goKihtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlUGF0
dGVybi5nZXQoKS0+Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKSkpOworICAgICAgICBw
LT5zdHJva2VQYXRoKHBhdGgsIHAtPnBlbigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
cmFkaWVudENvbG9yU3BhY2U6CisgICAgICAgIHAtPnNldEJydXNoKCoobV9jb21tb24tPnN0YXRl
LnN0cm9rZUdyYWRpZW50LmdldCgpLT5wbGF0Zm9ybUdyYWRpZW50KCkpKTsKKyAgICAgICAgcC0+
c3Ryb2tlUGF0aChwYXRoLCBwLT5wZW4oKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKK3sK
KyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBRUGFp
bnRlciAqcCA9IG1fZGF0YS0+cCgpOworCisgICAgc3dpdGNoIChtX2NvbW1vbi0+c3RhdGUuZmls
bENvbG9yU3BhY2UpIHsKKyAgICBjYXNlIFNvbGlkQ29sb3JTcGFjZToKKyAgICAgICAgaWYgKGZp
bGxDb2xvcigpLmFscGhhKCkpCisgICAgICAgICAgICBwLT5maWxsUmVjdChyZWN0LCBwLT5icnVz
aCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXR0ZXJuQ29sb3JTcGFjZToKKyAgICAg
ICAgcC0+ZmlsbFJlY3QocmVjdCwgUUJydXNoKCoobV9jb21tb24tPnN0YXRlLmZpbGxQYXR0ZXJu
LmdldCgpLT5jcmVhdGVQbGF0Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpKSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZToKKyAgICAgICAgcC0+ZmlsbFJlY3QocmVj
dCwgUUJydXNoKCoobV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVudC5nZXQoKS0+cGxhdGZvcm1H
cmFkaWVudCgpKSkpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjKQpA
QCAtNzA1LDEyICs3NjUsMTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QoY29u
c3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCB3aWR0aCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBRUGFpbnRlciAqcCA9IG1fZGF0YS0+cCgpOwog
ICAgIFFQYWludGVyUGF0aCBwYXRoOwogICAgIHBhdGguYWRkUmVjdChyZWN0KTsKLSAgICBRUGVu
IG5QZW4gPSBwLT5wZW4oKTsKKyAgICBRUGVuIG5QZW4gPSBtX2RhdGEtPnAoKS0+cGVuKCk7CiAg
ICAgblBlbi5zZXRXaWR0aEYod2lkdGgpOwotICAgIHAtPnN0cm9rZVBhdGgocGF0aCwgblBlbik7
CisKKyAgICBzdHJva2VQYXRoKCk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5l
Q2FwKExpbmVDYXAgbGMpCkBAIC04NTQsNiArOTE0LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZUJ1ZmZlciop
CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBU
b0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlQnVmZmVyKikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJS
b3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYgcmVjdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGhpY2tuZXNzKQogewpAQCAtOTE0LDYgKzk3
OSwyMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VTdHlsZShjb25z
dCBTdHJva2VTdHlsZSYgc3Ryb2tlU3R5bGUpCiAgICAgcC0+c2V0UGVuKG5ld1Blbik7CiB9CiAK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxQYXR0ZXJuKFBhdHRlcm4qIHBh
dHRlcm4pCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVBh
dHRlcm4oUGF0dGVybiogcGF0dGVybikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFBsYXRmb3JtRmlsbEdyYWRpZW50KEdyYWRpZW50KiBncmFkaWVudCkKK3sKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlR3JhZGllbnQoR3JhZGllbnQqIGdyYWRp
ZW50KQoreworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUaGlj
a25lc3MoZmxvYXQgdGhpY2tuZXNzKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCkBA
IC0xMDMzLDYgKzExMTQsMTUgQEAgSW50ZXJwb2xhdGlvblF1YWxpdHkgR3JhcGhpY3NDb250ZXh0
OjppbWFnZUludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3QKICAgICByZXR1cm4gSW50ZXJwb2xh
dGlvbkRlZmF1bHQ7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUludGVycG9s
YXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5KQoreworfQorCitJbnRlcnBvbGF0aW9u
UXVhbGl0eSBHcmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25z
dAoreworICAgIHJldHVybiBJbnRlcnBvbGF0aW9uRGVmYXVsdDsKK30KKwogfQogCiAvLyB2aW06
IHRzPTQgc3c9NCBldAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23041</attachid>
            <date>2008-08-27 14:59:54 -0700</date>
            <delta_ts>2008-08-28 03:55:07 -0700</delta_ts>
            <desc>Add fill/stroke Pattern and Gradient support to GraphicsContext (now with ChangeLog)</desc>
            <filename>Add-fill-stroke-Pattern-and-Gradient-support-to-GraphicsContext-now-with-ChangeLog-.patch</filename>
            <type>text/plain</type>
            <size>49620</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">YzQ1M2VlZjBhNjNjNmFhYThmYmMzNzU3NjM2NTUwNjgxYjEyZDliYgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAxZDdhNDgwLi43ZjM5ZTNm
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDg3IEBACisyMDA4LTA4LTI3ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
c3Ryb2tlL2ZpbGwgR3JhZGllbnQgYW5kIFBhdHRlcm4gc3VwcG9ydCB0byBHcmFwaGljc0NvbnRl
eHQgYW5kIHVwZGF0ZSA8Y2FudmFzPiB0byB1c2UgaXQuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM3MworCisgICAgICAgIENoYW5nZWQgcGF0dGVy
bigpIHRvIGNhbnZhc1BhdHRlcm4oKSBvbiBDYW52YXNTdHlsZSB0byBtYXRjaCBjYW52YXNHcmFk
aWVudCgpCisgICAgICAgIAorICAgICAgICBNYWRlIEdlbmVyYXRvciAoYWthIEdyYWRpZW50KSBS
ZWZDb3VudGVkIHNvIHRoYXQgR3JhcGhpY3NDb250ZXh0IGRpZG4ndAorICAgICAgICBoYXZlIHRv
IHN0b3JlIGxhcmdlIEdyYWRpZW50IG9iamVjdHMgaW4gdGhlIEdyYXBoaWNzQ29udGV4dFN0YXRl
CisgICAgICAgIAorICAgICAgICBNYWRlIFBhdHRlcm4gUmVmQ291bnRlZCBmb3IgdGhlIHNhbWUg
cmVhc29uLgorICAgICAgICAKKyAgICAgICAgTWFueSB1cGRhdGVzIHRvIEdyYXBoaWNzQ29udGV4
dCB0byBzdXBwb3J0IGVhc2llciBkcmF3aW5nIHdpdGgKKyAgICAgICAgUGF0dGVybnMgYW5kIEdy
YWRpZW50cy4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajog
QWRkIHByZS1leGlzdGluZyBHcmFwaGljc0NvbnRleHRQcml2YXRlLmgKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp0b0pTKToKKyAgICAgICAgKiBjc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NHcmFkaWVudFZhbHVlOjpjcmVhdGVHcmFkaWVudCk6CisgICAgICAg
ICogY3NzL0NTU0dyYWRpZW50VmFsdWUuaDoKKyAgICAgICAgKiBodG1sL0NhbnZhc0dyYWRpZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0dyYWRpZW50OjpDYW52YXNHcmFkaWVudCk6
CisgICAgICAgICogaHRtbC9DYW52YXNHcmFkaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzR3JhZGllbnQ6OmdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0dyYWRpZW50
OjphZGRDb2xvclN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzR3JhZGllbnQ6OmdldENv
bG9yKToKKyAgICAgICAgKiBodG1sL0NhbnZhc1BhdHRlcm4uY3BwOgorICAgICAgICAqIGh0bWwv
Q2FudmFzUGF0dGVybi5oOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUGF0dGVybjo6cGF0dGVy
bik6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNQYXR0ZXJuOjpvcmlnaW5DbGVhbik6CisgICAg
ICAgICogaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpTdGF0ZTo6U3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZpbGxTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGwpOgorICAgICAgICAo
V2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJva2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVJlY3QpOgorICAgICAgICAqIGh0
bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmg6CisgICAgICAgICogaHRtbC9DYW52YXNTdHls
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6YXBwbHlTdHJva2VDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNTdHlsZTo6YXBwbHlGaWxsQ29sb3IpOgorICAgICAg
ICAqIGh0bWwvQ2FudmFzU3R5bGUuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HZW5l
cmF0ZWRJbWFnZS5oOgorICAgICAgICAoV2ViQ29yZTo6R2VuZXJhdGVkSW1hZ2U6OkdlbmVyYXRl
ZEltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HZW5lcmF0b3IuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
ZGllbnQ6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJ1bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUnVsZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZVBhdHRlcm4pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsUGF0dGVybik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFN0cm9rZUdyYWRpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmg6CisgICAgICAgIChXZWJDb3JlOjopOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0U3RhdGU6OkdyYXBoaWNzQ29udGV4dFN0YXRlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc1R5cGVzLmg6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1Bh
dHRlcm4uaDoKKyAgICAgICAgKFdlYkNvcmU6OlBhdHRlcm46OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXR0ZXJuOjp0aWxlSW1hZ2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3
RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQ
b2x5Z29uKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0ZURyYXdpbmdNb2RlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6ZmlsbFBhdGhXaXRoRmlsbFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlUGF0dGVybik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbFBhdHRl
cm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9r
ZUdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1GaWxsR3JhZGllbnQpOgorCisKIDIwMDgtMDgtMjcgIEJyYWR5IEVpZHNvbiAgPGJlaWRzb25A
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFuZGVycwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAzYzEwMzdjLi5mMjBjYzAzIDEwMDY0NAot
LS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjI5Myw2ICsyMjkzLDcg
QEAKIAkJQTg4QUQ1MkYwOTUyNEI5MjAwMUREMTk2IC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3JrIGlu
IEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTg1RDdBMkYw
ODc5RUJBOTAwNkE5MTcyIC8qIFF1YXJ0ekNvcmUuZnJhbWV3b3JrICovOyB9OwogCQlBODhERDQ4
NzBCNDYyOUEzMDBDMDI5OTAgLyogUGF0aFRyYXZlcnNhbFN0YXRlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODhERDQ4NjBCNDYyOUEzMDBDMDI5OTAg
LyogUGF0aFRyYXZlcnNhbFN0YXRlLmggKi87IH07CiAJCUE4OERENDg5MEI0NjI5QjAwMEMwMjk5
MCAvKiBQYXRoVHJhdmVyc2FsU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTg4REQ0ODgwQjQ2MjlCMDAwQzAyOTkwIC8qIFBhdGhUcmF2ZXJz
YWxTdGF0ZS5jcHAgKi87IH07CisJCUE4OEZFMzM0MEU1RUVFODcwMDhEOEMwRiAvKiBHcmFwaGlj
c0NvbnRleHRQcml2YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBODhGRTMzMzBFNUVFRTg3MDA4RDhDMEYgLyogR3JhcGhpY3NDb250ZXh0UHJpdmF0
ZS5oICovOyB9OwogCQlBODk5NDMyODBCNDIzMzg4MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4OTk0MzI2MEI0
MjMzODcwMEQ3QzgwMiAvKiBCaXRtYXBJbWFnZS5oICovOyB9OwogCQlBODk5NDMyOTBCNDIzMzg4
MDBEN0M4MDIgLyogQml0bWFwSW1hZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQTg5OTQzMjcwQjQyMzM4NzAwRDdDODAyIC8qIEJpdG1hcEltYWdl
LmNwcCAqLzsgfTsKIAkJQThBOTA5QUMwQ0JDRDZCNTAwMjlCODA3IC8qIFJlbmRlclNWR1RyYW5z
Zm9ybWFibGVDb250YWluZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4QTkwOUFBMENCQ0Q2QjUwMDI5QjgwNyAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1h
YmxlQ29udGFpbmVyLmggKi87IH07CkBAIC02NjYzLDYgKzY2NjQsNyBAQAogCQlBODcxREZFMTBB
MTUzNzZCMDBCMTJBNjggLyogUmVuZGVyV2lkZ2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSZW5kZXJXaWRnZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBODhERDQ4NjBCNDYyOUEzMDBDMDI5OTAgLyogUGF0aFRyYXZlcnNhbFN0YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhdGhUcmF2ZXJzYWxTdGF0ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBODhERDQ4ODBCNDYyOUIwMDBDMDI5OTAgLyog
UGF0aFRyYXZlcnNhbFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFBhdGhUcmF2ZXJzYWxTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUE4OEZFMzMzMEU1RUVFODcwMDhEOEMwRiAvKiBHcmFwaGljc0NvbnRleHRQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzQ29udGV4dFByaXZhdGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTg5OTQzMjYwQjQyMzM4NzAwRDdDODAyIC8q
IEJpdG1hcEltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJpdG1hcElt
YWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4OTk0MzI3MEI0MjMzODcwMEQ3
QzgwMiAvKiBCaXRtYXBJbWFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBCaXRtYXBJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE4QTkw
OUFBMENCQ0Q2QjUwMDI5QjgwNyAvKiBSZW5kZXJTVkdUcmFuc2Zvcm1hYmxlQ29udGFpbmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1RyYW5zZm9ybWFibGVD
b250YWluZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEyMjIzLDYgKzEyMjI1
LDcgQEAKIAkJCQlCMkMzREE1RjBEMDA2Q0Q2MDBFRjZGMjYgLyogR2x5cGhXaWR0aE1hcC5oICov
LAogCQkJCUJDNTNDNjA3MERBNTZDNTcwMDIxRUI1RCAvKiBHcmFkaWVudC5jcHAgKi8sCiAJCQkJ
QkM1M0M1RjQwREE1NkI5MjAwMjFFQjVEIC8qIEdyYWRpZW50LmggKi8sCisJCQkJQTg4RkUzMzMw
RTVFRUU4NzAwOEQ4QzBGIC8qIEdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCAqLywKIAkJCQlCMkEw
MTU5MjBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmNwcCAqLywKIAkJCQlCMkEw
MTU5MzBBRjZDRDUzMDA2QkNFMEUgLyogR3JhcGhpY3NDb250ZXh0LmggKi8sCiAJCQkJQjJBMDE1
OTQwQUY2Q0Q1MzAwNkJDRTBFIC8qIEdyYXBoaWNzVHlwZXMuY3BwICovLApAQCAtMTU0NDAsNiAr
MTU0NDMsNyBAQAogCQkJCTI5QUFDNTFGMEU1Mzk2M0IwMDhGOUIzQiAvKiBBY2Nlc3NpYmlsaXR5
VGFibGVIZWFkZXJDb250YWluZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTA4QTQ4NDc4MEU1Mjcy
QzUwMEMzRkU3NiAvKiBTY3JpcHRFbGVtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEZBNkU1
RDBFNENGREVEMDBENUNGNDkgLyogUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTg4RkUz
MzQwRTVFRUU4NzAwOEQ4QzBGIC8qIEdyYXBoaWNzQ29udGV4dFByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwog
CQl9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEQ3VzdG9tLmNwcAppbmRleCA5MmVkOGU4Li4zN2UyNTRmIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9t
LmNwcApAQCAtNDQsOCArNDQsOCBAQCBzdGF0aWMgSlNWYWx1ZSogdG9KUyhFeGVjU3RhdGUqIGV4
ZWMsIENhbnZhc1N0eWxlKiBzdHlsZSkKIHsKICAgICBpZiAoc3R5bGUtPmNhbnZhc0dyYWRpZW50
KCkpCiAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIHN0eWxlLT5jYW52YXNHcmFkaWVudCgpKTsK
LSAgICBpZiAoc3R5bGUtPnBhdHRlcm4oKSkKLSAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgc3R5
bGUtPnBhdHRlcm4oKSk7CisgICAgaWYgKHN0eWxlLT5jYW52YXNQYXR0ZXJuKCkpCisgICAgICAg
IHJldHVybiB0b0pTKGV4ZWMsIHN0eWxlLT5jYW52YXNQYXR0ZXJuKCkpOwogICAgIHJldHVybiBq
c1N0cmluZyhleGVjLCBzdHlsZS0+Y29sb3IoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
Y3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5j
cHAKaW5kZXggN2E3MjEzNC4uZmQwY2E1YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTR3Jh
ZGllbnRWYWx1ZS5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKQEAg
LTcxLDcgKzcxLDcgQEAgU3RyaW5nIENTU0dyYWRpZW50VmFsdWU6OmNzc1RleHQoKSBjb25zdAog
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUdyYWRpZW50KiBDU1NHcmFkaWVudFZhbHVlOjpjcmVh
dGVHcmFkaWVudChSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQor
UGFzc1JlZlB0cjxHcmFkaWVudD4gQ1NTR3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVu
ZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBBU1NFUlQo
IXNpemUuaXNFbXB0eSgpKTsKICAgICAKQEAgLTgwLDEzICs4MCwxMyBAQCBHcmFkaWVudCogQ1NT
R3JhZGllbnRWYWx1ZTo6Y3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29u
c3QgSW50U2l6ZQogICAgIEZsb2F0UG9pbnQgZmlyc3RQb2ludCA9IHJlc29sdmVQb2ludChtX2Zp
cnN0WC5nZXQoKSwgbV9maXJzdFkuZ2V0KCksIHNpemUsIHpvb21GYWN0b3IpOwogICAgIEZsb2F0
UG9pbnQgc2Vjb25kUG9pbnQgPSByZXNvbHZlUG9pbnQobV9zZWNvbmRYLmdldCgpLCBtX3NlY29u
ZFkuZ2V0KCksIHNpemUsIHpvb21GYWN0b3IpOwogICAgIAotICAgIEdyYWRpZW50KiBncmFkaWVu
dCA9IDA7CisgICAgUmVmUHRyPEdyYWRpZW50PiBncmFkaWVudDsKICAgICBpZiAobV90eXBlID09
IENTU0xpbmVhckdyYWRpZW50KQotICAgICAgICBncmFkaWVudCA9IG5ldyBHcmFkaWVudChmaXJz
dFBvaW50LCBzZWNvbmRQb2ludCk7CisgICAgICAgIGdyYWRpZW50ID0gR3JhZGllbnQ6OmNyZWF0
ZShmaXJzdFBvaW50LCBzZWNvbmRQb2ludCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGZsb2F0IGZp
cnN0UmFkaXVzID0gcmVzb2x2ZVJhZGl1cyhtX2ZpcnN0UmFkaXVzLmdldCgpLCB6b29tRmFjdG9y
KTsKICAgICAgICAgZmxvYXQgc2Vjb25kUmFkaXVzID0gcmVzb2x2ZVJhZGl1cyhtX3NlY29uZFJh
ZGl1cy5nZXQoKSwgem9vbUZhY3Rvcik7Ci0gICAgICAgIGdyYWRpZW50ID0gbmV3IEdyYWRpZW50
KGZpcnN0UG9pbnQsIGZpcnN0UmFkaXVzLCBzZWNvbmRQb2ludCwgc2Vjb25kUmFkaXVzKTsKKyAg
ICAgICAgZ3JhZGllbnQgPSBHcmFkaWVudDo6Y3JlYXRlKGZpcnN0UG9pbnQsIGZpcnN0UmFkaXVz
LCBzZWNvbmRQb2ludCwgc2Vjb25kUmFkaXVzKTsKICAgICB9CiAKICAgICAvLyBOb3cgYWRkIHRo
ZSBzdG9wcy4KQEAgLTEwMSw3ICsxMDEsNyBAQCBHcmFkaWVudCogQ1NTR3JhZGllbnRWYWx1ZTo6
Y3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgSW50U2l6ZQogICAg
IC8vIFRoZSBiYWNrIGVuZCBhbHJlYWR5IHNvcnRlZCB0aGUgc3RvcHMuCiAgICAgZ3JhZGllbnQt
PnNldFN0b3BzU29ydGVkKHRydWUpOwogCi0gICAgcmV0dXJuIGdyYWRpZW50OworICAgIHJldHVy
biBncmFkaWVudC5yZWxlYXNlKCk7CiB9CiAKIEltYWdlKiBDU1NHcmFkaWVudFZhbHVlOjppbWFn
ZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5oIGIvV2ViQ29yZS9jc3MvQ1NTR3JhZGll
bnRWYWx1ZS5oCmluZGV4IGI5MGQzMDcuLjRjOTBiZTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvY3Nz
L0NTU0dyYWRpZW50VmFsdWUuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmgK
QEAgLTgyLDcgKzgyLDcgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgCiAgICAgLy8gQ3JlYXRlIHRo
ZSBncmFkaWVudCBmb3IgYSBnaXZlbiBzaXplLgotICAgIEdyYWRpZW50KiBjcmVhdGVHcmFkaWVu
dChSZW5kZXJPYmplY3QqLCBjb25zdCBJbnRTaXplJik7CisgICAgUGFzc1JlZlB0cjxHcmFkaWVu
dD4gY3JlYXRlR3JhZGllbnQoUmVuZGVyT2JqZWN0KiwgY29uc3QgSW50U2l6ZSYpOwogICAgIAog
ICAgIC8vIFJlc29sdmUgcG9pbnRzL3JhZGlpIHRvIGZyb250IGVuZCB2YWx1ZXMuCiAgICAgRmxv
YXRQb2ludCByZXNvbHZlUG9pbnQoQ1NTUHJpbWl0aXZlVmFsdWUqLCBDU1NQcmltaXRpdmVWYWx1
ZSosIGNvbnN0IEludFNpemUmLCBmbG9hdCB6b29tRmFjdG9yKTsKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaHRtbC9DYW52YXNHcmFkaWVudC5jcHAgYi9XZWJDb3JlL2h0bWwvQ2FudmFzR3JhZGllbnQu
Y3BwCmluZGV4IGMxNTYzMzguLmFhNWYwM2MgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaHRtbC9DYW52
YXNHcmFkaWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0NhbnZhc0dyYWRpZW50LmNwcApAQCAt
MzIsMTIgKzMyLDEyIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIENhbnZhc0dyYWRpZW50OjpD
YW52YXNHcmFkaWVudChjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEp
Ci0gICAgOiBtX2dyYWRpZW50KHAwLCBwMSkKKyAgICA6IG1fZ3JhZGllbnQoR3JhZGllbnQ6OmNy
ZWF0ZShwMCwgcDEpKQogewogfQogCiBDYW52YXNHcmFkaWVudDo6Q2FudmFzR3JhZGllbnQoY29u
c3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxvYXQg
cjEpCi0gICAgOiBtX2dyYWRpZW50KHAwLCByMCwgcDEsIHIxKQorICAgIDogbV9ncmFkaWVudChH
cmFkaWVudDo6Y3JlYXRlKHAwLCByMCwgcDEsIHIxKSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0NhbnZhc0dyYWRpZW50LmggYi9XZWJDb3JlL2h0bWwvQ2FudmFzR3JhZGllbnQu
aAppbmRleCBmMDhiZmZmLi40MDcyOTVlIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFz
R3JhZGllbnQuaAorKysgYi9XZWJDb3JlL2h0bWwvQ2FudmFzR3JhZGllbnQuaApAQCAtNDYsMTcg
KzQ2LDE3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ2FudmFzR3JhZGllbnQocDAsIHIwLCBwMSwgcjEpKTsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgR3JhZGllbnQmIGdyYWRpZW50KCkgeyByZXR1cm4gbV9ncmFkaWVudDsgfQor
ICAgICAgICBHcmFkaWVudCogZ3JhZGllbnQoKSBjb25zdCB7IHJldHVybiBtX2dyYWRpZW50Lmdl
dCgpOyB9CiAKLSAgICAgICAgdm9pZCBhZGRDb2xvclN0b3AoZmxvYXQgdmFsdWUsIGNvbnN0IFN0
cmluZyYgY29sb3IpIHsgbV9ncmFkaWVudC5hZGRDb2xvclN0b3AodmFsdWUsIGNvbG9yKTsgfQor
ICAgICAgICB2b2lkIGFkZENvbG9yU3RvcChmbG9hdCB2YWx1ZSwgY29uc3QgU3RyaW5nJiBjb2xv
cikgeyBtX2dyYWRpZW50LT5hZGRDb2xvclN0b3AodmFsdWUsIGNvbG9yKTsgfQogCi0gICAgICAg
IHZvaWQgZ2V0Q29sb3IoZmxvYXQgdmFsdWUsIGZsb2F0KiByLCBmbG9hdCogZywgZmxvYXQqIGIs
IGZsb2F0KiBhKSBjb25zdCB7IG1fZ3JhZGllbnQuZ2V0Q29sb3IodmFsdWUsIHIsIGcsIGIsIGEp
OyB9CisgICAgICAgIHZvaWQgZ2V0Q29sb3IoZmxvYXQgdmFsdWUsIGZsb2F0KiByLCBmbG9hdCog
ZywgZmxvYXQqIGIsIGZsb2F0KiBhKSBjb25zdCB7IG1fZ3JhZGllbnQtPmdldENvbG9yKHZhbHVl
LCByLCBnLCBiLCBhKTsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgQ2FudmFzR3JhZGllbnQo
Y29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKTsKICAgICAgICAgQ2Fu
dmFzR3JhZGllbnQoY29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBv
aW50JiBwMSwgZmxvYXQgcjEpOwogICAgICAgICAKLSAgICAgICAgR3JhZGllbnQgbV9ncmFkaWVu
dDsKKyAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBtX2dyYWRpZW50OwogICAgIH07CiAKIH0gLy9u
YW1lc3BhY2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmNwcCBiL1dl
YkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmNwcAppbmRleCA0NGZhMjFhLi42MmE0NjIwIDEwMDY0
NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5jcHAKKysrIGIvV2ViQ29yZS9odG1s
L0NhbnZhc1BhdHRlcm4uY3BwCkBAIC01OCw3ICs1OCw3IEBAIHZvaWQgQ2FudmFzUGF0dGVybjo6
cGFyc2VSZXBldGl0aW9uVHlwZShjb25zdCBTdHJpbmcmIHR5cGUsIGJvb2wmIHJlcGVhdFgsIGJv
b2wmCiB9CiAKIENhbnZhc1BhdHRlcm46OkNhbnZhc1BhdHRlcm4oSW1hZ2UqIGltYWdlLCBib29s
IHJlcGVhdFgsIGJvb2wgcmVwZWF0WSwgYm9vbCBvcmlnaW5DbGVhbikKLSAgICA6IG1fcGF0dGVy
bihpbWFnZSwgcmVwZWF0WCwgcmVwZWF0WSkKKyAgICA6IG1fcGF0dGVybihQYXR0ZXJuOjpjcmVh
dGUoaW1hZ2UsIHJlcGVhdFgsIHJlcGVhdFkpKQogICAgICwgbV9vcmlnaW5DbGVhbihvcmlnaW5D
bGVhbikKIHsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmggYi9X
ZWJDb3JlL2h0bWwvQ2FudmFzUGF0dGVybi5oCmluZGV4IDc5Yzc4NzIuLjZjMDEyZDEgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvaHRtbC9DYW52YXNQYXR0ZXJuLmgKKysrIGIvV2ViQ29yZS9odG1sL0Nh
bnZhc1BhdHRlcm4uaApAQCAtNDUsMTUgKzQ1LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICAgICAgewogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDYW52YXNQYXR0ZXJuKGlt
YWdlLCByZXBlYXRYLCByZXBlYXRZLCBvcmlnaW5DbGVhbikpOwogICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBjb25zdCBQYXR0ZXJuJiBwYXR0ZXJuKCkgeyByZXR1cm4gbV9wYXR0ZXJuOyB9
CisKKyAgICAgICAgUGF0dGVybiogcGF0dGVybigpIGNvbnN0IHsgcmV0dXJuIG1fcGF0dGVybi5n
ZXQoKTsgfQogCiAgICAgICAgIGJvb2wgb3JpZ2luQ2xlYW4oKSBjb25zdCB7IHJldHVybiBtX29y
aWdpbkNsZWFuOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBDYW52YXNQYXR0ZXJuKEltYWdl
KiwgYm9vbCByZXBlYXRYLCBib29sIHJlcGVhdFksIGJvb2wgb3JpZ2luQ2xlYW4pOwogCi0gICAg
ICAgIFBhdHRlcm4gbV9wYXR0ZXJuOworICAgICAgICBSZWZQdHI8UGF0dGVybj4gbV9wYXR0ZXJu
OwogICAgICAgICBib29sIG1fb3JpZ2luQ2xlYW47CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9XZWJDb3JlL2h0bWwvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCA3ZDM5MWEyLi4wMWMwOGQ3IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9XZWJD
b3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMiw2ICsyLDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQog
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggRXJpYyBTZWlkZWwgPGVyaWNAd2Via2l0Lm9yZz4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTAxLDggKzEwMiw2IEBAIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6U3RhdGU6OlN0YXRlKCkKICAgICAsIG1fc2hhZG93Q29sb3IoImJsYWNrIikKICAg
ICAsIG1fZ2xvYmFsQWxwaGEoMSkKICAgICAsIG1fZ2xvYmFsQ29tcG9zaXRlKENvbXBvc2l0ZVNv
dXJjZU92ZXIpCi0gICAgLCBtX2FwcGxpZWRTdHJva2VQYXR0ZXJuKGZhbHNlKQotICAgICwgbV9h
cHBsaWVkRmlsbFBhdHRlcm4oZmFsc2UpCiB7CiB9CiAKQEAgLTE0MSw3ICsxNDAsNyBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U3Ryb2tlU3R5bGUoUGFzc1JlZlB0cjxDYW52
YXNTdHlsZT4gc3R5bGUpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChtX2NhbnZhcy0+b3Jp
Z2luQ2xlYW4oKSkgewotICAgICAgICBpZiAoQ2FudmFzUGF0dGVybiogcGF0dGVybiA9IHN0eWxl
LT5wYXR0ZXJuKCkpIHsKKyAgICAgICAgaWYgKENhbnZhc1BhdHRlcm4qIHBhdHRlcm4gPSBzdHls
ZS0+Y2FudmFzUGF0dGVybigpKSB7CiAgICAgICAgICAgICBpZiAoIXBhdHRlcm4tPm9yaWdpbkNs
ZWFuKCkpCiAgICAgICAgICAgICAgICAgbV9jYW52YXMtPnNldE9yaWdpblRhaW50ZWQoKTsKICAg
ICAgICAgfQpAQCAtMTUyLDcgKzE1MSw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpzZXRTdHJva2VTdHlsZShQYXNzUmVmUHRyPENhbnZhc1N0eWxlPiBzdHlsZSkKICAgICBpZiAo
IWMpCiAgICAgICAgIHJldHVybjsKICAgICBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPmFwcGx5U3Ry
b2tlQ29sb3IoYyk7Ci0gICAgc3RhdGUoKS5tX2FwcGxpZWRTdHJva2VQYXR0ZXJuID0gZmFsc2U7
CiB9CiAKIENhbnZhc1N0eWxlKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZpbGxTdHlsZSgp
IGNvbnN0CkBAIC0xNjYsNyArMTY0LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldEZpbGxTdHlsZShQYXNzUmVmUHRyPENhbnZhc1N0eWxlPiBzdHlsZSkKICAgICAgICAgcmV0
dXJuOwogIAogICAgIGlmIChtX2NhbnZhcy0+b3JpZ2luQ2xlYW4oKSkgewotICAgICAgICBpZiAo
Q2FudmFzUGF0dGVybiogcGF0dGVybiA9IHN0eWxlLT5wYXR0ZXJuKCkpIHsKKyAgICAgICAgaWYg
KENhbnZhc1BhdHRlcm4qIHBhdHRlcm4gPSBzdHlsZS0+Y2FudmFzUGF0dGVybigpKSB7CiAgICAg
ICAgICAgICBpZiAoIXBhdHRlcm4tPm9yaWdpbkNsZWFuKCkpCiAgICAgICAgICAgICAgICAgbV9j
YW52YXMtPnNldE9yaWdpblRhaW50ZWQoKTsKICAgICAgICAgfQpAQCAtMTc3LDcgKzE3NSw2IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsU3R5bGUoUGFzc1JlZlB0cjxD
YW52YXNTdHlsZT4gc3R5bGUpCiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CiAgICAgc3Rh
dGUoKS5tX2ZpbGxTdHlsZS0+YXBwbHlGaWxsQ29sb3IoYyk7Ci0gICAgc3RhdGUoKS5tX2FwcGxp
ZWRGaWxsUGF0dGVybiA9IGZhbHNlOwogfQogCiBmbG9hdCBDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ6OmxpbmVXaWR0aCgpIGNvbnN0CkBAIC01NDIsNDcgKzUzOSw3IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpmaWxsKCkKICAgICBpZiAoIW1fcGF0aC5pc0VtcHR5KCkpCiAgICAg
ICAgIHdpbGxEcmF3KG1fcGF0aC5ib3VuZGluZ1JlY3QoKSk7CiAKLSNpZiBQTEFURk9STShDRykK
LSAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAg
ICAvLyBTaGFkaW5nIHdvcmtzIG9uIHRoZSBlbnRpcmUgY2xpcCByZWdpb24sIHNvIGNvbnZlcnQg
dGhlIGN1cnJlbnQgcGF0aCB0byBhIGNsaXAuCi0gICAgICAgIGMtPnNhdmUoKTsKLSAgICAgICAg
Q0dDb250ZXh0Q2xpcChjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgICAgIENHQ29udGV4dERy
YXdTaGFkaW5nKGMtPnBsYXRmb3JtQ29udGV4dCgpLCBzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52
YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRmb3JtR3JhZGllbnQoKSk7ICAgICAgICAKLSAg
ICAgICAgYy0+cmVzdG9yZSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1f
ZmlsbFN0eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0g
ICAgICAgIENHQ29udGV4dEZpbGxQYXRoKGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICB9Ci0j
ZWxpZiBQTEFURk9STShRVCkKLSAgICBRUGFpbnRlclBhdGgqIHBhdGggPSBtX3BhdGgucGxhdGZv
cm1QYXRoKCk7Ci0gICAgUVBhaW50ZXIqIHAgPSBzdGF0aWNfY2FzdDxRUGFpbnRlcio+KGMtPnBs
YXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3Jh
ZGllbnQoKSkgewotICAgICAgICBwLT5maWxsUGF0aCgqcGF0aCwgUUJydXNoKCooc3RhdGUoKS5t
X2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKS0+Z3JhZGllbnQoKS5wbGF0Zm9ybUdyYWRpZW50
KCkpKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHN0YXRlKCkubV9maWxsU3R5bGUtPnBh
dHRlcm4oKSkKLSAgICAgICAgICAgIGFwcGx5RmlsbFBhdHRlcm4oKTsKLSAgICAgICAgcC0+Zmls
bFBhdGgoKnBhdGgsIHAtPmJydXNoKCkpOwotICAgIH0KLSNlbGlmIFBMQVRGT1JNKENBSVJPKQot
ICAgIGNhaXJvX3QqIGNyID0gYy0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgY2Fpcm9fc2F2ZShj
cik7Ci0KLSAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkgewot
ICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNH
cmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRmb3JtR3JhZGllbnQoKSk7Ci0gICAgICAgIGNhaXJv
X2ZpbGwoY3IpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxl
LT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0gICAgICAgIGVs
c2UgewotICAgICAgICAgICAgZmxvYXQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7Ci0gICAgICAg
ICAgICBjLT5maWxsQ29sb3IoKS5nZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAg
ICAgICAgICAgIGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGEpOwotICAgICAgICB9Ci0gICAgICAgIGNhaXJvX2ZpbGwoY3IpOwotICAgIH0KLSAgICBjYWly
b19yZXN0b3JlKGNyKTsKLSNlbmRpZgorICAgIGMtPmZpbGxQYXRoKCk7CiAKICNpZiBFTkFCTEUo
REFTSEJPQVJEX1NVUFBPUlQpCiAgICAgY2xlYXJQYXRoRm9yRGFzaGJvYXJkQmFja3dhcmRDb21w
YXRpYmlsaXR5TW9kZSgpOwpAQCAtNjA1LDU0ICs1NjIsOCBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c3Ryb2tlKCkKICAgICAgICAgYm91bmRpbmdSZWN0LmluZmxhdGUoaW5zZXQp
OwogICAgICAgICB3aWxsRHJhdyhib3VuZGluZ1JlY3QpOwogICAgIH0KLSAgICAKLSAgICAvLyBG
SVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4
dCBBUEkuCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS0+
Y2FudmFzR3JhZGllbnQoKSkgewotICAgICAgICAvLyBTaGFkaW5nIHdvcmtzIG9uIHRoZSBlbnRp
cmUgY2xpcCByZWdpb24sIHNvIGNvbnZlcnQgdGhlIGN1cnJlbnQgcGF0aCB0byBhIGNsaXAuCi0g
ICAgICAgIGMtPnNhdmUoKTsKLSAgICAgICAgQ0dDb250ZXh0UmVwbGFjZVBhdGhXaXRoU3Ryb2tl
ZFBhdGgoYy0+cGxhdGZvcm1Db250ZXh0KCkpOwotICAgICAgICBDR0NvbnRleHRDbGlwKGMtPnBs
YXRmb3JtQ29udGV4dCgpKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoYy0+cGxhdGZv
cm1Db250ZXh0KCksIHN0YXRlKCkubV9zdHJva2VTdHlsZS0+Y2FudmFzR3JhZGllbnQoKS0+Z3Jh
ZGllbnQoKS5wbGF0Zm9ybUdyYWRpZW50KCkpOyAgICAgICAgCi0gICAgICAgIGMtPnJlc3RvcmUo
KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5wYXR0
ZXJuKCkpCi0gICAgICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4oKTsKLSAgICAgICAgQ0dDb250
ZXh0U3Ryb2tlUGF0aChjLT5wbGF0Zm9ybUNvbnRleHQoKSk7Ci0gICAgfQotI2VsaWYgUExBVEZP
Uk0oUVQpCi0gICAgUVBhaW50ZXJQYXRoKiBwYXRoID0gbV9wYXRoLnBsYXRmb3JtUGF0aCgpOwot
ICAgIFFQYWludGVyKiBwID0gc3RhdGljX2Nhc3Q8UVBhaW50ZXIqPihjLT5wbGF0Zm9ybUNvbnRl
eHQoKSk7Ci0gICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS0+Y2FudmFzR3JhZGllbnQoKSkg
ewotICAgICAgICBwLT5zYXZlKCk7Ci0gICAgICAgIHAtPnNldEJydXNoKCooc3RhdGUoKS5tX3N0
cm9rZVN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRmb3JtR3JhZGllbnQo
KSkpOwotICAgICAgICBwLT5zdHJva2VQYXRoKCpwYXRoLCBwLT5wZW4oKSk7Ci0gICAgICAgIHAt
PnJlc3RvcmUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX3N0cm9rZVN0
eWxlLT5wYXR0ZXJuKCkpCi0gICAgICAgICAgICBhcHBseVN0cm9rZVBhdHRlcm4oKTsKLSAgICAg
ICAgcC0+c3Ryb2tlUGF0aCgqcGF0aCwgcC0+cGVuKCkpOwotICAgIH0KLSNlbGlmIFBMQVRGT1JN
KENBSVJPKQotICAgIGNhaXJvX3QqIGNyID0gYy0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgY2Fp
cm9fc2F2ZShjcik7Ci0gICAgaWYgKHN0YXRlKCkubV9zdHJva2VTdHlsZS0+Y2FudmFzR3JhZGll
bnQoKSkgewotICAgICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBzdGF0ZSgpLm1fc3Ryb2tlU3R5
bGUtPmNhbnZhc0dyYWRpZW50KCktPmdyYWRpZW50KCkucGxhdGZvcm1HcmFkaWVudCgpKTsKLSAg
ICAgICAgYy0+YWRkUGF0aChtX3BhdGgpOwotICAgICAgICBjYWlyb19zdHJva2UoY3IpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGlmIChzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPnBhdHRlcm4oKSkK
LSAgICAgICAgICAgIGFwcGx5U3Ryb2tlUGF0dGVybigpOwotICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgIGZsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwotICAgICAgICAgICAgYy0+c3Ry
b2tlQ29sb3IoKS5nZXRSR0JBKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKLSAgICAgICAgICAg
IGNhaXJvX3NldF9zb3VyY2VfcmdiYShjciwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwotICAg
ICAgICB9Ci0gICAgICAgIGMtPmFkZFBhdGgobV9wYXRoKTsKLSAgICAgICAgY2Fpcm9fc3Ryb2tl
KGNyKTsKLSAgICB9Ci0gICAgY2Fpcm9fcmVzdG9yZShjcik7Ci0jZW5kaWYKKworICAgIGMtPnN0
cm9rZVBhdGgoKTsKIAogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9SVCkKICAgICBjbGVhclBh
dGhGb3JEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2RlKCk7CkBAIC03MDksNDIgKzYy
MCw5IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpmaWxsUmVjdChmbG9hdCB4LCBm
bG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpCiAgICAgRmxvYXRSZWN0IHJlY3QoeCwgeSwg
d2lkdGgsIGhlaWdodCk7CiAgICAgd2lsbERyYXcocmVjdCk7CiAKLSAgICAvLyBGSVhNRTogRG8g
dGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNzQ29udGV4dCBBUEkuCi0j
aWYgUExBVEZPUk0oQ0cpCi0gICAgaWYgKHN0YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dyYWRp
ZW50KCkpIHsKLSAgICAgICAgYy0+c2F2ZSgpOwotICAgICAgICBzdGF0ZSgpLm1fZmlsbFN0eWxl
LT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLmZpbGwoYywgcmVjdCk7Ci0gICAgICAgIGMt
PnJlc3RvcmUoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHls
ZS0+cGF0dGVybigpKQotICAgICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwotICAgICAgICBD
R0NvbnRleHRGaWxsUmVjdChjLT5wbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7Ci0gICAgfQotI2Vs
aWYgUExBVEZPUk0oUVQpCi0gICAgUVBhaW50ZXIqIHAgPSBzdGF0aWNfY2FzdDxRUGFpbnRlcio+
KGMtPnBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHlsZS0+Y2Fu
dmFzR3JhZGllbnQoKSkgewotICAgICAgICBwLT5maWxsUmVjdChyZWN0LCBRQnJ1c2goKihzdGF0
ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpLnBsYXRmb3JtR3Jh
ZGllbnQoKSkpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX2ZpbGxTdHls
ZS0+cGF0dGVybigpKQotICAgICAgICAgICAgYXBwbHlGaWxsUGF0dGVybigpOwotICAgICAgICBw
LT5maWxsUmVjdChyZWN0LCBwLT5icnVzaCgpKTsKLSAgICB9Ci0jZWxpZiBQTEFURk9STShDQUlS
TykKLSAgICBjYWlyb190KiBjciA9IGMtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGNhaXJvX3Nh
dmUoY3IpOwotICAgIGlmIChzdGF0ZSgpLm1fZmlsbFN0eWxlLT5jYW52YXNHcmFkaWVudCgpKSB7
Ci0gICAgICAgIHN0YXRlKCkubV9maWxsU3R5bGUtPmNhbnZhc0dyYWRpZW50KCktPmdyYWRpZW50
KCkuZmlsbChjLCByZWN0KTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RhdGUoKS5tX2Zp
bGxTdHlsZS0+cGF0dGVybigpKSB7Ci0gICAgICAgICAgICBhcHBseUZpbGxQYXR0ZXJuKCk7Ci0g
ICAgICAgICAgICBjYWlyb19yZWN0YW5nbGUoY3IsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAg
ICAgICAgICAgY2Fpcm9fZmlsbChjcik7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgYy0+
ZmlsbFJlY3QocmVjdCwgYy0+ZmlsbENvbG9yKCkpOwotICAgIH0KLSAgICAKLSAgICBjYWlyb19y
ZXN0b3JlKGNyKTsKLSNlbmRpZgorICAgIGMtPnNhdmUoKTsKKyAgICBjLT5maWxsUmVjdChyZWN0
KTsKKyAgICBjLT5yZXN0b3JlKCk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpzdHJva2VSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQp
CkBAIC03NzIsMTAgKzY1MCw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzdHJv
a2VSZWN0KGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoCiAgICAgYm91bmRp
bmdSZWN0LmluZmxhdGUobGluZVdpZHRoIC8gMik7CiAgICAgd2lsbERyYXcoYm91bmRpbmdSZWN0
KTsKIAotICAgIC8vIEZJWE1FOiBObyBzdXBwb3J0IGZvciBncmFkaWVudHMhCi0gICAgaWYgKHN0
YXRlKCkubV9zdHJva2VTdHlsZS0+cGF0dGVybigpKQotICAgICAgICBhcHBseVN0cm9rZVBhdHRl
cm4oKTsKLQogICAgIGMtPnN0cm9rZVJlY3QocmVjdCwgbGluZVdpZHRoKTsKIH0KIApAQCAtMTE3
NCw1OCArMTA0OCw2IEBAIEdyYXBoaWNzQ29udGV4dCogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpkcmF3aW5nQ29udGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fY2FudmFzLT5kcmF3aW5nQ29u
dGV4dCgpOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6YXBwbHlTdHJva2VQ
YXR0ZXJuKCkKLXsKLSAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwot
ICAgIGlmICghYykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IENhbiB0aGlzIGNo
ZWNrIGJlIG1vdmVkIGludG8gR3JhcGhpY3NDb250ZXh0PyBvciByZW1vdmVkPwotI2lmIFBMQVRG
T1JNKENHKQotICAgIC8vIENoZWNrIGZvciBjYXNlIHdoZXJlIHRoZSBwYXR0ZXJuIGlzIGFscmVh
ZHkgc2V0LgotICAgIEFmZmluZVRyYW5zZm9ybSBjdG0gPSBjLT5nZXRDVE0oKTsKLSAgICBpZiAo
c3RhdGUoKS5tX2FwcGxpZWRTdHJva2VQYXR0ZXJuICYmIGN0bSA9PSBzdGF0ZSgpLm1fc3Ryb2tl
U3R5bGVQYXR0ZXJuVHJhbnNmb3JtKQotICAgICAgICByZXR1cm47Ci0jZW5kaWYKLQotICAgIENh
bnZhc1BhdHRlcm4qIHBhdHRlcm4gPSBzdGF0ZSgpLm1fc3Ryb2tlU3R5bGUtPnBhdHRlcm4oKTsK
LSAgICBpZiAoIXBhdHRlcm4pCi0gICAgICAgIHJldHVybjsKLQotICAgIGMtPmFwcGx5U3Ryb2tl
UGF0dGVybihwYXR0ZXJuLT5wYXR0ZXJuKCkpOwotCi0jaWYgUExBVEZPUk0oQ0cpCi0gICAgc3Rh
dGUoKS5tX3N0cm9rZVN0eWxlUGF0dGVyblRyYW5zZm9ybSA9IGN0bTsKLSNlbmRpZgotICAgIHN0
YXRlKCkubV9hcHBsaWVkU3Ryb2tlUGF0dGVybiA9IHRydWU7Ci19Ci0KLXZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjphcHBseUZpbGxQYXR0ZXJuKCkKLXsKLSAgICBHcmFwaGljc0NvbnRl
eHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghYykKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gRklYTUU6IENhbiB0aGlzIGNoZWNrIGJlIG1vdmVkIGludG8gR3JhcGhpY3NDb250
ZXh0PyBvciByZW1vdmVkPwotI2lmIFBMQVRGT1JNKENHKQotICAgIC8vIENoZWNrIGZvciBjYXNl
IHdoZXJlIHRoZSBwYXR0ZXJuIGlzIGFscmVhZHkgc2V0LgotICAgIEFmZmluZVRyYW5zZm9ybSBj
dG0gPSBjLT5nZXRDVE0oKTsKLSAgICBpZiAoc3RhdGUoKS5tX2FwcGxpZWRGaWxsUGF0dGVybiAm
JiBjdG0gPT0gc3RhdGUoKS5tX2ZpbGxTdHlsZVBhdHRlcm5UcmFuc2Zvcm0pCi0gICAgICAgIHJl
dHVybjsKLSNlbmRpZgotCi0gICAgQ2FudmFzUGF0dGVybiogcGF0dGVybiA9IHN0YXRlKCkubV9m
aWxsU3R5bGUtPnBhdHRlcm4oKTsKLSAgICBpZiAoIXBhdHRlcm4pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGMtPmFwcGx5RmlsbFBhdHRlcm4ocGF0dGVybi0+cGF0dGVybigpKTsKLQotI2lmIFBM
QVRGT1JNKENHKQotICAgIHN0YXRlKCkubV9maWxsU3R5bGVQYXR0ZXJuVHJhbnNmb3JtID0gY3Rt
OwotI2VuZGlmCi0gICAgc3RhdGUoKS5tX2FwcGxpZWRGaWxsUGF0dGVybiA9IHRydWU7Ci19Ci0K
IHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlRGF0YT4gY3JlYXRlRW1wdHlJbWFnZURhdGEoY29uc3Qg
SW50U2l6ZSYgc2l6ZSkKIHsKICAgICBQYXNzUmVmUHRyPEltYWdlRGF0YT4gZGF0YSA9IEltYWdl
RGF0YTo6Y3JlYXRlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2h0bWwvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmggYi9XZWJDb3JlL2h0bWwvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmgKaW5kZXggMTY4YjczMC4uOWE3ZmRhZSAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9odG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCisrKyBiL1dlYkNvcmUv
aHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaApAQCAtMTkxLDEzICsxOTEsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICBTdHJpbmcgbV9zaGFkb3dDb2xvcjsKICAgICAg
ICAgICAgIGZsb2F0IG1fZ2xvYmFsQWxwaGE7CiAgICAgICAgICAgICBDb21wb3NpdGVPcGVyYXRv
ciBtX2dsb2JhbENvbXBvc2l0ZTsKLSAgICAgICAgICAgIGJvb2wgbV9hcHBsaWVkU3Ryb2tlUGF0
dGVybjsKLSAgICAgICAgICAgIGJvb2wgbV9hcHBsaWVkRmlsbFBhdHRlcm47CiAgICAgICAgICAg
ICBBZmZpbmVUcmFuc2Zvcm0gbV90cmFuc2Zvcm07Ci0jaWYgUExBVEZPUk0oQ0cpCi0gICAgICAg
ICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9zdHJva2VTdHlsZVBhdHRlcm5UcmFuc2Zvcm07Ci0gICAg
ICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9maWxsU3R5bGVQYXR0ZXJuVHJhbnNmb3JtOwotI2Vu
ZGlmCiAgICAgICAgIH07CiAgICAgICAgIFBhdGggbV9wYXRoOwogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvQ2FudmFzU3R5bGUuY3BwIGIvV2ViQ29yZS9odG1sL0NhbnZhc1N0eWxlLmNwcApp
bmRleCA1NjEzMGRmLi41OWY3MDYyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvQ2FudmFzU3R5
bGUuY3BwCisrKyBiL1dlYkNvcmUvaHRtbC9DYW52YXNTdHlsZS5jcHAKQEAgLTIsNiArMiw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKICAqIENvcHlyaWdodCAo
QykgMjAwNyBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA4
IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTE0MSw3ICsxNDIsMTAgQEAgdm9pZCBDYW52YXNTdHlsZTo6YXBwbHlTdHJva2VD
b2xvcihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIEdyYWRpZW50OgorICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ry
b2tlR3JhZGllbnQoY2FudmFzR3JhZGllbnQoKS0+Z3JhZGllbnQoKSk7CisgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBJbWFnZVBhdHRlcm46CisgICAgICAgICAgICBjb250ZXh0LT5z
ZXRTdHJva2VQYXR0ZXJuKGNhbnZhc1BhdHRlcm4oKS0+cGF0dGVybigpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgIH0KIH0KQEAgLTE4Nyw3ICsxOTEsMTAgQEAgdm9pZCBDYW52YXNTdHlsZTo6
YXBwbHlGaWxsQ29sb3IoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBHcmFkaWVudDoKKyAgICAgICAgICAgIGNvbnRl
eHQtPnNldEZpbGxHcmFkaWVudChjYW52YXNHcmFkaWVudCgpLT5ncmFkaWVudCgpKTsKKyAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEltYWdlUGF0dGVybjoKKyAgICAgICAgICAgIGNv
bnRleHQtPnNldEZpbGxQYXR0ZXJuKGNhbnZhc1BhdHRlcm4oKS0+cGF0dGVybigpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9DYW52YXNT
dHlsZS5oIGIvV2ViQ29yZS9odG1sL0NhbnZhc1N0eWxlLmgKaW5kZXggMDc5YWI2Zi4uZmUwMWJk
MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0NhbnZhc1N0eWxlLmgKKysrIGIvV2ViQ29yZS9o
dG1sL0NhbnZhc1N0eWxlLmgKQEAgLTQ3LDkgKzQ3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAgICAgICAgIFN0cmluZyBjb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fY29sb3I7IH0KICAgICAg
ICAgQ2FudmFzR3JhZGllbnQqIGNhbnZhc0dyYWRpZW50KCkgY29uc3QgeyByZXR1cm4gbV9ncmFk
aWVudC5nZXQoKTsgfQotICAgICAgICBDYW52YXNQYXR0ZXJuKiBwYXR0ZXJuKCkgY29uc3QgeyBy
ZXR1cm4gbV9wYXR0ZXJuLmdldCgpOyB9CisgICAgICAgIENhbnZhc1BhdHRlcm4qIGNhbnZhc1Bh
dHRlcm4oKSBjb25zdCB7IHJldHVybiBtX3BhdHRlcm4uZ2V0KCk7IH0KIAotICAgICAgICAvLyBU
aGVzZSBkbyBub3RoaW5nIGZvciBncmFkaWVudHMgb3IgcGF0dGVybnMuCiAgICAgICAgIHZvaWQg
YXBwbHlGaWxsQ29sb3IoR3JhcGhpY3NDb250ZXh0Kik7CiAgICAgICAgIHZvaWQgYXBwbHlTdHJv
a2VDb2xvcihHcmFwaGljc0NvbnRleHQqKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
ZW5lcmF0ZWRJbWFnZS5oCmluZGV4IDJjY2I0YjAuLjVlNzg5ODkgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuaAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dlbmVyYXRlZEltYWdlLmgKQEAgLTMwLDE2ICszMCwxNiBAQAogCiAjaW5j
bHVkZSAiR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1ZGUgPHd0Zi9P
d25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgR2VuZXJhdGVkSW1hZ2UgOiBwdWJsaWMgSW1hZ2UgewogcHVibGljOgotICAgIEdl
bmVyYXRlZEltYWdlKEdlbmVyYXRvciogZ2VuZXJhdG9yLCBjb25zdCBJbnRTaXplJiBzaXplKQot
ICAgIDogbV9zaXplKHNpemUpCisgICAgR2VuZXJhdGVkSW1hZ2UoUGFzc1JlZlB0cjxHZW5lcmF0
b3I+IGdlbmVyYXRvciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKKyAgICAgICAgOiBtX2dlbmVyYXRv
cihnZW5lcmF0b3IpCisgICAgICAgICwgbV9zaXplKHNpemUpCiAgICAgewotICAgICAgICBtX2dl
bmVyYXRvci5zZXQoZ2VuZXJhdG9yKTsKICAgICB9CiAgICAgdmlydHVhbCB+R2VuZXJhdGVkSW1h
Z2UoKSB7fQogCkBAIC02Myw3ICs2Myw3IEBAIHByb3RlY3RlZDoKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBj
b25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KTsKICAgICAKIHByb3RlY3RlZDoKLSAgICBPd25QdHI8
R2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKKyAgICBSZWZQdHI8R2VuZXJhdG9yPiBtX2dlbmVyYXRv
cjsKICAgICBJbnRTaXplIG1fc2l6ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR2VuZXJhdG9yLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dlbmVy
YXRvci5oCmluZGV4IGE1NDVhZDUuLmEwYWY2ODkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR2VuZXJhdG9yLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
ZW5lcmF0b3IuaApAQCAtMjYsMTQgKzI2LDE0IEBACiAjaWZuZGVmIEdlbmVyYXRvcl9oCiAjZGVm
aW5lIEdlbmVyYXRvcl9oCiAKLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZsb2F0
UmVjdDsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKIAotY2xhc3MgR2VuZXJhdG9yIDogTm9uY29w
eWFibGUgeworY2xhc3MgR2VuZXJhdG9yIDogcHVibGljIFJlZkNvdW50ZWQ8R2VuZXJhdG9yPiB7
CiBwdWJsaWM6CiAgICAgdmlydHVhbCB+R2VuZXJhdG9yKCkge307CiAgICAgCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmggYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYWRpZW50LmgKaW5kZXggYmVkYzE1Yy4uNzEzYTIwMCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhZGllbnQuaApAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkdlbmVy
YXRvci5oIgogCiAjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCiAjaWYgUExBVEZPUk0oQ0cpCkBAIC01
OCw4ICs1OSwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAgICBjbGFzcyBHcmFkaWVudCA6
IHB1YmxpYyBHZW5lcmF0b3IgewogICAgIHB1YmxpYzoKLSAgICAgICAgR3JhZGllbnQoY29uc3Qg
RmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxKTsKLSAgICAgICAgR3JhZGllbnQo
Y29uc3QgRmxvYXRQb2ludCYgcDAsIGZsb2F0IHIwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgZmxv
YXQgcjEpOworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlKGNvbnN0
IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHcmFkaWVudChwMCwgcDEpKTsKKyAgICAgICAgfQor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxHcmFkaWVudD4gY3JlYXRlKGNvbnN0IEZsb2F0UG9p
bnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGZsb2F0IHIxKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdyYWRpZW50KHAwLCByMCwgcDEs
IHIxKSk7CisgICAgICAgIH0KICAgICAgICAgdmlydHVhbCB+R3JhZGllbnQoKTsKIAogICAgICAg
ICB2b2lkIGFkZENvbG9yU3RvcChmbG9hdCwgY29uc3QgU3RyaW5nJik7CkBAIC03NSw3ICs4Miw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgIGZsb2F0IGdyZWVuOwogICAgICAg
ICAgICAgZmxvYXQgYmx1ZTsKICAgICAgICAgICAgIGZsb2F0IGFscGhhOwotICAgICAgICAgICAg
CisKICAgICAgICAgICAgIENvbG9yU3RvcCgpIDogc3RvcCgwKSwgcmVkKDApLCBncmVlbigwKSwg
Ymx1ZSgwKSwgYWxwaGEoMCkgeyB9CiAgICAgICAgICAgICBDb2xvclN0b3AoZmxvYXQgcywgZmxv
YXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSkgOiBzdG9wKHMpLCByZWQociksIGdyZWVu
KGcpLCBibHVlKGIpLCBhbHBoYShhKSB7IH0KICAgICAgICAgfTsKQEAgLTg1LDYgKzkyLDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHZvaWQgZmlsbChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBGbG9hdFJlY3QmKTsKIAogICAgIHByaXZhdGU6CisgICAgICAgIEdyYWRp
ZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSk7CisgICAgICAg
IEdyYWRpZW50KGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBmbG9hdCByMCwgY29uc3QgRmxvYXRQb2lu
dCYgcDEsIGZsb2F0IHIxKTsKKwogICAgICAgICB2b2lkIHBsYXRmb3JtSW5pdCgpIHsgbV9ncmFk
aWVudCA9IDA7IH0KICAgICAgICAgdm9pZCBwbGF0Zm9ybURlc3Ryb3koKTsKIApkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCmluZGV4IDRlYjE5ZWYuLjll
Y2I1ZWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5j
cHAKQEAgLTEzNCw2ICsxMzQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlU3R5
bGUoY29uc3QgU3Ryb2tlU3R5bGUmIHN0eWxlKQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImIGNvbG9yKQogeworICAgIG1fY29tbW9uLT5zdGF0ZS5z
dHJva2VDb2xvclNwYWNlID0gU29saWRDb2xvclNwYWNlOwogICAgIG1fY29tbW9uLT5zdGF0ZS5z
dHJva2VDb2xvciA9IGNvbG9yOwogICAgIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29sb3IpOwog
fQpAQCAtMTc4LDggKzE3OSwxOSBAQCBDb2xvciBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUNvbG9y
KCkgY29uc3QKICAgICByZXR1cm4gbV9jb21tb24tPnN0YXRlLnN0cm9rZUNvbG9yOwogfQogCitX
aW5kUnVsZSBHcmFwaGljc0NvbnRleHQ6OmZpbGxSdWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9jb21tb24tPnN0YXRlLmZpbGxSdWxlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
RmlsbFJ1bGUoV2luZFJ1bGUgZmlsbFJ1bGUpCit7CisgICAgbV9jb21tb24tPnN0YXRlLmZpbGxS
dWxlID0gZmlsbFJ1bGU7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGaWxsQ29sb3Io
Y29uc3QgQ29sb3ImIGNvbG9yKQogeworICAgIG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3JTcGFj
ZSA9IFNvbGlkQ29sb3JTcGFjZTsKICAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbENvbG9yID0gY29s
b3I7CiAgICAgc2V0UGxhdGZvcm1GaWxsQ29sb3IoY29sb3IpOwogfQpAQCAtMTg5LDYgKzIwMSw1
NCBAQCBDb2xvciBHcmFwaGljc0NvbnRleHQ6OmZpbGxDb2xvcigpIGNvbnN0CiAgICAgcmV0dXJu
IG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3I7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRTdHJva2VQYXR0ZXJuKFBhc3NSZWZQdHI8UGF0dGVybj4gcGF0dGVybikKK3sKKyAgICBBU1NF
UlQocGF0dGVybik7CisgICAgaWYgKCFwYXR0ZXJuKSB7CisgICAgICAgIHNldFN0cm9rZUNvbG9y
KENvbG9yOjpibGFjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9jb21tb24tPnN0
YXRlLnN0cm9rZUNvbG9yU3BhY2UgPSBQYXR0ZXJuQ29sb3JTcGFjZTsKKyAgICBtX2NvbW1vbi0+
c3RhdGUuc3Ryb2tlUGF0dGVybiA9IHBhdHRlcm47CisgICAgc2V0UGxhdGZvcm1TdHJva2VQYXR0
ZXJuKG1fY29tbW9uLT5zdGF0ZS5zdHJva2VQYXR0ZXJuLmdldCgpKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldEZpbGxQYXR0ZXJuKFBhc3NSZWZQdHI8UGF0dGVybj4gcGF0dGVybikK
K3sKKyAgICBBU1NFUlQocGF0dGVybik7CisgICAgaWYgKCFwYXR0ZXJuKSB7CisgICAgICAgIHNl
dEZpbGxDb2xvcihDb2xvcjo6YmxhY2spOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1f
Y29tbW9uLT5zdGF0ZS5maWxsQ29sb3JTcGFjZSA9IFBhdHRlcm5Db2xvclNwYWNlOworICAgIG1f
Y29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybiA9IHBhdHRlcm47CisgICAgc2V0UGxhdGZvcm1GaWxs
UGF0dGVybihtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0U3Ryb2tlR3JhZGllbnQoUGFzc1JlZlB0cjxHcmFkaWVudD4gZ3Jh
ZGllbnQpCit7CisgICAgQVNTRVJUKGdyYWRpZW50KTsKKyAgICBpZiAoIWdyYWRpZW50KSB7Cisg
ICAgICAgIHNldFN0cm9rZUNvbG9yKENvbG9yOjpibGFjayk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgbV9jb21tb24tPnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UgPSBHcmFkaWVudENvbG9y
U3BhY2U7CisgICAgbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50ID0gZ3JhZGllbnQ7Cisg
ICAgc2V0UGxhdGZvcm1TdHJva2VHcmFkaWVudChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlR3JhZGll
bnQuZ2V0KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbEdyYWRpZW50KFBh
c3NSZWZQdHI8R3JhZGllbnQ+IGdyYWRpZW50KQoreworICAgIEFTU0VSVChncmFkaWVudCk7Cisg
ICAgaWYgKCFncmFkaWVudCkgeworICAgICAgICBzZXRGaWxsQ29sb3IoQ29sb3I6OmJsYWNrKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbENvbG9yU3Bh
Y2UgPSBHcmFkaWVudENvbG9yU3BhY2U7CisgICAgbV9jb21tb24tPnN0YXRlLmZpbGxHcmFkaWVu
dCA9IGdyYWRpZW50OworICAgIHNldFBsYXRmb3JtRmlsbEdyYWRpZW50KG1fY29tbW9uLT5zdGF0
ZS5maWxsR3JhZGllbnQuZ2V0KCkpOworfQorCiBib29sIEdyYXBoaWNzQ29udGV4dDo6dXBkYXRp
bmdDb250cm9sVGludHMoKSBjb25zdAogewogICAgIHJldHVybiBtX2NvbW1vbi0+bV91cGRhdGlu
Z0NvbnRyb2xUaW50czsKQEAgLTQyNiwxNCArNDg2LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtVGV4dERyYXdpbmdNb2RlKGludCBtb2RlKQogfQogI2VuZGlmCiAKLSNpZiAh
UExBVEZPUk0oQ0cpICYmICFQTEFURk9STShDQUlSTykKLS8vIE90aGVyIHBsYXRmb3JtcyBuZWVk
IHRvIGltcGxlbWVudCB0aGlzLgotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBUb0ltYWdlQnVm
ZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlQnVmZmVyKikKLXsKLSAgICBub3RJbXBs
ZW1lbnRlZCgpOwotfQotI2VuZGlmCi0KICNpZiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShD
QUlSTykKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKGNvbnN0
IFN0cm9rZVN0eWxlJikKIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0LmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCmluZGV4IDVhNTEwYWYuLjc1M2ZmNjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtOTQsNiArOTQsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogICAgIGNsYXNzIEZvbnQ7CiAgICAgY2xh
c3MgR2VuZXJhdG9yOworICAgIGNsYXNzIEdyYWRpZW50OwogICAgIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dFByaXZhdGU7CiAgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOwog
ICAgIGNsYXNzIEltYWdlQnVmZmVyOwpAQCAtMTM5LDMwICsxNDAsNDAgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICB2b2lkIHNldFN0cm9rZVN0eWxlKGNvbnN0IFN0cm9rZVN0eWxlJiBz
dHlsZSk7CiAgICAgICAgIENvbG9yIHN0cm9rZUNvbG9yKCkgY29uc3Q7CiAgICAgICAgIHZvaWQg
c2V0U3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICAgICAgdm9pZCBzZXRTdHJva2VQYXR0
ZXJuKFBhc3NSZWZQdHI8UGF0dGVybj4pOworICAgICAgICB2b2lkIHNldFN0cm9rZUdyYWRpZW50
KFBhc3NSZWZQdHI8R3JhZGllbnQ+KTsKIAorICAgICAgICBXaW5kUnVsZSBmaWxsUnVsZSgpIGNv
bnN0OworICAgICAgICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlKTsKICAgICAgICAgQ29sb3Ig
ZmlsbENvbG9yKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9y
Jik7Ci0KLSAgICAgICAgdm9pZCBhcHBseVN0cm9rZVBhdHRlcm4oY29uc3QgUGF0dGVybiYpOwot
ICAgICAgICB2b2lkIGFwcGx5RmlsbFBhdHRlcm4oY29uc3QgUGF0dGVybiYpOworICAgICAgICB2
b2lkIHNldEZpbGxQYXR0ZXJuKFBhc3NSZWZQdHI8UGF0dGVybj4pOworICAgICAgICB2b2lkIHNl
dEZpbGxHcmFkaWVudChQYXNzUmVmUHRyPEdyYWRpZW50Pik7CiAKICAgICAgICAgdm9pZCBzYXZl
KCk7CiAgICAgICAgIHZvaWQgcmVzdG9yZSgpOwotICAgICAgICAKKwogICAgICAgICAvLyBUaGVz
ZSBkcmF3IG1ldGhvZHMgd2lsbCBkbyBib3RoIHN0cm9raW5nIGFuZCBmaWxsaW5nLgogICAgICAg
ICB2b2lkIGRyYXdSZWN0KGNvbnN0IEludFJlY3QmKTsKICAgICAgICAgdm9pZCBkcmF3TGluZShj
b25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50Jik7CiAgICAgICAgIHZvaWQgZHJhd0VsbGlw
c2UoY29uc3QgSW50UmVjdCYpOwogICAgICAgICB2b2lkIGRyYXdDb252ZXhQb2x5Z29uKHNpemVf
dCBudW1Qb2ludHMsIGNvbnN0IEZsb2F0UG9pbnQqLCBib29sIHNob3VsZEFudGlhbGlhcyA9IGZh
bHNlKTsKIAorICAgICAgICB2b2lkIGRyYXdQYXRoKCk7CisgICAgICAgIHZvaWQgZmlsbFBhdGgo
KTsKKyAgICAgICAgdm9pZCBzdHJva2VQYXRoKCk7CisKICAgICAgICAgLy8gQXJjIGRyYXdpbmcg
KHVzZWQgYnkgYm9yZGVyLXJhZGl1cyBpbiBDU1MpIGp1c3Qgc3VwcG9ydHMgc3Ryb2tpbmcgYXQg
dGhlIG1vbWVudC4KICAgICAgICAgdm9pZCBzdHJva2VBcmMoY29uc3QgSW50UmVjdCYsIGludCBz
dGFydEFuZ2xlLCBpbnQgYW5nbGVTcGFuKTsKLSAgICAgICAgCi0gICAgICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgSW50UmVjdCYsIGNvbnN0IENvbG9yJik7CisKKyAgICAgICAgdm9pZCBmaWxsUmVj
dChjb25zdCBGbG9hdFJlY3QmKTsKICAgICAgICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBDb2xvciYpOwogICAgICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYsIEdlbmVyYXRvciYpOwogICAgICAgICB2b2lkIGZpbGxSb3VuZGVkUmVjdChjb25zdCBJbnRS
ZWN0JiwgY29uc3QgSW50U2l6ZSYgdG9wTGVmdCwgY29uc3QgSW50U2l6ZSYgdG9wUmlnaHQsIGNv
bnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJvdHRvbVJpZ2h0LCBjb25z
dCBDb2xvciYpOworCiAgICAgICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwor
CisgICAgICAgIHZvaWQgc3Ryb2tlUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKICAgICAgICAgdm9p
ZCBzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IGxpbmVXaWR0aCk7CiAKICAgICAg
ICAgdm9pZCBkcmF3SW1hZ2UoSW1hZ2UqLCBjb25zdCBJbnRQb2ludCYsIENvbXBvc2l0ZU9wZXJh
dG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7CkBAIC0xNzcsMTMgKzE4OCw4IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZTo6VGlsZVJ1bGUg
aFJ1bGUgPSBJbWFnZTo6U3RyZXRjaFRpbGUsIEltYWdlOjpUaWxlUnVsZSB2UnVsZSA9IEltYWdl
OjpTdHJldGNoVGlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wb3NpdGVPcGVy
YXRvciA9IENvbXBvc2l0ZVNvdXJjZU92ZXIpOwogCi0jaWYgUExBVEZPUk0oQ0cpCiAgICAgICAg
IHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSk7
CiAgICAgICAgIEludGVycG9sYXRpb25RdWFsaXR5IGltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHko
KSBjb25zdDsKLSNlbHNlCi0gICAgICAgIHZvaWQgc2V0SW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0
eShJbnRlcnBvbGF0aW9uUXVhbGl0eSkge30KLSAgICAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkg
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0IHsgcmV0dXJuIEludGVycG9sYXRpb25E
ZWZhdWx0OyB9Ci0jZW5kaWYKIAogICAgICAgICB2b2lkIGNsaXAoY29uc3QgRmxvYXRSZWN0Jik7
CiAgICAgICAgIHZvaWQgYWRkUm91bmRlZFJlY3RDbGlwKGNvbnN0IEludFJlY3QmLCBjb25zdCBJ
bnRTaXplJiB0b3BMZWZ0LCBjb25zdCBJbnRTaXplJiB0b3BSaWdodCwgY29uc3QgSW50U2l6ZSYg
Ym90dG9tTGVmdCwgY29uc3QgSW50U2l6ZSYgYm90dG9tUmlnaHQpOwpAQCAtMjg4LDcgKzI5NCw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICBib29s
IGluVHJhbnNwYXJlbmN5TGF5ZXIoKSBjb25zdDsKLSAgICAgICAgdm9pZCBzZXRGaWxsUnVsZShX
aW5kUnVsZSk7CiAgICAgICAgIFBsYXRmb3JtUGF0aCogY3VycmVudFBhdGgoKTsKICNlbmRpZgog
CkBAIC0zMDEsMTIgKzMwNiwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgcHJpdmF0ZToK
ICAgICAgICAgdm9pZCBzYXZlUGxhdGZvcm1TdGF0ZSgpOwogICAgICAgICB2b2lkIHJlc3RvcmVQ
bGF0Zm9ybVN0YXRlKCk7CisKICAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVRleHREcmF3aW5nTW9k
ZShpbnQpOworICAgICAgICB2b2lkIHNldFBsYXRmb3JtRm9udChjb25zdCBGb250JiBmb250KTsK
KwogICAgICAgICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAg
ICAgICAgdm9pZCBzZXRQbGF0Zm9ybVN0cm9rZVBhdHRlcm4oUGF0dGVybiopOworICAgICAgICB2
b2lkIHNldFBsYXRmb3JtU3Ryb2tlR3JhZGllbnQoR3JhZGllbnQqKTsKICAgICAgICAgdm9pZCBz
ZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKGNvbnN0IFN0cm9rZVN0eWxlJik7CiAgICAgICAgIHZvaWQg
c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3MoZmxvYXQpOworCiAgICAgICAgIHZvaWQgc2V0UGxh
dGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybUZv
bnQoY29uc3QgRm9udCYgZm9udCk7CisgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1GaWxsUGF0dGVy
bihQYXR0ZXJuKik7CisgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1GaWxsR3JhZGllbnQoR3JhZGll
bnQqKTsKKwogICAgICAgICB2b2lkIHNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEludFNpemUmLCBp
bnQgYmx1ciwgY29uc3QgQ29sb3ImKTsKICAgICAgICAgdm9pZCBjbGVhclBsYXRmb3JtU2hhZG93
KCk7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250
ZXh0UHJpdmF0ZS5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQ
cml2YXRlLmgKaW5kZXggMDJjNzQxNS4uNjIxZGE4NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmgKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHRQcml2YXRlLmgKQEAgLTI3LDI4ICsyNyw1NSBA
QAogI2RlZmluZSBHcmFwaGljc0NvbnRleHRQcml2YXRlX2gKIAogI2luY2x1ZGUgIkZvbnQuaCIK
KyNpbmNsdWRlICJHcmFkaWVudC5oIgorI2luY2x1ZGUgIlBhdHRlcm4uaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCisvLyBUT0RPKGVzZWlkZWwpOiBUaGlzIGlzIGEgcGxhY2UtaG9sZGVyIHVu
dGlsIHNvbWUgZGF5IHdoZW4gd2UgZGVjaWRlIHRvIGFkZAorLy8gcmVhbCBjb2xvciBzcGFjZSBz
dXBwb3J0IHRvIFdlYkNvcmUuICBBdCB0aGF0IHRpbWUsIENvbG9yU3BhY2Ugd2lsbCBiZSBhCisv
LyBjbGFzcyBhbmQgaW5zdGFuY2VzIHdpbGwgYmUgaGVsZCAgb2ZmIG9mIENvbG9ycy4gICBUaGVy
ZSB3aWxsIGJlCisvLyBzcGVjaWFsIHNpbmdsZXRvbiBHcmFkaWVudCBhbmQgUGF0dGVybiBjb2xv
ciBzcGFjZXMgdG8gbWFyayB3aGVuCisvLyBhIGZpbGwgb3Igc3Ryb2tlIGlzIHVzaW5nIGEgZ3Jh
ZGllbnQgb3IgcGF0dGVybiBpbnN0ZWFkIG9mIGEgc29saWQgY29sb3IuCisgICAgZW51bSBDb2xv
clNwYWNlIHsKKyAgICAgICAgU29saWRDb2xvclNwYWNlLAorICAgICAgICBQYXR0ZXJuQ29sb3JT
cGFjZSwKKyAgICAgICAgR3JhZGllbnRDb2xvclNwYWNlCisgICAgfTsKKwogICAgIHN0cnVjdCBH
cmFwaGljc0NvbnRleHRTdGF0ZSB7CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlKCkKLSAg
ICAgICAgICAgIDogc3Ryb2tlU3R5bGUoU29saWRTdHJva2UpCisgICAgICAgICAgICA6IHRleHRE
cmF3aW5nTW9kZShjVGV4dEZpbGwpCisgICAgICAgICAgICAsIHN0cm9rZVN0eWxlKFNvbGlkU3Ry
b2tlKQogICAgICAgICAgICAgLCBzdHJva2VUaGlja25lc3MoMCkKKyAgICAgICAgICAgICwgc3Ry
b2tlQ29sb3JTcGFjZShTb2xpZENvbG9yU3BhY2UpCiAgICAgICAgICAgICAsIHN0cm9rZUNvbG9y
KENvbG9yOjpibGFjaykKKyAgICAgICAgICAgICwgZmlsbFJ1bGUoUlVMRV9OT05aRVJPKQorICAg
ICAgICAgICAgLCBmaWxsQ29sb3JTcGFjZShTb2xpZENvbG9yU3BhY2UpCiAgICAgICAgICAgICAs
IGZpbGxDb2xvcihDb2xvcjo6YmxhY2spCi0gICAgICAgICAgICAsIHRleHREcmF3aW5nTW9kZShj
VGV4dEZpbGwpCiAgICAgICAgICAgICAsIHBhaW50aW5nRGlzYWJsZWQoZmFsc2UpCiAgICAgICAg
ICAgICAsIHNoYWRvd0JsdXIoMCkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgRm9u
dCBmb250OworICAgICAgICBpbnQgdGV4dERyYXdpbmdNb2RlOworICAgICAgICAKICAgICAgICAg
U3Ryb2tlU3R5bGUgc3Ryb2tlU3R5bGU7CiAgICAgICAgIGZsb2F0IHN0cm9rZVRoaWNrbmVzczsK
KyAgICAgICAgQ29sb3JTcGFjZSBzdHJva2VDb2xvclNwYWNlOwogICAgICAgICBDb2xvciBzdHJv
a2VDb2xvcjsKKyAgICAgICAgUmVmUHRyPEdyYWRpZW50PiBzdHJva2VHcmFkaWVudDsKKyAgICAg
ICAgUmVmUHRyPFBhdHRlcm4+IHN0cm9rZVBhdHRlcm47CisgICAgICAgIAorICAgICAgICBXaW5k
UnVsZSBmaWxsUnVsZTsKKyAgICAgICAgQ29sb3JTcGFjZSBmaWxsQ29sb3JTcGFjZTsKICAgICAg
ICAgQ29sb3IgZmlsbENvbG9yOwotICAgICAgICBpbnQgdGV4dERyYXdpbmdNb2RlOworICAgICAg
ICBSZWZQdHI8R3JhZGllbnQ+IGZpbGxHcmFkaWVudDsKKyAgICAgICAgUmVmUHRyPFBhdHRlcm4+
IGZpbGxQYXR0ZXJuOworCiAgICAgICAgIGJvb2wgcGFpbnRpbmdEaXNhYmxlZDsKKyAgICAgICAg
CiAgICAgICAgIEludFNpemUgc2hhZG93U2l6ZTsKICAgICAgICAgdW5zaWduZWQgc2hhZG93Qmx1
cjsKICAgICAgICAgQ29sb3Igc2hhZG93Q29sb3I7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzVHlwZXMuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NUeXBlcy5oCmluZGV4IGIzY2E5OWEuLmFlNTljNTkgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NUeXBlcy5oCkBAIC02NSw2ICs2NSw2IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBTdHJpbmcgbGluZUpvaW5OYW1lKExpbmVKb2luKTsKICAgICBib29sIHBh
cnNlTGluZUpvaW4oY29uc3QgU3RyaW5nJiwgTGluZUpvaW4mKTsKIAotfQorfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvUGF0aC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKaW5kZXggNzM0MzA2
ZS4uNGVmZDM0MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKQEAgLTk4LDggKzk4LDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9p
bnQmKTsKICAgICAgICAgdm9pZCBhZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYpOwotICAgICAg
ICB2b2lkIGFkZFF1YWRDdXJ2ZVRvKGNvbnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludCwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpOwotICAgICAgICB2b2lkIGFkZEJlemllckN1cnZlVG8oY29u
c3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBv
aW50MiwgY29uc3QgRmxvYXRQb2ludCYpOworICAgICAgICB2b2lkIGFkZFF1YWRDdXJ2ZVRvKGNv
bnN0IEZsb2F0UG9pbnQmIGNvbnRyb2xQb2ludCwgY29uc3QgRmxvYXRQb2ludCYgZW5kUG9pbnQp
OworICAgICAgICB2b2lkIGFkZEJlemllckN1cnZlVG8oY29uc3QgRmxvYXRQb2ludCYgY29udHJv
bFBvaW50MSwgY29uc3QgRmxvYXRQb2ludCYgY29udHJvbFBvaW50MiwgY29uc3QgRmxvYXRQb2lu
dCYgZW5kUG9pbnQpOwogICAgICAgICB2b2lkIGFkZEFyY1RvKGNvbnN0IEZsb2F0UG9pbnQmLCBj
b25zdCBGbG9hdFBvaW50JiwgZmxvYXQgcmFkaXVzKTsKICAgICAgICAgdm9pZCBjbG9zZVN1YnBh
dGgoKTsKIApAQCAtMTA5LDkgKzEwOSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAg
ICB2b2lkIHRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmKTsKIAotICAgICAgICB2b2lkIHNldFdp
bmRpbmdSdWxlKFdpbmRSdWxlIHJ1bGUpIHsgbV9ydWxlID0gcnVsZTsgfQotICAgICAgICBXaW5k
UnVsZSB3aW5kaW5nUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZTsgfQotCiAgICAgICAgIFN0
cmluZyBkZWJ1Z1N0cmluZygpIGNvbnN0OwogCiAgICAgICAgIFBsYXRmb3JtUGF0aCogcGxhdGZv
cm1QYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoOyB9CkBAIC0xMjgsNyArMTI1LDYgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUGxhdGZvcm1QYXRoKiBt
X3BhdGg7Ci0gICAgICAgIFdpbmRSdWxlIG1fcnVsZTsKICAgICB9OwogCiB9CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BhdHRlcm4uaCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0dGVybi5oCmluZGV4IGIxNWVlODQuLjNjMjBiNmUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0dGVybi5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvUGF0dGVybi5oCkBAIC0yNyw3ICsyNyw4IEBACiAjaWZuZGVmIFBhdHRlcm5faAog
I2RlZmluZSBQYXR0ZXJuX2gKIAotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1
ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CiAKICNpZiBQTEFURk9STShDRykKQEAgLTU2LDE3ICs1NywyMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogICAgIGNs
YXNzIEltYWdlOwogCi0gICAgY2xhc3MgUGF0dGVybiA6IE5vbmNvcHlhYmxlIHsKKyAgICBjbGFz
cyBQYXR0ZXJuIDogcHVibGljIFJlZkNvdW50ZWQ8UGF0dGVybj4gewogICAgIHB1YmxpYzoKLSAg
ICAgICAgUGF0dGVybihJbWFnZSosIGJvb2wgcmVwZWF0WCwgYm9vbCByZXBlYXRZKTsKLQorICAg
ICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQYXR0ZXJuPiBjcmVhdGUoSW1hZ2UqIHRpbGVJbWFnZSwg
Ym9vbCByZXBlYXRYLCBib29sIHJlcGVhdFkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgUGF0dGVybih0aWxlSW1hZ2UsIHJlcGVhdFgsIHJlcGVhdFkpKTsKKyAg
ICAgICAgfQogICAgICAgICB2aXJ0dWFsIH5QYXR0ZXJuKCk7Ci0gICAgICAgIAorCiAgICAgICAg
IEltYWdlKiB0aWxlSW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX3RpbGVJbWFnZS5nZXQoKTsgfQog
CiAgICAgICAgIFBsYXRmb3JtUGF0dGVyblB0ciBjcmVhdGVQbGF0Zm9ybVBhdHRlcm4oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtKSBjb25zdDsKIAogICAgIHByaXZhdGU6
CisgICAgICAgIFBhdHRlcm4oSW1hZ2UqLCBib29sIHJlcGVhdFgsIGJvb2wgcmVwZWF0WSk7CisK
ICAgICAgICAgUmVmUHRyPEltYWdlPiBtX3RpbGVJbWFnZTsKICAgICAgICAgYm9vbCBtX3JlcGVh
dFg7CiAgICAgICAgIGJvb2wgbV9yZXBlYXRZOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAppbmRleCBjMjRjZWY2Li41OTkxOTI0IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENH
LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dENH
LmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+CiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkFmZmluZVRy
YW5zZm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dFByaXZhdGUuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVBy
aXZhdGVDRy5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgpA
QCAtMTA3LDYgKzEwOSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1T
dGF0ZSgpCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVy
Lgogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
CisgICAgLy8gVE9ETyhlc2VpZGVsKTogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBoYW5kbGUgcGF0
dGVybnMgYW5kIGdyYWRpZW50cworICAgIC8vIGxpa2UgZHJhd1BhdGggZG9lcywgaXQgcHJvYmFi
bHkgc2hvdWxkLgogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMjYxLDE0ICsyNjUsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2Uo
Y29uc3QgSW50UmVjdCYgcmVjdCkKICAgICBDR0NvbnRleHRBZGRBcmMoY29udGV4dCwgcmVjdC54
KCkgKyByLCByZWN0LnkoKSArIHIsIHIsIDAuMGYsIDIuMGYgKiBwaUZsb2F0LCAwKTsKICAgICBD
R0NvbnRleHRDbG9zZVBhdGgoY29udGV4dCk7CiAKLSAgICBpZiAoZmlsbENvbG9yKCkuYWxwaGEo
KSkgewotICAgICAgICBpZiAoc3Ryb2tlU3R5bGUoKSAhPSBOb1N0cm9rZSkKLSAgICAgICAgICAg
IC8vIHN0cm9rZSBhbmQgZmlsbAotICAgICAgICAgICAgQ0dDb250ZXh0RHJhd1BhdGgoY29udGV4
dCwga0NHUGF0aEZpbGxTdHJva2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBDR0NvbnRl
eHRGaWxsUGF0aChjb250ZXh0KTsKLSAgICB9IGVsc2UgaWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9T
dHJva2UpCi0gICAgICAgIENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CisgICAgZHJhd1Bh
dGgoKTsKIH0KIAogCkBAIC0zODEsMjkgKzM3OCwxMjUgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBucG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2lu
dHMKICAgICAgICAgQ0dDb250ZXh0QWRkTGluZVRvUG9pbnQoY29udGV4dCwgcG9pbnRzW2ldLngo
KSwgcG9pbnRzW2ldLnkoKSk7CiAgICAgQ0dDb250ZXh0Q2xvc2VQYXRoKGNvbnRleHQpOwogCi0g
ICAgaWYgKGZpbGxDb2xvcigpLmFscGhhKCkpIHsKLSAgICAgICAgaWYgKHN0cm9rZVN0eWxlKCkg
IT0gTm9TdHJva2UpCi0gICAgICAgICAgICBDR0NvbnRleHREcmF3UGF0aChjb250ZXh0LCBrQ0dQ
YXRoRU9GaWxsU3Ryb2tlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgQ0dDb250ZXh0RU9G
aWxsUGF0aChjb250ZXh0KTsKLSAgICB9IGVsc2UKLSAgICAgICAgQ0dDb250ZXh0U3Ryb2tlUGF0
aChjb250ZXh0KTsKKyAgICBkcmF3UGF0aCgpOwogCiAgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0
ZShjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKK3N0YXRpYyBpbmxpbmUgYm9vbCBjYWxj
dWxhdGVEcmF3aW5nTW9kZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUsIENHUGF0
aERyYXdpbmdNb2RlJiBtb2RlKQoreworICAgIGJvb2wgc2hvdWxkRmlsbCA9IHN0YXRlLmZpbGxD
b2xvclNwYWNlID09IFBhdHRlcm5Db2xvclNwYWNlIHx8IHN0YXRlLmZpbGxDb2xvci5hbHBoYSgp
OworICAgIGJvb2wgc2hvdWxkU3Ryb2tlID0gc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSA9PSBQYXR0
ZXJuQ29sb3JTcGFjZSB8fCAoc3RhdGUuc3Ryb2tlU3R5bGUgIT0gTm9TdHJva2UgJiYgc3RhdGUu
c3Ryb2tlQ29sb3IuYWxwaGEoKSk7CisgICAgYm9vbCB1c2VFT0ZpbGwgPSBzdGF0ZS5maWxsUnVs
ZSA9PSBSVUxFX0VWRU5PREQ7CisKKyAgICBpZiAoc2hvdWxkRmlsbCkgeworICAgICAgICBpZiAo
c2hvdWxkU3Ryb2tlKSB7CisgICAgICAgICAgICBpZiAodXNlRU9GaWxsKQorICAgICAgICAgICAg
ICAgIG1vZGUgPSBrQ0dQYXRoRU9GaWxsU3Ryb2tlOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIG1vZGUgPSBrQ0dQYXRoRmlsbFN0cm9rZTsKKyAgICAgICAgfSBlbHNlIHsgLy8g
ZmlsbCwgbm8gc3Ryb2tlCisgICAgICAgICAgICBpZiAodXNlRU9GaWxsKQorICAgICAgICAgICAg
ICAgIG1vZGUgPSBrQ0dQYXRoRU9GaWxsOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIG1vZGUgPSBrQ0dQYXRoRmlsbDsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoc2hvdWxk
U3Ryb2tlKSAvLyBubyBmaWxsLCBqdXN0IHN0cm9rZQorICAgICAgICBtb2RlID0ga0NHUGF0aFN0
cm9rZTsKKworICAgIHJldHVybiBzaG91bGRGaWxsIHx8IHNob3VsZFN0cm9rZTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKGNvbG9yLmFscGhhKCkpIHsKLSAgICAgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICAgICAgQ29sb3Ig
b2xkRmlsbENvbG9yID0gZmlsbENvbG9yKCk7Ci0gICAgICAgIGlmIChvbGRGaWxsQ29sb3IgIT0g
Y29sb3IpCi0gICAgICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBjb2xvcik7Ci0gICAg
ICAgIENHQ29udGV4dEZpbGxSZWN0KGNvbnRleHQsIHJlY3QpOwotICAgICAgICBpZiAob2xkRmls
bENvbG9yICE9IGNvbG9yKQotICAgICAgICAgICAgc2V0Q0dGaWxsQ29sb3IoY29udGV4dCwgb2xk
RmlsbENvbG9yKTsKKworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0
KCk7CisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlID0gbV9jb21tb24tPnN0
YXRlOworCisgICAgaWYgKHN0YXRlLmZpbGxDb2xvclNwYWNlID09IEdyYWRpZW50Q29sb3JTcGFj
ZSB8fCBzdGF0ZS5zdHJva2VDb2xvclNwYWNlID09IEdyYWRpZW50Q29sb3JTcGFjZSkgeworICAg
ICAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBvcHRpbWl6ZWQgd2F5IHRvIGZpbGwgJiBzdHJva2Ug
YSBwYXRoIHVzaW5nIGdyYWRpZW50cworICAgICAgICBmaWxsUGF0aCgpOworICAgICAgICBzdHJv
a2VQYXRoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDR1BhdGhEcmF3aW5nTW9k
ZSBkcmF3aW5nTW9kZTsKKyAgICBpZiAoY2FsY3VsYXRlRHJhd2luZ01vZGUoc3RhdGUsIGRyYXdp
bmdNb2RlKSkKKyAgICAgICAgQ0dDb250ZXh0RHJhd1BhdGgoY29udGV4dCwgZHJhd2luZ01vZGUp
OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFBhdGhXaXRoRmlsbFJ1bGUoQ0dDb250ZXh0
UmVmIGNvbnRleHQsIFdpbmRSdWxlIGZpbGxSdWxlKQoreworICAgIGlmIChmaWxsUnVsZSA9PSBS
VUxFX0VWRU5PREQpCisgICAgICAgIENHQ29udGV4dEVPRmlsbFBhdGgoY29udGV4dCk7CisgICAg
ZWxzZQorICAgICAgICBDR0NvbnRleHRGaWxsUGF0aChjb250ZXh0KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29u
dGV4dCgpOworICAgIHN3aXRjaCAobV9jb21tb24tPnN0YXRlLmZpbGxDb2xvclNwYWNlKSB7Cisg
ICAgY2FzZSBTb2xpZENvbG9yU3BhY2U6CisgICAgICAgIGlmICghZmlsbENvbG9yKCkuYWxwaGEo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgY2Fz
ZSBQYXR0ZXJuQ29sb3JTcGFjZToKKyAgICAgICAgZmlsbFBhdGhXaXRoRmlsbFJ1bGUoY29udGV4
dCwgZmlsbFJ1bGUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhZGllbnRDb2xvclNw
YWNlOgorICAgICAgICBpZiAoZmlsbFJ1bGUoKSA9PSBSVUxFX0VWRU5PREQpCisgICAgICAgICAg
ICBDR0NvbnRleHRFT0NsaXAoY29udGV4dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIENH
Q29udGV4dENsaXAoY29udGV4dCk7CisgICAgICAgIENHQ29udGV4dERyYXdTaGFkaW5nKGNvbnRl
eHQsIG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQtPnBsYXRmb3JtR3JhZGllbnQoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBh
dGgoKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7CisgICAgc3dpdGNo
IChtX2NvbW1vbi0+c3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSkgeworICAgIGNhc2UgU29saWRDb2xv
clNwYWNlOgorICAgICAgICBpZiAoIWZpbGxDb2xvcigpLmFscGhhKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIC8vIGZhbGwgdGhyb3VnaAorICAgIGNhc2UgUGF0dGVybkNvbG9yU3Bh
Y2U6CisgICAgICAgIENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgorICAgICAgICBDR0NvbnRleHRSZXBsYWNl
UGF0aFdpdGhTdHJva2VkUGF0aChjb250ZXh0KTsKKyAgICAgICAgQ0dDb250ZXh0Q2xpcChjb250
ZXh0KTsKKyAgICAgICAgQ0dDb250ZXh0RHJhd1NoYWRpbmcoY29udGV4dCwgbV9jb21tb24tPnN0
YXRlLnN0cm9rZUdyYWRpZW50LT5wbGF0Zm9ybUdyYWRpZW50KCkpOworICAgICAgICBicmVhazsK
KyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIHN3aXRjaCAobV9jb21tb24tPnN0YXRlLmZpbGxDb2xvclNwYWNlKSB7CisgICAgY2Fz
ZSBTb2xpZENvbG9yU3BhY2U6CisgICAgICAgIGlmIChmaWxsQ29sb3IoKS5hbHBoYSgpKQorICAg
ICAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QocGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBhdHRlcm5Db2xvclNwYWNlOgorICAgICAgICBDR0NvbnRl
eHRGaWxsUmVjdChwbGF0Zm9ybUNvbnRleHQoKSwgcmVjdCk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgR3JhZGllbnRDb2xvclNwYWNlOgorICAgICAgICBjbGlwKHJlY3QpOworICAgICAgICBD
R0NvbnRleHREcmF3U2hhZGluZyhwbGF0Zm9ybUNvbnRleHQoKSwgbV9jb21tb24tPnN0YXRlLmZp
bGxHcmFkaWVudC0+cGxhdGZvcm1HcmFkaWVudCgpKTsKKyAgICAgICAgYnJlYWs7CiAgICAgfQog
fQogCkBAIC00MzMsMTMgKzUyNiwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5k
ZWRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZgogICAgICAg
ICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBjb2xvcik7CiAKICAgICBhZGRQYXRoKFBhdGg6OmNy
ZWF0ZVJvdW5kZWRSZWN0YW5nbGUocmVjdCwgdG9wTGVmdCwgdG9wUmlnaHQsIGJvdHRvbUxlZnQs
IGJvdHRvbVJpZ2h0KSk7Ci0gICAgQ0dDb250ZXh0RmlsbFBhdGgoY29udGV4dCk7CisgICAgZmls
bFBhdGgoKTsKIAogICAgIGlmIChvbGRGaWxsQ29sb3IgIT0gY29sb3IpCiAgICAgICAgIHNldENH
RmlsbENvbG9yKGNvbnRleHQsIG9sZEZpbGxDb2xvcik7CiB9CiAKLQogdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCkBAIC05MTAsOSArMTAwMiwxNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUoaW50IG1vZGUpCiAgICAgfQogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mIHBhdHRlcm4pCisv
LyBUT0RPKGVzZWlkZWwpOiBJdCBpcyB1bmNsZWFyIGlmIHNldHRpbmcgcGF0dGVybnMgb24gdGhl
IENHQ29udGV4dCBhdAorLy8gc2V0U3Ryb2tlUGF0dGVybi9zZXRGaWxsUGF0dGVybiB0aW1lIGlz
IHNhZmUuICBPdXIgUGF0dGVybiBvYmplY3QgY3VycmVudGx5CisvLyBkZXBlbmRzIG9uIHRoZSBD
VE0gZm9yIENHU2hhZGluZyBjcmVhdGlvbiwgdGh1cyBzZXR0aW5nIGEgcGF0dGVybiBhbmQgdGhl
bgorLy8gdHJhbnNmb3JtaW5nIHRoZSBHcmFwaGljc0NvbnRleHQgbWF5IGNhdXNlIHRoZSBwYXR0
ZXJuIHRvIGRyYXcgaW5jb3JyZWN0bHkuCisvLyBJIGJlbGlldmUgd2UgY2FuIGZpeCBvdXIgUGF0
dGVybiBvYmplY3QgdG8gbm90IGRlcGVuZCBvbiB0aGUgQ1RNLgordm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU3Ryb2tlUGF0dGVybihQYXR0ZXJuKiBwYXR0ZXJuKQogewotICAgIENH
UGF0dGVyblJlZiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLmNyZWF0ZVBsYXRmb3JtUGF0dGVy
bihnZXRDVE0oKSk7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJu
OworICAgIENHUGF0dGVyblJlZiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLT5jcmVhdGVQbGF0
Zm9ybVBhdHRlcm4oZ2V0Q1RNKCkpOwogICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTkyNSw5ICsxMDI0LDExIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojph
cHBseVN0cm9rZVBhdHRlcm4oY29uc3QgUGF0dGVybiYgcGF0dGVybikKICAgICBDR1BhdHRlcm5S
ZWxlYXNlKHBsYXRmb3JtUGF0dGVybik7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBs
eUZpbGxQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mIHBhdHRlcm4pCit2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0UGxhdGZvcm1GaWxsUGF0dGVybihQYXR0ZXJuKiBwYXR0ZXJuKQogewotICAgIENHUGF0
dGVyblJlZiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLmNyZWF0ZVBsYXRmb3JtUGF0dGVybihn
ZXRDVE0oKSk7CisgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIENHUGF0dGVyblJlZiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLT5jcmVhdGVQbGF0Zm9y
bVBhdHRlcm4oZ2V0Q1RNKCkpOwogICAgIGlmICghcGxhdGZvcm1QYXR0ZXJuKQogICAgICAgICBy
ZXR1cm47CiAKQEAgLTk0MCw2ICsxMDQxLDE4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBs
eUZpbGxQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mIHBhdHRlcm4pCiAgICAgQ0dQYXR0ZXJuUmVsZWFz
ZShwbGF0Zm9ybVBhdHRlcm4pOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TdHJva2VHcmFkaWVudChHcmFkaWVudCopCit7CisgICAgLy8gQ29yZUdyYXBoaWNzIGRvZXMg
bm90IHN1cHBvcnQgc2V0dGluZyBhICJzdHJva2UgZ3JhZGllbnQiLCBvbmx5CisgICAgLy8gZmls
bGluZyBhIGNsaXAgcmVnaW9uIHdpdGggYSBncmFkaWVudCwgd2hpY2ggd2UgZG8gYXQgZHJhdyB0
aW1lCit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxHcmFkaWVudChH
cmFkaWVudCopCit7CisgICAgLy8gQ29yZUdyYXBoaWNzIGRvZXMgbm90IHN1cHBvcnQgc2V0dGlu
ZyBhICJmaWxsIGdyYWRpZW50Iiwgb25seQorICAgIC8vIGZpbGxpbmcgYSBjbGlwIHJlZ2lvbiB3
aXRoIGEgZ3JhZGllbnQsIHdoaWNoIHdlIGRvIGF0IGRyYXcgdGltZQorfQorCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCiB7
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
</data>
<flag name="review"
          id="10255"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23042</attachid>
            <date>2008-08-27 15:00:05 -0700</date>
            <delta_ts>2008-08-28 04:31:26 -0700</delta_ts>
            <desc>Qt and Cairo support from krit (and blind stab @ wx compile support)</desc>
            <filename>Qt-and-Cairo-support-from-krit-and-blind-stab-wx-compile-support-.patch</filename>
            <type>text/plain</type>
            <size>15207</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">NWE1MTAxZWZlOWVmMTViZDQ4MGMwN2FkMThhMDkxNDNiYWI3OGU3ZgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3ZjM5ZTNmLi41ZTBlYjE3
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMiw2ICsyLDUyIEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAK
KyAgICAgICAgUXQgYW5kIENhaXJvIHN1cHBvcnQgZnJvbSBrcml0IChhbmQgYmxpbmQgc3RhYiBA
IHd4IGNvbXBpbGUgc3VwcG9ydCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwMzczCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9H
cmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmZpbGxQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdQYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjppbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxs
UGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U3Ryb2tlUGF0dGVybik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtRmlsbEdyYWRpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1TdHJva2VHcmFkaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9r
ZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbFBhdHRlcm4pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVBhdHRlcm4pOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxHcmFkaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tl
R3JhZGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRJbWFnZUlu
dGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
d3gvR3JhcGhpY3NDb250ZXh0V3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjppbWFnZUludGVycG9sYXRpb25RdWFsaXR5KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzdHJva2VQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd1BhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUmVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbFBh
dHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0
cm9rZVBhdHRlcm4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0
Zm9ybUZpbGxHcmFkaWVudCk6CisKKzIwMDgtMDgtMjcgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJr
aXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAg
IEFkZCBzdHJva2UvZmlsbCBHcmFkaWVudCBhbmQgUGF0dGVybiBzdXBwb3J0IHRvIEdyYXBoaWNz
Q29udGV4dCBhbmQgdXBkYXRlIDxjYW52YXM+IHRvIHVzZSBpdC4KICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzczCiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKaW5k
ZXggMTdkNjhkNS4uMDY2MTM3OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKQEAgLTUxLDYgKzUxLDcgQEAK
ICNlbGlmIFBMQVRGT1JNKFdJTikKICNpbmNsdWRlIDxjYWlyby13aW4zMi5oPgogI2VuZGlmCisj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZUNhaXJvLmgiCiAKICNpZm5kZWYgTV9QSQpAQCAtMzU1LDEzICsz
NTYsNzAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBu
cG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMKICAgICBjYWlyb19yZXN0b3JlKGNyKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvcikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCgpCiB7
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KGNvbG9yLmFscGhhKCkpCi0gICAgICAgIGZpbGxSZWN0U291cmNlT3ZlcihtX2RhdGEtPmNyLCBy
ZWN0LCBjb2xvcik7CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOworCisgICAgc3dpdGNo
IChtX2NvbW1vbi0+c3RhdGUuZmlsbENvbG9yU3BhY2UpIHsKKyAgICBjYXNlIFNvbGlkQ29sb3JT
cGFjZToKKyAgICAgICAgaWYgKGZpbGxDb2xvcigpLmFscGhhKCkpIHsKKyAgICAgICAgICAgIHNl
dENvbG9yKGNyLCBmaWxsQ29sb3IoKSk7CisgICAgICAgICAgICBjYWlyb19maWxsKGNyKTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFBhdHRlcm5Db2xvclNwYWNlOgorICAg
ICAgICBjYWlyb19zZXRfc291cmNlKGNyLCBtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4uZ2V0
KCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSkpOworICAgICAgICBjYWlyb19maWxs
KGNyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFkaWVudENvbG9yU3BhY2U6CisgICAg
ICAgIGNhaXJvX3NldF9zb3VyY2UoY3IsIG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQuZ2V0
KCktPnBsYXRmb3JtR3JhZGllbnQoKSk7CisgICAgICAgIGNhaXJvX2ZpbGwoY3IpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJva2VQYXRoKCkK
K3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBj
YWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CisKKyAgICBzd2l0Y2ggKG1fY29tbW9uLT5zdGF0ZS5z
dHJva2VDb2xvclNwYWNlKSB7CisgICAgY2FzZSBTb2xpZENvbG9yU3BhY2U6CisgICAgICAgIGlm
IChzdHJva2VDb2xvcigpLmFscGhhKCkpIHsKKyAgICAgICAgICAgIHNldENvbG9yKGNyLCBzdHJv
a2VDb2xvcigpKTsKKyAgICAgICAgICAgIGNhaXJvX3N0cm9rZShjcik7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQYXR0ZXJuQ29sb3JTcGFjZToKKyAgICAgICAgY2Fpcm9f
c2V0X3NvdXJjZShjciwgbV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0KCktPmNyZWF0
ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSkpOworICAgICAgICBjYWlyb19zdHJva2UoY3IpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyYWRpZW50Q29sb3JTcGFjZToKKyAgICAgICAgY2Fp
cm9fc2V0X3NvdXJjZShjciwgbV9jb21tb24tPnN0YXRlLnN0cm9rZUdyYWRpZW50LmdldCgpLT5w
bGF0Zm9ybUdyYWRpZW50KCkpOworICAgICAgICBjYWlyb19zdHJva2UoY3IpOworICAgICAgICBi
cmVhazsKKyAgICB9Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3UGF0aCgpCit7Cisg
ICAgZmlsbFBhdGgoKTsKKyAgICBzdHJva2VQYXRoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEt
PmNyOworICAgIGNhaXJvX3JlY3RhbmdsZShjciwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0Lndp
ZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGZpbGxQYXRoKCk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBj
b2xvcikKQEAgLTQ5NywzMyArNTU1LDE2IEBAIEludFBvaW50IEdyYXBoaWNzQ29udGV4dDo6b3Jp
Z2luKCkKICAgICByZXR1cm4gSW50UG9pbnQoc3RhdGljX2Nhc3Q8aW50PihtYXRyaXgueDApLCBz
dGF0aWNfY2FzdDxpbnQ+KG1hdHJpeC55MCkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6
YXBwbHlTdHJva2VQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mIHBhdHRlcm4pCi17Ci0gICAgY2Fpcm9f
cGF0dGVybl90KiBwbGF0Zm9ybVBhdHRlcm4gPSBwYXR0ZXJuLmNyZWF0ZVBsYXRmb3JtUGF0dGVy
bihnZXRDVE0oKSk7Ci0gICAgaWYgKCFwbGF0Zm9ybVBhdHRlcm4pCi0gICAgICAgIHJldHVybjsK
LQotICAgIGNhaXJvX3NldF9zb3VyY2UocGxhdGZvcm1Db250ZXh0KCksIHBsYXRmb3JtUGF0dGVy
bik7Ci0gICAgY2Fpcm9fcGF0dGVybl9kZXN0cm95KHBsYXRmb3JtUGF0dGVybik7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjphcHBseUZpbGxQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mIHBhdHRl
cm4pCi17Ci0gICAgLy8gVGhlIENhaXJvIGNvZGVwYXRoIGRvZXNuJ3Qgc2VlbSB0byBzdXBwb3J0
IHNlcGFyYXRlIHN0cm9rZS9maWxsPwotICAgIC8vIFRoZSBjb2RlIEkgcmVmYWN0b3JlZCB0byBj
cmVhdGUgdGhlc2UgbWV0aG9kcyB3YXMgaWRlbnRpY2FsIGZvciBDYWlybwotICAgIGFwcGx5U3Ry
b2tlUGF0dGVybihwYXR0ZXJuKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRm
b3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2wpCiB7Ci0gICAgLy8gRklYTUU6IHRoaXMgaXMg
cHJvYmFibHkgYSBuby1vcCBidXQgSSdtIG5vdCBzdXJlCi0gICAgLy8gbm90SW1wbGVtZW50ZWQo
KTsgLy8gY29tbWVudGVkLW91dCBiZWNhdXNlIGl0J3MgY2hhdHR5IGFuZCBjbHV0dGVycyBvdXRw
dXQKKyAgICAvLyBDYWlybyBjb250ZXh0cyBjYW4ndCBob2xkIHNlcGFyYXRlIGZpbGwgYW5kIHN0
cm9rZSBjb2xvcnMKKyAgICAvLyBzbyB3ZSBzZXQgdGhlbSBqdXN0IGJlZm9yZSB3ZSBhY3R1YWxs
eSBmaWxsIG9yIHN0cm9rZQogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
dHJva2VDb2xvcihjb25zdCBDb2xvciYgY29sKQogewotICAgIC8vIEZJWE1FOiB0aGlzIGlzIHBy
b2JhYmx5IGEgbm8tb3AgYnV0IEknbSBub3Qgc3VyZQotICAgIC8vbm90SW1wbGVtZW50ZWQoKTsg
Ly8gY29tbWVudGVkLW91dCBiZWNhdXNlIGl0J3MgY2hhdHR5IGFuZCBjbHV0dGVycyBvdXRwdXQK
KyAgICAvLyBDYWlybyBjb250ZXh0cyBjYW4ndCBob2xkIHNlcGFyYXRlIGZpbGwgYW5kIHN0cm9r
ZSBjb2xvcnMKKyAgICAvLyBzbyB3ZSBzZXQgdGhlbSBqdXN0IGJlZm9yZSB3ZSBhY3R1YWxseSBm
aWxsIG9yIHN0cm9rZQogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJv
a2VUaGlja25lc3MoZmxvYXQgc3Ryb2tlVGhpY2tuZXNzKQpAQCAtNTU2LDkgKzU5Nyw2IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKGNvbnN0IFN0cm9rZVN0
eWxlJiBzdHJva2VTdHlsZSkKICAgICBjYXNlIERhc2hlZFN0cm9rZToKICAgICAgICAgY2Fpcm9f
c2V0X2Rhc2gobV9kYXRhLT5jciwgZGFzaFBhdHRlcm4sIDIsIDApOwogICAgICAgICBicmVhazsK
LSAgICBkZWZhdWx0OgotICAgICAgICBub3RJbXBsZW1lbnRlZCgpOwotICAgICAgICBicmVhazsK
ICAgICB9CiB9CiAKQEAgLTY2NSw5ICs3MDMsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ry
b2tlUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQogICAgIGNhaXJvX3Qq
IGNyID0gbV9kYXRhLT5jcjsKICAgICBjYWlyb19zYXZlKGNyKTsKICAgICBjYWlyb19yZWN0YW5n
bGUoY3IsIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsK
LSAgICBzZXRDb2xvcihjciwgc3Ryb2tlQ29sb3IoKSk7CiAgICAgY2Fpcm9fc2V0X2xpbmVfd2lk
dGgoY3IsIHdpZHRoKTsKLSAgICBjYWlyb19zdHJva2UoY3IpOworICAgIHN0cm9rZVBhdGgoKTsK
ICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KIApAQCAtOTExLDYgKzk0OCwzMiBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0VXNlQW50aWFsaWFzaW5nKGJvb2wgZW5hYmxlKQogICAgIGNhaXJv
X3NldF9hbnRpYWxpYXMobV9kYXRhLT5jciwgZW5hYmxlID8gQ0FJUk9fQU5USUFMSUFTX0RFRkFV
TFQgOiBDQUlST19BTlRJQUxJQVNfTk9ORSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5KQoreworfQor
CitJbnRlcnBvbGF0aW9uUXVhbGl0eSBHcmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJwb2xhdGlv
blF1YWxpdHkoKSBjb25zdAoreworICAgIHJldHVybiBJbnRlcnBvbGF0aW9uRGVmYXVsdDsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbFBhdHRlcm4oUGF0dGVybiog
cGF0dGVybikKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tl
UGF0dGVybihQYXR0ZXJuKiBwYXR0ZXJuKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0UGxhdGZvcm1GaWxsR3JhZGllbnQoR3JhZGllbnQqIGdyYWRpZW50KQoreworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VHcmFkaWVudChHcmFkaWVudCogZ3Jh
ZGllbnQpCit7Cit9CisKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gUExB
VEZPUk0oQ0FJUk8pCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dy
YXBoaWNzQ29udGV4dFF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0UXQuY3BwCmluZGV4IDczNWMwNTkuLjRkZDExM2QgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0UXQuY3BwCkBAIC00Myw2ICs0
Myw3IEBACiAjaW5jbHVkZSAiUGF0dGVybi5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0UHJpdmF0ZS5o
IgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUg
IlBlbi5oIgpAQCAtNDk1LDEyICs0OTYsNzEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdD
b252ZXhQb2x5Z29uKHNpemVfdCBucG9pbnRzLCBjb25zdCBGbG9hdFBvaW50KiBwb2ludHMKICAg
ICBwLT5yZXN0b3JlKCk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25z
dCBJbnRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgYykKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojpm
aWxsUGF0aCgpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbV9kYXRhLT5wKCktPmZpbGxSZWN0KHJlY3QsIFFDb2xvcihjKSk7CisgICAgUVBh
aW50ZXIgKnAgPSBtX2RhdGEtPnAoKTsKKyAgICBRUGFpbnRlclBhdGggcGF0aCA9IG1fZGF0YS0+
Y3VycmVudFBhdGg7CisKKyAgICBzd2l0Y2ggKG1fY29tbW9uLT5zdGF0ZS5maWxsQ29sb3JTcGFj
ZSkgeworICAgIGNhc2UgU29saWRDb2xvclNwYWNlOgorICAgICAgICBpZiAoZmlsbENvbG9yKCku
YWxwaGEoKSkKKyAgICAgICAgICAgIHAtPmZpbGxQYXRoKHBhdGgsIHAtPmJydXNoKCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFBhdHRlcm5Db2xvclNwYWNlOgorICAgICAgICBwLT5maWxs
UGF0aChwYXRoLCBRQnJ1c2goKihtX2NvbW1vbi0+c3RhdGUuZmlsbFBhdHRlcm4uZ2V0KCktPmNy
ZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSkpKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JhZGllbnRDb2xvclNwYWNlOgorICAgICAgICBwLT5maWxsUGF0aChwYXRoLCBRQnJ1c2go
KihtX2NvbW1vbi0+c3RhdGUuZmlsbEdyYWRpZW50LmdldCgpLT5wbGF0Zm9ybUdyYWRpZW50KCkp
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0
cm9rZVBhdGgoKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIFFQYWludGVyICpwID0gbV9kYXRhLT5wKCk7CisgICAgUVBhaW50ZXJQYXRoIHBh
dGggPSBtX2RhdGEtPmN1cnJlbnRQYXRoOworCisgICAgc3dpdGNoIChtX2NvbW1vbi0+c3RhdGUu
c3Ryb2tlQ29sb3JTcGFjZSkgeworICAgIGNhc2UgU29saWRDb2xvclNwYWNlOgorICAgICAgICBp
ZiAoc3Ryb2tlQ29sb3IoKS5hbHBoYSgpKQorICAgICAgICAgICAgcC0+c3Ryb2tlUGF0aChwYXRo
LCBwLT5wZW4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUGF0dGVybkNvbG9yU3BhY2U6
CisgICAgICAgIHAtPnNldEJydXNoKCoobV9jb21tb24tPnN0YXRlLnN0cm9rZVBhdHRlcm4uZ2V0
KCktPmNyZWF0ZVBsYXRmb3JtUGF0dGVybihnZXRDVE0oKSkpKTsKKyAgICAgICAgcC0+c3Ryb2tl
UGF0aChwYXRoLCBwLT5wZW4oKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JhZGllbnRD
b2xvclNwYWNlOgorICAgICAgICBwLT5zZXRCcnVzaCgqKG1fY29tbW9uLT5zdGF0ZS5zdHJva2VH
cmFkaWVudC5nZXQoKS0+cGxhdGZvcm1HcmFkaWVudCgpKSk7CisgICAgICAgIHAtPnN0cm9rZVBh
dGgocGF0aCwgcC0+cGVuKCkpOworICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCit7CisgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUVBhaW50ZXIgKnAg
PSBtX2RhdGEtPnAoKTsKKworICAgIHN3aXRjaCAobV9jb21tb24tPnN0YXRlLmZpbGxDb2xvclNw
YWNlKSB7CisgICAgY2FzZSBTb2xpZENvbG9yU3BhY2U6CisgICAgICAgIGlmIChmaWxsQ29sb3Io
KS5hbHBoYSgpKQorICAgICAgICAgICAgcC0+ZmlsbFJlY3QocmVjdCwgcC0+YnJ1c2goKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUGF0dGVybkNvbG9yU3BhY2U6CisgICAgICAgIHAtPmZp
bGxSZWN0KHJlY3QsIFFCcnVzaCgqKG1fY29tbW9uLT5zdGF0ZS5maWxsUGF0dGVybi5nZXQoKS0+
Y3JlYXRlUGxhdGZvcm1QYXR0ZXJuKGdldENUTSgpKSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBHcmFkaWVudENvbG9yU3BhY2U6CisgICAgICAgIHAtPmZpbGxSZWN0KHJlY3QsIFFCcnVz
aCgqKG1fY29tbW9uLT5zdGF0ZS5maWxsR3JhZGllbnQuZ2V0KCktPnBsYXRmb3JtR3JhZGllbnQo
KSkpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgYykKQEAgLTUzNSwx
MSArNTk1LDYgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQ6OmluVHJhbnNwYXJlbmN5TGF5ZXIoKSBj
b25zdAogICAgIHJldHVybiAhbV9kYXRhLT5sYXllcnMuaXNFbXB0eSgpOwogfQogCi12b2lkIEdy
YXBoaWNzQ29udGV4dDo6c2V0RmlsbFJ1bGUoV2luZFJ1bGUgcnVsZSkKLXsKLSAgICBtX2RhdGEt
PmN1cnJlbnRQYXRoLnNldEZpbGxSdWxlKHJ1bGUgPT0gUlVMRV9FVkVOT0REID8gUXQ6Ok9kZEV2
ZW5GaWxsIDogUXQ6OldpbmRpbmdGaWxsKTsKLX0KLQogUGxhdGZvcm1QYXRoKiBHcmFwaGljc0Nv
bnRleHQ6OmN1cnJlbnRQYXRoKCkKIHsKICAgICByZXR1cm4gJm1fZGF0YS0+Y3VycmVudFBhdGg7
CkBAIC03MDUsMTIgKzc2MCwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVjdChj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IHdpZHRoKQogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFFQYWludGVyICpwID0gbV9kYXRhLT5wKCk7
CiAgICAgUVBhaW50ZXJQYXRoIHBhdGg7CiAgICAgcGF0aC5hZGRSZWN0KHJlY3QpOwotICAgIFFQ
ZW4gblBlbiA9IHAtPnBlbigpOworICAgIFFQZW4gblBlbiA9IG1fZGF0YS0+cCgpLT5wZW4oKTsK
ICAgICBuUGVuLnNldFdpZHRoRih3aWR0aCk7Ci0gICAgcC0+c3Ryb2tlUGF0aChwYXRoLCBuUGVu
KTsKKworICAgIHN0cm9rZVBhdGgoKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldExp
bmVDYXAoTGluZUNhcCBsYykKQEAgLTg0OSw2ICs5MDQsMTYgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBPdXRFbGxpcHNlSW5SZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgcC0+c2V0
Q2xpcFBhdGgobmV3Q2xpcCwgUXQ6OkludGVyc2VjdENsaXApOwogfQogCit2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xpcFRvSW1hZ2VCdWZmZXIoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgSW1hZ2VC
dWZmZXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0OjpjbGlwVG9JbWFnZUJ1ZmZlcihjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBJbWFnZUJ1ZmZl
ciopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmFkZElubmVyUm91bmRlZFJlY3RDbGlwKGNvbnN0IEludFJlY3QmIHJlY3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRoaWNrbmVzcykKIHsKQEAg
LTkwOSw2ICs5NzQsMjIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tl
U3R5bGUoY29uc3QgU3Ryb2tlU3R5bGUmIHN0cm9rZVN0eWxlKQogICAgIHAtPnNldFBlbihuZXdQ
ZW4pOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsUGF0dGVybihQ
YXR0ZXJuKiBwYXR0ZXJuKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZv
cm1TdHJva2VQYXR0ZXJuKFBhdHRlcm4qIHBhdHRlcm4pCit7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxHcmFkaWVudChHcmFkaWVudCogZ3JhZGllbnQpCit7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZUdyYWRpZW50KEdyYWRp
ZW50KiBncmFkaWVudCkKK3sKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3Jt
U3Ryb2tlVGhpY2tuZXNzKGZsb2F0IHRoaWNrbmVzcykKIHsKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQpAQCAtOTI2LDIwICsxMDA3LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKICAgICBtX2RhdGEtPnAoKS0+c2V0
QnJ1c2goUUJydXNoKGNvbG9yKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0
cm9rZVBhdHRlcm4oY29uc3QgUGF0dGVybiYgcGF0dGVybikKLXsKLSAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5RmlsbFBhdHRlcm4oY29uc3QgUGF0dGVybiYgcGF0
dGVybikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgbm90SW1wbGVtZW50ZWQoKTsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVzZUFu
dGlhbGlhc2luZyhib29sIGVuYWJsZSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQpA
QCAtMTAzMyw2ICsxMTAwLDI0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZWxlYXNlV2luZG93
c0NvbnRleHQoSERDIGhkYywgY29uc3QgSW50UmVjdCYgZHN0UmVjdCwgYm9vCiB9CiAjZW5kaWYK
IAordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEltYWdlSW50ZXJwb2xhdGlvblF1YWxpdHkoSW50
ZXJwb2xhdGlvblF1YWxpdHkpCit7Cit9CisKK0ludGVycG9sYXRpb25RdWFsaXR5IEdyYXBoaWNz
Q29udGV4dDo6aW1hZ2VJbnRlcnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IEludGVycG9sYXRpb25EZWZhdWx0OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0SW1h
Z2VJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSkKK3sKK30KKworSW50
ZXJwb2xhdGlvblF1YWxpdHkgR3JhcGhpY3NDb250ZXh0OjppbWFnZUludGVycG9sYXRpb25RdWFs
aXR5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50ZXJwb2xhdGlvbkRlZmF1bHQ7Cit9CisKIH0K
IAogLy8gdmltOiB0cz00IHN3PTQgZXQKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd3gvR3JhcGhpY3NDb250ZXh0V3guY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAKaW5kZXggZThiZjI2Yy4uNDM4ZWVmMyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93eC9HcmFwaGljc0NvbnRleHRXeC5jcHAK
QEAgLTM1NCw2ICszNTQsMTEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXAoY29uc3QgUGF0
aCYpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBUb0ltYWdlQnVmZmVyKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEltYWdlQnVmZmVyKikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiBBZmZpbmVUcmFuc2Zvcm0gR3JhcGhpY3NDb250
ZXh0OjpnZXRDVE0oKSBjb25zdAogeyAKICAgICBub3RJbXBsZW1lbnRlZCgpOwpAQCAtNDc2LDE4
ICs0ODEsNDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFVzZUFudGlhbGlhc2luZyhib29s
IGVuYWJsZSkKICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6YXBwbHlGaWxsUGF0dGVybihjb25zdCBQYXR0ZXJuJikKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRJbWFnZUludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFsaXR5KQorewor
fQorCitJbnRlcnBvbGF0aW9uUXVhbGl0eSBHcmFwaGljc0NvbnRleHQ6OmltYWdlSW50ZXJwb2xh
dGlvblF1YWxpdHkoKSBjb25zdAoreworICAgIHJldHVybiBJbnRlcnBvbGF0aW9uRGVmYXVsdDsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKCkKK3sKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQ6OnN0cm9rZVBhdGgoKQogewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCi12b2lkIEdyYXBo
aWNzQ29udGV4dDo6YXBwbHlTdHJva2VQYXR0ZXJuKGNvbnN0IFBhdHRlcm4mKQordm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdQYXRoKCkKK3sKKyAgICBmaWxsUGF0aCgpOworICAgIHN0cm9rZVBh
dGgoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBs
YXRmb3JtRmlsbFBhdHRlcm4oUGF0dGVybiogcGF0dGVybikKK3sKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlUGF0dGVybihQYXR0ZXJuKiBwYXR0ZXJuKQorewor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsR3JhZGllbnQoR3JhZGll
bnQqIGdyYWRpZW50KQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
dHJva2VHcmFkaWVudChHcmFkaWVudCogZ3JhZGllbnQpCit7CiB9CiAKIH0K
</data>
<flag name="review"
          id="10256"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>