<?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>52627</bug_id>
          
          <creation_ts>2011-01-18 07:55:27 -0800</creation_ts>
          <short_desc>Accelerated canvas2D has bad clipping performance</short_desc>
          <delta_ts>2011-01-20 08:46:24 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Stephen White">senorblanco</reporter>
          <assigned_to name="Stephen White">senorblanco</assigned_to>
          <cc>abarth</cc>
    
    <cc>cmarrin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dimich</cc>
    
    <cc>eric</cc>
    
    <cc>jamesr</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>335827</commentid>
    <comment_count>0</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-01-18 07:55:27 -0800</bug_when>
    <thetext>Since our Canvas2D path does not implement clipping, all draws are done in software and uploaded, which is mighty slow for sites with lots of clipped, composited objects.

See also http://crbug.com/68735</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335831</commentid>
    <comment_count>1</comment_count>
      <attachid>79278</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-01-18 08:03:55 -0800</bug_when>
    <thetext>Created attachment 79278
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335832</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-18 08:05:40 -0800</bug_when>
    <thetext>Attachment 79278 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1

Source/WebCore/thirdparty/glu/libtess/sweep.c:256:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335835</commentid>
    <comment_count>3</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-01-18 08:09:03 -0800</bug_when>
    <thetext>FYI:  the style error is in thirdparty (ie., non-WebKit) code, and is expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335838</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-18 08:38:14 -0800</bug_when>
    <thetext>Attachment 79278 did not build on mac:
Build output: http://queues.webkit.org/results/7518181</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335847</commentid>
    <comment_count>5</comment_count>
      <attachid>79282</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-01-18 08:59:27 -0800</bug_when>
    <thetext>Created attachment 79282
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335848</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-18 09:02:12 -0800</bug_when>
    <thetext>Attachment 79282 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1

Source/WebCore/thirdparty/glu/libtess/sweep.c:256:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335849</commentid>
    <comment_count>7</comment_count>
      <attachid>79283</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-01-18 09:03:25 -0800</bug_when>
    <thetext>Created attachment 79283
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335850</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-18 09:04:58 -0800</bug_when>
    <thetext>Attachment 79283 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1

Source/WebCore/thirdparty/glu/libtess/sweep.c:256:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 1 in 18 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335884</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-18 10:00:19 -0800</bug_when>
    <thetext>Attachment 79278 did not build on chromium:
Build output: http://queues.webkit.org/results/7562179</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335886</commentid>
    <comment_count>10</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-01-18 10:04:18 -0800</bug_when>
    <thetext>Please file a bug on check-webkit-style to have it skip the third party directory.  It shouldn&apos;t have false positives.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335896</commentid>
    <comment_count>11</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-01-18 10:11:44 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Please file a bug on check-webkit-style to have it skip the third party directory.  It shouldn&apos;t have false positives.

Done.  https://bugs.webkit.org/show_bug.cgi?id=52636</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335909</commentid>
    <comment_count>12</comment_count>
      <attachid>79283</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-01-18 10:23:22 -0800</bug_when>
    <thetext>Comment on attachment 79283
Patch

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

R- for a printf() left in, but looks very cool.  I think Ken or Chris should sanity check the libtess usage as that part&apos;s all greek to me.

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:57
&gt; +const int pathTesselation = 30;

nit: static. What does this value (30) mean?

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:74
&gt; +        , m_clippingPaths()

why doesn&apos;t copying a State object copy the clipping paths as well?

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:86
&gt; +static inline FloatPoint operator*(const FloatPoint&amp; f, float scale)

It&apos;s kind of weird to define these here.  Why not in FloatPoint/FloatSize.h?

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:106
&gt; +class Quadratic {

should this go in its own file?

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:127
&gt; +class Cubic {

should this go in its own file?

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:254
&gt; +    Color red(255, 0, 0, 255);
&gt; +    fillPath(path, red);

why red?

looking at beginStencilDraw() this doesn&apos;t seem to actually put red anywhere, so maybe make this a more descriptively named constant would be clearer

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:261
&gt; +    printf(&quot;clipOut\n&quot;);

do you mean to check this in?

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:285
&gt; +            for (pathIter = clippingPaths.begin(); pathIter &lt; clippingPaths.end();
&gt; +                 ++pathIter) {

nit: odd wrapping

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:312
&gt; +void GLES2Canvas::drawTexturedRect(Texture* texture, const FloatRect&amp; srcRect, const FloatRect&amp; dstRect, const AffineTransform&amp; transform, float alpha, ColorSpace colorSpace, CompositeOperator compositeOp, bool clip)

enum preferred for the &apos;clip&apos; parameter as drawTextureRect(..., Clip) / drawTexturedRect(..., NoClip) or some better names are easier to grok at the callsites.

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:380
&gt; +static void interpolateQuadratic(FloatVector* vertices, const SkPoint p0, const SkPoint&amp; p1, const SkPoint&amp; p2)

these helpers also feel out of place in this file</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335929</commentid>
    <comment_count>13</comment_count>
      <attachid>79283</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-18 10:44:39 -0800</bug_when>
    <thetext>Comment on attachment 79283
Patch

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

Looks good overall. There is a problem with the GLU tessellator usage. I am pretty sure the vertices need to be allocated out of non-moving storage. Perhaps there is a way to make it work correctly with a WTF::Vector&lt;float&gt;; the initial vertices could be allocated out of one FloatVector and those created by the combine callback could be added to another. A couple of additional questions.

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:425
&gt; +    static_cast&lt;PolygonData*&gt;(data)-&gt;m_indices-&gt;append(reinterpret_cast&lt;long&gt;(vertexData));

Why is this reinterpret_cast to long and not short?

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:450
&gt; +    checkGLError(&quot;createVertexBufferFromPath, createBuffer&quot;);
&gt; +    *indexBuffer = m_context-&gt;graphicsContext3D()-&gt;createBuffer();
&gt; +    checkGLError(&quot;createVertexBufferFromPath, createBuffer&quot;);

You might want to use different descriptive strings for these two potential errors.

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:506
&gt; +            c[0] = vertices[i * 3];
&gt; +            c[1] = vertices[i * 3 + 1];
&gt; +            c[2] = 1.0f;
&gt; +            internal_gluTessVertex(tess, c, reinterpret_cast&lt;void*&gt;(i));

It&apos;s illegal to use a local variable to store the vertex data passed to gluTessVertex. See http://www.opengl.org/sdk/docs/man/xhtml/gluTessVertex.xml .

&gt; Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:391
&gt; +    if (platformContext()-&gt;useGPU())
&gt; +        platformContext()-&gt;gpuCanvas()-&gt;clipPath(path);
&gt; +

What about GraphicsContext::clipOut(const IntRect&amp; r)? Is that code path used for Canvas&apos; rect(x, y, w, h) plus clip()? Since it hasn&apos;t been modified in these changes it looks to me like things will be broken if the clip region is the intersection of a rectangle and a path.

&gt; Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:418
&gt; +    if (platformContext()-&gt;useGPU())
&gt; +        platformContext()-&gt;gpuCanvas()-&gt;clipOut(p);
&gt; +

Am I reading these correctly that they fall through and perform the software clipping against the backing Skia canvas? If so, is there any way to cache the clipping commands so that in the common case you can avoid executing them in the software rasterizer altogether?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335935</commentid>
    <comment_count>14</comment_count>
      <attachid>79296</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-01-18 10:59:40 -0800</bug_when>
    <thetext>Created attachment 79296
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335937</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-18 11:01:54 -0800</bug_when>
    <thetext>Attachment 79296 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1

Source/WebCore/thirdparty/glu/libtess/sweep.c:256:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/thirdparty/glu/libtess/render.c:153:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/thirdparty/glu/libtess/render.c:157:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/thirdparty/glu/libtess/render.c:157:  Missing space before ( in while(  [whitespace/parens] [5]
Source/WebCore/thirdparty/glu/libtess/priorityq.c:95:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/thirdparty/glu/libtess/priorityq.c:95:  Missing space after ,  [whitespace/comma] [3]
Source/WebCore/thirdparty/glu/libtess/priorityq.c:95:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/thirdparty/glu/libtess/geom.c:208:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/thirdparty/glu/libtess/geom.c:208:  Missing space before ( in while(  [whitespace/parens] [5]
Source/WebCore/thirdparty/glu/libtess/geom.c:208:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 10 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335947</commentid>
    <comment_count>16</comment_count>
      <attachid>79283</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-01-18 11:16:18 -0800</bug_when>
    <thetext>Comment on attachment 79283
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:57
&gt;&gt; +const int pathTesselation = 30;
&gt; 
&gt; nit: static. What does this value (30) mean?

Fixed:  I&apos;ve put in a comment to document it.

&gt;&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:74
&gt;&gt; +        , m_clippingPaths()
&gt; 
&gt; why doesn&apos;t copying a State object copy the clipping paths as well?

Added a comment.  Clipping paths are saved separately in each state, partly to save memory, and partly because we need to know if there were any clipping paths in the current state in restore() (in order to know which ones to redraw).

&gt;&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:86
&gt;&gt; +static inline FloatPoint operator*(const FloatPoint&amp; f, float scale)
&gt; 
&gt; It&apos;s kind of weird to define these here.  Why not in FloatPoint/FloatSize.h?

Since multiplying a point by a scalar is &quot;illegal&quot; (according to the strict mathematical definition), I decided to keep it here to avoid a math nerd war.  :)  (Personally, I hate these kind of artificial distinctions, but that&apos;s a flamewar for another day.)

&gt;&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:106
&gt;&gt; +class Quadratic {
&gt; 
&gt; should this go in its own file?

Probably should at some point, but perhaps we could extract it later?

&gt;&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:127
&gt;&gt; +class Cubic {
&gt; 
&gt; should this go in its own file?

Ibid.

&gt;&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:254
&gt;&gt; +    fillPath(path, red);
&gt; 
&gt; why red?
&gt; 
&gt; looking at beginStencilDraw() this doesn&apos;t seem to actually put red anywhere, so maybe make this a more descriptively named constant would be clearer

Added a comment.  It actually doesn&apos;t matter what color is used (the stencil buffer doesn&apos;t read it), but this way if we accidentally draw to the color buffer instead, we can see it.

&gt;&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:261
&gt;&gt; +    printf(&quot;clipOut\n&quot;);
&gt; 
&gt; do you mean to check this in?

This should never get called from Canvas2D.  Changed it to an assert.

&gt;&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:285
&gt;&gt; +                 ++pathIter) {
&gt; 
&gt; nit: odd wrapping

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:312
&gt;&gt; +void GLES2Canvas::drawTexturedRect(Texture* texture, const FloatRect&amp; srcRect, const FloatRect&amp; dstRect, const AffineTransform&amp; transform, float alpha, ColorSpace colorSpace, CompositeOperator compositeOp, bool clip)
&gt; 
&gt; enum preferred for the &apos;clip&apos; parameter as drawTextureRect(..., Clip) / drawTexturedRect(..., NoClip) or some better names are easier to grok at the callsites.

Will fix in a future patch.

&gt;&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:425
&gt;&gt; +    static_cast&lt;PolygonData*&gt;(data)-&gt;m_indices-&gt;append(reinterpret_cast&lt;long&gt;(vertexData));
&gt; 
&gt; Why is this reinterpret_cast to long and not short?

It actually has to go to long, then to short, in order to please all compilers.

&gt;&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:506
&gt;&gt; +            internal_gluTessVertex(tess, c, reinterpret_cast&lt;void*&gt;(i));
&gt; 
&gt; It&apos;s illegal to use a local variable to store the vertex data passed to gluTessVertex. See http://www.opengl.org/sdk/docs/man/xhtml/gluTessVertex.xml .

The value used for vertexData is not really a local variable:  I&apos;m just placing the vertex index into the pointer (kind of gross, but it saves me having to allocate anything).

You&apos;re right about the vertex parameter, though.  Hmm.  Strange -- this code worked for lots of things I&apos;ve thrown at it (including those with a combine callback).  I guess I&apos;ll have to change all my vertices to doubles.  :(

&gt;&gt; Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:391
&gt;&gt; +
&gt; 
&gt; What about GraphicsContext::clipOut(const IntRect&amp; r)? Is that code path used for Canvas&apos; rect(x, y, w, h) plus clip()? Since it hasn&apos;t been modified in these changes it looks to me like things will be broken if the clip region is the intersection of a rectangle and a path.

clipOut() isn&apos;t called by canvas2D.  I&apos;ve put an ASSERT to that effect for the clipOut(Path&amp;) version; will do the same for the rect version.

&gt;&gt; Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:418
&gt;&gt; +
&gt; 
&gt; Am I reading these correctly that they fall through and perform the software clipping against the backing Skia canvas? If so, is there any way to cache the clipping commands so that in the common case you can avoid executing them in the software rasterizer altogether?

No, it&apos;s not possible, since we don&apos;t know at this point which types of primitives will be drawn, and some of them are still not accelerated, so we need software clipping in that case.

It&apos;s actually ok perf-wise, since the software rasterizer doesn&apos;t do anything with the paths until it actually goes to draw a primitive, so the extra cost is just to add the path to a list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335951</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-18 11:19:59 -0800</bug_when>
    <thetext>Attachment 79283 did not build on chromium:
Build output: http://queues.webkit.org/results/7559201</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335973</commentid>
    <comment_count>18</comment_count>
      <attachid>79303</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-01-18 11:56:42 -0800</bug_when>
    <thetext>Created attachment 79303
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335974</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-18 11:58:54 -0800</bug_when>
    <thetext>Attachment 79303 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/plat...&quot; exit_code: 1

Source/WebCore/thirdparty/glu/libtess/sweep.c:256:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/thirdparty/glu/libtess/render.c:153:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/thirdparty/glu/libtess/render.c:157:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/thirdparty/glu/libtess/render.c:157:  Missing space before ( in while(  [whitespace/parens] [5]
Source/WebCore/thirdparty/glu/libtess/priorityq.c:95:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/thirdparty/glu/libtess/priorityq.c:95:  Missing space after ,  [whitespace/comma] [3]
Source/WebCore/thirdparty/glu/libtess/priorityq.c:95:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/thirdparty/glu/libtess/geom.c:208:  Tab found; better to use spaces  [whitespace/tab] [1]
Source/WebCore/thirdparty/glu/libtess/geom.c:208:  Missing space before ( in while(  [whitespace/parens] [5]
Source/WebCore/thirdparty/glu/libtess/geom.c:208:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 10 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>335981</commentid>
    <comment_count>20</comment_count>
      <attachid>79303</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-01-18 12:06:19 -0800</bug_when>
    <thetext>Comment on attachment 79303
Patch

Thanks for the answers to my previous questions. The revised code which calls the GLU tessellator looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336092</commentid>
    <comment_count>21</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-01-18 14:20:26 -0800</bug_when>
    <thetext>cr-mac is green.. i can haz r+?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336773</commentid>
    <comment_count>22</comment_count>
      <attachid>79303</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-01-19 14:06:15 -0800</bug_when>
    <thetext>Comment on attachment 79303
Patch

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

R=me

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:289
&gt; +            for (pathIter = clippingPaths.begin();
&gt; +                 pathIter &lt; clippingPaths.end();
&gt; +                 ++pathIter) {

nit: why wrap this line at all?

&gt; Source/WebCore/platform/graphics/chromium/GLES2Canvas.cpp:317
&gt; +void GLES2Canvas::drawTexturedRect(Texture* texture, const FloatRect&amp; srcRect, const FloatRect&amp; dstRect, const AffineTransform&amp; transform, float alpha, ColorSpace colorSpace, CompositeOperator compositeOp, bool clip)

nit: file a bug, or better yet just change this to an enum now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336786</commentid>
    <comment_count>23</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-01-19 14:12:38 -0800</bug_when>
    <thetext>Committed r76159: &lt;http://trac.webkit.org/changeset/76159&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337000</commentid>
    <comment_count>24</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-01-19 18:00:12 -0800</bug_when>
    <thetext>This change broke compile on Chromium Linux-shlib bot: http://build.chromium.org/p/chromium/builders/Linux%20Builder%20%28dbg-shlib%29/builds/5757

Chromium does not have trybots or canary for this type of build yet.

Reverting....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337021</commentid>
    <comment_count>25</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-01-19 18:28:55 -0800</bug_when>
    <thetext>Revert landed: http://trac.webkit.org/changeset/76189</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337035</commentid>
    <comment_count>26</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-01-19 18:52:00 -0800</bug_when>
    <thetext>I guess we don&apos;t want to put priorityq.c and priorityq-heap.c in the .gypi since priorityq.c does #include &quot;priorityq-heap.c&quot;.  I don&apos;t know why that would only break this one builder, though.  Here&apos;s how to reproduce that build environment locally: http://www.chromium.org/developers/testing/chromium-build-infrastructure/tour-of-the-chromium-buildbot/linux-builder-dbg-shlib.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337052</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-19 19:14:23 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/76189 might have broken SnowLeopard Intel Release (Tests)
The following tests are not passing:
fast/forms/input-text-scroll-left-on-blur.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337083</commentid>
    <comment_count>28</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-01-19 20:29:52 -0800</bug_when>
    <thetext>(In reply to comment #26)
&gt; I guess we don&apos;t want to put priorityq.c and priorityq-heap.c in the .gypi since priorityq.c does #include &quot;priorityq-heap.c&quot;.

Ugh.  Thanks.

&gt; I don&apos;t know why that would only break this one builder, though.

My guess is that it&apos;s a difference in behaviour (or our linker flags) between linking an executable vs linking a shared library with all symbols exported: the linker is confident enough to eliminate the duplicate symbol in the former case, but not in the latter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337365</commentid>
    <comment_count>29</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-01-20 08:46:24 -0800</bug_when>
    <thetext>Re-landed as http://trac.webkit.org/changeset/76235 w/shlib fix.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79278</attachid>
            <date>2011-01-18 08:03:55 -0800</date>
            <delta_ts>2011-01-18 08:59:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52627-20110118110353.patch</filename>
            <type>text/plain</type>
            <size>47216</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MDI2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE4IEBACisyMDExLTAxLTE4ICBTdGVwaGVu
IFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBhY2NlbGVyYXRlZCBwYXRoIGRy
YXdpbmcgYW5kIGNsaXBwaW5nIGZvciB0aGUgQ2FudmFzMkQgR1BVCisgICAgICAgIHBhdGguCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjYyNworICAg
ICAgICAKKyAgICAgICAgVGhpcyBpcyBkb25lIHdpdGggYSBzaW1wbGUgY3VydmUgaW50ZXJwb2xh
dG9yIGFuZCB0aGUgR0xVIHRlc3NlbGF0b3IsCisgICAgICAgIHdoaWNoIGlzIGdvb2QgZW5vdWdo
IGZvciBhIDMtNVggc3BlZWR1cCBvbgorICAgICAgICBodHRwOi8vaWUubWljcm9zb2Z0LmNvbS90
ZXN0ZHJpdmUvUGVyZm9ybWFuY2UvR2FsYWN0aWMvRGVmYXVsdC5odG1sLgorCisgICAgICAgIENv
dmVyZWQgYnkgY2FudmFzL3BoaWxpcC8yZC5wYXRoLmNsaXAuYmFzaWMuaHRtbCwgYW5kIG1hbnks
IG1hbnkgbW9yZS4KKyAgICAgICAgQWxsIHRlc3RzIGNhbnZhcy9waGlsaXAgYW5kIGZhc3QvY2Fu
dmFzIHBhdGhzIHBhc3Mgd2l0aCBubworICAgICAgICByZWdyZXNzaW9ucywgYWx0aG91Z2ggdHdv
IGhhdmUgbWlub3IgcGl4ZWwgZGlmZmVyZW5jZXMgd2hpY2ggcmVxdWlyZQorICAgICAgICByZWJh
c2VsaW5pbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAg
QWRkIGludGVybmFsX2dsdSBpbmNsdWRlIHBhdGggdG8gY2hyb21pdW0gYnVpbGQuCisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICBBZGQgaW50ZXJuYWxfZ2x1IGZpbGVzIHRvIGNocm9t
aXVtIGJ1aWxkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cGxhdGZvcm1M
YXllcik6CisgICAgICAgIE1ha2UgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIG1vcmUgcm9idXN0
IGFnYWluc3QgZmFpbHVyZSB0byBjcmVhdGUKKyAgICAgICAgYSBEcmF3aW5nQnVmZmVyLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKToKKyAg
ICAgICAgQXMgaW4gRHJhd2luZ0J1ZmZlck1hYy5jcHAsIGNhbGwgcmVzZXQoKSBmcm9tIHRoZSBj
b25zdHJ1Y3Rvci4KKyAgICAgICAgQWxzbyBpbml0aWFsaXplIHNpemUgdG8gKC0xLCAtMSksIHNv
IHJlc2V0KCkgZG9lc24ndCBlYXJseS1vdXQuCisgICAgICAgIEFkZCBpbml0aWFsaXplcnMgZm9y
IGRlcHRoQnVmZmVyIGFuZCBzdGVuY2lsQnVmZmVyLCBhbmQgcmVtb3ZlCisgICAgICAgIG11bHRp
c2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dMRVMyQ2FudmFzLmNwcDoKKyAgICAgICAgUmVtb3ZlIHNvbWUgdW51c2VkICNpbmNs
dWRlcy4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpTdGF0ZTo6U3RhdGUpOgorICAg
ICAgICBBZGQgY2xpcHBpbmcgc3RhdGUsIGFuZCBpbXBsZW1lbnQgc2F2ZS9yZXN0b3JlIHZpYSB0
aGUgY29weSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yKik6CisgICAg
ICAgIChXZWJDb3JlOjpRdWFkcmF0aWM6OlF1YWRyYXRpYyk6CisgICAgICAgIChXZWJDb3JlOjpR
dWFkcmF0aWM6OmZyb21CZXppZXIpOgorICAgICAgICAoV2ViQ29yZTo6UXVhZHJhdGljOjpldmFs
dWF0ZSk6CisgICAgICAgIFF1YWRyYXRpYyBCZXppZXIgY3VydmUgY2xhc3MuCisgICAgICAgIChX
ZWJDb3JlOjpDdWJpYzo6Q3ViaWMpOgorICAgICAgICAoV2ViQ29yZTo6Q3ViaWM6OmZyb21CZXpp
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3ViaWM6OmV2YWx1YXRlKToKKyAgICAgICAgQ3ViaWMg
QmV6aWVyIGN1cnZlIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmNsZWFy
UmVjdCk6CisgICAgICAgIEFkZCBjbGlwcGluZyBzdXBwb3J0IHRvIGNsZWFyUmVjdCgpLgorICAg
ICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmZpbGxQYXRoKToKKyAgICAgICAgSW1wbGVtZW50
IGZpbGxQYXRoKCkuCisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6ZmlsbFJlY3QpOgor
ICAgICAgICBBZGQgY2xpcHBpbmcgc3VwcG9ydCB0byBmaWxsUmVjdCgpLgorICAgICAgICAoV2Vi
Q29yZTo6R0xFUzJDYW52YXM6OmNsaXBQYXRoKToKKyAgICAgICAgSW1wbGVtZW50IGNsaXBQYXRo
KCkuCisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y2xpcE91dCk6CisgICAgICAgIFN0
dWIgb3V0IGNsaXBPdXQoKSAobm90IGNhbGxlZCBieSBDYW52YXMgMkQpLgorICAgICAgICAoV2Vi
Q29yZTo6R0xFUzJDYW52YXM6OnJlc3RvcmUpOgorICAgICAgICBXaGVuIHJlc3RvcmluZywgZHJh
dyBhbnkgcmVtYWluaW5nIGNsaXBwaW5nIHBhdGhzIHRvIHRoZSBzdGVuY2lsIGJ1ZmZlci4KKyAg
ICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KToKKyAgICAgICAg
QWRkIGNsaXBwaW5nIHN1cHBvcnQuCisgICAgICAgIChXZWJDb3JlOjppbnRlcnBvbGF0ZVF1YWRy
YXRpYyk6CisgICAgICAgIChXZWJDb3JlOjppbnRlcnBvbGF0ZUN1YmljKToKKyAgICAgICAgU2lt
cGxlIGN1cnZlIGludGVycG9sYXRpb24sIHVzaW5nIHRoZSBDdWJpYyBhbmQgUXVhZHJhdGljIGNs
YXNzZXMuCisgICAgICAgIChXZWJDb3JlOjpQb2x5Z29uRGF0YTo6UG9seWdvbkRhdGEpOgorICAg
ICAgICBBIHN0cnVjdCB0byBob2xkIHRoZSB0ZXNzZWxhdGlvbiBkYXRhIGZvciBjYWxsYmFja3Mu
CisgICAgICAgIChXZWJDb3JlOjpiZWdpbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZWRnZUZs
YWdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnZlcnRleERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6ZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpjb21iaW5lRGF0YSk6CisgICAgICAgIGlu
dGVybmFsX2dsdSB0ZXNzZWxhdGlvbiBjYWxsYmFja3MuCisgICAgICAgIChXZWJDb3JlOjpHTEVT
MkNhbnZhczo6Y3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgpOgorICAgICAgICBCdWlsZCBhbiBp
bnRlcnBvbGF0ZWQsIHRlc3NlbGF0ZWQgdmVydGV4IGJ1ZmZlciBhbmQgZWxlbWVudCBhcnJheSBi
dWZmZXIgZnJvbSBhIGdpdmVuIHBhdGgsIHN1aXRhYmxlIGZvciBmaWxsaW5nLgorICAgICAgICAo
V2ViQ29yZTo6R0xFUzJDYW52YXM6OmJlZ2luU3RlbmNpbERyYXcpOgorICAgICAgICBFbmFibGUg
c3RlbmNpbGxpbmcsIGFuZCBkaXNhYmxlIGRyYXdzIHRvIHRoZSBjb2xvciBidWZmZXIuCisgICAg
ICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6YXBwbHlDbGlwcGluZyk6CisgICAgICAgIElmIGNs
aXBwaW5nIGlzIGVuYWJsZWQsIHNldCB0aGUgYXBwcm9wcmlhdGUgR0wgc3RhdGUuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaDoKKyAgICAgICAgRG9j
dW1lbnQgdGhlIGZsYXZvdXJzIG9mIGRyYXdUZXh0dXJlZFJlY3QoKSBhIGJpdCwgc28gSSBkb24n
dCBnZXQgY29uZnVzZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6Y3JlYXRlU2Vjb25kYXJ5QnVmZmVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpyZXNpemVEZXB0aFN0ZW5jaWwpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cmVzZXQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmg6CisgICAgICAgIFVuaWZ5IG1fbXVsdGlzYW1w
bGVEZXB0aFN0ZW5jaWxCdWZmZXIgd2l0aCBtX2RlcHRoU3RlbmNpbEJ1ZmZlci4gCisgICAgICAg
IEltcGxlbWVudCBzZXBhcmF0ZSBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXJzIGZvciB3aGVuCisg
ICAgICAgIE9FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCBpcyBub3QgYXZhaWxhYmxlLiAgUmVmYWN0
b3IgY3JlYXRpb24gb2YKKyAgICAgICAgbXVsdGlzYW1wbGVkIGFuZCBub24tbXVsdGlzYW1wbGVk
IGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlcnMgaW50bworICAgICAgICByZXNpemVEZXB0aFN0ZW5j
aWwoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZSk6CisgICAgICAgIFR1cm4gb24gc3RlbmNpbCwgdHVybiBvZmYgZGVwdGgsIHR1cm4gb2Zm
IGFudGlhbGlhc2luZyAoZm9yIG5vdykuCisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRDo6ZW5hYmxlU3RlbmNpbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgIEltcGxlbWVudCBzdGVuY2ls
IGVuYWJsZS9kaXNhYmxlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhp
Y3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNh
bnZhc0NsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIFB1dCBpbiBHUFUg
aG9va3MgZm9yIHBhdGggY2xpcHBpbmcsIGFuZCBwYXRoIGRyYXdpbmcuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmNhbnZhc0NsaXBQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmNhbkFjY2VsZXJhdGUpOgorICAgICAgICBEb24n
dCBjaGVjayBmb3IgY2xpcHBpbmcgcGF0aHMgaW4gY2FuQWNjZWxlcmF0ZSgpIChzaW5jZSB3ZSBj
YW4KKyAgICAgICAgbm93IGFjY2VsZXJhdGUgdGhlbSkuCisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUNvbnRleHRTa2lhOjp1cGxvYWRTb2Z0d2FyZVRvSGFyZHdhcmUpOgorICAgICAgICBEb24n
dCBkbyBjbGlwcGluZyB3aGVuIHVwbG9hZGluZyBzb2Z0d2FyZSBkcmF3cyB0byBoYXJkd2FyZS4K
KyAgICAgICAgKiB0aGlyZHBhcnR5L2dsdS9SRUFETUUud2Via2l0OgorICAgICAgICBVcGRhdGUg
UkVBRE1FIHRvIHJlZmxlY3QgY29tcGlsZSBjaGFuZ2VzLgorICAgICAgICAqIHRoaXJkcGFydHkv
Z2x1L2xpYnRlc3Mvc3dlZXAuYzoKKyAgICAgICAgKElzV2luZGluZ0luc2lkZSk6CisgICAgICAg
IChEb25lRWRnZURpY3QpOgorICAgICAgICBGaXggc29tZSB3YXJuaW5ncyB0cmVhdGVkIGFzIGVy
cm9ycyBmb3IgdGhlIExpbnV4IFJlbGVhc2UgYnVpbGQuCisKIDIwMTEtMDEtMTggIFBhdmVsIFBv
ZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
WXVyeSBTZW1pa2hhdHNreS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDc2MDI0KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00NDMzLDYg
KzQ0MzMsMzAgQEAKICAgICAgICAgICAgICdzdmcvU1ZHWm9vbUFuZFBhbi5oJywKICAgICAgICAg
ICAgICdzdmcvU1ZHWm9vbUV2ZW50LmNwcCcsCiAgICAgICAgICAgICAnc3ZnL1NWR1pvb21FdmVu
dC5oJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2RpY3QuaCcsCisgICAg
ICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9kaWN0LWxpc3QuaCcsCisgICAgICAgICAg
ICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9nZW9tLmgnLAorICAgICAgICAgICAgJ3RoaXJkcGFy
dHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaCcsCisgICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUv
bGlidGVzcy9tZXNoLmgnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvbm9y
bWFsLmgnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhl
YXAuaCcsCisgICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVh
cC5jJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1zb3J0
LmgnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLmgnLAor
ICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcmVuZGVyLmgnLAorICAgICAgICAg
ICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAuaCcsCisgICAgICAgICAgICAndGhpcmRw
YXJ0eS9nbHUvbGlidGVzcy90ZXNzLmgnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xp
YnRlc3MvdGVzc21vbm8uaCcsCisgICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9k
aWN0LmMnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5jJywKKyAg
ICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmMnLAorICAgICAgICAg
ICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5jJywKKyAgICAgICAgICAgICd0aGlyZHBh
cnR5L2dsdS9saWJ0ZXNzL25vcm1hbC5jJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9s
aWJ0ZXNzL3ByaW9yaXR5cS5jJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNz
L3JlbmRlci5jJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmMn
LAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzcy5jJywKKyAgICAgICAg
ICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3Ntb25vLmMnLAogICAgICAgICAgICAgJ3dl
YmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcCcsCiAgICAgICAgICAgICAnd2ViYXVk
aW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaCcsCiAgICAgICAgICAgICAnd2ViYXVkaW8vQXVk
aW9CdWZmZXIuaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAko
cmV2aXNpb24gNzYwMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5
cAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDYgKzE4NSw3IEBACiAgICAgICAnLi4vc3ZnL2dyYXBo
aWNzJywKICAgICAgICcuLi9zdmcvZ3JhcGhpY3MvZmlsdGVycycsCiAgICAgICAnLi4vc3ZnL3By
b3BlcnRpZXMnLAorICAgICAgJy4uL3RoaXJkcGFydHkvZ2x1JywKICAgICAgICcuLi93ZWJhdWRp
bycsCiAgICAgICAnLi4vd2Vic29ja2V0cycsCiAgICAgICAnLi4vd29ya2VycycsCkBAIC0xMTE3
LDYgKzExMTgsOCBAQAogCiAgICAgICAgICMgVXNlIExpbmtIYXNoQ2hyb21pdW0uY3BwIGluc3Rl
YWQKICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL0xpbmtIYXNoXFwuY3BwJCddLAorCisg
ICAgICAgIFsnaW5jbHVkZScsICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzLyddLAogICAgICAgXSwK
ICAgICAgICdjb25kaXRpb25zJzogWwogICAgICAgICBbJ09TPT0ibGludXgiIG9yIE9TPT0iZnJl
ZWJzZCInLCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDc2MDI0KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpyZXNldCgpCiAgICAgbV9wYXRoLmNsZWFyKCk7CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKICAgICBpZiAoR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKSkg
ewotICAgICAgICBpZiAobV9jb250ZXh0M0QpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dDNEICYm
IG1fZHJhd2luZ0J1ZmZlcikgewogICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJ
bnRTaXplKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpKTsKICAgICAgICAg
ICAgIGMtPnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKG1fY29udGV4dDNELmdldCgpLCBtX2Ry
YXdpbmdCdWZmZXIuZ2V0KCksIEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5o
ZWlnaHQoKSkpOwogICAgICAgICB9CkBAIC0xODk1LDcgKzE4OTUsNyBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6cGFpbnRSZW5kCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogUGxhdGZvcm1MYXllciogQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9kcmF3aW5nQnVmZmVyLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgcmV0dXJuIG1fZHJhd2lu
Z0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+cGxhdGZvcm1MYXllcigpIDogMDsKIH0KICNlbmRp
ZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3
aW5nQnVmZmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9u
IDc2MDI0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJh
d2luZ0J1ZmZlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsMTUgKzcyLDE2IEBA
IERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb24KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25T
dXBwb3J0ZWQpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fc2l6ZShzaXplKQor
ICAgICwgbV9zaXplKC0xLCAtMSkKICAgICAsIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0
ZWQobXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAgLCBtX3BhY2tlZERlcHRoU3Rl
bmNpbEV4dGVuc2lvblN1cHBvcnRlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0
ZWQpCiAgICAgLCBtX2ZibygwKQogICAgICwgbV9jb2xvckJ1ZmZlcigwKQogICAgICwgbV9kZXB0
aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fZGVwdGhCdWZmZXIoMCkKKyAgICAsIG1fc3RlbmNp
bEJ1ZmZlcigwKQogICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwgbV9tdWx0aXNhbXBs
ZUNvbG9yQnVmZmVyKDApCi0gICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDAp
CiAgICAgLCBtX2ludGVybmFsKG5ldyBEcmF3aW5nQnVmZmVySW50ZXJuYWwpCiB7CiAgICAgaWYg
KCFtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX2NvcHlf
dGV4dHVyZV90b19wYXJlbnRfdGV4dHVyZSIpKSB7CkBAIC05MSw2ICs5Miw3IEBAIERyYXdpbmdC
dWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb24KICAgICBjb250ZXh0LT5iaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAgICAgbV9jb2xv
ckJ1ZmZlciA9IGdlbmVyYXRlQ29sb3JUZXh0dXJlKGNvbnRleHQsIHNpemUpOwogICAgIGNyZWF0
ZVNlY29uZGFyeUJ1ZmZlcnMoKTsKKyAgICByZXNldChzaXplKTsKIH0KIAogRHJhd2luZ0J1ZmZl
cjo6fkRyYXdpbmdCdWZmZXIoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAkocmV2aXNpb24gNzYw
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNh
bnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEyICszNCwxNiBAQAogCiAjaW5jbHVkZSAi
RHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZsb2F0
U2l6ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiaW50ZXJu
YWxfZ2x1LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlBhdGguaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNE
LmgiCi0jaW5jbHVkZSAiU29saWRGaWxsU2hhZGVyLmgiCi0jaW5jbHVkZSAiVGV4U2hhZGVyLmgi
CisjaWYgUExBVEZPUk0oU0tJQSkKKyNpbmNsdWRlICJTa1BhdGguaCIKKyNlbmRpZgogI2luY2x1
ZGUgIlRleHR1cmUuaCIKIAogI2RlZmluZSBfVVNFX01BVEhfREVGSU5FUwpAQCAtNTAsMTcgKzU0
LDk3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY29uc3QgaW50IHBhdGhUZXNzZWxhdGlv
biA9IDMwOwordHlwZWRlZiB2b2lkIChHTEFQSUVOVFJZICpURVNTQ0IpKCk7Cit0eXBlZGVmIFdU
Rjo6VmVjdG9yPGZsb2F0PiBGbG9hdFZlY3RvcjsKKwogc3RydWN0IEdMRVMyQ2FudmFzOjpTdGF0
ZSB7CiAgICAgU3RhdGUoKQogICAgICAgICA6IG1fZmlsbENvbG9yKDAsIDAsIDAsIDI1NSkKICAg
ICAgICAgLCBtX2FscGhhKDEuMGYpCiAgICAgICAgICwgbV9jb21wb3NpdGVPcChDb21wb3NpdGVT
b3VyY2VPdmVyKQorICAgICAgICAsIG1fY2xpcHBpbmdFbmFibGVkKGZhbHNlKQorICAgIHsKKyAg
ICB9CisgICAgU3RhdGUoY29uc3QgU3RhdGUmIG90aGVyKQorICAgICAgICA6IG1fZmlsbENvbG9y
KG90aGVyLm1fZmlsbENvbG9yKQorICAgICAgICAsIG1fYWxwaGEob3RoZXIubV9hbHBoYSkKKyAg
ICAgICAgLCBtX2NvbXBvc2l0ZU9wKG90aGVyLm1fY29tcG9zaXRlT3ApCisgICAgICAgICwgbV9j
dG0ob3RoZXIubV9jdG0pCisgICAgICAgICwgbV9jbGlwcGluZ1BhdGhzKCkKKyAgICAgICAgLCBt
X2NsaXBwaW5nRW5hYmxlZChvdGhlci5tX2NsaXBwaW5nRW5hYmxlZCkKICAgICB7CiAgICAgfQog
ICAgIENvbG9yIG1fZmlsbENvbG9yOwogICAgIGZsb2F0IG1fYWxwaGE7CiAgICAgQ29tcG9zaXRl
T3BlcmF0b3IgbV9jb21wb3NpdGVPcDsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9jdG07CisgICAg
V1RGOjpWZWN0b3I8UGF0aD4gbV9jbGlwcGluZ1BhdGhzOworICAgIGJvb2wgbV9jbGlwcGluZ0Vu
YWJsZWQ7Cit9OworCitzdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgb3BlcmF0b3IqKGNvbnN0IEZs
b2F0UG9pbnQmIGYsIGZsb2F0IHNjYWxlKQoreworICAgIHJldHVybiBGbG9hdFBvaW50KGYueCgp
ICogc2NhbGUsIGYueSgpICogc2NhbGUpOworfQorCitzdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQg
b3BlcmF0b3IqKGZsb2F0IHNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiBmKQoreworICAgIHJldHVy
biBGbG9hdFBvaW50KGYueCgpICogc2NhbGUsIGYueSgpICogc2NhbGUpOworfQorCitzdGF0aWMg
aW5saW5lIEZsb2F0U2l6ZSBvcGVyYXRvciooY29uc3QgRmxvYXRTaXplJiBmLCBmbG9hdCBzY2Fs
ZSkKK3sKKyAgICByZXR1cm4gRmxvYXRTaXplKGYud2lkdGgoKSAqIHNjYWxlLCBmLmhlaWdodCgp
ICogc2NhbGUpOworfQorCitzdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBvcGVyYXRvciooZmxvYXQg
c2NhbGUsIGNvbnN0IEZsb2F0U2l6ZSYgZikKK3sKKyAgICByZXR1cm4gRmxvYXRTaXplKGYud2lk
dGgoKSAqIHNjYWxlLCBmLmhlaWdodCgpICogc2NhbGUpOworfQorCitjbGFzcyBRdWFkcmF0aWMg
eworICBwdWJsaWM6CisgICAgUXVhZHJhdGljKEZsb2F0UG9pbnQgYSwgRmxvYXRQb2ludCBiLCBG
bG9hdFBvaW50IGMpIDoKKyAgICAgICAgbV9hKGEpLCBtX2IoYiksIG1fYyhjKQorICAgIHsKKyAg
ICB9CisgICAgc3RhdGljIFF1YWRyYXRpYyBmcm9tQmV6aWVyKEZsb2F0UG9pbnQgcDAsIEZsb2F0
UG9pbnQgcDEsIEZsb2F0UG9pbnQgcDIpCisgICAgeworICAgICAgICBGbG9hdFNpemUgcDFzKHAx
LngoKSwgcDEueSgpKTsKKyAgICAgICAgRmxvYXRTaXplIHAycyhwMi54KCksIHAyLnkoKSk7Cisg
ICAgICAgIEZsb2F0UG9pbnQgYiA9IC0yLjBmICogcDAgKyAyLjBmICogcDFzOworICAgICAgICBG
bG9hdFBvaW50IGMgPSAgICAgICAgIHAwIC0gMi4wZiAqIHAxcyArIHAyczsKKyAgICAgICAgcmV0
dXJuIFF1YWRyYXRpYyhwMCwgYiwgYyk7CisgICAgfQorICAgIGlubGluZSBGbG9hdFBvaW50IGV2
YWx1YXRlKGZsb2F0IHQpCisgICAgeworICAgICAgICByZXR1cm4gbV9hICsgdCAqIChtX2IgKyB0
ICogbV9jKTsKKyAgICB9CisgICAgRmxvYXRQb2ludCBtX2EsIG1fYiwgbV9jLCBtX2Q7Cit9Owor
CitjbGFzcyBDdWJpYyB7CisgIHB1YmxpYzoKKyAgICBDdWJpYyhGbG9hdFBvaW50IGEsIEZsb2F0
UG9pbnQgYiwgRmxvYXRQb2ludCBjLCBGbG9hdFBvaW50IGQpIDoKKyAgICAgICAgbV9hKGEpLCBt
X2IoYiksIG1fYyhjKSwgbV9kKGQpIAorICAgIHsKKyAgICB9CisgICAgc3RhdGljIEN1YmljIGZy
b21CZXppZXIoRmxvYXRQb2ludCBwMCwgRmxvYXRQb2ludCBwMSwgRmxvYXRQb2ludCBwMiwgRmxv
YXRQb2ludCBwMykKKyAgICB7CisgICAgICAgIEZsb2F0U2l6ZSBwMXMocDEueCgpLCBwMS55KCkp
OworICAgICAgICBGbG9hdFNpemUgcDJzKHAyLngoKSwgcDIueSgpKTsKKyAgICAgICAgRmxvYXRT
aXplIHAzcyhwMy54KCksIHAzLnkoKSk7CisgICAgICAgIEZsb2F0UG9pbnQgYiA9IC0zLjBmICog
cDAgKyAzLjBmICogcDFzOworICAgICAgICBGbG9hdFBvaW50IGMgPSAgMy4wZiAqIHAwIC0gNi4w
ZiAqIHAxcyArIDMuMGYgKiBwMnM7CisgICAgICAgIEZsb2F0UG9pbnQgZCA9IC0xLjBmICogcDAg
KyAzLjBmICogcDFzIC0gMy4wZiAqIHAycyArIHAzczsKKyAgICAgICAgcmV0dXJuIEN1YmljKHAw
LCBiLCBjLCBkKTsKKyAgICB9CisgICAgRmxvYXRQb2ludCBldmFsdWF0ZShmbG9hdCB0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fYSArIHQgKiAobV9iICsgdCAqIChtX2MgKyB0ICogbV9kKSk7
CisgICAgfQorICAgIEZsb2F0UG9pbnQgbV9hLCBtX2IsIG1fYywgbV9kOwogfTsKIAogR0xFUzJD
YW52YXM6OkdMRVMyQ2FudmFzKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBEcmF3
aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtODgsNyAr
MTcyLDcgQEAgdm9pZCBHTEVTMkNhbnZhczo6YmluZEZyYW1lYnVmZmVyKCkKIHZvaWQgR0xFUzJD
YW52YXM6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgYmluZEZyYW1l
YnVmZmVyKCk7Ci0gICAgaWYgKG1fc3RhdGUtPm1fY3RtLmlzSWRlbnRpdHkoKSkgeworICAgIGlm
IChtX3N0YXRlLT5tX2N0bS5pc0lkZW50aXR5KCkgJiYgIW1fc3RhdGUtPm1fY2xpcHBpbmdFbmFi
bGVkKSB7CiAgICAgICAgIG1fY29udGV4dC0+c2Npc3NvcihyZWN0KTsKICAgICAgICAgbV9jb250
ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgICAgIG1f
Y29udGV4dC0+Y2xlYXJDb2xvcihDb2xvcihSR0JBMzIoMCkpKTsKQEAgLTEwMiw5ICsxODYsMTcg
QEAgdm9pZCBHTEVTMkNhbnZhczo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UgogICAgIH0KIH0KIAor
dm9pZCBHTEVTMkNhbnZhczo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBtX2Nv
bnRleHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IobV9zdGF0ZS0+bV9jb21wb3NpdGVPcCk7Cisg
ICAgYXBwbHlDbGlwcGluZyhtX3N0YXRlLT5tX2NsaXBwaW5nRW5hYmxlZCk7CisgICAgZmlsbFBh
dGgocGF0aCwgbV9zdGF0ZS0+bV9maWxsQ29sb3IpOworfQorCiB2b2lkIEdMRVMyQ2FudmFzOjpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlKQogewogICAgIG1fY29udGV4dC0+YXBwbHlDb21wb3NpdGVPcGVyYXRv
cihtX3N0YXRlLT5tX2NvbXBvc2l0ZU9wKTsKKyAgICBhcHBseUNsaXBwaW5nKG1fc3RhdGUtPm1f
Y2xpcHBpbmdFbmFibGVkKTsKICAgICBtX2NvbnRleHQtPnVzZVF1YWRWZXJ0aWNlcygpOwogCiAg
ICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeChtX2ZsaXBNYXRyaXgpOwpAQCAtMTUzLDYgKzI0NSwy
MiBAQCB2b2lkIEdMRVMyQ2FudmFzOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lCiAgICAgbV9zdGF0
ZS0+bV9jdG0ubXVsdExlZnQoYWZmaW5lKTsKIH0KIAordm9pZCBHTEVTMkNhbnZhczo6Y2xpcFBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBiaW5kRnJhbWVidWZmZXIoKTsKKyAgICBjaGVj
a0dMRXJyb3IoImJpbmRGcmFtZWJ1ZmZlciIpOworICAgIGJlZ2luU3RlbmNpbERyYXcoKTsKKyAg
ICBDb2xvciByZWQoMjU1LCAwLCAwLCAyNTUpOworICAgIGZpbGxQYXRoKHBhdGgsIHJlZCk7Cisg
ICAgbV9zdGF0ZS0+bV9jbGlwcGluZ1BhdGhzLmFwcGVuZChwYXRoKTsKKyAgICBtX3N0YXRlLT5t
X2NsaXBwaW5nRW5hYmxlZCA9IHRydWU7Cit9CisKK3ZvaWQgR0xFUzJDYW52YXM6OmNsaXBPdXQo
Y29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBwcmludGYoImNsaXBPdXRcbiIpOworfQorCiB2b2lk
IEdMRVMyQ2FudmFzOjpzYXZlKCkKIHsKICAgICBtX3N0YXRlU3RhY2suYXBwZW5kKFN0YXRlKG1f
c3RhdGVTdGFjay5sYXN0KCkpKTsKQEAgLTE2MiwxMyArMjcwLDMwIEBAIHZvaWQgR0xFUzJDYW52
YXM6OnNhdmUoKQogdm9pZCBHTEVTMkNhbnZhczo6cmVzdG9yZSgpCiB7CiAgICAgQVNTRVJUKCFt
X3N0YXRlU3RhY2suaXNFbXB0eSgpKTsKKyAgICBib29sIGhhZENsaXBwaW5nUGF0aHMgPSAhbV9z
dGF0ZS0+bV9jbGlwcGluZ1BhdGhzLmlzRW1wdHkoKTsKICAgICBtX3N0YXRlU3RhY2sucmVtb3Zl
TGFzdCgpOwogICAgIG1fc3RhdGUgPSAmbV9zdGF0ZVN0YWNrLmxhc3QoKTsKKyAgICBpZiAoaGFk
Q2xpcHBpbmdQYXRocykgeworICAgICAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4
dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOworICAgICAgICBiZWdpblN0ZW5jaWxEcmF3KCk7Cisg
ICAgICAgIFN0YXRlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyOworICAgICAgICBmb3IgKGl0
ZXIgPSBtX3N0YXRlU3RhY2suYmVnaW4oKTsgaXRlciA8IG1fc3RhdGVTdGFjay5lbmQoKTsgKytp
dGVyKSB7CisgICAgICAgICAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSAqaXRlcjsKKyAgICAgICAg
ICAgIGNvbnN0IFZlY3RvcjxQYXRoPiYgY2xpcHBpbmdQYXRocyA9IHN0YXRlLm1fY2xpcHBpbmdQ
YXRoczsKKyAgICAgICAgICAgIFZlY3RvcjxQYXRoPjo6Y29uc3RfaXRlcmF0b3IgcGF0aEl0ZXI7
CisgICAgICAgICAgICBmb3IgKHBhdGhJdGVyID0gY2xpcHBpbmdQYXRocy5iZWdpbigpOyBwYXRo
SXRlciA8IGNsaXBwaW5nUGF0aHMuZW5kKCk7CisgICAgICAgICAgICAgICAgICsrcGF0aEl0ZXIp
IHsKKyAgICAgICAgICAgICAgICBDb2xvciByZWQoMjU1LCAwLCAwLCAyNTUpOworICAgICAgICAg
ICAgICAgIGZpbGxQYXRoKCpwYXRoSXRlciwgcmVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KIH0KIAogdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdCh1bnNpZ25l
ZCB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAgICAgbV9jb250ZXh0LT5hcHBseUNv
bXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wKTsKKyAgICBhcHBseUNsaXBwaW5nKGZhbHNlKTsK
IAogICAgIG1fY29udGV4dC0+dXNlUXVhZFZlcnRpY2VzKCk7CiAgICAgbV9jb250ZXh0LT5zZXRB
Y3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CkBAIC0xODAsMTMgKzMw
NSwxNCBAQCB2b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KHVuc2lnCiAKIHZvaWQg
R0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7Ci0gICAgZHJhd1RleHR1
cmVkUmVjdCh0ZXh0dXJlLCBzcmNSZWN0LCBkc3RSZWN0LCBtX3N0YXRlLT5tX2N0bSwgbV9zdGF0
ZS0+bV9hbHBoYSwgY29sb3JTcGFjZSwgY29tcG9zaXRlT3ApOworICAgIGRyYXdUZXh0dXJlZFJl
Y3QodGV4dHVyZSwgc3JjUmVjdCwgZHN0UmVjdCwgbV9zdGF0ZS0+bV9jdG0sIG1fc3RhdGUtPm1f
YWxwaGEsIGNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wLCBtX3N0YXRlLT5tX2NsaXBwaW5nRW5hYmxl
ZCk7CiB9CiAKIAotdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdChUZXh0dXJlKiB0
ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGZsb2F0IGFscGhhLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBHTEVT
MkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdChUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0sIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBib29sIGNsaXApCiB7CiAgICAgbV9jb250ZXh0LT5h
cHBseUNvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wKTsKKyAgICBhcHBseUNsaXBwaW5nKGNs
aXApOwogICAgIGNvbnN0IFRpbGluZ0RhdGEmIHRpbGVzID0gdGV4dHVyZS0+dGlsZXMoKTsKICAg
ICBJbnRSZWN0IHRpbGVJZHhSZWN0ID0gdGlsZXMub3ZlcmxhcHBlZFRpbGVJbmRpY2VzKHNyY1Jl
Y3QpOwogCkBAIC0yNTEsNiArMzc3LDIwOSBAQCBUZXh0dXJlKiBHTEVTMkNhbnZhczo6Z2V0VGV4
dHVyZShOYXRpdmVJCiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0VGV4dHVyZShwdHIpOwogfQog
CitzdGF0aWMgdm9pZCBpbnRlcnBvbGF0ZVF1YWRyYXRpYyhGbG9hdFZlY3RvciogdmVydGljZXMs
IGNvbnN0IFNrUG9pbnQgcDAsIGNvbnN0IFNrUG9pbnQmIHAxLCBjb25zdCBTa1BvaW50JiBwMikK
K3sKKyAgICBmbG9hdCB0SW5jcmVtZW50ID0gMS4wZiAvIHBhdGhUZXNzZWxhdGlvbiwgdCA9IHRJ
bmNyZW1lbnQ7CisgICAgUXVhZHJhdGljIGMgPSBRdWFkcmF0aWM6OmZyb21CZXppZXIocDAsIHAx
LCBwMik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXRoVGVzc2VsYXRpb247ICsraSwgdCAr
PSB0SW5jcmVtZW50KSB7CisgICAgICAgIEZsb2F0UG9pbnQgcCA9IGMuZXZhbHVhdGUodCk7Cisg
ICAgICAgIHZlcnRpY2VzLT5hcHBlbmQocC54KCkpOworICAgICAgICB2ZXJ0aWNlcy0+YXBwZW5k
KHAueSgpKTsKKyAgICAgICAgdmVydGljZXMtPmFwcGVuZCgxLjBmKTsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIGludGVycG9sYXRlQ3ViaWMoRmxvYXRWZWN0b3IqIHZlcnRpY2VzLCBjb25zdCBT
a1BvaW50IHAwLCBjb25zdCBTa1BvaW50JiBwMSwgY29uc3QgU2tQb2ludCYgcDIsIGNvbnN0IFNr
UG9pbnQmIHAzKQoreworICAgIGZsb2F0IHRJbmNyZW1lbnQgPSAxLjBmIC8gcGF0aFRlc3NlbGF0
aW9uLCB0ID0gdEluY3JlbWVudDsKKyAgICBDdWJpYyBjID0gQ3ViaWM6OmZyb21CZXppZXIocDAs
IHAxLCBwMiwgcDMpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGF0aFRlc3NlbGF0aW9uOyAr
K2ksIHQgKz0gdEluY3JlbWVudCkgeworICAgICAgICBGbG9hdFBvaW50IHAgPSBjLmV2YWx1YXRl
KHQpOworICAgICAgICB2ZXJ0aWNlcy0+YXBwZW5kKHAueCgpKTsKKyAgICAgICAgdmVydGljZXMt
PmFwcGVuZChwLnkoKSk7CisgICAgICAgIHZlcnRpY2VzLT5hcHBlbmQoMS4wZik7CisgICAgfQor
fQorCitzdHJ1Y3QgUG9seWdvbkRhdGEgeworICAgIFBvbHlnb25EYXRhKEZsb2F0VmVjdG9yKiB2
ZXJ0aWNlcywgV1RGOjpWZWN0b3I8c2hvcnQ+KiBpbmRpY2VzKQorICAgICAgOiBtX3ZlcnRpY2Vz
KHZlcnRpY2VzKQorICAgICAgLCBtX2luZGljZXMoaW5kaWNlcykKKyAgICB7CisgICAgfQorICAg
IEZsb2F0VmVjdG9yKiBtX3ZlcnRpY2VzOworICAgIFdURjo6VmVjdG9yPHNob3J0PiogbV9pbmRp
Y2VzOworfTsKKworc3RhdGljIHZvaWQgYmVnaW5EYXRhKEdMZW51bSB0eXBlLCB2b2lkKiBkYXRh
KQoreworICAgIEFTU0VSVCh0eXBlID09IEdMX1RSSUFOR0xFUyk7Cit9CisKK3N0YXRpYyB2b2lk
IGVkZ2VGbGFnRGF0YShHTGJvb2xlYW4gZmxhZywgdm9pZCogZGF0YSkKK3sKK30KKworc3RhdGlj
IHZvaWQgdmVydGV4RGF0YSh2b2lkKiB2ZXJ0ZXhEYXRhLCB2b2lkKiBkYXRhKQoreworICAgIHN0
YXRpY19jYXN0PFBvbHlnb25EYXRhKj4oZGF0YSktPm1faW5kaWNlcy0+YXBwZW5kKHJlaW50ZXJw
cmV0X2Nhc3Q8bG9uZz4odmVydGV4RGF0YSkpOworfQorCitzdGF0aWMgdm9pZCBlbmREYXRhKHZv
aWQqIGRhdGEpCit7Cit9CisKK3N0YXRpYyB2b2lkIGNvbWJpbmVEYXRhKEdMZG91YmxlIGNvb3Jk
c1szXSwgdm9pZCogdmVydGV4RGF0YVs0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMZmxvYXQgd2VpZ2h0WzRdLCB2b2lkICoqb3V0RGF0YSwgdm9pZCogZGF0YSkKK3sKKyAg
ICBQb2x5Z29uRGF0YSogcG9seWdvbkRhdGEgPSBzdGF0aWNfY2FzdDxQb2x5Z29uRGF0YSo+KGRh
dGEpOworICAgIGludCBpbmRleCA9IHBvbHlnb25EYXRhLT5tX3ZlcnRpY2VzLT5zaXplKCkgLyAz
OworICAgIHBvbHlnb25EYXRhLT5tX3ZlcnRpY2VzLT5hcHBlbmQoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGNvb3Jkc1swXSkpOworICAgIHBvbHlnb25EYXRhLT5tX3ZlcnRpY2VzLT5hcHBlbmQoc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGNvb3Jkc1sxXSkpOworICAgIHBvbHlnb25EYXRhLT5tX3ZlcnRpY2VzLT5h
cHBlbmQoMS4wZik7CisgICAgKm91dERhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihpbmRl
eCk7Cit9CisKK3R5cGVkZWYgdm9pZCAoKlRFU1NDQikoKTsKKwordm9pZCBHTEVTMkNhbnZhczo6
Y3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgoY29uc3QgUGF0aCYgcGF0aCwgaW50KiBjb3VudCwg
dW5zaWduZWQqIHZlcnRleEJ1ZmZlciwgdW5zaWduZWQqIGluZGV4QnVmZmVyKQoreworICAgICp2
ZXJ0ZXhCdWZmZXIgPSBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZUJ1ZmZl
cigpOworICAgIGNoZWNrR0xFcnJvcigiY3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgsIGNyZWF0
ZUJ1ZmZlciIpOworICAgICppbmRleEJ1ZmZlciA9IG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0
M0QoKS0+Y3JlYXRlQnVmZmVyKCk7CisgICAgY2hlY2tHTEVycm9yKCJjcmVhdGVWZXJ0ZXhCdWZm
ZXJGcm9tUGF0aCwgY3JlYXRlQnVmZmVyIik7CisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICBXVEY6
OlZlY3RvcjxzaXplX3Q+IGNvbnRvdXJzOworICAgIGNvbnN0IFNrUGF0aCogc2tQYXRoID0gcGF0
aC5wbGF0Zm9ybVBhdGgoKTsKKyAgICBGbG9hdFZlY3RvciB2ZXJ0aWNlczsKKyAgICBTa1BvaW50
IHB0c1s0XTsKKyAgICBTa1BhdGg6Okl0ZXIgaXRlcigqc2tQYXRoLCB0cnVlKTsKKyAgICBTa1Bh
dGg6OlZlcmIgdmVyYjsKKyAgICB3aGlsZSAoKHZlcmIgPSBpdGVyLm5leHQocHRzKSkgIT0gU2tQ
YXRoOjprRG9uZV9WZXJiKSB7CisgICAgICAgIHN3aXRjaCAodmVyYikgeworICAgICAgICBjYXNl
IFNrUGF0aDo6a01vdmVfVmVyYjoKKyAgICAgICAgICAgIHZlcnRpY2VzLmFwcGVuZChwdHNbMF0u
ZlgpOworICAgICAgICAgICAgdmVydGljZXMuYXBwZW5kKHB0c1swXS5mWSk7CisgICAgICAgICAg
ICB2ZXJ0aWNlcy5hcHBlbmQoMS4wZik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBTa1BhdGg6OmtMaW5lX1ZlcmI6CisgICAgICAgICAgICB2ZXJ0aWNlcy5hcHBlbmQocHRzWzFd
LmZYKTsKKyAgICAgICAgICAgIHZlcnRpY2VzLmFwcGVuZChwdHNbMV0uZlkpOworICAgICAgICAg
ICAgdmVydGljZXMuYXBwZW5kKDEuMGYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgU2tQYXRoOjprUXVhZF9WZXJiOgorICAgICAgICAgICAgaW50ZXJwb2xhdGVRdWFkcmF0aWMo
JnZlcnRpY2VzLCBwdHNbMF0sIHB0c1sxXSwgcHRzWzJdKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFNrUGF0aDo6a0N1YmljX1ZlcmI6CisgICAgICAgICAgICBpbnRlcnBvbGF0
ZUN1YmljKCZ2ZXJ0aWNlcywgcHRzWzBdLCBwdHNbMV0sIHB0c1syXSwgcHRzWzNdKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNrUGF0aDo6a0Nsb3NlX1ZlcmI6CisgICAgICAg
ICAgICBjb250b3Vycy5hcHBlbmQodmVydGljZXMuc2l6ZSgpIC8gMyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBTa1BhdGg6OmtEb25lX1ZlcmI6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlCisjZXJyb3IgVW5pbXBsZW1lbnRlZCBvbiB0aGlz
IHBsYXRmb3JtLgorI2VuZGlmCisKKyAgICBHTFV0ZXNzZWxhdG9yKiB0ZXNzID0gaW50ZXJuYWxf
Z2x1TmV3VGVzcygpOworICAgIGludGVybmFsX2dsdVRlc3NQcm9wZXJ0eSh0ZXNzLCBHTFVfVEVT
U19XSU5ESU5HX1JVTEUsIEdMVV9URVNTX1dJTkRJTkdfTk9OWkVSTyk7CisgICAgaW50ZXJuYWxf
Z2x1VGVzc0NhbGxiYWNrKHRlc3MsIEdMVV9URVNTX0JFR0lOX0RBVEEsIChURVNTQ0IpICZiZWdp
bkRhdGEpOworICAgIGludGVybmFsX2dsdVRlc3NDYWxsYmFjayh0ZXNzLCBHTFVfVEVTU19WRVJU
RVhfREFUQSwgKFRFU1NDQikgJnZlcnRleERhdGEpOworICAgIGludGVybmFsX2dsdVRlc3NDYWxs
YmFjayh0ZXNzLCBHTFVfVEVTU19FTkRfREFUQSwgKFRFU1NDQikgJmVuZERhdGEpOworICAgIGlu
dGVybmFsX2dsdVRlc3NDYWxsYmFjayh0ZXNzLCBHTFVfVEVTU19FREdFX0ZMQUdfREFUQSwgKFRF
U1NDQikgJmVkZ2VGbGFnRGF0YSk7CisgICAgaW50ZXJuYWxfZ2x1VGVzc0NhbGxiYWNrKHRlc3Ms
IEdMVV9URVNTX0NPTUJJTkVfREFUQSwgKFRFU1NDQikgJmNvbWJpbmVEYXRhKTsKKyAgICBXVEY6
OlZlY3RvcjxzaG9ydD4gaW5kaWNlczsKKyAgICBQb2x5Z29uRGF0YSBkYXRhKCZ2ZXJ0aWNlcywg
JmluZGljZXMpOworICAgIGludGVybmFsX2dsdVRlc3NCZWdpblBvbHlnb24odGVzcywgJmRhdGEp
OworICAgIFdURjo6VmVjdG9yPHNpemVfdD46OmNvbnN0X2l0ZXJhdG9yIGNvbnRvdXI7CisgICAg
c2l6ZV90IGkgPSAwOworICAgIGZvciAoY29udG91ciA9IGNvbnRvdXJzLmJlZ2luKCk7IGNvbnRv
dXIgIT0gY29udG91cnMuZW5kKCk7ICsrY29udG91cikgeworICAgICAgICBpbnRlcm5hbF9nbHVU
ZXNzQmVnaW5Db250b3VyKHRlc3MpOworICAgICAgICBmb3IgKDsgaSA8ICpjb250b3VyOyArK2kp
IHsKKyAgICAgICAgICAgIGRvdWJsZSBjWzNdOworICAgICAgICAgICAgY1swXSA9IHZlcnRpY2Vz
W2kgKiAzXTsKKyAgICAgICAgICAgIGNbMV0gPSB2ZXJ0aWNlc1tpICogMyArIDFdOworICAgICAg
ICAgICAgY1syXSA9IDEuMGY7CisgICAgICAgICAgICBpbnRlcm5hbF9nbHVUZXNzVmVydGV4KHRl
c3MsIGMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGkpKTsKKyAgICAgICAgfQorICAgICAgICBp
bnRlcm5hbF9nbHVUZXNzRW5kQ29udG91cih0ZXNzKTsKKyAgICB9CisgICAgaW50ZXJuYWxfZ2x1
VGVzc0VuZFBvbHlnb24odGVzcyk7CisgICAgaW50ZXJuYWxfZ2x1RGVsZXRlVGVzcyh0ZXNzKTsK
KworICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+YmluZEJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAqdmVydGV4QnVmZmVyKTsKKyAgICBjaGVja0dMRXJy
b3IoImNyZWF0ZVZlcnRleEJ1ZmZlckZyb21QYXRoLCBiaW5kQnVmZmVyIik7CisgICAgbV9jb250
ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpB
UlJBWV9CVUZGRVIsIHZlcnRpY2VzLnNpemUoKSAqIHNpemVvZihmbG9hdCksIHZlcnRpY2VzLmRh
dGEoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVBTV9EUkFXKTsKKyAgICBjaGVja0dMRXJyb3Io
ImNyZWF0ZVZlcnRleEJ1ZmZlckZyb21QYXRoLCBidWZmZXJEYXRhIik7CisKKyAgICBtX2NvbnRl
eHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkVM
RU1FTlRfQVJSQVlfQlVGRkVSLCAqaW5kZXhCdWZmZXIpOworICAgIGNoZWNrR0xFcnJvcigiY3Jl
YXRlVmVydGV4QnVmZmVyRnJvbVBhdGgsIGJpbmRCdWZmZXIiKTsKKyAgICBtX2NvbnRleHQtPmdy
YXBoaWNzQ29udGV4dDNEKCktPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRf
QVJSQVlfQlVGRkVSLCBpbmRpY2VzLnNpemUoKSAqIHNpemVvZihzaG9ydCksIGluZGljZXMuZGF0
YSgpLCBHcmFwaGljc0NvbnRleHQzRDo6U1RSRUFNX0RSQVcpOworICAgIGNoZWNrR0xFcnJvcigi
Y3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgsIGJ1ZmZlckRhdGEiKTsKKyAgICAqY291bnQgPSBp
bmRpY2VzLnNpemUoKTsKK30KKwordm9pZCBHTEVTMkNhbnZhczo6ZmlsbFBhdGgoY29uc3QgUGF0
aCYgcGF0aCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGludCBjb3VudDsKKyAgICB1bnNp
Z25lZCB2ZXJ0ZXhCdWZmZXIsIGluZGV4QnVmZmVyOworICAgIGNyZWF0ZVZlcnRleEJ1ZmZlckZy
b21QYXRoKHBhdGgsICZjb3VudCwgJnZlcnRleEJ1ZmZlciwgJmluZGV4QnVmZmVyKTsKKyAgICBt
X2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkFSUkFZX0JVRkZFUiwgdmVydGV4QnVmZmVyKTsKKyAgICBjaGVja0dMRXJyb3IoImJpbmRC
dWZmZXIiKTsKKyAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmJpbmRCdWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBpbmRleEJ1ZmZlcik7Cisg
ICAgY2hlY2tHTEVycm9yKCJiaW5kQnVmZmVyIik7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0
cml4KG1fZmxpcE1hdHJpeCk7CisgICAgbWF0cml4Lm11bHRMZWZ0KG1fc3RhdGUtPm1fY3RtKTsK
KworICAgIG1fY29udGV4dC0+dXNlRmlsbFNvbGlkUHJvZ3JhbShtYXRyaXgsIGNvbG9yKTsKKyAg
ICBjaGVja0dMRXJyb3IoInVzZUZpbGxTb2xpZFByb2dyYW0iKTsKKworICAgIG1fY29udGV4dC0+
Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZHJhd0VsZW1lbnRzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklB
TkdMRVMsIGNvdW50LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDApOworICAg
IGNoZWNrR0xFcnJvcigiZHJhd0FycmF5cyIpOworCisgICAgbV9jb250ZXh0LT5ncmFwaGljc0Nv
bnRleHQzRCgpLT5kZWxldGVCdWZmZXIodmVydGV4QnVmZmVyKTsKKyAgICBjaGVja0dMRXJyb3Io
ImRlbGV0ZUJ1ZmZlciIpOworCisgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5k
ZWxldGVCdWZmZXIoaW5kZXhCdWZmZXIpOworICAgIGNoZWNrR0xFcnJvcigiZGVsZXRlQnVmZmVy
Iik7Cit9CisKK3ZvaWQgR0xFUzJDYW52YXM6OmJlZ2luU3RlbmNpbERyYXcoKQoreworICAgIC8v
IFR1cm4gb24gc3RlbmNpbCB0ZXN0LgorICAgIG1fY29udGV4dC0+ZW5hYmxlU3RlbmNpbCh0cnVl
KTsKKyAgICBjaGVja0dMRXJyb3IoImVuYWJsZSBTVEVOQ0lMX1RFU1QiKTsKKworICAgIC8vIFN0
ZW5jaWwgdGVzdCBuZXZlciBwYXNzZXMsIHNvIGNvbG9yYnVmZmVyIGlzIG5vdCBkcmF3bi4KKyAg
ICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPnN0ZW5jaWxGdW5jKEdyYXBoaWNzQ29u
dGV4dDNEOjpORVZFUiwgMSwgMSk7CisgICAgY2hlY2tHTEVycm9yKCJzdGVuY2lsRnVuYyIpOwor
CisgICAgLy8gQWxsIHdyaXRlcyBpbmNyZW1lbWVudCB0aGUgc3RlbmNpbCBidWZmZXIuCisgICAg
bV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5zdGVuY2lsT3AoR3JhcGhpY3NDb250ZXh0
M0Q6OklOQ1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OklOQ1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OklOQ1IpOworICAgIGNoZWNrR0xFcnJv
cigic3RlbmNpbE9wIik7Cit9CisKK3ZvaWQgR0xFUzJDYW52YXM6OmFwcGx5Q2xpcHBpbmcoYm9v
bCBlbmFibGUpCit7CisgICAgbV9jb250ZXh0LT5lbmFibGVTdGVuY2lsKGVuYWJsZSk7CisgICAg
aWYgKGVuYWJsZSkgeworICAgICAgICAvLyBFbmFibGUgZHJhd2luZyBvbmx5IHdoZXJlIHN0ZW5j
aWwgaXMgbm9uLXplcm8uCisgICAgICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+
c3RlbmNpbEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkVRVUFMLCBtX3N0YXRlLT5tX2NsaXBwaW5n
UGF0aHMuc2l6ZSgpICUgMjU2LCAxKTsKKyAgICAgICAgY2hlY2tHTEVycm9yKCJzdGVuY2lsRnVu
YyIpOworICAgICAgICAvLyBLZWVwIGFsbCBzdGVuY2lsIHZhbHVlcyB0aGUgc2FtZS4KKyAgICAg
ICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5zdGVuY2lsT3AoR3JhcGhpY3NDb250
ZXh0M0Q6OktFRVAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6S0VFUCk7CisgICAg
ICAgIGNoZWNrR0xFcnJvcigic3RlbmNpbE9wIik7CisgICAgfQorfQorCiB2b2lkIEdMRVMyQ2Fu
dmFzOjpjaGVja0dMRXJyb3IoY29uc3QgY2hhciogaGVhZGVyKQogewogI2lmbmRlZiBOREVCVUcK
QEAgLTI4Myw0ICs2MTIsMyBAQCB2b2lkIEdMRVMyQ2FudmFzOjpjaGVja0dMRXJyb3IoY29uc3Qg
Y2hhCiB9CiAKIH0KLQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR0xFUzJDYW52YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCShyZXZpc2lvbiA3NjAyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgQ29sb3I7CiBjbGFzcyBEcmF3aW5n
QnVmZmVyOwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFz
cyBQYXRoOwogY2xhc3MgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q7CiAKIGNsYXNzIEdMRVMyQ2Fu
dmFzIDogcHVibGljIE5vbmNvcHlhYmxlIHsKQEAgLTU1LDYgKzU2LDcgQEAgcHVibGljOgogICAg
IEdMRVMyQ2FudmFzKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiwgRHJhd2luZ0J1ZmZlciosIGNv
bnN0IEludFNpemUmKTsKICAgICB+R0xFUzJDYW52YXMoKTsKIAorICAgIHZvaWQgZmlsbFBhdGgo
Y29uc3QgUGF0aCYpOwogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBDb2xvclNwYWNlKTsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
OwogICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwpAQCAtNjUsNiArNjcsOCBA
QCBwdWJsaWM6CiAgICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpOwogICAgIHZv
aWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7CiAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJik7CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJik7CisgICAgdm9p
ZCBjbGlwT3V0KGNvbnN0IFBhdGgmKTsKIAogICAgIHZvaWQgc2F2ZSgpOwogICAgIHZvaWQgcmVz
dG9yZSgpOwpAQCAtNzIsOSArNzYsMTMgQEAgcHVibGljOgogICAgIC8vIG5vbi1zdGFuZGFyZCBm
dW5jdGlvbnMKICAgICAvLyBUaGVzZSBhcmUgbm90IHN0YW5kYXJkIEdyYXBoaWNzQ29udGV4dCBm
dW5jdGlvbnMsIGFuZCBzaG91bGQgYmUgcHVzaGVkCiAgICAgLy8gZG93biBpbnRvIGEgUGxhdGZv
cm1Db250ZXh0R0xFUzIgYXQgc29tZSBwb2ludC4KKworICAgIC8vIFRoaXMgdmVyc2lvbiBpcyBj
YWxsZWQgYnkgdGhlIGNhbnZhcy0+Y2FudmFzIGRyYXdzLgogICAgIHZvaWQgZHJhd1RleHR1cmVk
UmVjdCh1bnNpZ25lZCB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yKTsKLSAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSos
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3IpOworICAgIC8vIFRoaXMgdmVyc2lvbiBpcyBjYWxsZWQgYnkgQml0bWFwSW1hZ2U6OmRy
YXcoKS4KICAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSosIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNlLCBDb21wb3Np
dGVPcGVyYXRvcik7CisgICAgLy8gVGhpcyB2ZXJzaW9uIGlzIGNhbGxlZCBieSB0aGUgYWJvdmUs
IGFuZCBieSB0aGUgc29mdHdhcmUtPmhhcmR3YXJlIHVwbG9hZHMuCisgICAgdm9pZCBkcmF3VGV4
dHVyZWRSZWN0KFRleHR1cmUqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEsIENvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBib29sIGNsaXApOwogICAgIFRleHR1cmUqIGNyZWF0
ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIsIFRleHR1cmU6OkZvcm1hdCwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KTsKICAgICBUZXh0dXJlKiBnZXRUZXh0dXJlKE5hdGl2ZUltYWdlUHRyKTsKIApAQCAt
ODgsNiArOTYsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3RUaWxlKFRl
eHR1cmUqIHRleHR1cmUsIGludCB0aWxlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEp
OwogICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSk7CiAgICAgdm9pZCBhcHBseUNvbXBvc2l0ZU9wZXJhdG9y
KENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2b2lkIGNyZWF0ZVZlcnRleEJ1ZmZlckZyb21QYXRo
KGNvbnN0IFBhdGgmLCBpbnQqIGNvdW50LCB1bnNpZ25lZCogdmVydGV4QnVmZmVyLCB1bnNpZ25l
ZCogaW5kZXhCdWZmZXIpOworICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYsIGNvbnN0IENv
bG9yJik7CisgICAgdm9pZCBiZWdpblN0ZW5jaWxEcmF3KCk7CisgICAgdm9pZCBhcHBseUNsaXBw
aW5nKGJvb2wgZW5hYmxlKTsKICAgICB2b2lkIGNoZWNrR0xFcnJvcihjb25zdCBjaGFyKiBoZWFk
ZXIpOwogCiAgICAgSW50U2l6ZSBtX3NpemU7CkBAIC05Niw3ICsxMDgsOCBAQCBwcml2YXRlOgog
ICAgIERyYXdpbmdCdWZmZXIqIG1fZHJhd2luZ0J1ZmZlcjsKIAogICAgIHN0cnVjdCBTdGF0ZTsK
LSAgICBXVEY6OlZlY3RvcjxTdGF0ZT4gbV9zdGF0ZVN0YWNrOworICAgIHR5cGVkZWYgV1RGOjpW
ZWN0b3I8U3RhdGU+IFN0YXRlVmVjdG9yOworICAgIFN0YXRlVmVjdG9yIG1fc3RhdGVTdGFjazsK
ICAgICBTdGF0ZSogbV9zdGF0ZTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9mbGlwTWF0cml4Owog
fTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVm
ZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvRHJhd2luZ0J1ZmZlci5jcHAJKHJldmlzaW9uIDc2MDI0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NywxNiArNjcsMjEgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpjbGVhcigpCiAgICAgICAgIG1f
bXVsdGlzYW1wbGVDb2xvckJ1ZmZlciA9IDA7CiAgICAgfQogICAgIAotICAgIGlmIChtX211bHRp
c2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKSB7Ci0gICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUmVu
ZGVyYnVmZmVyKG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICBtX211
bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyID0gMDsKLSAgICB9Ci0gICAgCiAgICAgaWYgKG1f
ZGVwdGhTdGVuY2lsQnVmZmVyKSB7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUmVuZGVyYnVm
ZmVyKG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKICAgICAgICAgbV9kZXB0aFN0ZW5jaWxCdWZmZXIg
PSAwOwogICAgIH0KICAgICAKKyAgICBpZiAobV9kZXB0aEJ1ZmZlcikgeworICAgICAgICBtX2Nv
bnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX2RlcHRoQnVmZmVyKTsKKyAgICAgICAgbV9kZXB0
aEJ1ZmZlciA9IDA7CisgICAgfQorICAgIAorICAgIGlmIChtX3N0ZW5jaWxCdWZmZXIpIHsKKyAg
ICAgICAgbV9jb250ZXh0LT5kZWxldGVSZW5kZXJidWZmZXIobV9zdGVuY2lsQnVmZmVyKTsKKyAg
ICAgICAgbV9zdGVuY2lsQnVmZmVyID0gMDsKKyAgICB9CisgICAgCiAgICAgaWYgKG1fbXVsdGlz
YW1wbGVGQk8pIHsKICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKICAgICAgICAgbV9jb250
ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX211bHRpc2FtcGxlRkJPKTsKQEAgLTkyLDIyICs5Nyw1
MiBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OmNsZWFyKCkKIAogdm9pZCBEcmF3aW5nQnVmZmVyOjpj
cmVhdGVTZWNvbmRhcnlCdWZmZXJzKCkKIHsKLSAgICBjb25zdCBHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyYgYXR0cmlidXRlcyA9IG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMo
KTsKLQotICAgIC8vIENyZWF0ZSB0aGUgc3RlbmNpbCBhbmQgZGVwdGggYnVmZmVyIGlmIG5lZWRl
ZAotICAgIGlmICghbXVsdGlzYW1wbGUoKSAmJiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJp
YnV0ZXMuZGVwdGgpKQotICAgICAgICBtX2RlcHRoU3RlbmNpbEJ1ZmZlciA9IG1fY29udGV4dC0+
Y3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0KICAgICAvLyBjcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8K
ICAgICBpZiAobXVsdGlzYW1wbGUoKSkgewogICAgICAgICBtX211bHRpc2FtcGxlRkJPID0gbV9j
b250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwogICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8p
OwogICAgICAgICBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVJl
bmRlcmJ1ZmZlcigpOwotICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0
ZXMuZGVwdGgpCi0gICAgICAgICAgICBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyID0g
bV9jb250ZXh0LT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKICAgICB9CiB9CiAKK3ZvaWQgRHJhd2lu
Z0J1ZmZlcjo6cmVzaXplRGVwdGhTdGVuY2lsKGludCBzYW1wbGVDb3VudCkKK3sKKyAgICBjb25z
dCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyYgYXR0cmlidXRlcyA9IG1fY29udGV4dC0+
Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCAmJiBhdHRy
aWJ1dGVzLnN0ZW5jaWwgJiYgbV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQp
IHsKKyAgICAgICAgaWYgKCFtX2RlcHRoU3RlbmNpbEJ1ZmZlcikKKyAgICAgICAgICAgIG1fZGVw
dGhTdGVuY2lsQnVmZmVyID0gbV9jb250ZXh0LT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICAg
ICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgaWYgKG11bHRpc2FtcGxlKCkp
CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+cmVuZGVyYnVmZmVyU3Rv
cmFnZU11bHRpc2FtcGxlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIHNhbXBsZUNv
dW50LCBFeHRlbnNpb25zM0Q6OkRFUFRIMjRfU1RFTkNJTDgsIG1fc2l6ZS53aWR0aCgpLCBtX3Np
emUuaGVpZ2h0KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPnJlbmRl
cmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgRXh0ZW5zaW9u
czNEOjpERVBUSDI0X1NURU5DSUw4LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsK
KyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQs
IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsK
KyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpIHsKKyAgICAgICAgICAg
IGlmICghbV9kZXB0aEJ1ZmZlcikKKyAgICAgICAgICAgICAgICBtX2RlcHRoQnVmZmVyID0gbV9j
b250ZXh0LT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Ymlu
ZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVm
ZmVyKTsKKyAgICAgICAgICAgIGlmIChtdWx0aXNhbXBsZSgpKQorICAgICAgICAgICAgICAgIG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUo
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9DT01QT05FTlQxNiwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQo
KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJi
dWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9DT01QT05FTlQxNiwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQo
KSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFD
SE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwpIHsKKyAgICAgICAgICAg
IGlmICghbV9zdGVuY2lsQnVmZmVyKQorICAgICAgICAgICAgICAgIG1fc3RlbmNpbEJ1ZmZlciA9
IG1fY29udGV4dC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAgICAgICAgICBtX2NvbnRleHQt
PmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9zdGVu
Y2lsQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChtdWx0aXNhbXBsZSgpKQorICAgICAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlz
YW1wbGUoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVYOCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWln
aHQoKSk7CisgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgIG1fY29udGV4dC0+cmVu
ZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDgsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0
KCkpOworICAgICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FU
VEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZl
cik7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOworfQorCiB2b2lkIERyYXdpbmdCdWZm
ZXI6OnJlc2V0KGNvbnN0IEludFNpemUmIG5ld1NpemUpCiB7CiAgICAgaWYgKG1fc2l6ZSA9PSBu
ZXdTaXplKQpAQCAtMTIwLDcgKzE1NSw3IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29u
c3QgSW50U2l6ZSYKICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIAog
ICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzID0gbV9j
b250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpOwotICAgIHVuc2lnbmVkIGxvbmcgaW50ZXJu
YWxDb2xvckZvcm1hdCwgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0g
MDsKKyAgICB1bnNpZ25lZCBsb25nIGludGVybmFsQ29sb3JGb3JtYXQsIGNvbG9yRm9ybWF0Owog
ICAgIGlmIChhdHRyaWJ1dGVzLmFscGhhKSB7CiAgICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKICAgICAgICAgY29sb3JGb3JtYXQgPSBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQTsKQEAgLTEyOCwxNyArMTYzLDcgQEAgdm9pZCBEcmF3aW5nQnVmZmVy
OjpyZXNldChjb25zdCBJbnRTaXplJgogICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQjsKICAgICAgICAgY29sb3JGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCOwogICAgIH0KLSAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0
ZXMuZGVwdGgpIHsKLSAgICAgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0
ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KLSAgICAgICAgLy8gU2VlIEdyYXBo
aWNzQ29udGV4dDNEIGNvbnN0cnVjdG9yLgotCi0gICAgICAgIC8vIEZJWE1FOiAgSWYgcGFja2Vk
IGRlcHRoL3N0ZW5jaWwgaXMgbm90IHN1cHBvcnRlZCwgd2Ugc2hvdWxkCi0gICAgICAgIC8vIGNy
ZWF0ZSBzZXBhcmF0ZSByZW5kZXJidWZmZXJzIGZvciBkZXB0aCBhbmQgc3RlbmNpbC4KLSAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCAmJiBhdHRyaWJ1dGVzLmRlcHRoICYmIG1fcGFja2Vk
RGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQotICAgICAgICAgICAgaW50ZXJuYWxEZXB0
aFN0ZW5jaWxGb3JtYXQgPSBFeHRlbnNpb25zM0Q6OkRFUFRIMjRfU1RFTkNJTDg7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2OwotICAgIH0KKwogCiAgICAgLy8gcmVzaXplIG11
bHRpc2FtcGxlIEZCTwogICAgIGlmIChtdWx0aXNhbXBsZSgpKSB7CkBAIC0xNTIsMTUgKzE3Nyw3
IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYKICAgICAgICAgbV9j
b250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIs
IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CiAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5z
aW9ucygpLT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIGludGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53
aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwogICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
LCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVu
Y2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFJl
bmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxl
RGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBtX3Np
emUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVz
LnN0ZW5jaWwpCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fbXVs
dGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMu
ZGVwdGgpCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX211bHRpc2Ft
cGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgfQotICAgICAgICBtX2NvbnRleHQtPmJp
bmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7CisgICAg
ICAgIHJlc2l6ZURlcHRoU3RlbmNpbChzYW1wbGVDb3VudCk7CiAgICAgICAgIGlmIChtX2NvbnRl
eHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
KSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKICAgICAgICAg
ICAgIC8vIENsZWFudXAKICAgICAgICAgICAgIGNsZWFyKCk7CkBAIC0xNzUsMTUgKzE5Miw3IEBA
IHZvaWQgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYKICAgICBtX2NvbnRleHQt
PnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAs
IGludGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAs
IGNvbG9yRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7CiAgICAgbV9j
b250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIsIDApOwogICAgIG1fY29udGV4dC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwotICAgIGlmICghbXVsdGlz
YW1wbGUoKSAmJiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpKSB7Ci0g
ICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIG1fY29udGV4dC0+cmVu
ZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBpbnRlcm5h
bERlcHRoU3RlbmNpbEZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci0g
ICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICBpZiAoYXR0cmlidXRl
cy5kZXB0aCkKLSAgICAgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
QVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5j
aWxCdWZmZXIpOwotICAgICAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7Ci0gICAgfQorICAgIHJlc2l6ZURlcHRoU3RlbmNp
bCgwKTsKICAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0NPTVBMRVRFKSB7CiAgICAgICAgIC8vIENsZWFudXAKICAgICAgICAgY2xlYXIoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuaAkocmV2aXNpb24gNzYwMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBA
IHB1YmxpYzoKICAgICAvLyBDcmVhdGUgdGhlIGRlcHRoL3N0ZW5jaWwgYW5kIG11bHRpc2FtcGxl
IGJ1ZmZlcnMsIGlmIG5lZWRlZC4KICAgICB2b2lkIGNyZWF0ZVNlY29uZGFyeUJ1ZmZlcnMoKTsK
ICAgICAKKyAgICB2b2lkIHJlc2l6ZURlcHRoU3RlbmNpbChpbnQgc2FtcGxlQ291bnQpOworCiAg
ICAgLy8gQ29waWVzIHRoZSBtdWx0aXNhbXBsZSBjb2xvciBidWZmZXIgdG8gdGhlIG5vcm1hbCBj
b2xvciBidWZmZXIgYW5kIGxlYXZlcyBtX2ZibyBib3VuZAogICAgIHZvaWQgY29tbWl0KGxvbmcg
eCA9IDAsIGxvbmcgeSA9IDAsIGxvbmcgd2lkdGggPSAtMSwgbG9uZyBoZWlnaHQgPSAtMSk7CiAg
ICAgCkBAIC0xMDYsMTMgKzEwOCwxOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wYWNrZWREZXB0
aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQ7CiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZibzsK
ICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fY29sb3JCdWZmZXI7CisKKyAgICAvLyBUaGlzIGlzIHVz
ZWQgd2hlbiB3ZSBoYXZlIE9FU19wYWNrZWRfZGVwdGhfc3RlbmNpbC4KICAgICBQbGF0Zm9ybTNE
T2JqZWN0IG1fZGVwdGhTdGVuY2lsQnVmZmVyOwogCisgICAgLy8gVGhlc2UgYXJlIHVzZWQgd2hl
biB3ZSBkb24ndC4KKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZGVwdGhCdWZmZXI7CisgICAgUGxh
dGZvcm0zRE9iamVjdCBtX3N0ZW5jaWxCdWZmZXI7CisKICAgICAvLyBGb3IgbXVsdGlzYW1wbGlu
ZwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9tdWx0aXNhbXBsZUZCTzsKICAgICBQbGF0Zm9ybTNE
T2JqZWN0IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcjsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1f
bXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXI7Ci0gICAgCisKICNpZiBQTEFURk9STShDSFJP
TUlVTSkKICAgICBPd25QdHI8V2lsbFB1Ymxpc2hDYWxsYmFjaz4gbV9jYWxsYmFjazsKICAgICBP
d25QdHI8RHJhd2luZ0J1ZmZlckludGVybmFsPiBtX2ludGVybmFsOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiA3NjAyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDYgKzUxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogUGFzc1JlZlB0
cjxTaGFyZWRHcmFwaGljc0NvbnRleHQzRD4gU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZShIb3N0V2luZG93KiBob3N0V2luZG93KQogewogICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzIGF0dHI7CisgICAgYXR0ci5kZXB0aCA9IGZhbHNlOworICAgIGF0dHIuc3RlbmNpbCA9
IHRydWU7CisgICAgYXR0ci5hbnRpYWxpYXMgPSBmYWxzZTsKICAgICBhdHRyLmNhblJlY292ZXJG
cm9tQ29udGV4dExvc3MgPSBmYWxzZTsgLy8gQ2FudmFzIGNvbnRleHRzIGNhbiBub3QgaGFuZGxl
IGxvc3QgY29udGV4dHMuCiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0g
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRyLCBob3N0V2luZG93KTsKICAgICBpZiAoIWNv
bnRleHQpCkBAIC0yOTMsNiArMjk2LDE0IEBAIHZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6
OmFwcGx5Q29tcG8KICAgICB9CiB9CiAKK3ZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmVu
YWJsZVN0ZW5jaWwoYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICAgICAgbV9j
b250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCk7CisgICAgZWxz
ZQorICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxf
VEVTVCk7Cit9CisKIHZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnVzZVF1YWRWZXJ0aWNl
cygpCiB7CiAgICAgaWYgKCFtX3F1YWRWZXJ0aWNlcykgewpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNz
Q29udGV4dDNELmgJKHJldmlzaW9uIDc2MDI0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAg
LTkwLDYgKzkwLDcgQEAgcHVibGljOgogCiAgICAgLy8gU2hhcmVkIGxvZ2ljIGZvciBjYW52YXMg
MmQKICAgICB2b2lkIGFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoQ29tcG9zaXRlT3BlcmF0b3IpOwor
ICAgIHZvaWQgZW5hYmxlU3RlbmNpbChib29sIGVuYWJsZSk7CiAgICAgdm9pZCB1c2VRdWFkVmVy
dGljZXMoKTsKIAogICAgIHZvaWQgdXNlRmlsbFNvbGlkUHJvZ3JhbShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBjb25zdCBDb2xvciYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCShy
ZXZpc2lvbiA3NjAyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NDb250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Niw2ICszODYsOSBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQCiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKHBsYXRmb3JtQ29udGV4
dCgpLT51c2VHUFUoKSkKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmdwdUNhbnZhcygpLT5j
bGlwUGF0aChwYXRoKTsKKwogICAgIGNvbnN0IFNrUGF0aCYgcCA9ICpwYXRoLnBsYXRmb3JtUGF0
aCgpOwogICAgIGlmICghaXNQYXRoU2tpYVNhZmUoZ2V0Q1RNKCksIHApKQogICAgICAgICByZXR1
cm47CkBAIC00MTAsNiArNDEzLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29u
c3QgUGF0aAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAor
ICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpCisgICAgICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5ncHVDYW52YXMoKS0+Y2xpcE91dChwKTsKKwogICAgIGNvbnN0IFNrUGF0aCYgcGF0
aCA9ICpwLnBsYXRmb3JtUGF0aCgpOwogICAgIGlmICghaXNQYXRoU2tpYVNhZmUoZ2V0Q1RNKCks
IHBhdGgpKQogICAgICAgICByZXR1cm47CkBAIC00MjIsNiArNDI4LDkgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkp
CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMoKS0+Y2xpcFBhdGgocGF0aFRv
Q2xpcCk7CisKICAgICAvLyBGSVhNRTogQmUgc21hcnRlciBhYm91dCB0aGlzLgogICAgIGJlZ2lu
UGF0aCgpOwogICAgIGFkZFBhdGgocGF0aFRvQ2xpcCk7CkBAIC03MzMsNiArNzQyLDEyIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKICAgICBiZWdpblBhdGgoKTsK
ICAgICBhZGRQYXRoKHBhdGhUb0ZpbGwpOwogCisgICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51
c2VHUFUoKSAmJiBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FuQWNjZWxlcmF0ZSgpKSB7CisgICAgICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9ySGFyZHdhcmVEcmF3KCk7CisgICAgICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMoKS0+ZmlsbFBhdGgocGF0aFRvRmlsbCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBTa1BhdGggcGF0aCA9IHBsYXRmb3JtQ29udGV4dCgp
LT5jdXJyZW50UGF0aEluTG9jYWxDb29yZGluYXRlcygpOwogICAgIGlmICghaXNQYXRoU2tpYVNh
ZmUoZ2V0Q1RNKCksIHBhdGgpKQogICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4
dFNraWEuY3BwCShyZXZpc2lvbiA3NjAyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcw
Miw4ICs3MDIsNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmFwcGx5QW50aUFsaWFzCiBi
b29sIFBsYXRmb3JtQ29udGV4dFNraWE6OmNhbkFjY2VsZXJhdGUoKSBjb25zdAogewogICAgIHJl
dHVybiAhbV9zdGF0ZS0+bV9maWxsU2hhZGVyIC8vIENhbid0IGFjY2VsZXJhdGUgd2l0aCBhIGZp
bGwgZ3JhZGllbnQgb3IgcGF0dGVybi4KLSAgICAgICAgJiYgIW1fc3RhdGUtPm1fbG9vcGVyIC8v
IENhbid0IGFjY2VsZXJhdGUgd2l0aCBhIHNoYWRvdy4KLSAgICAgICAgJiYgIW1fc3RhdGUtPm1f
Y2FudmFzQ2xpcEFwcGxpZWQ7IC8vIENhbid0IGFjY2VsZXJhdGUgd2l0aCBhIGNsaXAgdG8gcGF0
aCBhcHBsaWVkLgorICAgICAgICAmJiAhbV9zdGF0ZS0+bV9sb29wZXI7IC8vIENhbid0IGFjY2Vs
ZXJhdGUgd2l0aCBhIHNoYWRvdy4KIH0KIAogYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpjYW52
YXNDbGlwQXBwbGllZCgpIGNvbnN0CkBAIC04NDgsNyArODQ3LDcgQEAgdm9pZCBQbGF0Zm9ybUNv
bnRleHRTa2lhOjp1cGxvYWRTb2Z0d2FyZQogCiAgICAgbV91cGxvYWRUZXh0dXJlLT51cGRhdGVT
dWJSZWN0KGJpdG1hcC5nZXRQaXhlbHMoKSwgbV9zb2Z0d2FyZURpcnR5UmVjdCk7CiAgICAgQWZm
aW5lVHJhbnNmb3JtIGlkZW50aXR5OwotICAgIGdwdUNhbnZhcygpLT5kcmF3VGV4dHVyZWRSZWN0
KG1fdXBsb2FkVGV4dHVyZS5nZXQoKSwgbV9zb2Z0d2FyZURpcnR5UmVjdCwgbV9zb2Z0d2FyZURp
cnR5UmVjdCwgaWRlbnRpdHksIDEuMCwgQ29sb3JTcGFjZURldmljZVJHQiwgb3ApOworICAgIGdw
dUNhbnZhcygpLT5kcmF3VGV4dHVyZWRSZWN0KG1fdXBsb2FkVGV4dHVyZS5nZXQoKSwgbV9zb2Z0
d2FyZURpcnR5UmVjdCwgbV9zb2Z0d2FyZURpcnR5UmVjdCwgaWRlbnRpdHksIDEuMCwgQ29sb3JT
cGFjZURldmljZVJHQiwgb3AsIGZhbHNlKTsKICAgICAvLyBDbGVhciBvdXQgdGhlIHJlZ2lvbiBv
ZiB0aGUgc29mdHdhcmUgY2FudmFzIHdlIGp1c3QgdXBsb2FkZWQuCiAgICAgbV9jYW52YXMtPnNh
dmUoKTsKICAgICBtX2NhbnZhcy0+cmVzZXRNYXRyaXgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3RoaXJkcGFydHkvZ2x1L1JFQURNRS53ZWJraXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvdGhpcmRwYXJ0eS9nbHUvUkVBRE1FLndlYmtpdAkocmV2aXNpb24gNzYwMjQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9SRUFETUUud2Via2l0CSh3b3JraW5nIGNvcHkpCkBA
IC0zMSwzICszMSw5IEBAIFRoZSBmb2xsb3dpbmcgY2hhbmdlcyB3ZXJlIG1hZGUgaW4gb3JkZXIK
ICAgICBvZiB0aGUgdW51c2VkIE5vcm1hbGl6ZSBmdW5jdGlvbi4KIAogICAtIEluIHByaW9yaXR5
cS1oZWFwLmMsIGFuICNpbmNsdWRlIG9mIDxsaW1pdHMuaD4gd2FzIGFkZGVkLgorCisgIC0gSW4g
c3dlZXAuYywgSXNXaW5kaW5nSW5zaWRlKCkgd2FzIGdpdmVuIGEgcmV0dXJuIHZhbHVlIHRvIHNp
bGVuY2UgYQorICAgIHdhcm5pbmctYXMtZXJyb3IgaW4gcmVsZWFzZSBidWlsZHMuCisKKyAgLSBJ
biBzd2VlcC5jLCBEb25lRWRnZURpY3QoKSdzIGZpeGVkRWRnZXMgd2FzIHdyYXBwZWQgaW4gI2lu
ZGVmIE5ERUJVRywgdG8KKyAgICBzaWxlbmNlIGEgd2FybmluZy1hcy1lcnJvciBpbiByZWxlYXNl
IGJ1aWxkcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvc3dl
ZXAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNz
L3N3ZWVwLmMJKHJldmlzaW9uIDc2MDI0KQorKysgU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9n
bHUvbGlidGVzcy9zd2VlcC5jCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNiArMjUzLDcgQEAgc3Rh
dGljIEdMYm9vbGVhbiBJc1dpbmRpbmdJbnNpZGUoIEdMVXRlcwogICAvKkxJTlRFRCovCiAgIGFz
c2VydCggRkFMU0UgKTsKICAgLypOT1RSRUFDSEVEKi8KKyAgcmV0dXJuIDA7CiB9CiAKIApAQCAt
MTE3Myw3ICsxMTc0LDkgQEAgc3RhdGljIHZvaWQgSW5pdEVkZ2VEaWN0KCBHTFV0ZXNzZWxhdG9y
IAogc3RhdGljIHZvaWQgRG9uZUVkZ2VEaWN0KCBHTFV0ZXNzZWxhdG9yICp0ZXNzICkKIHsKICAg
QWN0aXZlUmVnaW9uICpyZWc7CisjaWZuZGVmIE5ERUJVRwogICBpbnQgZml4ZWRFZGdlcyA9IDA7
CisjZW5kaWYKIAogICAvKiBfX0dMX0RJQ1RMSVNUS0VZICovIC8qIF9fR0xfRElDVExJU1RNSU4g
Ki8KICAgd2hpbGUoIChyZWcgPSAoQWN0aXZlUmVnaW9uICopZGljdEtleSggZGljdE1pbiggdGVz
cy0+ZGljdCApKSkgIT0gTlVMTCApIHsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MDI2KQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEgQEAKKzIwMTEt
MDEtMTggIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHR3byB0by1iZS1y
ZWJhc2VsaW5lZCB0ZXN0cyBmb3IgdGhlIEdQVSBwYXRoLgorCisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0tZ3B1L3Rlc3RfZXhwZWN0YXRpb25zLnR4dDoKKwogMjAxMS0wMS0xOCAgUGF2ZWwg
UG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
LCByZW1vdmUgd3JvbmcgY2hyb21pdW0gZXhwZWN0YXRpb24gZm9yIGNvbnNvbGUteGhyLWxvZ2dp
bmcgdGVzdC4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLWdwdS90ZXN0X2V4
cGVjdGF0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21p
dW0tZ3B1L3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkocmV2aXNpb24gNzYwMjQpCisrKyBMYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1ncHUvdGVzdF9leHBlY3RhdGlvbnMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0zODYsMyArMzg2LDcgQEAgQlVHV0s1MTk4OSBXSU4gTElOVVggOiBmYXN0L2Nh
bnZhcy9jYW52YQogCiAvLyBTdGFydGVkIGZhaWxpbmcgYWZ0ZXIgcjc1NjQ4IG9uIGV2ZXJ5dGhp
bmcgZXhjZXB0IFNub3cgTGVvcGFyZAogQlVHV0s1MjM0MSA6IGZhc3QvY2FudmFzL2NhbnZhcy1s
YXJnZS1kaW1lbnNpb25zLmh0bWwgPSBURVhUCisKKy8vIFRoZXNlIHdpbGwgbmVlZCB0byByZWJh
c2VsaW5lZCBhZnRlciB0aGUgbmV3IHBhdGggZHJhd2luZyBsYW5kcy4KK0JVR19TRU5PUkJMQU5D
TyBXSU4gTElOVVggOiBmYXN0L2NhbnZhcy9jYW52YXMtY29tcG9zaXRlLmh0bWwgPSBJTUFHRQor
QlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IGZhc3QvY2FudmFzL2NhbnZhcy10cmFuc2Zvcm0t
c2tld2VkLmh0bWwgPSBJTUFHRQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79282</attachid>
            <date>2011-01-18 08:59:27 -0800</date>
            <delta_ts>2011-01-18 09:03:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52627-20110118115925.patch</filename>
            <type>text/plain</type>
            <size>48230</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MDI2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE4IEBACisyMDExLTAxLTE4ICBTdGVwaGVu
IFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBhY2NlbGVyYXRlZCBwYXRoIGRy
YXdpbmcgYW5kIGNsaXBwaW5nIGZvciB0aGUgQ2FudmFzMkQgR1BVCisgICAgICAgIHBhdGguCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjYyNworICAg
ICAgICAKKyAgICAgICAgVGhpcyBpcyBkb25lIHdpdGggYSBzaW1wbGUgY3VydmUgaW50ZXJwb2xh
dG9yIGFuZCB0aGUgR0xVIHRlc3NlbGF0b3IsCisgICAgICAgIHdoaWNoIGlzIGdvb2QgZW5vdWdo
IGZvciBhIDMtNVggc3BlZWR1cCBvbgorICAgICAgICBodHRwOi8vaWUubWljcm9zb2Z0LmNvbS90
ZXN0ZHJpdmUvUGVyZm9ybWFuY2UvR2FsYWN0aWMvRGVmYXVsdC5odG1sLgorCisgICAgICAgIENv
dmVyZWQgYnkgY2FudmFzL3BoaWxpcC8yZC5wYXRoLmNsaXAuYmFzaWMuaHRtbCwgYW5kIG1hbnks
IG1hbnkgbW9yZS4KKyAgICAgICAgQWxsIHRlc3RzIGNhbnZhcy9waGlsaXAgYW5kIGZhc3QvY2Fu
dmFzIHBhdGhzIHBhc3Mgd2l0aCBubworICAgICAgICByZWdyZXNzaW9ucywgYWx0aG91Z2ggdHdv
IGhhdmUgbWlub3IgcGl4ZWwgZGlmZmVyZW5jZXMgd2hpY2ggcmVxdWlyZQorICAgICAgICByZWJh
c2VsaW5pbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAg
QWRkIGludGVybmFsX2dsdSBpbmNsdWRlIHBhdGggdG8gY2hyb21pdW0gYnVpbGQuCisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICBBZGQgaW50ZXJuYWxfZ2x1IGZpbGVzIHRvIGNocm9t
aXVtIGJ1aWxkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cGxhdGZvcm1M
YXllcik6CisgICAgICAgIE1ha2UgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIG1vcmUgcm9idXN0
IGFnYWluc3QgZmFpbHVyZSB0byBjcmVhdGUKKyAgICAgICAgYSBEcmF3aW5nQnVmZmVyLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKToKKyAg
ICAgICAgQXMgaW4gRHJhd2luZ0J1ZmZlck1hYy5jcHAsIGNhbGwgcmVzZXQoKSBmcm9tIHRoZSBj
b25zdHJ1Y3Rvci4KKyAgICAgICAgQWxzbyBpbml0aWFsaXplIHNpemUgdG8gKC0xLCAtMSksIHNv
IHJlc2V0KCkgZG9lc24ndCBlYXJseS1vdXQuCisgICAgICAgIEFkZCBpbml0aWFsaXplcnMgZm9y
IGRlcHRoQnVmZmVyIGFuZCBzdGVuY2lsQnVmZmVyLCBhbmQgcmVtb3ZlCisgICAgICAgIG11bHRp
c2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dMRVMyQ2FudmFzLmNwcDoKKyAgICAgICAgUmVtb3ZlIHNvbWUgdW51c2VkICNpbmNs
dWRlcy4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpTdGF0ZTo6U3RhdGUpOgorICAg
ICAgICBBZGQgY2xpcHBpbmcgc3RhdGUsIGFuZCBpbXBsZW1lbnQgc2F2ZS9yZXN0b3JlIHZpYSB0
aGUgY29weSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yKik6CisgICAg
ICAgIChXZWJDb3JlOjpRdWFkcmF0aWM6OlF1YWRyYXRpYyk6CisgICAgICAgIChXZWJDb3JlOjpR
dWFkcmF0aWM6OmZyb21CZXppZXIpOgorICAgICAgICAoV2ViQ29yZTo6UXVhZHJhdGljOjpldmFs
dWF0ZSk6CisgICAgICAgIFF1YWRyYXRpYyBCZXppZXIgY3VydmUgY2xhc3MuCisgICAgICAgIChX
ZWJDb3JlOjpDdWJpYzo6Q3ViaWMpOgorICAgICAgICAoV2ViQ29yZTo6Q3ViaWM6OmZyb21CZXpp
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3ViaWM6OmV2YWx1YXRlKToKKyAgICAgICAgQ3ViaWMg
QmV6aWVyIGN1cnZlIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmNsZWFy
UmVjdCk6CisgICAgICAgIEFkZCBjbGlwcGluZyBzdXBwb3J0IHRvIGNsZWFyUmVjdCgpLgorICAg
ICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmZpbGxQYXRoKToKKyAgICAgICAgSW1wbGVtZW50
IGZpbGxQYXRoKCkuCisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6ZmlsbFJlY3QpOgor
ICAgICAgICBBZGQgY2xpcHBpbmcgc3VwcG9ydCB0byBmaWxsUmVjdCgpLgorICAgICAgICAoV2Vi
Q29yZTo6R0xFUzJDYW52YXM6OmNsaXBQYXRoKToKKyAgICAgICAgSW1wbGVtZW50IGNsaXBQYXRo
KCkuCisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y2xpcE91dCk6CisgICAgICAgIFN0
dWIgb3V0IGNsaXBPdXQoKSAobm90IGNhbGxlZCBieSBDYW52YXMgMkQpLgorICAgICAgICAoV2Vi
Q29yZTo6R0xFUzJDYW52YXM6OnJlc3RvcmUpOgorICAgICAgICBXaGVuIHJlc3RvcmluZywgZHJh
dyBhbnkgcmVtYWluaW5nIGNsaXBwaW5nIHBhdGhzIHRvIHRoZSBzdGVuY2lsIGJ1ZmZlci4KKyAg
ICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KToKKyAgICAgICAg
QWRkIGNsaXBwaW5nIHN1cHBvcnQuCisgICAgICAgIChXZWJDb3JlOjppbnRlcnBvbGF0ZVF1YWRy
YXRpYyk6CisgICAgICAgIChXZWJDb3JlOjppbnRlcnBvbGF0ZUN1YmljKToKKyAgICAgICAgU2lt
cGxlIGN1cnZlIGludGVycG9sYXRpb24sIHVzaW5nIHRoZSBDdWJpYyBhbmQgUXVhZHJhdGljIGNs
YXNzZXMuCisgICAgICAgIChXZWJDb3JlOjpQb2x5Z29uRGF0YTo6UG9seWdvbkRhdGEpOgorICAg
ICAgICBBIHN0cnVjdCB0byBob2xkIHRoZSB0ZXNzZWxhdGlvbiBkYXRhIGZvciBjYWxsYmFja3Mu
CisgICAgICAgIChXZWJDb3JlOjpiZWdpbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZWRnZUZs
YWdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnZlcnRleERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6ZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpjb21iaW5lRGF0YSk6CisgICAgICAgIGlu
dGVybmFsX2dsdSB0ZXNzZWxhdGlvbiBjYWxsYmFja3MuCisgICAgICAgIChXZWJDb3JlOjpHTEVT
MkNhbnZhczo6Y3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgpOgorICAgICAgICBCdWlsZCBhbiBp
bnRlcnBvbGF0ZWQsIHRlc3NlbGF0ZWQgdmVydGV4IGJ1ZmZlciBhbmQgZWxlbWVudCBhcnJheSBi
dWZmZXIgZnJvbSBhIGdpdmVuIHBhdGgsIHN1aXRhYmxlIGZvciBmaWxsaW5nLgorICAgICAgICAo
V2ViQ29yZTo6R0xFUzJDYW52YXM6OmJlZ2luU3RlbmNpbERyYXcpOgorICAgICAgICBFbmFibGUg
c3RlbmNpbGxpbmcsIGFuZCBkaXNhYmxlIGRyYXdzIHRvIHRoZSBjb2xvciBidWZmZXIuCisgICAg
ICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6YXBwbHlDbGlwcGluZyk6CisgICAgICAgIElmIGNs
aXBwaW5nIGlzIGVuYWJsZWQsIHNldCB0aGUgYXBwcm9wcmlhdGUgR0wgc3RhdGUuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaDoKKyAgICAgICAgRG9j
dW1lbnQgdGhlIGZsYXZvdXJzIG9mIGRyYXdUZXh0dXJlZFJlY3QoKSBhIGJpdCwgc28gSSBkb24n
dCBnZXQgY29uZnVzZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6Y3JlYXRlU2Vjb25kYXJ5QnVmZmVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpyZXNpemVEZXB0aFN0ZW5jaWwpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cmVzZXQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmg6CisgICAgICAgIFVuaWZ5IG1fbXVsdGlzYW1w
bGVEZXB0aFN0ZW5jaWxCdWZmZXIgd2l0aCBtX2RlcHRoU3RlbmNpbEJ1ZmZlci4gCisgICAgICAg
IEltcGxlbWVudCBzZXBhcmF0ZSBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXJzIGZvciB3aGVuCisg
ICAgICAgIE9FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCBpcyBub3QgYXZhaWxhYmxlLiAgUmVmYWN0
b3IgY3JlYXRpb24gb2YKKyAgICAgICAgbXVsdGlzYW1wbGVkIGFuZCBub24tbXVsdGlzYW1wbGVk
IGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlcnMgaW50bworICAgICAgICByZXNpemVEZXB0aFN0ZW5j
aWwoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZSk6CisgICAgICAgIFR1cm4gb24gc3RlbmNpbCwgdHVybiBvZmYgZGVwdGgsIHR1cm4gb2Zm
IGFudGlhbGlhc2luZyAoZm9yIG5vdykuCisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRDo6ZW5hYmxlU3RlbmNpbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgIEltcGxlbWVudCBzdGVuY2ls
IGVuYWJsZS9kaXNhYmxlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhp
Y3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNh
bnZhc0NsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIFB1dCBpbiBHUFUg
aG9va3MgZm9yIHBhdGggY2xpcHBpbmcsIGFuZCBwYXRoIGRyYXdpbmcuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmNhbnZhc0NsaXBQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmNhbkFjY2VsZXJhdGUpOgorICAgICAgICBEb24n
dCBjaGVjayBmb3IgY2xpcHBpbmcgcGF0aHMgaW4gY2FuQWNjZWxlcmF0ZSgpIChzaW5jZSB3ZSBj
YW4KKyAgICAgICAgbm93IGFjY2VsZXJhdGUgdGhlbSkuCisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUNvbnRleHRTa2lhOjp1cGxvYWRTb2Z0d2FyZVRvSGFyZHdhcmUpOgorICAgICAgICBEb24n
dCBkbyBjbGlwcGluZyB3aGVuIHVwbG9hZGluZyBzb2Z0d2FyZSBkcmF3cyB0byBoYXJkd2FyZS4K
KyAgICAgICAgKiB0aGlyZHBhcnR5L2dsdS9SRUFETUUud2Via2l0OgorICAgICAgICBVcGRhdGUg
UkVBRE1FIHRvIHJlZmxlY3QgY29tcGlsZSBjaGFuZ2VzLgorICAgICAgICAqIHRoaXJkcGFydHkv
Z2x1L2xpYnRlc3Mvc3dlZXAuYzoKKyAgICAgICAgKElzV2luZGluZ0luc2lkZSk6CisgICAgICAg
IChEb25lRWRnZURpY3QpOgorICAgICAgICBGaXggc29tZSB3YXJuaW5ncyB0cmVhdGVkIGFzIGVy
cm9ycyBmb3IgdGhlIExpbnV4IFJlbGVhc2UgYnVpbGQuCisKIDIwMTEtMDEtMTggIFBhdmVsIFBv
ZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
WXVyeSBTZW1pa2hhdHNreS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDc2MDI0KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00NDMzLDYg
KzQ0MzMsMzAgQEAKICAgICAgICAgICAgICdzdmcvU1ZHWm9vbUFuZFBhbi5oJywKICAgICAgICAg
ICAgICdzdmcvU1ZHWm9vbUV2ZW50LmNwcCcsCiAgICAgICAgICAgICAnc3ZnL1NWR1pvb21FdmVu
dC5oJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2RpY3QuaCcsCisgICAg
ICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9kaWN0LWxpc3QuaCcsCisgICAgICAgICAg
ICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9nZW9tLmgnLAorICAgICAgICAgICAgJ3RoaXJkcGFy
dHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaCcsCisgICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUv
bGlidGVzcy9tZXNoLmgnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvbm9y
bWFsLmgnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhl
YXAuaCcsCisgICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVh
cC5jJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1zb3J0
LmgnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLmgnLAor
ICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcmVuZGVyLmgnLAorICAgICAgICAg
ICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAuaCcsCisgICAgICAgICAgICAndGhpcmRw
YXJ0eS9nbHUvbGlidGVzcy90ZXNzLmgnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xp
YnRlc3MvdGVzc21vbm8uaCcsCisgICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9k
aWN0LmMnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5jJywKKyAg
ICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmMnLAorICAgICAgICAg
ICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5jJywKKyAgICAgICAgICAgICd0aGlyZHBh
cnR5L2dsdS9saWJ0ZXNzL25vcm1hbC5jJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9s
aWJ0ZXNzL3ByaW9yaXR5cS5jJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNz
L3JlbmRlci5jJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmMn
LAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzcy5jJywKKyAgICAgICAg
ICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3Ntb25vLmMnLAogICAgICAgICAgICAgJ3dl
YmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcCcsCiAgICAgICAgICAgICAnd2ViYXVk
aW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaCcsCiAgICAgICAgICAgICAnd2ViYXVkaW8vQXVk
aW9CdWZmZXIuaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAko
cmV2aXNpb24gNzYwMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5
cAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDYgKzE4NSw3IEBACiAgICAgICAnLi4vc3ZnL2dyYXBo
aWNzJywKICAgICAgICcuLi9zdmcvZ3JhcGhpY3MvZmlsdGVycycsCiAgICAgICAnLi4vc3ZnL3By
b3BlcnRpZXMnLAorICAgICAgJy4uL3RoaXJkcGFydHkvZ2x1JywKICAgICAgICcuLi93ZWJhdWRp
bycsCiAgICAgICAnLi4vd2Vic29ja2V0cycsCiAgICAgICAnLi4vd29ya2VycycsCkBAIC0xMTE3
LDYgKzExMTgsOCBAQAogCiAgICAgICAgICMgVXNlIExpbmtIYXNoQ2hyb21pdW0uY3BwIGluc3Rl
YWQKICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL0xpbmtIYXNoXFwuY3BwJCddLAorCisg
ICAgICAgIFsnaW5jbHVkZScsICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzLyddLAogICAgICAgXSwK
ICAgICAgICdjb25kaXRpb25zJzogWwogICAgICAgICBbJ09TPT0ibGludXgiIG9yIE9TPT0iZnJl
ZWJzZCInLCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDc2MDI0KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpyZXNldCgpCiAgICAgbV9wYXRoLmNsZWFyKCk7CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKICAgICBpZiAoR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKSkg
ewotICAgICAgICBpZiAobV9jb250ZXh0M0QpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dDNEICYm
IG1fZHJhd2luZ0J1ZmZlcikgewogICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJ
bnRTaXplKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpKTsKICAgICAgICAg
ICAgIGMtPnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKG1fY29udGV4dDNELmdldCgpLCBtX2Ry
YXdpbmdCdWZmZXIuZ2V0KCksIEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5o
ZWlnaHQoKSkpOwogICAgICAgICB9CkBAIC0xODk1LDcgKzE4OTUsNyBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6cGFpbnRSZW5kCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogUGxhdGZvcm1MYXllciogQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9kcmF3aW5nQnVmZmVyLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgcmV0dXJuIG1fZHJhd2lu
Z0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+cGxhdGZvcm1MYXllcigpIDogMDsKIH0KICNlbmRp
ZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3
aW5nQnVmZmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9u
IDc2MDI0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJh
d2luZ0J1ZmZlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsMTUgKzcyLDE2IEBA
IERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb24KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25T
dXBwb3J0ZWQpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fc2l6ZShzaXplKQor
ICAgICwgbV9zaXplKC0xLCAtMSkKICAgICAsIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0
ZWQobXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAgLCBtX3BhY2tlZERlcHRoU3Rl
bmNpbEV4dGVuc2lvblN1cHBvcnRlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0
ZWQpCiAgICAgLCBtX2ZibygwKQogICAgICwgbV9jb2xvckJ1ZmZlcigwKQogICAgICwgbV9kZXB0
aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fZGVwdGhCdWZmZXIoMCkKKyAgICAsIG1fc3RlbmNp
bEJ1ZmZlcigwKQogICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwgbV9tdWx0aXNhbXBs
ZUNvbG9yQnVmZmVyKDApCi0gICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDAp
CiAgICAgLCBtX2ludGVybmFsKG5ldyBEcmF3aW5nQnVmZmVySW50ZXJuYWwpCiB7CiAgICAgaWYg
KCFtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX2NvcHlf
dGV4dHVyZV90b19wYXJlbnRfdGV4dHVyZSIpKSB7CkBAIC05MSw2ICs5Miw3IEBAIERyYXdpbmdC
dWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb24KICAgICBjb250ZXh0LT5iaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAgICAgbV9jb2xv
ckJ1ZmZlciA9IGdlbmVyYXRlQ29sb3JUZXh0dXJlKGNvbnRleHQsIHNpemUpOwogICAgIGNyZWF0
ZVNlY29uZGFyeUJ1ZmZlcnMoKTsKKyAgICByZXNldChzaXplKTsKIH0KIAogRHJhd2luZ0J1ZmZl
cjo6fkRyYXdpbmdCdWZmZXIoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAkocmV2aXNpb24gNzYw
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNh
bnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEyICszNCwxNiBAQAogCiAjaW5jbHVkZSAi
RHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZsb2F0
U2l6ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiaW50ZXJu
YWxfZ2x1LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlBhdGguaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNE
LmgiCi0jaW5jbHVkZSAiU29saWRGaWxsU2hhZGVyLmgiCi0jaW5jbHVkZSAiVGV4U2hhZGVyLmgi
CisjaWYgUExBVEZPUk0oU0tJQSkKKyNpbmNsdWRlICJTa1BhdGguaCIKKyNlbmRpZgogI2luY2x1
ZGUgIlRleHR1cmUuaCIKIAogI2RlZmluZSBfVVNFX01BVEhfREVGSU5FUwpAQCAtNTAsMTcgKzU0
LDk3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY29uc3QgaW50IHBhdGhUZXNzZWxhdGlv
biA9IDMwOwordHlwZWRlZiB2b2lkIChHTEFQSUVOVFJZICpURVNTQ0IpKCk7Cit0eXBlZGVmIFdU
Rjo6VmVjdG9yPGZsb2F0PiBGbG9hdFZlY3RvcjsKKwogc3RydWN0IEdMRVMyQ2FudmFzOjpTdGF0
ZSB7CiAgICAgU3RhdGUoKQogICAgICAgICA6IG1fZmlsbENvbG9yKDAsIDAsIDAsIDI1NSkKICAg
ICAgICAgLCBtX2FscGhhKDEuMGYpCiAgICAgICAgICwgbV9jb21wb3NpdGVPcChDb21wb3NpdGVT
b3VyY2VPdmVyKQorICAgICAgICAsIG1fY2xpcHBpbmdFbmFibGVkKGZhbHNlKQorICAgIHsKKyAg
ICB9CisgICAgU3RhdGUoY29uc3QgU3RhdGUmIG90aGVyKQorICAgICAgICA6IG1fZmlsbENvbG9y
KG90aGVyLm1fZmlsbENvbG9yKQorICAgICAgICAsIG1fYWxwaGEob3RoZXIubV9hbHBoYSkKKyAg
ICAgICAgLCBtX2NvbXBvc2l0ZU9wKG90aGVyLm1fY29tcG9zaXRlT3ApCisgICAgICAgICwgbV9j
dG0ob3RoZXIubV9jdG0pCisgICAgICAgICwgbV9jbGlwcGluZ1BhdGhzKCkKKyAgICAgICAgLCBt
X2NsaXBwaW5nRW5hYmxlZChvdGhlci5tX2NsaXBwaW5nRW5hYmxlZCkKICAgICB7CiAgICAgfQog
ICAgIENvbG9yIG1fZmlsbENvbG9yOwogICAgIGZsb2F0IG1fYWxwaGE7CiAgICAgQ29tcG9zaXRl
T3BlcmF0b3IgbV9jb21wb3NpdGVPcDsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9jdG07CisgICAg
V1RGOjpWZWN0b3I8UGF0aD4gbV9jbGlwcGluZ1BhdGhzOworICAgIGJvb2wgbV9jbGlwcGluZ0Vu
YWJsZWQ7Cit9OworCitzdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgb3BlcmF0b3IqKGNvbnN0IEZs
b2F0UG9pbnQmIGYsIGZsb2F0IHNjYWxlKQoreworICAgIHJldHVybiBGbG9hdFBvaW50KGYueCgp
ICogc2NhbGUsIGYueSgpICogc2NhbGUpOworfQorCitzdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQg
b3BlcmF0b3IqKGZsb2F0IHNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiBmKQoreworICAgIHJldHVy
biBGbG9hdFBvaW50KGYueCgpICogc2NhbGUsIGYueSgpICogc2NhbGUpOworfQorCitzdGF0aWMg
aW5saW5lIEZsb2F0U2l6ZSBvcGVyYXRvciooY29uc3QgRmxvYXRTaXplJiBmLCBmbG9hdCBzY2Fs
ZSkKK3sKKyAgICByZXR1cm4gRmxvYXRTaXplKGYud2lkdGgoKSAqIHNjYWxlLCBmLmhlaWdodCgp
ICogc2NhbGUpOworfQorCitzdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBvcGVyYXRvciooZmxvYXQg
c2NhbGUsIGNvbnN0IEZsb2F0U2l6ZSYgZikKK3sKKyAgICByZXR1cm4gRmxvYXRTaXplKGYud2lk
dGgoKSAqIHNjYWxlLCBmLmhlaWdodCgpICogc2NhbGUpOworfQorCitjbGFzcyBRdWFkcmF0aWMg
eworICBwdWJsaWM6CisgICAgUXVhZHJhdGljKEZsb2F0UG9pbnQgYSwgRmxvYXRQb2ludCBiLCBG
bG9hdFBvaW50IGMpIDoKKyAgICAgICAgbV9hKGEpLCBtX2IoYiksIG1fYyhjKQorICAgIHsKKyAg
ICB9CisgICAgc3RhdGljIFF1YWRyYXRpYyBmcm9tQmV6aWVyKEZsb2F0UG9pbnQgcDAsIEZsb2F0
UG9pbnQgcDEsIEZsb2F0UG9pbnQgcDIpCisgICAgeworICAgICAgICBGbG9hdFNpemUgcDFzKHAx
LngoKSwgcDEueSgpKTsKKyAgICAgICAgRmxvYXRTaXplIHAycyhwMi54KCksIHAyLnkoKSk7Cisg
ICAgICAgIEZsb2F0UG9pbnQgYiA9IC0yLjBmICogcDAgKyAyLjBmICogcDFzOworICAgICAgICBG
bG9hdFBvaW50IGMgPSAgICAgICAgIHAwIC0gMi4wZiAqIHAxcyArIHAyczsKKyAgICAgICAgcmV0
dXJuIFF1YWRyYXRpYyhwMCwgYiwgYyk7CisgICAgfQorICAgIGlubGluZSBGbG9hdFBvaW50IGV2
YWx1YXRlKGZsb2F0IHQpCisgICAgeworICAgICAgICByZXR1cm4gbV9hICsgdCAqIChtX2IgKyB0
ICogbV9jKTsKKyAgICB9CisgICAgRmxvYXRQb2ludCBtX2EsIG1fYiwgbV9jLCBtX2Q7Cit9Owor
CitjbGFzcyBDdWJpYyB7CisgIHB1YmxpYzoKKyAgICBDdWJpYyhGbG9hdFBvaW50IGEsIEZsb2F0
UG9pbnQgYiwgRmxvYXRQb2ludCBjLCBGbG9hdFBvaW50IGQpIDoKKyAgICAgICAgbV9hKGEpLCBt
X2IoYiksIG1fYyhjKSwgbV9kKGQpIAorICAgIHsKKyAgICB9CisgICAgc3RhdGljIEN1YmljIGZy
b21CZXppZXIoRmxvYXRQb2ludCBwMCwgRmxvYXRQb2ludCBwMSwgRmxvYXRQb2ludCBwMiwgRmxv
YXRQb2ludCBwMykKKyAgICB7CisgICAgICAgIEZsb2F0U2l6ZSBwMXMocDEueCgpLCBwMS55KCkp
OworICAgICAgICBGbG9hdFNpemUgcDJzKHAyLngoKSwgcDIueSgpKTsKKyAgICAgICAgRmxvYXRT
aXplIHAzcyhwMy54KCksIHAzLnkoKSk7CisgICAgICAgIEZsb2F0UG9pbnQgYiA9IC0zLjBmICog
cDAgKyAzLjBmICogcDFzOworICAgICAgICBGbG9hdFBvaW50IGMgPSAgMy4wZiAqIHAwIC0gNi4w
ZiAqIHAxcyArIDMuMGYgKiBwMnM7CisgICAgICAgIEZsb2F0UG9pbnQgZCA9IC0xLjBmICogcDAg
KyAzLjBmICogcDFzIC0gMy4wZiAqIHAycyArIHAzczsKKyAgICAgICAgcmV0dXJuIEN1YmljKHAw
LCBiLCBjLCBkKTsKKyAgICB9CisgICAgRmxvYXRQb2ludCBldmFsdWF0ZShmbG9hdCB0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fYSArIHQgKiAobV9iICsgdCAqIChtX2MgKyB0ICogbV9kKSk7
CisgICAgfQorICAgIEZsb2F0UG9pbnQgbV9hLCBtX2IsIG1fYywgbV9kOwogfTsKIAogR0xFUzJD
YW52YXM6OkdMRVMyQ2FudmFzKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBEcmF3
aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtODgsNyAr
MTcyLDcgQEAgdm9pZCBHTEVTMkNhbnZhczo6YmluZEZyYW1lYnVmZmVyKCkKIHZvaWQgR0xFUzJD
YW52YXM6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgYmluZEZyYW1l
YnVmZmVyKCk7Ci0gICAgaWYgKG1fc3RhdGUtPm1fY3RtLmlzSWRlbnRpdHkoKSkgeworICAgIGlm
IChtX3N0YXRlLT5tX2N0bS5pc0lkZW50aXR5KCkgJiYgIW1fc3RhdGUtPm1fY2xpcHBpbmdFbmFi
bGVkKSB7CiAgICAgICAgIG1fY29udGV4dC0+c2Npc3NvcihyZWN0KTsKICAgICAgICAgbV9jb250
ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgICAgIG1f
Y29udGV4dC0+Y2xlYXJDb2xvcihDb2xvcihSR0JBMzIoMCkpKTsKQEAgLTEwMiw5ICsxODYsMTcg
QEAgdm9pZCBHTEVTMkNhbnZhczo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UgogICAgIH0KIH0KIAor
dm9pZCBHTEVTMkNhbnZhczo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBtX2Nv
bnRleHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IobV9zdGF0ZS0+bV9jb21wb3NpdGVPcCk7Cisg
ICAgYXBwbHlDbGlwcGluZyhtX3N0YXRlLT5tX2NsaXBwaW5nRW5hYmxlZCk7CisgICAgZmlsbFBh
dGgocGF0aCwgbV9zdGF0ZS0+bV9maWxsQ29sb3IpOworfQorCiB2b2lkIEdMRVMyQ2FudmFzOjpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlKQogewogICAgIG1fY29udGV4dC0+YXBwbHlDb21wb3NpdGVPcGVyYXRv
cihtX3N0YXRlLT5tX2NvbXBvc2l0ZU9wKTsKKyAgICBhcHBseUNsaXBwaW5nKG1fc3RhdGUtPm1f
Y2xpcHBpbmdFbmFibGVkKTsKICAgICBtX2NvbnRleHQtPnVzZVF1YWRWZXJ0aWNlcygpOwogCiAg
ICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeChtX2ZsaXBNYXRyaXgpOwpAQCAtMTUzLDYgKzI0NSwy
MiBAQCB2b2lkIEdMRVMyQ2FudmFzOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lCiAgICAgbV9zdGF0
ZS0+bV9jdG0ubXVsdExlZnQoYWZmaW5lKTsKIH0KIAordm9pZCBHTEVTMkNhbnZhczo6Y2xpcFBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBiaW5kRnJhbWVidWZmZXIoKTsKKyAgICBjaGVj
a0dMRXJyb3IoImJpbmRGcmFtZWJ1ZmZlciIpOworICAgIGJlZ2luU3RlbmNpbERyYXcoKTsKKyAg
ICBDb2xvciByZWQoMjU1LCAwLCAwLCAyNTUpOworICAgIGZpbGxQYXRoKHBhdGgsIHJlZCk7Cisg
ICAgbV9zdGF0ZS0+bV9jbGlwcGluZ1BhdGhzLmFwcGVuZChwYXRoKTsKKyAgICBtX3N0YXRlLT5t
X2NsaXBwaW5nRW5hYmxlZCA9IHRydWU7Cit9CisKK3ZvaWQgR0xFUzJDYW52YXM6OmNsaXBPdXQo
Y29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBwcmludGYoImNsaXBPdXRcbiIpOworfQorCiB2b2lk
IEdMRVMyQ2FudmFzOjpzYXZlKCkKIHsKICAgICBtX3N0YXRlU3RhY2suYXBwZW5kKFN0YXRlKG1f
c3RhdGVTdGFjay5sYXN0KCkpKTsKQEAgLTE2MiwxMyArMjcwLDMwIEBAIHZvaWQgR0xFUzJDYW52
YXM6OnNhdmUoKQogdm9pZCBHTEVTMkNhbnZhczo6cmVzdG9yZSgpCiB7CiAgICAgQVNTRVJUKCFt
X3N0YXRlU3RhY2suaXNFbXB0eSgpKTsKKyAgICBib29sIGhhZENsaXBwaW5nUGF0aHMgPSAhbV9z
dGF0ZS0+bV9jbGlwcGluZ1BhdGhzLmlzRW1wdHkoKTsKICAgICBtX3N0YXRlU3RhY2sucmVtb3Zl
TGFzdCgpOwogICAgIG1fc3RhdGUgPSAmbV9zdGF0ZVN0YWNrLmxhc3QoKTsKKyAgICBpZiAoaGFk
Q2xpcHBpbmdQYXRocykgeworICAgICAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4
dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOworICAgICAgICBiZWdpblN0ZW5jaWxEcmF3KCk7Cisg
ICAgICAgIFN0YXRlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyOworICAgICAgICBmb3IgKGl0
ZXIgPSBtX3N0YXRlU3RhY2suYmVnaW4oKTsgaXRlciA8IG1fc3RhdGVTdGFjay5lbmQoKTsgKytp
dGVyKSB7CisgICAgICAgICAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSAqaXRlcjsKKyAgICAgICAg
ICAgIGNvbnN0IFZlY3RvcjxQYXRoPiYgY2xpcHBpbmdQYXRocyA9IHN0YXRlLm1fY2xpcHBpbmdQ
YXRoczsKKyAgICAgICAgICAgIFZlY3RvcjxQYXRoPjo6Y29uc3RfaXRlcmF0b3IgcGF0aEl0ZXI7
CisgICAgICAgICAgICBmb3IgKHBhdGhJdGVyID0gY2xpcHBpbmdQYXRocy5iZWdpbigpOyBwYXRo
SXRlciA8IGNsaXBwaW5nUGF0aHMuZW5kKCk7CisgICAgICAgICAgICAgICAgICsrcGF0aEl0ZXIp
IHsKKyAgICAgICAgICAgICAgICBDb2xvciByZWQoMjU1LCAwLCAwLCAyNTUpOworICAgICAgICAg
ICAgICAgIGZpbGxQYXRoKCpwYXRoSXRlciwgcmVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KIH0KIAogdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdCh1bnNpZ25l
ZCB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAgICAgbV9jb250ZXh0LT5hcHBseUNv
bXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wKTsKKyAgICBhcHBseUNsaXBwaW5nKGZhbHNlKTsK
IAogICAgIG1fY29udGV4dC0+dXNlUXVhZFZlcnRpY2VzKCk7CiAgICAgbV9jb250ZXh0LT5zZXRB
Y3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CkBAIC0xODAsMTMgKzMw
NSwxNCBAQCB2b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KHVuc2lnCiAKIHZvaWQg
R0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7Ci0gICAgZHJhd1RleHR1
cmVkUmVjdCh0ZXh0dXJlLCBzcmNSZWN0LCBkc3RSZWN0LCBtX3N0YXRlLT5tX2N0bSwgbV9zdGF0
ZS0+bV9hbHBoYSwgY29sb3JTcGFjZSwgY29tcG9zaXRlT3ApOworICAgIGRyYXdUZXh0dXJlZFJl
Y3QodGV4dHVyZSwgc3JjUmVjdCwgZHN0UmVjdCwgbV9zdGF0ZS0+bV9jdG0sIG1fc3RhdGUtPm1f
YWxwaGEsIGNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wLCBtX3N0YXRlLT5tX2NsaXBwaW5nRW5hYmxl
ZCk7CiB9CiAKIAotdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdChUZXh0dXJlKiB0
ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGZsb2F0IGFscGhhLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBHTEVT
MkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdChUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0sIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBib29sIGNsaXApCiB7CiAgICAgbV9jb250ZXh0LT5h
cHBseUNvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wKTsKKyAgICBhcHBseUNsaXBwaW5nKGNs
aXApOwogICAgIGNvbnN0IFRpbGluZ0RhdGEmIHRpbGVzID0gdGV4dHVyZS0+dGlsZXMoKTsKICAg
ICBJbnRSZWN0IHRpbGVJZHhSZWN0ID0gdGlsZXMub3ZlcmxhcHBlZFRpbGVJbmRpY2VzKHNyY1Jl
Y3QpOwogCkBAIC0yNTEsNiArMzc3LDIwOSBAQCBUZXh0dXJlKiBHTEVTMkNhbnZhczo6Z2V0VGV4
dHVyZShOYXRpdmVJCiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0VGV4dHVyZShwdHIpOwogfQog
CitzdGF0aWMgdm9pZCBpbnRlcnBvbGF0ZVF1YWRyYXRpYyhGbG9hdFZlY3RvciogdmVydGljZXMs
IGNvbnN0IFNrUG9pbnQgcDAsIGNvbnN0IFNrUG9pbnQmIHAxLCBjb25zdCBTa1BvaW50JiBwMikK
K3sKKyAgICBmbG9hdCB0SW5jcmVtZW50ID0gMS4wZiAvIHBhdGhUZXNzZWxhdGlvbiwgdCA9IHRJ
bmNyZW1lbnQ7CisgICAgUXVhZHJhdGljIGMgPSBRdWFkcmF0aWM6OmZyb21CZXppZXIocDAsIHAx
LCBwMik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXRoVGVzc2VsYXRpb247ICsraSwgdCAr
PSB0SW5jcmVtZW50KSB7CisgICAgICAgIEZsb2F0UG9pbnQgcCA9IGMuZXZhbHVhdGUodCk7Cisg
ICAgICAgIHZlcnRpY2VzLT5hcHBlbmQocC54KCkpOworICAgICAgICB2ZXJ0aWNlcy0+YXBwZW5k
KHAueSgpKTsKKyAgICAgICAgdmVydGljZXMtPmFwcGVuZCgxLjBmKTsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIGludGVycG9sYXRlQ3ViaWMoRmxvYXRWZWN0b3IqIHZlcnRpY2VzLCBjb25zdCBT
a1BvaW50IHAwLCBjb25zdCBTa1BvaW50JiBwMSwgY29uc3QgU2tQb2ludCYgcDIsIGNvbnN0IFNr
UG9pbnQmIHAzKQoreworICAgIGZsb2F0IHRJbmNyZW1lbnQgPSAxLjBmIC8gcGF0aFRlc3NlbGF0
aW9uLCB0ID0gdEluY3JlbWVudDsKKyAgICBDdWJpYyBjID0gQ3ViaWM6OmZyb21CZXppZXIocDAs
IHAxLCBwMiwgcDMpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGF0aFRlc3NlbGF0aW9uOyAr
K2ksIHQgKz0gdEluY3JlbWVudCkgeworICAgICAgICBGbG9hdFBvaW50IHAgPSBjLmV2YWx1YXRl
KHQpOworICAgICAgICB2ZXJ0aWNlcy0+YXBwZW5kKHAueCgpKTsKKyAgICAgICAgdmVydGljZXMt
PmFwcGVuZChwLnkoKSk7CisgICAgICAgIHZlcnRpY2VzLT5hcHBlbmQoMS4wZik7CisgICAgfQor
fQorCitzdHJ1Y3QgUG9seWdvbkRhdGEgeworICAgIFBvbHlnb25EYXRhKEZsb2F0VmVjdG9yKiB2
ZXJ0aWNlcywgV1RGOjpWZWN0b3I8c2hvcnQ+KiBpbmRpY2VzKQorICAgICAgOiBtX3ZlcnRpY2Vz
KHZlcnRpY2VzKQorICAgICAgLCBtX2luZGljZXMoaW5kaWNlcykKKyAgICB7CisgICAgfQorICAg
IEZsb2F0VmVjdG9yKiBtX3ZlcnRpY2VzOworICAgIFdURjo6VmVjdG9yPHNob3J0PiogbV9pbmRp
Y2VzOworfTsKKworc3RhdGljIHZvaWQgYmVnaW5EYXRhKEdMZW51bSB0eXBlLCB2b2lkKiBkYXRh
KQoreworICAgIEFTU0VSVCh0eXBlID09IEdMX1RSSUFOR0xFUyk7Cit9CisKK3N0YXRpYyB2b2lk
IGVkZ2VGbGFnRGF0YShHTGJvb2xlYW4gZmxhZywgdm9pZCogZGF0YSkKK3sKK30KKworc3RhdGlj
IHZvaWQgdmVydGV4RGF0YSh2b2lkKiB2ZXJ0ZXhEYXRhLCB2b2lkKiBkYXRhKQoreworICAgIHN0
YXRpY19jYXN0PFBvbHlnb25EYXRhKj4oZGF0YSktPm1faW5kaWNlcy0+YXBwZW5kKHJlaW50ZXJw
cmV0X2Nhc3Q8bG9uZz4odmVydGV4RGF0YSkpOworfQorCitzdGF0aWMgdm9pZCBlbmREYXRhKHZv
aWQqIGRhdGEpCit7Cit9CisKK3N0YXRpYyB2b2lkIGNvbWJpbmVEYXRhKEdMZG91YmxlIGNvb3Jk
c1szXSwgdm9pZCogdmVydGV4RGF0YVs0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMZmxvYXQgd2VpZ2h0WzRdLCB2b2lkICoqb3V0RGF0YSwgdm9pZCogZGF0YSkKK3sKKyAg
ICBQb2x5Z29uRGF0YSogcG9seWdvbkRhdGEgPSBzdGF0aWNfY2FzdDxQb2x5Z29uRGF0YSo+KGRh
dGEpOworICAgIGludCBpbmRleCA9IHBvbHlnb25EYXRhLT5tX3ZlcnRpY2VzLT5zaXplKCkgLyAz
OworICAgIHBvbHlnb25EYXRhLT5tX3ZlcnRpY2VzLT5hcHBlbmQoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGNvb3Jkc1swXSkpOworICAgIHBvbHlnb25EYXRhLT5tX3ZlcnRpY2VzLT5hcHBlbmQoc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGNvb3Jkc1sxXSkpOworICAgIHBvbHlnb25EYXRhLT5tX3ZlcnRpY2VzLT5h
cHBlbmQoMS4wZik7CisgICAgKm91dERhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihpbmRl
eCk7Cit9CisKK3R5cGVkZWYgdm9pZCAoKlRFU1NDQikoKTsKKwordm9pZCBHTEVTMkNhbnZhczo6
Y3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgoY29uc3QgUGF0aCYgcGF0aCwgaW50KiBjb3VudCwg
dW5zaWduZWQqIHZlcnRleEJ1ZmZlciwgdW5zaWduZWQqIGluZGV4QnVmZmVyKQoreworICAgICp2
ZXJ0ZXhCdWZmZXIgPSBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZUJ1ZmZl
cigpOworICAgIGNoZWNrR0xFcnJvcigiY3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgsIGNyZWF0
ZUJ1ZmZlciIpOworICAgICppbmRleEJ1ZmZlciA9IG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0
M0QoKS0+Y3JlYXRlQnVmZmVyKCk7CisgICAgY2hlY2tHTEVycm9yKCJjcmVhdGVWZXJ0ZXhCdWZm
ZXJGcm9tUGF0aCwgY3JlYXRlQnVmZmVyIik7CisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICBXVEY6
OlZlY3RvcjxzaXplX3Q+IGNvbnRvdXJzOworICAgIGNvbnN0IFNrUGF0aCogc2tQYXRoID0gcGF0
aC5wbGF0Zm9ybVBhdGgoKTsKKyAgICBGbG9hdFZlY3RvciB2ZXJ0aWNlczsKKyAgICBTa1BvaW50
IHB0c1s0XTsKKyAgICBTa1BhdGg6Okl0ZXIgaXRlcigqc2tQYXRoLCB0cnVlKTsKKyAgICBTa1Bh
dGg6OlZlcmIgdmVyYjsKKyAgICB3aGlsZSAoKHZlcmIgPSBpdGVyLm5leHQocHRzKSkgIT0gU2tQ
YXRoOjprRG9uZV9WZXJiKSB7CisgICAgICAgIHN3aXRjaCAodmVyYikgeworICAgICAgICBjYXNl
IFNrUGF0aDo6a01vdmVfVmVyYjoKKyAgICAgICAgICAgIHZlcnRpY2VzLmFwcGVuZChwdHNbMF0u
ZlgpOworICAgICAgICAgICAgdmVydGljZXMuYXBwZW5kKHB0c1swXS5mWSk7CisgICAgICAgICAg
ICB2ZXJ0aWNlcy5hcHBlbmQoMS4wZik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBTa1BhdGg6OmtMaW5lX1ZlcmI6CisgICAgICAgICAgICB2ZXJ0aWNlcy5hcHBlbmQocHRzWzFd
LmZYKTsKKyAgICAgICAgICAgIHZlcnRpY2VzLmFwcGVuZChwdHNbMV0uZlkpOworICAgICAgICAg
ICAgdmVydGljZXMuYXBwZW5kKDEuMGYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgU2tQYXRoOjprUXVhZF9WZXJiOgorICAgICAgICAgICAgaW50ZXJwb2xhdGVRdWFkcmF0aWMo
JnZlcnRpY2VzLCBwdHNbMF0sIHB0c1sxXSwgcHRzWzJdKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFNrUGF0aDo6a0N1YmljX1ZlcmI6CisgICAgICAgICAgICBpbnRlcnBvbGF0
ZUN1YmljKCZ2ZXJ0aWNlcywgcHRzWzBdLCBwdHNbMV0sIHB0c1syXSwgcHRzWzNdKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNrUGF0aDo6a0Nsb3NlX1ZlcmI6CisgICAgICAg
ICAgICBjb250b3Vycy5hcHBlbmQodmVydGljZXMuc2l6ZSgpIC8gMyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBTa1BhdGg6OmtEb25lX1ZlcmI6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlCisjZXJyb3IgVW5pbXBsZW1lbnRlZCBvbiB0aGlz
IHBsYXRmb3JtLgorI2VuZGlmCisKKyAgICBHTFV0ZXNzZWxhdG9yKiB0ZXNzID0gaW50ZXJuYWxf
Z2x1TmV3VGVzcygpOworICAgIGludGVybmFsX2dsdVRlc3NQcm9wZXJ0eSh0ZXNzLCBHTFVfVEVT
U19XSU5ESU5HX1JVTEUsIEdMVV9URVNTX1dJTkRJTkdfTk9OWkVSTyk7CisgICAgaW50ZXJuYWxf
Z2x1VGVzc0NhbGxiYWNrKHRlc3MsIEdMVV9URVNTX0JFR0lOX0RBVEEsIChURVNTQ0IpICZiZWdp
bkRhdGEpOworICAgIGludGVybmFsX2dsdVRlc3NDYWxsYmFjayh0ZXNzLCBHTFVfVEVTU19WRVJU
RVhfREFUQSwgKFRFU1NDQikgJnZlcnRleERhdGEpOworICAgIGludGVybmFsX2dsdVRlc3NDYWxs
YmFjayh0ZXNzLCBHTFVfVEVTU19FTkRfREFUQSwgKFRFU1NDQikgJmVuZERhdGEpOworICAgIGlu
dGVybmFsX2dsdVRlc3NDYWxsYmFjayh0ZXNzLCBHTFVfVEVTU19FREdFX0ZMQUdfREFUQSwgKFRF
U1NDQikgJmVkZ2VGbGFnRGF0YSk7CisgICAgaW50ZXJuYWxfZ2x1VGVzc0NhbGxiYWNrKHRlc3Ms
IEdMVV9URVNTX0NPTUJJTkVfREFUQSwgKFRFU1NDQikgJmNvbWJpbmVEYXRhKTsKKyAgICBXVEY6
OlZlY3RvcjxzaG9ydD4gaW5kaWNlczsKKyAgICBQb2x5Z29uRGF0YSBkYXRhKCZ2ZXJ0aWNlcywg
JmluZGljZXMpOworICAgIGludGVybmFsX2dsdVRlc3NCZWdpblBvbHlnb24odGVzcywgJmRhdGEp
OworICAgIFdURjo6VmVjdG9yPHNpemVfdD46OmNvbnN0X2l0ZXJhdG9yIGNvbnRvdXI7CisgICAg
c2l6ZV90IGkgPSAwOworICAgIGZvciAoY29udG91ciA9IGNvbnRvdXJzLmJlZ2luKCk7IGNvbnRv
dXIgIT0gY29udG91cnMuZW5kKCk7ICsrY29udG91cikgeworICAgICAgICBpbnRlcm5hbF9nbHVU
ZXNzQmVnaW5Db250b3VyKHRlc3MpOworICAgICAgICBmb3IgKDsgaSA8ICpjb250b3VyOyArK2kp
IHsKKyAgICAgICAgICAgIGRvdWJsZSBjWzNdOworICAgICAgICAgICAgY1swXSA9IHZlcnRpY2Vz
W2kgKiAzXTsKKyAgICAgICAgICAgIGNbMV0gPSB2ZXJ0aWNlc1tpICogMyArIDFdOworICAgICAg
ICAgICAgY1syXSA9IDEuMGY7CisgICAgICAgICAgICBpbnRlcm5hbF9nbHVUZXNzVmVydGV4KHRl
c3MsIGMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGkpKTsKKyAgICAgICAgfQorICAgICAgICBp
bnRlcm5hbF9nbHVUZXNzRW5kQ29udG91cih0ZXNzKTsKKyAgICB9CisgICAgaW50ZXJuYWxfZ2x1
VGVzc0VuZFBvbHlnb24odGVzcyk7CisgICAgaW50ZXJuYWxfZ2x1RGVsZXRlVGVzcyh0ZXNzKTsK
KworICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+YmluZEJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAqdmVydGV4QnVmZmVyKTsKKyAgICBjaGVja0dMRXJy
b3IoImNyZWF0ZVZlcnRleEJ1ZmZlckZyb21QYXRoLCBiaW5kQnVmZmVyIik7CisgICAgbV9jb250
ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpB
UlJBWV9CVUZGRVIsIHZlcnRpY2VzLnNpemUoKSAqIHNpemVvZihmbG9hdCksIHZlcnRpY2VzLmRh
dGEoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVBTV9EUkFXKTsKKyAgICBjaGVja0dMRXJyb3Io
ImNyZWF0ZVZlcnRleEJ1ZmZlckZyb21QYXRoLCBidWZmZXJEYXRhIik7CisKKyAgICBtX2NvbnRl
eHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkVM
RU1FTlRfQVJSQVlfQlVGRkVSLCAqaW5kZXhCdWZmZXIpOworICAgIGNoZWNrR0xFcnJvcigiY3Jl
YXRlVmVydGV4QnVmZmVyRnJvbVBhdGgsIGJpbmRCdWZmZXIiKTsKKyAgICBtX2NvbnRleHQtPmdy
YXBoaWNzQ29udGV4dDNEKCktPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRf
QVJSQVlfQlVGRkVSLCBpbmRpY2VzLnNpemUoKSAqIHNpemVvZihzaG9ydCksIGluZGljZXMuZGF0
YSgpLCBHcmFwaGljc0NvbnRleHQzRDo6U1RSRUFNX0RSQVcpOworICAgIGNoZWNrR0xFcnJvcigi
Y3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgsIGJ1ZmZlckRhdGEiKTsKKyAgICAqY291bnQgPSBp
bmRpY2VzLnNpemUoKTsKK30KKwordm9pZCBHTEVTMkNhbnZhczo6ZmlsbFBhdGgoY29uc3QgUGF0
aCYgcGF0aCwgY29uc3QgQ29sb3ImIGNvbG9yKQoreworICAgIGludCBjb3VudDsKKyAgICB1bnNp
Z25lZCB2ZXJ0ZXhCdWZmZXIsIGluZGV4QnVmZmVyOworICAgIGNyZWF0ZVZlcnRleEJ1ZmZlckZy
b21QYXRoKHBhdGgsICZjb3VudCwgJnZlcnRleEJ1ZmZlciwgJmluZGV4QnVmZmVyKTsKKyAgICBt
X2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkFSUkFZX0JVRkZFUiwgdmVydGV4QnVmZmVyKTsKKyAgICBjaGVja0dMRXJyb3IoImJpbmRC
dWZmZXIiKTsKKyAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmJpbmRCdWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBpbmRleEJ1ZmZlcik7Cisg
ICAgY2hlY2tHTEVycm9yKCJiaW5kQnVmZmVyIik7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0
cml4KG1fZmxpcE1hdHJpeCk7CisgICAgbWF0cml4Lm11bHRMZWZ0KG1fc3RhdGUtPm1fY3RtKTsK
KworICAgIG1fY29udGV4dC0+dXNlRmlsbFNvbGlkUHJvZ3JhbShtYXRyaXgsIGNvbG9yKTsKKyAg
ICBjaGVja0dMRXJyb3IoInVzZUZpbGxTb2xpZFByb2dyYW0iKTsKKworICAgIG1fY29udGV4dC0+
Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZHJhd0VsZW1lbnRzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklB
TkdMRVMsIGNvdW50LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDApOworICAg
IGNoZWNrR0xFcnJvcigiZHJhd0FycmF5cyIpOworCisgICAgbV9jb250ZXh0LT5ncmFwaGljc0Nv
bnRleHQzRCgpLT5kZWxldGVCdWZmZXIodmVydGV4QnVmZmVyKTsKKyAgICBjaGVja0dMRXJyb3Io
ImRlbGV0ZUJ1ZmZlciIpOworCisgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5k
ZWxldGVCdWZmZXIoaW5kZXhCdWZmZXIpOworICAgIGNoZWNrR0xFcnJvcigiZGVsZXRlQnVmZmVy
Iik7Cit9CisKK3ZvaWQgR0xFUzJDYW52YXM6OmJlZ2luU3RlbmNpbERyYXcoKQoreworICAgIC8v
IFR1cm4gb24gc3RlbmNpbCB0ZXN0LgorICAgIG1fY29udGV4dC0+ZW5hYmxlU3RlbmNpbCh0cnVl
KTsKKyAgICBjaGVja0dMRXJyb3IoImVuYWJsZSBTVEVOQ0lMX1RFU1QiKTsKKworICAgIC8vIFN0
ZW5jaWwgdGVzdCBuZXZlciBwYXNzZXMsIHNvIGNvbG9yYnVmZmVyIGlzIG5vdCBkcmF3bi4KKyAg
ICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPnN0ZW5jaWxGdW5jKEdyYXBoaWNzQ29u
dGV4dDNEOjpORVZFUiwgMSwgMSk7CisgICAgY2hlY2tHTEVycm9yKCJzdGVuY2lsRnVuYyIpOwor
CisgICAgLy8gQWxsIHdyaXRlcyBpbmNyZW1lbWVudCB0aGUgc3RlbmNpbCBidWZmZXIuCisgICAg
bV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5zdGVuY2lsT3AoR3JhcGhpY3NDb250ZXh0
M0Q6OklOQ1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OklOQ1IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OklOQ1IpOworICAgIGNoZWNrR0xFcnJv
cigic3RlbmNpbE9wIik7Cit9CisKK3ZvaWQgR0xFUzJDYW52YXM6OmFwcGx5Q2xpcHBpbmcoYm9v
bCBlbmFibGUpCit7CisgICAgbV9jb250ZXh0LT5lbmFibGVTdGVuY2lsKGVuYWJsZSk7CisgICAg
aWYgKGVuYWJsZSkgeworICAgICAgICAvLyBFbmFibGUgZHJhd2luZyBvbmx5IHdoZXJlIHN0ZW5j
aWwgaXMgbm9uLXplcm8uCisgICAgICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+
c3RlbmNpbEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkVRVUFMLCBtX3N0YXRlLT5tX2NsaXBwaW5n
UGF0aHMuc2l6ZSgpICUgMjU2LCAxKTsKKyAgICAgICAgY2hlY2tHTEVycm9yKCJzdGVuY2lsRnVu
YyIpOworICAgICAgICAvLyBLZWVwIGFsbCBzdGVuY2lsIHZhbHVlcyB0aGUgc2FtZS4KKyAgICAg
ICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5zdGVuY2lsT3AoR3JhcGhpY3NDb250
ZXh0M0Q6OktFRVAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6S0VFUCk7CisgICAg
ICAgIGNoZWNrR0xFcnJvcigic3RlbmNpbE9wIik7CisgICAgfQorfQorCiB2b2lkIEdMRVMyQ2Fu
dmFzOjpjaGVja0dMRXJyb3IoY29uc3QgY2hhciogaGVhZGVyKQogewogI2lmbmRlZiBOREVCVUcK
QEAgLTI4Myw0ICs2MTIsMyBAQCB2b2lkIEdMRVMyQ2FudmFzOjpjaGVja0dMRXJyb3IoY29uc3Qg
Y2hhCiB9CiAKIH0KLQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vR0xFUzJDYW52YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCShyZXZpc2lvbiA3NjAyNCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAgY2xhc3MgQ29sb3I7CiBjbGFzcyBEcmF3aW5n
QnVmZmVyOwogY2xhc3MgRmxvYXRSZWN0OwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFz
cyBQYXRoOwogY2xhc3MgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q7CiAKIGNsYXNzIEdMRVMyQ2Fu
dmFzIDogcHVibGljIE5vbmNvcHlhYmxlIHsKQEAgLTU1LDYgKzU2LDcgQEAgcHVibGljOgogICAg
IEdMRVMyQ2FudmFzKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiwgRHJhd2luZ0J1ZmZlciosIGNv
bnN0IEludFNpemUmKTsKICAgICB+R0xFUzJDYW52YXMoKTsKIAorICAgIHZvaWQgZmlsbFBhdGgo
Y29uc3QgUGF0aCYpOwogICAgIHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
Q29sb3ImLCBDb2xvclNwYWNlKTsKICAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYp
OwogICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwpAQCAtNjUsNiArNjcsOCBA
QCBwdWJsaWM6CiAgICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlhbnMpOwogICAgIHZv
aWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7CiAgICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZm
aW5lVHJhbnNmb3JtJik7CisgICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJik7CisgICAgdm9p
ZCBjbGlwT3V0KGNvbnN0IFBhdGgmKTsKIAogICAgIHZvaWQgc2F2ZSgpOwogICAgIHZvaWQgcmVz
dG9yZSgpOwpAQCAtNzIsOSArNzYsMTMgQEAgcHVibGljOgogICAgIC8vIG5vbi1zdGFuZGFyZCBm
dW5jdGlvbnMKICAgICAvLyBUaGVzZSBhcmUgbm90IHN0YW5kYXJkIEdyYXBoaWNzQ29udGV4dCBm
dW5jdGlvbnMsIGFuZCBzaG91bGQgYmUgcHVzaGVkCiAgICAgLy8gZG93biBpbnRvIGEgUGxhdGZv
cm1Db250ZXh0R0xFUzIgYXQgc29tZSBwb2ludC4KKworICAgIC8vIFRoaXMgdmVyc2lvbiBpcyBj
YWxsZWQgYnkgdGhlIGNhbnZhcy0+Y2FudmFzIGRyYXdzLgogICAgIHZvaWQgZHJhd1RleHR1cmVk
UmVjdCh1bnNpZ25lZCB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2Us
IENvbXBvc2l0ZU9wZXJhdG9yKTsKLSAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSos
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3Bl
cmF0b3IpOworICAgIC8vIFRoaXMgdmVyc2lvbiBpcyBjYWxsZWQgYnkgQml0bWFwSW1hZ2U6OmRy
YXcoKS4KICAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSosIGNvbnN0IEZsb2F0UmVj
dCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNlLCBDb21wb3Np
dGVPcGVyYXRvcik7CisgICAgLy8gVGhpcyB2ZXJzaW9uIGlzIGNhbGxlZCBieSB0aGUgYWJvdmUs
IGFuZCBieSB0aGUgc29mdHdhcmUtPmhhcmR3YXJlIHVwbG9hZHMuCisgICAgdm9pZCBkcmF3VGV4
dHVyZWRSZWN0KFRleHR1cmUqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0
UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEsIENvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBib29sIGNsaXApOwogICAgIFRleHR1cmUqIGNyZWF0
ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIsIFRleHR1cmU6OkZvcm1hdCwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KTsKICAgICBUZXh0dXJlKiBnZXRUZXh0dXJlKE5hdGl2ZUltYWdlUHRyKTsKIApAQCAt
ODgsNiArOTYsMTAgQEAgcHJpdmF0ZToKICAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3RUaWxlKFRl
eHR1cmUqIHRleHR1cmUsIGludCB0aWxlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEp
OwogICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSk7CiAgICAgdm9pZCBhcHBseUNvbXBvc2l0ZU9wZXJhdG9y
KENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2b2lkIGNyZWF0ZVZlcnRleEJ1ZmZlckZyb21QYXRo
KGNvbnN0IFBhdGgmLCBpbnQqIGNvdW50LCB1bnNpZ25lZCogdmVydGV4QnVmZmVyLCB1bnNpZ25l
ZCogaW5kZXhCdWZmZXIpOworICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYsIGNvbnN0IENv
bG9yJik7CisgICAgdm9pZCBiZWdpblN0ZW5jaWxEcmF3KCk7CisgICAgdm9pZCBhcHBseUNsaXBw
aW5nKGJvb2wgZW5hYmxlKTsKICAgICB2b2lkIGNoZWNrR0xFcnJvcihjb25zdCBjaGFyKiBoZWFk
ZXIpOwogCiAgICAgSW50U2l6ZSBtX3NpemU7CkBAIC05Niw3ICsxMDgsOCBAQCBwcml2YXRlOgog
ICAgIERyYXdpbmdCdWZmZXIqIG1fZHJhd2luZ0J1ZmZlcjsKIAogICAgIHN0cnVjdCBTdGF0ZTsK
LSAgICBXVEY6OlZlY3RvcjxTdGF0ZT4gbV9zdGF0ZVN0YWNrOworICAgIHR5cGVkZWYgV1RGOjpW
ZWN0b3I8U3RhdGU+IFN0YXRlVmVjdG9yOworICAgIFN0YXRlVmVjdG9yIG1fc3RhdGVTdGFjazsK
ICAgICBTdGF0ZSogbV9zdGF0ZTsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9mbGlwTWF0cml4Owog
fTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVm
ZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvRHJhd2luZ0J1ZmZlci5jcHAJKHJldmlzaW9uIDc2MDI0KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02NywxNiArNjcsMjEgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpjbGVhcigpCiAgICAgICAgIG1f
bXVsdGlzYW1wbGVDb2xvckJ1ZmZlciA9IDA7CiAgICAgfQogICAgIAotICAgIGlmIChtX211bHRp
c2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKSB7Ci0gICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUmVu
ZGVyYnVmZmVyKG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICBtX211
bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyID0gMDsKLSAgICB9Ci0gICAgCiAgICAgaWYgKG1f
ZGVwdGhTdGVuY2lsQnVmZmVyKSB7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUmVuZGVyYnVm
ZmVyKG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKICAgICAgICAgbV9kZXB0aFN0ZW5jaWxCdWZmZXIg
PSAwOwogICAgIH0KICAgICAKKyAgICBpZiAobV9kZXB0aEJ1ZmZlcikgeworICAgICAgICBtX2Nv
bnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX2RlcHRoQnVmZmVyKTsKKyAgICAgICAgbV9kZXB0
aEJ1ZmZlciA9IDA7CisgICAgfQorICAgIAorICAgIGlmIChtX3N0ZW5jaWxCdWZmZXIpIHsKKyAg
ICAgICAgbV9jb250ZXh0LT5kZWxldGVSZW5kZXJidWZmZXIobV9zdGVuY2lsQnVmZmVyKTsKKyAg
ICAgICAgbV9zdGVuY2lsQnVmZmVyID0gMDsKKyAgICB9CisgICAgCiAgICAgaWYgKG1fbXVsdGlz
YW1wbGVGQk8pIHsKICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKICAgICAgICAgbV9jb250
ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX211bHRpc2FtcGxlRkJPKTsKQEAgLTkyLDIyICs5Nyw1
MiBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OmNsZWFyKCkKIAogdm9pZCBEcmF3aW5nQnVmZmVyOjpj
cmVhdGVTZWNvbmRhcnlCdWZmZXJzKCkKIHsKLSAgICBjb25zdCBHcmFwaGljc0NvbnRleHQzRDo6
QXR0cmlidXRlcyYgYXR0cmlidXRlcyA9IG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMo
KTsKLQotICAgIC8vIENyZWF0ZSB0aGUgc3RlbmNpbCBhbmQgZGVwdGggYnVmZmVyIGlmIG5lZWRl
ZAotICAgIGlmICghbXVsdGlzYW1wbGUoKSAmJiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJp
YnV0ZXMuZGVwdGgpKQotICAgICAgICBtX2RlcHRoU3RlbmNpbEJ1ZmZlciA9IG1fY29udGV4dC0+
Y3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0KICAgICAvLyBjcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8K
ICAgICBpZiAobXVsdGlzYW1wbGUoKSkgewogICAgICAgICBtX211bHRpc2FtcGxlRkJPID0gbV9j
b250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwogICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFt
ZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8p
OwogICAgICAgICBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVJl
bmRlcmJ1ZmZlcigpOwotICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0
ZXMuZGVwdGgpCi0gICAgICAgICAgICBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyID0g
bV9jb250ZXh0LT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKICAgICB9CiB9CiAKK3ZvaWQgRHJhd2lu
Z0J1ZmZlcjo6cmVzaXplRGVwdGhTdGVuY2lsKGludCBzYW1wbGVDb3VudCkKK3sKKyAgICBjb25z
dCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyYgYXR0cmlidXRlcyA9IG1fY29udGV4dC0+
Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCAmJiBhdHRy
aWJ1dGVzLnN0ZW5jaWwgJiYgbV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQp
IHsKKyAgICAgICAgaWYgKCFtX2RlcHRoU3RlbmNpbEJ1ZmZlcikKKyAgICAgICAgICAgIG1fZGVw
dGhTdGVuY2lsQnVmZmVyID0gbV9jb250ZXh0LT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICAg
ICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgaWYgKG11bHRpc2FtcGxlKCkp
CisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+cmVuZGVyYnVmZmVyU3Rv
cmFnZU11bHRpc2FtcGxlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIHNhbXBsZUNv
dW50LCBFeHRlbnNpb25zM0Q6OkRFUFRIMjRfU1RFTkNJTDgsIG1fc2l6ZS53aWR0aCgpLCBtX3Np
emUuaGVpZ2h0KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2NvbnRleHQtPnJlbmRl
cmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgRXh0ZW5zaW9u
czNEOjpERVBUSDI0X1NURU5DSUw4LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsK
KyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQs
IEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsK
KyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpIHsKKyAgICAgICAgICAg
IGlmICghbV9kZXB0aEJ1ZmZlcikKKyAgICAgICAgICAgICAgICBtX2RlcHRoQnVmZmVyID0gbV9j
b250ZXh0LT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+Ymlu
ZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVm
ZmVyKTsKKyAgICAgICAgICAgIGlmIChtdWx0aXNhbXBsZSgpKQorICAgICAgICAgICAgICAgIG1f
Y29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUo
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9DT01QT05FTlQxNiwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQo
KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJi
dWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9DT01QT05FTlQxNiwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQo
KSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFD
SE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOwor
ICAgICAgICB9CisgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwpIHsKKyAgICAgICAgICAg
IGlmICghbV9zdGVuY2lsQnVmZmVyKQorICAgICAgICAgICAgICAgIG1fc3RlbmNpbEJ1ZmZlciA9
IG1fY29udGV4dC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAgICAgICAgICBtX2NvbnRleHQt
PmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9zdGVu
Y2lsQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChtdWx0aXNhbXBsZSgpKQorICAgICAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlz
YW1wbGUoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIEdyYXBo
aWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVYOCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWln
aHQoKSk7CisgICAgICAgICAgICBlbHNlIAorICAgICAgICAgICAgICAgIG1fY29udGV4dC0+cmVu
ZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDgsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0
KCkpOworICAgICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FU
VEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZl
cik7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOworfQorCiB2b2lkIERyYXdpbmdCdWZm
ZXI6OnJlc2V0KGNvbnN0IEludFNpemUmIG5ld1NpemUpCiB7CiAgICAgaWYgKG1fc2l6ZSA9PSBu
ZXdTaXplKQpAQCAtMTIwLDcgKzE1NSw3IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29u
c3QgSW50U2l6ZSYKICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIAog
ICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzID0gbV9j
b250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpOwotICAgIHVuc2lnbmVkIGxvbmcgaW50ZXJu
YWxDb2xvckZvcm1hdCwgY29sb3JGb3JtYXQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0g
MDsKKyAgICB1bnNpZ25lZCBsb25nIGludGVybmFsQ29sb3JGb3JtYXQsIGNvbG9yRm9ybWF0Owog
ICAgIGlmIChhdHRyaWJ1dGVzLmFscGhhKSB7CiAgICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQg
PSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKICAgICAgICAgY29sb3JGb3JtYXQgPSBHcmFwaGlj
c0NvbnRleHQzRDo6UkdCQTsKQEAgLTEyOCwxNyArMTYzLDcgQEAgdm9pZCBEcmF3aW5nQnVmZmVy
OjpyZXNldChjb25zdCBJbnRTaXplJgogICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR3Jh
cGhpY3NDb250ZXh0M0Q6OlJHQjsKICAgICAgICAgY29sb3JGb3JtYXQgPSBHcmFwaGljc0NvbnRl
eHQzRDo6UkdCOwogICAgIH0KLSAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0
ZXMuZGVwdGgpIHsKLSAgICAgICAgLy8gV2UgZG9uJ3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0
ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlzIG5vdC4KLSAgICAgICAgLy8gU2VlIEdyYXBo
aWNzQ29udGV4dDNEIGNvbnN0cnVjdG9yLgotCi0gICAgICAgIC8vIEZJWE1FOiAgSWYgcGFja2Vk
IGRlcHRoL3N0ZW5jaWwgaXMgbm90IHN1cHBvcnRlZCwgd2Ugc2hvdWxkCi0gICAgICAgIC8vIGNy
ZWF0ZSBzZXBhcmF0ZSByZW5kZXJidWZmZXJzIGZvciBkZXB0aCBhbmQgc3RlbmNpbC4KLSAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCAmJiBhdHRyaWJ1dGVzLmRlcHRoICYmIG1fcGFja2Vk
RGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQotICAgICAgICAgICAgaW50ZXJuYWxEZXB0
aFN0ZW5jaWxGb3JtYXQgPSBFeHRlbnNpb25zM0Q6OkRFUFRIMjRfU1RFTkNJTDg7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gR3JhcGhpY3ND
b250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2OwotICAgIH0KKwogCiAgICAgLy8gcmVzaXplIG11
bHRpc2FtcGxlIEZCTwogICAgIGlmIChtdWx0aXNhbXBsZSgpKSB7CkBAIC0xNTIsMTUgKzE3Nyw3
IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYKICAgICAgICAgbV9j
b250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIs
IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CiAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5z
aW9ucygpLT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIGludGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53
aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwogICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVy
UmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
LCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwotICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVu
Y2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpIHsKLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFJl
bmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxl
RGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBtX3Np
emUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVz
LnN0ZW5jaWwpCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpT
VEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fbXVs
dGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMu
ZGVwdGgpCi0gICAgICAgICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBU
SF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX211bHRpc2Ft
cGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgfQotICAgICAgICBtX2NvbnRleHQtPmJp
bmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7CisgICAg
ICAgIHJlc2l6ZURlcHRoU3RlbmNpbChzYW1wbGVDb3VudCk7CiAgICAgICAgIGlmIChtX2NvbnRl
eHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
KSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKICAgICAgICAg
ICAgIC8vIENsZWFudXAKICAgICAgICAgICAgIGNsZWFyKCk7CkBAIC0xNzUsMTUgKzE5Miw3IEBA
IHZvaWQgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYKICAgICBtX2NvbnRleHQt
PnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAs
IGludGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAs
IGNvbG9yRm9ybWF0LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSk7CiAgICAgbV9j
b250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIsIDApOwogICAgIG1fY29udGV4dC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDApOwotICAgIGlmICghbXVsdGlz
YW1wbGUoKSAmJiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpKSB7Ci0g
ICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIG1fY29udGV4dC0+cmVu
ZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBpbnRlcm5h
bERlcHRoU3RlbmNpbEZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci0g
ICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwpCi0gICAgICAgICAgICBtX2NvbnRleHQtPmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICBpZiAoYXR0cmlidXRl
cy5kZXB0aCkKLSAgICAgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhf
QVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5j
aWxCdWZmZXIpOwotICAgICAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7Ci0gICAgfQorICAgIHJlc2l6ZURlcHRoU3RlbmNp
bCgwKTsKICAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
X0NPTVBMRVRFKSB7CiAgICAgICAgIC8vIENsZWFudXAKICAgICAgICAgY2xlYXIoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuaAkocmV2aXNpb24gNzYwMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBA
IHB1YmxpYzoKICAgICAvLyBDcmVhdGUgdGhlIGRlcHRoL3N0ZW5jaWwgYW5kIG11bHRpc2FtcGxl
IGJ1ZmZlcnMsIGlmIG5lZWRlZC4KICAgICB2b2lkIGNyZWF0ZVNlY29uZGFyeUJ1ZmZlcnMoKTsK
ICAgICAKKyAgICB2b2lkIHJlc2l6ZURlcHRoU3RlbmNpbChpbnQgc2FtcGxlQ291bnQpOworCiAg
ICAgLy8gQ29waWVzIHRoZSBtdWx0aXNhbXBsZSBjb2xvciBidWZmZXIgdG8gdGhlIG5vcm1hbCBj
b2xvciBidWZmZXIgYW5kIGxlYXZlcyBtX2ZibyBib3VuZAogICAgIHZvaWQgY29tbWl0KGxvbmcg
eCA9IDAsIGxvbmcgeSA9IDAsIGxvbmcgd2lkdGggPSAtMSwgbG9uZyBoZWlnaHQgPSAtMSk7CiAg
ICAgCkBAIC0xMDYsMTMgKzEwOCwxOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wYWNrZWREZXB0
aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQ7CiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZibzsK
ICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fY29sb3JCdWZmZXI7CisKKyAgICAvLyBUaGlzIGlzIHVz
ZWQgd2hlbiB3ZSBoYXZlIE9FU19wYWNrZWRfZGVwdGhfc3RlbmNpbC4KICAgICBQbGF0Zm9ybTNE
T2JqZWN0IG1fZGVwdGhTdGVuY2lsQnVmZmVyOwogCisgICAgLy8gVGhlc2UgYXJlIHVzZWQgd2hl
biB3ZSBkb24ndC4KKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZGVwdGhCdWZmZXI7CisgICAgUGxh
dGZvcm0zRE9iamVjdCBtX3N0ZW5jaWxCdWZmZXI7CisKICAgICAvLyBGb3IgbXVsdGlzYW1wbGlu
ZwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9tdWx0aXNhbXBsZUZCTzsKICAgICBQbGF0Zm9ybTNE
T2JqZWN0IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcjsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1f
bXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXI7Ci0gICAgCisKICNpZiBQTEFURk9STShDSFJP
TUlVTSkKICAgICBPd25QdHI8V2lsbFB1Ymxpc2hDYWxsYmFjaz4gbV9jYWxsYmFjazsKICAgICBP
d25QdHI8RHJhd2luZ0J1ZmZlckludGVybmFsPiBtX2ludGVybmFsOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiA3NjAyNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTUxLDYgKzUxLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogUGFzc1JlZlB0
cjxTaGFyZWRHcmFwaGljc0NvbnRleHQzRD4gU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0
ZShIb3N0V2luZG93KiBob3N0V2luZG93KQogewogICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRy
aWJ1dGVzIGF0dHI7CisgICAgYXR0ci5kZXB0aCA9IGZhbHNlOworICAgIGF0dHIuc3RlbmNpbCA9
IHRydWU7CisgICAgYXR0ci5hbnRpYWxpYXMgPSBmYWxzZTsKICAgICBhdHRyLmNhblJlY292ZXJG
cm9tQ29udGV4dExvc3MgPSBmYWxzZTsgLy8gQ2FudmFzIGNvbnRleHRzIGNhbiBub3QgaGFuZGxl
IGxvc3QgY29udGV4dHMuCiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0g
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRyLCBob3N0V2luZG93KTsKICAgICBpZiAoIWNv
bnRleHQpCkBAIC0yOTMsNiArMjk2LDE0IEBAIHZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6
OmFwcGx5Q29tcG8KICAgICB9CiB9CiAKK3ZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmVu
YWJsZVN0ZW5jaWwoYm9vbCBlbmFibGUpCit7CisgICAgaWYgKGVuYWJsZSkKKyAgICAgICAgbV9j
b250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCk7CisgICAgZWxz
ZQorICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxf
VEVTVCk7Cit9CisKIHZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnVzZVF1YWRWZXJ0aWNl
cygpCiB7CiAgICAgaWYgKCFtX3F1YWRWZXJ0aWNlcykgewpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNz
Q29udGV4dDNELmgJKHJldmlzaW9uIDc2MDI0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAg
LTkwLDYgKzkwLDcgQEAgcHVibGljOgogCiAgICAgLy8gU2hhcmVkIGxvZ2ljIGZvciBjYW52YXMg
MmQKICAgICB2b2lkIGFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoQ29tcG9zaXRlT3BlcmF0b3IpOwor
ICAgIHZvaWQgZW5hYmxlU3RlbmNpbChib29sIGVuYWJsZSk7CiAgICAgdm9pZCB1c2VRdWFkVmVy
dGljZXMoKTsKIAogICAgIHZvaWQgdXNlRmlsbFNvbGlkUHJvZ3JhbShjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBjb25zdCBDb2xvciYpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVmZmVyTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbQkocmV2
aXNpb24gNzYwMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvbWFj
L0RyYXdpbmdCdWZmZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQxLDE1ICs0MSwxNiBAQCBE
cmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29uCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3Vw
cG9ydGVkKQogICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX3NpemUoc2l6ZSkKKyAg
ICAsIG1fc2l6ZSgtMSwgLTEpCiAgICAgLCBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVk
KG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKQogICAgICwgbV9wYWNrZWREZXB0aFN0ZW5j
aWxFeHRlbnNpb25TdXBwb3J0ZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVk
KQogICAgICwgbV9mYm8oY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKSkKICAgICAsIG1fY29s
b3JCdWZmZXIoMCkKICAgICAsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKDApCisgICAgLCBtX2RlcHRo
QnVmZmVyKDApCisgICAgLCBtX3N0ZW5jaWxCdWZmZXIoMCkKICAgICAsIG1fbXVsdGlzYW1wbGVG
Qk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQotICAgICwgbV9tdWx0aXNh
bXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQogewogICAgIEFTU0VSVChtX2Zibyk7CiAgICAgaWYg
KCFtX2ZibykgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9H
cmFwaGljc0NvbnRleHRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCShyZXZpc2lvbiA3NjAy
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250
ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4Niw2ICszODYsOSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUo
KSkKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmdwdUNhbnZhcygpLT5jbGlwUGF0aChwYXRo
KTsKKwogICAgIGNvbnN0IFNrUGF0aCYgcCA9ICpwYXRoLnBsYXRmb3JtUGF0aCgpOwogICAgIGlm
ICghaXNQYXRoU2tpYVNhZmUoZ2V0Q1RNKCksIHApKQogICAgICAgICByZXR1cm47CkBAIC00MTAs
NiArNDEzLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aAogICAg
IGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChwbGF0
Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpCisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5ncHVD
YW52YXMoKS0+Y2xpcE91dChwKTsKKwogICAgIGNvbnN0IFNrUGF0aCYgcGF0aCA9ICpwLnBsYXRm
b3JtUGF0aCgpOwogICAgIGlmICghaXNQYXRoU2tpYVNhZmUoZ2V0Q1RNKCksIHBhdGgpKQogICAg
ICAgICByZXR1cm47CkBAIC00MjIsNiArNDI4LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNs
aXBQYXRoKGNvbnN0IFBhdAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAorICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpCisgICAgICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMoKS0+Y2xpcFBhdGgocGF0aFRvQ2xpcCk7CisKICAg
ICAvLyBGSVhNRTogQmUgc21hcnRlciBhYm91dCB0aGlzLgogICAgIGJlZ2luUGF0aCgpOwogICAg
IGFkZFBhdGgocGF0aFRvQ2xpcCk7CkBAIC03MzMsNiArNzQyLDEyIEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKICAgICBiZWdpblBhdGgoKTsKICAgICBhZGRQYXRo
KHBhdGhUb0ZpbGwpOwogCisgICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSAmJiBw
bGF0Zm9ybUNvbnRleHQoKS0+Y2FuQWNjZWxlcmF0ZSgpKSB7CisgICAgICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5wcmVwYXJlRm9ySGFyZHdhcmVEcmF3KCk7CisgICAgICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5ncHVDYW52YXMoKS0+ZmlsbFBhdGgocGF0aFRvRmlsbCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKICAgICBTa1BhdGggcGF0aCA9IHBsYXRmb3JtQ29udGV4dCgpLT5jdXJyZW50UGF0
aEluTG9jYWxDb29yZGluYXRlcygpOwogICAgIGlmICghaXNQYXRoU2tpYVNhZmUoZ2V0Q1RNKCks
IHBhdGgpKQogICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCShy
ZXZpc2lvbiA3NjAyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
UGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwMiw4ICs3MDIsNyBA
QCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmFwcGx5QW50aUFsaWFzCiBib29sIFBsYXRmb3Jt
Q29udGV4dFNraWE6OmNhbkFjY2VsZXJhdGUoKSBjb25zdAogewogICAgIHJldHVybiAhbV9zdGF0
ZS0+bV9maWxsU2hhZGVyIC8vIENhbid0IGFjY2VsZXJhdGUgd2l0aCBhIGZpbGwgZ3JhZGllbnQg
b3IgcGF0dGVybi4KLSAgICAgICAgJiYgIW1fc3RhdGUtPm1fbG9vcGVyIC8vIENhbid0IGFjY2Vs
ZXJhdGUgd2l0aCBhIHNoYWRvdy4KLSAgICAgICAgJiYgIW1fc3RhdGUtPm1fY2FudmFzQ2xpcEFw
cGxpZWQ7IC8vIENhbid0IGFjY2VsZXJhdGUgd2l0aCBhIGNsaXAgdG8gcGF0aCBhcHBsaWVkLgor
ICAgICAgICAmJiAhbV9zdGF0ZS0+bV9sb29wZXI7IC8vIENhbid0IGFjY2VsZXJhdGUgd2l0aCBh
IHNoYWRvdy4KIH0KIAogYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpjYW52YXNDbGlwQXBwbGll
ZCgpIGNvbnN0CkBAIC04NDgsNyArODQ3LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjp1
cGxvYWRTb2Z0d2FyZQogCiAgICAgbV91cGxvYWRUZXh0dXJlLT51cGRhdGVTdWJSZWN0KGJpdG1h
cC5nZXRQaXhlbHMoKSwgbV9zb2Z0d2FyZURpcnR5UmVjdCk7CiAgICAgQWZmaW5lVHJhbnNmb3Jt
IGlkZW50aXR5OwotICAgIGdwdUNhbnZhcygpLT5kcmF3VGV4dHVyZWRSZWN0KG1fdXBsb2FkVGV4
dHVyZS5nZXQoKSwgbV9zb2Z0d2FyZURpcnR5UmVjdCwgbV9zb2Z0d2FyZURpcnR5UmVjdCwgaWRl
bnRpdHksIDEuMCwgQ29sb3JTcGFjZURldmljZVJHQiwgb3ApOworICAgIGdwdUNhbnZhcygpLT5k
cmF3VGV4dHVyZWRSZWN0KG1fdXBsb2FkVGV4dHVyZS5nZXQoKSwgbV9zb2Z0d2FyZURpcnR5UmVj
dCwgbV9zb2Z0d2FyZURpcnR5UmVjdCwgaWRlbnRpdHksIDEuMCwgQ29sb3JTcGFjZURldmljZVJH
Qiwgb3AsIGZhbHNlKTsKICAgICAvLyBDbGVhciBvdXQgdGhlIHJlZ2lvbiBvZiB0aGUgc29mdHdh
cmUgY2FudmFzIHdlIGp1c3QgdXBsb2FkZWQuCiAgICAgbV9jYW52YXMtPnNhdmUoKTsKICAgICBt
X2NhbnZhcy0+cmVzZXRNYXRyaXgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkv
Z2x1L1JFQURNRS53ZWJraXQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0
eS9nbHUvUkVBRE1FLndlYmtpdAkocmV2aXNpb24gNzYwMjQpCisrKyBTb3VyY2UvV2ViQ29yZS90
aGlyZHBhcnR5L2dsdS9SRUFETUUud2Via2l0CSh3b3JraW5nIGNvcHkpCkBAIC0zMSwzICszMSw5
IEBAIFRoZSBmb2xsb3dpbmcgY2hhbmdlcyB3ZXJlIG1hZGUgaW4gb3JkZXIKICAgICBvZiB0aGUg
dW51c2VkIE5vcm1hbGl6ZSBmdW5jdGlvbi4KIAogICAtIEluIHByaW9yaXR5cS1oZWFwLmMsIGFu
ICNpbmNsdWRlIG9mIDxsaW1pdHMuaD4gd2FzIGFkZGVkLgorCisgIC0gSW4gc3dlZXAuYywgSXNX
aW5kaW5nSW5zaWRlKCkgd2FzIGdpdmVuIGEgcmV0dXJuIHZhbHVlIHRvIHNpbGVuY2UgYQorICAg
IHdhcm5pbmctYXMtZXJyb3IgaW4gcmVsZWFzZSBidWlsZHMuCisKKyAgLSBJbiBzd2VlcC5jLCBE
b25lRWRnZURpY3QoKSdzIGZpeGVkRWRnZXMgd2FzIHdyYXBwZWQgaW4gI2luZGVmIE5ERUJVRywg
dG8KKyAgICBzaWxlbmNlIGEgd2FybmluZy1hcy1lcnJvciBpbiByZWxlYXNlIGJ1aWxkcy4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAuYwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmMJKHJl
dmlzaW9uIDc2MDI0KQorKysgU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9z
d2VlcC5jCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMsNiArMjUzLDcgQEAgc3RhdGljIEdMYm9vbGVh
biBJc1dpbmRpbmdJbnNpZGUoIEdMVXRlcwogICAvKkxJTlRFRCovCiAgIGFzc2VydCggRkFMU0Ug
KTsKICAgLypOT1RSRUFDSEVEKi8KKyAgcmV0dXJuIDA7CiB9CiAKIApAQCAtMTE3Myw3ICsxMTc0
LDkgQEAgc3RhdGljIHZvaWQgSW5pdEVkZ2VEaWN0KCBHTFV0ZXNzZWxhdG9yIAogc3RhdGljIHZv
aWQgRG9uZUVkZ2VEaWN0KCBHTFV0ZXNzZWxhdG9yICp0ZXNzICkKIHsKICAgQWN0aXZlUmVnaW9u
ICpyZWc7CisjaWZuZGVmIE5ERUJVRwogICBpbnQgZml4ZWRFZGdlcyA9IDA7CisjZW5kaWYKIAog
ICAvKiBfX0dMX0RJQ1RMSVNUS0VZICovIC8qIF9fR0xfRElDVExJU1RNSU4gKi8KICAgd2hpbGUo
IChyZWcgPSAoQWN0aXZlUmVnaW9uICopZGljdEtleSggZGljdE1pbiggdGVzcy0+ZGljdCApKSkg
IT0gTlVMTCApIHsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MDI2KQorKysgTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTEgQEAKKzIwMTEtMDEtMTggIFN0ZXBo
ZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHR3byB0by1iZS1yZWJhc2VsaW5lZCB0
ZXN0cyBmb3IgdGhlIEdQVSBwYXRoLgorCisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0tZ3B1
L3Rlc3RfZXhwZWN0YXRpb25zLnR4dDoKKwogMjAxMS0wMS0xOCAgUGF2ZWwgUG9kaXZpbG92ICA8
cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByZW1vdmUgd3Jv
bmcgY2hyb21pdW0gZXhwZWN0YXRpb24gZm9yIGNvbnNvbGUteGhyLWxvZ2dpbmcgdGVzdC4KSW5k
ZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLWdwdS90ZXN0X2V4cGVjdGF0aW9ucy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tZ3B1L3Rlc3Rf
ZXhwZWN0YXRpb25zLnR4dAkocmV2aXNpb24gNzYwMjQpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9y
bS9jaHJvbWl1bS1ncHUvdGVzdF9leHBlY3RhdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0z
ODYsMyArMzg2LDcgQEAgQlVHV0s1MTk4OSBXSU4gTElOVVggOiBmYXN0L2NhbnZhcy9jYW52YQog
CiAvLyBTdGFydGVkIGZhaWxpbmcgYWZ0ZXIgcjc1NjQ4IG9uIGV2ZXJ5dGhpbmcgZXhjZXB0IFNu
b3cgTGVvcGFyZAogQlVHV0s1MjM0MSA6IGZhc3QvY2FudmFzL2NhbnZhcy1sYXJnZS1kaW1lbnNp
b25zLmh0bWwgPSBURVhUCisKKy8vIFRoZXNlIHdpbGwgbmVlZCB0byByZWJhc2VsaW5lZCBhZnRl
ciB0aGUgbmV3IHBhdGggZHJhd2luZyBsYW5kcy4KK0JVR19TRU5PUkJMQU5DTyBXSU4gTElOVVgg
OiBmYXN0L2NhbnZhcy9jYW52YXMtY29tcG9zaXRlLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxB
TkNPIFdJTiBMSU5VWCA6IGZhc3QvY2FudmFzL2NhbnZhcy10cmFuc2Zvcm0tc2tld2VkLmh0bWwg
PSBJTUFHRQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79283</attachid>
            <date>2011-01-18 09:03:25 -0800</date>
            <delta_ts>2011-01-18 11:16:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52627-20110118120323.patch</filename>
            <type>text/plain</type>
            <size>48257</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MDI2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE4IEBACisyMDExLTAxLTE4ICBTdGVwaGVu
IFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBhY2NlbGVyYXRlZCBwYXRoIGRy
YXdpbmcgYW5kIGNsaXBwaW5nIGZvciB0aGUgQ2FudmFzMkQgR1BVCisgICAgICAgIHBhdGguCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjYyNworICAg
ICAgICAKKyAgICAgICAgVGhpcyBpcyBkb25lIHdpdGggYSBzaW1wbGUgY3VydmUgaW50ZXJwb2xh
dG9yIGFuZCB0aGUgR0xVIHRlc3NlbGF0b3IsCisgICAgICAgIHdoaWNoIGlzIGdvb2QgZW5vdWdo
IGZvciBhIDMtNVggc3BlZWR1cCBvbgorICAgICAgICBodHRwOi8vaWUubWljcm9zb2Z0LmNvbS90
ZXN0ZHJpdmUvUGVyZm9ybWFuY2UvR2FsYWN0aWMvRGVmYXVsdC5odG1sLgorCisgICAgICAgIENv
dmVyZWQgYnkgY2FudmFzL3BoaWxpcC8yZC5wYXRoLmNsaXAuYmFzaWMuaHRtbCwgYW5kIG1hbnks
IG1hbnkgbW9yZS4KKyAgICAgICAgQWxsIHRlc3RzIGNhbnZhcy9waGlsaXAgYW5kIGZhc3QvY2Fu
dmFzIHBhdGhzIHBhc3Mgd2l0aCBubworICAgICAgICByZWdyZXNzaW9ucywgYWx0aG91Z2ggdHdv
IGhhdmUgbWlub3IgcGl4ZWwgZGlmZmVyZW5jZXMgd2hpY2ggcmVxdWlyZQorICAgICAgICByZWJh
c2VsaW5pbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAg
QWRkIGludGVybmFsX2dsdSBpbmNsdWRlIHBhdGggdG8gY2hyb21pdW0gYnVpbGQuCisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICBBZGQgaW50ZXJuYWxfZ2x1IGZpbGVzIHRvIGNocm9t
aXVtIGJ1aWxkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cGxhdGZvcm1M
YXllcik6CisgICAgICAgIE1ha2UgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIG1vcmUgcm9idXN0
IGFnYWluc3QgZmFpbHVyZSB0byBjcmVhdGUKKyAgICAgICAgYSBEcmF3aW5nQnVmZmVyLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKToKKyAg
ICAgICAgQXMgaW4gRHJhd2luZ0J1ZmZlck1hYy5jcHAsIGNhbGwgcmVzZXQoKSBmcm9tIHRoZSBj
b25zdHJ1Y3Rvci4KKyAgICAgICAgQWxzbyBpbml0aWFsaXplIHNpemUgdG8gKC0xLCAtMSksIHNv
IHJlc2V0KCkgZG9lc24ndCBlYXJseS1vdXQuCisgICAgICAgIEFkZCBpbml0aWFsaXplcnMgZm9y
IGRlcHRoQnVmZmVyIGFuZCBzdGVuY2lsQnVmZmVyLCBhbmQgcmVtb3ZlCisgICAgICAgIG11bHRp
c2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dMRVMyQ2FudmFzLmNwcDoKKyAgICAgICAgUmVtb3ZlIHNvbWUgdW51c2VkICNpbmNs
dWRlcy4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpTdGF0ZTo6U3RhdGUpOgorICAg
ICAgICBBZGQgY2xpcHBpbmcgc3RhdGUsIGFuZCBpbXBsZW1lbnQgc2F2ZS9yZXN0b3JlIHZpYSB0
aGUgY29weSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yKik6CisgICAg
ICAgIChXZWJDb3JlOjpRdWFkcmF0aWM6OlF1YWRyYXRpYyk6CisgICAgICAgIChXZWJDb3JlOjpR
dWFkcmF0aWM6OmZyb21CZXppZXIpOgorICAgICAgICAoV2ViQ29yZTo6UXVhZHJhdGljOjpldmFs
dWF0ZSk6CisgICAgICAgIFF1YWRyYXRpYyBCZXppZXIgY3VydmUgY2xhc3MuCisgICAgICAgIChX
ZWJDb3JlOjpDdWJpYzo6Q3ViaWMpOgorICAgICAgICAoV2ViQ29yZTo6Q3ViaWM6OmZyb21CZXpp
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3ViaWM6OmV2YWx1YXRlKToKKyAgICAgICAgQ3ViaWMg
QmV6aWVyIGN1cnZlIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmNsZWFy
UmVjdCk6CisgICAgICAgIEFkZCBjbGlwcGluZyBzdXBwb3J0IHRvIGNsZWFyUmVjdCgpLgorICAg
ICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmZpbGxQYXRoKToKKyAgICAgICAgSW1wbGVtZW50
IGZpbGxQYXRoKCkuCisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6ZmlsbFJlY3QpOgor
ICAgICAgICBBZGQgY2xpcHBpbmcgc3VwcG9ydCB0byBmaWxsUmVjdCgpLgorICAgICAgICAoV2Vi
Q29yZTo6R0xFUzJDYW52YXM6OmNsaXBQYXRoKToKKyAgICAgICAgSW1wbGVtZW50IGNsaXBQYXRo
KCkuCisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y2xpcE91dCk6CisgICAgICAgIFN0
dWIgb3V0IGNsaXBPdXQoKSAobm90IGNhbGxlZCBieSBDYW52YXMgMkQpLgorICAgICAgICAoV2Vi
Q29yZTo6R0xFUzJDYW52YXM6OnJlc3RvcmUpOgorICAgICAgICBXaGVuIHJlc3RvcmluZywgZHJh
dyBhbnkgcmVtYWluaW5nIGNsaXBwaW5nIHBhdGhzIHRvIHRoZSBzdGVuY2lsIGJ1ZmZlci4KKyAg
ICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KToKKyAgICAgICAg
QWRkIGNsaXBwaW5nIHN1cHBvcnQuCisgICAgICAgIChXZWJDb3JlOjppbnRlcnBvbGF0ZVF1YWRy
YXRpYyk6CisgICAgICAgIChXZWJDb3JlOjppbnRlcnBvbGF0ZUN1YmljKToKKyAgICAgICAgU2lt
cGxlIGN1cnZlIGludGVycG9sYXRpb24sIHVzaW5nIHRoZSBDdWJpYyBhbmQgUXVhZHJhdGljIGNs
YXNzZXMuCisgICAgICAgIChXZWJDb3JlOjpQb2x5Z29uRGF0YTo6UG9seWdvbkRhdGEpOgorICAg
ICAgICBBIHN0cnVjdCB0byBob2xkIHRoZSB0ZXNzZWxhdGlvbiBkYXRhIGZvciBjYWxsYmFja3Mu
CisgICAgICAgIChXZWJDb3JlOjpiZWdpbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZWRnZUZs
YWdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnZlcnRleERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6ZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpjb21iaW5lRGF0YSk6CisgICAgICAgIGlu
dGVybmFsX2dsdSB0ZXNzZWxhdGlvbiBjYWxsYmFja3MuCisgICAgICAgIChXZWJDb3JlOjpHTEVT
MkNhbnZhczo6Y3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgpOgorICAgICAgICBCdWlsZCBhbiBp
bnRlcnBvbGF0ZWQsIHRlc3NlbGF0ZWQgdmVydGV4IGJ1ZmZlciBhbmQgZWxlbWVudCBhcnJheSBi
dWZmZXIgZnJvbSBhIGdpdmVuIHBhdGgsIHN1aXRhYmxlIGZvciBmaWxsaW5nLgorICAgICAgICAo
V2ViQ29yZTo6R0xFUzJDYW52YXM6OmJlZ2luU3RlbmNpbERyYXcpOgorICAgICAgICBFbmFibGUg
c3RlbmNpbGxpbmcsIGFuZCBkaXNhYmxlIGRyYXdzIHRvIHRoZSBjb2xvciBidWZmZXIuCisgICAg
ICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6YXBwbHlDbGlwcGluZyk6CisgICAgICAgIElmIGNs
aXBwaW5nIGlzIGVuYWJsZWQsIHNldCB0aGUgYXBwcm9wcmlhdGUgR0wgc3RhdGUuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaDoKKyAgICAgICAgRG9j
dW1lbnQgdGhlIGZsYXZvdXJzIG9mIGRyYXdUZXh0dXJlZFJlY3QoKSBhIGJpdCwgc28gSSBkb24n
dCBnZXQgY29uZnVzZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6Y3JlYXRlU2Vjb25kYXJ5QnVmZmVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpyZXNpemVEZXB0aFN0ZW5jaWwpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cmVzZXQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmg6CisgICAgICAgIFVuaWZ5IG1fbXVsdGlzYW1w
bGVEZXB0aFN0ZW5jaWxCdWZmZXIgd2l0aCBtX2RlcHRoU3RlbmNpbEJ1ZmZlci4gCisgICAgICAg
IEltcGxlbWVudCBzZXBhcmF0ZSBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXJzIGZvciB3aGVuCisg
ICAgICAgIE9FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCBpcyBub3QgYXZhaWxhYmxlLiAgUmVmYWN0
b3IgY3JlYXRpb24gb2YKKyAgICAgICAgbXVsdGlzYW1wbGVkIGFuZCBub24tbXVsdGlzYW1wbGVk
IGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlcnMgaW50bworICAgICAgICByZXNpemVEZXB0aFN0ZW5j
aWwoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZSk6CisgICAgICAgIFR1cm4gb24gc3RlbmNpbCwgdHVybiBvZmYgZGVwdGgsIHR1cm4gb2Zm
IGFudGlhbGlhc2luZyAoZm9yIG5vdykuCisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRDo6ZW5hYmxlU3RlbmNpbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgIEltcGxlbWVudCBzdGVuY2ls
IGVuYWJsZS9kaXNhYmxlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhp
Y3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNh
bnZhc0NsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIFB1dCBpbiBHUFUg
aG9va3MgZm9yIHBhdGggY2xpcHBpbmcsIGFuZCBwYXRoIGRyYXdpbmcuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmNhbnZhc0NsaXBQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmNhbkFjY2VsZXJhdGUpOgorICAgICAgICBEb24n
dCBjaGVjayBmb3IgY2xpcHBpbmcgcGF0aHMgaW4gY2FuQWNjZWxlcmF0ZSgpIChzaW5jZSB3ZSBj
YW4KKyAgICAgICAgbm93IGFjY2VsZXJhdGUgdGhlbSkuCisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUNvbnRleHRTa2lhOjp1cGxvYWRTb2Z0d2FyZVRvSGFyZHdhcmUpOgorICAgICAgICBEb24n
dCBkbyBjbGlwcGluZyB3aGVuIHVwbG9hZGluZyBzb2Z0d2FyZSBkcmF3cyB0byBoYXJkd2FyZS4K
KyAgICAgICAgKiB0aGlyZHBhcnR5L2dsdS9SRUFETUUud2Via2l0OgorICAgICAgICBVcGRhdGUg
UkVBRE1FIHRvIHJlZmxlY3QgY29tcGlsZSBjaGFuZ2VzLgorICAgICAgICAqIHRoaXJkcGFydHkv
Z2x1L2xpYnRlc3Mvc3dlZXAuYzoKKyAgICAgICAgKElzV2luZGluZ0luc2lkZSk6CisgICAgICAg
IChEb25lRWRnZURpY3QpOgorICAgICAgICBGaXggc29tZSB3YXJuaW5ncyB0cmVhdGVkIGFzIGVy
cm9ycyBmb3IgdGhlIExpbnV4IFJlbGVhc2UgYnVpbGQuCisKIDIwMTEtMDEtMTggIFBhdmVsIFBv
ZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
WXVyeSBTZW1pa2hhdHNreS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDc2MDI0KQor
KysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00NDMzLDYg
KzQ0MzMsMzAgQEAKICAgICAgICAgICAgICdzdmcvU1ZHWm9vbUFuZFBhbi5oJywKICAgICAgICAg
ICAgICdzdmcvU1ZHWm9vbUV2ZW50LmNwcCcsCiAgICAgICAgICAgICAnc3ZnL1NWR1pvb21FdmVu
dC5oJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2RpY3QuaCcsCisgICAg
ICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9kaWN0LWxpc3QuaCcsCisgICAgICAgICAg
ICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9nZW9tLmgnLAorICAgICAgICAgICAgJ3RoaXJkcGFy
dHkvZ2x1L2xpYnRlc3MvbWVtYWxsb2MuaCcsCisgICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUv
bGlidGVzcy9tZXNoLmgnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvbm9y
bWFsLmgnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhl
YXAuaCcsCisgICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVh
cC5jJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1zb3J0
LmgnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLmgnLAor
ICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcmVuZGVyLmgnLAorICAgICAgICAg
ICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAuaCcsCisgICAgICAgICAgICAndGhpcmRw
YXJ0eS9nbHUvbGlidGVzcy90ZXNzLmgnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xp
YnRlc3MvdGVzc21vbm8uaCcsCisgICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9k
aWN0LmMnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5jJywKKyAg
ICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmMnLAorICAgICAgICAg
ICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvbWVzaC5jJywKKyAgICAgICAgICAgICd0aGlyZHBh
cnR5L2dsdS9saWJ0ZXNzL25vcm1hbC5jJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9s
aWJ0ZXNzL3ByaW9yaXR5cS5jJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNz
L3JlbmRlci5jJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmMn
LAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzcy5jJywKKyAgICAgICAg
ICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3Rlc3Ntb25vLmMnLAogICAgICAgICAgICAgJ3dl
YmF1ZGlvL0F1ZGlvQmFzaWNQcm9jZXNzb3JOb2RlLmNwcCcsCiAgICAgICAgICAgICAnd2ViYXVk
aW8vQXVkaW9CYXNpY1Byb2Nlc3Nvck5vZGUuaCcsCiAgICAgICAgICAgICAnd2ViYXVkaW8vQXVk
aW9CdWZmZXIuaCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAko
cmV2aXNpb24gNzYwMjQpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5
cAkod29ya2luZyBjb3B5KQpAQCAtMTg1LDYgKzE4NSw3IEBACiAgICAgICAnLi4vc3ZnL2dyYXBo
aWNzJywKICAgICAgICcuLi9zdmcvZ3JhcGhpY3MvZmlsdGVycycsCiAgICAgICAnLi4vc3ZnL3By
b3BlcnRpZXMnLAorICAgICAgJy4uL3RoaXJkcGFydHkvZ2x1JywKICAgICAgICcuLi93ZWJhdWRp
bycsCiAgICAgICAnLi4vd2Vic29ja2V0cycsCiAgICAgICAnLi4vd29ya2VycycsCkBAIC0xMTE3
LDYgKzExMTgsOCBAQAogCiAgICAgICAgICMgVXNlIExpbmtIYXNoQ2hyb21pdW0uY3BwIGluc3Rl
YWQKICAgICAgICAgWydleGNsdWRlJywgJ3BsYXRmb3JtL0xpbmtIYXNoXFwuY3BwJCddLAorCisg
ICAgICAgIFsnaW5jbHVkZScsICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzLyddLAogICAgICAgXSwK
ICAgICAgICdjb25kaXRpb25zJzogWwogICAgICAgICBbJ09TPT0ibGludXgiIG9yIE9TPT0iZnJl
ZWJzZCInLCB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDc2MDI0KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpyZXNldCgpCiAgICAgbV9wYXRoLmNsZWFyKCk7CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKICAgICBpZiAoR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKSkg
ewotICAgICAgICBpZiAobV9jb250ZXh0M0QpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dDNEICYm
IG1fZHJhd2luZ0J1ZmZlcikgewogICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJ
bnRTaXplKGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpKTsKICAgICAgICAg
ICAgIGMtPnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKG1fY29udGV4dDNELmdldCgpLCBtX2Ry
YXdpbmdCdWZmZXIuZ2V0KCksIEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5o
ZWlnaHQoKSkpOwogICAgICAgICB9CkBAIC0xODk1LDcgKzE4OTUsNyBAQCB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6cGFpbnRSZW5kCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogUGxhdGZvcm1MYXllciogQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9kcmF3aW5nQnVmZmVyLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgcmV0dXJuIG1fZHJhd2lu
Z0J1ZmZlciA/IG1fZHJhd2luZ0J1ZmZlci0+cGxhdGZvcm1MYXllcigpIDogMDsKIH0KICNlbmRp
ZgogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3
aW5nQnVmZmVyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9u
IDc2MDI0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJh
d2luZ0J1ZmZlckNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsMTUgKzcyLDE2IEBA
IERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb24KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25T
dXBwb3J0ZWQpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fc2l6ZShzaXplKQor
ICAgICwgbV9zaXplKC0xLCAtMSkKICAgICAsIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0
ZWQobXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAgLCBtX3BhY2tlZERlcHRoU3Rl
bmNpbEV4dGVuc2lvblN1cHBvcnRlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0
ZWQpCiAgICAgLCBtX2ZibygwKQogICAgICwgbV9jb2xvckJ1ZmZlcigwKQogICAgICwgbV9kZXB0
aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fZGVwdGhCdWZmZXIoMCkKKyAgICAsIG1fc3RlbmNp
bEJ1ZmZlcigwKQogICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwgbV9tdWx0aXNhbXBs
ZUNvbG9yQnVmZmVyKDApCi0gICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDAp
CiAgICAgLCBtX2ludGVybmFsKG5ldyBEcmF3aW5nQnVmZmVySW50ZXJuYWwpCiB7CiAgICAgaWYg
KCFtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX2NvcHlf
dGV4dHVyZV90b19wYXJlbnRfdGV4dHVyZSIpKSB7CkBAIC05MSw2ICs5Miw3IEBAIERyYXdpbmdC
dWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb24KICAgICBjb250ZXh0LT5iaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAgICAgbV9jb2xv
ckJ1ZmZlciA9IGdlbmVyYXRlQ29sb3JUZXh0dXJlKGNvbnRleHQsIHNpemUpOwogICAgIGNyZWF0
ZVNlY29uZGFyeUJ1ZmZlcnMoKTsKKyAgICByZXNldChzaXplKTsKIH0KIAogRHJhd2luZ0J1ZmZl
cjo6fkRyYXdpbmdCdWZmZXIoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vR0xFUzJDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAkocmV2aXNpb24gNzYw
MjQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNh
bnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEyICszNCwxNiBAQAogCiAjaW5jbHVkZSAi
RHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZsb2F0
U2l6ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiaW50ZXJu
YWxfZ2x1LmgiCiAjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlBhdGguaCIKICNpbmNs
dWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNE
LmgiCi0jaW5jbHVkZSAiU29saWRGaWxsU2hhZGVyLmgiCi0jaW5jbHVkZSAiVGV4U2hhZGVyLmgi
CisjaWYgUExBVEZPUk0oU0tJQSkKKyNpbmNsdWRlICJTa1BhdGguaCIKKyNlbmRpZgogI2luY2x1
ZGUgIlRleHR1cmUuaCIKIAogI2RlZmluZSBfVVNFX01BVEhfREVGSU5FUwpAQCAtNTAsMTcgKzU0
LDk3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY29uc3QgaW50IHBhdGhUZXNzZWxhdGlv
biA9IDMwOwordHlwZWRlZiB2b2lkIChHTEFQSUVOVFJZICpURVNTQ0IpKCk7Cit0eXBlZGVmIFdU
Rjo6VmVjdG9yPGZsb2F0PiBGbG9hdFZlY3RvcjsKKwogc3RydWN0IEdMRVMyQ2FudmFzOjpTdGF0
ZSB7CiAgICAgU3RhdGUoKQogICAgICAgICA6IG1fZmlsbENvbG9yKDAsIDAsIDAsIDI1NSkKICAg
ICAgICAgLCBtX2FscGhhKDEuMGYpCiAgICAgICAgICwgbV9jb21wb3NpdGVPcChDb21wb3NpdGVT
b3VyY2VPdmVyKQorICAgICAgICAsIG1fY2xpcHBpbmdFbmFibGVkKGZhbHNlKQorICAgIHsKKyAg
ICB9CisgICAgU3RhdGUoY29uc3QgU3RhdGUmIG90aGVyKQorICAgICAgICA6IG1fZmlsbENvbG9y
KG90aGVyLm1fZmlsbENvbG9yKQorICAgICAgICAsIG1fYWxwaGEob3RoZXIubV9hbHBoYSkKKyAg
ICAgICAgLCBtX2NvbXBvc2l0ZU9wKG90aGVyLm1fY29tcG9zaXRlT3ApCisgICAgICAgICwgbV9j
dG0ob3RoZXIubV9jdG0pCisgICAgICAgICwgbV9jbGlwcGluZ1BhdGhzKCkKKyAgICAgICAgLCBt
X2NsaXBwaW5nRW5hYmxlZChvdGhlci5tX2NsaXBwaW5nRW5hYmxlZCkKICAgICB7CiAgICAgfQog
ICAgIENvbG9yIG1fZmlsbENvbG9yOwogICAgIGZsb2F0IG1fYWxwaGE7CiAgICAgQ29tcG9zaXRl
T3BlcmF0b3IgbV9jb21wb3NpdGVPcDsKICAgICBBZmZpbmVUcmFuc2Zvcm0gbV9jdG07CisgICAg
V1RGOjpWZWN0b3I8UGF0aD4gbV9jbGlwcGluZ1BhdGhzOworICAgIGJvb2wgbV9jbGlwcGluZ0Vu
YWJsZWQ7Cit9OworCitzdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgb3BlcmF0b3IqKGNvbnN0IEZs
b2F0UG9pbnQmIGYsIGZsb2F0IHNjYWxlKQoreworICAgIHJldHVybiBGbG9hdFBvaW50KGYueCgp
ICogc2NhbGUsIGYueSgpICogc2NhbGUpOworfQorCitzdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQg
b3BlcmF0b3IqKGZsb2F0IHNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiBmKQoreworICAgIHJldHVy
biBGbG9hdFBvaW50KGYueCgpICogc2NhbGUsIGYueSgpICogc2NhbGUpOworfQorCitzdGF0aWMg
aW5saW5lIEZsb2F0U2l6ZSBvcGVyYXRvciooY29uc3QgRmxvYXRTaXplJiBmLCBmbG9hdCBzY2Fs
ZSkKK3sKKyAgICByZXR1cm4gRmxvYXRTaXplKGYud2lkdGgoKSAqIHNjYWxlLCBmLmhlaWdodCgp
ICogc2NhbGUpOworfQorCitzdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBvcGVyYXRvciooZmxvYXQg
c2NhbGUsIGNvbnN0IEZsb2F0U2l6ZSYgZikKK3sKKyAgICByZXR1cm4gRmxvYXRTaXplKGYud2lk
dGgoKSAqIHNjYWxlLCBmLmhlaWdodCgpICogc2NhbGUpOworfQorCitjbGFzcyBRdWFkcmF0aWMg
eworICBwdWJsaWM6CisgICAgUXVhZHJhdGljKEZsb2F0UG9pbnQgYSwgRmxvYXRQb2ludCBiLCBG
bG9hdFBvaW50IGMpIDoKKyAgICAgICAgbV9hKGEpLCBtX2IoYiksIG1fYyhjKQorICAgIHsKKyAg
ICB9CisgICAgc3RhdGljIFF1YWRyYXRpYyBmcm9tQmV6aWVyKEZsb2F0UG9pbnQgcDAsIEZsb2F0
UG9pbnQgcDEsIEZsb2F0UG9pbnQgcDIpCisgICAgeworICAgICAgICBGbG9hdFNpemUgcDFzKHAx
LngoKSwgcDEueSgpKTsKKyAgICAgICAgRmxvYXRTaXplIHAycyhwMi54KCksIHAyLnkoKSk7Cisg
ICAgICAgIEZsb2F0UG9pbnQgYiA9IC0yLjBmICogcDAgKyAyLjBmICogcDFzOworICAgICAgICBG
bG9hdFBvaW50IGMgPSAgICAgICAgIHAwIC0gMi4wZiAqIHAxcyArIHAyczsKKyAgICAgICAgcmV0
dXJuIFF1YWRyYXRpYyhwMCwgYiwgYyk7CisgICAgfQorICAgIGlubGluZSBGbG9hdFBvaW50IGV2
YWx1YXRlKGZsb2F0IHQpCisgICAgeworICAgICAgICByZXR1cm4gbV9hICsgdCAqIChtX2IgKyB0
ICogbV9jKTsKKyAgICB9CisgICAgRmxvYXRQb2ludCBtX2EsIG1fYiwgbV9jLCBtX2Q7Cit9Owor
CitjbGFzcyBDdWJpYyB7CisgIHB1YmxpYzoKKyAgICBDdWJpYyhGbG9hdFBvaW50IGEsIEZsb2F0
UG9pbnQgYiwgRmxvYXRQb2ludCBjLCBGbG9hdFBvaW50IGQpIDoKKyAgICAgICAgbV9hKGEpLCBt
X2IoYiksIG1fYyhjKSwgbV9kKGQpIAorICAgIHsKKyAgICB9CisgICAgc3RhdGljIEN1YmljIGZy
b21CZXppZXIoRmxvYXRQb2ludCBwMCwgRmxvYXRQb2ludCBwMSwgRmxvYXRQb2ludCBwMiwgRmxv
YXRQb2ludCBwMykKKyAgICB7CisgICAgICAgIEZsb2F0U2l6ZSBwMXMocDEueCgpLCBwMS55KCkp
OworICAgICAgICBGbG9hdFNpemUgcDJzKHAyLngoKSwgcDIueSgpKTsKKyAgICAgICAgRmxvYXRT
aXplIHAzcyhwMy54KCksIHAzLnkoKSk7CisgICAgICAgIEZsb2F0UG9pbnQgYiA9IC0zLjBmICog
cDAgKyAzLjBmICogcDFzOworICAgICAgICBGbG9hdFBvaW50IGMgPSAgMy4wZiAqIHAwIC0gNi4w
ZiAqIHAxcyArIDMuMGYgKiBwMnM7CisgICAgICAgIEZsb2F0UG9pbnQgZCA9IC0xLjBmICogcDAg
KyAzLjBmICogcDFzIC0gMy4wZiAqIHAycyArIHAzczsKKyAgICAgICAgcmV0dXJuIEN1YmljKHAw
LCBiLCBjLCBkKTsKKyAgICB9CisgICAgRmxvYXRQb2ludCBldmFsdWF0ZShmbG9hdCB0KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fYSArIHQgKiAobV9iICsgdCAqIChtX2MgKyB0ICogbV9kKSk7
CisgICAgfQorICAgIEZsb2F0UG9pbnQgbV9hLCBtX2IsIG1fYywgbV9kOwogfTsKIAogR0xFUzJD
YW52YXM6OkdMRVMyQ2FudmFzKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBEcmF3
aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQpAQCAtODgsNyAr
MTcyLDcgQEAgdm9pZCBHTEVTMkNhbnZhczo6YmluZEZyYW1lYnVmZmVyKCkKIHZvaWQgR0xFUzJD
YW52YXM6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiB7CiAgICAgYmluZEZyYW1l
YnVmZmVyKCk7Ci0gICAgaWYgKG1fc3RhdGUtPm1fY3RtLmlzSWRlbnRpdHkoKSkgeworICAgIGlm
IChtX3N0YXRlLT5tX2N0bS5pc0lkZW50aXR5KCkgJiYgIW1fc3RhdGUtPm1fY2xpcHBpbmdFbmFi
bGVkKSB7CiAgICAgICAgIG1fY29udGV4dC0+c2Npc3NvcihyZWN0KTsKICAgICAgICAgbV9jb250
ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgICAgIG1f
Y29udGV4dC0+Y2xlYXJDb2xvcihDb2xvcihSR0JBMzIoMCkpKTsKQEAgLTEwMiw5ICsxODYsMTcg
QEAgdm9pZCBHTEVTMkNhbnZhczo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UgogICAgIH0KIH0KIAor
dm9pZCBHTEVTMkNhbnZhczo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBtX2Nv
bnRleHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IobV9zdGF0ZS0+bV9jb21wb3NpdGVPcCk7Cisg
ICAgYXBwbHlDbGlwcGluZyhtX3N0YXRlLT5tX2NsaXBwaW5nRW5hYmxlZCk7CisgICAgZmlsbFBh
dGgocGF0aCwgbV9zdGF0ZS0+bV9maWxsQ29sb3IpOworfQorCiB2b2lkIEdMRVMyQ2FudmFzOjpm
aWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlKQogewogICAgIG1fY29udGV4dC0+YXBwbHlDb21wb3NpdGVPcGVyYXRv
cihtX3N0YXRlLT5tX2NvbXBvc2l0ZU9wKTsKKyAgICBhcHBseUNsaXBwaW5nKG1fc3RhdGUtPm1f
Y2xpcHBpbmdFbmFibGVkKTsKICAgICBtX2NvbnRleHQtPnVzZVF1YWRWZXJ0aWNlcygpOwogCiAg
ICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeChtX2ZsaXBNYXRyaXgpOwpAQCAtMTUzLDYgKzI0NSwy
MiBAQCB2b2lkIEdMRVMyQ2FudmFzOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lCiAgICAgbV9zdGF0
ZS0+bV9jdG0ubXVsdExlZnQoYWZmaW5lKTsKIH0KIAordm9pZCBHTEVTMkNhbnZhczo6Y2xpcFBh
dGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBiaW5kRnJhbWVidWZmZXIoKTsKKyAgICBjaGVj
a0dMRXJyb3IoImJpbmRGcmFtZWJ1ZmZlciIpOworICAgIGJlZ2luU3RlbmNpbERyYXcoKTsKKyAg
ICBDb2xvciByZWQoMjU1LCAwLCAwLCAyNTUpOworICAgIGZpbGxQYXRoKHBhdGgsIHJlZCk7Cisg
ICAgbV9zdGF0ZS0+bV9jbGlwcGluZ1BhdGhzLmFwcGVuZChwYXRoKTsKKyAgICBtX3N0YXRlLT5t
X2NsaXBwaW5nRW5hYmxlZCA9IHRydWU7Cit9CisKK3ZvaWQgR0xFUzJDYW52YXM6OmNsaXBPdXQo
Y29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBwcmludGYoImNsaXBPdXRcbiIpOworfQorCiB2b2lk
IEdMRVMyQ2FudmFzOjpzYXZlKCkKIHsKICAgICBtX3N0YXRlU3RhY2suYXBwZW5kKFN0YXRlKG1f
c3RhdGVTdGFjay5sYXN0KCkpKTsKQEAgLTE2MiwxMyArMjcwLDMwIEBAIHZvaWQgR0xFUzJDYW52
YXM6OnNhdmUoKQogdm9pZCBHTEVTMkNhbnZhczo6cmVzdG9yZSgpCiB7CiAgICAgQVNTRVJUKCFt
X3N0YXRlU3RhY2suaXNFbXB0eSgpKTsKKyAgICBib29sIGhhZENsaXBwaW5nUGF0aHMgPSAhbV9z
dGF0ZS0+bV9jbGlwcGluZ1BhdGhzLmlzRW1wdHkoKTsKICAgICBtX3N0YXRlU3RhY2sucmVtb3Zl
TGFzdCgpOwogICAgIG1fc3RhdGUgPSAmbV9zdGF0ZVN0YWNrLmxhc3QoKTsKKyAgICBpZiAoaGFk
Q2xpcHBpbmdQYXRocykgeworICAgICAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4
dDNEOjpTVEVOQ0lMX0JVRkZFUl9CSVQpOworICAgICAgICBiZWdpblN0ZW5jaWxEcmF3KCk7Cisg
ICAgICAgIFN0YXRlVmVjdG9yOjpjb25zdF9pdGVyYXRvciBpdGVyOworICAgICAgICBmb3IgKGl0
ZXIgPSBtX3N0YXRlU3RhY2suYmVnaW4oKTsgaXRlciA8IG1fc3RhdGVTdGFjay5lbmQoKTsgKytp
dGVyKSB7CisgICAgICAgICAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSAqaXRlcjsKKyAgICAgICAg
ICAgIGNvbnN0IFZlY3RvcjxQYXRoPiYgY2xpcHBpbmdQYXRocyA9IHN0YXRlLm1fY2xpcHBpbmdQ
YXRoczsKKyAgICAgICAgICAgIFZlY3RvcjxQYXRoPjo6Y29uc3RfaXRlcmF0b3IgcGF0aEl0ZXI7
CisgICAgICAgICAgICBmb3IgKHBhdGhJdGVyID0gY2xpcHBpbmdQYXRocy5iZWdpbigpOyBwYXRo
SXRlciA8IGNsaXBwaW5nUGF0aHMuZW5kKCk7CisgICAgICAgICAgICAgICAgICsrcGF0aEl0ZXIp
IHsKKyAgICAgICAgICAgICAgICBDb2xvciByZWQoMjU1LCAwLCAwLCAyNTUpOworICAgICAgICAg
ICAgICAgIGZpbGxQYXRoKCpwYXRoSXRlciwgcmVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KIH0KIAogdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdCh1bnNpZ25l
ZCB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwg
Q29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7CiAgICAgbV9jb250ZXh0LT5hcHBseUNv
bXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wKTsKKyAgICBhcHBseUNsaXBwaW5nKGZhbHNlKTsK
IAogICAgIG1fY29udGV4dC0+dXNlUXVhZFZlcnRpY2VzKCk7CiAgICAgbV9jb250ZXh0LT5zZXRB
Y3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7CkBAIC0xODAsMTMgKzMw
NSwxNCBAQCB2b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KHVuc2lnCiAKIHZvaWQg
R0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgRmxv
YXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCiB7Ci0gICAgZHJhd1RleHR1
cmVkUmVjdCh0ZXh0dXJlLCBzcmNSZWN0LCBkc3RSZWN0LCBtX3N0YXRlLT5tX2N0bSwgbV9zdGF0
ZS0+bV9hbHBoYSwgY29sb3JTcGFjZSwgY29tcG9zaXRlT3ApOworICAgIGRyYXdUZXh0dXJlZFJl
Y3QodGV4dHVyZSwgc3JjUmVjdCwgZHN0UmVjdCwgbV9zdGF0ZS0+bV9jdG0sIG1fc3RhdGUtPm1f
YWxwaGEsIGNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wLCBtX3N0YXRlLT5tX2NsaXBwaW5nRW5hYmxl
ZCk7CiB9CiAKIAotdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdChUZXh0dXJlKiB0
ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGZsb2F0IGFscGhhLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQordm9pZCBHTEVT
MkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdChUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJl
Y3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0cmFuc2Zvcm0sIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBv
c2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBib29sIGNsaXApCiB7CiAgICAgbV9jb250ZXh0LT5h
cHBseUNvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wKTsKKyAgICBhcHBseUNsaXBwaW5nKGNs
aXApOwogICAgIGNvbnN0IFRpbGluZ0RhdGEmIHRpbGVzID0gdGV4dHVyZS0+dGlsZXMoKTsKICAg
ICBJbnRSZWN0IHRpbGVJZHhSZWN0ID0gdGlsZXMub3ZlcmxhcHBlZFRpbGVJbmRpY2VzKHNyY1Jl
Y3QpOwogCkBAIC0yNTEsNiArMzc3LDIwOSBAQCBUZXh0dXJlKiBHTEVTMkNhbnZhczo6Z2V0VGV4
dHVyZShOYXRpdmVJCiAgICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0VGV4dHVyZShwdHIpOwogfQog
CitzdGF0aWMgdm9pZCBpbnRlcnBvbGF0ZVF1YWRyYXRpYyhGbG9hdFZlY3RvciogdmVydGljZXMs
IGNvbnN0IFNrUG9pbnQgcDAsIGNvbnN0IFNrUG9pbnQmIHAxLCBjb25zdCBTa1BvaW50JiBwMikK
K3sKKyAgICBmbG9hdCB0SW5jcmVtZW50ID0gMS4wZiAvIHBhdGhUZXNzZWxhdGlvbiwgdCA9IHRJ
bmNyZW1lbnQ7CisgICAgUXVhZHJhdGljIGMgPSBRdWFkcmF0aWM6OmZyb21CZXppZXIocDAsIHAx
LCBwMik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBwYXRoVGVzc2VsYXRpb247ICsraSwgdCAr
PSB0SW5jcmVtZW50KSB7CisgICAgICAgIEZsb2F0UG9pbnQgcCA9IGMuZXZhbHVhdGUodCk7Cisg
ICAgICAgIHZlcnRpY2VzLT5hcHBlbmQocC54KCkpOworICAgICAgICB2ZXJ0aWNlcy0+YXBwZW5k
KHAueSgpKTsKKyAgICAgICAgdmVydGljZXMtPmFwcGVuZCgxLjBmKTsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIGludGVycG9sYXRlQ3ViaWMoRmxvYXRWZWN0b3IqIHZlcnRpY2VzLCBjb25zdCBT
a1BvaW50IHAwLCBjb25zdCBTa1BvaW50JiBwMSwgY29uc3QgU2tQb2ludCYgcDIsIGNvbnN0IFNr
UG9pbnQmIHAzKQoreworICAgIGZsb2F0IHRJbmNyZW1lbnQgPSAxLjBmIC8gcGF0aFRlc3NlbGF0
aW9uLCB0ID0gdEluY3JlbWVudDsKKyAgICBDdWJpYyBjID0gQ3ViaWM6OmZyb21CZXppZXIocDAs
IHAxLCBwMiwgcDMpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGF0aFRlc3NlbGF0aW9uOyAr
K2ksIHQgKz0gdEluY3JlbWVudCkgeworICAgICAgICBGbG9hdFBvaW50IHAgPSBjLmV2YWx1YXRl
KHQpOworICAgICAgICB2ZXJ0aWNlcy0+YXBwZW5kKHAueCgpKTsKKyAgICAgICAgdmVydGljZXMt
PmFwcGVuZChwLnkoKSk7CisgICAgICAgIHZlcnRpY2VzLT5hcHBlbmQoMS4wZik7CisgICAgfQor
fQorCitzdHJ1Y3QgUG9seWdvbkRhdGEgeworICAgIFBvbHlnb25EYXRhKEZsb2F0VmVjdG9yKiB2
ZXJ0aWNlcywgV1RGOjpWZWN0b3I8c2hvcnQ+KiBpbmRpY2VzKQorICAgICAgOiBtX3ZlcnRpY2Vz
KHZlcnRpY2VzKQorICAgICAgLCBtX2luZGljZXMoaW5kaWNlcykKKyAgICB7CisgICAgfQorICAg
IEZsb2F0VmVjdG9yKiBtX3ZlcnRpY2VzOworICAgIFdURjo6VmVjdG9yPHNob3J0PiogbV9pbmRp
Y2VzOworfTsKKworc3RhdGljIHZvaWQgYmVnaW5EYXRhKEdMZW51bSB0eXBlLCB2b2lkKiBkYXRh
KQoreworICAgIEFTU0VSVCh0eXBlID09IEdMX1RSSUFOR0xFUyk7Cit9CisKK3N0YXRpYyB2b2lk
IGVkZ2VGbGFnRGF0YShHTGJvb2xlYW4gZmxhZywgdm9pZCogZGF0YSkKK3sKK30KKworc3RhdGlj
IHZvaWQgdmVydGV4RGF0YSh2b2lkKiB2ZXJ0ZXhEYXRhLCB2b2lkKiBkYXRhKQoreworICAgIHN0
YXRpY19jYXN0PFBvbHlnb25EYXRhKj4oZGF0YSktPm1faW5kaWNlcy0+YXBwZW5kKHJlaW50ZXJw
cmV0X2Nhc3Q8bG9uZz4odmVydGV4RGF0YSkpOworfQorCitzdGF0aWMgdm9pZCBlbmREYXRhKHZv
aWQqIGRhdGEpCit7Cit9CisKK3N0YXRpYyB2b2lkIGNvbWJpbmVEYXRhKEdMZG91YmxlIGNvb3Jk
c1szXSwgdm9pZCogdmVydGV4RGF0YVs0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdMZmxvYXQgd2VpZ2h0WzRdLCB2b2lkICoqb3V0RGF0YSwgdm9pZCogZGF0YSkKK3sKKyAg
ICBQb2x5Z29uRGF0YSogcG9seWdvbkRhdGEgPSBzdGF0aWNfY2FzdDxQb2x5Z29uRGF0YSo+KGRh
dGEpOworICAgIGludCBpbmRleCA9IHBvbHlnb25EYXRhLT5tX3ZlcnRpY2VzLT5zaXplKCkgLyAz
OworICAgIHBvbHlnb25EYXRhLT5tX3ZlcnRpY2VzLT5hcHBlbmQoc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGNvb3Jkc1swXSkpOworICAgIHBvbHlnb25EYXRhLT5tX3ZlcnRpY2VzLT5hcHBlbmQoc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGNvb3Jkc1sxXSkpOworICAgIHBvbHlnb25EYXRhLT5tX3ZlcnRpY2VzLT5h
cHBlbmQoMS4wZik7CisgICAgKm91dERhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihpbmRl
eCk7Cit9CisKK3R5cGVkZWYgdm9pZCAoKlRFU1NDQikoKTsKKwordm9pZCBHTEVTMkNhbnZhczo6
Y3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgoY29uc3QgUGF0aCYgcGF0aCwgaW50KiBjb3VudCwg
dW5zaWduZWQqIHZlcnRleEJ1ZmZlciwgdW5zaWduZWQqIGluZGV4QnVmZmVyKQoreworICAgICp2
ZXJ0ZXhCdWZmZXIgPSBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZUJ1ZmZl
cigpOworICAgIGNoZWNrR0xFcnJvcigiY3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgsIGNyZWF0
ZUJ1ZmZlciIpOworICAgICppbmRleEJ1ZmZlciA9IG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0
M0QoKS0+Y3JlYXRlQnVmZmVyKCk7CisgICAgY2hlY2tHTEVycm9yKCJjcmVhdGVWZXJ0ZXhCdWZm
ZXJGcm9tUGF0aCwgY3JlYXRlQnVmZmVyIik7CisjaWYgUExBVEZPUk0oU0tJQSkKKyAgICBXVEY6
OlZlY3RvcjxzaXplX3Q+IGNvbnRvdXJzOworICAgIGNvbnN0IFNrUGF0aCogc2tQYXRoID0gcGF0
aC5wbGF0Zm9ybVBhdGgoKTsKKyAgICBGbG9hdFZlY3RvciB2ZXJ0aWNlczsKKyAgICBTa1BvaW50
IHB0c1s0XTsKKyAgICBTa1BhdGg6Okl0ZXIgaXRlcigqc2tQYXRoLCB0cnVlKTsKKyAgICBTa1Bh
dGg6OlZlcmIgdmVyYjsKKyAgICB3aGlsZSAoKHZlcmIgPSBpdGVyLm5leHQocHRzKSkgIT0gU2tQ
YXRoOjprRG9uZV9WZXJiKSB7CisgICAgICAgIHN3aXRjaCAodmVyYikgeworICAgICAgICBjYXNl
IFNrUGF0aDo6a01vdmVfVmVyYjoKKyAgICAgICAgICAgIHZlcnRpY2VzLmFwcGVuZChwdHNbMF0u
ZlgpOworICAgICAgICAgICAgdmVydGljZXMuYXBwZW5kKHB0c1swXS5mWSk7CisgICAgICAgICAg
ICB2ZXJ0aWNlcy5hcHBlbmQoMS4wZik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBTa1BhdGg6OmtMaW5lX1ZlcmI6CisgICAgICAgICAgICB2ZXJ0aWNlcy5hcHBlbmQocHRzWzFd
LmZYKTsKKyAgICAgICAgICAgIHZlcnRpY2VzLmFwcGVuZChwdHNbMV0uZlkpOworICAgICAgICAg
ICAgdmVydGljZXMuYXBwZW5kKDEuMGYpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgU2tQYXRoOjprUXVhZF9WZXJiOgorICAgICAgICAgICAgaW50ZXJwb2xhdGVRdWFkcmF0aWMo
JnZlcnRpY2VzLCBwdHNbMF0sIHB0c1sxXSwgcHRzWzJdKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFNrUGF0aDo6a0N1YmljX1ZlcmI6CisgICAgICAgICAgICBpbnRlcnBvbGF0
ZUN1YmljKCZ2ZXJ0aWNlcywgcHRzWzBdLCBwdHNbMV0sIHB0c1syXSwgcHRzWzNdKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNrUGF0aDo6a0Nsb3NlX1ZlcmI6CisgICAgICAg
ICAgICBjb250b3Vycy5hcHBlbmQodmVydGljZXMuc2l6ZSgpIC8gMyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBTa1BhdGg6OmtEb25lX1ZlcmI6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlCisgICAgQVNTRVJUKCEiUGF0aCBleHRyYWN0aW9u
IG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIpOworI2VuZGlmCisKKyAgICBHTFV0
ZXNzZWxhdG9yKiB0ZXNzID0gaW50ZXJuYWxfZ2x1TmV3VGVzcygpOworICAgIGludGVybmFsX2ds
dVRlc3NQcm9wZXJ0eSh0ZXNzLCBHTFVfVEVTU19XSU5ESU5HX1JVTEUsIEdMVV9URVNTX1dJTkRJ
TkdfTk9OWkVSTyk7CisgICAgaW50ZXJuYWxfZ2x1VGVzc0NhbGxiYWNrKHRlc3MsIEdMVV9URVNT
X0JFR0lOX0RBVEEsIChURVNTQ0IpICZiZWdpbkRhdGEpOworICAgIGludGVybmFsX2dsdVRlc3ND
YWxsYmFjayh0ZXNzLCBHTFVfVEVTU19WRVJURVhfREFUQSwgKFRFU1NDQikgJnZlcnRleERhdGEp
OworICAgIGludGVybmFsX2dsdVRlc3NDYWxsYmFjayh0ZXNzLCBHTFVfVEVTU19FTkRfREFUQSwg
KFRFU1NDQikgJmVuZERhdGEpOworICAgIGludGVybmFsX2dsdVRlc3NDYWxsYmFjayh0ZXNzLCBH
TFVfVEVTU19FREdFX0ZMQUdfREFUQSwgKFRFU1NDQikgJmVkZ2VGbGFnRGF0YSk7CisgICAgaW50
ZXJuYWxfZ2x1VGVzc0NhbGxiYWNrKHRlc3MsIEdMVV9URVNTX0NPTUJJTkVfREFUQSwgKFRFU1ND
QikgJmNvbWJpbmVEYXRhKTsKKyAgICBXVEY6OlZlY3RvcjxzaG9ydD4gaW5kaWNlczsKKyAgICBQ
b2x5Z29uRGF0YSBkYXRhKCZ2ZXJ0aWNlcywgJmluZGljZXMpOworICAgIGludGVybmFsX2dsdVRl
c3NCZWdpblBvbHlnb24odGVzcywgJmRhdGEpOworICAgIFdURjo6VmVjdG9yPHNpemVfdD46OmNv
bnN0X2l0ZXJhdG9yIGNvbnRvdXI7CisgICAgc2l6ZV90IGkgPSAwOworICAgIGZvciAoY29udG91
ciA9IGNvbnRvdXJzLmJlZ2luKCk7IGNvbnRvdXIgIT0gY29udG91cnMuZW5kKCk7ICsrY29udG91
cikgeworICAgICAgICBpbnRlcm5hbF9nbHVUZXNzQmVnaW5Db250b3VyKHRlc3MpOworICAgICAg
ICBmb3IgKDsgaSA8ICpjb250b3VyOyArK2kpIHsKKyAgICAgICAgICAgIGRvdWJsZSBjWzNdOwor
ICAgICAgICAgICAgY1swXSA9IHZlcnRpY2VzW2kgKiAzXTsKKyAgICAgICAgICAgIGNbMV0gPSB2
ZXJ0aWNlc1tpICogMyArIDFdOworICAgICAgICAgICAgY1syXSA9IDEuMGY7CisgICAgICAgICAg
ICBpbnRlcm5hbF9nbHVUZXNzVmVydGV4KHRlc3MsIGMsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KGkpKTsKKyAgICAgICAgfQorICAgICAgICBpbnRlcm5hbF9nbHVUZXNzRW5kQ29udG91cih0ZXNz
KTsKKyAgICB9CisgICAgaW50ZXJuYWxfZ2x1VGVzc0VuZFBvbHlnb24odGVzcyk7CisgICAgaW50
ZXJuYWxfZ2x1RGVsZXRlVGVzcyh0ZXNzKTsKKworICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250
ZXh0M0QoKS0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCAqdmVy
dGV4QnVmZmVyKTsKKyAgICBjaGVja0dMRXJyb3IoImNyZWF0ZVZlcnRleEJ1ZmZlckZyb21QYXRo
LCBiaW5kQnVmZmVyIik7CisgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5idWZm
ZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHZlcnRpY2VzLnNpemUoKSAq
IHNpemVvZihmbG9hdCksIHZlcnRpY2VzLmRhdGEoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVB
TV9EUkFXKTsKKyAgICBjaGVja0dMRXJyb3IoImNyZWF0ZVZlcnRleEJ1ZmZlckZyb21QYXRoLCBi
dWZmZXJEYXRhIik7CisKKyAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmJpbmRC
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSLCAqaW5kZXhCdWZm
ZXIpOworICAgIGNoZWNrR0xFcnJvcigiY3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgsIGJpbmRC
dWZmZXIiKTsKKyAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmJ1ZmZlckRhdGEo
R3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBpbmRpY2VzLnNpemUoKSAq
IHNpemVvZihzaG9ydCksIGluZGljZXMuZGF0YSgpLCBHcmFwaGljc0NvbnRleHQzRDo6U1RSRUFN
X0RSQVcpOworICAgIGNoZWNrR0xFcnJvcigiY3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgsIGJ1
ZmZlckRhdGEiKTsKKyAgICAqY291bnQgPSBpbmRpY2VzLnNpemUoKTsKK30KKwordm9pZCBHTEVT
MkNhbnZhczo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgY29uc3QgQ29sb3ImIGNvbG9yKQor
eworICAgIGludCBjb3VudDsKKyAgICB1bnNpZ25lZCB2ZXJ0ZXhCdWZmZXIsIGluZGV4QnVmZmVy
OworICAgIGNyZWF0ZVZlcnRleEJ1ZmZlckZyb21QYXRoKHBhdGgsICZjb3VudCwgJnZlcnRleEJ1
ZmZlciwgJmluZGV4QnVmZmVyKTsKKyAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCkt
PmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgdmVydGV4QnVmZmVy
KTsKKyAgICBjaGVja0dMRXJyb3IoImJpbmRCdWZmZXIiKTsKKyAgICBtX2NvbnRleHQtPmdyYXBo
aWNzQ29udGV4dDNEKCktPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJS
QVlfQlVGRkVSLCBpbmRleEJ1ZmZlcik7CisgICAgY2hlY2tHTEVycm9yKCJiaW5kQnVmZmVyIik7
CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4KG1fZmxpcE1hdHJpeCk7CisgICAgbWF0cml4
Lm11bHRMZWZ0KG1fc3RhdGUtPm1fY3RtKTsKKworICAgIG1fY29udGV4dC0+dXNlRmlsbFNvbGlk
UHJvZ3JhbShtYXRyaXgsIGNvbG9yKTsKKyAgICBjaGVja0dMRXJyb3IoInVzZUZpbGxTb2xpZFBy
b2dyYW0iKTsKKworICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZHJhd0VsZW1l
bnRzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRVMsIGNvdW50LCBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfU0hPUlQsIDApOworICAgIGNoZWNrR0xFcnJvcigiZHJhd0FycmF5cyIpOwor
CisgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVCdWZmZXIodmVydGV4
QnVmZmVyKTsKKyAgICBjaGVja0dMRXJyb3IoImRlbGV0ZUJ1ZmZlciIpOworCisgICAgbV9jb250
ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVCdWZmZXIoaW5kZXhCdWZmZXIpOworICAg
IGNoZWNrR0xFcnJvcigiZGVsZXRlQnVmZmVyIik7Cit9CisKK3ZvaWQgR0xFUzJDYW52YXM6OmJl
Z2luU3RlbmNpbERyYXcoKQoreworICAgIC8vIFR1cm4gb24gc3RlbmNpbCB0ZXN0LgorICAgIG1f
Y29udGV4dC0+ZW5hYmxlU3RlbmNpbCh0cnVlKTsKKyAgICBjaGVja0dMRXJyb3IoImVuYWJsZSBT
VEVOQ0lMX1RFU1QiKTsKKworICAgIC8vIFN0ZW5jaWwgdGVzdCBuZXZlciBwYXNzZXMsIHNvIGNv
bG9yYnVmZmVyIGlzIG5vdCBkcmF3bi4KKyAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNE
KCktPnN0ZW5jaWxGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpORVZFUiwgMSwgMSk7CisgICAgY2hl
Y2tHTEVycm9yKCJzdGVuY2lsRnVuYyIpOworCisgICAgLy8gQWxsIHdyaXRlcyBpbmNyZW1lbWVu
dCB0aGUgc3RlbmNpbCBidWZmZXIuCisgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgp
LT5zdGVuY2lsT3AoR3JhcGhpY3NDb250ZXh0M0Q6OklOQ1IsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OklOQ1IsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0
M0Q6OklOQ1IpOworICAgIGNoZWNrR0xFcnJvcigic3RlbmNpbE9wIik7Cit9CisKK3ZvaWQgR0xF
UzJDYW52YXM6OmFwcGx5Q2xpcHBpbmcoYm9vbCBlbmFibGUpCit7CisgICAgbV9jb250ZXh0LT5l
bmFibGVTdGVuY2lsKGVuYWJsZSk7CisgICAgaWYgKGVuYWJsZSkgeworICAgICAgICAvLyBFbmFi
bGUgZHJhd2luZyBvbmx5IHdoZXJlIHN0ZW5jaWwgaXMgbm9uLXplcm8uCisgICAgICAgIG1fY29u
dGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+c3RlbmNpbEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6
OkVRVUFMLCBtX3N0YXRlLT5tX2NsaXBwaW5nUGF0aHMuc2l6ZSgpICUgMjU2LCAxKTsKKyAgICAg
ICAgY2hlY2tHTEVycm9yKCJzdGVuY2lsRnVuYyIpOworICAgICAgICAvLyBLZWVwIGFsbCBzdGVu
Y2lsIHZhbHVlcyB0aGUgc2FtZS4KKyAgICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQz
RCgpLT5zdGVuY2lsT3AoR3JhcGhpY3NDb250ZXh0M0Q6OktFRVAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQ
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFw
aGljc0NvbnRleHQzRDo6S0VFUCk7CisgICAgICAgIGNoZWNrR0xFcnJvcigic3RlbmNpbE9wIik7
CisgICAgfQorfQorCiB2b2lkIEdMRVMyQ2FudmFzOjpjaGVja0dMRXJyb3IoY29uc3QgY2hhciog
aGVhZGVyKQogewogI2lmbmRlZiBOREVCVUcKQEAgLTI4Myw0ICs2MTIsMyBAQCB2b2lkIEdMRVMy
Q2FudmFzOjpjaGVja0dMRXJyb3IoY29uc3QgY2hhCiB9CiAKIH0KLQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZh
cy5oCShyZXZpc2lvbiA3NjAyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0dMRVMyQ2FudmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDcgQEAg
Y2xhc3MgQ29sb3I7CiBjbGFzcyBEcmF3aW5nQnVmZmVyOwogY2xhc3MgRmxvYXRSZWN0OwogY2xh
c3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBQYXRoOwogY2xhc3MgU2hhcmVkR3JhcGhpY3ND
b250ZXh0M0Q7CiAKIGNsYXNzIEdMRVMyQ2FudmFzIDogcHVibGljIE5vbmNvcHlhYmxlIHsKQEAg
LTU1LDYgKzU2LDcgQEAgcHVibGljOgogICAgIEdMRVMyQ2FudmFzKFNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEKiwgRHJhd2luZ0J1ZmZlciosIGNvbnN0IEludFNpemUmKTsKICAgICB+R0xFUzJDYW52
YXMoKTsKIAorICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpOwogICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKICAgICB2b2lk
IGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogICAgIHZvaWQgY2xlYXJSZWN0KGNvbnN0IEZs
b2F0UmVjdCYpOwpAQCAtNjUsNiArNjcsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCByb3RhdGUoZmxv
YXQgYW5nbGVJblJhZGlhbnMpOwogICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7CiAg
ICAgdm9pZCBjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7CisgICAgdm9pZCBjbGlw
UGF0aChjb25zdCBQYXRoJik7CisgICAgdm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKTsKIAogICAg
IHZvaWQgc2F2ZSgpOwogICAgIHZvaWQgcmVzdG9yZSgpOwpAQCAtNzIsOSArNzYsMTMgQEAgcHVi
bGljOgogICAgIC8vIG5vbi1zdGFuZGFyZCBmdW5jdGlvbnMKICAgICAvLyBUaGVzZSBhcmUgbm90
IHN0YW5kYXJkIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbnMsIGFuZCBzaG91bGQgYmUgcHVzaGVk
CiAgICAgLy8gZG93biBpbnRvIGEgUGxhdGZvcm1Db250ZXh0R0xFUzIgYXQgc29tZSBwb2ludC4K
KworICAgIC8vIFRoaXMgdmVyc2lvbiBpcyBjYWxsZWQgYnkgdGhlIGNhbnZhcy0+Y2FudmFzIGRy
YXdzLgogICAgIHZvaWQgZHJhd1RleHR1cmVkUmVjdCh1bnNpZ25lZCB0ZXh0dXJlLCBjb25zdCBJ
bnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKLSAgICB2b2lk
IGRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9hdCBhbHBo
YSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgIC8vIFRoaXMgdmVyc2lvbiBp
cyBjYWxsZWQgYnkgQml0bWFwSW1hZ2U6OmRyYXcoKS4KICAgICB2b2lkIGRyYXdUZXh0dXJlZFJl
Y3QoVGV4dHVyZSosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgLy8gVGhpcyB2ZXJz
aW9uIGlzIGNhbGxlZCBieSB0aGUgYWJvdmUsIGFuZCBieSB0aGUgc29mdHdhcmUtPmhhcmR3YXJl
IHVwbG9hZHMuCisgICAgdm9pZCBkcmF3VGV4dHVyZWRSZWN0KFRleHR1cmUqLCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiwgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yLCBib29s
IGNsaXApOwogICAgIFRleHR1cmUqIGNyZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIsIFRleHR1
cmU6OkZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKICAgICBUZXh0dXJlKiBnZXRUZXh0
dXJlKE5hdGl2ZUltYWdlUHRyKTsKIApAQCAtODgsNiArOTYsMTAgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGRyYXdUZXh0dXJlZFJlY3RUaWxlKFRleHR1cmUqIHRleHR1cmUsIGludCB0aWxlLCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEpOwogICAgIHZvaWQgZHJhd1F1YWQoY29uc3QgSW50
U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRS
ZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSk7CiAgICAg
dm9pZCBhcHBseUNvbXBvc2l0ZU9wZXJhdG9yKENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2b2lk
IGNyZWF0ZVZlcnRleEJ1ZmZlckZyb21QYXRoKGNvbnN0IFBhdGgmLCBpbnQqIGNvdW50LCB1bnNp
Z25lZCogdmVydGV4QnVmZmVyLCB1bnNpZ25lZCogaW5kZXhCdWZmZXIpOworICAgIHZvaWQgZmls
bFBhdGgoY29uc3QgUGF0aCYsIGNvbnN0IENvbG9yJik7CisgICAgdm9pZCBiZWdpblN0ZW5jaWxE
cmF3KCk7CisgICAgdm9pZCBhcHBseUNsaXBwaW5nKGJvb2wgZW5hYmxlKTsKICAgICB2b2lkIGNo
ZWNrR0xFcnJvcihjb25zdCBjaGFyKiBoZWFkZXIpOwogCiAgICAgSW50U2l6ZSBtX3NpemU7CkBA
IC05Niw3ICsxMDgsOCBAQCBwcml2YXRlOgogICAgIERyYXdpbmdCdWZmZXIqIG1fZHJhd2luZ0J1
ZmZlcjsKIAogICAgIHN0cnVjdCBTdGF0ZTsKLSAgICBXVEY6OlZlY3RvcjxTdGF0ZT4gbV9zdGF0
ZVN0YWNrOworICAgIHR5cGVkZWYgV1RGOjpWZWN0b3I8U3RhdGU+IFN0YXRlVmVjdG9yOworICAg
IFN0YXRlVmVjdG9yIG1fc3RhdGVTdGFjazsKICAgICBTdGF0ZSogbV9zdGF0ZTsKICAgICBBZmZp
bmVUcmFuc2Zvcm0gbV9mbGlwTWF0cml4OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAJKHJldmlzaW9u
IDc2MDI0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NywxNiArNjcsMjEgQEAgdm9pZCBEcmF3aW5n
QnVmZmVyOjpjbGVhcigpCiAgICAgICAgIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlciA9IDA7CiAg
ICAgfQogICAgIAotICAgIGlmIChtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKSB7Ci0g
ICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUmVuZGVyYnVmZmVyKG1fbXVsdGlzYW1wbGVEZXB0aFN0
ZW5jaWxCdWZmZXIpOwotICAgICAgICBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyID0g
MDsKLSAgICB9Ci0gICAgCiAgICAgaWYgKG1fZGVwdGhTdGVuY2lsQnVmZmVyKSB7CiAgICAgICAg
IG1fY29udGV4dC0+ZGVsZXRlUmVuZGVyYnVmZmVyKG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKICAg
ICAgICAgbV9kZXB0aFN0ZW5jaWxCdWZmZXIgPSAwOwogICAgIH0KICAgICAKKyAgICBpZiAobV9k
ZXB0aEJ1ZmZlcikgeworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX2Rl
cHRoQnVmZmVyKTsKKyAgICAgICAgbV9kZXB0aEJ1ZmZlciA9IDA7CisgICAgfQorICAgIAorICAg
IGlmIChtX3N0ZW5jaWxCdWZmZXIpIHsKKyAgICAgICAgbV9jb250ZXh0LT5kZWxldGVSZW5kZXJi
dWZmZXIobV9zdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgbV9zdGVuY2lsQnVmZmVyID0gMDsKKyAg
ICB9CisgICAgCiAgICAgaWYgKG1fbXVsdGlzYW1wbGVGQk8pIHsKICAgICAgICAgbV9jb250ZXh0
LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRp
c2FtcGxlRkJPKTsKICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX211bHRp
c2FtcGxlRkJPKTsKQEAgLTkyLDIyICs5Nyw1MiBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OmNsZWFy
KCkKIAogdm9pZCBEcmF3aW5nQnVmZmVyOjpjcmVhdGVTZWNvbmRhcnlCdWZmZXJzKCkKIHsKLSAg
ICBjb25zdCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyYgYXR0cmlidXRlcyA9IG1fY29u
dGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKLQotICAgIC8vIENyZWF0ZSB0aGUgc3RlbmNp
bCBhbmQgZGVwdGggYnVmZmVyIGlmIG5lZWRlZAotICAgIGlmICghbXVsdGlzYW1wbGUoKSAmJiAo
YXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpKQotICAgICAgICBtX2RlcHRo
U3RlbmNpbEJ1ZmZlciA9IG1fY29udGV4dC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0KICAgICAv
LyBjcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8KICAgICBpZiAobXVsdGlzYW1wbGUoKSkgewogICAg
ICAgICBtX211bHRpc2FtcGxlRkJPID0gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwog
ICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGQk8pOwogICAgICAgICBtX211bHRpc2FtcGxlQ29sb3JC
dWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotICAgICAgICBpZiAoYXR0
cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICBtX211bHRp
c2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyID0gbV9jb250ZXh0LT5jcmVhdGVSZW5kZXJidWZmZXIo
KTsKICAgICB9CiB9CiAKK3ZvaWQgRHJhd2luZ0J1ZmZlcjo6cmVzaXplRGVwdGhTdGVuY2lsKGlu
dCBzYW1wbGVDb3VudCkKK3sKKyAgICBjb25zdCBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRl
cyYgYXR0cmlidXRlcyA9IG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKTsKKyAgICBp
ZiAoYXR0cmlidXRlcy5kZXB0aCAmJiBhdHRyaWJ1dGVzLnN0ZW5jaWwgJiYgbV9wYWNrZWREZXB0
aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpIHsKKyAgICAgICAgaWYgKCFtX2RlcHRoU3RlbmNp
bEJ1ZmZlcikKKyAgICAgICAgICAgIG1fZGVwdGhTdGVuY2lsQnVmZmVyID0gbV9jb250ZXh0LT5j
cmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsK
KyAgICAgICAgaWYgKG11bHRpc2FtcGxlKCkpCisgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4
dGVuc2lvbnMoKS0+cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdyYXBoaWNzQ29udGV4
dDNEOjpSRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBFeHRlbnNpb25zM0Q6OkRFUFRIMjRfU1RF
TkNJTDgsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUiwgRXh0ZW5zaW9uczNEOjpERVBUSDI0X1NURU5DSUw4LCBtX3NpemUu
d2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
LCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGF0dHJp
YnV0ZXMuZGVwdGgpIHsKKyAgICAgICAgICAgIGlmICghbV9kZXB0aEJ1ZmZlcikKKyAgICAgICAg
ICAgICAgICBtX2RlcHRoQnVmZmVyID0gbV9jb250ZXh0LT5jcmVhdGVSZW5kZXJidWZmZXIoKTsK
KyAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKKyAgICAgICAgICAgIGlmIChtdWx0aXNh
bXBsZSgpKQorICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5yZW5k
ZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
Uiwgc2FtcGxlQ291bnQsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNiwgbV9z
aXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQxNiwgbV9z
aXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOworICAgICAgICB9CisgICAgICAgIGlmIChhdHRyaWJ1
dGVzLnN0ZW5jaWwpIHsKKyAgICAgICAgICAgIGlmICghbV9zdGVuY2lsQnVmZmVyKQorICAgICAg
ICAgICAgICAgIG1fc3RlbmNpbEJ1ZmZlciA9IG1fY29udGV4dC0+Y3JlYXRlUmVuZGVyYnVmZmVy
KCk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9zdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgICAgIGlmICht
dWx0aXNhbXBsZSgpKQorICAgICAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygp
LT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUiwgc2FtcGxlQ291bnQsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVYOCwg
bV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICBlbHNlIAorICAg
ICAgICAgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9JTkRFWDgsIG1f
c2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgbV9jb250ZXh0LT5m
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICB9CisgICAgbV9j
b250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIs
IDApOworfQorCiB2b2lkIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUmIG5ld1Np
emUpCiB7CiAgICAgaWYgKG1fc2l6ZSA9PSBuZXdTaXplKQpAQCAtMTIwLDcgKzE1NSw3IEBAIHZv
aWQgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYKICAgICBtX2NvbnRleHQtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwogICAgIAogICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEOjpB
dHRyaWJ1dGVzJiBhdHRyaWJ1dGVzID0gbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygp
OwotICAgIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxDb2xvckZvcm1hdCwgY29sb3JGb3JtYXQsIGlu
dGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gMDsKKyAgICB1bnNpZ25lZCBsb25nIGludGVybmFs
Q29sb3JGb3JtYXQsIGNvbG9yRm9ybWF0OwogICAgIGlmIChhdHRyaWJ1dGVzLmFscGhhKSB7CiAg
ICAgICAgIGludGVybmFsQ29sb3JGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKICAg
ICAgICAgY29sb3JGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCQTsKQEAgLTEyOCwxNyAr
MTYzLDcgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRTaXplJgogICAgICAg
ICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjsKICAgICAgICAg
Y29sb3JGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOwogICAgIH0KLSAgICBpZiAoYXR0
cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpIHsKLSAgICAgICAgLy8gV2UgZG9u
J3QgYWxsb3cgdGhlIGxvZ2ljIHdoZXJlIHN0ZW5jaWwgaXMgcmVxdWlyZWQgYW5kIGRlcHRoIGlz
IG5vdC4KLSAgICAgICAgLy8gU2VlIEdyYXBoaWNzQ29udGV4dDNEIGNvbnN0cnVjdG9yLgotCi0g
ICAgICAgIC8vIEZJWE1FOiAgSWYgcGFja2VkIGRlcHRoL3N0ZW5jaWwgaXMgbm90IHN1cHBvcnRl
ZCwgd2Ugc2hvdWxkCi0gICAgICAgIC8vIGNyZWF0ZSBzZXBhcmF0ZSByZW5kZXJidWZmZXJzIGZv
ciBkZXB0aCBhbmQgc3RlbmNpbC4KLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCAmJiBh
dHRyaWJ1dGVzLmRlcHRoICYmIG1fcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVk
KQotICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQgPSBFeHRlbnNpb25zM0Q6
OkRFUFRIMjRfU1RFTkNJTDg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGludGVybmFsRGVw
dGhTdGVuY2lsRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2Owot
ICAgIH0KKwogCiAgICAgLy8gcmVzaXplIG11bHRpc2FtcGxlIEZCTwogICAgIGlmIChtdWx0aXNh
bXBsZSgpKSB7CkBAIC0xNTIsMTUgKzE3Nyw3IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cmVzZXQo
Y29uc3QgSW50U2l6ZSYKICAgICAgICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7CiAg
ICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5yZW5kZXJidWZmZXJTdG9yYWdlTXVs
dGlzYW1wbGUoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIGlu
dGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwogICAg
ICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFw
aGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOwot
ICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsIHx8IGF0dHJpYnV0ZXMuZGVwdGgpIHsKLSAg
ICAgICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAg
ICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlz
YW1wbGUoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIGludGVy
bmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsK
LSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwpCi0gICAgICAgICAgICAgICAgbV9j
b250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwot
ICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICAgICAgbV9jb250
ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAg
ICAgfQotICAgICAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUiwgMCk7CisgICAgICAgIHJlc2l6ZURlcHRoU3RlbmNpbChzYW1wbGVD
b3VudCk7CiAgICAgICAgIGlmIChtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVJfQ09NUExFVEUpIHsKICAgICAgICAgICAgIC8vIENsZWFudXAKICAgICAgICAgICAgIGNs
ZWFyKCk7CkBAIC0xNzUsMTUgKzE5Miw3IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29u
c3QgSW50U2l6ZSYKICAgICBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIGludGVybmFsQ29sb3JGb3JtYXQsIG1fc2l6ZS53
aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCksIDAsIGNvbG9yRm9ybWF0LCBHcmFwaGljc0NvbnRleHQz
RDo6VU5TSUdORURfQllURSk7CiAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChH
cmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9B
VFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIs
IDApOwogICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDApOwotICAgIGlmICghbXVsdGlzYW1wbGUoKSAmJiAoYXR0cmlidXRlcy5zdGVuY2ls
IHx8IGF0dHJpYnV0ZXMuZGVwdGgpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZl
cik7Ci0gICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSLCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgbV9zaXplLndp
ZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwp
Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNI
TUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZm
ZXIpOwotICAgICAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgIG1fY29udGV4
dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICBtX2NvbnRleHQt
PmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7Ci0g
ICAgfQorICAgIHJlc2l6ZURlcHRoU3RlbmNpbCgwKTsKICAgICBpZiAobV9jb250ZXh0LT5jaGVj
a0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7CiAgICAgICAgIC8vIENsZWFu
dXAKICAgICAgICAgY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaAkocmV2aXNpb24gNzYwMjQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw4IEBAIHB1YmxpYzoKICAgICAvLyBDcmVhdGUgdGhlIGRl
cHRoL3N0ZW5jaWwgYW5kIG11bHRpc2FtcGxlIGJ1ZmZlcnMsIGlmIG5lZWRlZC4KICAgICB2b2lk
IGNyZWF0ZVNlY29uZGFyeUJ1ZmZlcnMoKTsKICAgICAKKyAgICB2b2lkIHJlc2l6ZURlcHRoU3Rl
bmNpbChpbnQgc2FtcGxlQ291bnQpOworCiAgICAgLy8gQ29waWVzIHRoZSBtdWx0aXNhbXBsZSBj
b2xvciBidWZmZXIgdG8gdGhlIG5vcm1hbCBjb2xvciBidWZmZXIgYW5kIGxlYXZlcyBtX2ZibyBi
b3VuZAogICAgIHZvaWQgY29tbWl0KGxvbmcgeCA9IDAsIGxvbmcgeSA9IDAsIGxvbmcgd2lkdGgg
PSAtMSwgbG9uZyBoZWlnaHQgPSAtMSk7CiAgICAgCkBAIC0xMDYsMTMgKzEwOCwxOCBAQCBwcml2
YXRlOgogICAgIGJvb2wgbV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQ7CiAg
ICAgUGxhdGZvcm0zRE9iamVjdCBtX2ZibzsKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fY29sb3JC
dWZmZXI7CisKKyAgICAvLyBUaGlzIGlzIHVzZWQgd2hlbiB3ZSBoYXZlIE9FU19wYWNrZWRfZGVw
dGhfc3RlbmNpbC4KICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZGVwdGhTdGVuY2lsQnVmZmVyOwog
CisgICAgLy8gVGhlc2UgYXJlIHVzZWQgd2hlbiB3ZSBkb24ndC4KKyAgICBQbGF0Zm9ybTNET2Jq
ZWN0IG1fZGVwdGhCdWZmZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3N0ZW5jaWxCdWZmZXI7
CisKICAgICAvLyBGb3IgbXVsdGlzYW1wbGluZwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9tdWx0
aXNhbXBsZUZCTzsKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZl
cjsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXI7
Ci0gICAgCisKICNpZiBQTEFURk9STShDSFJPTUlVTSkKICAgICBPd25QdHI8V2lsbFB1Ymxpc2hD
YWxsYmFjaz4gbV9jYWxsYmFjazsKICAgICBPd25QdHI8RHJhd2luZ0J1ZmZlckludGVybmFsPiBt
X2ludGVybmFsOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1No
YXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lv
biA3NjAyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRH
cmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDkgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogUGFzc1JlZlB0cjxTaGFyZWRHcmFwaGljc0NvbnRleHQzRD4gU2hh
cmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShIb3N0V2luZG93KiBob3N0V2luZG93KQogewog
ICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHI7CisgICAgYXR0ci5kZXB0aCA9
IGZhbHNlOworICAgIGF0dHIuc3RlbmNpbCA9IHRydWU7CisgICAgYXR0ci5hbnRpYWxpYXMgPSBm
YWxzZTsKICAgICBhdHRyLmNhblJlY292ZXJGcm9tQ29udGV4dExvc3MgPSBmYWxzZTsgLy8gQ2Fu
dmFzIGNvbnRleHRzIGNhbiBub3QgaGFuZGxlIGxvc3QgY29udGV4dHMuCiAgICAgUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRy
LCBob3N0V2luZG93KTsKICAgICBpZiAoIWNvbnRleHQpCkBAIC0yOTMsNiArMjk2LDE0IEBAIHZv
aWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmFwcGx5Q29tcG8KICAgICB9CiB9CiAKK3ZvaWQg
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZVN0ZW5jaWwoYm9vbCBlbmFibGUpCit7Cisg
ICAgaWYgKGVuYWJsZSkKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OlNURU5DSUxfVEVTVCk7CisgICAgZWxzZQorICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCk7Cit9CisKIHZvaWQgU2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0Q6OnVzZVF1YWRWZXJ0aWNlcygpCiB7CiAgICAgaWYgKCFtX3F1YWRWZXJ0aWNl
cykgewpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdy
YXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDc2MDI0KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29u
dGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDYgKzkwLDcgQEAgcHVibGljOgogCiAgICAg
Ly8gU2hhcmVkIGxvZ2ljIGZvciBjYW52YXMgMmQKICAgICB2b2lkIGFwcGx5Q29tcG9zaXRlT3Bl
cmF0b3IoQ29tcG9zaXRlT3BlcmF0b3IpOworICAgIHZvaWQgZW5hYmxlU3RlbmNpbChib29sIGVu
YWJsZSk7CiAgICAgdm9pZCB1c2VRdWFkVmVydGljZXMoKTsKIAogICAgIHZvaWQgdXNlRmlsbFNv
bGlkUHJvZ3JhbShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBDb2xvciYpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVmZmVyTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9t
YWMvRHJhd2luZ0J1ZmZlck1hYy5tbQkocmV2aXNpb24gNzYwMjQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdCdWZmZXJNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDE1ICs0MSwxNiBAQCBEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdy
YXBoaWNzQ29uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgbXVsdGlzYW1wbGVF
eHRlbnNpb25TdXBwb3J0ZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgcGFj
a2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQogICAgIDogbV9jb250ZXh0KGNvbnRl
eHQpCi0gICAgLCBtX3NpemUoc2l6ZSkKKyAgICAsIG1fc2l6ZSgtMSwgLTEpCiAgICAgLCBtX211
bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVk
KQogICAgICwgbV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQocGFja2VkRGVw
dGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQogICAgICwgbV9mYm8oY29udGV4dC0+Y3JlYXRl
RnJhbWVidWZmZXIoKSkKICAgICAsIG1fY29sb3JCdWZmZXIoMCkKICAgICAsIG1fZGVwdGhTdGVu
Y2lsQnVmZmVyKDApCisgICAgLCBtX2RlcHRoQnVmZmVyKDApCisgICAgLCBtX3N0ZW5jaWxCdWZm
ZXIoMCkKICAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKICAgICAsIG1fbXVsdGlzYW1wbGVDb2xv
ckJ1ZmZlcigwKQotICAgICwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQogewog
ICAgIEFTU0VSVChtX2Zibyk7CiAgICAgaWYgKCFtX2ZibykgewpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29u
dGV4dFNraWEuY3BwCShyZXZpc2lvbiA3NjAyNCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4Niw2ICszODYsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQ
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYg
KHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSkKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCkt
PmdwdUNhbnZhcygpLT5jbGlwUGF0aChwYXRoKTsKKwogICAgIGNvbnN0IFNrUGF0aCYgcCA9ICpw
YXRoLnBsYXRmb3JtUGF0aCgpOwogICAgIGlmICghaXNQYXRoU2tpYVNhZmUoZ2V0Q1RNKCksIHAp
KQogICAgICAgICByZXR1cm47CkBAIC00MTAsNiArNDEzLDkgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsaXBPdXQoY29uc3QgUGF0aAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKIAorICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpCisgICAg
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMoKS0+Y2xpcE91dChwKTsKKwogICAgIGNv
bnN0IFNrUGF0aCYgcGF0aCA9ICpwLnBsYXRmb3JtUGF0aCgpOwogICAgIGlmICghaXNQYXRoU2tp
YVNhZmUoZ2V0Q1RNKCksIHBhdGgpKQogICAgICAgICByZXR1cm47CkBAIC00MjIsNiArNDI4LDkg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKGNvbnN0IFBhdAogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIGlmIChwbGF0Zm9ybUNvbnRl
eHQoKS0+dXNlR1BVKCkpCisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMoKS0+
Y2xpcFBhdGgocGF0aFRvQ2xpcCk7CisKICAgICAvLyBGSVhNRTogQmUgc21hcnRlciBhYm91dCB0
aGlzLgogICAgIGJlZ2luUGF0aCgpOwogICAgIGFkZFBhdGgocGF0aFRvQ2xpcCk7CkBAIC03MzMs
NiArNzQyLDEyIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXQKICAg
ICBiZWdpblBhdGgoKTsKICAgICBhZGRQYXRoKHBhdGhUb0ZpbGwpOwogCisgICAgaWYgKHBsYXRm
b3JtQ29udGV4dCgpLT51c2VHUFUoKSAmJiBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FuQWNjZWxlcmF0
ZSgpKSB7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9ySGFyZHdhcmVEcmF3
KCk7CisgICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMoKS0+ZmlsbFBhdGgocGF0
aFRvRmlsbCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBTa1BhdGggcGF0aCA9IHBs
YXRmb3JtQ29udGV4dCgpLT5jdXJyZW50UGF0aEluTG9jYWxDb29yZGluYXRlcygpOwogICAgIGlm
ICghaXNQYXRoU2tpYVNhZmUoZ2V0Q1RNKCksIHBhdGgpKQogICAgICAgcmV0dXJuOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCShyZXZpc2lvbiA3NjAyNCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcwMiw4ICs3MDIsNyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OmFw
cGx5QW50aUFsaWFzCiBib29sIFBsYXRmb3JtQ29udGV4dFNraWE6OmNhbkFjY2VsZXJhdGUoKSBj
b25zdAogewogICAgIHJldHVybiAhbV9zdGF0ZS0+bV9maWxsU2hhZGVyIC8vIENhbid0IGFjY2Vs
ZXJhdGUgd2l0aCBhIGZpbGwgZ3JhZGllbnQgb3IgcGF0dGVybi4KLSAgICAgICAgJiYgIW1fc3Rh
dGUtPm1fbG9vcGVyIC8vIENhbid0IGFjY2VsZXJhdGUgd2l0aCBhIHNoYWRvdy4KLSAgICAgICAg
JiYgIW1fc3RhdGUtPm1fY2FudmFzQ2xpcEFwcGxpZWQ7IC8vIENhbid0IGFjY2VsZXJhdGUgd2l0
aCBhIGNsaXAgdG8gcGF0aCBhcHBsaWVkLgorICAgICAgICAmJiAhbV9zdGF0ZS0+bV9sb29wZXI7
IC8vIENhbid0IGFjY2VsZXJhdGUgd2l0aCBhIHNoYWRvdy4KIH0KIAogYm9vbCBQbGF0Zm9ybUNv
bnRleHRTa2lhOjpjYW52YXNDbGlwQXBwbGllZCgpIGNvbnN0CkBAIC04NDgsNyArODQ3LDcgQEAg
dm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjp1cGxvYWRTb2Z0d2FyZQogCiAgICAgbV91cGxvYWRU
ZXh0dXJlLT51cGRhdGVTdWJSZWN0KGJpdG1hcC5nZXRQaXhlbHMoKSwgbV9zb2Z0d2FyZURpcnR5
UmVjdCk7CiAgICAgQWZmaW5lVHJhbnNmb3JtIGlkZW50aXR5OwotICAgIGdwdUNhbnZhcygpLT5k
cmF3VGV4dHVyZWRSZWN0KG1fdXBsb2FkVGV4dHVyZS5nZXQoKSwgbV9zb2Z0d2FyZURpcnR5UmVj
dCwgbV9zb2Z0d2FyZURpcnR5UmVjdCwgaWRlbnRpdHksIDEuMCwgQ29sb3JTcGFjZURldmljZVJH
Qiwgb3ApOworICAgIGdwdUNhbnZhcygpLT5kcmF3VGV4dHVyZWRSZWN0KG1fdXBsb2FkVGV4dHVy
ZS5nZXQoKSwgbV9zb2Z0d2FyZURpcnR5UmVjdCwgbV9zb2Z0d2FyZURpcnR5UmVjdCwgaWRlbnRp
dHksIDEuMCwgQ29sb3JTcGFjZURldmljZVJHQiwgb3AsIGZhbHNlKTsKICAgICAvLyBDbGVhciBv
dXQgdGhlIHJlZ2lvbiBvZiB0aGUgc29mdHdhcmUgY2FudmFzIHdlIGp1c3QgdXBsb2FkZWQuCiAg
ICAgbV9jYW52YXMtPnNhdmUoKTsKICAgICBtX2NhbnZhcy0+cmVzZXRNYXRyaXgoKTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L1JFQURNRS53ZWJraXQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvUkVBRE1FLndlYmtpdAkocmV2aXNpb24g
NzYwMjQpCisrKyBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9SRUFETUUud2Via2l0CSh3
b3JraW5nIGNvcHkpCkBAIC0zMSwzICszMSw5IEBAIFRoZSBmb2xsb3dpbmcgY2hhbmdlcyB3ZXJl
IG1hZGUgaW4gb3JkZXIKICAgICBvZiB0aGUgdW51c2VkIE5vcm1hbGl6ZSBmdW5jdGlvbi4KIAog
ICAtIEluIHByaW9yaXR5cS1oZWFwLmMsIGFuICNpbmNsdWRlIG9mIDxsaW1pdHMuaD4gd2FzIGFk
ZGVkLgorCisgIC0gSW4gc3dlZXAuYywgSXNXaW5kaW5nSW5zaWRlKCkgd2FzIGdpdmVuIGEgcmV0
dXJuIHZhbHVlIHRvIHNpbGVuY2UgYQorICAgIHdhcm5pbmctYXMtZXJyb3IgaW4gcmVsZWFzZSBi
dWlsZHMuCisKKyAgLSBJbiBzd2VlcC5jLCBEb25lRWRnZURpY3QoKSdzIGZpeGVkRWRnZXMgd2Fz
IHdyYXBwZWQgaW4gI2luZGVmIE5ERUJVRywgdG8KKyAgICBzaWxlbmNlIGEgd2FybmluZy1hcy1l
cnJvciBpbiByZWxlYXNlIGJ1aWxkcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkv
Z2x1L2xpYnRlc3Mvc3dlZXAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90aGlyZHBh
cnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmMJKHJldmlzaW9uIDc2MDI0KQorKysgU291cmNlL1dlYkNv
cmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9zd2VlcC5jCSh3b3JraW5nIGNvcHkpCkBAIC0yNTMs
NiArMjUzLDcgQEAgc3RhdGljIEdMYm9vbGVhbiBJc1dpbmRpbmdJbnNpZGUoIEdMVXRlcwogICAv
KkxJTlRFRCovCiAgIGFzc2VydCggRkFMU0UgKTsKICAgLypOT1RSRUFDSEVEKi8KKyAgcmV0dXJu
IDA7CiB9CiAKIApAQCAtMTE3Myw3ICsxMTc0LDkgQEAgc3RhdGljIHZvaWQgSW5pdEVkZ2VEaWN0
KCBHTFV0ZXNzZWxhdG9yIAogc3RhdGljIHZvaWQgRG9uZUVkZ2VEaWN0KCBHTFV0ZXNzZWxhdG9y
ICp0ZXNzICkKIHsKICAgQWN0aXZlUmVnaW9uICpyZWc7CisjaWZuZGVmIE5ERUJVRwogICBpbnQg
Zml4ZWRFZGdlcyA9IDA7CisjZW5kaWYKIAogICAvKiBfX0dMX0RJQ1RMSVNUS0VZICovIC8qIF9f
R0xfRElDVExJU1RNSU4gKi8KICAgd2hpbGUoIChyZWcgPSAoQWN0aXZlUmVnaW9uICopZGljdEtl
eSggZGljdE1pbiggdGVzcy0+ZGljdCApKSkgIT0gTlVMTCApIHsKSW5kZXg6IExheW91dFRlc3Rz
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9u
IDc2MDI2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTEgQEAKKzIwMTEtMDEtMTggIFN0ZXBoZW4gV2hpdGUgIDxzZW5vcmJsYW5jb0BjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIHR3byB0by1iZS1yZWJhc2VsaW5lZCB0ZXN0cyBmb3IgdGhlIEdQVSBwYXRoLgorCisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0tZ3B1L3Rlc3RfZXhwZWN0YXRpb25zLnR4dDoKKwogMjAx
MS0wMS0xOCAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBVbnJldmlld2VkLCByZW1vdmUgd3JvbmcgY2hyb21pdW0gZXhwZWN0YXRpb24gZm9yIGNv
bnNvbGUteGhyLWxvZ2dpbmcgdGVzdC4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9t
aXVtLWdwdS90ZXN0X2V4cGVjdGF0aW9ucy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
cGxhdGZvcm0vY2hyb21pdW0tZ3B1L3Rlc3RfZXhwZWN0YXRpb25zLnR4dAkocmV2aXNpb24gNzYw
MjQpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1ncHUvdGVzdF9leHBlY3RhdGlv
bnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zODYsMyArMzg2LDcgQEAgQlVHV0s1MTk4OSBXSU4g
TElOVVggOiBmYXN0L2NhbnZhcy9jYW52YQogCiAvLyBTdGFydGVkIGZhaWxpbmcgYWZ0ZXIgcjc1
NjQ4IG9uIGV2ZXJ5dGhpbmcgZXhjZXB0IFNub3cgTGVvcGFyZAogQlVHV0s1MjM0MSA6IGZhc3Qv
Y2FudmFzL2NhbnZhcy1sYXJnZS1kaW1lbnNpb25zLmh0bWwgPSBURVhUCisKKy8vIFRoZXNlIHdp
bGwgbmVlZCB0byByZWJhc2VsaW5lZCBhZnRlciB0aGUgbmV3IHBhdGggZHJhd2luZyBsYW5kcy4K
K0JVR19TRU5PUkJMQU5DTyBXSU4gTElOVVggOiBmYXN0L2NhbnZhcy9jYW52YXMtY29tcG9zaXRl
Lmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNPIFdJTiBMSU5VWCA6IGZhc3QvY2FudmFzL2Nh
bnZhcy10cmFuc2Zvcm0tc2tld2VkLmh0bWwgPSBJTUFHRQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79296</attachid>
            <date>2011-01-18 10:59:40 -0800</date>
            <delta_ts>2011-01-18 11:56:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52627-20110118135938.patch</filename>
            <type>text/plain</type>
            <size>51533</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MDM2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTI3IEBACisyMDExLTAxLTE4ICBTdGVwaGVu
IFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBhY2NlbGVyYXRlZCBwYXRoIGRy
YXdpbmcgYW5kIGNsaXBwaW5nIGZvciB0aGUgQ2FudmFzMkQgR1BVCisgICAgICAgIHBhdGguCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjYyNworICAg
ICAgICAKKyAgICAgICAgVGhpcyBpcyBkb25lIHdpdGggYSBzaW1wbGUgY3VydmUgaW50ZXJwb2xh
dG9yIGFuZCB0aGUgR0xVIHRlc3NlbGF0b3IsCisgICAgICAgIHdoaWNoIGlzIGdvb2QgZW5vdWdo
IGZvciBhIDMtNVggc3BlZWR1cCBvbgorICAgICAgICBodHRwOi8vaWUubWljcm9zb2Z0LmNvbS90
ZXN0ZHJpdmUvUGVyZm9ybWFuY2UvR2FsYWN0aWMvRGVmYXVsdC5odG1sLgorCisgICAgICAgIENv
dmVyZWQgYnkgY2FudmFzL3BoaWxpcC8yZC5wYXRoLmNsaXAuYmFzaWMuaHRtbCwgYW5kIG1hbnks
IG1hbnkgbW9yZS4KKyAgICAgICAgQWxsIHRlc3RzIGNhbnZhcy9waGlsaXAgYW5kIGZhc3QvY2Fu
dmFzIHBhdGhzIHBhc3Mgd2l0aCBubworICAgICAgICByZWdyZXNzaW9ucywgYWx0aG91Z2ggdHdv
IGhhdmUgbWlub3IgcGl4ZWwgZGlmZmVyZW5jZXMgd2hpY2ggcmVxdWlyZQorICAgICAgICByZWJh
c2VsaW5pbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAg
QWRkIGludGVybmFsX2dsdSBpbmNsdWRlIHBhdGggdG8gY2hyb21pdW0gYnVpbGQuCisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICBBZGQgaW50ZXJuYWxfZ2x1IGZpbGVzIHRvIGNocm9t
aXVtIGJ1aWxkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cGxhdGZvcm1M
YXllcik6CisgICAgICAgIE1ha2UgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIG1vcmUgcm9idXN0
IGFnYWluc3QgZmFpbHVyZSB0byBjcmVhdGUKKyAgICAgICAgYSBEcmF3aW5nQnVmZmVyLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKToKKyAg
ICAgICAgQXMgaW4gRHJhd2luZ0J1ZmZlck1hYy5jcHAsIGNhbGwgcmVzZXQoKSBmcm9tIHRoZSBj
b25zdHJ1Y3Rvci4KKyAgICAgICAgQWxzbyBpbml0aWFsaXplIHNpemUgdG8gKC0xLCAtMSksIHNv
IHJlc2V0KCkgZG9lc24ndCBlYXJseS1vdXQuCisgICAgICAgIEFkZCBpbml0aWFsaXplcnMgZm9y
IGRlcHRoQnVmZmVyIGFuZCBzdGVuY2lsQnVmZmVyLCBhbmQgcmVtb3ZlCisgICAgICAgIG11bHRp
c2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dMRVMyQ2FudmFzLmNwcDoKKyAgICAgICAgUmVtb3ZlIHNvbWUgdW51c2VkICNpbmNs
dWRlcy4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpTdGF0ZTo6U3RhdGUpOgorICAg
ICAgICBBZGQgY2xpcHBpbmcgc3RhdGUsIGFuZCBpbXBsZW1lbnQgc2F2ZS9yZXN0b3JlIHZpYSB0
aGUgY29weSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yKik6CisgICAg
ICAgIChXZWJDb3JlOjpRdWFkcmF0aWM6OlF1YWRyYXRpYyk6CisgICAgICAgIChXZWJDb3JlOjpR
dWFkcmF0aWM6OmZyb21CZXppZXIpOgorICAgICAgICAoV2ViQ29yZTo6UXVhZHJhdGljOjpldmFs
dWF0ZSk6CisgICAgICAgIFF1YWRyYXRpYyBCZXppZXIgY3VydmUgY2xhc3MuCisgICAgICAgIChX
ZWJDb3JlOjpDdWJpYzo6Q3ViaWMpOgorICAgICAgICAoV2ViQ29yZTo6Q3ViaWM6OmZyb21CZXpp
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3ViaWM6OmV2YWx1YXRlKToKKyAgICAgICAgQ3ViaWMg
QmV6aWVyIGN1cnZlIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmNsZWFy
UmVjdCk6CisgICAgICAgIEFkZCBjbGlwcGluZyBzdXBwb3J0IHRvIGNsZWFyUmVjdCgpLgorICAg
ICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmZpbGxQYXRoKToKKyAgICAgICAgSW1wbGVtZW50
IGZpbGxQYXRoKCkuCisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6ZmlsbFJlY3QpOgor
ICAgICAgICBBZGQgY2xpcHBpbmcgc3VwcG9ydCB0byBmaWxsUmVjdCgpLgorICAgICAgICAoV2Vi
Q29yZTo6R0xFUzJDYW52YXM6OmNsaXBQYXRoKToKKyAgICAgICAgSW1wbGVtZW50IGNsaXBQYXRo
KCkuCisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y2xpcE91dCk6CisgICAgICAgIFN0
dWIgb3V0IGNsaXBPdXQoKSAobm90IGNhbGxlZCBieSBDYW52YXMgMkQpLgorICAgICAgICAoV2Vi
Q29yZTo6R0xFUzJDYW52YXM6OnJlc3RvcmUpOgorICAgICAgICBXaGVuIHJlc3RvcmluZywgZHJh
dyBhbnkgcmVtYWluaW5nIGNsaXBwaW5nIHBhdGhzIHRvIHRoZSBzdGVuY2lsIGJ1ZmZlci4KKyAg
ICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KToKKyAgICAgICAg
QWRkIGNsaXBwaW5nIHN1cHBvcnQuCisgICAgICAgIChXZWJDb3JlOjppbnRlcnBvbGF0ZVF1YWRy
YXRpYyk6CisgICAgICAgIChXZWJDb3JlOjppbnRlcnBvbGF0ZUN1YmljKToKKyAgICAgICAgU2lt
cGxlIGN1cnZlIGludGVycG9sYXRpb24sIHVzaW5nIHRoZSBDdWJpYyBhbmQgUXVhZHJhdGljIGNs
YXNzZXMuCisgICAgICAgIChXZWJDb3JlOjpQb2x5Z29uRGF0YTo6UG9seWdvbkRhdGEpOgorICAg
ICAgICBBIHN0cnVjdCB0byBob2xkIHRoZSB0ZXNzZWxhdGlvbiBkYXRhIGZvciBjYWxsYmFja3Mu
CisgICAgICAgIChXZWJDb3JlOjpiZWdpbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZWRnZUZs
YWdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnZlcnRleERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6ZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpjb21iaW5lRGF0YSk6CisgICAgICAgIGlu
dGVybmFsX2dsdSB0ZXNzZWxhdGlvbiBjYWxsYmFja3MuCisgICAgICAgIChXZWJDb3JlOjpHTEVT
MkNhbnZhczo6Y3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgpOgorICAgICAgICBCdWlsZCBhbiBp
bnRlcnBvbGF0ZWQsIHRlc3NlbGF0ZWQgdmVydGV4IGJ1ZmZlciBhbmQgZWxlbWVudCBhcnJheSBi
dWZmZXIgZnJvbSBhIGdpdmVuIHBhdGgsIHN1aXRhYmxlIGZvciBmaWxsaW5nLgorICAgICAgICAo
V2ViQ29yZTo6R0xFUzJDYW52YXM6OmJlZ2luU3RlbmNpbERyYXcpOgorICAgICAgICBFbmFibGUg
c3RlbmNpbGxpbmcsIGFuZCBkaXNhYmxlIGRyYXdzIHRvIHRoZSBjb2xvciBidWZmZXIuCisgICAg
ICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6YXBwbHlDbGlwcGluZyk6CisgICAgICAgIElmIGNs
aXBwaW5nIGlzIGVuYWJsZWQsIHNldCB0aGUgYXBwcm9wcmlhdGUgR0wgc3RhdGUuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaDoKKyAgICAgICAgRG9j
dW1lbnQgdGhlIGZsYXZvdXJzIG9mIGRyYXdUZXh0dXJlZFJlY3QoKSBhIGJpdCwgc28gSSBkb24n
dCBnZXQgY29uZnVzZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6Y3JlYXRlU2Vjb25kYXJ5QnVmZmVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpyZXNpemVEZXB0aFN0ZW5jaWwpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cmVzZXQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmg6CisgICAgICAgIFVuaWZ5IG1fbXVsdGlzYW1w
bGVEZXB0aFN0ZW5jaWxCdWZmZXIgd2l0aCBtX2RlcHRoU3RlbmNpbEJ1ZmZlci4gCisgICAgICAg
IEltcGxlbWVudCBzZXBhcmF0ZSBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXJzIGZvciB3aGVuCisg
ICAgICAgIE9FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCBpcyBub3QgYXZhaWxhYmxlLiAgUmVmYWN0
b3IgY3JlYXRpb24gb2YKKyAgICAgICAgbXVsdGlzYW1wbGVkIGFuZCBub24tbXVsdGlzYW1wbGVk
IGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlcnMgaW50bworICAgICAgICByZXNpemVEZXB0aFN0ZW5j
aWwoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZSk6CisgICAgICAgIFR1cm4gb24gc3RlbmNpbCwgdHVybiBvZmYgZGVwdGgsIHR1cm4gb2Zm
IGFudGlhbGlhc2luZyAoZm9yIG5vdykuCisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRDo6ZW5hYmxlU3RlbmNpbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgIEltcGxlbWVudCBzdGVuY2ls
IGVuYWJsZS9kaXNhYmxlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJh
d2luZ0J1ZmZlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdp
bmdCdWZmZXIpOgorICAgICAgICBSZW1vdmUgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZl
ci4gIFNldCB0aGUgc2l6ZSB0byAoLTEsIC0xKQorICAgICAgICBvbiBjcmVhdGlvbiwgc28gcmVz
ZXQoKSBkb2Vzbid0IGVhcmx5LW91dC4gIEluaXRpYWxpemUgbV9kZXB0aEJ1ZmZlcgorICAgICAg
ICBhbmQgbV9zdGVuY2lsQnVmZmVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmNhbnZhc0NsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlw
T3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIFB1dCBp
biBHUFUgaG9va3MgZm9yIHBhdGggY2xpcHBpbmcsIGFuZCBwYXRoIGRyYXdpbmcuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmNhbkFjY2VsZXJhdGUpOgorICAgICAg
ICBEb24ndCBjaGVjayBmb3IgY2xpcHBpbmcgcGF0aHMgaW4gY2FuQWNjZWxlcmF0ZSgpIChzaW5j
ZSB3ZSBjYW4KKyAgICAgICAgbm93IGFjY2VsZXJhdGUgdGhlbSkuCisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUNvbnRleHRTa2lhOjp1cGxvYWRTb2Z0d2FyZVRvSGFyZHdhcmUpOgorICAgICAg
ICBEb24ndCBkbyBjbGlwcGluZyB3aGVuIHVwbG9hZGluZyBzb2Z0d2FyZSBkcmF3cyB0byBoYXJk
d2FyZS4KKyAgICAgICAgKiB0aGlyZHBhcnR5L2dsdS9SRUFETUUud2Via2l0OgorICAgICAgICAq
IHRoaXJkcGFydHkvZ2x1L2dsdW9zLmg6CisgICAgICAgICN1bmRlZiBNSU4gYW5kIE1BWCwgdG8g
Zml4IHdhcm5pbmdzLWFzLWVycm9ycyBpbiBDaHJvbWUvTWFjIGJ1aWxkLgorICAgICAgICAqIHRo
aXJkcGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5jOgorICAgICAgICAqIHRoaXJkcGFydHkvZ2x1L2xp
YnRlc3MvcHJpb3JpdHlxLmM6CisgICAgICAgICogdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9yZW5k
ZXIuYzoKKyAgICAgICAgVXNlIGRve313aGlsZSgwKSBpbnN0ZWFkIG9mIGlmKDEpZWxzZSBjb25z
dHJ1Y3QgaW4gbWFjcm8uCisgICAgICAgICogdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9zd2VlcC5j
OgorICAgICAgICAoSXNXaW5kaW5nSW5zaWRlKToKKyAgICAgICAgKERvbmVFZGdlRGljdCk6Cisg
ICAgICAgIEZpeCBzb21lIHdhcm5pbmdzIHRyZWF0ZWQgYXMgZXJyb3JzIGZvciB0aGUgTGludXgg
UmVsZWFzZSBidWlsZC4KKwogMjAxMS0wMS0xOCAgSGVsZGVyIENvcnJlaWEgIDxoZWxkZXJAc2Vu
Y2hhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNl
bi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDc2MDM2KQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00NDMzLDYgKzQ0MzMsMzAgQEAKICAg
ICAgICAgICAgICdzdmcvU1ZHWm9vbUFuZFBhbi5oJywKICAgICAgICAgICAgICdzdmcvU1ZHWm9v
bUV2ZW50LmNwcCcsCiAgICAgICAgICAgICAnc3ZnL1NWR1pvb21FdmVudC5oJywKKyAgICAgICAg
ICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2RpY3QuaCcsCisgICAgICAgICAgICAndGhpcmRw
YXJ0eS9nbHUvbGlidGVzcy9kaWN0LWxpc3QuaCcsCisgICAgICAgICAgICAndGhpcmRwYXJ0eS9n
bHUvbGlidGVzcy9nZW9tLmgnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mv
bWVtYWxsb2MuaCcsCisgICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgn
LAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvbm9ybWFsLmgnLAorICAgICAg
ICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhlYXAuaCcsCisgICAgICAg
ICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVhcC5jJywKKyAgICAgICAg
ICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1zb3J0LmgnLAorICAgICAgICAg
ICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLmgnLAorICAgICAgICAgICAgJ3Ro
aXJkcGFydHkvZ2x1L2xpYnRlc3MvcmVuZGVyLmgnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkv
Z2x1L2xpYnRlc3Mvc3dlZXAuaCcsCisgICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVz
cy90ZXNzLmgnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzc21vbm8u
aCcsCisgICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9kaWN0LmMnLAorICAgICAg
ICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5jJywKKyAgICAgICAgICAgICd0aGly
ZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmMnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkv
Z2x1L2xpYnRlc3MvbWVzaC5jJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNz
L25vcm1hbC5jJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5
cS5jJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3JlbmRlci5jJywKKyAg
ICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmMnLAorICAgICAgICAgICAg
J3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzcy5jJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5
L2dsdS9saWJ0ZXNzL3Rlc3Ntb25vLmMnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQmFz
aWNQcm9jZXNzb3JOb2RlLmNwcCcsCiAgICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9CYXNpY1By
b2Nlc3Nvck5vZGUuaCcsCiAgICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9CdWZmZXIuaCcsCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkocmV2aXNpb24gNzYwMzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBjb3B5
KQpAQCAtMTg1LDYgKzE4NSw3IEBACiAgICAgICAnLi4vc3ZnL2dyYXBoaWNzJywKICAgICAgICcu
Li9zdmcvZ3JhcGhpY3MvZmlsdGVycycsCiAgICAgICAnLi4vc3ZnL3Byb3BlcnRpZXMnLAorICAg
ICAgJy4uL3RoaXJkcGFydHkvZ2x1JywKICAgICAgICcuLi93ZWJhdWRpbycsCiAgICAgICAnLi4v
d2Vic29ja2V0cycsCiAgICAgICAnLi4vd29ya2VycycsCkBAIC0xMTE3LDYgKzExMTgsOCBAQAog
CiAgICAgICAgICMgVXNlIExpbmtIYXNoQ2hyb21pdW0uY3BwIGluc3RlYWQKICAgICAgICAgWydl
eGNsdWRlJywgJ3BsYXRmb3JtL0xpbmtIYXNoXFwuY3BwJCddLAorCisgICAgICAgIFsnaW5jbHVk
ZScsICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzLyddLAogICAgICAgXSwKICAgICAgICdjb25kaXRp
b25zJzogWwogICAgICAgICBbJ09TPT0ibGludXgiIG9yIE9TPT0iZnJlZWJzZCInLCB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDc2MDM2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcw
LDcgKzE3MCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZXNldCgpCiAgICAg
bV9wYXRoLmNsZWFyKCk7CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBp
ZiAoR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKSkgewotICAgICAgICBpZiAo
bV9jb250ZXh0M0QpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dDNEICYmIG1fZHJhd2luZ0J1ZmZl
cikgewogICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKGNhbnZhcygp
LT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpKTsKICAgICAgICAgICAgIGMtPnNldFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEKG1fY29udGV4dDNELmdldCgpLCBtX2RyYXdpbmdCdWZmZXIuZ2V0
KCksIEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSkpOwogICAg
ICAgICB9CkBAIC0xODk1LDcgKzE4OTUsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6cGFpbnRSZW5kCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogUGxhdGZvcm1MYXllciogQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kcmF3aW5nQnVm
ZmVyLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJh
d2luZ0J1ZmZlci0+cGxhdGZvcm1MYXllcigpIDogMDsKIH0KICNlbmRpZgogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21p
dW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDc2MDM2KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9t
aXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsMTUgKzcyLDE2IEBAIERyYXdpbmdCdWZmZXI6
OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9zaXplKC0x
LCAtMSkKICAgICAsIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQobXVsdGlzYW1wbGVF
eHRlbnNpb25TdXBwb3J0ZWQpCiAgICAgLCBtX3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1
cHBvcnRlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAgLCBtX2Zi
bygwKQogICAgICwgbV9jb2xvckJ1ZmZlcigwKQogICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIo
MCkKKyAgICAsIG1fZGVwdGhCdWZmZXIoMCkKKyAgICAsIG1fc3RlbmNpbEJ1ZmZlcigwKQogICAg
ICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDAp
Ci0gICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCiAgICAgLCBtX2ludGVy
bmFsKG5ldyBEcmF3aW5nQnVmZmVySW50ZXJuYWwpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX2NvcHlfdGV4dHVyZV90b19wYXJl
bnRfdGV4dHVyZSIpKSB7CkBAIC05MSw2ICs5Miw3IEBAIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdC
dWZmZXIoR3JhcGhpY3NDb24KICAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAgICAgbV9jb2xvckJ1ZmZlciA9IGdlbmVy
YXRlQ29sb3JUZXh0dXJlKGNvbnRleHQsIHNpemUpOwogICAgIGNyZWF0ZVNlY29uZGFyeUJ1ZmZl
cnMoKTsKKyAgICByZXNldChzaXplKTsKIH0KIAogRHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZm
ZXIoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xF
UzJDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAkocmV2aXNpb24gNzYwMzYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDEyICszNCwxNiBAQAogCiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5o
IgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiaW50ZXJuYWxfZ2x1LmgiCiAjaW5j
bHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgogI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAi
U29saWRGaWxsU2hhZGVyLmgiCi0jaW5jbHVkZSAiVGV4U2hhZGVyLmgiCisjaWYgUExBVEZPUk0o
U0tJQSkKKyNpbmNsdWRlICJTa1BhdGguaCIKKyNlbmRpZgogI2luY2x1ZGUgIlRleHR1cmUuaCIK
IAogI2RlZmluZSBfVVNFX01BVEhfREVGSU5FUwpAQCAtNTAsMTcgKzU0LDk4IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorLy8gTnVtYmVyIG9mIGxpbmUgc2VnbWVudHMgdXNlZCB0byBhcHBy
b3hpbWF0ZSBiZXppZXIgY3VydmVzLgorY29uc3QgaW50IHBhdGhUZXNzZWxhdGlvbiA9IDMwOwor
dHlwZWRlZiB2b2lkIChHTEFQSUVOVFJZICpURVNTQ0IpKCk7Cit0eXBlZGVmIFdURjo6VmVjdG9y
PGZsb2F0PiBGbG9hdFZlY3RvcjsKKwogc3RydWN0IEdMRVMyQ2FudmFzOjpTdGF0ZSB7CiAgICAg
U3RhdGUoKQogICAgICAgICA6IG1fZmlsbENvbG9yKDAsIDAsIDAsIDI1NSkKICAgICAgICAgLCBt
X2FscGhhKDEuMGYpCiAgICAgICAgICwgbV9jb21wb3NpdGVPcChDb21wb3NpdGVTb3VyY2VPdmVy
KQorICAgICAgICAsIG1fY2xpcHBpbmdFbmFibGVkKGZhbHNlKQorICAgIHsKKyAgICB9CisgICAg
U3RhdGUoY29uc3QgU3RhdGUmIG90aGVyKQorICAgICAgICA6IG1fZmlsbENvbG9yKG90aGVyLm1f
ZmlsbENvbG9yKQorICAgICAgICAsIG1fYWxwaGEob3RoZXIubV9hbHBoYSkKKyAgICAgICAgLCBt
X2NvbXBvc2l0ZU9wKG90aGVyLm1fY29tcG9zaXRlT3ApCisgICAgICAgICwgbV9jdG0ob3RoZXIu
bV9jdG0pCisgICAgICAgICwgbV9jbGlwcGluZ1BhdGhzKCkgLy8gQ2xpcHBpbmcgcGF0aHMgYXJl
IHRyYWNrZWQgcGVyLXN0YXRlLCBkb24ndCBjb3B5LgorICAgICAgICAsIG1fY2xpcHBpbmdFbmFi
bGVkKG90aGVyLm1fY2xpcHBpbmdFbmFibGVkKQogICAgIHsKICAgICB9CiAgICAgQ29sb3IgbV9m
aWxsQ29sb3I7CiAgICAgZmxvYXQgbV9hbHBoYTsKICAgICBDb21wb3NpdGVPcGVyYXRvciBtX2Nv
bXBvc2l0ZU9wOwogICAgIEFmZmluZVRyYW5zZm9ybSBtX2N0bTsKKyAgICBXVEY6OlZlY3RvcjxQ
YXRoPiBtX2NsaXBwaW5nUGF0aHM7CisgICAgYm9vbCBtX2NsaXBwaW5nRW5hYmxlZDsKK307CisK
K3N0YXRpYyBpbmxpbmUgRmxvYXRQb2ludCBvcGVyYXRvciooY29uc3QgRmxvYXRQb2ludCYgZiwg
ZmxvYXQgc2NhbGUpCit7CisgICAgcmV0dXJuIEZsb2F0UG9pbnQoZi54KCkgKiBzY2FsZSwgZi55
KCkgKiBzY2FsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRmxvYXRQb2ludCBvcGVyYXRvciooZmxv
YXQgc2NhbGUsIGNvbnN0IEZsb2F0UG9pbnQmIGYpCit7CisgICAgcmV0dXJuIEZsb2F0UG9pbnQo
Zi54KCkgKiBzY2FsZSwgZi55KCkgKiBzY2FsZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRmxvYXRT
aXplIG9wZXJhdG9yKihjb25zdCBGbG9hdFNpemUmIGYsIGZsb2F0IHNjYWxlKQoreworICAgIHJl
dHVybiBGbG9hdFNpemUoZi53aWR0aCgpICogc2NhbGUsIGYuaGVpZ2h0KCkgKiBzY2FsZSk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgRmxvYXRTaXplIG9wZXJhdG9yKihmbG9hdCBzY2FsZSwgY29uc3Qg
RmxvYXRTaXplJiBmKQoreworICAgIHJldHVybiBGbG9hdFNpemUoZi53aWR0aCgpICogc2NhbGUs
IGYuaGVpZ2h0KCkgKiBzY2FsZSk7Cit9CisKK2NsYXNzIFF1YWRyYXRpYyB7CisgIHB1YmxpYzoK
KyAgICBRdWFkcmF0aWMoRmxvYXRQb2ludCBhLCBGbG9hdFBvaW50IGIsIEZsb2F0UG9pbnQgYykg
OgorICAgICAgICBtX2EoYSksIG1fYihiKSwgbV9jKGMpCisgICAgeworICAgIH0KKyAgICBzdGF0
aWMgUXVhZHJhdGljIGZyb21CZXppZXIoRmxvYXRQb2ludCBwMCwgRmxvYXRQb2ludCBwMSwgRmxv
YXRQb2ludCBwMikKKyAgICB7CisgICAgICAgIEZsb2F0U2l6ZSBwMXMocDEueCgpLCBwMS55KCkp
OworICAgICAgICBGbG9hdFNpemUgcDJzKHAyLngoKSwgcDIueSgpKTsKKyAgICAgICAgRmxvYXRQ
b2ludCBiID0gLTIuMGYgKiBwMCArIDIuMGYgKiBwMXM7CisgICAgICAgIEZsb2F0UG9pbnQgYyA9
ICAgICAgICAgcDAgLSAyLjBmICogcDFzICsgcDJzOworICAgICAgICByZXR1cm4gUXVhZHJhdGlj
KHAwLCBiLCBjKTsKKyAgICB9CisgICAgaW5saW5lIEZsb2F0UG9pbnQgZXZhbHVhdGUoZmxvYXQg
dCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX2EgKyB0ICogKG1fYiArIHQgKiBtX2MpOworICAg
IH0KKyAgICBGbG9hdFBvaW50IG1fYSwgbV9iLCBtX2MsIG1fZDsKK307CisKK2NsYXNzIEN1Ymlj
IHsKKyAgcHVibGljOgorICAgIEN1YmljKEZsb2F0UG9pbnQgYSwgRmxvYXRQb2ludCBiLCBGbG9h
dFBvaW50IGMsIEZsb2F0UG9pbnQgZCkgOgorICAgICAgICBtX2EoYSksIG1fYihiKSwgbV9jKGMp
LCBtX2QoZCkgCisgICAgeworICAgIH0KKyAgICBzdGF0aWMgQ3ViaWMgZnJvbUJlemllcihGbG9h
dFBvaW50IHAwLCBGbG9hdFBvaW50IHAxLCBGbG9hdFBvaW50IHAyLCBGbG9hdFBvaW50IHAzKQor
ICAgIHsKKyAgICAgICAgRmxvYXRTaXplIHAxcyhwMS54KCksIHAxLnkoKSk7CisgICAgICAgIEZs
b2F0U2l6ZSBwMnMocDIueCgpLCBwMi55KCkpOworICAgICAgICBGbG9hdFNpemUgcDNzKHAzLngo
KSwgcDMueSgpKTsKKyAgICAgICAgRmxvYXRQb2ludCBiID0gLTMuMGYgKiBwMCArIDMuMGYgKiBw
MXM7CisgICAgICAgIEZsb2F0UG9pbnQgYyA9ICAzLjBmICogcDAgLSA2LjBmICogcDFzICsgMy4w
ZiAqIHAyczsKKyAgICAgICAgRmxvYXRQb2ludCBkID0gLTEuMGYgKiBwMCArIDMuMGYgKiBwMXMg
LSAzLjBmICogcDJzICsgcDNzOworICAgICAgICByZXR1cm4gQ3ViaWMocDAsIGIsIGMsIGQpOwor
ICAgIH0KKyAgICBGbG9hdFBvaW50IGV2YWx1YXRlKGZsb2F0IHQpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9hICsgdCAqIChtX2IgKyB0ICogKG1fYyArIHQgKiBtX2QpKTsKKyAgICB9CisgICAg
RmxvYXRQb2ludCBtX2EsIG1fYiwgbV9jLCBtX2Q7CiB9OwogCiBHTEVTMkNhbnZhczo6R0xFUzJD
YW52YXMoU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGRy
YXdpbmdCdWZmZXIsIGNvbnN0IEludFNpemUmIHNpemUpCkBAIC04OCw3ICsxNzMsNyBAQCB2b2lk
IEdMRVMyQ2FudmFzOjpiaW5kRnJhbWVidWZmZXIoKQogdm9pZCBHTEVTMkNhbnZhczo6Y2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKIHsKICAgICBiaW5kRnJhbWVidWZmZXIoKTsKLSAg
ICBpZiAobV9zdGF0ZS0+bV9jdG0uaXNJZGVudGl0eSgpKSB7CisgICAgaWYgKG1fc3RhdGUtPm1f
Y3RtLmlzSWRlbnRpdHkoKSAmJiAhbV9zdGF0ZS0+bV9jbGlwcGluZ0VuYWJsZWQpIHsKICAgICAg
ICAgbV9jb250ZXh0LT5zY2lzc29yKHJlY3QpOwogICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKICAgICAgICAgbV9jb250ZXh0LT5jbGVh
ckNvbG9yKENvbG9yKFJHQkEzMigwKSkpOwpAQCAtMTAyLDkgKzE4NywxNyBAQCB2b2lkIEdMRVMy
Q2FudmFzOjpjbGVhclJlY3QoY29uc3QgRmxvYXRSCiAgICAgfQogfQogCit2b2lkIEdMRVMyQ2Fu
dmFzOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIG1fY29udGV4dC0+YXBwbHlD
b21wb3NpdGVPcGVyYXRvcihtX3N0YXRlLT5tX2NvbXBvc2l0ZU9wKTsKKyAgICBhcHBseUNsaXBw
aW5nKG1fc3RhdGUtPm1fY2xpcHBpbmdFbmFibGVkKTsKKyAgICBmaWxsUGF0aChwYXRoLCBtX3N0
YXRlLT5tX2ZpbGxDb2xvcik7Cit9CisKIHZvaWQgR0xFUzJDYW52YXM6OmZpbGxSZWN0KGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3Bh
Y2UpCiB7CiAgICAgbV9jb250ZXh0LT5hcHBseUNvbXBvc2l0ZU9wZXJhdG9yKG1fc3RhdGUtPm1f
Y29tcG9zaXRlT3ApOworICAgIGFwcGx5Q2xpcHBpbmcobV9zdGF0ZS0+bV9jbGlwcGluZ0VuYWJs
ZWQpOwogICAgIG1fY29udGV4dC0+dXNlUXVhZFZlcnRpY2VzKCk7CiAKICAgICBBZmZpbmVUcmFu
c2Zvcm0gbWF0cml4KG1fZmxpcE1hdHJpeCk7CkBAIC0xNTMsNiArMjQ2LDIzIEBAIHZvaWQgR0xF
UzJDYW52YXM6OmNvbmNhdENUTShjb25zdCBBZmZpbmUKICAgICBtX3N0YXRlLT5tX2N0bS5tdWx0
TGVmdChhZmZpbmUpOwogfQogCit2b2lkIEdMRVMyQ2FudmFzOjpjbGlwUGF0aChjb25zdCBQYXRo
JiBwYXRoKQoreworICAgIGJpbmRGcmFtZWJ1ZmZlcigpOworICAgIGNoZWNrR0xFcnJvcigiYmlu
ZEZyYW1lYnVmZmVyIik7CisgICAgYmVnaW5TdGVuY2lsRHJhdygpOworICAgIC8vIFJlZCBpcyB1
c2VkIHNvIHdlIGNhbiBzZWUgaXQgaWYgaXQgZW5kcyB1cCBpbiB0aGUgY29sb3IgYnVmZmVyLgor
ICAgIENvbG9yIHJlZCgyNTUsIDAsIDAsIDI1NSk7CisgICAgZmlsbFBhdGgocGF0aCwgcmVkKTsK
KyAgICBtX3N0YXRlLT5tX2NsaXBwaW5nUGF0aHMuYXBwZW5kKHBhdGgpOworICAgIG1fc3RhdGUt
Pm1fY2xpcHBpbmdFbmFibGVkID0gdHJ1ZTsKK30KKwordm9pZCBHTEVTMkNhbnZhczo6Y2xpcE91
dChjb25zdCBQYXRoJiBwYXRoKQoreworICAgIEFTU0VSVCghImNsaXBPdXQgaXMgdW5zdXBwb3J0
ZWQgaW4gR0xFUzJDYW52YXMuXG4iKTsKK30KKwogdm9pZCBHTEVTMkNhbnZhczo6c2F2ZSgpCiB7
CiAgICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChTdGF0ZShtX3N0YXRlU3RhY2subGFzdCgpKSk7CkBA
IC0xNjIsMTMgKzI3MiwzMiBAQCB2b2lkIEdMRVMyQ2FudmFzOjpzYXZlKCkKIHZvaWQgR0xFUzJD
YW52YXM6OnJlc3RvcmUoKQogewogICAgIEFTU0VSVCghbV9zdGF0ZVN0YWNrLmlzRW1wdHkoKSk7
CisgICAgYm9vbCBoYWRDbGlwcGluZ1BhdGhzID0gIW1fc3RhdGUtPm1fY2xpcHBpbmdQYXRocy5p
c0VtcHR5KCk7CiAgICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKICAgICBtX3N0YXRlID0g
Jm1fc3RhdGVTdGFjay5sYXN0KCk7CisgICAgaWYgKGhhZENsaXBwaW5nUGF0aHMpIHsKKyAgICAg
ICAgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9CVUZGRVJfQklU
KTsKKyAgICAgICAgYmVnaW5TdGVuY2lsRHJhdygpOworICAgICAgICBTdGF0ZVZlY3Rvcjo6Y29u
c3RfaXRlcmF0b3IgaXRlcjsKKyAgICAgICAgZm9yIChpdGVyID0gbV9zdGF0ZVN0YWNrLmJlZ2lu
KCk7IGl0ZXIgPCBtX3N0YXRlU3RhY2suZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgY29u
c3QgU3RhdGUmIHN0YXRlID0gKml0ZXI7CisgICAgICAgICAgICBjb25zdCBWZWN0b3I8UGF0aD4m
IGNsaXBwaW5nUGF0aHMgPSBzdGF0ZS5tX2NsaXBwaW5nUGF0aHM7CisgICAgICAgICAgICBWZWN0
b3I8UGF0aD46OmNvbnN0X2l0ZXJhdG9yIHBhdGhJdGVyOworICAgICAgICAgICAgZm9yIChwYXRo
SXRlciA9IGNsaXBwaW5nUGF0aHMuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICAgcGF0aEl0ZXIg
PCBjbGlwcGluZ1BhdGhzLmVuZCgpOworICAgICAgICAgICAgICAgICArK3BhdGhJdGVyKSB7Cisg
ICAgICAgICAgICAgICAgLy8gUmVkIGlzIHVzZWQgc28gd2UgY2FuIHNlZSBpdCBpZiBpdCBlbmRz
IHVwIGluIHRoZSBjb2xvciBidWZmZXIuCisgICAgICAgICAgICAgICAgQ29sb3IgcmVkKDI1NSwg
MCwgMCwgMjU1KTsKKyAgICAgICAgICAgICAgICBmaWxsUGF0aCgqcGF0aEl0ZXIsIHJlZCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CiB9CiAKIHZvaWQgR0xFUzJDYW52YXM6OmRy
YXdUZXh0dXJlZFJlY3QodW5zaWduZWQgdGV4dHVyZSwgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNp
emUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBD
b2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQogewog
ICAgIG1fY29udGV4dC0+YXBwbHlDb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVPcCk7CisgICAg
YXBwbHlDbGlwcGluZyhmYWxzZSk7CiAKICAgICBtX2NvbnRleHQtPnVzZVF1YWRWZXJ0aWNlcygp
OwogICAgIG1fY29udGV4dC0+c2V0QWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRTApOwpAQCAtMTgwLDEzICszMDksMTQgQEAgdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1
cmVkUmVjdCh1bnNpZwogCiB2b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KFRleHR1
cmUqIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wKQogewotICAgIGRyYXdUZXh0dXJlZFJlY3QodGV4dHVyZSwgc3JjUmVjdCwgZHN0UmVjdCwg
bV9zdGF0ZS0+bV9jdG0sIG1fc3RhdGUtPm1fYWxwaGEsIGNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9w
KTsKKyAgICBkcmF3VGV4dHVyZWRSZWN0KHRleHR1cmUsIHNyY1JlY3QsIGRzdFJlY3QsIG1fc3Rh
dGUtPm1fY3RtLCBtX3N0YXRlLT5tX2FscGhhLCBjb2xvclNwYWNlLCBjb21wb3NpdGVPcCwgbV9z
dGF0ZS0+bV9jbGlwcGluZ0VuYWJsZWQpOwogfQogCiAKLXZvaWQgR0xFUzJDYW52YXM6OmRyYXdU
ZXh0dXJlZFJlY3QoVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
LCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBj
b21wb3NpdGVPcCkKK3ZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSog
dGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBmbG9hdCBhbHBoYSwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgYm9vbCBjbGlw
KQogewogICAgIG1fY29udGV4dC0+YXBwbHlDb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVPcCk7
CisgICAgYXBwbHlDbGlwcGluZyhjbGlwKTsKICAgICBjb25zdCBUaWxpbmdEYXRhJiB0aWxlcyA9
IHRleHR1cmUtPnRpbGVzKCk7CiAgICAgSW50UmVjdCB0aWxlSWR4UmVjdCA9IHRpbGVzLm92ZXJs
YXBwZWRUaWxlSW5kaWNlcyhzcmNSZWN0KTsKIApAQCAtMjUxLDYgKzM4MSwyMTMgQEAgVGV4dHVy
ZSogR0xFUzJDYW52YXM6OmdldFRleHR1cmUoTmF0aXZlSQogICAgIHJldHVybiBtX2NvbnRleHQt
PmdldFRleHR1cmUocHRyKTsKIH0KIAorI2lmIFBMQVRGT1JNKFNLSUEpCisvLyBUaGlzIGlzIGFj
dHVhbGx5IGNyb3NzLXBsYXRmb3JtIGNvZGUsIGJ1dCBzaW5jZSBpdHMgb25seSBjYWxsZXIgaXMg
aW5zaWRlIGEKKy8vIFBMQVRGT1JNKFNLSUEpLCBpdCB3aWxsIGNhdXNlIGEgd2FybmluZy1hcy1l
cnJvciBvbiBDaHJvbWUvTWFjLgorc3RhdGljIHZvaWQgaW50ZXJwb2xhdGVRdWFkcmF0aWMoRmxv
YXRWZWN0b3IqIHZlcnRpY2VzLCBjb25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2lu
dCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyKQoreworICAgIGZsb2F0IHRJbmNyZW1lbnQgPSAx
LjBmIC8gcGF0aFRlc3NlbGF0aW9uLCB0ID0gdEluY3JlbWVudDsKKyAgICBRdWFkcmF0aWMgYyA9
IFF1YWRyYXRpYzo6ZnJvbUJlemllcihwMCwgcDEsIHAyKTsKKyAgICBmb3IgKGludCBpID0gMDsg
aSA8IHBhdGhUZXNzZWxhdGlvbjsgKytpLCB0ICs9IHRJbmNyZW1lbnQpIHsKKyAgICAgICAgRmxv
YXRQb2ludCBwID0gYy5ldmFsdWF0ZSh0KTsKKyAgICAgICAgdmVydGljZXMtPmFwcGVuZChwLngo
KSk7CisgICAgICAgIHZlcnRpY2VzLT5hcHBlbmQocC55KCkpOworICAgICAgICB2ZXJ0aWNlcy0+
YXBwZW5kKDEuMGYpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgaW50ZXJwb2xhdGVDdWJpYyhG
bG9hdFZlY3RvciogdmVydGljZXMsIGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBv
aW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIsIGNvbnN0IEZsb2F0UG9pbnQmIHAzKQorewor
ICAgIGZsb2F0IHRJbmNyZW1lbnQgPSAxLjBmIC8gcGF0aFRlc3NlbGF0aW9uLCB0ID0gdEluY3Jl
bWVudDsKKyAgICBDdWJpYyBjID0gQ3ViaWM6OmZyb21CZXppZXIocDAsIHAxLCBwMiwgcDMpOwor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGF0aFRlc3NlbGF0aW9uOyArK2ksIHQgKz0gdEluY3Jl
bWVudCkgeworICAgICAgICBGbG9hdFBvaW50IHAgPSBjLmV2YWx1YXRlKHQpOworICAgICAgICB2
ZXJ0aWNlcy0+YXBwZW5kKHAueCgpKTsKKyAgICAgICAgdmVydGljZXMtPmFwcGVuZChwLnkoKSk7
CisgICAgICAgIHZlcnRpY2VzLT5hcHBlbmQoMS4wZik7CisgICAgfQorfQorI2VuZGlmCisKK3N0
cnVjdCBQb2x5Z29uRGF0YSB7CisgICAgUG9seWdvbkRhdGEoRmxvYXRWZWN0b3IqIHZlcnRpY2Vz
LCBXVEY6OlZlY3RvcjxzaG9ydD4qIGluZGljZXMpCisgICAgICA6IG1fdmVydGljZXModmVydGlj
ZXMpCisgICAgICAsIG1faW5kaWNlcyhpbmRpY2VzKQorICAgIHsKKyAgICB9CisgICAgRmxvYXRW
ZWN0b3IqIG1fdmVydGljZXM7CisgICAgV1RGOjpWZWN0b3I8c2hvcnQ+KiBtX2luZGljZXM7Cit9
OworCitzdGF0aWMgdm9pZCBiZWdpbkRhdGEoR0xlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCit7Cisg
ICAgQVNTRVJUKHR5cGUgPT0gR0xfVFJJQU5HTEVTKTsKK30KKworc3RhdGljIHZvaWQgZWRnZUZs
YWdEYXRhKEdMYm9vbGVhbiBmbGFnLCB2b2lkKiBkYXRhKQoreworfQorCitzdGF0aWMgdm9pZCB2
ZXJ0ZXhEYXRhKHZvaWQqIHZlcnRleERhdGEsIHZvaWQqIGRhdGEpCit7CisgICAgc3RhdGljX2Nh
c3Q8UG9seWdvbkRhdGEqPihkYXRhKS0+bV9pbmRpY2VzLT5hcHBlbmQocmVpbnRlcnByZXRfY2Fz
dDxsb25nPih2ZXJ0ZXhEYXRhKSk7Cit9CisKK3N0YXRpYyB2b2lkIGVuZERhdGEodm9pZCogZGF0
YSkKK3sKK30KKworc3RhdGljIHZvaWQgY29tYmluZURhdGEoR0xkb3VibGUgY29vcmRzWzNdLCB2
b2lkKiB2ZXJ0ZXhEYXRhWzRdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xm
bG9hdCB3ZWlnaHRbNF0sIHZvaWQgKipvdXREYXRhLCB2b2lkKiBkYXRhKQoreworICAgIFBvbHln
b25EYXRhKiBwb2x5Z29uRGF0YSA9IHN0YXRpY19jYXN0PFBvbHlnb25EYXRhKj4oZGF0YSk7Cisg
ICAgaW50IGluZGV4ID0gcG9seWdvbkRhdGEtPm1fdmVydGljZXMtPnNpemUoKSAvIDM7CisgICAg
cG9seWdvbkRhdGEtPm1fdmVydGljZXMtPmFwcGVuZChzdGF0aWNfY2FzdDxmbG9hdD4oY29vcmRz
WzBdKSk7CisgICAgcG9seWdvbkRhdGEtPm1fdmVydGljZXMtPmFwcGVuZChzdGF0aWNfY2FzdDxm
bG9hdD4oY29vcmRzWzFdKSk7CisgICAgcG9seWdvbkRhdGEtPm1fdmVydGljZXMtPmFwcGVuZCgx
LjBmKTsKKyAgICAqb3V0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGluZGV4KTsKK30K
KwordHlwZWRlZiB2b2lkICgqVEVTU0NCKSgpOworCit2b2lkIEdMRVMyQ2FudmFzOjpjcmVhdGVW
ZXJ0ZXhCdWZmZXJGcm9tUGF0aChjb25zdCBQYXRoJiBwYXRoLCBpbnQqIGNvdW50LCB1bnNpZ25l
ZCogdmVydGV4QnVmZmVyLCB1bnNpZ25lZCogaW5kZXhCdWZmZXIpCit7CisgICAgKnZlcnRleEJ1
ZmZlciA9IG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlQnVmZmVyKCk7Cisg
ICAgY2hlY2tHTEVycm9yKCJjcmVhdGVWZXJ0ZXhCdWZmZXJGcm9tUGF0aCwgY3JlYXRlQnVmZmVy
Iik7CisgICAgKmluZGV4QnVmZmVyID0gbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5j
cmVhdGVCdWZmZXIoKTsKKyAgICBjaGVja0dMRXJyb3IoImNyZWF0ZVZlcnRleEJ1ZmZlckZyb21Q
YXRoLCBjcmVhdGVCdWZmZXIiKTsKKyAgICBGbG9hdFZlY3RvciB2ZXJ0aWNlczsKKyAgICBXVEY6
OlZlY3RvcjxzaXplX3Q+IGNvbnRvdXJzOworI2lmIFBMQVRGT1JNKFNLSUEpCisgICAgY29uc3Qg
U2tQYXRoKiBza1BhdGggPSBwYXRoLnBsYXRmb3JtUGF0aCgpOworICAgIFNrUG9pbnQgcHRzWzRd
OworICAgIFNrUGF0aDo6SXRlciBpdGVyKCpza1BhdGgsIHRydWUpOworICAgIFNrUGF0aDo6VmVy
YiB2ZXJiOworICAgIHdoaWxlICgodmVyYiA9IGl0ZXIubmV4dChwdHMpKSAhPSBTa1BhdGg6OmtE
b25lX1ZlcmIpIHsKKyAgICAgICAgc3dpdGNoICh2ZXJiKSB7CisgICAgICAgIGNhc2UgU2tQYXRo
OjprTW92ZV9WZXJiOgorICAgICAgICAgICAgdmVydGljZXMuYXBwZW5kKHB0c1swXS5mWCk7Cisg
ICAgICAgICAgICB2ZXJ0aWNlcy5hcHBlbmQocHRzWzBdLmZZKTsKKyAgICAgICAgICAgIHZlcnRp
Y2VzLmFwcGVuZCgxLjBmKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNrUGF0
aDo6a0xpbmVfVmVyYjoKKyAgICAgICAgICAgIHZlcnRpY2VzLmFwcGVuZChwdHNbMV0uZlgpOwor
ICAgICAgICAgICAgdmVydGljZXMuYXBwZW5kKHB0c1sxXS5mWSk7CisgICAgICAgICAgICB2ZXJ0
aWNlcy5hcHBlbmQoMS4wZik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTa1Bh
dGg6OmtRdWFkX1ZlcmI6CisgICAgICAgICAgICBpbnRlcnBvbGF0ZVF1YWRyYXRpYygmdmVydGlj
ZXMsIHB0c1swXSwgcHRzWzFdLCBwdHNbMl0pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgU2tQYXRoOjprQ3ViaWNfVmVyYjoKKyAgICAgICAgICAgIGludGVycG9sYXRlQ3ViaWMo
JnZlcnRpY2VzLCBwdHNbMF0sIHB0c1sxXSwgcHRzWzJdLCBwdHNbM10pOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgU2tQYXRoOjprQ2xvc2VfVmVyYjoKKyAgICAgICAgICAgIGNv
bnRvdXJzLmFwcGVuZCh2ZXJ0aWNlcy5zaXplKCkgLyAzKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFNrUGF0aDo6a0RvbmVfVmVyYjoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorI2Vsc2UKKyAgICBBU1NFUlQoISJQYXRoIGV4dHJhY3Rpb24gbm90IGlt
cGxlbWVudGVkIG9uIHRoaXMgcGxhdGZvcm0uIik7CisjZW5kaWYKKworICAgIEdMVXRlc3NlbGF0
b3IqIHRlc3MgPSBpbnRlcm5hbF9nbHVOZXdUZXNzKCk7CisgICAgaW50ZXJuYWxfZ2x1VGVzc1By
b3BlcnR5KHRlc3MsIEdMVV9URVNTX1dJTkRJTkdfUlVMRSwgR0xVX1RFU1NfV0lORElOR19OT05a
RVJPKTsKKyAgICBpbnRlcm5hbF9nbHVUZXNzQ2FsbGJhY2sodGVzcywgR0xVX1RFU1NfQkVHSU5f
REFUQSwgKFRFU1NDQikgJmJlZ2luRGF0YSk7CisgICAgaW50ZXJuYWxfZ2x1VGVzc0NhbGxiYWNr
KHRlc3MsIEdMVV9URVNTX1ZFUlRFWF9EQVRBLCAoVEVTU0NCKSAmdmVydGV4RGF0YSk7CisgICAg
aW50ZXJuYWxfZ2x1VGVzc0NhbGxiYWNrKHRlc3MsIEdMVV9URVNTX0VORF9EQVRBLCAoVEVTU0NC
KSAmZW5kRGF0YSk7CisgICAgaW50ZXJuYWxfZ2x1VGVzc0NhbGxiYWNrKHRlc3MsIEdMVV9URVNT
X0VER0VfRkxBR19EQVRBLCAoVEVTU0NCKSAmZWRnZUZsYWdEYXRhKTsKKyAgICBpbnRlcm5hbF9n
bHVUZXNzQ2FsbGJhY2sodGVzcywgR0xVX1RFU1NfQ09NQklORV9EQVRBLCAoVEVTU0NCKSAmY29t
YmluZURhdGEpOworICAgIFdURjo6VmVjdG9yPHNob3J0PiBpbmRpY2VzOworICAgIFBvbHlnb25E
YXRhIGRhdGEoJnZlcnRpY2VzLCAmaW5kaWNlcyk7CisgICAgaW50ZXJuYWxfZ2x1VGVzc0JlZ2lu
UG9seWdvbih0ZXNzLCAmZGF0YSk7CisgICAgV1RGOjpWZWN0b3I8c2l6ZV90Pjo6Y29uc3RfaXRl
cmF0b3IgY29udG91cjsKKyAgICBzaXplX3QgaSA9IDA7CisgICAgZm9yIChjb250b3VyID0gY29u
dG91cnMuYmVnaW4oKTsgY29udG91ciAhPSBjb250b3Vycy5lbmQoKTsgKytjb250b3VyKSB7Cisg
ICAgICAgIGludGVybmFsX2dsdVRlc3NCZWdpbkNvbnRvdXIodGVzcyk7CisgICAgICAgIGZvciAo
OyBpIDwgKmNvbnRvdXI7ICsraSkgeworICAgICAgICAgICAgZG91YmxlIGNbM107CisgICAgICAg
ICAgICBjWzBdID0gdmVydGljZXNbaSAqIDNdOworICAgICAgICAgICAgY1sxXSA9IHZlcnRpY2Vz
W2kgKiAzICsgMV07CisgICAgICAgICAgICBjWzJdID0gMS4wZjsKKyAgICAgICAgICAgIGludGVy
bmFsX2dsdVRlc3NWZXJ0ZXgodGVzcywgYywgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaSkpOwor
ICAgICAgICB9CisgICAgICAgIGludGVybmFsX2dsdVRlc3NFbmRDb250b3VyKHRlc3MpOworICAg
IH0KKyAgICBpbnRlcm5hbF9nbHVUZXNzRW5kUG9seWdvbih0ZXNzKTsKKyAgICBpbnRlcm5hbF9n
bHVEZWxldGVUZXNzKHRlc3MpOworCisgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgp
LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsICp2ZXJ0ZXhCdWZm
ZXIpOworICAgIGNoZWNrR0xFcnJvcigiY3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgsIGJpbmRC
dWZmZXIiKTsKKyAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmJ1ZmZlckRhdGEo
R3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgdmVydGljZXMuc2l6ZSgpICogc2l6ZW9m
KGZsb2F0KSwgdmVydGljZXMuZGF0YSgpLCBHcmFwaGljc0NvbnRleHQzRDo6U1RSRUFNX0RSQVcp
OworICAgIGNoZWNrR0xFcnJvcigiY3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgsIGJ1ZmZlckRh
dGEiKTsKKworICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+YmluZEJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIsICppbmRleEJ1ZmZlcik7Cisg
ICAgY2hlY2tHTEVycm9yKCJjcmVhdGVWZXJ0ZXhCdWZmZXJGcm9tUGF0aCwgYmluZEJ1ZmZlciIp
OworICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+YnVmZmVyRGF0YShHcmFwaGlj
c0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIsIGluZGljZXMuc2l6ZSgpICogc2l6ZW9m
KHNob3J0KSwgaW5kaWNlcy5kYXRhKCksIEdyYXBoaWNzQ29udGV4dDNEOjpTVFJFQU1fRFJBVyk7
CisgICAgY2hlY2tHTEVycm9yKCJjcmVhdGVWZXJ0ZXhCdWZmZXJGcm9tUGF0aCwgYnVmZmVyRGF0
YSIpOworICAgICpjb3VudCA9IGluZGljZXMuc2l6ZSgpOworfQorCit2b2lkIEdMRVMyQ2FudmFz
OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoLCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAg
aW50IGNvdW50OworICAgIHVuc2lnbmVkIHZlcnRleEJ1ZmZlciwgaW5kZXhCdWZmZXI7CisgICAg
Y3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgocGF0aCwgJmNvdW50LCAmdmVydGV4QnVmZmVyLCAm
aW5kZXhCdWZmZXIpOworICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+YmluZEJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCB2ZXJ0ZXhCdWZmZXIpOworICAg
IGNoZWNrR0xFcnJvcigiYmluZEJ1ZmZlciIpOworICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250
ZXh0M0QoKS0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZG
RVIsIGluZGV4QnVmZmVyKTsKKyAgICBjaGVja0dMRXJyb3IoImJpbmRCdWZmZXIiKTsKKworICAg
IEFmZmluZVRyYW5zZm9ybSBtYXRyaXgobV9mbGlwTWF0cml4KTsKKyAgICBtYXRyaXgubXVsdExl
ZnQobV9zdGF0ZS0+bV9jdG0pOworCisgICAgbV9jb250ZXh0LT51c2VGaWxsU29saWRQcm9ncmFt
KG1hdHJpeCwgY29sb3IpOworICAgIGNoZWNrR0xFcnJvcigidXNlRmlsbFNvbGlkUHJvZ3JhbSIp
OworCisgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5kcmF3RWxlbWVudHMoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgY291bnQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9TSE9SVCwgMCk7CisgICAgY2hlY2tHTEVycm9yKCJkcmF3QXJyYXlzIik7CisKKyAgICBt
X2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZUJ1ZmZlcih2ZXJ0ZXhCdWZmZXIp
OworICAgIGNoZWNrR0xFcnJvcigiZGVsZXRlQnVmZmVyIik7CisKKyAgICBtX2NvbnRleHQtPmdy
YXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZUJ1ZmZlcihpbmRleEJ1ZmZlcik7CisgICAgY2hlY2tH
TEVycm9yKCJkZWxldGVCdWZmZXIiKTsKK30KKwordm9pZCBHTEVTMkNhbnZhczo6YmVnaW5TdGVu
Y2lsRHJhdygpCit7CisgICAgLy8gVHVybiBvbiBzdGVuY2lsIHRlc3QuCisgICAgbV9jb250ZXh0
LT5lbmFibGVTdGVuY2lsKHRydWUpOworICAgIGNoZWNrR0xFcnJvcigiZW5hYmxlIFNURU5DSUxf
VEVTVCIpOworCisgICAgLy8gU3RlbmNpbCB0ZXN0IG5ldmVyIHBhc3Nlcywgc28gY29sb3JidWZm
ZXIgaXMgbm90IGRyYXduLgorICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+c3Rl
bmNpbEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok5FVkVSLCAxLCAxKTsKKyAgICBjaGVja0dMRXJy
b3IoInN0ZW5jaWxGdW5jIik7CisKKyAgICAvLyBBbGwgd3JpdGVzIGluY3JlbWVtZW50IHRoZSBz
dGVuY2lsIGJ1ZmZlci4KKyAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPnN0ZW5j
aWxPcChHcmFwaGljc0NvbnRleHQzRDo6SU5DUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6SU5DUiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6SU5D
Uik7CisgICAgY2hlY2tHTEVycm9yKCJzdGVuY2lsT3AiKTsKK30KKwordm9pZCBHTEVTMkNhbnZh
czo6YXBwbHlDbGlwcGluZyhib29sIGVuYWJsZSkKK3sKKyAgICBtX2NvbnRleHQtPmVuYWJsZVN0
ZW5jaWwoZW5hYmxlKTsKKyAgICBpZiAoZW5hYmxlKSB7CisgICAgICAgIC8vIEVuYWJsZSBkcmF3
aW5nIG9ubHkgd2hlcmUgc3RlbmNpbCBpcyBub24temVyby4KKyAgICAgICAgbV9jb250ZXh0LT5n
cmFwaGljc0NvbnRleHQzRCgpLT5zdGVuY2lsRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6RVFVQUws
IG1fc3RhdGUtPm1fY2xpcHBpbmdQYXRocy5zaXplKCkgJSAyNTYsIDEpOworICAgICAgICBjaGVj
a0dMRXJyb3IoInN0ZW5jaWxGdW5jIik7CisgICAgICAgIC8vIEtlZXAgYWxsIHN0ZW5jaWwgdmFs
dWVzIHRoZSBzYW1lLgorICAgICAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPnN0
ZW5jaWxPcChHcmFwaGljc0NvbnRleHQzRDo6S0VFUCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OktFRVAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpLRUVQKTsKKyAgICAgICAgY2hlY2tHTEVycm9yKCJzdGVuY2lsT3AiKTsKKyAgICB9
Cit9CisKIHZvaWQgR0xFUzJDYW52YXM6OmNoZWNrR0xFcnJvcihjb25zdCBjaGFyKiBoZWFkZXIp
CiB7CiAjaWZuZGVmIE5ERUJVRwpAQCAtMjgzLDQgKzYyMCwzIEBAIHZvaWQgR0xFUzJDYW52YXM6
OmNoZWNrR0xFcnJvcihjb25zdCBjaGEKIH0KIAogfQotCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgJKHJl
dmlzaW9uIDc2MDM2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vR0xFUzJDYW52YXMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsNiArNDgsNyBAQCBjbGFzcyBD
b2xvcjsKIGNsYXNzIERyYXdpbmdCdWZmZXI7CiBjbGFzcyBGbG9hdFJlY3Q7CiBjbGFzcyBHcmFw
aGljc0NvbnRleHQzRDsKK2NsYXNzIFBhdGg7CiBjbGFzcyBTaGFyZWRHcmFwaGljc0NvbnRleHQz
RDsKIAogY2xhc3MgR0xFUzJDYW52YXMgOiBwdWJsaWMgTm9uY29weWFibGUgewpAQCAtNTUsNiAr
NTYsNyBAQCBwdWJsaWM6CiAgICAgR0xFUzJDYW52YXMoU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Qq
LCBEcmF3aW5nQnVmZmVyKiwgY29uc3QgSW50U2l6ZSYpOwogICAgIH5HTEVTMkNhbnZhcygpOwog
CisgICAgdm9pZCBmaWxsUGF0aChjb25zdCBQYXRoJik7CiAgICAgdm9pZCBmaWxsUmVjdChjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOwogICAgIHZvaWQgZmlsbFJl
Y3QoY29uc3QgRmxvYXRSZWN0Jik7CiAgICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0
Jik7CkBAIC02NSw2ICs2Nyw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmds
ZUluUmFkaWFucyk7CiAgICAgdm9pZCBzY2FsZShjb25zdCBGbG9hdFNpemUmKTsKICAgICB2b2lk
IGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKKyAgICB2b2lkIGNsaXBQYXRoKGNv
bnN0IFBhdGgmKTsKKyAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpOwogCiAgICAgdm9pZCBz
YXZlKCk7CiAgICAgdm9pZCByZXN0b3JlKCk7CkBAIC03Miw5ICs3NiwxMyBAQCBwdWJsaWM6CiAg
ICAgLy8gbm9uLXN0YW5kYXJkIGZ1bmN0aW9ucwogICAgIC8vIFRoZXNlIGFyZSBub3Qgc3RhbmRh
cmQgR3JhcGhpY3NDb250ZXh0IGZ1bmN0aW9ucywgYW5kIHNob3VsZCBiZSBwdXNoZWQKICAgICAv
LyBkb3duIGludG8gYSBQbGF0Zm9ybUNvbnRleHRHTEVTMiBhdCBzb21lIHBvaW50LgorCisgICAg
Ly8gVGhpcyB2ZXJzaW9uIGlzIGNhbGxlZCBieSB0aGUgY2FudmFzLT5jYW52YXMgZHJhd3MuCiAg
ICAgdm9pZCBkcmF3VGV4dHVyZWRSZWN0KHVuc2lnbmVkIHRleHR1cmUsIGNvbnN0IEludFNpemUm
IHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwotICAgIHZvaWQgZHJhd1Rl
eHR1cmVkUmVjdChUZXh0dXJlKiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGZsb2F0IGFscGhhLCBDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7CisgICAgLy8gVGhpcyB2ZXJzaW9uIGlzIGNhbGxl
ZCBieSBCaXRtYXBJbWFnZTo6ZHJhdygpLgogICAgIHZvaWQgZHJhd1RleHR1cmVkUmVjdChUZXh0
dXJlKiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3Qs
IENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICAvLyBUaGlzIHZlcnNpb24gaXMg
Y2FsbGVkIGJ5IHRoZSBhYm92ZSwgYW5kIGJ5IHRoZSBzb2Z0d2FyZS0+aGFyZHdhcmUgdXBsb2Fk
cy4KKyAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSosIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
LCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGJvb2wgY2xpcCk7
CiAgICAgVGV4dHVyZSogY3JlYXRlVGV4dHVyZShOYXRpdmVJbWFnZVB0ciwgVGV4dHVyZTo6Rm9y
bWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogICAgIFRleHR1cmUqIGdldFRleHR1cmUoTmF0
aXZlSW1hZ2VQdHIpOwogCkBAIC04OCw2ICs5NiwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgZHJh
d1RleHR1cmVkUmVjdFRpbGUoVGV4dHVyZSogdGV4dHVyZSwgaW50IHRpbGUsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mLCBmbG9hdCBhbHBoYSk7CiAgICAgdm9pZCBkcmF3UXVhZChjb25zdCBJbnRTaXplJiB0
ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRz
dFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGZsb2F0IGFscGhhKTsKICAgICB2b2lkIGFw
cGx5Q29tcG9zaXRlT3BlcmF0b3IoQ29tcG9zaXRlT3BlcmF0b3IpOworICAgIHZvaWQgY3JlYXRl
VmVydGV4QnVmZmVyRnJvbVBhdGgoY29uc3QgUGF0aCYsIGludCogY291bnQsIHVuc2lnbmVkKiB2
ZXJ0ZXhCdWZmZXIsIHVuc2lnbmVkKiBpbmRleEJ1ZmZlcik7CisgICAgdm9pZCBmaWxsUGF0aChj
b25zdCBQYXRoJiwgY29uc3QgQ29sb3ImKTsKKyAgICB2b2lkIGJlZ2luU3RlbmNpbERyYXcoKTsK
KyAgICB2b2lkIGFwcGx5Q2xpcHBpbmcoYm9vbCBlbmFibGUpOwogICAgIHZvaWQgY2hlY2tHTEVy
cm9yKGNvbnN0IGNoYXIqIGhlYWRlcik7CiAKICAgICBJbnRTaXplIG1fc2l6ZTsKQEAgLTk2LDcg
KzEwOCw4IEBAIHByaXZhdGU6CiAgICAgRHJhd2luZ0J1ZmZlciogbV9kcmF3aW5nQnVmZmVyOwog
CiAgICAgc3RydWN0IFN0YXRlOwotICAgIFdURjo6VmVjdG9yPFN0YXRlPiBtX3N0YXRlU3RhY2s7
CisgICAgdHlwZWRlZiBXVEY6OlZlY3RvcjxTdGF0ZT4gU3RhdGVWZWN0b3I7CisgICAgU3RhdGVW
ZWN0b3IgbV9zdGF0ZVN0YWNrOwogICAgIFN0YXRlKiBtX3N0YXRlOwogICAgIEFmZmluZVRyYW5z
Zm9ybSBtX2ZsaXBNYXRyaXg7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmNwcAkocmV2aXNpb24gNzYwMzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTY3LDE2ICs2NywyMSBAQCB2b2lkIERyYXdpbmdCdWZmZXI6
OmNsZWFyKCkKICAgICAgICAgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyID0gMDsKICAgICB9CiAg
ICAgCi0gICAgaWYgKG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpIHsKLSAgICAgICAg
bV9jb250ZXh0LT5kZWxldGVSZW5kZXJidWZmZXIobV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1
ZmZlcik7Ci0gICAgICAgIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIgPSAwOwotICAg
IH0KLSAgICAKICAgICBpZiAobV9kZXB0aFN0ZW5jaWxCdWZmZXIpIHsKICAgICAgICAgbV9jb250
ZXh0LT5kZWxldGVSZW5kZXJidWZmZXIobV9kZXB0aFN0ZW5jaWxCdWZmZXIpOwogICAgICAgICBt
X2RlcHRoU3RlbmNpbEJ1ZmZlciA9IDA7CiAgICAgfQogICAgIAorICAgIGlmIChtX2RlcHRoQnVm
ZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUmVuZGVyYnVmZmVyKG1fZGVwdGhCdWZm
ZXIpOworICAgICAgICBtX2RlcHRoQnVmZmVyID0gMDsKKyAgICB9CisgICAgCisgICAgaWYgKG1f
c3RlbmNpbEJ1ZmZlcikgeworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlciht
X3N0ZW5jaWxCdWZmZXIpOworICAgICAgICBtX3N0ZW5jaWxCdWZmZXIgPSAwOworICAgIH0KKyAg
ICAKICAgICBpZiAobV9tdWx0aXNhbXBsZUZCTykgewogICAgICAgICBtX2NvbnRleHQtPmJpbmRG
cmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVG
Qk8pOwogICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVyKG1fbXVsdGlzYW1wbGVG
Qk8pOwpAQCAtOTIsMjIgKzk3LDUyIEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Y2xlYXIoKQogCiB2
b2lkIERyYXdpbmdCdWZmZXI6OmNyZWF0ZVNlY29uZGFyeUJ1ZmZlcnMoKQogewotICAgIGNvbnN0
IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzJiBhdHRyaWJ1dGVzID0gbV9jb250ZXh0LT5n
ZXRDb250ZXh0QXR0cmlidXRlcygpOwotCi0gICAgLy8gQ3JlYXRlIHRoZSBzdGVuY2lsIGFuZCBk
ZXB0aCBidWZmZXIgaWYgbmVlZGVkCi0gICAgaWYgKCFtdWx0aXNhbXBsZSgpICYmIChhdHRyaWJ1
dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkpCi0gICAgICAgIG1fZGVwdGhTdGVuY2ls
QnVmZmVyID0gbV9jb250ZXh0LT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKLQogICAgIC8vIGNyZWF0
ZSBhIG11bHRpc2FtcGxlIEZCTwogICAgIGlmIChtdWx0aXNhbXBsZSgpKSB7CiAgICAgICAgIG1f
bXVsdGlzYW1wbGVGQk8gPSBtX2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7CiAgICAgICAg
IG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgbV9tdWx0aXNhbXBsZUZCTyk7CiAgICAgICAgIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlciA9
IG1fY29udGV4dC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0gICAgICAgIGlmIChhdHRyaWJ1dGVz
LnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgIG1fbXVsdGlzYW1wbGVE
ZXB0aFN0ZW5jaWxCdWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwogICAg
IH0KIH0KIAordm9pZCBEcmF3aW5nQnVmZmVyOjpyZXNpemVEZXB0aFN0ZW5jaWwoaW50IHNhbXBs
ZUNvdW50KQoreworICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzJiBhdHRy
aWJ1dGVzID0gbV9jb250ZXh0LT5nZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIGlmIChhdHRy
aWJ1dGVzLmRlcHRoICYmIGF0dHJpYnV0ZXMuc3RlbmNpbCAmJiBtX3BhY2tlZERlcHRoU3RlbmNp
bEV4dGVuc2lvblN1cHBvcnRlZCkgeworICAgICAgICBpZiAoIW1fZGVwdGhTdGVuY2lsQnVmZmVy
KQorICAgICAgICAgICAgbV9kZXB0aFN0ZW5jaWxCdWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVJl
bmRlcmJ1ZmZlcigpOworICAgICAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAg
ICBpZiAobXVsdGlzYW1wbGUoKSkKKyAgICAgICAgICAgIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR3JhcGhpY3NDb250ZXh0M0Q6OlJF
TkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIEV4dGVuc2lvbnMzRDo6REVQVEgyNF9TVEVOQ0lMOCwg
bV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSQlVGRkVSLCBFeHRlbnNpb25zM0Q6OkRFUFRIMjRfU1RFTkNJTDgsIG1fc2l6ZS53aWR0aCgp
LCBtX3NpemUuaGVpZ2h0KCkpOworICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9k
ZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyUmVuZGVy
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVw
dGhTdGVuY2lsQnVmZmVyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoYXR0cmlidXRlcy5k
ZXB0aCkgeworICAgICAgICAgICAgaWYgKCFtX2RlcHRoQnVmZmVyKQorICAgICAgICAgICAgICAg
IG1fZGVwdGhCdWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworICAgICAg
ICAgICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVIsIG1fZGVwdGhCdWZmZXIpOworICAgICAgICAgICAgaWYgKG11bHRpc2FtcGxlKCkp
CisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJlbmRlcmJ1ZmZl
clN0b3JhZ2VNdWx0aXNhbXBsZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBzYW1w
bGVDb3VudCwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2LCBtX3NpemUud2lk
dGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVOVDE2LCBtX3NpemUud2lk
dGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZm
ZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0Nv
bnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZF
UiwgbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3Rl
bmNpbCkgeworICAgICAgICAgICAgaWYgKCFtX3N0ZW5jaWxCdWZmZXIpCisgICAgICAgICAgICAg
ICAgbV9zdGVuY2lsQnVmZmVyID0gbV9jb250ZXh0LT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAg
ICAgICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOworICAgICAgICAgICAgaWYgKG11bHRpc2Ft
cGxlKCkpCisgICAgICAgICAgICAgICAgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJlbmRl
cmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
LCBzYW1wbGVDb3VudCwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4LCBtX3NpemUu
d2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIGVsc2UgCisgICAgICAgICAg
ICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0lOREVYOCwgbV9zaXplLndp
ZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmZyYW1lYnVm
ZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUiwgbV9zdGVuY2lsQnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX2NvbnRleHQt
PmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7Cit9
CisKIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYgbmV3U2l6ZSkKIHsK
ICAgICBpZiAobV9zaXplID09IG5ld1NpemUpCkBAIC0xMjAsNyArMTU1LDcgQEAgdm9pZCBEcmF3
aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRTaXplJgogICAgIG1fY29udGV4dC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7CiAgICAgCiAgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0
ZXMmIGF0dHJpYnV0ZXMgPSBtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7Ci0gICAg
dW5zaWduZWQgbG9uZyBpbnRlcm5hbENvbG9yRm9ybWF0LCBjb2xvckZvcm1hdCwgaW50ZXJuYWxE
ZXB0aFN0ZW5jaWxGb3JtYXQgPSAwOworICAgIHVuc2lnbmVkIGxvbmcgaW50ZXJuYWxDb2xvckZv
cm1hdCwgY29sb3JGb3JtYXQ7CiAgICAgaWYgKGF0dHJpYnV0ZXMuYWxwaGEpIHsKICAgICAgICAg
aW50ZXJuYWxDb2xvckZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwogICAgICAgICBj
b2xvckZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBOwpAQCAtMTI4LDE3ICsxNjMsNyBA
QCB2b2lkIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUmCiAgICAgICAgIGludGVy
bmFsQ29sb3JGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6UkdCOwogICAgICAgICBjb2xvckZv
cm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7CiAgICAgfQotICAgIGlmIChhdHRyaWJ1dGVz
LnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkgewotICAgICAgICAvLyBXZSBkb24ndCBhbGxv
dyB0aGUgbG9naWMgd2hlcmUgc3RlbmNpbCBpcyByZXF1aXJlZCBhbmQgZGVwdGggaXMgbm90Lgot
ICAgICAgICAvLyBTZWUgR3JhcGhpY3NDb250ZXh0M0QgY29uc3RydWN0b3IuCi0KLSAgICAgICAg
Ly8gRklYTUU6ICBJZiBwYWNrZWQgZGVwdGgvc3RlbmNpbCBpcyBub3Qgc3VwcG9ydGVkLCB3ZSBz
aG91bGQKLSAgICAgICAgLy8gY3JlYXRlIHNlcGFyYXRlIHJlbmRlcmJ1ZmZlcnMgZm9yIGRlcHRo
IGFuZCBzdGVuY2lsLgotICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsICYmIGF0dHJpYnV0
ZXMuZGVwdGggJiYgbV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCi0gICAg
ICAgICAgICBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IEV4dGVuc2lvbnMzRDo6REVQVEgy
NF9TVEVOQ0lMODsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgaW50ZXJuYWxEZXB0aFN0ZW5j
aWxGb3JtYXQgPSBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTY7Ci0gICAgfQor
CiAKICAgICAvLyByZXNpemUgbXVsdGlzYW1wbGUgRkJPCiAgICAgaWYgKG11bHRpc2FtcGxlKCkp
IHsKQEAgLTE1MiwxNSArMTc3LDcgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpyZXNldChjb25zdCBJ
bnRTaXplJgogICAgICAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsKICAgICAgICAg
bV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBs
ZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgaW50ZXJuYWxD
b2xvckZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CiAgICAgICAgIG1f
Y29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAg
IGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0cmlidXRlcy5kZXB0aCkgewotICAgICAgICAg
ICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVIsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICAgICAgbV9j
b250ZXh0LT5nZXRFeHRlbnNpb25zKCktPnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgaW50ZXJuYWxEZXB0
aFN0ZW5jaWxGb3JtYXQsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotICAgICAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQt
PmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwg
R3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAg
ICAgICBpZiAoYXR0cmlidXRlcy5kZXB0aCkKLSAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmZy
YW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5E
RVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgICAgICB9Ci0g
ICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVO
REVSQlVGRkVSLCAwKTsKKyAgICAgICAgcmVzaXplRGVwdGhTdGVuY2lsKHNhbXBsZUNvdW50KTsK
ICAgICAgICAgaWYgKG1fY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9D
T01QTEVURSkgewogICAgICAgICAgICAgLy8gQ2xlYW51cAogICAgICAgICAgICAgY2xlYXIoKTsK
QEAgLTE3NSwxNSArMTkyLDcgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRT
aXplJgogICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRFJlc291cmNlU2FmZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxDb2xvckZvcm1hdCwgbV9zaXplLndpZHRoKCks
IG1fc2l6ZS5oZWlnaHQoKSwgMCwgY29sb3JGb3JtYXQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJ
R05FRF9CWVRFKTsKICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1F
TlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9jb2xvckJ1ZmZlciwgMCk7CiAg
ICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
MCk7Ci0gICAgaWYgKCFtdWx0aXNhbXBsZSgpICYmIChhdHRyaWJ1dGVzLnN0ZW5jaWwgfHwgYXR0
cmlidXRlcy5kZXB0aCkpIHsKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAg
ICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVIsIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0LCBtX3NpemUud2lkdGgoKSwg
bV9zaXplLmhlaWdodCgpKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCkKLSAgICAg
ICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0g
ICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAgICAgbV9jb250ZXh0LT5mcmFt
ZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAgICAgIG1fY29udGV4dC0+YmluZFJl
bmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsKLSAgICB9Cisg
ICAgcmVzaXplRGVwdGhTdGVuY2lsKDApOwogICAgIGlmIChtX2NvbnRleHQtPmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0Nv
bnRleHQzRDo6RlJBTUVCVUZGRVJfQ09NUExFVEUpIHsKICAgICAgICAgLy8gQ2xlYW51cAogICAg
ICAgICBjbGVhcigpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0RyYXdpbmdCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCShyZXZpc2lvbiA3NjAzNikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTY3LDYgKzY3LDggQEAgcHVibGljOgogICAgIC8vIENyZWF0ZSB0aGUgZGVwdGgvc3Rl
bmNpbCBhbmQgbXVsdGlzYW1wbGUgYnVmZmVycywgaWYgbmVlZGVkLgogICAgIHZvaWQgY3JlYXRl
U2Vjb25kYXJ5QnVmZmVycygpOwogICAgIAorICAgIHZvaWQgcmVzaXplRGVwdGhTdGVuY2lsKGlu
dCBzYW1wbGVDb3VudCk7CisKICAgICAvLyBDb3BpZXMgdGhlIG11bHRpc2FtcGxlIGNvbG9yIGJ1
ZmZlciB0byB0aGUgbm9ybWFsIGNvbG9yIGJ1ZmZlciBhbmQgbGVhdmVzIG1fZmJvIGJvdW5kCiAg
ICAgdm9pZCBjb21taXQobG9uZyB4ID0gMCwgbG9uZyB5ID0gMCwgbG9uZyB3aWR0aCA9IC0xLCBs
b25nIGhlaWdodCA9IC0xKTsKICAgICAKQEAgLTEwNiwxMyArMTA4LDE4IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBtX3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZDsKICAgICBQbGF0
Zm9ybTNET2JqZWN0IG1fZmJvOwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9jb2xvckJ1ZmZlcjsK
KworICAgIC8vIFRoaXMgaXMgdXNlZCB3aGVuIHdlIGhhdmUgT0VTX3BhY2tlZF9kZXB0aF9zdGVu
Y2lsLgogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9kZXB0aFN0ZW5jaWxCdWZmZXI7CiAKKyAgICAv
LyBUaGVzZSBhcmUgdXNlZCB3aGVuIHdlIGRvbid0LgorICAgIFBsYXRmb3JtM0RPYmplY3QgbV9k
ZXB0aEJ1ZmZlcjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fc3RlbmNpbEJ1ZmZlcjsKKwogICAg
IC8vIEZvciBtdWx0aXNhbXBsaW5nCiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX211bHRpc2FtcGxl
RkJPOwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyOwotICAg
IFBsYXRmb3JtM0RPYmplY3QgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcjsKLSAgICAK
KwogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQogICAgIE93blB0cjxXaWxsUHVibGlzaENhbGxiYWNr
PiBtX2NhbGxiYWNrOwogICAgIE93blB0cjxEcmF3aW5nQnVmZmVySW50ZXJuYWw+IG1faW50ZXJu
YWw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDc2MDM2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNz
Q29udGV4dDNELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiBQYXNzUmVmUHRyPFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEPiBTaGFyZWRHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlKEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cpCiB7CiAgICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cjsKKyAgICBhdHRyLmRlcHRoID0gZmFsc2U7
CisgICAgYXR0ci5zdGVuY2lsID0gdHJ1ZTsKKyAgICBhdHRyLmFudGlhbGlhcyA9IGZhbHNlOwog
ICAgIGF0dHIuY2FuUmVjb3ZlckZyb21Db250ZXh0TG9zcyA9IGZhbHNlOyAvLyBDYW52YXMgY29u
dGV4dHMgY2FuIG5vdCBoYW5kbGUgbG9zdCBjb250ZXh0cy4KICAgICBSZWZQdHI8R3JhcGhpY3ND
b250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHIsIGhvc3RX
aW5kb3cpOwogICAgIGlmICghY29udGV4dCkKQEAgLTI5Myw2ICsyOTYsMTQgQEAgdm9pZCBTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRDo6YXBwbHlDb21wbwogICAgIH0KIH0KIAordm9pZCBTaGFyZWRH
cmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlU3RlbmNpbChib29sIGVuYWJsZSkKK3sKKyAgICBpZiAo
ZW5hYmxlKQorICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RF
TkNJTF9URVNUKTsKKyAgICBlbHNlCisgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKTsKK30KKwogdm9pZCBTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRDo6dXNlUXVhZFZlcnRpY2VzKCkKIHsKICAgICBpZiAoIW1fcXVhZFZlcnRpY2VzKSB7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3ND
b250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gNzYwMzYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Qu
aAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsNyBAQCBwdWJsaWM6CiAKICAgICAvLyBTaGFy
ZWQgbG9naWMgZm9yIGNhbnZhcyAyZAogICAgIHZvaWQgYXBwbHlDb21wb3NpdGVPcGVyYXRvcihD
b21wb3NpdGVPcGVyYXRvcik7CisgICAgdm9pZCBlbmFibGVTdGVuY2lsKGJvb2wgZW5hYmxlKTsK
ICAgICB2b2lkIHVzZVF1YWRWZXJ0aWNlcygpOwogCiAgICAgdm9pZCB1c2VGaWxsU29saWRQcm9n
cmFtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IENvbG9yJik7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvbWFjL0RyYXdpbmdCdWZmZXJNYWMubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3
aW5nQnVmZmVyTWFjLm1tCShyZXZpc2lvbiA3NjAzNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZlck1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtNDEsMTUgKzQxLDE2IEBAIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3ND
b24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBtdWx0aXNhbXBsZUV4dGVuc2lv
blN1cHBvcnRlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwYWNrZWREZXB0
aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAg
ICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9zaXplKC0xLCAtMSkKICAgICAsIG1fbXVsdGlzYW1w
bGVFeHRlbnNpb25TdXBwb3J0ZWQobXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAg
LCBtX3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZChwYWNrZWREZXB0aFN0ZW5j
aWxFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAgLCBtX2Zibyhjb250ZXh0LT5jcmVhdGVGcmFtZWJ1
ZmZlcigpKQogICAgICwgbV9jb2xvckJ1ZmZlcigwKQogICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZm
ZXIoMCkKKyAgICAsIG1fZGVwdGhCdWZmZXIoMCkKKyAgICAsIG1fc3RlbmNpbEJ1ZmZlcigwKQog
ICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVy
KDApCi0gICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCiB7CiAgICAgQVNT
RVJUKG1fZmJvKTsKICAgICBpZiAoIW1fZmJvKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tp
YS5jcHAJKHJldmlzaW9uIDc2MDM2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzg2LDYg
KzM4Niw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKGNvbnN0IFAKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAocGxhdGZv
cm1Db250ZXh0KCktPnVzZUdQVSgpKQorICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2Fu
dmFzKCktPmNsaXBQYXRoKHBhdGgpOworCiAgICAgY29uc3QgU2tQYXRoJiBwID0gKnBhdGgucGxh
dGZvcm1QYXRoKCk7CiAgICAgaWYgKCFpc1BhdGhTa2lhU2FmZShnZXRDVE0oKSwgcCkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTQxMCw2ICs0MTMsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xp
cE91dChjb25zdCBQYXRoCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCisgICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSkKKyAgICAgICAgcGxh
dGZvcm1Db250ZXh0KCktPmdwdUNhbnZhcygpLT5jbGlwT3V0KHApOworCiAgICAgY29uc3QgU2tQ
YXRoJiBwYXRoID0gKnAucGxhdGZvcm1QYXRoKCk7CiAgICAgaWYgKCFpc1BhdGhTa2lhU2FmZShn
ZXRDVE0oKSwgcGF0aCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQyMiw2ICs0MjgsOSBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0CiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51
c2VHUFUoKSkKKyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmdwdUNhbnZhcygpLT5jbGlwUGF0
aChwYXRoVG9DbGlwKTsKKwogICAgIC8vIEZJWE1FOiBCZSBzbWFydGVyIGFib3V0IHRoaXMuCiAg
ICAgYmVnaW5QYXRoKCk7CiAgICAgYWRkUGF0aChwYXRoVG9DbGlwKTsKQEAgLTczMyw2ICs3NDIs
MTIgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdAogICAgIGJlZ2lu
UGF0aCgpOwogICAgIGFkZFBhdGgocGF0aFRvRmlsbCk7CiAKKyAgICBpZiAocGxhdGZvcm1Db250
ZXh0KCktPnVzZUdQVSgpICYmIHBsYXRmb3JtQ29udGV4dCgpLT5jYW5BY2NlbGVyYXRlKCkpIHsK
KyAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JIYXJkd2FyZURyYXcoKTsKKyAg
ICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmdwdUNhbnZhcygpLT5maWxsUGF0aChwYXRoVG9GaWxs
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIFNrUGF0aCBwYXRoID0gcGxhdGZvcm1D
b250ZXh0KCktPmN1cnJlbnRQYXRoSW5Mb2NhbENvb3JkaW5hdGVzKCk7CiAgICAgaWYgKCFpc1Bh
dGhTa2lhU2FmZShnZXRDVE0oKSwgcGF0aCkpCiAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZv
cm1Db250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDc2MDM2KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzAyLDggKzcwMiw3IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6YXBwbHlBbnRp
QWxpYXMKIGJvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6Y2FuQWNjZWxlcmF0ZSgpIGNvbnN0CiB7
CiAgICAgcmV0dXJuICFtX3N0YXRlLT5tX2ZpbGxTaGFkZXIgLy8gQ2FuJ3QgYWNjZWxlcmF0ZSB3
aXRoIGEgZmlsbCBncmFkaWVudCBvciBwYXR0ZXJuLgotICAgICAgICAmJiAhbV9zdGF0ZS0+bV9s
b29wZXIgLy8gQ2FuJ3QgYWNjZWxlcmF0ZSB3aXRoIGEgc2hhZG93LgotICAgICAgICAmJiAhbV9z
dGF0ZS0+bV9jYW52YXNDbGlwQXBwbGllZDsgLy8gQ2FuJ3QgYWNjZWxlcmF0ZSB3aXRoIGEgY2xp
cCB0byBwYXRoIGFwcGxpZWQuCisgICAgICAgICYmICFtX3N0YXRlLT5tX2xvb3BlcjsgLy8gQ2Fu
J3QgYWNjZWxlcmF0ZSB3aXRoIGEgc2hhZG93LgogfQogCiBib29sIFBsYXRmb3JtQ29udGV4dFNr
aWE6OmNhbnZhc0NsaXBBcHBsaWVkKCkgY29uc3QKQEAgLTg0OCw3ICs4NDcsNyBAQCB2b2lkIFBs
YXRmb3JtQ29udGV4dFNraWE6OnVwbG9hZFNvZnR3YXJlCiAKICAgICBtX3VwbG9hZFRleHR1cmUt
PnVwZGF0ZVN1YlJlY3QoYml0bWFwLmdldFBpeGVscygpLCBtX3NvZnR3YXJlRGlydHlSZWN0KTsK
ICAgICBBZmZpbmVUcmFuc2Zvcm0gaWRlbnRpdHk7Ci0gICAgZ3B1Q2FudmFzKCktPmRyYXdUZXh0
dXJlZFJlY3QobV91cGxvYWRUZXh0dXJlLmdldCgpLCBtX3NvZnR3YXJlRGlydHlSZWN0LCBtX3Nv
ZnR3YXJlRGlydHlSZWN0LCBpZGVudGl0eSwgMS4wLCBDb2xvclNwYWNlRGV2aWNlUkdCLCBvcCk7
CisgICAgZ3B1Q2FudmFzKCktPmRyYXdUZXh0dXJlZFJlY3QobV91cGxvYWRUZXh0dXJlLmdldCgp
LCBtX3NvZnR3YXJlRGlydHlSZWN0LCBtX3NvZnR3YXJlRGlydHlSZWN0LCBpZGVudGl0eSwgMS4w
LCBDb2xvclNwYWNlRGV2aWNlUkdCLCBvcCwgZmFsc2UpOwogICAgIC8vIENsZWFyIG91dCB0aGUg
cmVnaW9uIG9mIHRoZSBzb2Z0d2FyZSBjYW52YXMgd2UganVzdCB1cGxvYWRlZC4KICAgICBtX2Nh
bnZhcy0+c2F2ZSgpOwogICAgIG1fY2FudmFzLT5yZXNldE1hdHJpeCgpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvUkVBRE1FLndlYmtpdAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9SRUFETUUud2Via2l0CShyZXZpc2lvbiA3NjAzNikK
KysrIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L1JFQURNRS53ZWJraXQJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDMgKzMxLDEyIEBAIFRoZSBmb2xsb3dpbmcgY2hhbmdlcyB3ZXJlIG1hZGUg
aW4gb3JkZXIKICAgICBvZiB0aGUgdW51c2VkIE5vcm1hbGl6ZSBmdW5jdGlvbi4KIAogICAtIElu
IHByaW9yaXR5cS1oZWFwLmMsIGFuICNpbmNsdWRlIG9mIDxsaW1pdHMuaD4gd2FzIGFkZGVkLgor
CisgIC0gSW4gc3dlZXAuYywgSXNXaW5kaW5nSW5zaWRlKCkgd2FzIGdpdmVuIGEgcmV0dXJuIHZh
bHVlIHRvIHNpbGVuY2UgYQorICAgIHdhcm5pbmctYXMtZXJyb3IgaW4gcmVsZWFzZSBidWlsZHMu
CisKKyAgLSBJbiBzd2VlcC5jLCBEb25lRWRnZURpY3QoKSdzIGZpeGVkRWRnZXMgd2FzIHdyYXBw
ZWQgaW4gI2luZGVmIE5ERUJVRywgdG8KKyAgICBzaWxlbmNlIGEgd2FybmluZy1hcy1lcnJvciBp
biByZWxlYXNlIGJ1aWxkcy4KKworICAtIEluIHByaW9yaXR5cS5jLCByZW5kZXIuYywgYW5kIG90
aGVyczogIHRoZSBjb25zdHJ1Y3QgImlmKDEpLi4uZWxzZSIgd2FzCisgIHJlcGxhY2VkIHdpdGgg
ImRvey4uLn13aGlsZSgxKSIgdG8gc2lsZW5jZSBhIHdhcm5pbmctYXMtZXJyb3IgaW4gTWFjIGJ1
aWxkcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2dsdW9zLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvZ2x1b3MuaAkocmV2aXNpb24g
NzYwMzYpCisrKyBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9nbHVvcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw0ICs0Miw3IEBAIHR5cGVkZWYgdW5zaWduZWQgaW50IEdMZW51bTsKIHR5
cGVkZWYgZmxvYXQgR0xmbG9hdDsKIHR5cGVkZWYgdm9pZCBHTHZvaWQ7CiAKKyN1bmRlZiBNSU4K
KyN1bmRlZiBNQVgKKwogI2VuZGlmICAvLyBHTFVPU19IXwpJbmRleDogU291cmNlL1dlYkNvcmUv
dGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9nZW9tLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9nZW9tLmMJKHJldmlzaW9uIDc2MDM2KQorKysgU291
cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9nZW9tLmMJKHdvcmtpbmcgY29weSkK
QEAgLTIwNSw3ICsyMDUsNyBAQCBwcmludGYoIioqKioqKioqKioqKioqKioqKioqKiVkXG4iLFJh
bmRvCiAKICNlbmRpZgogCi0jZGVmaW5lIFN3YXAoYSxiKQlpZiAoMSkgeyBHTFV2ZXJ0ZXggKnQg
PSBhOyBhID0gYjsgYiA9IHQ7IH0gZWxzZQorI2RlZmluZSBTd2FwKGEsYikJZG8geyBHTFV2ZXJ0
ZXggKnQgPSBhOyBhID0gYjsgYiA9IHQ7IH0gd2hpbGUoMCkKIAogdm9pZCBfX2dsX2VkZ2VJbnRl
cnNlY3QoIEdMVXZlcnRleCAqbzEsIEdMVXZlcnRleCAqZDEsCiAJCQkgR0xVdmVydGV4ICpvMiwg
R0xVdmVydGV4ICpkMiwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRl
c3MvcHJpb3JpdHlxLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9n
bHUvbGlidGVzcy9wcmlvcml0eXEuYwkocmV2aXNpb24gNzYwMzYpCisrKyBTb3VyY2UvV2ViQ29y
ZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5jCSh3b3JraW5nIGNvcHkpCkBAIC05
Miw3ICs5Miw3IEBAIHZvaWQgcHFEZWxldGVQcmlvcml0eVEoIFByaW9yaXR5USAqcHEgKQogCiAj
ZGVmaW5lIExUKHgseSkJCSghIExFUSh5LHgpKQogI2RlZmluZSBHVCh4LHkpCQkoISBMRVEoeCx5
KSkKLSNkZWZpbmUgU3dhcChhLGIpCWlmKDEpe1BRa2V5ICp0bXAgPSAqYTsgKmEgPSAqYjsgKmIg
PSB0bXA7fWVsc2UKKyNkZWZpbmUgU3dhcChhLGIpCWRve1BRa2V5ICp0bXAgPSAqYTsgKmEgPSAq
YjsgKmIgPSB0bXA7fXdoaWxlKDApCiAKIC8qIHJlYWxseSBfX2dsX3BxU29ydEluaXQgKi8KIGlu
dCBwcUluaXQoIFByaW9yaXR5USAqcHEgKQpJbmRleDogU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0
eS9nbHUvbGlidGVzcy9yZW5kZXIuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90aGly
ZHBhcnR5L2dsdS9saWJ0ZXNzL3JlbmRlci5jCShyZXZpc2lvbiA3NjAzNikKKysrIFNvdXJjZS9X
ZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcmVuZGVyLmMJKHdvcmtpbmcgY29weSkKQEAg
LTE1MCwxMSArMTUwLDExIEBAIHN0YXRpYyB2b2lkIFJlbmRlck1heGltdW1GYWNlR3JvdXAoIEdM
VXQKIAogI2RlZmluZSBBZGRUb1RyYWlsKGYsdCkJKChmKS0+dHJhaWwgPSAodCksICh0KSA9IChm
KSwgKGYpLT5tYXJrZWQgPSBUUlVFKQogCi0jZGVmaW5lIEZyZWVUcmFpbCh0KQlpZiggMSApIHsg
XAorI2RlZmluZSBGcmVlVHJhaWwodCkJZG8geyBcCiAJCQkgIHdoaWxlKCAodCkgIT0gTlVMTCAp
IHsgXAogCQkJICAgICh0KS0+bWFya2VkID0gRkFMU0U7IHQgPSAodCktPnRyYWlsOyBcCiAJCQkg
IH0gXAotCQkJfSBlbHNlIC8qIGFic29yYiB0cmFpbGluZyBzZW1pY29sb24gKi8KKwkJCX0gd2hp
bGUoMCkgLyogYWJzb3JiIHRyYWlsaW5nIHNlbWljb2xvbiAqLwogCiAKIApJbmRleDogU291cmNl
L1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9zd2VlcC5jCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvc3dlZXAuYwkocmV2aXNpb24gNzYw
MzYpCisrKyBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmMJKHdv
cmtpbmcgY29weSkKQEAgLTI1Myw2ICsyNTMsNyBAQCBzdGF0aWMgR0xib29sZWFuIElzV2luZGlu
Z0luc2lkZSggR0xVdGVzCiAgIC8qTElOVEVEKi8KICAgYXNzZXJ0KCBGQUxTRSApOwogICAvKk5P
VFJFQUNIRUQqLworICByZXR1cm4gMDsKIH0KIAogCkBAIC0xMTczLDcgKzExNzQsOSBAQCBzdGF0
aWMgdm9pZCBJbml0RWRnZURpY3QoIEdMVXRlc3NlbGF0b3IgCiBzdGF0aWMgdm9pZCBEb25lRWRn
ZURpY3QoIEdMVXRlc3NlbGF0b3IgKnRlc3MgKQogewogICBBY3RpdmVSZWdpb24gKnJlZzsKKyNp
Zm5kZWYgTkRFQlVHCiAgIGludCBmaXhlZEVkZ2VzID0gMDsKKyNlbmRpZgogCiAgIC8qIF9fR0xf
RElDVExJU1RLRVkgKi8gLyogX19HTF9ESUNUTElTVE1JTiAqLwogICB3aGlsZSggKHJlZyA9IChB
Y3RpdmVSZWdpb24gKilkaWN0S2V5KCBkaWN0TWluKCB0ZXNzLT5kaWN0ICkpKSAhPSBOVUxMICkg
ewpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L0NoYW5nZUxvZwkocmV2aXNpb24gNzYwMzYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxMSBAQAorMjAxMS0wMS0xOCAgU3RlcGhlbiBXaGl0ZSAg
PHNlbm9yYmxhbmNvQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgdHdvIHRvLWJlLXJlYmFzZWxpbmVkIHRlc3RzIGZvciB0
aGUgR1BVIHBhdGguCisKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS1ncHUvdGVzdF9leHBl
Y3RhdGlvbnMudHh0OgorCiAyMDExLTAxLTE4ICBKb2huIEtub3R0ZW5iZWx0ICA8amtub3R0ZW5A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEplcmVteSBPcmxvdy4KSW5kZXg6
IExheW91dFRlc3RzL3BsYXRmb3JtL2Nocm9taXVtLWdwdS90ZXN0X2V4cGVjdGF0aW9ucy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tZ3B1L3Rlc3RfZXhw
ZWN0YXRpb25zLnR4dAkocmV2aXNpb24gNzYwMzYpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9j
aHJvbWl1bS1ncHUvdGVzdF9leHBlY3RhdGlvbnMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0zODYs
MyArMzg2LDcgQEAgQlVHV0s1MTk4OSBXSU4gTElOVVggOiBmYXN0L2NhbnZhcy9jYW52YQogCiAv
LyBTdGFydGVkIGZhaWxpbmcgYWZ0ZXIgcjc1NjQ4IG9uIGV2ZXJ5dGhpbmcgZXhjZXB0IFNub3cg
TGVvcGFyZAogQlVHV0s1MjM0MSA6IGZhc3QvY2FudmFzL2NhbnZhcy1sYXJnZS1kaW1lbnNpb25z
Lmh0bWwgPSBURVhUCisKKy8vIFRoZXNlIHdpbGwgbmVlZCB0byByZWJhc2VsaW5lZCBhZnRlciB0
aGUgbmV3IHBhdGggZHJhd2luZyBsYW5kcy4KK0JVR19TRU5PUkJMQU5DTyBXSU4gTElOVVggOiBm
YXN0L2NhbnZhcy9jYW52YXMtY29tcG9zaXRlLmh0bWwgPSBJTUFHRQorQlVHX1NFTk9SQkxBTkNP
IFdJTiBMSU5VWCA6IGZhc3QvY2FudmFzL2NhbnZhcy10cmFuc2Zvcm0tc2tld2VkLmh0bWwgPSBJ
TUFHRQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79303</attachid>
            <date>2011-01-18 11:56:42 -0800</date>
            <delta_ts>2011-01-19 14:06:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-52627-20110118145641.patch</filename>
            <type>text/plain</type>
            <size>51772</size>
            <attacher name="Stephen White">senorblanco</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MDM2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTI3IEBACisyMDExLTAxLTE4ICBTdGVwaGVu
IFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCBhY2NlbGVyYXRlZCBwYXRoIGRy
YXdpbmcgYW5kIGNsaXBwaW5nIGZvciB0aGUgQ2FudmFzMkQgR1BVCisgICAgICAgIHBhdGguCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjYyNworICAg
ICAgICAKKyAgICAgICAgVGhpcyBpcyBkb25lIHdpdGggYSBzaW1wbGUgY3VydmUgaW50ZXJwb2xh
dG9yIGFuZCB0aGUgR0xVIHRlc3NlbGF0b3IsCisgICAgICAgIHdoaWNoIGlzIGdvb2QgZW5vdWdo
IGZvciBhIDMtNVggc3BlZWR1cCBvbgorICAgICAgICBodHRwOi8vaWUubWljcm9zb2Z0LmNvbS90
ZXN0ZHJpdmUvUGVyZm9ybWFuY2UvR2FsYWN0aWMvRGVmYXVsdC5odG1sLgorCisgICAgICAgIENv
dmVyZWQgYnkgY2FudmFzL3BoaWxpcC8yZC5wYXRoLmNsaXAuYmFzaWMuaHRtbCwgYW5kIG1hbnks
IG1hbnkgbW9yZS4KKyAgICAgICAgQWxsIHRlc3RzIGNhbnZhcy9waGlsaXAgYW5kIGZhc3QvY2Fu
dmFzIHBhdGhzIHBhc3Mgd2l0aCBubworICAgICAgICByZWdyZXNzaW9ucywgYWx0aG91Z2ggdHdv
IGhhdmUgbWlub3IgcGl4ZWwgZGlmZmVyZW5jZXMgd2hpY2ggcmVxdWlyZQorICAgICAgICByZWJh
c2VsaW5pbmcuCisKKyAgICAgICAgKiBXZWJDb3JlLmd5cC9XZWJDb3JlLmd5cDoKKyAgICAgICAg
QWRkIGludGVybmFsX2dsdSBpbmNsdWRlIHBhdGggdG8gY2hyb21pdW0gYnVpbGQuCisgICAgICAg
ICogV2ViQ29yZS5neXBpOgorICAgICAgICBBZGQgaW50ZXJuYWxfZ2x1IGZpbGVzIHRvIGNocm9t
aXVtIGJ1aWxkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlc2V0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cGxhdGZvcm1M
YXllcik6CisgICAgICAgIE1ha2UgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEIG1vcmUgcm9idXN0
IGFnYWluc3QgZmFpbHVyZSB0byBjcmVhdGUKKyAgICAgICAgYSBEcmF3aW5nQnVmZmVyLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpEcmF3aW5nQnVmZmVyKToKKyAg
ICAgICAgQXMgaW4gRHJhd2luZ0J1ZmZlck1hYy5jcHAsIGNhbGwgcmVzZXQoKSBmcm9tIHRoZSBj
b25zdHJ1Y3Rvci4KKyAgICAgICAgQWxzbyBpbml0aWFsaXplIHNpemUgdG8gKC0xLCAtMSksIHNv
IHJlc2V0KCkgZG9lc24ndCBlYXJseS1vdXQuCisgICAgICAgIEFkZCBpbml0aWFsaXplcnMgZm9y
IGRlcHRoQnVmZmVyIGFuZCBzdGVuY2lsQnVmZmVyLCBhbmQgcmVtb3ZlCisgICAgICAgIG11bHRp
c2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0dMRVMyQ2FudmFzLmNwcDoKKyAgICAgICAgUmVtb3ZlIHNvbWUgdW51c2VkICNpbmNs
dWRlcy4KKyAgICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpTdGF0ZTo6U3RhdGUpOgorICAg
ICAgICBBZGQgY2xpcHBpbmcgc3RhdGUsIGFuZCBpbXBsZW1lbnQgc2F2ZS9yZXN0b3JlIHZpYSB0
aGUgY29weSBjb25zdHJ1Y3Rvci4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yKik6CisgICAg
ICAgIChXZWJDb3JlOjpRdWFkcmF0aWM6OlF1YWRyYXRpYyk6CisgICAgICAgIChXZWJDb3JlOjpR
dWFkcmF0aWM6OmZyb21CZXppZXIpOgorICAgICAgICAoV2ViQ29yZTo6UXVhZHJhdGljOjpldmFs
dWF0ZSk6CisgICAgICAgIFF1YWRyYXRpYyBCZXppZXIgY3VydmUgY2xhc3MuCisgICAgICAgIChX
ZWJDb3JlOjpDdWJpYzo6Q3ViaWMpOgorICAgICAgICAoV2ViQ29yZTo6Q3ViaWM6OmZyb21CZXpp
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3ViaWM6OmV2YWx1YXRlKToKKyAgICAgICAgQ3ViaWMg
QmV6aWVyIGN1cnZlIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmNsZWFy
UmVjdCk6CisgICAgICAgIEFkZCBjbGlwcGluZyBzdXBwb3J0IHRvIGNsZWFyUmVjdCgpLgorICAg
ICAgICAoV2ViQ29yZTo6R0xFUzJDYW52YXM6OmZpbGxQYXRoKToKKyAgICAgICAgSW1wbGVtZW50
IGZpbGxQYXRoKCkuCisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6ZmlsbFJlY3QpOgor
ICAgICAgICBBZGQgY2xpcHBpbmcgc3VwcG9ydCB0byBmaWxsUmVjdCgpLgorICAgICAgICAoV2Vi
Q29yZTo6R0xFUzJDYW52YXM6OmNsaXBQYXRoKToKKyAgICAgICAgSW1wbGVtZW50IGNsaXBQYXRo
KCkuCisgICAgICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6Y2xpcE91dCk6CisgICAgICAgIFN0
dWIgb3V0IGNsaXBPdXQoKSAobm90IGNhbGxlZCBieSBDYW52YXMgMkQpLgorICAgICAgICAoV2Vi
Q29yZTo6R0xFUzJDYW52YXM6OnJlc3RvcmUpOgorICAgICAgICBXaGVuIHJlc3RvcmluZywgZHJh
dyBhbnkgcmVtYWluaW5nIGNsaXBwaW5nIHBhdGhzIHRvIHRoZSBzdGVuY2lsIGJ1ZmZlci4KKyAg
ICAgICAgKFdlYkNvcmU6OkdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KToKKyAgICAgICAg
QWRkIGNsaXBwaW5nIHN1cHBvcnQuCisgICAgICAgIChXZWJDb3JlOjppbnRlcnBvbGF0ZVF1YWRy
YXRpYyk6CisgICAgICAgIChXZWJDb3JlOjppbnRlcnBvbGF0ZUN1YmljKToKKyAgICAgICAgU2lt
cGxlIGN1cnZlIGludGVycG9sYXRpb24sIHVzaW5nIHRoZSBDdWJpYyBhbmQgUXVhZHJhdGljIGNs
YXNzZXMuCisgICAgICAgIChXZWJDb3JlOjpQb2x5Z29uRGF0YTo6UG9seWdvbkRhdGEpOgorICAg
ICAgICBBIHN0cnVjdCB0byBob2xkIHRoZSB0ZXNzZWxhdGlvbiBkYXRhIGZvciBjYWxsYmFja3Mu
CisgICAgICAgIChXZWJDb3JlOjpiZWdpbkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6ZWRnZUZs
YWdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnZlcnRleERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6ZW5kRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpjb21iaW5lRGF0YSk6CisgICAgICAgIGlu
dGVybmFsX2dsdSB0ZXNzZWxhdGlvbiBjYWxsYmFja3MuCisgICAgICAgIChXZWJDb3JlOjpHTEVT
MkNhbnZhczo6Y3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgpOgorICAgICAgICBCdWlsZCBhbiBp
bnRlcnBvbGF0ZWQsIHRlc3NlbGF0ZWQgdmVydGV4IGJ1ZmZlciBhbmQgZWxlbWVudCBhcnJheSBi
dWZmZXIgZnJvbSBhIGdpdmVuIHBhdGgsIHN1aXRhYmxlIGZvciBmaWxsaW5nLgorICAgICAgICAo
V2ViQ29yZTo6R0xFUzJDYW52YXM6OmJlZ2luU3RlbmNpbERyYXcpOgorICAgICAgICBFbmFibGUg
c3RlbmNpbGxpbmcsIGFuZCBkaXNhYmxlIGRyYXdzIHRvIHRoZSBjb2xvciBidWZmZXIuCisgICAg
ICAgIChXZWJDb3JlOjpHTEVTMkNhbnZhczo6YXBwbHlDbGlwcGluZyk6CisgICAgICAgIElmIGNs
aXBwaW5nIGlzIGVuYWJsZWQsIHNldCB0aGUgYXBwcm9wcmlhdGUgR0wgc3RhdGUuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJDYW52YXMuaDoKKyAgICAgICAgRG9j
dW1lbnQgdGhlIGZsYXZvdXJzIG9mIGRyYXdUZXh0dXJlZFJlY3QoKSBhIGJpdCwgc28gSSBkb24n
dCBnZXQgY29uZnVzZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdC
dWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6Y2xlYXIpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6Y3JlYXRlU2Vjb25kYXJ5QnVmZmVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpyZXNpemVEZXB0aFN0ZW5jaWwpOgorICAg
ICAgICAoV2ViQ29yZTo6RHJhd2luZ0J1ZmZlcjo6cmVzZXQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmg6CisgICAgICAgIFVuaWZ5IG1fbXVsdGlzYW1w
bGVEZXB0aFN0ZW5jaWxCdWZmZXIgd2l0aCBtX2RlcHRoU3RlbmNpbEJ1ZmZlci4gCisgICAgICAg
IEltcGxlbWVudCBzZXBhcmF0ZSBkZXB0aCBhbmQgc3RlbmNpbCBidWZmZXJzIGZvciB3aGVuCisg
ICAgICAgIE9FU19wYWNrZWRfZGVwdGhfc3RlbmNpbCBpcyBub3QgYXZhaWxhYmxlLiAgUmVmYWN0
b3IgY3JlYXRpb24gb2YKKyAgICAgICAgbXVsdGlzYW1wbGVkIGFuZCBub24tbXVsdGlzYW1wbGVk
IGRlcHRoIGFuZCBzdGVuY2lsIGJ1ZmZlcnMgaW50bworICAgICAgICByZXNpemVEZXB0aFN0ZW5j
aWwoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNy
ZWF0ZSk6CisgICAgICAgIFR1cm4gb24gc3RlbmNpbCwgdHVybiBvZmYgZGVwdGgsIHR1cm4gb2Zm
IGFudGlhbGlhc2luZyAoZm9yIG5vdykuCisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRDo6ZW5hYmxlU3RlbmNpbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmg6CisgICAgICAgIEltcGxlbWVudCBzdGVuY2ls
IGVuYWJsZS9kaXNhYmxlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJh
d2luZ0J1ZmZlck1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkRyYXdpbmdCdWZmZXI6OkRyYXdp
bmdCdWZmZXIpOgorICAgICAgICBSZW1vdmUgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZl
ci4gIFNldCB0aGUgc2l6ZSB0byAoLTEsIC0xKQorICAgICAgICBvbiBjcmVhdGlvbiwgc28gcmVz
ZXQoKSBkb2Vzbid0IGVhcmx5LW91dC4gIEluaXRpYWxpemUgbV9kZXB0aEJ1ZmZlcgorICAgICAg
ICBhbmQgbV9zdGVuY2lsQnVmZmVyLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmNhbnZhc0NsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjbGlw
T3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcFBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIFB1dCBp
biBHUFUgaG9va3MgZm9yIHBhdGggY2xpcHBpbmcsIGFuZCBwYXRoIGRyYXdpbmcuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmNhbkFjY2VsZXJhdGUpOgorICAgICAg
ICBEb24ndCBjaGVjayBmb3IgY2xpcHBpbmcgcGF0aHMgaW4gY2FuQWNjZWxlcmF0ZSgpIChzaW5j
ZSB3ZSBjYW4KKyAgICAgICAgbm93IGFjY2VsZXJhdGUgdGhlbSkuCisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUNvbnRleHRTa2lhOjp1cGxvYWRTb2Z0d2FyZVRvSGFyZHdhcmUpOgorICAgICAg
ICBEb24ndCBkbyBjbGlwcGluZyB3aGVuIHVwbG9hZGluZyBzb2Z0d2FyZSBkcmF3cyB0byBoYXJk
d2FyZS4KKyAgICAgICAgKiB0aGlyZHBhcnR5L2dsdS9SRUFETUUud2Via2l0OgorICAgICAgICAq
IHRoaXJkcGFydHkvZ2x1L2dsdW9zLmg6CisgICAgICAgICN1bmRlZiBNSU4gYW5kIE1BWCwgdG8g
Zml4IHdhcm5pbmdzLWFzLWVycm9ycyBpbiBDaHJvbWUvTWFjIGJ1aWxkLgorICAgICAgICAqIHRo
aXJkcGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5jOgorICAgICAgICAqIHRoaXJkcGFydHkvZ2x1L2xp
YnRlc3MvcHJpb3JpdHlxLmM6CisgICAgICAgICogdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9yZW5k
ZXIuYzoKKyAgICAgICAgVXNlIGRve313aGlsZSgwKSBpbnN0ZWFkIG9mIGlmKDEpZWxzZSBjb25z
dHJ1Y3QgaW4gbWFjcm8uCisgICAgICAgICogdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9zd2VlcC5j
OgorICAgICAgICAoSXNXaW5kaW5nSW5zaWRlKToKKyAgICAgICAgKERvbmVFZGdlRGljdCk6Cisg
ICAgICAgIEZpeCBzb21lIHdhcm5pbmdzIHRyZWF0ZWQgYXMgZXJyb3JzIGZvciB0aGUgTGludXgg
UmVsZWFzZSBidWlsZC4KKwogMjAxMS0wMS0xOCAgSGVsZGVyIENvcnJlaWEgIDxoZWxkZXJAc2Vu
Y2hhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNl
bi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDc2MDM2KQorKysgU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC00NDMzLDYgKzQ0MzMsMzAgQEAKICAg
ICAgICAgICAgICdzdmcvU1ZHWm9vbUFuZFBhbi5oJywKICAgICAgICAgICAgICdzdmcvU1ZHWm9v
bUV2ZW50LmNwcCcsCiAgICAgICAgICAgICAnc3ZnL1NWR1pvb21FdmVudC5oJywKKyAgICAgICAg
ICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2RpY3QuaCcsCisgICAgICAgICAgICAndGhpcmRw
YXJ0eS9nbHUvbGlidGVzcy9kaWN0LWxpc3QuaCcsCisgICAgICAgICAgICAndGhpcmRwYXJ0eS9n
bHUvbGlidGVzcy9nZW9tLmgnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mv
bWVtYWxsb2MuaCcsCisgICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9tZXNoLmgn
LAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mvbm9ybWFsLmgnLAorICAgICAg
ICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLWhlYXAuaCcsCisgICAgICAg
ICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9wcmlvcml0eXEtaGVhcC5jJywKKyAgICAgICAg
ICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS1zb3J0LmgnLAorICAgICAgICAg
ICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLmgnLAorICAgICAgICAgICAgJ3Ro
aXJkcGFydHkvZ2x1L2xpYnRlc3MvcmVuZGVyLmgnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkv
Z2x1L2xpYnRlc3Mvc3dlZXAuaCcsCisgICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVz
cy90ZXNzLmgnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzc21vbm8u
aCcsCisgICAgICAgICAgICAndGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9kaWN0LmMnLAorICAgICAg
ICAgICAgJ3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvZ2VvbS5jJywKKyAgICAgICAgICAgICd0aGly
ZHBhcnR5L2dsdS9saWJ0ZXNzL21lbWFsbG9jLmMnLAorICAgICAgICAgICAgJ3RoaXJkcGFydHkv
Z2x1L2xpYnRlc3MvbWVzaC5jJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNz
L25vcm1hbC5jJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5
cS5jJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3JlbmRlci5jJywKKyAg
ICAgICAgICAgICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmMnLAorICAgICAgICAgICAg
J3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvdGVzcy5jJywKKyAgICAgICAgICAgICd0aGlyZHBhcnR5
L2dsdS9saWJ0ZXNzL3Rlc3Ntb25vLmMnLAogICAgICAgICAgICAgJ3dlYmF1ZGlvL0F1ZGlvQmFz
aWNQcm9jZXNzb3JOb2RlLmNwcCcsCiAgICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9CYXNpY1By
b2Nlc3Nvck5vZGUuaCcsCiAgICAgICAgICAgICAnd2ViYXVkaW8vQXVkaW9CdWZmZXIuaCcsCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkocmV2aXNpb24gNzYwMzYp
CisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cC9XZWJDb3JlLmd5cAkod29ya2luZyBjb3B5
KQpAQCAtMTg1LDYgKzE4NSw3IEBACiAgICAgICAnLi4vc3ZnL2dyYXBoaWNzJywKICAgICAgICcu
Li9zdmcvZ3JhcGhpY3MvZmlsdGVycycsCiAgICAgICAnLi4vc3ZnL3Byb3BlcnRpZXMnLAorICAg
ICAgJy4uL3RoaXJkcGFydHkvZ2x1JywKICAgICAgICcuLi93ZWJhdWRpbycsCiAgICAgICAnLi4v
d2Vic29ja2V0cycsCiAgICAgICAnLi4vd29ya2VycycsCkBAIC0xMTE3LDYgKzExMTgsOCBAQAog
CiAgICAgICAgICMgVXNlIExpbmtIYXNoQ2hyb21pdW0uY3BwIGluc3RlYWQKICAgICAgICAgWydl
eGNsdWRlJywgJ3BsYXRmb3JtL0xpbmtIYXNoXFwuY3BwJCddLAorCisgICAgICAgIFsnaW5jbHVk
ZScsICd0aGlyZHBhcnR5L2dsdS9saWJ0ZXNzLyddLAogICAgICAgXSwKICAgICAgICdjb25kaXRp
b25zJzogWwogICAgICAgICBbJ09TPT0ibGludXgiIG9yIE9TPT0iZnJlZWJzZCInLCB7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDc2MDM2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcw
LDcgKzE3MCw3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZXNldCgpCiAgICAg
bV9wYXRoLmNsZWFyKCk7CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAgICBp
ZiAoR3JhcGhpY3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKSkgewotICAgICAgICBpZiAo
bV9jb250ZXh0M0QpIHsKKyAgICAgICAgaWYgKG1fY29udGV4dDNEICYmIG1fZHJhd2luZ0J1ZmZl
cikgewogICAgICAgICAgICAgbV9kcmF3aW5nQnVmZmVyLT5yZXNldChJbnRTaXplKGNhbnZhcygp
LT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpKTsKICAgICAgICAgICAgIGMtPnNldFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEKG1fY29udGV4dDNELmdldCgpLCBtX2RyYXdpbmdCdWZmZXIuZ2V0
KCksIEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSkpOwogICAg
ICAgICB9CkBAIC0xODk1LDcgKzE4OTUsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RDo6cGFpbnRSZW5kCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgVVNFKEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogUGxhdGZvcm1MYXllciogQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kcmF3aW5nQnVm
ZmVyLT5wbGF0Zm9ybUxheWVyKCk7CisgICAgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlciA/IG1fZHJh
d2luZ0J1ZmZlci0+cGxhdGZvcm1MYXllcigpIDogMDsKIH0KICNlbmRpZgogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21p
dW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDc2MDM2KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1ZmZlckNocm9t
aXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsMTUgKzcyLDE2IEBAIERyYXdpbmdCdWZmZXI6
OkRyYXdpbmdCdWZmZXIoR3JhcGhpY3NDb24KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAg
OiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fc2l6ZShzaXplKQorICAgICwgbV9zaXplKC0x
LCAtMSkKICAgICAsIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQobXVsdGlzYW1wbGVF
eHRlbnNpb25TdXBwb3J0ZWQpCiAgICAgLCBtX3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1
cHBvcnRlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCiAgICAgLCBtX2Zi
bygwKQogICAgICwgbV9jb2xvckJ1ZmZlcigwKQogICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIo
MCkKKyAgICAsIG1fZGVwdGhCdWZmZXIoMCkKKyAgICAsIG1fc3RlbmNpbEJ1ZmZlcigwKQogICAg
ICwgbV9tdWx0aXNhbXBsZUZCTygwKQogICAgICwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDAp
Ci0gICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDApCiAgICAgLCBtX2ludGVy
bmFsKG5ldyBEcmF3aW5nQnVmZmVySW50ZXJuYWwpCiB7CiAgICAgaWYgKCFtX2NvbnRleHQtPmdl
dEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX0NIUk9NSVVNX2NvcHlfdGV4dHVyZV90b19wYXJl
bnRfdGV4dHVyZSIpKSB7CkBAIC05MSw2ICs5Miw3IEBAIERyYXdpbmdCdWZmZXI6OkRyYXdpbmdC
dWZmZXIoR3JhcGhpY3NDb24KICAgICBjb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2Zibyk7CiAgICAgbV9jb2xvckJ1ZmZlciA9IGdlbmVy
YXRlQ29sb3JUZXh0dXJlKGNvbnRleHQsIHNpemUpOwogICAgIGNyZWF0ZVNlY29uZGFyeUJ1ZmZl
cnMoKTsKKyAgICByZXNldChzaXplKTsKIH0KIAogRHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZm
ZXIoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xF
UzJDYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmNwcAkocmV2aXNpb24gNzYwMzYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDEyICszNCwxNiBAQAogCiAjaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5o
IgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiaW50ZXJuYWxfZ2x1LmgiCiAjaW5j
bHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgogI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAi
U29saWRGaWxsU2hhZGVyLmgiCi0jaW5jbHVkZSAiVGV4U2hhZGVyLmgiCisjaWYgUExBVEZPUk0o
U0tJQSkKKyNpbmNsdWRlICJTa1BhdGguaCIKKyNlbmRpZgogI2luY2x1ZGUgIlRleHR1cmUuaCIK
IAogI2RlZmluZSBfVVNFX01BVEhfREVGSU5FUwpAQCAtNTAsMTcgKzU0LDk5IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorLy8gTnVtYmVyIG9mIGxpbmUgc2VnbWVudHMgdXNlZCB0byBhcHBy
b3hpbWF0ZSBiZXppZXIgY3VydmVzLgorY29uc3QgaW50IHBhdGhUZXNzZWxhdGlvbiA9IDMwOwor
dHlwZWRlZiB2b2lkIChHTEFQSUVOVFJZICpURVNTQ0IpKCk7Cit0eXBlZGVmIFdURjo6VmVjdG9y
PGZsb2F0PiBGbG9hdFZlY3RvcjsKK3R5cGVkZWYgV1RGOjpWZWN0b3I8ZG91YmxlPiBEb3VibGVW
ZWN0b3I7CisKIHN0cnVjdCBHTEVTMkNhbnZhczo6U3RhdGUgewogICAgIFN0YXRlKCkKICAgICAg
ICAgOiBtX2ZpbGxDb2xvcigwLCAwLCAwLCAyNTUpCiAgICAgICAgICwgbV9hbHBoYSgxLjBmKQog
ICAgICAgICAsIG1fY29tcG9zaXRlT3AoQ29tcG9zaXRlU291cmNlT3ZlcikKKyAgICAgICAgLCBt
X2NsaXBwaW5nRW5hYmxlZChmYWxzZSkKKyAgICB7CisgICAgfQorICAgIFN0YXRlKGNvbnN0IFN0
YXRlJiBvdGhlcikKKyAgICAgICAgOiBtX2ZpbGxDb2xvcihvdGhlci5tX2ZpbGxDb2xvcikKKyAg
ICAgICAgLCBtX2FscGhhKG90aGVyLm1fYWxwaGEpCisgICAgICAgICwgbV9jb21wb3NpdGVPcChv
dGhlci5tX2NvbXBvc2l0ZU9wKQorICAgICAgICAsIG1fY3RtKG90aGVyLm1fY3RtKQorICAgICAg
ICAsIG1fY2xpcHBpbmdQYXRocygpIC8vIERvbid0IGNvcHk7IGNsaXBwaW5nIHBhdGhzIGFyZSB0
cmFja2VkIHBlci1zdGF0ZS4KKyAgICAgICAgLCBtX2NsaXBwaW5nRW5hYmxlZChvdGhlci5tX2Ns
aXBwaW5nRW5hYmxlZCkKICAgICB7CiAgICAgfQogICAgIENvbG9yIG1fZmlsbENvbG9yOwogICAg
IGZsb2F0IG1fYWxwaGE7CiAgICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9jb21wb3NpdGVPcDsKICAg
ICBBZmZpbmVUcmFuc2Zvcm0gbV9jdG07CisgICAgV1RGOjpWZWN0b3I8UGF0aD4gbV9jbGlwcGlu
Z1BhdGhzOworICAgIGJvb2wgbV9jbGlwcGluZ0VuYWJsZWQ7Cit9OworCitzdGF0aWMgaW5saW5l
IEZsb2F0UG9pbnQgb3BlcmF0b3IqKGNvbnN0IEZsb2F0UG9pbnQmIGYsIGZsb2F0IHNjYWxlKQor
eworICAgIHJldHVybiBGbG9hdFBvaW50KGYueCgpICogc2NhbGUsIGYueSgpICogc2NhbGUpOwor
fQorCitzdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgb3BlcmF0b3IqKGZsb2F0IHNjYWxlLCBjb25z
dCBGbG9hdFBvaW50JiBmKQoreworICAgIHJldHVybiBGbG9hdFBvaW50KGYueCgpICogc2NhbGUs
IGYueSgpICogc2NhbGUpOworfQorCitzdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBvcGVyYXRvcioo
Y29uc3QgRmxvYXRTaXplJiBmLCBmbG9hdCBzY2FsZSkKK3sKKyAgICByZXR1cm4gRmxvYXRTaXpl
KGYud2lkdGgoKSAqIHNjYWxlLCBmLmhlaWdodCgpICogc2NhbGUpOworfQorCitzdGF0aWMgaW5s
aW5lIEZsb2F0U2l6ZSBvcGVyYXRvciooZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0U2l6ZSYgZikK
K3sKKyAgICByZXR1cm4gRmxvYXRTaXplKGYud2lkdGgoKSAqIHNjYWxlLCBmLmhlaWdodCgpICog
c2NhbGUpOworfQorCitjbGFzcyBRdWFkcmF0aWMgeworICBwdWJsaWM6CisgICAgUXVhZHJhdGlj
KEZsb2F0UG9pbnQgYSwgRmxvYXRQb2ludCBiLCBGbG9hdFBvaW50IGMpIDoKKyAgICAgICAgbV9h
KGEpLCBtX2IoYiksIG1fYyhjKQorICAgIHsKKyAgICB9CisgICAgc3RhdGljIFF1YWRyYXRpYyBm
cm9tQmV6aWVyKEZsb2F0UG9pbnQgcDAsIEZsb2F0UG9pbnQgcDEsIEZsb2F0UG9pbnQgcDIpCisg
ICAgeworICAgICAgICBGbG9hdFNpemUgcDFzKHAxLngoKSwgcDEueSgpKTsKKyAgICAgICAgRmxv
YXRTaXplIHAycyhwMi54KCksIHAyLnkoKSk7CisgICAgICAgIEZsb2F0UG9pbnQgYiA9IC0yLjBm
ICogcDAgKyAyLjBmICogcDFzOworICAgICAgICBGbG9hdFBvaW50IGMgPSAgICAgICAgIHAwIC0g
Mi4wZiAqIHAxcyArIHAyczsKKyAgICAgICAgcmV0dXJuIFF1YWRyYXRpYyhwMCwgYiwgYyk7Cisg
ICAgfQorICAgIGlubGluZSBGbG9hdFBvaW50IGV2YWx1YXRlKGZsb2F0IHQpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9hICsgdCAqIChtX2IgKyB0ICogbV9jKTsKKyAgICB9CisgICAgRmxvYXRQ
b2ludCBtX2EsIG1fYiwgbV9jLCBtX2Q7Cit9OworCitjbGFzcyBDdWJpYyB7CisgIHB1YmxpYzoK
KyAgICBDdWJpYyhGbG9hdFBvaW50IGEsIEZsb2F0UG9pbnQgYiwgRmxvYXRQb2ludCBjLCBGbG9h
dFBvaW50IGQpIDoKKyAgICAgICAgbV9hKGEpLCBtX2IoYiksIG1fYyhjKSwgbV9kKGQpIAorICAg
IHsKKyAgICB9CisgICAgc3RhdGljIEN1YmljIGZyb21CZXppZXIoRmxvYXRQb2ludCBwMCwgRmxv
YXRQb2ludCBwMSwgRmxvYXRQb2ludCBwMiwgRmxvYXRQb2ludCBwMykKKyAgICB7CisgICAgICAg
IEZsb2F0U2l6ZSBwMXMocDEueCgpLCBwMS55KCkpOworICAgICAgICBGbG9hdFNpemUgcDJzKHAy
LngoKSwgcDIueSgpKTsKKyAgICAgICAgRmxvYXRTaXplIHAzcyhwMy54KCksIHAzLnkoKSk7Cisg
ICAgICAgIEZsb2F0UG9pbnQgYiA9IC0zLjBmICogcDAgKyAzLjBmICogcDFzOworICAgICAgICBG
bG9hdFBvaW50IGMgPSAgMy4wZiAqIHAwIC0gNi4wZiAqIHAxcyArIDMuMGYgKiBwMnM7CisgICAg
ICAgIEZsb2F0UG9pbnQgZCA9IC0xLjBmICogcDAgKyAzLjBmICogcDFzIC0gMy4wZiAqIHAycyAr
IHAzczsKKyAgICAgICAgcmV0dXJuIEN1YmljKHAwLCBiLCBjLCBkKTsKKyAgICB9CisgICAgRmxv
YXRQb2ludCBldmFsdWF0ZShmbG9hdCB0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYSArIHQg
KiAobV9iICsgdCAqIChtX2MgKyB0ICogbV9kKSk7CisgICAgfQorICAgIEZsb2F0UG9pbnQgbV9h
LCBtX2IsIG1fYywgbV9kOwogfTsKIAogR0xFUzJDYW52YXM6OkdMRVMyQ2FudmFzKFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBj
b25zdCBJbnRTaXplJiBzaXplKQpAQCAtODgsNyArMTc0LDcgQEAgdm9pZCBHTEVTMkNhbnZhczo6
YmluZEZyYW1lYnVmZmVyKCkKIHZvaWQgR0xFUzJDYW52YXM6OmNsZWFyUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCiB7CiAgICAgYmluZEZyYW1lYnVmZmVyKCk7Ci0gICAgaWYgKG1fc3RhdGUt
Pm1fY3RtLmlzSWRlbnRpdHkoKSkgeworICAgIGlmIChtX3N0YXRlLT5tX2N0bS5pc0lkZW50aXR5
KCkgJiYgIW1fc3RhdGUtPm1fY2xpcHBpbmdFbmFibGVkKSB7CiAgICAgICAgIG1fY29udGV4dC0+
c2Npc3NvcihyZWN0KTsKICAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OlNDSVNTT1JfVEVTVCk7CiAgICAgICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihDb2xvcihS
R0JBMzIoMCkpKTsKQEAgLTEwMiw5ICsxODgsMTcgQEAgdm9pZCBHTEVTMkNhbnZhczo6Y2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UgogICAgIH0KIH0KIAordm9pZCBHTEVTMkNhbnZhczo6ZmlsbFBhdGgo
Y29uc3QgUGF0aCYgcGF0aCkKK3sKKyAgICBtX2NvbnRleHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0
b3IobV9zdGF0ZS0+bV9jb21wb3NpdGVPcCk7CisgICAgYXBwbHlDbGlwcGluZyhtX3N0YXRlLT5t
X2NsaXBwaW5nRW5hYmxlZCk7CisgICAgZmlsbFBhdGgocGF0aCwgbV9zdGF0ZS0+bV9maWxsQ29s
b3IpOworfQorCiB2b2lkIEdMRVMyQ2FudmFzOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJl
Y3QsIGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAgIG1f
Y29udGV4dC0+YXBwbHlDb21wb3NpdGVPcGVyYXRvcihtX3N0YXRlLT5tX2NvbXBvc2l0ZU9wKTsK
KyAgICBhcHBseUNsaXBwaW5nKG1fc3RhdGUtPm1fY2xpcHBpbmdFbmFibGVkKTsKICAgICBtX2Nv
bnRleHQtPnVzZVF1YWRWZXJ0aWNlcygpOwogCiAgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCht
X2ZsaXBNYXRyaXgpOwpAQCAtMTUzLDYgKzI0NywyMyBAQCB2b2lkIEdMRVMyQ2FudmFzOjpjb25j
YXRDVE0oY29uc3QgQWZmaW5lCiAgICAgbV9zdGF0ZS0+bV9jdG0ubXVsdExlZnQoYWZmaW5lKTsK
IH0KIAordm9pZCBHTEVTMkNhbnZhczo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKK3sKKyAg
ICBiaW5kRnJhbWVidWZmZXIoKTsKKyAgICBjaGVja0dMRXJyb3IoImJpbmRGcmFtZWJ1ZmZlciIp
OworICAgIGJlZ2luU3RlbmNpbERyYXcoKTsKKyAgICAvLyBSZWQgaXMgdXNlZCBzbyB3ZSBjYW4g
c2VlIGl0IGlmIGl0IGVuZHMgdXAgaW4gdGhlIGNvbG9yIGJ1ZmZlci4KKyAgICBDb2xvciByZWQo
MjU1LCAwLCAwLCAyNTUpOworICAgIGZpbGxQYXRoKHBhdGgsIHJlZCk7CisgICAgbV9zdGF0ZS0+
bV9jbGlwcGluZ1BhdGhzLmFwcGVuZChwYXRoKTsKKyAgICBtX3N0YXRlLT5tX2NsaXBwaW5nRW5h
YmxlZCA9IHRydWU7Cit9CisKK3ZvaWQgR0xFUzJDYW52YXM6OmNsaXBPdXQoY29uc3QgUGF0aCYg
cGF0aCkKK3sKKyAgICBBU1NFUlQoISJjbGlwT3V0IGlzIHVuc3VwcG9ydGVkIGluIEdMRVMyQ2Fu
dmFzLlxuIik7Cit9CisKIHZvaWQgR0xFUzJDYW52YXM6OnNhdmUoKQogewogICAgIG1fc3RhdGVT
dGFjay5hcHBlbmQoU3RhdGUobV9zdGF0ZVN0YWNrLmxhc3QoKSkpOwpAQCAtMTYyLDEzICsyNzMs
MzIgQEAgdm9pZCBHTEVTMkNhbnZhczo6c2F2ZSgpCiB2b2lkIEdMRVMyQ2FudmFzOjpyZXN0b3Jl
KCkKIHsKICAgICBBU1NFUlQoIW1fc3RhdGVTdGFjay5pc0VtcHR5KCkpOworICAgIGJvb2wgaGFk
Q2xpcHBpbmdQYXRocyA9ICFtX3N0YXRlLT5tX2NsaXBwaW5nUGF0aHMuaXNFbXB0eSgpOwogICAg
IG1fc3RhdGVTdGFjay5yZW1vdmVMYXN0KCk7CiAgICAgbV9zdGF0ZSA9ICZtX3N0YXRlU3RhY2su
bGFzdCgpOworICAgIGlmIChoYWRDbGlwcGluZ1BhdGhzKSB7CisgICAgICAgIG1fY29udGV4dC0+
Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfQlVGRkVSX0JJVCk7CisgICAgICAgIGJl
Z2luU3RlbmNpbERyYXcoKTsKKyAgICAgICAgU3RhdGVWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIGl0
ZXI7CisgICAgICAgIGZvciAoaXRlciA9IG1fc3RhdGVTdGFjay5iZWdpbigpOyBpdGVyIDwgbV9z
dGF0ZVN0YWNrLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIGNvbnN0IFN0YXRlJiBzdGF0
ZSA9ICppdGVyOworICAgICAgICAgICAgY29uc3QgVmVjdG9yPFBhdGg+JiBjbGlwcGluZ1BhdGhz
ID0gc3RhdGUubV9jbGlwcGluZ1BhdGhzOworICAgICAgICAgICAgVmVjdG9yPFBhdGg+Ojpjb25z
dF9pdGVyYXRvciBwYXRoSXRlcjsKKyAgICAgICAgICAgIGZvciAocGF0aEl0ZXIgPSBjbGlwcGlu
Z1BhdGhzLmJlZ2luKCk7CisgICAgICAgICAgICAgICAgIHBhdGhJdGVyIDwgY2xpcHBpbmdQYXRo
cy5lbmQoKTsKKyAgICAgICAgICAgICAgICAgKytwYXRoSXRlcikgeworICAgICAgICAgICAgICAg
IC8vIFJlZCBpcyB1c2VkIHNvIHdlIGNhbiBzZWUgaXQgaWYgaXQgZW5kcyB1cCBpbiB0aGUgY29s
b3IgYnVmZmVyLgorICAgICAgICAgICAgICAgIENvbG9yIHJlZCgyNTUsIDAsIDAsIDI1NSk7Cisg
ICAgICAgICAgICAgICAgZmlsbFBhdGgoKnBhdGhJdGVyLCByZWQpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQogfQogCiB2b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0
KHVuc2lnbmVkIHRleHR1cmUsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgQ29sb3JTcGFjZSBjb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKICAgICBtX2NvbnRleHQt
PmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoY29tcG9zaXRlT3ApOworICAgIGFwcGx5Q2xpcHBpbmco
ZmFsc2UpOwogCiAgICAgbV9jb250ZXh0LT51c2VRdWFkVmVydGljZXMoKTsKICAgICBtX2NvbnRl
eHQtPnNldEFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKQEAgLTE4
MCwxMyArMzEwLDE0IEBAIHZvaWQgR0xFUzJDYW52YXM6OmRyYXdUZXh0dXJlZFJlY3QodW5zaWcK
IAogdm9pZCBHTEVTMkNhbnZhczo6ZHJhd1RleHR1cmVkUmVjdChUZXh0dXJlKiB0ZXh0dXJlLCBj
b25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgQ29sb3JT
cGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkKIHsKLSAgICBk
cmF3VGV4dHVyZWRSZWN0KHRleHR1cmUsIHNyY1JlY3QsIGRzdFJlY3QsIG1fc3RhdGUtPm1fY3Rt
LCBtX3N0YXRlLT5tX2FscGhhLCBjb2xvclNwYWNlLCBjb21wb3NpdGVPcCk7CisgICAgZHJhd1Rl
eHR1cmVkUmVjdCh0ZXh0dXJlLCBzcmNSZWN0LCBkc3RSZWN0LCBtX3N0YXRlLT5tX2N0bSwgbV9z
dGF0ZS0+bV9hbHBoYSwgY29sb3JTcGFjZSwgY29tcG9zaXRlT3AsIG1fc3RhdGUtPm1fY2xpcHBp
bmdFbmFibGVkKTsKIH0KIAogCi12b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KFRl
eHR1cmUqIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0
JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgZmxvYXQgYWxwaGEs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCit2
b2lkIEdMRVMyQ2FudmFzOjpkcmF3VGV4dHVyZWRSZWN0KFRleHR1cmUqIHRleHR1cmUsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIGJvb2wgY2xpcCkKIHsKICAgICBtX2Nv
bnRleHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoY29tcG9zaXRlT3ApOworICAgIGFwcGx5Q2xp
cHBpbmcoY2xpcCk7CiAgICAgY29uc3QgVGlsaW5nRGF0YSYgdGlsZXMgPSB0ZXh0dXJlLT50aWxl
cygpOwogICAgIEludFJlY3QgdGlsZUlkeFJlY3QgPSB0aWxlcy5vdmVybGFwcGVkVGlsZUluZGlj
ZXMoc3JjUmVjdCk7CiAKQEAgLTI1MSw2ICszODIsMjE0IEBAIFRleHR1cmUqIEdMRVMyQ2FudmFz
OjpnZXRUZXh0dXJlKE5hdGl2ZUkKICAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRUZXh0dXJlKHB0
cik7CiB9CiAKKyNpZiBQTEFURk9STShTS0lBKQorLy8gVGhpcyBpcyBhY3R1YWxseSBjcm9zcy1w
bGF0Zm9ybSBjb2RlLCBidXQgc2luY2UgaXRzIG9ubHkgY2FsbGVyIGlzIGluc2lkZSBhCisvLyBQ
TEFURk9STShTS0lBKSwgaXQgd2lsbCBjYXVzZSBhIHdhcm5pbmctYXMtZXJyb3Igb24gQ2hyb21l
L01hYy4KK3N0YXRpYyB2b2lkIGludGVycG9sYXRlUXVhZHJhdGljKERvdWJsZVZlY3RvciogdmVy
dGljZXMsIGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3Qg
RmxvYXRQb2ludCYgcDIpCit7CisgICAgZmxvYXQgdEluY3JlbWVudCA9IDEuMGYgLyBwYXRoVGVz
c2VsYXRpb24sIHQgPSB0SW5jcmVtZW50OworICAgIFF1YWRyYXRpYyBjID0gUXVhZHJhdGljOjpm
cm9tQmV6aWVyKHAwLCBwMSwgcDIpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGF0aFRlc3Nl
bGF0aW9uOyArK2ksIHQgKz0gdEluY3JlbWVudCkgeworICAgICAgICBGbG9hdFBvaW50IHAgPSBj
LmV2YWx1YXRlKHQpOworICAgICAgICB2ZXJ0aWNlcy0+YXBwZW5kKHAueCgpKTsKKyAgICAgICAg
dmVydGljZXMtPmFwcGVuZChwLnkoKSk7CisgICAgICAgIHZlcnRpY2VzLT5hcHBlbmQoMS4wKTsK
KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGludGVycG9sYXRlQ3ViaWMoRG91YmxlVmVjdG9yKiB2
ZXJ0aWNlcywgY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25z
dCBGbG9hdFBvaW50JiBwMiwgY29uc3QgRmxvYXRQb2ludCYgcDMpCit7CisgICAgZmxvYXQgdElu
Y3JlbWVudCA9IDEuMGYgLyBwYXRoVGVzc2VsYXRpb24sIHQgPSB0SW5jcmVtZW50OworICAgIEN1
YmljIGMgPSBDdWJpYzo6ZnJvbUJlemllcihwMCwgcDEsIHAyLCBwMyk7CisgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBwYXRoVGVzc2VsYXRpb247ICsraSwgdCArPSB0SW5jcmVtZW50KSB7CisgICAg
ICAgIEZsb2F0UG9pbnQgcCA9IGMuZXZhbHVhdGUodCk7CisgICAgICAgIHZlcnRpY2VzLT5hcHBl
bmQocC54KCkpOworICAgICAgICB2ZXJ0aWNlcy0+YXBwZW5kKHAueSgpKTsKKyAgICAgICAgdmVy
dGljZXMtPmFwcGVuZCgxLjApOworICAgIH0KK30KKyNlbmRpZgorCitzdHJ1Y3QgUG9seWdvbkRh
dGEgeworICAgIFBvbHlnb25EYXRhKEZsb2F0VmVjdG9yKiB2ZXJ0aWNlcywgV1RGOjpWZWN0b3I8
c2hvcnQ+KiBpbmRpY2VzKQorICAgICAgOiBtX3ZlcnRpY2VzKHZlcnRpY2VzKQorICAgICAgLCBt
X2luZGljZXMoaW5kaWNlcykKKyAgICB7CisgICAgfQorICAgIEZsb2F0VmVjdG9yKiBtX3ZlcnRp
Y2VzOworICAgIFdURjo6VmVjdG9yPHNob3J0PiogbV9pbmRpY2VzOworfTsKKworc3RhdGljIHZv
aWQgYmVnaW5EYXRhKEdMZW51bSB0eXBlLCB2b2lkKiBkYXRhKQoreworICAgIEFTU0VSVCh0eXBl
ID09IEdMX1RSSUFOR0xFUyk7Cit9CisKK3N0YXRpYyB2b2lkIGVkZ2VGbGFnRGF0YShHTGJvb2xl
YW4gZmxhZywgdm9pZCogZGF0YSkKK3sKK30KKworc3RhdGljIHZvaWQgdmVydGV4RGF0YSh2b2lk
KiB2ZXJ0ZXhEYXRhLCB2b2lkKiBkYXRhKQoreworICAgIHN0YXRpY19jYXN0PFBvbHlnb25EYXRh
Kj4oZGF0YSktPm1faW5kaWNlcy0+YXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8bG9uZz4odmVydGV4
RGF0YSkpOworfQorCitzdGF0aWMgdm9pZCBlbmREYXRhKHZvaWQqIGRhdGEpCit7Cit9CisKK3N0
YXRpYyB2b2lkIGNvbWJpbmVEYXRhKEdMZG91YmxlIGNvb3Jkc1szXSwgdm9pZCogdmVydGV4RGF0
YVs0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgd2VpZ2h0WzRd
LCB2b2lkICoqb3V0RGF0YSwgdm9pZCogZGF0YSkKK3sKKyAgICBQb2x5Z29uRGF0YSogcG9seWdv
bkRhdGEgPSBzdGF0aWNfY2FzdDxQb2x5Z29uRGF0YSo+KGRhdGEpOworICAgIGludCBpbmRleCA9
IHBvbHlnb25EYXRhLT5tX3ZlcnRpY2VzLT5zaXplKCkgLyAzOworICAgIHBvbHlnb25EYXRhLT5t
X3ZlcnRpY2VzLT5hcHBlbmQoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvb3Jkc1swXSkpOworICAgIHBv
bHlnb25EYXRhLT5tX3ZlcnRpY2VzLT5hcHBlbmQoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvb3Jkc1sx
XSkpOworICAgIHBvbHlnb25EYXRhLT5tX3ZlcnRpY2VzLT5hcHBlbmQoMS4wZik7CisgICAgKm91
dERhdGEgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihpbmRleCk7Cit9CisKK3R5cGVkZWYgdm9p
ZCAoKlRFU1NDQikoKTsKKwordm9pZCBHTEVTMkNhbnZhczo6Y3JlYXRlVmVydGV4QnVmZmVyRnJv
bVBhdGgoY29uc3QgUGF0aCYgcGF0aCwgaW50KiBjb3VudCwgdW5zaWduZWQqIHZlcnRleEJ1ZmZl
ciwgdW5zaWduZWQqIGluZGV4QnVmZmVyKQoreworICAgICp2ZXJ0ZXhCdWZmZXIgPSBtX2NvbnRl
eHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZUJ1ZmZlcigpOworICAgIGNoZWNrR0xFcnJv
cigiY3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgsIGNyZWF0ZUJ1ZmZlciIpOworICAgICppbmRl
eEJ1ZmZlciA9IG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlQnVmZmVyKCk7
CisgICAgY2hlY2tHTEVycm9yKCJjcmVhdGVWZXJ0ZXhCdWZmZXJGcm9tUGF0aCwgY3JlYXRlQnVm
ZmVyIik7CisgICAgRG91YmxlVmVjdG9yIGluVmVydGljZXM7CisgICAgV1RGOjpWZWN0b3I8c2l6
ZV90PiBjb250b3VyczsKKyNpZiBQTEFURk9STShTS0lBKQorICAgIGNvbnN0IFNrUGF0aCogc2tQ
YXRoID0gcGF0aC5wbGF0Zm9ybVBhdGgoKTsKKyAgICBTa1BvaW50IHB0c1s0XTsKKyAgICBTa1Bh
dGg6Okl0ZXIgaXRlcigqc2tQYXRoLCB0cnVlKTsKKyAgICBTa1BhdGg6OlZlcmIgdmVyYjsKKyAg
ICB3aGlsZSAoKHZlcmIgPSBpdGVyLm5leHQocHRzKSkgIT0gU2tQYXRoOjprRG9uZV9WZXJiKSB7
CisgICAgICAgIHN3aXRjaCAodmVyYikgeworICAgICAgICBjYXNlIFNrUGF0aDo6a01vdmVfVmVy
YjoKKyAgICAgICAgICAgIGluVmVydGljZXMuYXBwZW5kKHB0c1swXS5mWCk7CisgICAgICAgICAg
ICBpblZlcnRpY2VzLmFwcGVuZChwdHNbMF0uZlkpOworICAgICAgICAgICAgaW5WZXJ0aWNlcy5h
cHBlbmQoMS4wKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNrUGF0aDo6a0xp
bmVfVmVyYjoKKyAgICAgICAgICAgIGluVmVydGljZXMuYXBwZW5kKHB0c1sxXS5mWCk7CisgICAg
ICAgICAgICBpblZlcnRpY2VzLmFwcGVuZChwdHNbMV0uZlkpOworICAgICAgICAgICAgaW5WZXJ0
aWNlcy5hcHBlbmQoMS4wKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNrUGF0
aDo6a1F1YWRfVmVyYjoKKyAgICAgICAgICAgIGludGVycG9sYXRlUXVhZHJhdGljKCZpblZlcnRp
Y2VzLCBwdHNbMF0sIHB0c1sxXSwgcHRzWzJdKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFNrUGF0aDo6a0N1YmljX1ZlcmI6CisgICAgICAgICAgICBpbnRlcnBvbGF0ZUN1Ymlj
KCZpblZlcnRpY2VzLCBwdHNbMF0sIHB0c1sxXSwgcHRzWzJdLCBwdHNbM10pOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU2tQYXRoOjprQ2xvc2VfVmVyYjoKKyAgICAgICAgICAg
IGNvbnRvdXJzLmFwcGVuZChpblZlcnRpY2VzLnNpemUoKSAvIDMpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgU2tQYXRoOjprRG9uZV9WZXJiOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisjZWxzZQorICAgIEFTU0VSVCghIlBhdGggZXh0cmFjdGlvbiBu
b3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybS4iKTsKKyNlbmRpZgorCisgICAgR0xVdGVz
c2VsYXRvciogdGVzcyA9IGludGVybmFsX2dsdU5ld1Rlc3MoKTsKKyAgICBpbnRlcm5hbF9nbHVU
ZXNzUHJvcGVydHkodGVzcywgR0xVX1RFU1NfV0lORElOR19SVUxFLCBHTFVfVEVTU19XSU5ESU5H
X05PTlpFUk8pOworICAgIGludGVybmFsX2dsdVRlc3NDYWxsYmFjayh0ZXNzLCBHTFVfVEVTU19C
RUdJTl9EQVRBLCAoVEVTU0NCKSAmYmVnaW5EYXRhKTsKKyAgICBpbnRlcm5hbF9nbHVUZXNzQ2Fs
bGJhY2sodGVzcywgR0xVX1RFU1NfVkVSVEVYX0RBVEEsIChURVNTQ0IpICZ2ZXJ0ZXhEYXRhKTsK
KyAgICBpbnRlcm5hbF9nbHVUZXNzQ2FsbGJhY2sodGVzcywgR0xVX1RFU1NfRU5EX0RBVEEsIChU
RVNTQ0IpICZlbmREYXRhKTsKKyAgICBpbnRlcm5hbF9nbHVUZXNzQ2FsbGJhY2sodGVzcywgR0xV
X1RFU1NfRURHRV9GTEFHX0RBVEEsIChURVNTQ0IpICZlZGdlRmxhZ0RhdGEpOworICAgIGludGVy
bmFsX2dsdVRlc3NDYWxsYmFjayh0ZXNzLCBHTFVfVEVTU19DT01CSU5FX0RBVEEsIChURVNTQ0Ip
ICZjb21iaW5lRGF0YSk7CisgICAgV1RGOjpWZWN0b3I8c2hvcnQ+IGluZGljZXM7CisgICAgRmxv
YXRWZWN0b3IgdmVydGljZXM7CisgICAgdmVydGljZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShp
blZlcnRpY2VzLnNpemUoKSk7CisgICAgUG9seWdvbkRhdGEgZGF0YSgmdmVydGljZXMsICZpbmRp
Y2VzKTsKKyAgICBpbnRlcm5hbF9nbHVUZXNzQmVnaW5Qb2x5Z29uKHRlc3MsICZkYXRhKTsKKyAg
ICBXVEY6OlZlY3RvcjxzaXplX3Q+Ojpjb25zdF9pdGVyYXRvciBjb250b3VyOworICAgIHNpemVf
dCBpID0gMDsKKyAgICBmb3IgKGNvbnRvdXIgPSBjb250b3Vycy5iZWdpbigpOyBjb250b3VyICE9
IGNvbnRvdXJzLmVuZCgpOyArK2NvbnRvdXIpIHsKKyAgICAgICAgaW50ZXJuYWxfZ2x1VGVzc0Jl
Z2luQ29udG91cih0ZXNzKTsKKyAgICAgICAgZm9yICg7IGkgPCAqY29udG91cjsgKytpKSB7Cisg
ICAgICAgICAgICB2ZXJ0aWNlcy5hcHBlbmQoaW5WZXJ0aWNlc1tpICogM10pOworICAgICAgICAg
ICAgdmVydGljZXMuYXBwZW5kKGluVmVydGljZXNbaSAqIDMgKyAxXSk7CisgICAgICAgICAgICB2
ZXJ0aWNlcy5hcHBlbmQoMS4wZik7CisgICAgICAgICAgICBpbnRlcm5hbF9nbHVUZXNzVmVydGV4
KHRlc3MsICZpblZlcnRpY2VzW2kgKiAzXSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaSkpOwor
ICAgICAgICB9CisgICAgICAgIGludGVybmFsX2dsdVRlc3NFbmRDb250b3VyKHRlc3MpOworICAg
IH0KKyAgICBpbnRlcm5hbF9nbHVUZXNzRW5kUG9seWdvbih0ZXNzKTsKKyAgICBpbnRlcm5hbF9n
bHVEZWxldGVUZXNzKHRlc3MpOworCisgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgp
LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsICp2ZXJ0ZXhCdWZm
ZXIpOworICAgIGNoZWNrR0xFcnJvcigiY3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgsIGJpbmRC
dWZmZXIgQVJSQVlfQlVGRkVSIik7CisgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgp
LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHZlcnRpY2VzLnNp
emUoKSAqIHNpemVvZihmbG9hdCksIHZlcnRpY2VzLmRhdGEoKSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlNUUkVBTV9EUkFXKTsKKyAgICBjaGVja0dMRXJyb3IoImNyZWF0ZVZlcnRleEJ1ZmZlckZyb21Q
YXRoLCBidWZmZXJEYXRhIEFSUkFZX0JVRkZFUiIpOworCisgICAgbV9jb250ZXh0LT5ncmFwaGlj
c0NvbnRleHQzRCgpLT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZ
X0JVRkZFUiwgKmluZGV4QnVmZmVyKTsKKyAgICBjaGVja0dMRXJyb3IoImNyZWF0ZVZlcnRleEJ1
ZmZlckZyb21QYXRoLCBiaW5kQnVmZmVyIEVMRU1FTlRfQVJSQVlfQlVGRkVSIik7CisgICAgbV9j
b250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNE
OjpFTEVNRU5UX0FSUkFZX0JVRkZFUiwgaW5kaWNlcy5zaXplKCkgKiBzaXplb2Yoc2hvcnQpLCBp
bmRpY2VzLmRhdGEoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVBTV9EUkFXKTsKKyAgICBjaGVj
a0dMRXJyb3IoImNyZWF0ZVZlcnRleEJ1ZmZlckZyb21QYXRoLCBidWZmZXJEYXRhIEVMRU1FTlRf
QVJSQVlfQlVGRkVSIik7CisgICAgKmNvdW50ID0gaW5kaWNlcy5zaXplKCk7Cit9CisKK3ZvaWQg
R0xFUzJDYW52YXM6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IENvbG9yJiBjb2xv
cikKK3sKKyAgICBpbnQgY291bnQ7CisgICAgdW5zaWduZWQgdmVydGV4QnVmZmVyLCBpbmRleEJ1
ZmZlcjsKKyAgICBjcmVhdGVWZXJ0ZXhCdWZmZXJGcm9tUGF0aChwYXRoLCAmY291bnQsICZ2ZXJ0
ZXhCdWZmZXIsICZpbmRleEJ1ZmZlcik7CisgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQz
RCgpLT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHZlcnRleEJ1
ZmZlcik7CisgICAgY2hlY2tHTEVycm9yKCJiaW5kQnVmZmVyIik7CisgICAgbV9jb250ZXh0LT5n
cmFwaGljc0NvbnRleHQzRCgpLT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5U
X0FSUkFZX0JVRkZFUiwgaW5kZXhCdWZmZXIpOworICAgIGNoZWNrR0xFcnJvcigiYmluZEJ1ZmZl
ciIpOworCisgICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeChtX2ZsaXBNYXRyaXgpOworICAgIG1h
dHJpeC5tdWx0TGVmdChtX3N0YXRlLT5tX2N0bSk7CisKKyAgICBtX2NvbnRleHQtPnVzZUZpbGxT
b2xpZFByb2dyYW0obWF0cml4LCBjb2xvcik7CisgICAgY2hlY2tHTEVycm9yKCJ1c2VGaWxsU29s
aWRQcm9ncmFtIik7CisKKyAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmRyYXdF
bGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCBjb3VudCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKTsKKyAgICBjaGVja0dMRXJyb3IoImRyYXdBcnJheXMi
KTsKKworICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlQnVmZmVyKHZl
cnRleEJ1ZmZlcik7CisgICAgY2hlY2tHTEVycm9yKCJkZWxldGVCdWZmZXIiKTsKKworICAgIG1f
Y29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlQnVmZmVyKGluZGV4QnVmZmVyKTsK
KyAgICBjaGVja0dMRXJyb3IoImRlbGV0ZUJ1ZmZlciIpOworfQorCit2b2lkIEdMRVMyQ2FudmFz
OjpiZWdpblN0ZW5jaWxEcmF3KCkKK3sKKyAgICAvLyBUdXJuIG9uIHN0ZW5jaWwgdGVzdC4KKyAg
ICBtX2NvbnRleHQtPmVuYWJsZVN0ZW5jaWwodHJ1ZSk7CisgICAgY2hlY2tHTEVycm9yKCJlbmFi
bGUgU1RFTkNJTF9URVNUIik7CisKKyAgICAvLyBTdGVuY2lsIHRlc3QgbmV2ZXIgcGFzc2VzLCBz
byBjb2xvcmJ1ZmZlciBpcyBub3QgZHJhd24uCisgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRl
eHQzRCgpLT5zdGVuY2lsRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6TkVWRVIsIDEsIDEpOworICAg
IGNoZWNrR0xFcnJvcigic3RlbmNpbEZ1bmMiKTsKKworICAgIC8vIEFsbCB3cml0ZXMgaW5jcmVt
ZW1lbnQgdGhlIHN0ZW5jaWwgYnVmZmVyLgorICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0
M0QoKS0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpJTkNSLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpJTkNSLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dDNEOjpJTkNSKTsKKyAgICBjaGVja0dMRXJyb3IoInN0ZW5jaWxPcCIpOworfQorCit2b2lk
IEdMRVMyQ2FudmFzOjphcHBseUNsaXBwaW5nKGJvb2wgZW5hYmxlKQoreworICAgIG1fY29udGV4
dC0+ZW5hYmxlU3RlbmNpbChlbmFibGUpOworICAgIGlmIChlbmFibGUpIHsKKyAgICAgICAgLy8g
RW5hYmxlIGRyYXdpbmcgb25seSB3aGVyZSBzdGVuY2lsIGlzIG5vbi16ZXJvLgorICAgICAgICBt
X2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPnN0ZW5jaWxGdW5jKEdyYXBoaWNzQ29udGV4
dDNEOjpFUVVBTCwgbV9zdGF0ZS0+bV9jbGlwcGluZ1BhdGhzLnNpemUoKSAlIDI1NiwgMSk7Cisg
ICAgICAgIGNoZWNrR0xFcnJvcigic3RlbmNpbEZ1bmMiKTsKKyAgICAgICAgLy8gS2VlcCBhbGwg
c3RlbmNpbCB2YWx1ZXMgdGhlIHNhbWUuCisgICAgICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250
ZXh0M0QoKS0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6
S0VFUCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OktFRVApOworICAgICAgICBjaGVja0dMRXJyb3IoInN0ZW5jaWxP
cCIpOworICAgIH0KK30KKwogdm9pZCBHTEVTMkNhbnZhczo6Y2hlY2tHTEVycm9yKGNvbnN0IGNo
YXIqIGhlYWRlcikKIHsKICNpZm5kZWYgTkRFQlVHCkBAIC0yODMsNCArNjIyLDMgQEAgdm9pZCBH
TEVTMkNhbnZhczo6Y2hlY2tHTEVycm9yKGNvbnN0IGNoYQogfQogCiB9Ci0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dMRVMyQ2FudmFzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR0xFUzJD
YW52YXMuaAkocmV2aXNpb24gNzYwMzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HTEVTMkNhbnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3
IEBAIGNsYXNzIENvbG9yOwogY2xhc3MgRHJhd2luZ0J1ZmZlcjsKIGNsYXNzIEZsb2F0UmVjdDsK
IGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3MgUGF0aDsKIGNsYXNzIFNoYXJlZEdyYXBo
aWNzQ29udGV4dDNEOwogCiBjbGFzcyBHTEVTMkNhbnZhcyA6IHB1YmxpYyBOb25jb3B5YWJsZSB7
CkBAIC01NSw2ICs1Niw3IEBAIHB1YmxpYzoKICAgICBHTEVTMkNhbnZhcyhTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRCosIERyYXdpbmdCdWZmZXIqLCBjb25zdCBJbnRTaXplJik7CiAgICAgfkdMRVMy
Q2FudmFzKCk7CiAKKyAgICB2b2lkIGZpbGxQYXRoKGNvbnN0IFBhdGgmKTsKICAgICB2b2lkIGZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJiwgQ29sb3JTcGFjZSk7CiAgICAg
dm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKICAgICB2b2lkIGNsZWFyUmVjdChjb25z
dCBGbG9hdFJlY3QmKTsKQEAgLTY1LDYgKzY3LDggQEAgcHVibGljOgogICAgIHZvaWQgcm90YXRl
KGZsb2F0IGFuZ2xlSW5SYWRpYW5zKTsKICAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYp
OwogICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOworICAgIHZvaWQg
Y2xpcFBhdGgoY29uc3QgUGF0aCYpOworICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJik7CiAK
ICAgICB2b2lkIHNhdmUoKTsKICAgICB2b2lkIHJlc3RvcmUoKTsKQEAgLTcyLDkgKzc2LDEzIEBA
IHB1YmxpYzoKICAgICAvLyBub24tc3RhbmRhcmQgZnVuY3Rpb25zCiAgICAgLy8gVGhlc2UgYXJl
IG5vdCBzdGFuZGFyZCBHcmFwaGljc0NvbnRleHQgZnVuY3Rpb25zLCBhbmQgc2hvdWxkIGJlIHB1
c2hlZAogICAgIC8vIGRvd24gaW50byBhIFBsYXRmb3JtQ29udGV4dEdMRVMyIGF0IHNvbWUgcG9p
bnQuCisKKyAgICAvLyBUaGlzIHZlcnNpb24gaXMgY2FsbGVkIGJ5IHRoZSBjYW52YXMtPmNhbnZh
cyBkcmF3cy4KICAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QodW5zaWduZWQgdGV4dHVyZSwgY29u
c3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7Ci0gICAg
dm9pZCBkcmF3VGV4dHVyZWRSZWN0KFRleHR1cmUqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3Qs
IGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxvYXQg
YWxwaGEsIENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICAvLyBUaGlzIHZlcnNp
b24gaXMgY2FsbGVkIGJ5IEJpdG1hcEltYWdlOjpkcmF3KCkuCiAgICAgdm9pZCBkcmF3VGV4dHVy
ZWRSZWN0KFRleHR1cmUqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOworICAgIC8vIFRoaXMg
dmVyc2lvbiBpcyBjYWxsZWQgYnkgdGhlIGFib3ZlLCBhbmQgYnkgdGhlIHNvZnR3YXJlLT5oYXJk
d2FyZSB1cGxvYWRzLgorICAgIHZvaWQgZHJhd1RleHR1cmVkUmVjdChUZXh0dXJlKiwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwg
Ym9vbCBjbGlwKTsKICAgICBUZXh0dXJlKiBjcmVhdGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRyLCBU
ZXh0dXJlOjpGb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAgICAgVGV4dHVyZSogZ2V0
VGV4dHVyZShOYXRpdmVJbWFnZVB0cik7CiAKQEAgLTg4LDYgKzk2LDEwIEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBkcmF3VGV4dHVyZWRSZWN0VGlsZShUZXh0dXJlKiB0ZXh0dXJlLCBpbnQgdGlsZSwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYsIGZsb2F0IGFscGhhKTsKICAgICB2b2lkIGRyYXdRdWFkKGNvbnN0
IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEpOwog
ICAgIHZvaWQgYXBwbHlDb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVPcGVyYXRvcik7CisgICAg
dm9pZCBjcmVhdGVWZXJ0ZXhCdWZmZXJGcm9tUGF0aChjb25zdCBQYXRoJiwgaW50KiBjb3VudCwg
dW5zaWduZWQqIHZlcnRleEJ1ZmZlciwgdW5zaWduZWQqIGluZGV4QnVmZmVyKTsKKyAgICB2b2lk
IGZpbGxQYXRoKGNvbnN0IFBhdGgmLCBjb25zdCBDb2xvciYpOworICAgIHZvaWQgYmVnaW5TdGVu
Y2lsRHJhdygpOworICAgIHZvaWQgYXBwbHlDbGlwcGluZyhib29sIGVuYWJsZSk7CiAgICAgdm9p
ZCBjaGVja0dMRXJyb3IoY29uc3QgY2hhciogaGVhZGVyKTsKIAogICAgIEludFNpemUgbV9zaXpl
OwpAQCAtOTYsNyArMTA4LDggQEAgcHJpdmF0ZToKICAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdp
bmdCdWZmZXI7CiAKICAgICBzdHJ1Y3QgU3RhdGU7Ci0gICAgV1RGOjpWZWN0b3I8U3RhdGU+IG1f
c3RhdGVTdGFjazsKKyAgICB0eXBlZGVmIFdURjo6VmVjdG9yPFN0YXRlPiBTdGF0ZVZlY3RvcjsK
KyAgICBTdGF0ZVZlY3RvciBtX3N0YXRlU3RhY2s7CiAgICAgU3RhdGUqIG1fc3RhdGU7CiAgICAg
QWZmaW5lVHJhbnNmb3JtIG1fZmxpcE1hdHJpeDsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwCShyZXZp
c2lvbiA3NjAzNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3
aW5nQnVmZmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsMTYgKzY3LDIxIEBAIHZvaWQgRHJh
d2luZ0J1ZmZlcjo6Y2xlYXIoKQogICAgICAgICBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIgPSAw
OwogICAgIH0KICAgICAKLSAgICBpZiAobV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcikg
ewotICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX211bHRpc2FtcGxlRGVw
dGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZl
ciA9IDA7Ci0gICAgfQotICAgIAogICAgIGlmIChtX2RlcHRoU3RlbmNpbEJ1ZmZlcikgewogICAg
ICAgICBtX2NvbnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7
CiAgICAgICAgIG1fZGVwdGhTdGVuY2lsQnVmZmVyID0gMDsKICAgICB9CiAgICAgCisgICAgaWYg
KG1fZGVwdGhCdWZmZXIpIHsKKyAgICAgICAgbV9jb250ZXh0LT5kZWxldGVSZW5kZXJidWZmZXIo
bV9kZXB0aEJ1ZmZlcik7CisgICAgICAgIG1fZGVwdGhCdWZmZXIgPSAwOworICAgIH0KKyAgICAK
KyAgICBpZiAobV9zdGVuY2lsQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlUmVu
ZGVyYnVmZmVyKG1fc3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIG1fc3RlbmNpbEJ1ZmZlciA9IDA7
CisgICAgfQorICAgIAogICAgIGlmIChtX211bHRpc2FtcGxlRkJPKSB7CiAgICAgICAgIG1fY29u
dGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9t
dWx0aXNhbXBsZUZCTyk7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9t
dWx0aXNhbXBsZUZCTyk7CkBAIC05MiwyMiArOTcsNTIgQEAgdm9pZCBEcmF3aW5nQnVmZmVyOjpj
bGVhcigpCiAKIHZvaWQgRHJhd2luZ0J1ZmZlcjo6Y3JlYXRlU2Vjb25kYXJ5QnVmZmVycygpCiB7
Ci0gICAgY29uc3QgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMgPSBt
X2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7Ci0KLSAgICAvLyBDcmVhdGUgdGhlIHN0
ZW5jaWwgYW5kIGRlcHRoIGJ1ZmZlciBpZiBuZWVkZWQKLSAgICBpZiAoIW11bHRpc2FtcGxlKCkg
JiYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSkKLSAgICAgICAgbV9k
ZXB0aFN0ZW5jaWxCdWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotCiAg
ICAgLy8gY3JlYXRlIGEgbXVsdGlzYW1wbGUgRkJPCiAgICAgaWYgKG11bHRpc2FtcGxlKCkpIHsK
ICAgICAgICAgbV9tdWx0aXNhbXBsZUZCTyA9IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIo
KTsKICAgICAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OkZSQU1FQlVGRkVSLCBtX211bHRpc2FtcGxlRkJPKTsKICAgICAgICAgbV9tdWx0aXNhbXBsZUNv
bG9yQnVmZmVyID0gbV9jb250ZXh0LT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKLSAgICAgICAgaWYg
KGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAgICAgbV9t
dWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlciA9IG1fY29udGV4dC0+Y3JlYXRlUmVuZGVyYnVm
ZmVyKCk7CiAgICAgfQogfQogCit2b2lkIERyYXdpbmdCdWZmZXI6OnJlc2l6ZURlcHRoU3RlbmNp
bChpbnQgc2FtcGxlQ291bnQpCit7CisgICAgY29uc3QgR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMmIGF0dHJpYnV0ZXMgPSBtX2NvbnRleHQtPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7Cisg
ICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGggJiYgYXR0cmlidXRlcy5zdGVuY2lsICYmIG1fcGFja2Vk
RGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKSB7CisgICAgICAgIGlmICghbV9kZXB0aFN0
ZW5jaWxCdWZmZXIpCisgICAgICAgICAgICBtX2RlcHRoU3RlbmNpbEJ1ZmZlciA9IG1fY29udGV4
dC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7CisgICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZl
cik7CisgICAgICAgIGlmIChtdWx0aXNhbXBsZSgpKQorICAgICAgICAgICAgbV9jb250ZXh0LT5n
ZXRFeHRlbnNpb25zKCktPnJlbmRlcmJ1ZmZlclN0b3JhZ2VNdWx0aXNhbXBsZShHcmFwaGljc0Nv
bnRleHQzRDo6UkVOREVSQlVGRkVSLCBzYW1wbGVDb3VudCwgRXh0ZW5zaW9uczNEOjpERVBUSDI0
X1NURU5DSUw4LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbV9jb250ZXh0LT5yZW5kZXJidWZmZXJTdG9yYWdlKEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIsIEV4dGVuc2lvbnMzRDo6REVQVEgyNF9TVEVOQ0lMOCwgbV9z
aXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVi
dWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVS
QlVGRkVSLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7CisgICAgICAgIG1fY29udGV4dC0+ZnJhbWVi
dWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUiwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChh
dHRyaWJ1dGVzLmRlcHRoKSB7CisgICAgICAgICAgICBpZiAoIW1fZGVwdGhCdWZmZXIpCisgICAg
ICAgICAgICAgICAgbV9kZXB0aEJ1ZmZlciA9IG1fY29udGV4dC0+Y3JlYXRlUmVuZGVyYnVmZmVy
KCk7CisgICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7CisgICAgICAgICAgICBpZiAobXVs
dGlzYW1wbGUoKSkKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+
cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVIsIHNhbXBsZUNvdW50LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTYs
IG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIG1fY29udGV4dC0+cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRl
eHQzRDo6UkVOREVSQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTYs
IG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgbV9jb250ZXh0
LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIs
IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6
UkVOREVSQlVGRkVSLCBtX2RlcHRoQnVmZmVyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYXR0
cmlidXRlcy5zdGVuY2lsKSB7CisgICAgICAgICAgICBpZiAoIW1fc3RlbmNpbEJ1ZmZlcikKKyAg
ICAgICAgICAgICAgICBtX3N0ZW5jaWxCdWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1
ZmZlcigpOworICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fc3RlbmNpbEJ1ZmZlcik7CisgICAgICAgICAgICBp
ZiAobXVsdGlzYW1wbGUoKSkKKyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lv
bnMoKS0+cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9JTkRF
WDgsIG1fc2l6ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOworICAgICAgICAgICAgZWxzZSAK
KyAgICAgICAgICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfSU5ERVg4
LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsKKyAgICAgICAgICAgIG1fY29udGV4
dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCBtX3N0ZW5jaWxCdWZmZXIpOworICAgICAgICB9CisgICAgfQorICAg
IG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSLCAwKTsKK30KKwogdm9pZCBEcmF3aW5nQnVmZmVyOjpyZXNldChjb25zdCBJbnRTaXplJiBu
ZXdTaXplKQogewogICAgIGlmIChtX3NpemUgPT0gbmV3U2l6ZSkKQEAgLTEyMCw3ICsxNTUsNyBA
QCB2b2lkIERyYXdpbmdCdWZmZXI6OnJlc2V0KGNvbnN0IEludFNpemUmCiAgICAgbV9jb250ZXh0
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICAKICAgICBjb25zdCBHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyYgYXR0cmlidXRlcyA9IG1fY29udGV4dC0+Z2V0Q29udGV4dEF0dHJpYnV0
ZXMoKTsKLSAgICB1bnNpZ25lZCBsb25nIGludGVybmFsQ29sb3JGb3JtYXQsIGNvbG9yRm9ybWF0
LCBpbnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCA9IDA7CisgICAgdW5zaWduZWQgbG9uZyBpbnRl
cm5hbENvbG9yRm9ybWF0LCBjb2xvckZvcm1hdDsKICAgICBpZiAoYXR0cmlidXRlcy5hbHBoYSkg
ewogICAgICAgICBpbnRlcm5hbENvbG9yRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7
CiAgICAgICAgIGNvbG9yRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkE7CkBAIC0xMjgs
MTcgKzE2Myw3IEBAIHZvaWQgRHJhd2luZ0J1ZmZlcjo6cmVzZXQoY29uc3QgSW50U2l6ZSYKICAg
ICAgICAgaW50ZXJuYWxDb2xvckZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpSR0I7CiAgICAg
ICAgIGNvbG9yRm9ybWF0ID0gR3JhcGhpY3NDb250ZXh0M0Q6OlJHQjsKICAgICB9Ci0gICAgaWYg
KGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSB7Ci0gICAgICAgIC8vIFdl
IGRvbid0IGFsbG93IHRoZSBsb2dpYyB3aGVyZSBzdGVuY2lsIGlzIHJlcXVpcmVkIGFuZCBkZXB0
aCBpcyBub3QuCi0gICAgICAgIC8vIFNlZSBHcmFwaGljc0NvbnRleHQzRCBjb25zdHJ1Y3Rvci4K
LQotICAgICAgICAvLyBGSVhNRTogIElmIHBhY2tlZCBkZXB0aC9zdGVuY2lsIGlzIG5vdCBzdXBw
b3J0ZWQsIHdlIHNob3VsZAotICAgICAgICAvLyBjcmVhdGUgc2VwYXJhdGUgcmVuZGVyYnVmZmVy
cyBmb3IgZGVwdGggYW5kIHN0ZW5jaWwuCi0gICAgICAgIGlmIChhdHRyaWJ1dGVzLnN0ZW5jaWwg
JiYgYXR0cmlidXRlcy5kZXB0aCAmJiBtX3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBv
cnRlZCkKLSAgICAgICAgICAgIGludGVybmFsRGVwdGhTdGVuY2lsRm9ybWF0ID0gRXh0ZW5zaW9u
czNEOjpERVBUSDI0X1NURU5DSUw4OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBpbnRlcm5h
bERlcHRoU3RlbmNpbEZvcm1hdCA9IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQx
NjsKLSAgICB9CisKIAogICAgIC8vIHJlc2l6ZSBtdWx0aXNhbXBsZSBGQk8KICAgICBpZiAobXVs
dGlzYW1wbGUoKSkgewpAQCAtMTUyLDE1ICsxNzcsNyBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OnJl
c2V0KGNvbnN0IEludFNpemUmCiAgICAgICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIp
OwogICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+cmVuZGVyYnVmZmVyU3RvcmFn
ZU11bHRpc2FtcGxlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50
LCBpbnRlcm5hbENvbG9yRm9ybWF0LCBtX3NpemUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpKTsK
ICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVy
KTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuc3RlbmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSB7
Ci0gICAgICAgICAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0gICAg
ICAgICAgICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+cmVuZGVyYnVmZmVyU3RvcmFnZU11
bHRpc2FtcGxlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBp
bnRlcm5hbERlcHRoU3RlbmNpbEZvcm1hdCwgbV9zaXplLndpZHRoKCksIG1fc2l6ZS5oZWlnaHQo
KSk7Ci0gICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVuY2lsKQotICAgICAgICAgICAgICAg
IG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9BVFRBQ0hNRU5ULCBHcmFwaGlj
c0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVy
KTsKLSAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVzLmRlcHRoKQotICAgICAgICAgICAgICAgIG1f
Y29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1F
QlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Ci0g
ICAgICAgIH0KLSAgICAgICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29u
dGV4dDNEOjpSRU5ERVJCVUZGRVIsIDApOworICAgICAgICByZXNpemVEZXB0aFN0ZW5jaWwoc2Ft
cGxlQ291bnQpOwogICAgICAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSX0NPTVBMRVRFKSB7CiAgICAgICAgICAgICAvLyBDbGVhbnVwCiAgICAgICAgICAg
ICBjbGVhcigpOwpAQCAtMTc1LDE1ICsxOTIsNyBAQCB2b2lkIERyYXdpbmdCdWZmZXI6OnJlc2V0
KGNvbnN0IEludFNpemUmCiAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBpbnRlcm5hbENvbG9yRm9ybWF0LCBtX3Np
emUud2lkdGgoKSwgbV9zaXplLmhlaWdodCgpLCAwLCBjb2xvckZvcm1hdCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpOwogICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09M
T1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVm
ZmVyLCAwKTsKICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCAwKTsKLSAgICBpZiAoIW11bHRpc2FtcGxlKCkgJiYgKGF0dHJpYnV0ZXMuc3Rl
bmNpbCB8fCBhdHRyaWJ1dGVzLmRlcHRoKSkgewotICAgICAgICBtX2NvbnRleHQtPmJpbmRSZW5k
ZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aFN0ZW5jaWxC
dWZmZXIpOwotICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgaW50ZXJuYWxEZXB0aFN0ZW5jaWxGb3JtYXQsIG1fc2l6
ZS53aWR0aCgpLCBtX3NpemUuaGVpZ2h0KCkpOwotICAgICAgICBpZiAoYXR0cmlidXRlcy5zdGVu
Y2lsKQotICAgICAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX0FU
VEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2ls
QnVmZmVyKTsKLSAgICAgICAgaWYgKGF0dHJpYnV0ZXMuZGVwdGgpCi0gICAgICAgICAgICBtX2Nv
bnRleHQtPmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJV
RkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4
dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgbV9jb250
ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIDAp
OwotICAgIH0KKyAgICByZXNpemVEZXB0aFN0ZW5jaWwoMCk7CiAgICAgaWYgKG1fY29udGV4dC0+
Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIpICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVURSkgewogICAgICAgICAvLyBD
bGVhbnVwCiAgICAgICAgIGNsZWFyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgJKHJldmlzaW9uIDc2MDM2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0RyYXdpbmdCdWZmZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsOCBAQCBwdWJsaWM6CiAgICAgLy8gQ3JlYXRlIHRo
ZSBkZXB0aC9zdGVuY2lsIGFuZCBtdWx0aXNhbXBsZSBidWZmZXJzLCBpZiBuZWVkZWQuCiAgICAg
dm9pZCBjcmVhdGVTZWNvbmRhcnlCdWZmZXJzKCk7CiAgICAgCisgICAgdm9pZCByZXNpemVEZXB0
aFN0ZW5jaWwoaW50IHNhbXBsZUNvdW50KTsKKwogICAgIC8vIENvcGllcyB0aGUgbXVsdGlzYW1w
bGUgY29sb3IgYnVmZmVyIHRvIHRoZSBub3JtYWwgY29sb3IgYnVmZmVyIGFuZCBsZWF2ZXMgbV9m
Ym8gYm91bmQKICAgICB2b2lkIGNvbW1pdChsb25nIHggPSAwLCBsb25nIHkgPSAwLCBsb25nIHdp
ZHRoID0gLTEsIGxvbmcgaGVpZ2h0ID0gLTEpOwogICAgIApAQCAtMTA2LDEzICsxMDgsMTggQEAg
cHJpdmF0ZToKICAgICBib29sIG1fcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVk
OwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mYm87CiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX2Nv
bG9yQnVmZmVyOworCisgICAgLy8gVGhpcyBpcyB1c2VkIHdoZW4gd2UgaGF2ZSBPRVNfcGFja2Vk
X2RlcHRoX3N0ZW5jaWwuCiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX2RlcHRoU3RlbmNpbEJ1ZmZl
cjsKIAorICAgIC8vIFRoZXNlIGFyZSB1c2VkIHdoZW4gd2UgZG9uJ3QuCisgICAgUGxhdGZvcm0z
RE9iamVjdCBtX2RlcHRoQnVmZmVyOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9zdGVuY2lsQnVm
ZmVyOworCiAgICAgLy8gRm9yIG11bHRpc2FtcGxpbmcKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1f
bXVsdGlzYW1wbGVGQk87CiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX211bHRpc2FtcGxlQ29sb3JC
dWZmZXI7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVm
ZmVyOwotICAgIAorCiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgT3duUHRyPFdpbGxQdWJs
aXNoQ2FsbGJhY2s+IG1fY2FsbGJhY2s7CiAgICAgT3duUHRyPERyYXdpbmdCdWZmZXJJbnRlcm5h
bD4gbV9pbnRlcm5hbDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcAkocmV2
aXNpb24gNzYwMzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hh
cmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw5IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIFBhc3NSZWZQdHI8U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q+
IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoSG9zdFdpbmRvdyogaG9zdFdpbmRvdykK
IHsKICAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRyOworICAgIGF0dHIuZGVw
dGggPSBmYWxzZTsKKyAgICBhdHRyLnN0ZW5jaWwgPSB0cnVlOworICAgIGF0dHIuYW50aWFsaWFz
ID0gZmFsc2U7CiAgICAgYXR0ci5jYW5SZWNvdmVyRnJvbUNvbnRleHRMb3NzID0gZmFsc2U7IC8v
IENhbnZhcyBjb250ZXh0cyBjYW4gbm90IGhhbmRsZSBsb3N0IGNvbnRleHRzLgogICAgIFJlZlB0
cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUo
YXR0ciwgaG9zdFdpbmRvdyk7CiAgICAgaWYgKCFjb250ZXh0KQpAQCAtMjkzLDYgKzI5NiwxNCBA
QCB2b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjphcHBseUNvbXBvCiAgICAgfQogfQogCit2
b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVTdGVuY2lsKGJvb2wgZW5hYmxlKQor
eworICAgIGlmIChlbmFibGUpCisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX1RFU1QpOworICAgIGVsc2UKKyAgICAgICAgbV9jb250ZXh0LT5kaXNh
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lMX1RFU1QpOworfQorCiB2b2lkIFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEOjp1c2VRdWFkVmVydGljZXMoKQogewogICAgIGlmICghbV9xdWFkVmVy
dGljZXMpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFy
ZWRHcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA3NjAz
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGlj
c0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw2ICs5MCw3IEBAIHB1YmxpYzoKIAog
ICAgIC8vIFNoYXJlZCBsb2dpYyBmb3IgY2FudmFzIDJkCiAgICAgdm9pZCBhcHBseUNvbXBvc2l0
ZU9wZXJhdG9yKENvbXBvc2l0ZU9wZXJhdG9yKTsKKyAgICB2b2lkIGVuYWJsZVN0ZW5jaWwoYm9v
bCBlbmFibGUpOwogICAgIHZvaWQgdXNlUXVhZFZlcnRpY2VzKCk7CiAKICAgICB2b2lkIHVzZUZp
bGxTb2xpZFByb2dyYW0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgQ29sb3ImKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9tYWMvRHJhd2luZ0J1ZmZl
ck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvbWFjL0RyYXdpbmdCdWZmZXJNYWMubW0JKHJldmlzaW9uIDc2MDM2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L21hYy9EcmF3aW5nQnVmZmVyTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSwxNSArNDEsMTYgQEAgRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZl
cihHcmFwaGljc0NvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIG11bHRpc2Ft
cGxlRXh0ZW5zaW9uU3VwcG9ydGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29s
IHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKICAgICA6IG1fY29udGV4dChj
b250ZXh0KQotICAgICwgbV9zaXplKHNpemUpCisgICAgLCBtX3NpemUoLTEsIC0xKQogICAgICwg
bV9tdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZChtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBv
cnRlZCkKICAgICAsIG1fcGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKHBhY2tl
ZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1cHBvcnRlZCkKICAgICAsIG1fZmJvKGNvbnRleHQtPmNy
ZWF0ZUZyYW1lYnVmZmVyKCkpCiAgICAgLCBtX2NvbG9yQnVmZmVyKDApCiAgICAgLCBtX2RlcHRo
U3RlbmNpbEJ1ZmZlcigwKQorICAgICwgbV9kZXB0aEJ1ZmZlcigwKQorICAgICwgbV9zdGVuY2ls
QnVmZmVyKDApCiAgICAgLCBtX211bHRpc2FtcGxlRkJPKDApCiAgICAgLCBtX211bHRpc2FtcGxl
Q29sb3JCdWZmZXIoMCkKLSAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkK
IHsKICAgICBBU1NFUlQobV9mYm8pOwogICAgIGlmICghbV9mYm8pIHsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGlj
c0NvbnRleHRTa2lhLmNwcAkocmV2aXNpb24gNzYwMzYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zODYsNiArMzg2LDkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0NsaXAoY29u
c3QgUAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAorICAg
IGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpCisgICAgICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5ncHVDYW52YXMoKS0+Y2xpcFBhdGgocGF0aCk7CisKICAgICBjb25zdCBTa1BhdGgmIHAg
PSAqcGF0aC5wbGF0Zm9ybVBhdGgoKTsKICAgICBpZiAoIWlzUGF0aFNraWFTYWZlKGdldENUTSgp
LCBwKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDEwLDYgKzQxMyw5IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CiAKKyAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgpKQor
ICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCktPmNsaXBPdXQocCk7CisKICAg
ICBjb25zdCBTa1BhdGgmIHBhdGggPSAqcC5wbGF0Zm9ybVBhdGgoKTsKICAgICBpZiAoIWlzUGF0
aFNraWFTYWZlKGdldENUTSgpLCBwYXRoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDIyLDYgKzQy
OCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChjb25zdCBQYXQKICAgICBpZiAo
cGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBpZiAocGxhdGZvcm1D
b250ZXh0KCktPnVzZUdQVSgpKQorICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFz
KCktPmNsaXBQYXRoKHBhdGhUb0NsaXApOworCiAgICAgLy8gRklYTUU6IEJlIHNtYXJ0ZXIgYWJv
dXQgdGhpcy4KICAgICBiZWdpblBhdGgoKTsKICAgICBhZGRQYXRoKHBhdGhUb0NsaXApOwpAQCAt
NzMzLDYgKzc0MiwxMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0
CiAgICAgYmVnaW5QYXRoKCk7CiAgICAgYWRkUGF0aChwYXRoVG9GaWxsKTsKIAorICAgIGlmIChw
bGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkgJiYgcGxhdGZvcm1Db250ZXh0KCktPmNhbkFjY2Vs
ZXJhdGUoKSkgeworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvckhhcmR3YXJl
RHJhdygpOworICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCktPmZpbGxQYXRo
KHBhdGhUb0ZpbGwpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgU2tQYXRoIHBhdGgg
PSBwbGF0Zm9ybUNvbnRleHQoKS0+Y3VycmVudFBhdGhJbkxvY2FsQ29vcmRpbmF0ZXMoKTsKICAg
ICBpZiAoIWlzUGF0aFNraWFTYWZlKGdldENUTSgpLCBwYXRoKSkKICAgICAgIHJldHVybjsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0
U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkocmV2aXNpb24gNzYwMzYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MDIsOCArNzAyLDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lh
OjphcHBseUFudGlBbGlhcwogYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpjYW5BY2NlbGVyYXRl
KCkgY29uc3QKIHsKICAgICByZXR1cm4gIW1fc3RhdGUtPm1fZmlsbFNoYWRlciAvLyBDYW4ndCBh
Y2NlbGVyYXRlIHdpdGggYSBmaWxsIGdyYWRpZW50IG9yIHBhdHRlcm4uCi0gICAgICAgICYmICFt
X3N0YXRlLT5tX2xvb3BlciAvLyBDYW4ndCBhY2NlbGVyYXRlIHdpdGggYSBzaGFkb3cuCi0gICAg
ICAgICYmICFtX3N0YXRlLT5tX2NhbnZhc0NsaXBBcHBsaWVkOyAvLyBDYW4ndCBhY2NlbGVyYXRl
IHdpdGggYSBjbGlwIHRvIHBhdGggYXBwbGllZC4KKyAgICAgICAgJiYgIW1fc3RhdGUtPm1fbG9v
cGVyOyAvLyBDYW4ndCBhY2NlbGVyYXRlIHdpdGggYSBzaGFkb3cuCiB9CiAKIGJvb2wgUGxhdGZv
cm1Db250ZXh0U2tpYTo6Y2FudmFzQ2xpcEFwcGxpZWQoKSBjb25zdApAQCAtODQ4LDcgKzg0Nyw3
IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6dXBsb2FkU29mdHdhcmUKIAogICAgIG1fdXBs
b2FkVGV4dHVyZS0+dXBkYXRlU3ViUmVjdChiaXRtYXAuZ2V0UGl4ZWxzKCksIG1fc29mdHdhcmVE
aXJ0eVJlY3QpOwogICAgIEFmZmluZVRyYW5zZm9ybSBpZGVudGl0eTsKLSAgICBncHVDYW52YXMo
KS0+ZHJhd1RleHR1cmVkUmVjdChtX3VwbG9hZFRleHR1cmUuZ2V0KCksIG1fc29mdHdhcmVEaXJ0
eVJlY3QsIG1fc29mdHdhcmVEaXJ0eVJlY3QsIGlkZW50aXR5LCAxLjAsIENvbG9yU3BhY2VEZXZp
Y2VSR0IsIG9wKTsKKyAgICBncHVDYW52YXMoKS0+ZHJhd1RleHR1cmVkUmVjdChtX3VwbG9hZFRl
eHR1cmUuZ2V0KCksIG1fc29mdHdhcmVEaXJ0eVJlY3QsIG1fc29mdHdhcmVEaXJ0eVJlY3QsIGlk
ZW50aXR5LCAxLjAsIENvbG9yU3BhY2VEZXZpY2VSR0IsIG9wLCBmYWxzZSk7CiAgICAgLy8gQ2xl
YXIgb3V0IHRoZSByZWdpb24gb2YgdGhlIHNvZnR3YXJlIGNhbnZhcyB3ZSBqdXN0IHVwbG9hZGVk
LgogICAgIG1fY2FudmFzLT5zYXZlKCk7CiAgICAgbV9jYW52YXMtPnJlc2V0TWF0cml4KCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9SRUFETUUud2Via2l0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L1JFQURNRS53ZWJraXQJKHJldmlz
aW9uIDc2MDM2KQorKysgU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvUkVBRE1FLndlYmtp
dAkod29ya2luZyBjb3B5KQpAQCAtMzEsMyArMzEsMTIgQEAgVGhlIGZvbGxvd2luZyBjaGFuZ2Vz
IHdlcmUgbWFkZSBpbiBvcmRlcgogICAgIG9mIHRoZSB1bnVzZWQgTm9ybWFsaXplIGZ1bmN0aW9u
LgogCiAgIC0gSW4gcHJpb3JpdHlxLWhlYXAuYywgYW4gI2luY2x1ZGUgb2YgPGxpbWl0cy5oPiB3
YXMgYWRkZWQuCisKKyAgLSBJbiBzd2VlcC5jLCBJc1dpbmRpbmdJbnNpZGUoKSB3YXMgZ2l2ZW4g
YSByZXR1cm4gdmFsdWUgdG8gc2lsZW5jZSBhCisgICAgd2FybmluZy1hcy1lcnJvciBpbiByZWxl
YXNlIGJ1aWxkcy4KKworICAtIEluIHN3ZWVwLmMsIERvbmVFZGdlRGljdCgpJ3MgZml4ZWRFZGdl
cyB3YXMgd3JhcHBlZCBpbiAjaW5kZWYgTkRFQlVHLCB0bworICAgIHNpbGVuY2UgYSB3YXJuaW5n
LWFzLWVycm9yIGluIHJlbGVhc2UgYnVpbGRzLgorCisgIC0gSW4gcHJpb3JpdHlxLmMsIHJlbmRl
ci5jLCBhbmQgb3RoZXJzOiAgdGhlIGNvbnN0cnVjdCAiaWYoMSkuLi5lbHNlIiB3YXMKKyAgcmVw
bGFjZWQgd2l0aCAiZG97Li4ufXdoaWxlKDEpIiB0byBzaWxlbmNlIGEgd2FybmluZy1hcy1lcnJv
ciBpbiBNYWMgYnVpbGRzLgpJbmRleDogU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvZ2x1
b3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9nbHVvcy5o
CShyZXZpc2lvbiA3NjAzNikKKysrIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2dsdW9z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDQgKzQyLDcgQEAgdHlwZWRlZiB1bnNpZ25lZCBpbnQg
R0xlbnVtOwogdHlwZWRlZiBmbG9hdCBHTGZsb2F0OwogdHlwZWRlZiB2b2lkIEdMdm9pZDsKIAor
I3VuZGVmIE1JTgorI3VuZGVmIE1BWAorCiAjZW5kaWYgIC8vIEdMVU9TX0hfCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2dlb20uYwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2dlb20uYwkocmV2aXNpb24gNzYw
MzYpCisrKyBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL2dlb20uYwkod29y
a2luZyBjb3B5KQpAQCAtMjA1LDcgKzIwNSw3IEBAIHByaW50ZigiKioqKioqKioqKioqKioqKioq
KioqJWRcbiIsUmFuZG8KIAogI2VuZGlmCiAKLSNkZWZpbmUgU3dhcChhLGIpCWlmICgxKSB7IEdM
VXZlcnRleCAqdCA9IGE7IGEgPSBiOyBiID0gdDsgfSBlbHNlCisjZGVmaW5lIFN3YXAoYSxiKQlk
byB7IEdMVXZlcnRleCAqdCA9IGE7IGEgPSBiOyBiID0gdDsgfSB3aGlsZSgwKQogCiB2b2lkIF9f
Z2xfZWRnZUludGVyc2VjdCggR0xVdmVydGV4ICpvMSwgR0xVdmVydGV4ICpkMSwKIAkJCSBHTFV2
ZXJ0ZXggKm8yLCBHTFV2ZXJ0ZXggKmQyLApJbmRleDogU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0
eS9nbHUvbGlidGVzcy9wcmlvcml0eXEuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS90
aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3ByaW9yaXR5cS5jCShyZXZpc2lvbiA3NjAzNikKKysrIFNv
dXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcHJpb3JpdHlxLmMJKHdvcmtpbmcg
Y29weSkKQEAgLTkyLDcgKzkyLDcgQEAgdm9pZCBwcURlbGV0ZVByaW9yaXR5USggUHJpb3JpdHlR
ICpwcSApCiAKICNkZWZpbmUgTFQoeCx5KQkJKCEgTEVRKHkseCkpCiAjZGVmaW5lIEdUKHgseSkJ
CSghIExFUSh4LHkpKQotI2RlZmluZSBTd2FwKGEsYikJaWYoMSl7UFFrZXkgKnRtcCA9ICphOyAq
YSA9ICpiOyAqYiA9IHRtcDt9ZWxzZQorI2RlZmluZSBTd2FwKGEsYikJZG97UFFrZXkgKnRtcCA9
ICphOyAqYSA9ICpiOyAqYiA9IHRtcDt9d2hpbGUoMCkKIAogLyogcmVhbGx5IF9fZ2xfcHFTb3J0
SW5pdCAqLwogaW50IHBxSW5pdCggUHJpb3JpdHlRICpwcSApCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3JlbmRlci5jCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3MvcmVuZGVyLmMJKHJldmlzaW9uIDc2MDM2KQor
KysgU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9yZW5kZXIuYwkod29ya2lu
ZyBjb3B5KQpAQCAtMTUwLDExICsxNTAsMTEgQEAgc3RhdGljIHZvaWQgUmVuZGVyTWF4aW11bUZh
Y2VHcm91cCggR0xVdAogCiAjZGVmaW5lIEFkZFRvVHJhaWwoZix0KQkoKGYpLT50cmFpbCA9ICh0
KSwgKHQpID0gKGYpLCAoZiktPm1hcmtlZCA9IFRSVUUpCiAKLSNkZWZpbmUgRnJlZVRyYWlsKHQp
CWlmKCAxICkgeyBcCisjZGVmaW5lIEZyZWVUcmFpbCh0KQlkbyB7IFwKIAkJCSAgd2hpbGUoICh0
KSAhPSBOVUxMICkgeyBcCiAJCQkgICAgKHQpLT5tYXJrZWQgPSBGQUxTRTsgdCA9ICh0KS0+dHJh
aWw7IFwKIAkJCSAgfSBcCi0JCQl9IGVsc2UgLyogYWJzb3JiIHRyYWlsaW5nIHNlbWljb2xvbiAq
LworCQkJfSB3aGlsZSgwKSAvKiBhYnNvcmIgdHJhaWxpbmcgc2VtaWNvbG9uICovCiAKIAogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS90aGlyZHBhcnR5L2dsdS9saWJ0ZXNzL3N3ZWVwLmMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGhpcmRwYXJ0eS9nbHUvbGlidGVzcy9zd2VlcC5jCShy
ZXZpc2lvbiA3NjAzNikKKysrIFNvdXJjZS9XZWJDb3JlL3RoaXJkcGFydHkvZ2x1L2xpYnRlc3Mv
c3dlZXAuYwkod29ya2luZyBjb3B5KQpAQCAtMjUzLDYgKzI1Myw3IEBAIHN0YXRpYyBHTGJvb2xl
YW4gSXNXaW5kaW5nSW5zaWRlKCBHTFV0ZXMKICAgLypMSU5URUQqLwogICBhc3NlcnQoIEZBTFNF
ICk7CiAgIC8qTk9UUkVBQ0hFRCovCisgIHJldHVybiAwOwogfQogCiAKQEAgLTExNzMsNyArMTE3
NCw5IEBAIHN0YXRpYyB2b2lkIEluaXRFZGdlRGljdCggR0xVdGVzc2VsYXRvciAKIHN0YXRpYyB2
b2lkIERvbmVFZGdlRGljdCggR0xVdGVzc2VsYXRvciAqdGVzcyApCiB7CiAgIEFjdGl2ZVJlZ2lv
biAqcmVnOworI2lmbmRlZiBOREVCVUcKICAgaW50IGZpeGVkRWRnZXMgPSAwOworI2VuZGlmCiAK
ICAgLyogX19HTF9ESUNUTElTVEtFWSAqLyAvKiBfX0dMX0RJQ1RMSVNUTUlOICovCiAgIHdoaWxl
KCAocmVnID0gKEFjdGl2ZVJlZ2lvbiAqKWRpY3RLZXkoIGRpY3RNaW4oIHRlc3MtPmRpY3QgKSkp
ICE9IE5VTEwgKSB7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3NjAzNikKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExIEBACisyMDExLTAxLTE4ICBTdGVw
aGVuIFdoaXRlICA8c2Vub3JibGFuY29AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0d28gdG8tYmUtcmViYXNlbGluZWQg
dGVzdHMgZm9yIHRoZSBHUFUgcGF0aC4KKworICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtLWdw
dS90ZXN0X2V4cGVjdGF0aW9ucy50eHQ6CisKIDIwMTEtMDEtMTggIEpvaG4gS25vdHRlbmJlbHQg
IDxqa25vdHRlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9y
bG93LgpJbmRleDogTGF5b3V0VGVzdHMvcGxhdGZvcm0vY2hyb21pdW0tZ3B1L3Rlc3RfZXhwZWN0
YXRpb25zLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9jaHJvbWl1bS1n
cHUvdGVzdF9leHBlY3RhdGlvbnMudHh0CShyZXZpc2lvbiA3NjAzNikKKysrIExheW91dFRlc3Rz
L3BsYXRmb3JtL2Nocm9taXVtLWdwdS90ZXN0X2V4cGVjdGF0aW9ucy50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTM4NiwzICszODYsNyBAQCBCVUdXSzUxOTg5IFdJTiBMSU5VWCA6IGZhc3QvY2FudmFz
L2NhbnZhCiAKIC8vIFN0YXJ0ZWQgZmFpbGluZyBhZnRlciByNzU2NDggb24gZXZlcnl0aGluZyBl
eGNlcHQgU25vdyBMZW9wYXJkCiBCVUdXSzUyMzQxIDogZmFzdC9jYW52YXMvY2FudmFzLWxhcmdl
LWRpbWVuc2lvbnMuaHRtbCA9IFRFWFQKKworLy8gVGhlc2Ugd2lsbCBuZWVkIHRvIHJlYmFzZWxp
bmVkIGFmdGVyIHRoZSBuZXcgcGF0aCBkcmF3aW5nIGxhbmRzLgorQlVHX1NFTk9SQkxBTkNPIFdJ
TiBMSU5VWCA6IGZhc3QvY2FudmFzL2NhbnZhcy1jb21wb3NpdGUuaHRtbCA9IElNQUdFCitCVUdf
U0VOT1JCTEFOQ08gV0lOIExJTlVYIDogZmFzdC9jYW52YXMvY2FudmFzLXRyYW5zZm9ybS1za2V3
ZWQuaHRtbCA9IElNQUdFCg==
</data>
<flag name="review"
          id="70715"
          type_id="1"
          status="+"
          setter="jamesr"
    />
          </attachment>
      

    </bug>

</bugzilla>