<?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>84808</bug_id>
          
          <creation_ts>2012-04-24 17:16:41 -0700</creation_ts>
          <short_desc>[chromium] Move ProgramBinding definitions to LayerRendererChromium and normalize naming</short_desc>
          <delta_ts>2012-04-26 20:21:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>cc-bugs</cc>
    
    <cc>enne</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>609285</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-04-24 17:16:41 -0700</bug_when>
    <thetext>[chromium] Move ProgramBinding definitions to LayerRendererChromium and normalize naming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609295</commentid>
    <comment_count>1</comment_count>
      <attachid>138698</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-04-24 17:24:34 -0700</bug_when>
    <thetext>Created attachment 138698
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>609831</commentid>
    <comment_count>2</comment_count>
      <attachid>138698</attachid>
    <who name="Dana Jansens">danakj</who>
    <bug_when>2012-04-25 09:23:41 -0700</bug_when>
    <thetext>Comment on attachment 138698
Patch

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

+1

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h:214
&gt; +    // FIXME: Add a quad type for render surfaces and get rid of this friendlyness.

nit: quad type exists. We want to move the drawing of said quads into LRC :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610236</commentid>
    <comment_count>3</comment_count>
      <attachid>138698</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-25 17:55:15 -0700</bug_when>
    <thetext>Comment on attachment 138698
Patch

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

R♥ to all the program renames, inclusion removal, and program deduplication.

&gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1012
&gt; -            binding.set(textureLayerProgramStretchFlip());
&gt; +            binding.set(textureTexRectProgramFlip());

...but you&apos;re changing the fragment shader here from FragmentShaderRGBATexFlipAlpha to FragmentShaderRGBATexRectFlipAlpha (the io surface one) for the non-io surface path.  Good thing our testing covers this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610370</commentid>
    <comment_count>4</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-04-25 22:53:55 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 138698 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=138698&amp;action=review
&gt; 
&gt; R♥ to all the program renames, inclusion removal, and program deduplication.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1012
&gt; &gt; -            binding.set(textureLayerProgramStretchFlip());
&gt; &gt; +            binding.set(textureTexRectProgramFlip());
&gt; 
&gt; ...but you&apos;re changing the fragment shader here from FragmentShaderRGBATexFlipAlpha to FragmentShaderRGBATexRectFlipAlpha (the io surface one) for the non-io surface path.  Good thing our testing covers this.

Damn!  Guessing the testing comment is sarcasm?  TexRect is for ARB_texture_rectangle I guess but it&apos;s too easy to confuse with all the other things talking about textures and rectangles.  Will take another shot at this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>610384</commentid>
    <comment_count>5</comment_count>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-25 23:58:10 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 138698 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=138698&amp;action=review
&gt; &gt; 
&gt; &gt; R♥ to all the program renames, inclusion removal, and program deduplication.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp:1012
&gt; &gt; &gt; -            binding.set(textureLayerProgramStretchFlip());
&gt; &gt; &gt; +            binding.set(textureTexRectProgramFlip());
&gt; &gt; 
&gt; &gt; ...but you&apos;re changing the fragment shader here from FragmentShaderRGBATexFlipAlpha to FragmentShaderRGBATexRectFlipAlpha (the io surface one) for the non-io surface path.  Good thing our testing covers this.
&gt; 
&gt; Damn!  Guessing the testing comment is sarcasm?  TexRect is for ARB_texture_rectangle I guess but it&apos;s too easy to confuse with all the other things talking about textures and rectangles.  Will take another shot at this.

As a random thought, maybe it&apos;d be worth changing the name of it to textureIOSurfaceProgramFlip() to talk more about how it should be used and less about what its implementation details are?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611143</commentid>
    <comment_count>6</comment_count>
      <attachid>139115</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-04-26 18:08:36 -0700</bug_when>
    <thetext>Created attachment 139115
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611147</commentid>
    <comment_count>7</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-04-26 18:10:57 -0700</bug_when>
    <thetext>I&apos;ve renamed the IOSurface programs to have &quot;IOSurface&quot; in the name and fixed TextureProgram / TextureProgramFlip to be what we want and removed a somewhat silly no-vertex-transform path for flipped texture quads.  Doing this also meant that the VideoRGBAProgram could be combined with the TextureProgram

Diff to previous patch:


diff --git a/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp b/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
index 7c30165..034b547 100644
--- a/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
+++ b/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.cpp
@@ -868,7 +868,7 @@ void LayerRendererChromium::drawSingleTextureVideoQuad(const CCVideoDrawQuad* qu
 
 void LayerRendererChromium::drawRGBA(const CCVideoDrawQuad* quad)
 {
-    const VideoRGBAProgram* program = videoRGBAProgram();
+    const TextureProgram* program = textureProgram();
     const CCVideoLayerImpl::Texture&amp; texture = quad-&gt;textures()[WebKit::WebVideoFrame::rgbPlane];
     float widthScaleFactor = static_cast&lt;float&gt;(texture.m_visibleSize.width()) / texture.m_texture-&gt;size().width();
     drawSingleTextureVideoQuad(quad, program, widthScaleFactor, texture.m_texture-&gt;textureId(), GraphicsContext3D::TEXTURE_2D);
@@ -876,7 +876,7 @@ void LayerRendererChromium::drawRGBA(const CCVideoDrawQuad* quad)
 
 void LayerRendererChromium::drawNativeTexture2D(const CCVideoDrawQuad* quad)
 {
-    drawSingleTextureVideoQuad(quad, videoRGBAProgram(), 1, quad-&gt;frame()-&gt;textureId(), GraphicsContext3D::TEXTURE_2D);
+    drawSingleTextureVideoQuad(quad, textureProgram(), 1, quad-&gt;frame()-&gt;textureId(), GraphicsContext3D::TEXTURE_2D);
 }
 
 void LayerRendererChromium::drawStreamTexture(const CCVideoDrawQuad* quad)
@@ -986,9 +986,9 @@ void LayerRendererChromium::drawTextureQuad(const CCTextureDrawQuad* quad)
     if (quad-&gt;ioSurfaceTextureId()) {
         TexTransformTextureProgramBinding binding;
         if (quad-&gt;flipped())
-            binding.set(textureTexRectProgramFlip());
+            binding.set(textureIOSurfaceProgramFlip());
         else
-            binding.set(textureTexRectProgram());
+            binding.set(textureIOSurfaceProgram());
 
         GLC(context(), context()-&gt;activeTexture(GraphicsContext3D::TEXTURE0));
 
@@ -998,20 +998,12 @@ void LayerRendererChromium::drawTextureQuad(const CCTextureDrawQuad* quad)
 
         matrixLocation = binding.matrixLocation;
         alphaLocation = binding.alphaLocation;
-    } else if (quad-&gt;flipped() &amp;&amp; quad-&gt;uvRect() == FloatRect(0, 0, 1, 1)) {
-        // A flipped quad with the default UV mapping is common enough to use a special shader.
-        // Canvas 2d and WebGL layers use this path always and plugin/external texture layers use this by default.
-        const TextureProgramFlip* program = textureProgramFlip();
-        GLC(context(), context()-&gt;useProgram(program-&gt;program()));
-        GLC(context(), context()-&gt;uniform1i(program-&gt;fragmentShader().samplerLocation(), 0));
-        matrixLocation = program-&gt;vertexShader().matrixLocation();
-        alphaLocation = program-&gt;fragmentShader().alphaLocation();
     } else {
         TexTransformTextureProgramBinding binding;
         if (quad-&gt;flipped())
-            binding.set(textureTexRectProgramFlip());
+            binding.set(textureProgramFlip());
         else
-            binding.set(textureTexRectProgram());
+            binding.set(textureProgram());
         GLC(context(), context()-&gt;useProgram(binding.programId));
         GLC(context(), context()-&gt;uniform1i(binding.samplerLocation, 0));
         const FloatRect&amp; uvRect = quad-&gt;uvRect();
@@ -1532,48 +1524,48 @@ const LayerRendererChromium::TileProgramSwizzleAA* LayerRendererChromium::tilePr
     return m_tileProgramSwizzleAA.get();
 }
 
+const LayerRendererChromium::TextureProgram* LayerRendererChromium::textureProgram()
+{
+    if (!m_textureProgram)
+        m_textureProgram = adoptPtr(new TextureProgram(m_context.get()));
+    if (!m_textureProgram-&gt;initialized()) {
+        TRACE_EVENT(&quot;LayerRendererChromium::textureProgram::initialize&quot;, this, 0);
+        m_textureProgram-&gt;initialize(m_context.get());
+    }
+    return m_textureProgram.get();
+}
+
 const LayerRendererChromium::TextureProgramFlip* LayerRendererChromium::textureProgramFlip()
 {
     if (!m_textureProgramFlip)
         m_textureProgramFlip = adoptPtr(new TextureProgramFlip(m_context.get()));
     if (!m_textureProgramFlip-&gt;initialized()) {
-        TRACE_EVENT(&quot;LayerRendererChromium::textureProgram::initialize&quot;, this, 0);
+        TRACE_EVENT(&quot;LayerRendererChromium::textureProgramFlip::initialize&quot;, this, 0);
         m_textureProgramFlip-&gt;initialize(m_context.get());
     }
     return m_textureProgramFlip.get();
 }
 
-const LayerRendererChromium::TextureTexRectProgram* LayerRendererChromium::textureTexRectProgram()
-{
-    if (!m_textureTexRectProgram)
-        m_textureTexRectProgram = adoptPtr(new TextureTexRectProgram(m_context.get()));
-        TRACE_EVENT(&quot;LayerRendererChromium::textureTexRectProgram::initialize&quot;, this, 0);
-        m_textureTexRectProgram-&gt;initialize(m_context.get());
-    }
-    return m_textureTexRectProgram.get();
-}
-
-const LayerRendererChromium::TextureTexRectProgramFlip* LayerRendererChromium::textureTexRectProgramFlip()
+const LayerRendererChromium::TextureIOSurfaceProgram* LayerRendererChromium::textureIOSurfaceProgram()
 {
-    if (!m_textureTexRectProgramFlip)
-        m_textureTexRectProgramFlip = adoptPtr(new TextureTexRectProgramFlip(m_context.get()));
-    if (!m_textureTexRectProgramFlip-&gt;initialized()) {
-        TRACE_EVENT(&quot;LayerRendererChromium::textureTexRectProgramFlip::initialize&quot;, this, 0);
-        m_textureTexRectProgramFlip-&gt;initialize(m_context.get());
+    if (!m_textureIOSurfaceProgram)
+        m_textureIOSurfaceProgram = adoptPtr(new TextureIOSurfaceProgram(m_context.get()));
+    if (!m_textureIOSurfaceProgram-&gt;initialized()) {
+        TRACE_EVENT(&quot;LayerRendererChromium::textureIOSurfaceProgram::initialize&quot;, this, 0);
+        m_textureIOSurfaceProgram-&gt;initialize(m_context.get());
     }
-    return m_textureTexRectProgramFlip.get();
+    return m_textureIOSurfaceProgram.get();
 }
 
-const LayerRendererChromium::VideoRGBAProgram* LayerRendererChromium::videoRGBAProgram()
+const LayerRendererChromium::TextureIOSurfaceProgramFlip* LayerRendererChromium::textureIOSurfaceProgramFlip()
 {
-    if (!m_videoRGBAProgram)
-        m_videoRGBAProgram = adoptPtr(new VideoRGBAProgram(m_context.get()));
-    if (!m_videoRGBAProgram-&gt;initialized()) {
-        TRACE_EVENT(&quot;LayerRendererChromium::videoRGBAProgram::initialize&quot;, this, 0);
-        m_videoRGBAProgram-&gt;initialize(m_context.get());
+    if (!m_textureIOSurfaceProgramFlip)
+        m_textureIOSurfaceProgramFlip = adoptPtr(new TextureIOSurfaceProgramFlip(m_context.get()));
+    if (!m_textureIOSurfaceProgramFlip-&gt;initialized()) {
+        TRACE_EVENT(&quot;LayerRendererChromium::textureIOSurfaceProgramFlip::initialize&quot;, this, 0);
+        m_textureIOSurfaceProgramFlip-&gt;initialize(m_context.get());
     }
-    return m_videoRGBAProgram.get();
+    return m_textureIOSurfaceProgramFlip.get();
 }
 
 const LayerRendererChromium::VideoYUVProgram* LayerRendererChromium::videoYUVProgram()
@@ -1628,15 +1620,15 @@ void LayerRendererChromium::cleanupSharedObjects()
     if (m_renderSurfaceProgramAA)
         m_renderSurfaceProgramAA-&gt;cleanup(m_context.get());
 
+    if (m_textureProgram)
+        m_textureProgram-&gt;cleanup(m_context.get());
     if (m_textureProgramFlip)
         m_textureProgramFlip-&gt;cleanup(m_context.get());
-    if (m_textureTexRectProgram)
-        m_textureTexRectProgram-&gt;cleanup(m_context.get());
-    if (m_textureTexRectProgramFlip)
-        m_textureTexRectProgramFlip-&gt;cleanup(m_context.get());
+    if (m_textureIOSurfaceProgram)
+        m_textureIOSurfaceProgram-&gt;cleanup(m_context.get());
+    if (m_textureIOSurfaceProgramFlip)
+        m_textureIOSurfaceProgramFlip-&gt;cleanup(m_context.get());
 
-    if (m_videoRGBAProgram)
-        m_videoRGBAProgram-&gt;cleanup(m_context.get());
     if (m_videoYUVProgram)
         m_videoYUVProgram-&gt;cleanup(m_context.get());
     if (m_videoStreamTextureProgram)
diff --git a/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h b/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h
index 490ca72..2f7dbc3 100644
--- a/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h
+++ b/Source/WebCore/platform/graphics/chromium/LayerRendererChromium.h
@@ -211,7 +211,7 @@ private:
 
     // Render surface shaders.
     // CCRenderSurface::drawLayers() needs to see these programs currently.
-    // FIXME: Add a quad type for render surfaces and get rid of this friendlyness.
+    // FIXME: Draw with a quad type for render surfaces and get rid of this friendlyness.
     friend class CCRenderSurface; 
     typedef ProgramBinding&lt;VertexShaderPosTex, FragmentShaderRGBATexAlpha&gt; RenderSurfaceProgram;
     typedef ProgramBinding&lt;VertexShaderPosTex, FragmentShaderRGBATexAlphaMask&gt; RenderSurfaceMaskProgram;
@@ -219,12 +219,12 @@ private:
     typedef ProgramBinding&lt;VertexShaderQuad, FragmentShaderRGBATexAlphaMaskAA&gt; RenderSurfaceMaskProgramAA;
 
     // Texture shaders.
-    typedef ProgramBinding&lt;VertexShaderPosTex, FragmentShaderRGBATexFlipAlpha&gt; TextureProgramFlip;
-    typedef ProgramBinding&lt;VertexShaderPosTexTransform, FragmentShaderRGBATexRectAlpha&gt; TextureTexRectProgram;
-    typedef ProgramBinding&lt;VertexShaderPosTexTransform, FragmentShaderRGBATexRectFlipAlpha&gt; TextureTexRectProgramFlip;
+    typedef ProgramBinding&lt;VertexShaderPosTexTransform, FragmentShaderRGBATexAlpha&gt; TextureProgram;
+    typedef ProgramBinding&lt;VertexShaderPosTexTransform, FragmentShaderRGBATexFlipAlpha&gt; TextureProgramFlip;
+    typedef ProgramBinding&lt;VertexShaderPosTexTransform, FragmentShaderRGBATexRectAlpha&gt; TextureIOSurfaceProgram;
+    typedef ProgramBinding&lt;VertexShaderPosTexTransform, FragmentShaderRGBATexRectFlipAlpha&gt; TextureIOSurfaceProgramFlip;
 
     // Video shaders.
-    typedef ProgramBinding&lt;VertexShaderPosTexTransform, FragmentShaderRGBATexFlipAlpha&gt; VideoRGBAProgram;
     typedef ProgramBinding&lt;VertexShaderVideoTransform, FragmentShaderOESImageExternal&gt; VideoStreamTextureProgram;
     typedef ProgramBinding&lt;VertexShaderPosTexYUVStretch, FragmentShaderYUVVideo&gt; VideoYUVProgram;
 
@@ -248,11 +248,11 @@ private:
     const RenderSurfaceMaskProgram* renderSurfaceMaskProgram();
     const RenderSurfaceMaskProgramAA* renderSurfaceMaskProgramAA();
 
+    const TextureProgram* textureProgram();
     const TextureProgramFlip* textureProgramFlip();
-    const TextureTexRectProgram* textureTexRectProgram();
-    const TextureTexRectProgramFlip* textureTexRectProgramFlip();
+    const TextureIOSurfaceProgram* textureIOSurfaceProgram();
+    const TextureIOSurfaceProgramFlip* textureIOSurfaceProgramFlip();
 
-    const VideoRGBAProgram* videoRGBAProgram();
     const VideoYUVProgram* videoYUVProgram();
     const VideoStreamTextureProgram* videoStreamTextureProgram();
 
@@ -273,11 +273,11 @@ private:
     OwnPtr&lt;RenderSurfaceMaskProgram&gt; m_renderSurfaceMaskProgram;
     OwnPtr&lt;RenderSurfaceMaskProgramAA&gt; m_renderSurfaceMaskProgramAA;
 
+    OwnPtr&lt;TextureProgram&gt; m_textureProgram;
     OwnPtr&lt;TextureProgramFlip&gt; m_textureProgramFlip;
-    OwnPtr&lt;TextureTexRectProgram&gt; m_textureTexRectProgram;
-    OwnPtr&lt;TextureTexRectProgramFlip&gt; m_textureTexRectProgramFlip;
+    OwnPtr&lt;TextureIOSurfaceProgram&gt; m_textureIOSurfaceProgram;
+    OwnPtr&lt;TextureIOSurfaceProgramFlip&gt; m_textureIOSurfaceProgramFlip;
 
-    OwnPtr&lt;VideoRGBAProgram&gt; m_videoRGBAProgram;
     OwnPtr&lt;VideoYUVProgram&gt; m_videoYUVProgram;
     OwnPtr&lt;VideoStreamTextureProgram&gt; m_videoStreamTextureProgram;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611149</commentid>
    <comment_count>8</comment_count>
      <attachid>139115</attachid>
    <who name="Adrienne Walker">enne</who>
    <bug_when>2012-04-26 18:15:33 -0700</bug_when>
    <thetext>Comment on attachment 139115
Patch

R=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>611213</commentid>
    <comment_count>9</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2012-04-26 20:21:37 -0700</bug_when>
    <thetext>Committed r115403: &lt;http://trac.webkit.org/changeset/115403&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138698</attachid>
            <date>2012-04-24 17:24:34 -0700</date>
            <delta_ts>2012-04-26 18:08:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84808-20120424172433.patch</filename>
            <type>text/plain</type>
            <size>69064</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1MDgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2I1MmI3ZjIwMjA3ODc0
OWM5NjdkYjc0OTg1ODQwZGJkOTMxYzcxNy4uNmQ3NTIxZTBmMDkxYTY5MzE2MTBiYzc4ODUxYTA1
M2RkMDAyZTc2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDEyLTA0LTI0ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBN
b3ZlIFByb2dyYW1CaW5kaW5nIGRlZmluaXRpb25zIHRvIExheWVyUmVuZGVyZXJDaHJvbWl1bSBh
bmQgbm9ybWFsaXplIG5hbWluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODQ4MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGUgR0wgcHJvZ3JhbXMgdXNlZCBhcmUgbG9naWNhbGx5IHBhcnQgb2YgTGF5
ZXJSZW5kZXJlckNocm9taXVtIGFuZCBub3Qgc29tZXRoaW5nIHNwZWNpZmljIHRvIGEgbGF5ZXIg
dHlwZSwKKyAgICAgICAgc2luY2UgYSBkaWZmZXJlbnQgcmVuZGVyZXIgd291bGQgd2FudCB0byB1
c2UgYSBkaWZmZXJlbnQgdGhpbmcgdG8gcmVuZGVyIHRoZSBzYW1lIGxheWVyIHR5cGVzLiBUaGlz
IG1vdmVzIGFsbCBvZgorICAgICAgICB0aGUgUHJvZ3JhbUJpbmRpbmcgZGVmaW5pdGlvbnMgaW50
byBMYXllclJlbmRlcmVyQ2hyb21pdW0gYW5kIGdpdmVzIHRoZW0gY29uc2lzdGVudCBuYW1lcy4g
V2l0aCB0aGUgZXhjZXB0aW9uIG9mCisgICAgICAgIENDUmVuZGVyU3VyZmFjZSAobm90ZWQgYnkg
YW4gaW5saW5lIGNvbW1lbnQpLCB0aGVzZSBwcm9ncmFtcyBhcmUgcHJpdmF0ZSB0byBMUkMuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGRlZHVwbGljYXRlcyBwcm9ncmFtcyBhIGJpdDoKKyAg
ICAgICAgMS4pIFZpZGVvJ3MgTmF0aXZlVGV4dHVyZSBhbmQgUkdCQSBwcm9ncmFtcyB3ZXJlIHRo
ZSBzYW1lIHRoaW5nLCBmb2xkZWQuCisgICAgICAgIDIuKSBUaGUgVGV4U3RyZXRjaCBhbmQgVGV4
VHJhbnNmb3JtIHNoYWRlcnMgYXJlIGJhc2ljYWxseSB0aGUgc2FtZSB0aGluZywgZm9sZGVkIHRv
Z2V0aGVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5oOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0NoZWNrZXJib2FyZFF1YWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3RGVidWdCb3JkZXJRdWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1NvbGlkQ29sb3JR
dWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1RpbGVR
dWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1lVVik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSR0JBKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd05hdGl2ZVRleHR1cmUy
RCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTdHJlYW1U
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Rl
eHR1cmVRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0hlYWRzVXBEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp0aWxlQ2hlY2tlcmJvYXJkUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNvbGlkQ29sb3JQcm9ncmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aGVhZHNVcERpc3BsYXlQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFjZVByb2dy
YW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJTdXJm
YWNlUHJvZ3JhbUFBKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtQUEpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVQcm9ncmFtT3BhcXVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZVByb2dyYW1BQSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVQcm9ncmFtU3dpenpsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVQcm9ncmFtU3dpenpsZU9w
YXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVQcm9n
cmFtU3dpenpsZUFBKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dGV4dHVyZVByb2dyYW1GbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dGV4dHVyZVRleFJlY3RQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dGV4dHVyZVRleFJlY3RQcm9ncmFtRmxpcCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZGVvUkdCQVByb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRlb1lVVlByb2dyYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRlb1N0cmVhbVRleHR1cmVQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNo
YXJlZE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChMYXllclJl
bmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1No
YWRlckNocm9taXVtLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
aGFkZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDSGVhZHNVcERpc3BsYXkuaDoKKyAgICAgICAgKENDSGVhZHNVcERpc3BsYXkpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jl
bmRlclN1cmZhY2U6OmNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1JlbmRlclN1cmZhY2U6OmRyYXdMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmg6CisgICAgICAgIChDQ1JlbmRlclN1cmZh
Y2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhy
ZWFkUHJveHkuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGV4dHVyZUxheWVySW1wbC5oOgorICAgICAgICAoQ0NUZXh0dXJlTGF5ZXJJbXBsKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmg6
CisgICAgICAgIChDQ1RpbGVkTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKENDVmlkZW9MYXllckltcGwpOgorCiAyMDEyLTA0LTI0ICBTYW1pIEt5b3N0aWxhICA8
c2t5b3N0aWxAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtjaHJvbWl1bV0gRG9uJ3Qga2VlcCBw
b2ludGVycyB0byByZWxlYXNlZCBsYXllciB0cmVlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmlu
ZGV4IDliMmZjZjc1YjZjYjQ1YzViNGYwNDhiNTM2MDRlNzllNjcxOTZmMGQuLjU4YWM3NDEwY2Zj
NjA1NGI3NmFlZjFkZDNkNDFmZTA3MjZhODhkMWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTQgQEAKKzIwMTItMDQtMjQgIEphbWVzIFJvYmluc29uICA8amFtZXNyQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIE1vdmUgUHJvZ3JhbUJpbmRpbmcgZGVm
aW5pdGlvbnMgdG8gTGF5ZXJSZW5kZXJlckNocm9taXVtIGFuZCBub3JtYWxpemUgbmFtaW5nCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NDgwOAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBzb21lIGlu
Y2x1ZGVzIG5lZWRlZCBieSB0aGlzIHRlc3QgdGhhdCB3ZXJlIHByZXZpb3VzbHkgcGlja2VkIHVw
IGJ5IHVwc3RyZWFtIGhlYWRlcnMuCisKKyAgICAgICAgKiB0ZXN0cy9DQ0xheWVyVHJlZUhvc3RJ
bXBsVGVzdC5jcHA6CisKIDIwMTItMDQtMjQgIFNhbWkgS3lvc3RpbGEgIDxza3lvc3RpbEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9taXVtXSBEb24ndCBrZWVwIHBvaW50ZXJzIHRvIHJl
bGVhc2VkIGxheWVyIHRyZWUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAppbmRleCA0ZDkzMDA3MGFlZDViMzJl
NWRkODhhY2Q0MmZiZTk0NjU5ODQzYTdjLi44MWY0ODEyN2ZhNDkxZmQwNTAwNTQzNjM0ZDlkNTlk
N2QzY2I3NWEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllckNocm9taXVtLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCkBAIC0xOTQsOCArMTk0LDYgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB2b2lkIHB1c2hQcm9wZXJ0aWVzVG8oQ0NMYXllckltcGwqKTsKIAot
ICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zLCBGcmFnbWVudFNoYWRl
ckNvbG9yPiBCb3JkZXJQcm9ncmFtOwotCiAgICAgdm9pZCBjbGVhclJlbmRlclN1cmZhY2UoKSB7
IG1fcmVuZGVyU3VyZmFjZS5jbGVhcigpOyB9CiAgICAgUmVuZGVyU3VyZmFjZUNocm9taXVtKiBy
ZW5kZXJTdXJmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9yZW5kZXJTdXJmYWNlLmdldCgpOyB9CiAg
ICAgdm9pZCBjcmVhdGVSZW5kZXJTdXJmYWNlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmNwcAppbmRleCA2MzQ4ZTE0OTY4N2Y0MzU1MDk2NWNhODZkNDQxYmQ2ZDhmZjYyYjIx
Li43YzMwMTY1OTIwZjgyNjM2Y2FhZjJjZDVhNTkzMWRiMTJjY2FjMmI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKQEAgLTM0LDIzICszNCwyMCBAQAogI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0u
aCIKIAorI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRENo
cm9taXVtLmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiR2VvbWV0cnlCaW5k
aW5nLmgiCiAjaW5jbHVkZSAiR3JUZXh0dXJlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKLSNpbmNsdWRlICJMYXllckNocm9taXVtLmgiCi0jaW5jbHVkZSAiTGF5ZXJQYWludGVy
Q2hyb21pdW0uaCIKICNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db2xvci5oIgogI2luY2x1ZGUgIlJlbmRl
clN1cmZhY2VDaHJvbWl1bS5oIgotI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKICNpbmNsdWRlICJU
ZXh0dXJlQ29waWVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJU
cmFjZUV2ZW50LmgiCiAjaW5jbHVkZSAiVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmgiCi0jaW5j
bHVkZSAiVHJlZVN5bmNocm9uaXplci5oIgogI2luY2x1ZGUgImNjL0NDQ2hlY2tlcmJvYXJkRHJh
d1F1YWQuaCIKICNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKICNpbmNsdWRlICJjYy9D
Q0RlYnVnQm9yZGVyRHJhd1F1YWQuaCIKQEAgLTY0LDkgKzYxLDYgQEAKICNpbmNsdWRlICJjYy9D
Q1RleHR1cmVEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0NDVGlsZURyYXdRdWFkLmgiCiAjaW5j
bHVkZSAiY2MvQ0NWaWRlb0RyYXdRdWFkLmgiCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0j
aW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tp
YS5oIgogI2luY2x1ZGUgPHB1YmxpYy9XZWJWaWRlb0ZyYW1lLmg+CiAjaW5jbHVkZSA8d3RmL0N1
cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KQEAgLTQ5NCw3ICs0ODgs
NyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1F1YWQoY29uc3QgQ0NEcmF3UXVh
ZCogcXVhZCwgY29uc3QgRmxvYXRSZWN0JiBzdQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6ZHJhd0NoZWNrZXJib2FyZFF1YWQoY29uc3QgQ0NDaGVja2VyYm9hcmREcmF3UXVhZCogcXVh
ZCkKIHsKLSAgICBjb25zdCBDaGVja2VyYm9hcmRQcm9ncmFtKiBwcm9ncmFtID0gY2hlY2tlcmJv
YXJkUHJvZ3JhbSgpOworICAgIGNvbnN0IFRpbGVDaGVja2VyYm9hcmRQcm9ncmFtKiBwcm9ncmFt
ID0gdGlsZUNoZWNrZXJib2FyZFByb2dyYW0oKTsKICAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9n
cmFtLT5pbml0aWFsaXplZCgpKTsKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVzZVBy
b2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CiAKQEAgLTUyMyw3ICs1MTcsNyBAQCB2b2lkIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0NoZWNrZXJib2FyZFF1YWQoY29uc3QgQ0NDaGVja2Vy
Ym9hcmREcmF3UXVhZCogcQogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdEZWJ1Z0Jv
cmRlclF1YWQoY29uc3QgQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkKiBxdWFkKQogewogICAgIHN0YXRp
YyBmbG9hdCBnbE1hdHJpeFsxNl07Ci0gICAgY29uc3QgTGF5ZXJDaHJvbWl1bTo6Qm9yZGVyUHJv
Z3JhbSogcHJvZ3JhbSA9IGJvcmRlclByb2dyYW0oKTsKKyAgICBjb25zdCBTb2xpZENvbG9yUHJv
Z3JhbSogcHJvZ3JhbSA9IHNvbGlkQ29sb3JQcm9ncmFtKCk7CiAgICAgQVNTRVJUKHByb2dyYW0g
JiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgp
LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwogCkBAIC02MTcsOCArNjExLDggQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSZW5kZXJTdXJmYWNlUXVhZChjb25zdCBD
Q1JlbmRlclN1cmZhY2VEcmF3UXVhZCoKIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRy
YXdTb2xpZENvbG9yUXVhZChjb25zdCBDQ1NvbGlkQ29sb3JEcmF3UXVhZCogcXVhZCkKIHsKLSAg
ICBjb25zdCBMYXllckNocm9taXVtOjpCb3JkZXJQcm9ncmFtKiBzb2xpZENvbG9yUHJvZ3JhbSA9
IGJvcmRlclByb2dyYW0oKTsKLSAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dy
YW0oc29saWRDb2xvclByb2dyYW0tPnByb2dyYW0oKSkpOworICAgIGNvbnN0IFNvbGlkQ29sb3JQ
cm9ncmFtKiBwcm9ncmFtID0gc29saWRDb2xvclByb2dyYW0oKTsKKyAgICBHTEMoY29udGV4dCgp
LCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7CiAKICAgICBJbnRS
ZWN0IHRpbGVSZWN0ID0gcXVhZC0+cXVhZFJlY3QoKTsKIApAQCAtNjI5LDExICs2MjMsMTEgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTb2xpZENvbG9yUXVhZChjb25zdCBDQ1Nv
bGlkQ29sb3JEcmF3UXVhZCogcXVhZCkKICAgICBmbG9hdCBvcGFjaXR5ID0gcXVhZC0+b3BhY2l0
eSgpOwogICAgIGZsb2F0IGFscGhhID0gKGNvbG9yLmFscGhhKCkgLyAyNTUuMCkgKiBvcGFjaXR5
OwogCi0gICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtNGYoc29saWRDb2xvclBy
b2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuY29sb3JMb2NhdGlvbigpLCAoY29sb3IucmVkKCkgLyAy
NTUuMCkgKiBhbHBoYSwgKGNvbG9yLmdyZWVuKCkgLyAyNTUuMCkgKiBhbHBoYSwgKGNvbG9yLmJs
dWUoKSAvIDI1NS4wKSAqIGFscGhhLCBhbHBoYSkpOworICAgIEdMQyhjb250ZXh0KCksIGNvbnRl
eHQoKS0+dW5pZm9ybTRmKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuY29sb3JMb2NhdGlvbigp
LCAoY29sb3IucmVkKCkgLyAyNTUuMCkgKiBhbHBoYSwgKGNvbG9yLmdyZWVuKCkgLyAyNTUuMCkg
KiBhbHBoYSwgKGNvbG9yLmJsdWUoKSAvIDI1NS4wKSAqIGFscGhhLCBhbHBoYSkpOwogCiAgICAg
ZHJhd1RleHR1cmVkUXVhZCh0aWxlVHJhbnNmb3JtLAogICAgICAgICAgICAgICAgICAgICAgdGls
ZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIDEuMCwgRmxvYXRRdWFkKCksCi0gICAg
ICAgICAgICAgICAgICAgICBzb2xpZENvbG9yUHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkubWF0cml4
TG9jYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgIHByb2dyYW0tPnZlcnRleFNoYWRlcigp
Lm1hdHJpeExvY2F0aW9uKCksCiAgICAgICAgICAgICAgICAgICAgICAtMSwgLTEpOwogfQogCkBA
IC02NjIsMzkgKzY1Niw2IEBAIHN0YXRpYyB2b2lkIHRpbGVVbmlmb3JtTG9jYXRpb24oVCBwcm9n
cmFtLCBUaWxlUHJvZ3JhbVVuaWZvcm1zJiB1bmlmb3JtcykKICAgICB1bmlmb3Jtcy5lZGdlTG9j
YXRpb24gPSBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpOwogfQogCi1z
dGF0aWMgdm9pZCBmaW5kVGlsZVByb2dyYW1Vbmlmb3JtcyhMYXllclJlbmRlcmVyQ2hyb21pdW0q
IGxheWVyUmVuZGVyZXIsIGNvbnN0IENDVGlsZURyYXdRdWFkKiBxdWFkLCBUaWxlUHJvZ3JhbVVu
aWZvcm1zJiB1bmlmb3JtcywgYm9vbCBxdWFkSXNDbGlwcGVkKQotewotICAgIC8vIEZvciBub3cs
IHdlIHNpbXBseSBza2lwIGFudGktYWxpYXNpbmcgd2l0aCB0aGUgcXVhZCBpcyBjbGlwcGVkLiBU
aGlzIG9ubHkgaGFwcGVucwotICAgIC8vIG9uIHBlcnNwZWN0aXZlIHRyYW5zZm9ybWVkIGxheWVy
cyB0aGF0IGdvIHBhcnRpYWxseSBiZWhpbmQgdGhlIGNhbWVyYS4KLSAgICBpZiAocXVhZC0+aXNB
bnRpYWxpYXNlZCgpICYmICFxdWFkSXNDbGlwcGVkKSB7Ci0gICAgICAgIGlmIChxdWFkLT5zd2l6
emxlQ29udGVudHMoKSkgewotICAgICAgICAgICAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJv
Z3JhbVN3aXp6bGVBQSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6
bGVBQSgpOwotICAgICAgICAgICAgdGlsZVVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCB1bmlmb3Jt
cyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBs
OjpQcm9ncmFtQUEqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dyYW1BQSgpOwot
ICAgICAgICAgICAgdGlsZVVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCB1bmlmb3Jtcyk7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAocXVhZC0+bmVlZHNCbGVuZGluZygpKSB7
Ci0gICAgICAgICAgICBpZiAocXVhZC0+c3dpenpsZUNvbnRlbnRzKCkpIHsKLSAgICAgICAgICAg
ICAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtU3dpenpsZSogcHJvZ3JhbSA9IGxh
eWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbVN3aXp6bGUoKTsKLSAgICAgICAgICAgICAgICB0aWxl
VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIHVuaWZvcm1zKTsKLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbSogcHJvZ3Jh
bSA9IGxheWVyUmVuZGVyZXItPnRpbGVyUHJvZ3JhbSgpOwotICAgICAgICAgICAgICAgIHRpbGVV
bmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgdW5pZm9ybXMpOwotICAgICAgICAgICAgfQotICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHF1YWQtPnN3aXp6bGVDb250ZW50cygpKSB7Ci0g
ICAgICAgICAgICAgICAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6bGVPcGFx
dWUqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dyYW1Td2l6emxlT3BhcXVlKCk7
Ci0gICAgICAgICAgICAgICAgdGlsZVVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCB1bmlmb3Jtcyk7
Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnN0IENDVGlsZWRMYXll
ckltcGw6OlByb2dyYW1PcGFxdWUqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dy
YW1PcGFxdWUoKTsKLSAgICAgICAgICAgICAgICB0aWxlVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0s
IHVuaWZvcm1zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQogdm9pZCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdUaWxlUXVhZChjb25zdCBDQ1RpbGVEcmF3UXVhZCog
cXVhZCkKIHsKICAgICBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCA9IHF1YWQtPnF1YWRWaXNpYmxl
UmVjdCgpOwpAQCAtNzM5LDcgKzcwMCwyNiBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
ZHJhd1RpbGVRdWFkKGNvbnN0IENDVGlsZURyYXdRdWFkKiBxdWFkKQogICAgIEZsb2F0UXVhZCBk
ZXZpY2VMYXllclF1YWQgPSBDQ01hdGhVdGlsOjptYXBRdWFkKGRldmljZVRyYW5zZm9ybSwgRmxv
YXRRdWFkKHF1YWQtPmxheWVyUmVjdCgpKSwgY2xpcHBlZCk7CiAKICAgICBUaWxlUHJvZ3JhbVVu
aWZvcm1zIHVuaWZvcm1zOwotICAgIGZpbmRUaWxlUHJvZ3JhbVVuaWZvcm1zKHRoaXMsIHF1YWQs
IHVuaWZvcm1zLCBjbGlwcGVkKTsKKyAgICAvLyBGb3Igbm93LCB3ZSBzaW1wbHkgc2tpcCBhbnRp
LWFsaWFzaW5nIHdpdGggdGhlIHF1YWQgaXMgY2xpcHBlZC4gVGhpcyBvbmx5IGhhcHBlbnMKKyAg
ICAvLyBvbiBwZXJzcGVjdGl2ZSB0cmFuc2Zvcm1lZCBsYXllcnMgdGhhdCBnbyBwYXJ0aWFsbHkg
YmVoaW5kIHRoZSBjYW1lcmEuCisgICAgaWYgKHF1YWQtPmlzQW50aWFsaWFzZWQoKSAmJiAhY2xp
cHBlZCkgeworICAgICAgICBpZiAocXVhZC0+c3dpenpsZUNvbnRlbnRzKCkpCisgICAgICAgICAg
ICB0aWxlVW5pZm9ybUxvY2F0aW9uKHRpbGVQcm9ncmFtU3dpenpsZUFBKCksIHVuaWZvcm1zKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGlsZVVuaWZvcm1Mb2NhdGlvbih0aWxlUHJvZ3Jh
bUFBKCksIHVuaWZvcm1zKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocXVhZC0+bmVlZHNC
bGVuZGluZygpKSB7CisgICAgICAgICAgICBpZiAocXVhZC0+c3dpenpsZUNvbnRlbnRzKCkpCisg
ICAgICAgICAgICAgICAgdGlsZVVuaWZvcm1Mb2NhdGlvbih0aWxlUHJvZ3JhbVN3aXp6bGUoKSwg
dW5pZm9ybXMpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHRpbGVVbmlmb3Jt
TG9jYXRpb24odGlsZVByb2dyYW0oKSwgdW5pZm9ybXMpOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgaWYgKHF1YWQtPnN3aXp6bGVDb250ZW50cygpKQorICAgICAgICAgICAgICAgIHRp
bGVVbmlmb3JtTG9jYXRpb24odGlsZVByb2dyYW1Td2l6emxlT3BhcXVlKCksIHVuaWZvcm1zKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0aWxlVW5pZm9ybUxvY2F0aW9uKHRp
bGVQcm9ncmFtT3BhcXVlKCksIHVuaWZvcm1zKTsKKyAgICAgICAgfQorICAgIH0KIAogICAgIEdM
Qyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbSh1bmlmb3Jtcy5wcm9ncmFtKSk7CiAg
ICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWkodW5pZm9ybXMuc2FtcGxlckxv
Y2F0aW9uLCAwKSk7CkBAIC04MjgsNyArODA4LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdUaWxlUXVhZChjb25zdCBDQ1RpbGVEcmF3UXVhZCogcXVhZCkKIAogdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdZVVYoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQog
ewotICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OllVVlByb2dyYW0qIHByb2dyYW0gPSB2aWRl
b0xheWVyWVVWUHJvZ3JhbSgpOworICAgIGNvbnN0IFZpZGVvWVVWUHJvZ3JhbSogcHJvZ3JhbSA9
IHZpZGVvWVVWUHJvZ3JhbSgpOwogICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRp
YWxpemVkKCkpOwogCiAgICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6VGV4dHVyZSYgeVRleHR1
cmUgPSBxdWFkLT50ZXh0dXJlcygpW1dlYktpdDo6V2ViVmlkZW9GcmFtZTo6eVBsYW5lXTsKQEAg
LTg4OCw3ICs4NjgsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1NpbmdsZVRl
eHR1cmVWaWRlb1F1YWQoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdQogCiB2b2lkIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6ZHJhd1JHQkEoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQogewot
ICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OlJHQkFQcm9ncmFtKiBwcm9ncmFtID0gdmlkZW9M
YXllclJHQkFQcm9ncmFtKCk7CisgICAgY29uc3QgVmlkZW9SR0JBUHJvZ3JhbSogcHJvZ3JhbSA9
IHZpZGVvUkdCQVByb2dyYW0oKTsKICAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJl
JiB0ZXh0dXJlID0gcXVhZC0+dGV4dHVyZXMoKVtXZWJLaXQ6OldlYlZpZGVvRnJhbWU6OnJnYlBs
YW5lXTsKICAgICBmbG9hdCB3aWR0aFNjYWxlRmFjdG9yID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRl
eHR1cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHRleHR1cmUubV90ZXh0dXJlLT5zaXplKCku
d2lkdGgoKTsKICAgICBkcmF3U2luZ2xlVGV4dHVyZVZpZGVvUXVhZChxdWFkLCBwcm9ncmFtLCB3
aWR0aFNjYWxlRmFjdG9yLCB0ZXh0dXJlLm1fdGV4dHVyZS0+dGV4dHVyZUlkKCksIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJEKTsKQEAgLTg5NiwxNSArODc2LDE0IEBAIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3UkdCQShjb25zdCBDQ1ZpZGVvRHJhd1F1YWQqIHF1YWQpCiAK
IHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3TmF0aXZlVGV4dHVyZTJEKGNvbnN0IEND
VmlkZW9EcmF3UXVhZCogcXVhZCkKIHsKLSAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpOYXRp
dmVUZXh0dXJlUHJvZ3JhbSogcHJvZ3JhbSA9IHZpZGVvTGF5ZXJOYXRpdmVUZXh0dXJlUHJvZ3Jh
bSgpOwotICAgIGRyYXdTaW5nbGVUZXh0dXJlVmlkZW9RdWFkKHF1YWQsIHByb2dyYW0sIDEsIHF1
YWQtPmZyYW1lKCktPnRleHR1cmVJZCgpLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCk7
CisgICAgZHJhd1NpbmdsZVRleHR1cmVWaWRlb1F1YWQocXVhZCwgdmlkZW9SR0JBUHJvZ3JhbSgp
LCAxLCBxdWFkLT5mcmFtZSgpLT50ZXh0dXJlSWQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1N0cmVhbVRleHR1
cmUoY29uc3QgQ0NWaWRlb0RyYXdRdWFkKiBxdWFkKQogewogICAgIEFTU0VSVChjb250ZXh0KCkt
PmdldEV4dGVuc2lvbnMoKS0+c3VwcG9ydHMoIkdMX09FU19FR0xfaW1hZ2VfZXh0ZXJuYWwiKSAm
JiBjb250ZXh0KCktPmdldEV4dGVuc2lvbnMoKS0+aXNFbmFibGVkKCJHTF9PRVNfRUdMX2ltYWdl
X2V4dGVybmFsIikpOwogCi0gICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6U3RyZWFtVGV4dHVy
ZVByb2dyYW0qIHByb2dyYW0gPSBzdHJlYW1UZXh0dXJlTGF5ZXJQcm9ncmFtKCk7CisgICAgY29u
c3QgVmlkZW9TdHJlYW1UZXh0dXJlUHJvZ3JhbSogcHJvZ3JhbSA9IHZpZGVvU3RyZWFtVGV4dHVy
ZVByb2dyYW0oKTsKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVzZVByb2dyYW0ocHJv
Z3JhbS0+cHJvZ3JhbSgpKSk7CiAgICAgQVNTRVJUKHF1YWQtPm1hdHJpeCgpKTsKICAgICBHTEMo
Y29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm1NYXRyaXg0ZnYocHJvZ3JhbS0+dmVydGV4U2hh
ZGVyKCkudGV4TWF0cml4TG9jYXRpb24oKSwgMSwgZmFsc2UsIGNvbnN0X2Nhc3Q8ZmxvYXQqPihx
dWFkLT5tYXRyaXgoKSkpKTsKQEAgLTk5MCwxNyArOTY5LDYgQEAgc3RydWN0IFRleHR1cmVQcm9n
cmFtQmluZGluZyB7CiAgICAgaW50IGFscGhhTG9jYXRpb247CiB9OwogCi1zdHJ1Y3QgVGV4U3Ry
ZXRjaFRleHR1cmVQcm9ncmFtQmluZGluZyA6IFRleHR1cmVQcm9ncmFtQmluZGluZyB7Ci0gICAg
dGVtcGxhdGU8Y2xhc3MgUHJvZ3JhbT4gdm9pZCBzZXQoUHJvZ3JhbSogcHJvZ3JhbSkKLSAgICB7
Ci0gICAgICAgIFRleHR1cmVQcm9ncmFtQmluZGluZzo6c2V0KHByb2dyYW0pOwotICAgICAgICBv
ZmZzZXRMb2NhdGlvbiA9IHByb2dyYW0tPnZlcnRleFNoYWRlcigpLm9mZnNldExvY2F0aW9uKCk7
Ci0gICAgICAgIHNjYWxlTG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5zY2FsZUxv
Y2F0aW9uKCk7Ci0gICAgfQotICAgIGludCBvZmZzZXRMb2NhdGlvbjsKLSAgICBpbnQgc2NhbGVM
b2NhdGlvbjsKLX07Ci0KIHN0cnVjdCBUZXhUcmFuc2Zvcm1UZXh0dXJlUHJvZ3JhbUJpbmRpbmcg
OiBUZXh0dXJlUHJvZ3JhbUJpbmRpbmcgewogICAgIHRlbXBsYXRlPGNsYXNzIFByb2dyYW0+IHZv
aWQgc2V0KFByb2dyYW0qIHByb2dyYW0pCiAgICAgewpAQCAtMTAxOCw5ICs5ODYsOSBAQCB2b2lk
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1RleHR1cmVRdWFkKGNvbnN0IENDVGV4dHVyZURy
YXdRdWFkKiBxdWFkKQogICAgIGlmIChxdWFkLT5pb1N1cmZhY2VUZXh0dXJlSWQoKSkgewogICAg
ICAgICBUZXhUcmFuc2Zvcm1UZXh0dXJlUHJvZ3JhbUJpbmRpbmcgYmluZGluZzsKICAgICAgICAg
aWYgKHF1YWQtPmZsaXBwZWQoKSkKLSAgICAgICAgICAgIGJpbmRpbmcuc2V0KHRleHR1cmVMYXll
clRleFJlY3RQcm9ncmFtRmxpcCgpKTsKKyAgICAgICAgICAgIGJpbmRpbmcuc2V0KHRleHR1cmVU
ZXhSZWN0UHJvZ3JhbUZsaXAoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGJpbmRpbmcu
c2V0KHRleHR1cmVMYXllclRleFJlY3RQcm9ncmFtKCkpOworICAgICAgICAgICAgYmluZGluZy5z
ZXQodGV4dHVyZVRleFJlY3RQcm9ncmFtKCkpOwogCiAgICAgICAgIEdMQyhjb250ZXh0KCksIGNv
bnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApKTsKIApA
QCAtMTAzMywyMSArMTAwMSwyMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Rl
eHR1cmVRdWFkKGNvbnN0IENDVGV4dHVyZURyYXdRdWFkKiBxdWFkKQogICAgIH0gZWxzZSBpZiAo
cXVhZC0+ZmxpcHBlZCgpICYmIHF1YWQtPnV2UmVjdCgpID09IEZsb2F0UmVjdCgwLCAwLCAxLCAx
KSkgewogICAgICAgICAvLyBBIGZsaXBwZWQgcXVhZCB3aXRoIHRoZSBkZWZhdWx0IFVWIG1hcHBp
bmcgaXMgY29tbW9uIGVub3VnaCB0byB1c2UgYSBzcGVjaWFsIHNoYWRlci4KICAgICAgICAgLy8g
Q2FudmFzIDJkIGFuZCBXZWJHTCBsYXllcnMgdXNlIHRoaXMgcGF0aCBhbHdheXMgYW5kIHBsdWdp
bi9leHRlcm5hbCB0ZXh0dXJlIGxheWVycyB1c2UgdGhpcyBieSBkZWZhdWx0LgotICAgICAgICBj
b25zdCBDQ1RleHR1cmVMYXllckltcGw6OlByb2dyYW1GbGlwKiBwcm9ncmFtID0gdGV4dHVyZUxh
eWVyUHJvZ3JhbUZsaXAoKTsKKyAgICAgICAgY29uc3QgVGV4dHVyZVByb2dyYW1GbGlwKiBwcm9n
cmFtID0gdGV4dHVyZVByb2dyYW1GbGlwKCk7CiAgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRl
eHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtKCkpKTsKICAgICAgICAgR0xDKGNvbnRl
eHQoKSwgY29udGV4dCgpLT51bmlmb3JtMWkocHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5zYW1w
bGVyTG9jYXRpb24oKSwgMCkpOwogICAgICAgICBtYXRyaXhMb2NhdGlvbiA9IHByb2dyYW0tPnZl
cnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCk7CiAgICAgICAgIGFscGhhTG9jYXRpb24gPSBw
cm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmFscGhhTG9jYXRpb24oKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBUZXhTdHJldGNoVGV4dHVyZVByb2dyYW1CaW5kaW5nIGJpbmRpbmc7CisgICAgICAg
IFRleFRyYW5zZm9ybVRleHR1cmVQcm9ncmFtQmluZGluZyBiaW5kaW5nOwogICAgICAgICBpZiAo
cXVhZC0+ZmxpcHBlZCgpKQotICAgICAgICAgICAgYmluZGluZy5zZXQodGV4dHVyZUxheWVyUHJv
Z3JhbVN0cmV0Y2hGbGlwKCkpOworICAgICAgICAgICAgYmluZGluZy5zZXQodGV4dHVyZVRleFJl
Y3RQcm9ncmFtRmxpcCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYmluZGluZy5zZXQo
dGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2goKSk7CisgICAgICAgICAgICBiaW5kaW5nLnNldCh0
ZXh0dXJlVGV4UmVjdFByb2dyYW0oKSk7CiAgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQo
KS0+dXNlUHJvZ3JhbShiaW5kaW5nLnByb2dyYW1JZCkpOwogICAgICAgICBHTEMoY29udGV4dCgp
LCBjb250ZXh0KCktPnVuaWZvcm0xaShiaW5kaW5nLnNhbXBsZXJMb2NhdGlvbiwgMCkpOwotICAg
ICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0yZihiaW5kaW5nLm9mZnNldExv
Y2F0aW9uLCBxdWFkLT51dlJlY3QoKS54KCksIHF1YWQtPnV2UmVjdCgpLnkoKSkpOwotICAgICAg
ICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm0yZihiaW5kaW5nLnNjYWxlTG9jYXRp
b24sIHF1YWQtPnV2UmVjdCgpLndpZHRoKCksIHF1YWQtPnV2UmVjdCgpLmhlaWdodCgpKSk7Cisg
ICAgICAgIGNvbnN0IEZsb2F0UmVjdCYgdXZSZWN0ID0gcXVhZC0+dXZSZWN0KCk7CisgICAgICAg
IEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTRmKGJpbmRpbmcudGV4VHJhbnNmb3Jt
TG9jYXRpb24sIHV2UmVjdC54KCksIHV2UmVjdC55KCksIHV2UmVjdC53aWR0aCgpLCB1dlJlY3Qu
aGVpZ2h0KCkpKTsKIAogICAgICAgICBtYXRyaXhMb2NhdGlvbiA9IGJpbmRpbmcubWF0cml4TG9j
YXRpb247CiAgICAgICAgIGFscGhhTG9jYXRpb24gPSBiaW5kaW5nLmFscGhhTG9jYXRpb247CkBA
IC0xMDg2LDcgKzEwNTQsNyBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0hlYWRz
VXBEaXNwbGF5KE1hbmFnZWRUZXh0dXJlKiBodWRUZXh0dXJlLCBjb25zdAogICAgIEdMQyhtX2Nv
bnRleHQsIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNU
KSk7CiAgICAgdXNlUmVuZGVyU3VyZmFjZShtX2RlZmF1bHRSZW5kZXJTdXJmYWNlKTsKIAotICAg
IGNvbnN0IENDSGVhZHNVcERpc3BsYXk6OlByb2dyYW0qIHByb2dyYW0gPSBoZWFkc1VwRGlzcGxh
eVByb2dyYW0oKTsKKyAgICBjb25zdCBIZWFkc1VwRGlzcGxheVByb2dyYW0qIHByb2dyYW0gPSBo
ZWFkc1VwRGlzcGxheVByb2dyYW0oKTsKICAgICBBU1NFUlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5p
bml0aWFsaXplZCgpKTsKICAgICBHTEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmFjdGl2ZVRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKSk7CiAgICAgaHVkVGV4dHVyZS0+YmluZFRl
eHR1cmUobV9jb250ZXh0LmdldCgpLCByZW5kZXJTdXJmYWNlVGV4dHVyZUFsbG9jYXRvcigpKTsK
QEAgLTE0MDEsOSArMTM2OSw5IEBAIGJvb2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFs
aXplU2hhcmVkT2JqZWN0cygpCiAgICAgLy8gV2Ugd2lsbCBhbHdheXMgbmVlZCB0aGVzZSBwcm9n
cmFtcyB0byByZW5kZXIsIHNvIGNyZWF0ZSB0aGUgcHJvZ3JhbXMgZWFnZXJseSBzbyB0aGF0IHRo
ZSBzaGFkZXIgY29tcGlsYXRpb24gY2FuCiAgICAgLy8gc3RhcnQgd2hpbGUgd2UgZG8gb3RoZXIg
d29yay4gT3RoZXIgcHJvZ3JhbXMgYXJlIGNyZWF0ZWQgbGF6aWx5IG9uIGZpcnN0IGFjY2Vzcy4K
ICAgICBtX3NoYXJlZEdlb21ldHJ5ID0gYWRvcHRQdHIobmV3IEdlb21ldHJ5QmluZGluZyhtX2Nv
bnRleHQuZ2V0KCkpKTsKLSAgICBtX3JlbmRlclN1cmZhY2VQcm9ncmFtID0gYWRvcHRQdHIobmV3
IENDUmVuZGVyU3VyZmFjZTo6UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKLSAgICBtX3RpbGVy
UHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtKG1fY29udGV4
dC5nZXQoKSkpOwotICAgIG1fdGlsZXJQcm9ncmFtT3BhcXVlID0gYWRvcHRQdHIobmV3IENDVGls
ZWRMYXllckltcGw6OlByb2dyYW1PcGFxdWUobV9jb250ZXh0LmdldCgpKSk7CisgICAgbV9yZW5k
ZXJTdXJmYWNlUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJTdXJmYWNlUHJvZ3JhbShtX2Nv
bnRleHQuZ2V0KCkpKTsKKyAgICBtX3RpbGVQcm9ncmFtID0gYWRvcHRQdHIobmV3IFRpbGVQcm9n
cmFtKG1fY29udGV4dC5nZXQoKSkpOworICAgIG1fdGlsZVByb2dyYW1PcGFxdWUgPSBhZG9wdFB0
cihuZXcgVGlsZVByb2dyYW1PcGFxdWUobV9jb250ZXh0LmdldCgpKSk7CiAKICAgICBHTEMobV9j
b250ZXh0LCBtX2NvbnRleHQtPmZsdXNoKCkpOwogCkBAIC0xNDI0LDMyICsxMzkyLDMyIEBAIGJv
b2wgTGF5ZXJSZW5kZXJlckNocm9taXVtOjppbml0aWFsaXplU2hhcmVkT2JqZWN0cygpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWNvbnN0IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Q2hlY2tlcmJv
YXJkUHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjaGVja2VyYm9hcmRQcm9ncmFtKCkK
K2NvbnN0IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6VGlsZUNoZWNrZXJib2FyZFByb2dyYW0qIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZUNoZWNrZXJib2FyZFByb2dyYW0oKQogewotICAgIGlm
ICghbV9jaGVja2VyYm9hcmRQcm9ncmFtKQotICAgICAgICBtX2NoZWNrZXJib2FyZFByb2dyYW0g
PSBhZG9wdFB0cihuZXcgQ2hlY2tlcmJvYXJkUHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKLSAg
ICBpZiAoIW1fY2hlY2tlcmJvYXJkUHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgeworICAgIGlmICgh
bV90aWxlQ2hlY2tlcmJvYXJkUHJvZ3JhbSkKKyAgICAgICAgbV90aWxlQ2hlY2tlcmJvYXJkUHJv
Z3JhbSA9IGFkb3B0UHRyKG5ldyBUaWxlQ2hlY2tlcmJvYXJkUHJvZ3JhbShtX2NvbnRleHQuZ2V0
KCkpKTsKKyAgICBpZiAoIW1fdGlsZUNoZWNrZXJib2FyZFByb2dyYW0tPmluaXRpYWxpemVkKCkp
IHsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2hlY2tlcmJv
YXJkUHJvZ3JhbTo6aW5pdGFsaXplIiwgdGhpcywgMCk7Ci0gICAgICAgIG1fY2hlY2tlcmJvYXJk
UHJvZ3JhbS0+aW5pdGlhbGl6ZShtX2NvbnRleHQuZ2V0KCkpOworICAgICAgICBtX3RpbGVDaGVj
a2VyYm9hcmRQcm9ncmFtLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CiAgICAgfQotICAg
IHJldHVybiBtX2NoZWNrZXJib2FyZFByb2dyYW0uZ2V0KCk7CisgICAgcmV0dXJuIG1fdGlsZUNo
ZWNrZXJib2FyZFByb2dyYW0uZ2V0KCk7CiB9CiAKLWNvbnN0IExheWVyQ2hyb21pdW06OkJvcmRl
clByb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Ym9yZGVyUHJvZ3JhbSgpCitjb25zdCBM
YXllclJlbmRlcmVyQ2hyb21pdW06OlNvbGlkQ29sb3JQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hy
b21pdW06OnNvbGlkQ29sb3JQcm9ncmFtKCkKIHsKLSAgICBpZiAoIW1fYm9yZGVyUHJvZ3JhbSkK
LSAgICAgICAgbV9ib3JkZXJQcm9ncmFtID0gYWRvcHRQdHIobmV3IExheWVyQ2hyb21pdW06OkJv
cmRlclByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7Ci0gICAgaWYgKCFtX2JvcmRlclByb2dyYW0t
PmluaXRpYWxpemVkKCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6Ym9yZGVyUHJvZ3JhbTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOwotICAgICAgICBtX2Jv
cmRlclByb2dyYW0tPmluaXRpYWxpemUobV9jb250ZXh0LmdldCgpKTsKKyAgICBpZiAoIW1fc29s
aWRDb2xvclByb2dyYW0pCisgICAgICAgIG1fc29saWRDb2xvclByb2dyYW0gPSBhZG9wdFB0cihu
ZXcgU29saWRDb2xvclByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7CisgICAgaWYgKCFtX3NvbGlk
Q29sb3JQcm9ncmFtLT5pbml0aWFsaXplZCgpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJMYXll
clJlbmRlcmVyQ2hyb21pdW06OnNvbGlkQ29sb3JQcm9ncmFtOjppbml0aWFsaXplIiwgdGhpcywg
MCk7CisgICAgICAgIG1fc29saWRDb2xvclByb2dyYW0tPmluaXRpYWxpemUobV9jb250ZXh0Lmdl
dCgpKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fYm9yZGVyUHJvZ3JhbS5nZXQoKTsKKyAgICByZXR1
cm4gbV9zb2xpZENvbG9yUHJvZ3JhbS5nZXQoKTsKIH0KIAotY29uc3QgQ0NIZWFkc1VwRGlzcGxh
eTo6UHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpoZWFkc1VwRGlzcGxheVByb2dyYW0o
KQorY29uc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpIZWFkc1VwRGlzcGxheVByb2dyYW0qIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6aGVhZHNVcERpc3BsYXlQcm9ncmFtKCkKIHsKICAgICBpZiAo
IW1faGVhZHNVcERpc3BsYXlQcm9ncmFtKQotICAgICAgICBtX2hlYWRzVXBEaXNwbGF5UHJvZ3Jh
bSA9IGFkb3B0UHRyKG5ldyBDQ0hlYWRzVXBEaXNwbGF5OjpQcm9ncmFtKG1fY29udGV4dC5nZXQo
KSkpOworICAgICAgICBtX2hlYWRzVXBEaXNwbGF5UHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBIZWFk
c1VwRGlzcGxheVByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7CiAgICAgaWYgKCFtX2hlYWRzVXBE
aXNwbGF5UHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgewogICAgICAgICBUUkFDRV9FVkVOVCgiTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpoZWFkc1VwRGlzcGxheVByb2dyYW06OmluaXRpYWxpemUiLCB0
aGlzLCAwKTsKICAgICAgICAgbV9oZWFkc1VwRGlzcGxheVByb2dyYW0tPmluaXRpYWxpemUobV9j
b250ZXh0LmdldCgpKTsKQEAgLTE0NTcsNyArMTQyNSw3IEBAIGNvbnN0IENDSGVhZHNVcERpc3Bs
YXk6OlByb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6aGVhZHNVcERpc3BsYXlQcm9ncmFt
KCkKICAgICByZXR1cm4gbV9oZWFkc1VwRGlzcGxheVByb2dyYW0uZ2V0KCk7CiB9CiAKLWNvbnN0
IENDUmVuZGVyU3VyZmFjZTo6UHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJT
dXJmYWNlUHJvZ3JhbSgpCitjb25zdCBMYXllclJlbmRlcmVyQ2hyb21pdW06OlJlbmRlclN1cmZh
Y2VQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbmRlclN1cmZhY2VQcm9ncmFtKCkK
IHsKICAgICBBU1NFUlQobV9yZW5kZXJTdXJmYWNlUHJvZ3JhbSk7CiAgICAgaWYgKCFtX3JlbmRl
clN1cmZhY2VQcm9ncmFtLT5pbml0aWFsaXplZCgpKSB7CkBAIC0xNDY3LDEwICsxNDM1LDEwIEBA
IGNvbnN0IENDUmVuZGVyU3VyZmFjZTo6UHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpy
ZW5kZXJTdXJmYWNlUHJvZ3JhbSgpCiAgICAgcmV0dXJuIG1fcmVuZGVyU3VyZmFjZVByb2dyYW0u
Z2V0KCk7CiB9CiAKLWNvbnN0IENDUmVuZGVyU3VyZmFjZTo6UHJvZ3JhbUFBKiBMYXllclJlbmRl
cmVyQ2hyb21pdW06OnJlbmRlclN1cmZhY2VQcm9ncmFtQUEoKQorY29uc3QgTGF5ZXJSZW5kZXJl
ckNocm9taXVtOjpSZW5kZXJTdXJmYWNlUHJvZ3JhbUFBKiBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnJlbmRlclN1cmZhY2VQcm9ncmFtQUEoKQogewogICAgIGlmICghbV9yZW5kZXJTdXJmYWNlUHJv
Z3JhbUFBKQotICAgICAgICBtX3JlbmRlclN1cmZhY2VQcm9ncmFtQUEgPSBhZG9wdFB0cihuZXcg
Q0NSZW5kZXJTdXJmYWNlOjpQcm9ncmFtQUEobV9jb250ZXh0LmdldCgpKSk7CisgICAgICAgIG1f
cmVuZGVyU3VyZmFjZVByb2dyYW1BQSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJTdXJmYWNlUHJvZ3Jh
bUFBKG1fY29udGV4dC5nZXQoKSkpOwogICAgIGlmICghbV9yZW5kZXJTdXJmYWNlUHJvZ3JhbUFB
LT5pbml0aWFsaXplZCgpKSB7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hy
b21pdW06OnJlbmRlclN1cmZhY2VQcm9ncmFtQUE6OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKICAg
ICAgICAgbV9yZW5kZXJTdXJmYWNlUHJvZ3JhbUFBLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQo
KSk7CkBAIC0xNDc4LDEwICsxNDQ2LDEwIEBAIGNvbnN0IENDUmVuZGVyU3VyZmFjZTo6UHJvZ3Jh
bUFBKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbmRlclN1cmZhY2VQcm9ncmFtQUEoCiAgICAg
cmV0dXJuIG1fcmVuZGVyU3VyZmFjZVByb2dyYW1BQS5nZXQoKTsKIH0KIAotY29uc3QgQ0NSZW5k
ZXJTdXJmYWNlOjpNYXNrUHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJTdXJm
YWNlTWFza1Byb2dyYW0oKQorY29uc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpSZW5kZXJTdXJm
YWNlTWFza1Byb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFjZU1hc2tQ
cm9ncmFtKCkKIHsKICAgICBpZiAoIW1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKQotICAgICAg
ICBtX3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBDQ1JlbmRlclN1cmZh
Y2U6Ok1hc2tQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOworICAgICAgICBtX3JlbmRlclN1cmZh
Y2VNYXNrUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBSZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0obV9j
b250ZXh0LmdldCgpKSk7CiAgICAgaWYgKCFtX3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbS0+aW5p
dGlhbGl6ZWQoKSkgewogICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpyZW5kZXJTdXJmYWNlTWFza1Byb2dyYW06OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKICAgICAg
ICAgbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0tPmluaXRpYWxpemUobV9jb250ZXh0LmdldCgp
KTsKQEAgLTE0ODksMTAgKzE0NTcsMTAgQEAgY29uc3QgQ0NSZW5kZXJTdXJmYWNlOjpNYXNrUHJv
Z3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJTdXJmYWNlTWFza1Byb2cKICAgICBy
ZXR1cm4gbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0uZ2V0KCk7CiB9CiAKLWNvbnN0IENDUmVu
ZGVyU3VyZmFjZTo6TWFza1Byb2dyYW1BQSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJT
dXJmYWNlTWFza1Byb2dyYW1BQSgpCitjb25zdCBMYXllclJlbmRlcmVyQ2hyb21pdW06OlJlbmRl
clN1cmZhY2VNYXNrUHJvZ3JhbUFBKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbmRlclN1cmZh
Y2VNYXNrUHJvZ3JhbUFBKCkKIHsKICAgICBpZiAoIW1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFt
QUEpCi0gICAgICAgIG1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtQUEgPSBhZG9wdFB0cihuZXcg
Q0NSZW5kZXJTdXJmYWNlOjpNYXNrUHJvZ3JhbUFBKG1fY29udGV4dC5nZXQoKSkpOworICAgICAg
ICBtX3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbUFBID0gYWRvcHRQdHIobmV3IFJlbmRlclN1cmZh
Y2VNYXNrUHJvZ3JhbUFBKG1fY29udGV4dC5nZXQoKSkpOwogICAgIGlmICghbV9yZW5kZXJTdXJm
YWNlTWFza1Byb2dyYW1BQS0+aW5pdGlhbGl6ZWQoKSkgewogICAgICAgICBUUkFDRV9FVkVOVCgi
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJTdXJmYWNlTWFza1Byb2dyYW1BQTo6aW5pdGlh
bGl6ZSIsIHRoaXMsIDApOwogICAgICAgICBtX3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbUFBLT5p
bml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CkBAIC0xNTAwLDE2NyArMTQ2OCwxMzQgQEAgY29u
c3QgQ0NSZW5kZXJTdXJmYWNlOjpNYXNrUHJvZ3JhbUFBKiBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnJlbmRlclN1cmZhY2VNYXNrUHIKICAgICByZXR1cm4gbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dy
YW1BQS5nZXQoKTsKIH0KIAotY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbSogTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp0aWxlclByb2dyYW0oKQotewotICAgIEFTU0VSVChtX3RpbGVyUHJv
Z3JhbSk7Ci0gICAgaWYgKCFtX3RpbGVyUHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgewotICAgICAg
ICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlclByb2dyYW06OmluaXRp
YWxpemUiLCB0aGlzLCAwKTsKLSAgICAgICAgbV90aWxlclByb2dyYW0tPmluaXRpYWxpemUobV9j
b250ZXh0LmdldCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fdGlsZXJQcm9ncmFtLmdldCgpOwot
fQotCi1jb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtT3BhcXVlKiBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnRpbGVyUHJvZ3JhbU9wYXF1ZSgpCitjb25zdCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OlRpbGVQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVQcm9ncmFtKCkKIHsK
LSAgICBBU1NFUlQobV90aWxlclByb2dyYW1PcGFxdWUpOwotICAgIGlmICghbV90aWxlclByb2dy
YW1PcGFxdWUtPmluaXRpYWxpemVkKCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtT3BhcXVlOjppbml0aWFsaXplIiwgdGhpcywgMCk7
Ci0gICAgICAgIG1fdGlsZXJQcm9ncmFtT3BhcXVlLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQo
KSk7CisgICAgQVNTRVJUKG1fdGlsZVByb2dyYW0pOworICAgIGlmICghbV90aWxlUHJvZ3JhbS0+
aW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjp0aWxlUHJvZ3JhbTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOworICAgICAgICBtX3RpbGVQ
cm9ncmFtLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CiAgICAgfQotICAgIHJldHVybiBt
X3RpbGVyUHJvZ3JhbU9wYXF1ZS5nZXQoKTsKKyAgICByZXR1cm4gbV90aWxlUHJvZ3JhbS5nZXQo
KTsKIH0KIAotY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbUFBKiBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnRpbGVyUHJvZ3JhbUFBKCkKK2NvbnN0IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
VGlsZVByb2dyYW1PcGFxdWUqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZVByb2dyYW1PcGFx
dWUoKQogewotICAgIGlmICghbV90aWxlclByb2dyYW1BQSkKLSAgICAgICAgbV90aWxlclByb2dy
YW1BQSA9IGFkb3B0UHRyKG5ldyBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtQUEobV9jb250ZXh0
LmdldCgpKSk7Ci0gICAgaWYgKCFtX3RpbGVyUHJvZ3JhbUFBLT5pbml0aWFsaXplZCgpKSB7Ci0g
ICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbUFB
Ojppbml0aWFsaXplIiwgdGhpcywgMCk7Ci0gICAgICAgIG1fdGlsZXJQcm9ncmFtQUEtPmluaXRp
YWxpemUobV9jb250ZXh0LmdldCgpKTsKKyAgICBBU1NFUlQobV90aWxlUHJvZ3JhbU9wYXF1ZSk7
CisgICAgaWYgKCFtX3RpbGVQcm9ncmFtT3BhcXVlLT5pbml0aWFsaXplZCgpKSB7CisgICAgICAg
IFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVQcm9ncmFtT3BhcXVlOjpp
bml0aWFsaXplIiwgdGhpcywgMCk7CisgICAgICAgIG1fdGlsZVByb2dyYW1PcGFxdWUtPmluaXRp
YWxpemUobV9jb250ZXh0LmdldCgpKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fdGlsZXJQcm9ncmFt
QUEuZ2V0KCk7CisgICAgcmV0dXJuIG1fdGlsZVByb2dyYW1PcGFxdWUuZ2V0KCk7CiB9CiAKLWNv
bnN0IENDVGlsZWRMYXllckltcGw6OlByb2dyYW1Td2l6emxlKiBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnRpbGVyUHJvZ3JhbVN3aXp6bGUoKQorY29uc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpU
aWxlUHJvZ3JhbUFBKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVQcm9ncmFtQUEoKQogewot
ICAgIGlmICghbV90aWxlclByb2dyYW1Td2l6emxlKQotICAgICAgICBtX3RpbGVyUHJvZ3JhbVN3
aXp6bGUgPSBhZG9wdFB0cihuZXcgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6bGUobV9j
b250ZXh0LmdldCgpKSk7Ci0gICAgaWYgKCFtX3RpbGVyUHJvZ3JhbVN3aXp6bGUtPmluaXRpYWxp
emVkKCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGls
ZXJQcm9ncmFtU3dpenpsZTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOwotICAgICAgICBtX3RpbGVy
UHJvZ3JhbVN3aXp6bGUtPmluaXRpYWxpemUobV9jb250ZXh0LmdldCgpKTsKKyAgICBpZiAoIW1f
dGlsZVByb2dyYW1BQSkKKyAgICAgICAgbV90aWxlUHJvZ3JhbUFBID0gYWRvcHRQdHIobmV3IFRp
bGVQcm9ncmFtQUEobV9jb250ZXh0LmdldCgpKSk7CisgICAgaWYgKCFtX3RpbGVQcm9ncmFtQUEt
PmluaXRpYWxpemVkKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dGlsZVByb2dyYW1BQTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOworICAgICAgICBtX3Rp
bGVQcm9ncmFtQUEtPmluaXRpYWxpemUobV9jb250ZXh0LmdldCgpKTsKICAgICB9Ci0gICAgcmV0
dXJuIG1fdGlsZXJQcm9ncmFtU3dpenpsZS5nZXQoKTsKKyAgICByZXR1cm4gbV90aWxlUHJvZ3Jh
bUFBLmdldCgpOwogfQogCi1jb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtU3dpenpsZU9w
YXF1ZSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlclByb2dyYW1Td2l6emxlT3BhcXVlKCkK
K2NvbnN0IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6VGlsZVByb2dyYW1Td2l6emxlKiBMYXllclJl
bmRlcmVyQ2hyb21pdW06OnRpbGVQcm9ncmFtU3dpenpsZSgpCiB7Ci0gICAgaWYgKCFtX3RpbGVy
UHJvZ3JhbVN3aXp6bGVPcGFxdWUpCi0gICAgICAgIG1fdGlsZXJQcm9ncmFtU3dpenpsZU9wYXF1
ZSA9IGFkb3B0UHRyKG5ldyBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtU3dpenpsZU9wYXF1ZSht
X2NvbnRleHQuZ2V0KCkpKTsKLSAgICBpZiAoIW1fdGlsZXJQcm9ncmFtU3dpenpsZU9wYXF1ZS0+
aW5pdGlhbGl6ZWQoKSkgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9t
aXVtOjp0aWxlclByb2dyYW1Td2l6emxlT3BhcXVlOjppbml0aWFsaXplIiwgdGhpcywgMCk7Ci0g
ICAgICAgIG1fdGlsZXJQcm9ncmFtU3dpenpsZU9wYXF1ZS0+aW5pdGlhbGl6ZShtX2NvbnRleHQu
Z2V0KCkpOworICAgIGlmICghbV90aWxlUHJvZ3JhbVN3aXp6bGUpCisgICAgICAgIG1fdGlsZVBy
b2dyYW1Td2l6emxlID0gYWRvcHRQdHIobmV3IFRpbGVQcm9ncmFtU3dpenpsZShtX2NvbnRleHQu
Z2V0KCkpKTsKKyAgICBpZiAoIW1fdGlsZVByb2dyYW1Td2l6emxlLT5pbml0aWFsaXplZCgpKSB7
CisgICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVQcm9ncmFt
U3dpenpsZTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOworICAgICAgICBtX3RpbGVQcm9ncmFtU3dp
enpsZS0+aW5pdGlhbGl6ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIH0KLSAgICByZXR1cm4gbV90
aWxlclByb2dyYW1Td2l6emxlT3BhcXVlLmdldCgpOworICAgIHJldHVybiBtX3RpbGVQcm9ncmFt
U3dpenpsZS5nZXQoKTsKIH0KIAotY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6
bGVBQSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlclByb2dyYW1Td2l6emxlQUEoKQorY29u
c3QgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpUaWxlUHJvZ3JhbVN3aXp6bGVPcGFxdWUqIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dGlsZVByb2dyYW1Td2l6emxlT3BhcXVlKCkKIHsKLSAgICBpZiAo
IW1fdGlsZXJQcm9ncmFtU3dpenpsZUFBKQotICAgICAgICBtX3RpbGVyUHJvZ3JhbVN3aXp6bGVB
QSA9IGFkb3B0UHRyKG5ldyBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtU3dpenpsZUFBKG1fY29u
dGV4dC5nZXQoKSkpOwotICAgIGlmICghbV90aWxlclByb2dyYW1Td2l6emxlQUEtPmluaXRpYWxp
emVkKCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGls
ZXJQcm9ncmFtU3dpenpsZUFBOjppbml0aWFsaXplIiwgdGhpcywgMCk7Ci0gICAgICAgIG1fdGls
ZXJQcm9ncmFtU3dpenpsZUFBLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CisgICAgaWYg
KCFtX3RpbGVQcm9ncmFtU3dpenpsZU9wYXF1ZSkKKyAgICAgICAgbV90aWxlUHJvZ3JhbVN3aXp6
bGVPcGFxdWUgPSBhZG9wdFB0cihuZXcgVGlsZVByb2dyYW1Td2l6emxlT3BhcXVlKG1fY29udGV4
dC5nZXQoKSkpOworICAgIGlmICghbV90aWxlUHJvZ3JhbVN3aXp6bGVPcGFxdWUtPmluaXRpYWxp
emVkKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGls
ZVByb2dyYW1Td2l6emxlT3BhcXVlOjppbml0aWFsaXplIiwgdGhpcywgMCk7CisgICAgICAgIG1f
dGlsZVByb2dyYW1Td2l6emxlT3BhcXVlLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CiAg
ICAgfQotICAgIHJldHVybiBtX3RpbGVyUHJvZ3JhbVN3aXp6bGVBQS5nZXQoKTsKKyAgICByZXR1
cm4gbV90aWxlUHJvZ3JhbVN3aXp6bGVPcGFxdWUuZ2V0KCk7CiB9CiAKLWNvbnN0IENDVGV4dHVy
ZUxheWVySW1wbDo6UHJvZ3JhbUZsaXAqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZUxh
eWVyUHJvZ3JhbUZsaXAoKQorY29uc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpUaWxlUHJvZ3Jh
bVN3aXp6bGVBQSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlUHJvZ3JhbVN3aXp6bGVBQSgp
CiB7Ci0gICAgaWYgKCFtX3RleHR1cmVMYXllclByb2dyYW1GbGlwKQotICAgICAgICBtX3RleHR1
cmVMYXllclByb2dyYW1GbGlwID0gYWRvcHRQdHIobmV3IENDVGV4dHVyZUxheWVySW1wbDo6UHJv
Z3JhbUZsaXAobV9jb250ZXh0LmdldCgpKSk7Ci0gICAgaWYgKCFtX3RleHR1cmVMYXllclByb2dy
YW1GbGlwLT5pbml0aWFsaXplZCgpKSB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRl
cmVyQ2hyb21pdW06OnRleHR1cmVMYXllclByb2dyYW06OmluaXRpYWxpemUiLCB0aGlzLCAwKTsK
LSAgICAgICAgbV90ZXh0dXJlTGF5ZXJQcm9ncmFtRmxpcC0+aW5pdGlhbGl6ZShtX2NvbnRleHQu
Z2V0KCkpOworICAgIGlmICghbV90aWxlUHJvZ3JhbVN3aXp6bGVBQSkKKyAgICAgICAgbV90aWxl
UHJvZ3JhbVN3aXp6bGVBQSA9IGFkb3B0UHRyKG5ldyBUaWxlUHJvZ3JhbVN3aXp6bGVBQShtX2Nv
bnRleHQuZ2V0KCkpKTsKKyAgICBpZiAoIW1fdGlsZVByb2dyYW1Td2l6emxlQUEtPmluaXRpYWxp
emVkKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGls
ZVByb2dyYW1Td2l6emxlQUE6OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKKyAgICAgICAgbV90aWxl
UHJvZ3JhbVN3aXp6bGVBQS0+aW5pdGlhbGl6ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIH0KLSAg
ICByZXR1cm4gbV90ZXh0dXJlTGF5ZXJQcm9ncmFtRmxpcC5nZXQoKTsKKyAgICByZXR1cm4gbV90
aWxlUHJvZ3JhbVN3aXp6bGVBQS5nZXQoKTsKIH0KIAotY29uc3QgQ0NUZXh0dXJlTGF5ZXJJbXBs
OjpQcm9ncmFtU3RyZXRjaCogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0ZXh0dXJlTGF5ZXJQcm9n
cmFtU3RyZXRjaCgpCitjb25zdCBMYXllclJlbmRlcmVyQ2hyb21pdW06OlRleHR1cmVQcm9ncmFt
RmxpcCogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0ZXh0dXJlUHJvZ3JhbUZsaXAoKQogewotICAg
IGlmICghbV90ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaCkKLSAgICAgICAgbV90ZXh0dXJlTGF5
ZXJQcm9ncmFtU3RyZXRjaCA9IGFkb3B0UHRyKG5ldyBDQ1RleHR1cmVMYXllckltcGw6OlByb2dy
YW1TdHJldGNoKG1fY29udGV4dC5nZXQoKSkpOwotICAgIGlmICghbV90ZXh0dXJlTGF5ZXJQcm9n
cmFtU3RyZXRjaC0+aW5pdGlhbGl6ZWQoKSkgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjp0ZXh0dXJlTGF5ZXJQcm9ncmFtOjppbml0aWFsaXplIiwgdGhpcywg
MCk7Ci0gICAgICAgIG1fdGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2gtPmluaXRpYWxpemUobV9j
b250ZXh0LmdldCgpKTsKKyAgICBpZiAoIW1fdGV4dHVyZVByb2dyYW1GbGlwKQorICAgICAgICBt
X3RleHR1cmVQcm9ncmFtRmxpcCA9IGFkb3B0UHRyKG5ldyBUZXh0dXJlUHJvZ3JhbUZsaXAobV9j
b250ZXh0LmdldCgpKSk7CisgICAgaWYgKCFtX3RleHR1cmVQcm9ncmFtRmxpcC0+aW5pdGlhbGl6
ZWQoKSkgeworICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0ZXh0
dXJlUHJvZ3JhbTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOworICAgICAgICBtX3RleHR1cmVQcm9n
cmFtRmxpcC0+aW5pdGlhbGl6ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIH0KLSAgICByZXR1cm4g
bV90ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaC5nZXQoKTsKKyAgICByZXR1cm4gbV90ZXh0dXJl
UHJvZ3JhbUZsaXAuZ2V0KCk7CiB9CiAKLWNvbnN0IENDVGV4dHVyZUxheWVySW1wbDo6UHJvZ3Jh
bVN0cmV0Y2hGbGlwKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRleHR1cmVMYXllclByb2dyYW1T
dHJldGNoRmxpcCgpCitjb25zdCBMYXllclJlbmRlcmVyQ2hyb21pdW06OlRleHR1cmVUZXhSZWN0
UHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0ZXh0dXJlVGV4UmVjdFByb2dyYW0oKQog
ewotICAgIGlmICghbV90ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaEZsaXApCi0gICAgICAgIG1f
dGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2hGbGlwID0gYWRvcHRQdHIobmV3IENDVGV4dHVyZUxh
eWVySW1wbDo6UHJvZ3JhbVN0cmV0Y2hGbGlwKG1fY29udGV4dC5nZXQoKSkpOwotICAgIGlmICgh
bV90ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaEZsaXAtPmluaXRpYWxpemVkKCkpIHsKLSAgICAg
ICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZUxheWVyUHJvZ3Jh
bVN0cmV0Y2hGbGlwOjppbml0aWFsaXplIiwgdGhpcywgMCk7Ci0gICAgICAgIG1fdGV4dHVyZUxh
eWVyUHJvZ3JhbVN0cmV0Y2hGbGlwLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CisgICAg
aWYgKCFtX3RleHR1cmVUZXhSZWN0UHJvZ3JhbSkKKyAgICAgICAgbV90ZXh0dXJlVGV4UmVjdFBy
b2dyYW0gPSBhZG9wdFB0cihuZXcgVGV4dHVyZVRleFJlY3RQcm9ncmFtKG1fY29udGV4dC5nZXQo
KSkpOworICAgIGlmICghbV90ZXh0dXJlVGV4UmVjdFByb2dyYW0tPmluaXRpYWxpemVkKCkpIHsK
KyAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZVRleFJl
Y3RQcm9ncmFtOjppbml0aWFsaXplIiwgdGhpcywgMCk7CisgICAgICAgIG1fdGV4dHVyZVRleFJl
Y3RQcm9ncmFtLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CiAgICAgfQotICAgIHJldHVy
biBtX3RleHR1cmVMYXllclByb2dyYW1TdHJldGNoRmxpcC5nZXQoKTsKKyAgICByZXR1cm4gbV90
ZXh0dXJlVGV4UmVjdFByb2dyYW0uZ2V0KCk7CiB9CiAKLWNvbnN0IENDVGV4dHVyZUxheWVySW1w
bDo6VGV4UmVjdFByb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZUxheWVyVGV4
UmVjdFByb2dyYW0oKQorY29uc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpUZXh0dXJlVGV4UmVj
dFByb2dyYW1GbGlwKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRleHR1cmVUZXhSZWN0UHJvZ3Jh
bUZsaXAoKQogewotICAgIGlmICghbV90ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbSkKLSAgICAg
ICAgbV90ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBDQ1RleHR1cmVM
YXllckltcGw6OlRleFJlY3RQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOwotICAgIGlmICghbV90
ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgewotICAgICAgICBUUkFD
RV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3Jh
bTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOwotICAgICAgICBtX3RleHR1cmVMYXllclRleFJlY3RQ
cm9ncmFtLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CisgICAgaWYgKCFtX3RleHR1cmVU
ZXhSZWN0UHJvZ3JhbUZsaXApCisgICAgICAgIG1fdGV4dHVyZVRleFJlY3RQcm9ncmFtRmxpcCA9
IGFkb3B0UHRyKG5ldyBUZXh0dXJlVGV4UmVjdFByb2dyYW1GbGlwKG1fY29udGV4dC5nZXQoKSkp
OworICAgIGlmICghbV90ZXh0dXJlVGV4UmVjdFByb2dyYW1GbGlwLT5pbml0aWFsaXplZCgpKSB7
CisgICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnRleHR1cmVUZXhS
ZWN0UHJvZ3JhbUZsaXA6OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKKyAgICAgICAgbV90ZXh0dXJl
VGV4UmVjdFByb2dyYW1GbGlwLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CiAgICAgfQot
ICAgIHJldHVybiBtX3RleHR1cmVMYXllclRleFJlY3RQcm9ncmFtLmdldCgpOworICAgIHJldHVy
biBtX3RleHR1cmVUZXhSZWN0UHJvZ3JhbUZsaXAuZ2V0KCk7CiB9CiAKLWNvbnN0IENDVGV4dHVy
ZUxheWVySW1wbDo6VGV4UmVjdFByb2dyYW1GbGlwKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRl
eHR1cmVMYXllclRleFJlY3RQcm9ncmFtRmxpcCgpCitjb25zdCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OlZpZGVvUkdCQVByb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlkZW9SR0JBUHJv
Z3JhbSgpCiB7Ci0gICAgaWYgKCFtX3RleHR1cmVMYXllclRleFJlY3RQcm9ncmFtRmxpcCkKLSAg
ICAgICAgbV90ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXAgPSBhZG9wdFB0cihuZXcgQ0NU
ZXh0dXJlTGF5ZXJJbXBsOjpUZXhSZWN0UHJvZ3JhbUZsaXAobV9jb250ZXh0LmdldCgpKSk7Ci0g
ICAgaWYgKCFtX3RleHR1cmVMYXllclRleFJlY3RQcm9ncmFtRmxpcC0+aW5pdGlhbGl6ZWQoKSkg
ewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0ZXh0dXJlTGF5
ZXJUZXhSZWN0UHJvZ3JhbUZsaXA6OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKLSAgICAgICAgbV90
ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXAtPmluaXRpYWxpemUobV9jb250ZXh0LmdldCgp
KTsKKyAgICBpZiAoIW1fdmlkZW9SR0JBUHJvZ3JhbSkKKyAgICAgICAgbV92aWRlb1JHQkFQcm9n
cmFtID0gYWRvcHRQdHIobmV3IFZpZGVvUkdCQVByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7Cisg
ICAgaWYgKCFtX3ZpZGVvUkdCQVByb2dyYW0tPmluaXRpYWxpemVkKCkpIHsKKyAgICAgICAgVFJB
Q0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlkZW9SR0JBUHJvZ3JhbTo6aW5pdGlh
bGl6ZSIsIHRoaXMsIDApOworICAgICAgICBtX3ZpZGVvUkdCQVByb2dyYW0tPmluaXRpYWxpemUo
bV9jb250ZXh0LmdldCgpKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fdGV4dHVyZUxheWVyVGV4UmVj
dFByb2dyYW1GbGlwLmdldCgpOworICAgIHJldHVybiBtX3ZpZGVvUkdCQVByb2dyYW0uZ2V0KCk7
CiB9CiAKLWNvbnN0IENDVmlkZW9MYXllckltcGw6OlJHQkFQcm9ncmFtKiBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnZpZGVvTGF5ZXJSR0JBUHJvZ3JhbSgpCitjb25zdCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OlZpZGVvWVVWUHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRlb1lVVlBy
b2dyYW0oKQogewotICAgIGlmICghbV92aWRlb0xheWVyUkdCQVByb2dyYW0pCi0gICAgICAgIG1f
dmlkZW9MYXllclJHQkFQcm9ncmFtID0gYWRvcHRQdHIobmV3IENDVmlkZW9MYXllckltcGw6OlJH
QkFQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOwotICAgIGlmICghbV92aWRlb0xheWVyUkdCQVBy
b2dyYW0tPmluaXRpYWxpemVkKCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dmlkZW9MYXllclJHQkFQcm9ncmFtOjppbml0aWFsaXplIiwgdGhpcywgMCk7
Ci0gICAgICAgIG1fdmlkZW9MYXllclJHQkFQcm9ncmFtLT5pbml0aWFsaXplKG1fY29udGV4dC5n
ZXQoKSk7CisgICAgaWYgKCFtX3ZpZGVvWVVWUHJvZ3JhbSkKKyAgICAgICAgbV92aWRlb1lVVlBy
b2dyYW0gPSBhZG9wdFB0cihuZXcgVmlkZW9ZVVZQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOwor
ICAgIGlmICghbV92aWRlb1lVVlByb2dyYW0tPmluaXRpYWxpemVkKCkpIHsKKyAgICAgICAgVFJB
Q0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlkZW9ZVVZQcm9ncmFtOjppbml0aWFs
aXplIiwgdGhpcywgMCk7CisgICAgICAgIG1fdmlkZW9ZVVZQcm9ncmFtLT5pbml0aWFsaXplKG1f
Y29udGV4dC5nZXQoKSk7CiAgICAgfQotICAgIHJldHVybiBtX3ZpZGVvTGF5ZXJSR0JBUHJvZ3Jh
bS5nZXQoKTsKKyAgICByZXR1cm4gbV92aWRlb1lVVlByb2dyYW0uZ2V0KCk7CiB9CiAKLWNvbnN0
IENDVmlkZW9MYXllckltcGw6OllVVlByb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlk
ZW9MYXllcllVVlByb2dyYW0oKQorY29uc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpWaWRlb1N0
cmVhbVRleHR1cmVQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZGVvU3RyZWFtVGV4
dHVyZVByb2dyYW0oKQogewotICAgIGlmICghbV92aWRlb0xheWVyWVVWUHJvZ3JhbSkKLSAgICAg
ICAgbV92aWRlb0xheWVyWVVWUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBDQ1ZpZGVvTGF5ZXJJbXBs
OjpZVVZQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOwotICAgIGlmICghbV92aWRlb0xheWVyWVVW
UHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp2aWRlb0xheWVyWVVWUHJvZ3JhbTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDAp
OwotICAgICAgICBtX3ZpZGVvTGF5ZXJZVVZQcm9ncmFtLT5pbml0aWFsaXplKG1fY29udGV4dC5n
ZXQoKSk7CisgICAgaWYgKCFtX3ZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0pCisgICAgICAgIG1f
dmlkZW9TdHJlYW1UZXh0dXJlUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBWaWRlb1N0cmVhbVRleHR1
cmVQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOworICAgIGlmICghbV92aWRlb1N0cmVhbVRleHR1
cmVQcm9ncmFtLT5pbml0aWFsaXplZCgpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJl
bmRlcmVyQ2hyb21pdW06OnN0cmVhbVRleHR1cmVQcm9ncmFtOjppbml0aWFsaXplIiwgdGhpcywg
MCk7CisgICAgICAgIG1fdmlkZW9TdHJlYW1UZXh0dXJlUHJvZ3JhbS0+aW5pdGlhbGl6ZShtX2Nv
bnRleHQuZ2V0KCkpOwogICAgIH0KLSAgICByZXR1cm4gbV92aWRlb0xheWVyWVVWUHJvZ3JhbS5n
ZXQoKTsKLX0KLQotY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6TmF0aXZlVGV4dHVyZVByb2dyYW0q
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlkZW9MYXllck5hdGl2ZVRleHR1cmVQcm9ncmFtKCkK
LXsKLSAgICBpZiAoIW1fdmlkZW9MYXllck5hdGl2ZVRleHR1cmVQcm9ncmFtKQotICAgICAgICBt
X3ZpZGVvTGF5ZXJOYXRpdmVUZXh0dXJlUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBDQ1ZpZGVvTGF5
ZXJJbXBsOjpOYXRpdmVUZXh0dXJlUHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKLSAgICBpZiAo
IW1fdmlkZW9MYXllck5hdGl2ZVRleHR1cmVQcm9ncmFtLT5pbml0aWFsaXplZCgpKSB7Ci0gICAg
ICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZGVvTGF5ZXJOYXRpdmVU
ZXh0dXJlUHJvZ3JhbTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOwotICAgICAgICBtX3ZpZGVvTGF5
ZXJOYXRpdmVUZXh0dXJlUHJvZ3JhbS0+aW5pdGlhbGl6ZShtX2NvbnRleHQuZ2V0KCkpOwotICAg
IH0KLSAgICByZXR1cm4gbV92aWRlb0xheWVyTmF0aXZlVGV4dHVyZVByb2dyYW0uZ2V0KCk7Ci19
Ci0KLWNvbnN0IENDVmlkZW9MYXllckltcGw6OlN0cmVhbVRleHR1cmVQcm9ncmFtKiBMYXllclJl
bmRlcmVyQ2hyb21pdW06OnN0cmVhbVRleHR1cmVMYXllclByb2dyYW0oKQotewotICAgIGlmICgh
bV9zdHJlYW1UZXh0dXJlTGF5ZXJQcm9ncmFtKQotICAgICAgICBtX3N0cmVhbVRleHR1cmVMYXll
clByb2dyYW0gPSBhZG9wdFB0cihuZXcgQ0NWaWRlb0xheWVySW1wbDo6U3RyZWFtVGV4dHVyZVBy
b2dyYW0obV9jb250ZXh0LmdldCgpKSk7Ci0gICAgaWYgKCFtX3N0cmVhbVRleHR1cmVMYXllclBy
b2dyYW0tPmluaXRpYWxpemVkKCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6c3RyZWFtVGV4dHVyZUxheWVyUHJvZ3JhbTo6aW5pdGlhbGl6ZSIsIHRoaXMs
IDApOwotICAgICAgICBtX3N0cmVhbVRleHR1cmVMYXllclByb2dyYW0tPmluaXRpYWxpemUobV9j
b250ZXh0LmdldCgpKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fc3RyZWFtVGV4dHVyZUxheWVyUHJv
Z3JhbS5nZXQoKTsKKyAgICByZXR1cm4gbV92aWRlb1N0cmVhbVRleHR1cmVQcm9ncmFtLmdldCgp
OwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMo
KQpAQCAtMTY2OSwzNCArMTYwNCwyMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xl
YW51cFNoYXJlZE9iamVjdHMoKQogCiAgICAgbV9zaGFyZWRHZW9tZXRyeS5jbGVhcigpOwogCi0g
ICAgaWYgKG1fY2hlY2tlcmJvYXJkUHJvZ3JhbSkKLSAgICAgICAgbV9jaGVja2VyYm9hcmRQcm9n
cmFtLT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7Ci0gICAgaWYgKG1fYm9yZGVyUHJvZ3JhbSkK
LSAgICAgICAgbV9ib3JkZXJQcm9ncmFtLT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7Ci0gICAg
aWYgKG1faGVhZHNVcERpc3BsYXlQcm9ncmFtKQotICAgICAgICBtX2hlYWRzVXBEaXNwbGF5UHJv
Z3JhbS0+Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkpOwotICAgIGlmIChtX3RleHR1cmVMYXllclBy
b2dyYW1GbGlwKQotICAgICAgICBtX3RleHR1cmVMYXllclByb2dyYW1GbGlwLT5jbGVhbnVwKG1f
Y29udGV4dC5nZXQoKSk7Ci0gICAgaWYgKG1fdGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2gpCi0g
ICAgICAgIG1fdGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2gtPmNsZWFudXAobV9jb250ZXh0Lmdl
dCgpKTsKLSAgICBpZiAobV90ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaEZsaXApCi0gICAgICAg
IG1fdGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2hGbGlwLT5jbGVhbnVwKG1fY29udGV4dC5nZXQo
KSk7Ci0gICAgaWYgKG1fdGV4dHVyZUxheWVyVGV4UmVjdFByb2dyYW0pCi0gICAgICAgIG1fdGV4
dHVyZUxheWVyVGV4UmVjdFByb2dyYW0tPmNsZWFudXAobV9jb250ZXh0LmdldCgpKTsKLSAgICBp
ZiAobV90ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXApCi0gICAgICAgIG1fdGV4dHVyZUxh
eWVyVGV4UmVjdFByb2dyYW1GbGlwLT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7Ci0gICAgaWYg
KG1fdGlsZXJQcm9ncmFtKQotICAgICAgICBtX3RpbGVyUHJvZ3JhbS0+Y2xlYW51cChtX2NvbnRl
eHQuZ2V0KCkpOwotICAgIGlmIChtX3RpbGVyUHJvZ3JhbU9wYXF1ZSkKLSAgICAgICAgbV90aWxl
clByb2dyYW1PcGFxdWUtPmNsZWFudXAobV9jb250ZXh0LmdldCgpKTsKLSAgICBpZiAobV90aWxl
clByb2dyYW1Td2l6emxlKQotICAgICAgICBtX3RpbGVyUHJvZ3JhbVN3aXp6bGUtPmNsZWFudXAo
bV9jb250ZXh0LmdldCgpKTsKLSAgICBpZiAobV90aWxlclByb2dyYW1Td2l6emxlT3BhcXVlKQot
ICAgICAgICBtX3RpbGVyUHJvZ3JhbVN3aXp6bGVPcGFxdWUtPmNsZWFudXAobV9jb250ZXh0Lmdl
dCgpKTsKLSAgICBpZiAobV90aWxlclByb2dyYW1BQSkKLSAgICAgICAgbV90aWxlclByb2dyYW1B
QS0+Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkpOwotICAgIGlmIChtX3RpbGVyUHJvZ3JhbVN3aXp6
bGVBQSkKLSAgICAgICAgbV90aWxlclByb2dyYW1Td2l6emxlQUEtPmNsZWFudXAobV9jb250ZXh0
LmdldCgpKTsKKyAgICBpZiAobV90aWxlUHJvZ3JhbSkKKyAgICAgICAgbV90aWxlUHJvZ3JhbS0+
Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkpOworICAgIGlmIChtX3RpbGVQcm9ncmFtT3BhcXVlKQor
ICAgICAgICBtX3RpbGVQcm9ncmFtT3BhcXVlLT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7Cisg
ICAgaWYgKG1fdGlsZVByb2dyYW1Td2l6emxlKQorICAgICAgICBtX3RpbGVQcm9ncmFtU3dpenps
ZS0+Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkpOworICAgIGlmIChtX3RpbGVQcm9ncmFtU3dpenps
ZU9wYXF1ZSkKKyAgICAgICAgbV90aWxlUHJvZ3JhbVN3aXp6bGVPcGFxdWUtPmNsZWFudXAobV9j
b250ZXh0LmdldCgpKTsKKyAgICBpZiAobV90aWxlUHJvZ3JhbUFBKQorICAgICAgICBtX3RpbGVQ
cm9ncmFtQUEtPmNsZWFudXAobV9jb250ZXh0LmdldCgpKTsKKyAgICBpZiAobV90aWxlUHJvZ3Jh
bVN3aXp6bGVBQSkKKyAgICAgICAgbV90aWxlUHJvZ3JhbVN3aXp6bGVBQS0+Y2xlYW51cChtX2Nv
bnRleHQuZ2V0KCkpOworICAgIGlmIChtX3RpbGVDaGVja2VyYm9hcmRQcm9ncmFtKQorICAgICAg
ICBtX3RpbGVDaGVja2VyYm9hcmRQcm9ncmFtLT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7CisK
ICAgICBpZiAobV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0pCiAgICAgICAgIG1fcmVuZGVyU3Vy
ZmFjZU1hc2tQcm9ncmFtLT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7CiAgICAgaWYgKG1fcmVu
ZGVyU3VyZmFjZVByb2dyYW0pCkBAIC0xNzA1LDM4ICsxNjI3LDMwIEBAIHZvaWQgTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cygpCiAgICAgICAgIG1fcmVuZGVyU3Vy
ZmFjZU1hc2tQcm9ncmFtQUEtPmNsZWFudXAobV9jb250ZXh0LmdldCgpKTsKICAgICBpZiAobV9y
ZW5kZXJTdXJmYWNlUHJvZ3JhbUFBKQogICAgICAgICBtX3JlbmRlclN1cmZhY2VQcm9ncmFtQUEt
PmNsZWFudXAobV9jb250ZXh0LmdldCgpKTsKLSAgICBpZiAobV92aWRlb0xheWVyUkdCQVByb2dy
YW0pCi0gICAgICAgIG1fdmlkZW9MYXllclJHQkFQcm9ncmFtLT5jbGVhbnVwKG1fY29udGV4dC5n
ZXQoKSk7Ci0gICAgaWYgKG1fdmlkZW9MYXllcllVVlByb2dyYW0pCi0gICAgICAgIG1fdmlkZW9M
YXllcllVVlByb2dyYW0tPmNsZWFudXAobV9jb250ZXh0LmdldCgpKTsKLSAgICBpZiAobV92aWRl
b0xheWVyTmF0aXZlVGV4dHVyZVByb2dyYW0pCi0gICAgICAgIG1fdmlkZW9MYXllck5hdGl2ZVRl
eHR1cmVQcm9ncmFtLT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7Ci0gICAgaWYgKG1fc3RyZWFt
VGV4dHVyZUxheWVyUHJvZ3JhbSkKLSAgICAgICAgbV9zdHJlYW1UZXh0dXJlTGF5ZXJQcm9ncmFt
LT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7Ci0KLSAgICBtX2JvcmRlclByb2dyYW0uY2xlYXIo
KTsKLSAgICBtX2hlYWRzVXBEaXNwbGF5UHJvZ3JhbS5jbGVhcigpOwotICAgIG1fdGV4dHVyZUxh
eWVyUHJvZ3JhbUZsaXAuY2xlYXIoKTsKLSAgICBtX3RleHR1cmVMYXllclByb2dyYW1TdHJldGNo
LmNsZWFyKCk7Ci0gICAgbV90ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaEZsaXAuY2xlYXIoKTsK
LSAgICBtX3RleHR1cmVMYXllclRleFJlY3RQcm9ncmFtLmNsZWFyKCk7Ci0gICAgbV90ZXh0dXJl
TGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXAuY2xlYXIoKTsKLSAgICBtX3RpbGVyUHJvZ3JhbS5jbGVh
cigpOwotICAgIG1fdGlsZXJQcm9ncmFtT3BhcXVlLmNsZWFyKCk7Ci0gICAgbV90aWxlclByb2dy
YW1Td2l6emxlLmNsZWFyKCk7Ci0gICAgbV90aWxlclByb2dyYW1Td2l6emxlT3BhcXVlLmNsZWFy
KCk7Ci0gICAgbV90aWxlclByb2dyYW1BQS5jbGVhcigpOwotICAgIG1fdGlsZXJQcm9ncmFtU3dp
enpsZUFBLmNsZWFyKCk7Ci0gICAgbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0uY2xlYXIoKTsK
LSAgICBtX3JlbmRlclN1cmZhY2VQcm9ncmFtLmNsZWFyKCk7Ci0gICAgbV9yZW5kZXJTdXJmYWNl
TWFza1Byb2dyYW1BQS5jbGVhcigpOwotICAgIG1fcmVuZGVyU3VyZmFjZVByb2dyYW1BQS5jbGVh
cigpOwotICAgIG1fdmlkZW9MYXllclJHQkFQcm9ncmFtLmNsZWFyKCk7Ci0gICAgbV92aWRlb0xh
eWVyWVVWUHJvZ3JhbS5jbGVhcigpOwotICAgIG1fdmlkZW9MYXllck5hdGl2ZVRleHR1cmVQcm9n
cmFtLmNsZWFyKCk7Ci0gICAgbV9zdHJlYW1UZXh0dXJlTGF5ZXJQcm9ncmFtLmNsZWFyKCk7CisK
KyAgICBpZiAobV90ZXh0dXJlUHJvZ3JhbUZsaXApCisgICAgICAgIG1fdGV4dHVyZVByb2dyYW1G
bGlwLT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7CisgICAgaWYgKG1fdGV4dHVyZVRleFJlY3RQ
cm9ncmFtKQorICAgICAgICBtX3RleHR1cmVUZXhSZWN0UHJvZ3JhbS0+Y2xlYW51cChtX2NvbnRl
eHQuZ2V0KCkpOworICAgIGlmIChtX3RleHR1cmVUZXhSZWN0UHJvZ3JhbUZsaXApCisgICAgICAg
IG1fdGV4dHVyZVRleFJlY3RQcm9ncmFtRmxpcC0+Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkpOwor
CisgICAgaWYgKG1fdmlkZW9SR0JBUHJvZ3JhbSkKKyAgICAgICAgbV92aWRlb1JHQkFQcm9ncmFt
LT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7CisgICAgaWYgKG1fdmlkZW9ZVVZQcm9ncmFtKQor
ICAgICAgICBtX3ZpZGVvWVVWUHJvZ3JhbS0+Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkpOworICAg
IGlmIChtX3ZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0pCisgICAgICAgIG1fdmlkZW9TdHJlYW1U
ZXh0dXJlUHJvZ3JhbS0+Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkpOworCisgICAgaWYgKG1fc29s
aWRDb2xvclByb2dyYW0pCisgICAgICAgIG1fc29saWRDb2xvclByb2dyYW0tPmNsZWFudXAobV9j
b250ZXh0LmdldCgpKTsKKworICAgIGlmIChtX2hlYWRzVXBEaXNwbGF5UHJvZ3JhbSkKKyAgICAg
ICAgbV9oZWFkc1VwRGlzcGxheVByb2dyYW0tPmNsZWFudXAobV9jb250ZXh0LmdldCgpKTsKKwog
ICAgIGlmIChtX29mZnNjcmVlbkZyYW1lYnVmZmVySWQpCiAgICAgICAgIEdMQyhtX2NvbnRleHQs
IG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZmZXIobV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKSk7
CisKICAgICBtX3RleHR1cmVDb3BpZXIuY2xlYXIoKTsKICAgICBtX3RleHR1cmVVcGxvYWRlci5j
bGVhcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCmluZGV4IDM3YjE3ZWRh
ZTBkYThkOTdkMWU3NGUyNDNkNzZhYTlkODExYmFmYzguLjQ5MGNhNzI3YTg4NWU4MWRmZDhmOWZk
NTk4NTJiYTYxYWFiYmY2ODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCkBA
IC0zNCwxOCArMzQsMTIgQEAKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAot
I2luY2x1ZGUgIkNvbnRlbnRMYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiRmxvYXRRdWFkLmgi
CiAjaW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkxheWVyQ2hyb21pdW0uaCIKICNpbmNs
dWRlICJUZXh0dXJlQ29waWVyLmgiCiAjaW5jbHVkZSAiVGV4dHVyZVVwbG9hZGVyLmgiCiAjaW5j
bHVkZSAiVHJhY2tpbmdUZXh0dXJlQWxsb2NhdG9yLmgiCi0jaW5jbHVkZSAiY2MvQ0NEcmF3UXVh
ZC5oIgotI2luY2x1ZGUgImNjL0NDSGVhZHNVcERpc3BsYXkuaCIKICNpbmNsdWRlICJjYy9DQ0xh
eWVyVHJlZUhvc3QuaCIKLSNpbmNsdWRlICJjYy9DQ1RleHR1cmVMYXllckltcGwuaCIKLSNpbmNs
dWRlICJjYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgpA
QCAtNTQsMTIgKzQ4LDE5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgQ0NDaGVj
a2VyYm9hcmREcmF3UXVhZDsKK2NsYXNzIENDRGVidWdCb3JkZXJEcmF3UXVhZDsKK2NsYXNzIEND
RHJhd1F1YWQ7CiBjbGFzcyBDQ1JlbmRlclBhc3M7CitjbGFzcyBDQ1JlbmRlclN1cmZhY2VEcmF3
UXVhZDsKK2NsYXNzIENDU29saWRDb2xvckRyYXdRdWFkOwogY2xhc3MgQ0NUZXh0dXJlRHJhd1F1
YWQ7CitjbGFzcyBDQ1RpbGVEcmF3UXVhZDsKK2NsYXNzIENDVmlkZW9EcmF3UXVhZDsKIGNsYXNz
IEdlb21ldHJ5QmluZGluZzsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotY2xhc3MgTGF5ZXJS
ZW5kZXJlclN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0ZXI7CiBjbGFzcyBMYXllclJl
bmRlcmVyR3B1TWVtb3J5QWxsb2NhdGlvbkNoYW5nZWRDYWxsYmFja0FkYXB0ZXI7CitjbGFzcyBM
YXllclJlbmRlcmVyU3dhcEJ1ZmZlcnNDb21wbGV0ZUNhbGxiYWNrQWRhcHRlcjsKIGNsYXNzIFNj
b3BlZEVuc3VyZUZyYW1lYnVmZmVyQWxsb2NhdGlvbjsKIAogY2xhc3MgTGF5ZXJSZW5kZXJlckNo
cm9taXVtQ2xpZW50IHsKQEAgLTExMiwzMCArMTEzLDYgQEAgcHVibGljOgogICAgIGNvbnN0IEdl
b21ldHJ5QmluZGluZyogc2hhcmVkR2VvbWV0cnkoKSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEdl
b21ldHJ5LmdldCgpOyB9CiAgICAgY29uc3QgRmxvYXRRdWFkJiBzaGFyZWRHZW9tZXRyeVF1YWQo
KSBjb25zdCB7IHJldHVybiBtX3NoYXJlZEdlb21ldHJ5UXVhZDsgfQogCi0gICAgdHlwZWRlZiBQ
cm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXgsIEZyYWdtZW50U2hhZGVyQ2hlY2tlcmJv
YXJkPiBDaGVja2VyYm9hcmRQcm9ncmFtOwotCi0gICAgY29uc3QgQ2hlY2tlcmJvYXJkUHJvZ3Jh
bSogY2hlY2tlcmJvYXJkUHJvZ3JhbSgpOwotICAgIGNvbnN0IExheWVyQ2hyb21pdW06OkJvcmRl
clByb2dyYW0qIGJvcmRlclByb2dyYW0oKTsKLSAgICBjb25zdCBDQ0hlYWRzVXBEaXNwbGF5OjpQ
cm9ncmFtKiBoZWFkc1VwRGlzcGxheVByb2dyYW0oKTsKLSAgICBjb25zdCBDQ1JlbmRlclN1cmZh
Y2U6OlByb2dyYW0qIHJlbmRlclN1cmZhY2VQcm9ncmFtKCk7Ci0gICAgY29uc3QgQ0NSZW5kZXJT
dXJmYWNlOjpQcm9ncmFtQUEqIHJlbmRlclN1cmZhY2VQcm9ncmFtQUEoKTsKLSAgICBjb25zdCBD
Q1JlbmRlclN1cmZhY2U6Ok1hc2tQcm9ncmFtKiByZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0oKTsK
LSAgICBjb25zdCBDQ1JlbmRlclN1cmZhY2U6Ok1hc2tQcm9ncmFtQUEqIHJlbmRlclN1cmZhY2VN
YXNrUHJvZ3JhbUFBKCk7Ci0gICAgY29uc3QgQ0NUZXh0dXJlTGF5ZXJJbXBsOjpQcm9ncmFtRmxp
cCogdGV4dHVyZUxheWVyUHJvZ3JhbUZsaXAoKTsKLSAgICBjb25zdCBDQ1RleHR1cmVMYXllcklt
cGw6OlByb2dyYW1TdHJldGNoKiB0ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaCgpOwotICAgIGNv
bnN0IENDVGV4dHVyZUxheWVySW1wbDo6UHJvZ3JhbVN0cmV0Y2hGbGlwKiB0ZXh0dXJlTGF5ZXJQ
cm9ncmFtU3RyZXRjaEZsaXAoKTsKLSAgICBjb25zdCBDQ1RleHR1cmVMYXllckltcGw6OlRleFJl
Y3RQcm9ncmFtKiB0ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbSgpOwotICAgIGNvbnN0IENDVGV4
dHVyZUxheWVySW1wbDo6VGV4UmVjdFByb2dyYW1GbGlwKiB0ZXh0dXJlTGF5ZXJUZXhSZWN0UHJv
Z3JhbUZsaXAoKTsKLSAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtKiB0aWxlclBy
b2dyYW0oKTsKLSAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtT3BhcXVlKiB0aWxl
clByb2dyYW1PcGFxdWUoKTsKLSAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtQUEq
IHRpbGVyUHJvZ3JhbUFBKCk7Ci0gICAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbVN3
aXp6bGUqIHRpbGVyUHJvZ3JhbVN3aXp6bGUoKTsKLSAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBs
OjpQcm9ncmFtU3dpenpsZU9wYXF1ZSogdGlsZXJQcm9ncmFtU3dpenpsZU9wYXF1ZSgpOwotICAg
IGNvbnN0IENDVGlsZWRMYXllckltcGw6OlByb2dyYW1Td2l6emxlQUEqIHRpbGVyUHJvZ3JhbVN3
aXp6bGVBQSgpOwotICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6OlJHQkFQcm9ncmFtKiB2aWRl
b0xheWVyUkdCQVByb2dyYW0oKTsKLSAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpZVVZQcm9n
cmFtKiB2aWRlb0xheWVyWVVWUHJvZ3JhbSgpOwotICAgIGNvbnN0IENDVmlkZW9MYXllckltcGw6
Ok5hdGl2ZVRleHR1cmVQcm9ncmFtKiB2aWRlb0xheWVyTmF0aXZlVGV4dHVyZVByb2dyYW0oKTsK
LSAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpTdHJlYW1UZXh0dXJlUHJvZ3JhbSogc3RyZWFt
VGV4dHVyZUxheWVyUHJvZ3JhbSgpOwogCiAgICAgdm9pZCBnZXRGcmFtZWJ1ZmZlclBpeGVscyh2
b2lkICpwaXhlbHMsIGNvbnN0IEludFJlY3QmKTsKICAgICBib29sIGdldEZyYW1lYnVmZmVyVGV4
dHVyZShNYW5hZ2VkVGV4dHVyZSosIGNvbnN0IEludFJlY3QmIGRldmljZVJlY3QpOwpAQCAtMjE5
LDMzICsxOTYsOTMgQEAgcHJpdmF0ZToKICAgICBNYW5hZ2VkVGV4dHVyZSogbV9jdXJyZW50TWFu
YWdlZFRleHR1cmU7CiAgICAgdW5zaWduZWQgbV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkOwogCi0g
ICAgLy8gU3RvcmUgdmFsdWVzIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIGluc3RhbmNlcyBvZiBl
YWNoIGxheWVyIHR5cGUKLSAgICAvLyBhc3NvY2lhdGVkIHdpdGggdGhpcyBpbnN0YW5jZSBvZiB0
aGUgY29tcG9zaXRvci4gU2luY2UgdGhlcmUgY2FuIGJlCi0gICAgLy8gbXVsdGlwbGUgaW5zdGFu
Y2VzIG9mIHRoZSBjb21wb3NpdG9yIHJ1bm5pbmcgaW4gdGhlIHNhbWUgcmVuZGVyZXIgcHJvY2Vz
cwotICAgIC8vIHdlIGNhbm5vdCBzdG9yZSB0aGVzZSB2YWx1ZXMgaW4gc3RhdGljIHZhcmlhYmxl
cy4KICAgICBPd25QdHI8R2VvbWV0cnlCaW5kaW5nPiBtX3NoYXJlZEdlb21ldHJ5OwotICAgIE93
blB0cjxDaGVja2VyYm9hcmRQcm9ncmFtPiBtX2NoZWNrZXJib2FyZFByb2dyYW07Ci0gICAgT3du
UHRyPExheWVyQ2hyb21pdW06OkJvcmRlclByb2dyYW0+IG1fYm9yZGVyUHJvZ3JhbTsKLSAgICBP
d25QdHI8Q0NIZWFkc1VwRGlzcGxheTo6UHJvZ3JhbT4gbV9oZWFkc1VwRGlzcGxheVByb2dyYW07
Ci0gICAgT3duUHRyPENDVGV4dHVyZUxheWVySW1wbDo6UHJvZ3JhbUZsaXA+IG1fdGV4dHVyZUxh
eWVyUHJvZ3JhbUZsaXA7Ci0gICAgT3duUHRyPENDVGV4dHVyZUxheWVySW1wbDo6UHJvZ3JhbVN0
cmV0Y2g+IG1fdGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2g7Ci0gICAgT3duUHRyPENDVGV4dHVy
ZUxheWVySW1wbDo6UHJvZ3JhbVN0cmV0Y2hGbGlwPiBtX3RleHR1cmVMYXllclByb2dyYW1TdHJl
dGNoRmxpcDsKLSAgICBPd25QdHI8Q0NUZXh0dXJlTGF5ZXJJbXBsOjpUZXhSZWN0UHJvZ3JhbT4g
bV90ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbTsKLSAgICBPd25QdHI8Q0NUZXh0dXJlTGF5ZXJJ
bXBsOjpUZXhSZWN0UHJvZ3JhbUZsaXA+IG1fdGV4dHVyZUxheWVyVGV4UmVjdFByb2dyYW1GbGlw
OwotICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtPiBtX3RpbGVyUHJvZ3JhbTsK
LSAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbU9wYXF1ZT4gbV90aWxlclByb2dy
YW1PcGFxdWU7Ci0gICAgT3duUHRyPENDVGlsZWRMYXllckltcGw6OlByb2dyYW1Td2l6emxlPiBt
X3RpbGVyUHJvZ3JhbVN3aXp6bGU7Ci0gICAgT3duUHRyPENDVGlsZWRMYXllckltcGw6OlByb2dy
YW1Td2l6emxlT3BhcXVlPiBtX3RpbGVyUHJvZ3JhbVN3aXp6bGVPcGFxdWU7Ci0gICAgT3duUHRy
PENDVGlsZWRMYXllckltcGw6OlByb2dyYW1BQT4gbV90aWxlclByb2dyYW1BQTsKLSAgICBPd25Q
dHI8Q0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6bGVBQT4gbV90aWxlclByb2dyYW1Td2l6
emxlQUE7Ci0gICAgT3duUHRyPENDUmVuZGVyU3VyZmFjZTo6TWFza1Byb2dyYW0+IG1fcmVuZGVy
U3VyZmFjZU1hc2tQcm9ncmFtOwotICAgIE93blB0cjxDQ1JlbmRlclN1cmZhY2U6OlByb2dyYW0+
IG1fcmVuZGVyU3VyZmFjZVByb2dyYW07Ci0gICAgT3duUHRyPENDUmVuZGVyU3VyZmFjZTo6TWFz
a1Byb2dyYW1BQT4gbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW1BQTsKLSAgICBPd25QdHI8Q0NS
ZW5kZXJTdXJmYWNlOjpQcm9ncmFtQUE+IG1fcmVuZGVyU3VyZmFjZVByb2dyYW1BQTsKLSAgICBP
d25QdHI8Q0NWaWRlb0xheWVySW1wbDo6UkdCQVByb2dyYW0+IG1fdmlkZW9MYXllclJHQkFQcm9n
cmFtOwotICAgIE93blB0cjxDQ1ZpZGVvTGF5ZXJJbXBsOjpZVVZQcm9ncmFtPiBtX3ZpZGVvTGF5
ZXJZVVZQcm9ncmFtOwotICAgIE93blB0cjxDQ1ZpZGVvTGF5ZXJJbXBsOjpOYXRpdmVUZXh0dXJl
UHJvZ3JhbT4gbV92aWRlb0xheWVyTmF0aXZlVGV4dHVyZVByb2dyYW07Ci0gICAgT3duUHRyPEND
VmlkZW9MYXllckltcGw6OlN0cmVhbVRleHR1cmVQcm9ncmFtPiBtX3N0cmVhbVRleHR1cmVMYXll
clByb2dyYW07CisKKyAgICAvLyBUaGlzIGJsb2NrIG9mIGJpbmRpbmdzIGRlZmluZXMgYWxsIG9m
IHRoZSBwcm9ncmFtcyB1c2VkIGJ5IHRoZSBjb21wb3NpdG9yIGl0c2VsZi4KKworICAgIC8vIFRp
bGVkIGxheWVyIHNoYWRlcnMuCisgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFk
ZXJUaWxlLCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYT4gVGlsZVByb2dyYW07CisgICAgdHlw
ZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJHQkFU
ZXhDbGFtcEFscGhhQUE+IFRpbGVQcm9ncmFtQUE7CisgICAgdHlwZWRlZiBQcm9ncmFtQmluZGlu
ZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJHQkFUZXhDbGFtcFN3aXp6bGVBbHBo
YUFBPiBUaWxlUHJvZ3JhbVN3aXp6bGVBQTsKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZl
cnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdCQVRleE9wYXF1ZT4gVGlsZVByb2dyYW1P
cGFxdWU7CisgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFn
bWVudFNoYWRlclJHQkFUZXhTd2l6emxlQWxwaGE+IFRpbGVQcm9ncmFtU3dpenpsZTsKKyAgICB0
eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdC
QVRleFN3aXp6bGVPcGFxdWU+IFRpbGVQcm9ncmFtU3dpenpsZU9wYXF1ZTsKKyAgICB0eXBlZGVm
IFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleCwgRnJhZ21lbnRTaGFkZXJDaGVja2Vy
Ym9hcmQ+IFRpbGVDaGVja2VyYm9hcmRQcm9ncmFtOworCisgICAgLy8gUmVuZGVyIHN1cmZhY2Ug
c2hhZGVycy4KKyAgICAvLyBDQ1JlbmRlclN1cmZhY2U6OmRyYXdMYXllcnMoKSBuZWVkcyB0byBz
ZWUgdGhlc2UgcHJvZ3JhbXMgY3VycmVudGx5LgorICAgIC8vIEZJWE1FOiBBZGQgYSBxdWFkIHR5
cGUgZm9yIHJlbmRlciBzdXJmYWNlcyBhbmQgZ2V0IHJpZCBvZiB0aGlzIGZyaWVuZGx5bmVzcy4K
KyAgICBmcmllbmQgY2xhc3MgQ0NSZW5kZXJTdXJmYWNlOyAKKyAgICB0eXBlZGVmIFByb2dyYW1C
aW5kaW5nPFZlcnRleFNoYWRlclBvc1RleCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxwaGE+IFJl
bmRlclN1cmZhY2VQcm9ncmFtOworICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hh
ZGVyUG9zVGV4LCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYU1hc2s+IFJlbmRlclN1cmZhY2VN
YXNrUHJvZ3JhbTsKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclF1YWQs
IEZyYWdtZW50U2hhZGVyUkdCQVRleEFscGhhQUE+IFJlbmRlclN1cmZhY2VQcm9ncmFtQUE7Cisg
ICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJRdWFkLCBGcmFnbWVudFNoYWRl
clJHQkFUZXhBbHBoYU1hc2tBQT4gUmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtQUE7CisKKyAgICAv
LyBUZXh0dXJlIHNoYWRlcnMuCisgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFk
ZXJQb3NUZXgsIEZyYWdtZW50U2hhZGVyUkdCQVRleEZsaXBBbHBoYT4gVGV4dHVyZVByb2dyYW1G
bGlwOworICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4VHJhbnNm
b3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhSZWN0QWxwaGE+IFRleHR1cmVUZXhSZWN0UHJvZ3Jh
bTsKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9y
bSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4UmVjdEZsaXBBbHBoYT4gVGV4dHVyZVRleFJlY3RQcm9n
cmFtRmxpcDsKKworICAgIC8vIFZpZGVvIHNoYWRlcnMuCisgICAgdHlwZWRlZiBQcm9ncmFtQmlu
ZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXhUcmFuc2Zvcm0sIEZyYWdtZW50U2hhZGVyUkdCQVRleEZs
aXBBbHBoYT4gVmlkZW9SR0JBUHJvZ3JhbTsKKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZl
cnRleFNoYWRlclZpZGVvVHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlck9FU0ltYWdlRXh0ZXJuYWw+
IFZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW07CisgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxW
ZXJ0ZXhTaGFkZXJQb3NUZXhZVVZTdHJldGNoLCBGcmFnbWVudFNoYWRlcllVVlZpZGVvPiBWaWRl
b1lVVlByb2dyYW07CisKKyAgICAvLyBTcGVjaWFsIHB1cnBvc2UgLyBlZmZlY3RzIHNoYWRlcnMu
CisgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3MsIEZyYWdtZW50U2hh
ZGVyQ29sb3I+IFNvbGlkQ29sb3JQcm9ncmFtOworCisgICAgLy8gRGVidWdnaW5nIHNoYWRlcnMu
CisgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXgsIEZyYWdtZW50
U2hhZGVyUkdCQVRleFN3aXp6bGVBbHBoYT4gSGVhZHNVcERpc3BsYXlQcm9ncmFtOworCisKKyAg
ICBjb25zdCBUaWxlUHJvZ3JhbSogdGlsZVByb2dyYW0oKTsKKyAgICBjb25zdCBUaWxlUHJvZ3Jh
bU9wYXF1ZSogdGlsZVByb2dyYW1PcGFxdWUoKTsKKyAgICBjb25zdCBUaWxlUHJvZ3JhbUFBKiB0
aWxlUHJvZ3JhbUFBKCk7CisgICAgY29uc3QgVGlsZVByb2dyYW1Td2l6emxlKiB0aWxlUHJvZ3Jh
bVN3aXp6bGUoKTsKKyAgICBjb25zdCBUaWxlUHJvZ3JhbVN3aXp6bGVPcGFxdWUqIHRpbGVQcm9n
cmFtU3dpenpsZU9wYXF1ZSgpOworICAgIGNvbnN0IFRpbGVQcm9ncmFtU3dpenpsZUFBKiB0aWxl
UHJvZ3JhbVN3aXp6bGVBQSgpOworICAgIGNvbnN0IFRpbGVDaGVja2VyYm9hcmRQcm9ncmFtKiB0
aWxlQ2hlY2tlcmJvYXJkUHJvZ3JhbSgpOworIAorICAgIGNvbnN0IFJlbmRlclN1cmZhY2VQcm9n
cmFtKiByZW5kZXJTdXJmYWNlUHJvZ3JhbSgpOworICAgIGNvbnN0IFJlbmRlclN1cmZhY2VQcm9n
cmFtQUEqIHJlbmRlclN1cmZhY2VQcm9ncmFtQUEoKTsKKyAgICBjb25zdCBSZW5kZXJTdXJmYWNl
TWFza1Byb2dyYW0qIHJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSgpOworICAgIGNvbnN0IFJlbmRl
clN1cmZhY2VNYXNrUHJvZ3JhbUFBKiByZW5kZXJTdXJmYWNlTWFza1Byb2dyYW1BQSgpOworCisg
ICAgY29uc3QgVGV4dHVyZVByb2dyYW1GbGlwKiB0ZXh0dXJlUHJvZ3JhbUZsaXAoKTsKKyAgICBj
b25zdCBUZXh0dXJlVGV4UmVjdFByb2dyYW0qIHRleHR1cmVUZXhSZWN0UHJvZ3JhbSgpOworICAg
IGNvbnN0IFRleHR1cmVUZXhSZWN0UHJvZ3JhbUZsaXAqIHRleHR1cmVUZXhSZWN0UHJvZ3JhbUZs
aXAoKTsKKworICAgIGNvbnN0IFZpZGVvUkdCQVByb2dyYW0qIHZpZGVvUkdCQVByb2dyYW0oKTsK
KyAgICBjb25zdCBWaWRlb1lVVlByb2dyYW0qIHZpZGVvWVVWUHJvZ3JhbSgpOworICAgIGNvbnN0
IFZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0qIHZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0oKTsK
KworICAgIGNvbnN0IFNvbGlkQ29sb3JQcm9ncmFtKiBzb2xpZENvbG9yUHJvZ3JhbSgpOworCisg
ICAgY29uc3QgSGVhZHNVcERpc3BsYXlQcm9ncmFtKiBoZWFkc1VwRGlzcGxheVByb2dyYW0oKTsK
KworICAgIE93blB0cjxUaWxlUHJvZ3JhbT4gbV90aWxlUHJvZ3JhbTsKKyAgICBPd25QdHI8VGls
ZVByb2dyYW1PcGFxdWU+IG1fdGlsZVByb2dyYW1PcGFxdWU7CisgICAgT3duUHRyPFRpbGVQcm9n
cmFtQUE+IG1fdGlsZVByb2dyYW1BQTsKKyAgICBPd25QdHI8VGlsZVByb2dyYW1Td2l6emxlPiBt
X3RpbGVQcm9ncmFtU3dpenpsZTsKKyAgICBPd25QdHI8VGlsZVByb2dyYW1Td2l6emxlT3BhcXVl
PiBtX3RpbGVQcm9ncmFtU3dpenpsZU9wYXF1ZTsKKyAgICBPd25QdHI8VGlsZVByb2dyYW1Td2l6
emxlQUE+IG1fdGlsZVByb2dyYW1Td2l6emxlQUE7CisgICAgT3duUHRyPFRpbGVDaGVja2VyYm9h
cmRQcm9ncmFtPiBtX3RpbGVDaGVja2VyYm9hcmRQcm9ncmFtOworCisgICAgT3duUHRyPFJlbmRl
clN1cmZhY2VQcm9ncmFtPiBtX3JlbmRlclN1cmZhY2VQcm9ncmFtOworICAgIE93blB0cjxSZW5k
ZXJTdXJmYWNlUHJvZ3JhbUFBPiBtX3JlbmRlclN1cmZhY2VQcm9ncmFtQUE7CisgICAgT3duUHRy
PFJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbT4gbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW07Cisg
ICAgT3duUHRyPFJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbUFBPiBtX3JlbmRlclN1cmZhY2VNYXNr
UHJvZ3JhbUFBOworCisgICAgT3duUHRyPFRleHR1cmVQcm9ncmFtRmxpcD4gbV90ZXh0dXJlUHJv
Z3JhbUZsaXA7CisgICAgT3duUHRyPFRleHR1cmVUZXhSZWN0UHJvZ3JhbT4gbV90ZXh0dXJlVGV4
UmVjdFByb2dyYW07CisgICAgT3duUHRyPFRleHR1cmVUZXhSZWN0UHJvZ3JhbUZsaXA+IG1fdGV4
dHVyZVRleFJlY3RQcm9ncmFtRmxpcDsKKworICAgIE93blB0cjxWaWRlb1JHQkFQcm9ncmFtPiBt
X3ZpZGVvUkdCQVByb2dyYW07CisgICAgT3duUHRyPFZpZGVvWVVWUHJvZ3JhbT4gbV92aWRlb1lV
VlByb2dyYW07CisgICAgT3duUHRyPFZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0+IG1fdmlkZW9T
dHJlYW1UZXh0dXJlUHJvZ3JhbTsKKworICAgIE93blB0cjxTb2xpZENvbG9yUHJvZ3JhbT4gbV9z
b2xpZENvbG9yUHJvZ3JhbTsKKyAgICBPd25QdHI8SGVhZHNVcERpc3BsYXlQcm9ncmFtPiBtX2hl
YWRzVXBEaXNwbGF5UHJvZ3JhbTsKIAogICAgIE93blB0cjxUZXh0dXJlTWFuYWdlcj4gbV9yZW5k
ZXJTdXJmYWNlVGV4dHVyZU1hbmFnZXI7CiAgICAgT3duUHRyPEFjY2VsZXJhdGVkVGV4dHVyZUNv
cGllcj4gbV90ZXh0dXJlQ29waWVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uY3BwCmluZGV4IDhmYTI1
YzQzYzA5ZWI5ODA5NTliNzNlMzI4NTI1OGJkMzVmOTg0NjQuLmU3YjhjNWFhZmJmM2U3ZWI4MmZj
NDIyOGE3MmU4NjBjN2EwYzVjY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5jcHAKQEAgLTYzLDM4
ICs2Myw2IEBAIFN0cmluZyBWZXJ0ZXhTaGFkZXJQb3NUZXg6OmdldFNoYWRlclN0cmluZygpIGNv
bnN0CiAgICAgKTsKIH0KIAotVmVydGV4U2hhZGVyUG9zVGV4U3RyZXRjaDo6VmVydGV4U2hhZGVy
UG9zVGV4U3RyZXRjaCgpCi0gICAgOiBtX21hdHJpeExvY2F0aW9uKC0xKQotICAgICwgbV9vZmZz
ZXRMb2NhdGlvbigtMSkKLSAgICAsIG1fc2NhbGVMb2NhdGlvbigtMSkKLXsKLX0KLQotdm9pZCBW
ZXJ0ZXhTaGFkZXJQb3NUZXhTdHJldGNoOjppbml0KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCB1bnNpZ25lZCBwcm9ncmFtKQotewotICAgIG1fbWF0cml4TG9jYXRpb24gPSBjb250ZXh0LT5n
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgIm1hdHJpeCIpOwotICAgIG1fb2Zmc2V0TG9jYXRp
b24gPSBjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgIm9mZnNldCIpOwotICAg
IG1fc2NhbGVMb2NhdGlvbiA9IGNvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAi
c2NhbGUiKTsKLSAgICBBU1NFUlQobV9tYXRyaXhMb2NhdGlvbiAhPSAtMSAmJiBtX29mZnNldExv
Y2F0aW9uICE9IC0xICYmIG1fc2NhbGVMb2NhdGlvbiAhPSAtMSk7Ci19Ci0KLVN0cmluZyBWZXJ0
ZXhTaGFkZXJQb3NUZXhTdHJldGNoOjpnZXRTaGFkZXJTdHJpbmcoKSBjb25zdAotewotICAgIHJl
dHVybiBTSEFERVIoCi0gICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfcG9zaXRpb247Ci0gICAgICAg
IGF0dHJpYnV0ZSB2ZWMyIGFfdGV4Q29vcmQ7Ci0gICAgICAgIHVuaWZvcm0gbWF0NCBtYXRyaXg7
Ci0gICAgICAgIHVuaWZvcm0gdmVjMiBvZmZzZXQ7Ci0gICAgICAgIHVuaWZvcm0gdmVjMiBzY2Fs
ZTsKLSAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7Ci0gICAgICAgIHZvaWQgbWFpbigp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gbWF0cml4ICogYV9wb3NpdGlv
bjsKLSAgICAgICAgICAgIHZfdGV4Q29vcmQgPSBzY2FsZSAqIGFfdGV4Q29vcmQgKyBvZmZzZXQ7
Ci0gICAgICAgIH0KLSAgICApOwotfQotCiBWZXJ0ZXhTaGFkZXJQb3NUZXhZVVZTdHJldGNoOjpW
ZXJ0ZXhTaGFkZXJQb3NUZXhZVVZTdHJldGNoKCkKICAgICA6IG1fbWF0cml4TG9jYXRpb24oLTEp
CiAgICAgLCBtX3lXaWR0aFNjYWxlRmFjdG9yTG9jYXRpb24oLTEpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0u
aAppbmRleCBiMjgzN2U5MWVhYzFhODk1NTM5NGJkYjE4MWYxNDlkMjZmM2E3MGFjLi44MWRiM2Uy
NDMyMWUzNWYxNjg5YTM0MWE2ZmUxNDQzOWEzMGEwNWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmgK
QEAgLTQ4LDIzICs0OCw2IEBAIHByaXZhdGU6CiAgICAgaW50IG1fbWF0cml4TG9jYXRpb247CiB9
OwogCi1jbGFzcyBWZXJ0ZXhTaGFkZXJQb3NUZXhTdHJldGNoIHsKLXB1YmxpYzoKLSAgICBWZXJ0
ZXhTaGFkZXJQb3NUZXhTdHJldGNoKCk7Ci0KLSAgICB2b2lkIGluaXQoR3JhcGhpY3NDb250ZXh0
M0QqLCB1bnNpZ25lZCBwcm9ncmFtKTsKLSAgICBTdHJpbmcgZ2V0U2hhZGVyU3RyaW5nKCkgY29u
c3Q7Ci0KLSAgICBpbnQgbWF0cml4TG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX21hdHJpeExv
Y2F0aW9uOyB9Ci0gICAgaW50IG9mZnNldExvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9vZmZz
ZXRMb2NhdGlvbjsgfQotICAgIGludCBzY2FsZUxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9z
Y2FsZUxvY2F0aW9uOyB9Ci0KLXByaXZhdGU6Ci0gICAgaW50IG1fbWF0cml4TG9jYXRpb247Ci0g
ICAgaW50IG1fb2Zmc2V0TG9jYXRpb247Ci0gICAgaW50IG1fc2NhbGVMb2NhdGlvbjsKLX07Ci0K
IGNsYXNzIFZlcnRleFNoYWRlclBvc1RleFlVVlN0cmV0Y2ggewogcHVibGljOgogICAgIFZlcnRl
eFNoYWRlclBvc1RleFlVVlN0cmV0Y2goKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaApp
bmRleCBjMjJkZmMyMjlhNWQ4YzA1MWMzNGYyNTFjNDkxYjY2OGRhYTY2ZjBmLi40ODMxZTVkZDE4
YzNlMTEyMWExOTJiOTlhNzRhZjFiYWNjZDJjZmFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NIZWFkc1VwRGlz
cGxheS5oCkBAIC0yNyw4ICsyNyw2IEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAKLSNpbmNsdWRlICJQcm9ncmFtQmluZGluZy5oIgotI2luY2x1ZGUgIlNoYWRlckNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiY2MvQ0NGb250QXRsYXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtNTYsOCArNTQsNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBlbmFibGVkKGNvbnN0IENDU2V0
dGluZ3MmKSBjb25zdDsKICAgICB2b2lkIGRyYXcoQ0NMYXllclRyZWVIb3N0SW1wbCopOwogCi0g
ICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXgsIEZyYWdtZW50U2hh
ZGVyUkdCQVRleFN3aXp6bGVBbHBoYT4gUHJvZ3JhbTsKLQogcHJpdmF0ZToKICAgICBDQ0hlYWRz
VXBEaXNwbGF5KCkgeyB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
CmluZGV4IDk1OGZiMDg4NjVkNDZlNjg2MDZmYmUzMzc1Y2QxYTc5N2JjM2E4MWIuLmJkOWE1ZTgx
NDdmYzVjMDExMGE0Mzc5ZjhhOWM2OTExYmFkODllYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuY3BwCkBAIC0zNCw4ICszNCwxMCBAQAogI2luY2x1ZGUgImNjL0NDRGFt
YWdlVHJhY2tlci5oIgogI2luY2x1ZGUgImNjL0NDRGVidWdSZWN0SGlzdG9yeS5oIgogI2luY2x1
ZGUgImNjL0NDRGVsYXlCYXNlZFRpbWVTb3VyY2UuaCIKKyNpbmNsdWRlICJjYy9DQ0ZvbnRBdGxh
cy5oIgogI2luY2x1ZGUgImNjL0NDRnJhbWVSYXRlQ291bnRlci5oIgogI2luY2x1ZGUgImNjL0ND
R2VzdHVyZUN1cnZlLmgiCisjaW5jbHVkZSAiY2MvQ0NIZWFkc1VwRGlzcGxheS5oIgogI2luY2x1
ZGUgImNjL0NDTGF5ZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdC5o
IgogI2luY2x1ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdENvbW1vbi5oIgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVIb3N0
SW1wbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5oCmluZGV4IDY1NTg5ZTgyMjgyODQ0ZDQ1YzlmNDczOGNmN2E4ZWFm
NDY4MTI1ZWIuLmM4ZGFlMGI5NGIyNzFkMzczNjhhMWEwOTUzMWMxNThhYzNjNDM2M2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5
ZXJUcmVlSG9zdEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKQEAgLTQzLDYgKzQzLDcgQEAgY2xhc3Mg
Q0NDb21wbGV0aW9uRXZlbnQ7CiBjbGFzcyBDQ0RlYnVnUmVjdEhpc3Rvcnk7CiBjbGFzcyBDQ0Zv
bnRBdGxhczsKIGNsYXNzIENDRnJhbWVSYXRlQ291bnRlcjsKK2NsYXNzIENDSGVhZHNVcERpc3Bs
YXk7CiBjbGFzcyBDQ1BhZ2VTY2FsZUFuaW1hdGlvbjsKIGNsYXNzIENDTGF5ZXJJbXBsOwogY2xh
c3MgQ0NMYXllclRyZWVIb3N0SW1wbFRpbWVTb3VyY2VBZGFwdGVyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVu
ZGVyU3VyZmFjZS5jcHAKaW5kZXggYzhiOTFjZmM2ZDdkNTQ0ZTljZDFmZDQ1YTc0ZjVhODI2NjAy
NTkzZC4uZWMxYWMxNjdhMGVhZDIwMTFiYzFhNzlkMzM0OTI1ZWU0NGNmYjBiZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJT
dXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCkBAIC0xNjksOSArMTY5LDkgQEAgSW50UmVjdCBDQ1Jl
bmRlclN1cmZhY2U6OnJlYWRiYWNrRGV2aWNlQ29udGVudFJlY3QoTGF5ZXJSZW5kZXJlckNocm9t
aXVtKiBsYXllclIKICAgICByZXR1cm4gY29tcHV0ZVJlYWRiYWNrRGV2aWNlQm91bmRpbmdCb3go
bGF5ZXJSZW5kZXJlciwgZHJhd1RyYW5zZm9ybSk7CiB9CiAKLXN0YXRpYyB2b2lkIGNvcHlUZXh0
dXJlVG9GcmFtZWJ1ZmZlcihMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGlu
dCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmIGJvdW5kcywgY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIGRyYXdNYXRyaXgpCit2b2lkIENDUmVuZGVyU3VyZmFjZTo6Y29weVRleHR1cmVUb0Zy
YW1lYnVmZmVyKExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSZW5kZXJlciwgaW50IHRleHR1
cmVJZCwgY29uc3QgSW50U2l6ZSYgYm91bmRzLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYg
ZHJhd01hdHJpeCkKIHsKLSAgICBjb25zdCBDQ1JlbmRlclN1cmZhY2U6OlByb2dyYW0qIHByb2dy
YW0gPSBsYXllclJlbmRlcmVyLT5yZW5kZXJTdXJmYWNlUHJvZ3JhbSgpOworICAgIGNvbnN0IExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6UmVuZGVyU3VyZmFjZVByb2dyYW0qIHByb2dyYW0gPSBsYXll
clJlbmRlcmVyLT5yZW5kZXJTdXJmYWNlUHJvZ3JhbSgpOwogCiAgICAgR0xDKGxheWVyUmVuZGVy
ZXItPmNvbnRleHQoKSwgbGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCkpOwogICAgIEdMQyhsYXllclJlbmRlcmVyLT5jb250
ZXh0KCksIGxheWVyUmVuZGVyZXItPmNvbnRleHQoKS0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmVJZCkpOwpAQCAtMjkxLDE4ICsyOTEsMTggQEAgdm9p
ZCBDQ1JlbmRlclN1cmZhY2U6OmRyYXdMYXllcihMYXllclJlbmRlcmVyQ2hyb21pdW0qIGxheWVy
UmVuZGVyZXIsIENDTGF5ZXJJbXAKIAogICAgIGlmICh1c2VNYXNrKSB7CiAgICAgICAgIGlmICh1
c2VBQSkgewotICAgICAgICAgICAgY29uc3QgTWFza1Byb2dyYW1BQSogcHJvZ3JhbSA9IGxheWVy
UmVuZGVyZXItPnJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbUFBKCk7CisgICAgICAgICAgICBjb25z
dCBMYXllclJlbmRlcmVyQ2hyb21pdW06OlJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbUFBKiBwcm9n
cmFtID0gbGF5ZXJSZW5kZXJlci0+cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtQUEoKTsKICAgICAg
ICAgICAgIGRyYXdTdXJmYWNlKGxheWVyUmVuZGVyZXIsIG1hc2tMYXllciwgZHJhd1RyYW5zZm9y
bSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGNvbnRlbnRzVGV4dHVyZUlk
LCBwcm9ncmFtLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLm1hc2tTYW1wbGVyTG9jYXRpb24o
KSwgcHJvZ3JhbS0+dmVydGV4U2hhZGVyKCkucG9pbnRMb2NhdGlvbigpLCBwcm9ncmFtLT5mcmFn
bWVudFNoYWRlcigpLmVkZ2VMb2NhdGlvbigpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIGNvbnN0IE1hc2tQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+cmVuZGVyU3Vy
ZmFjZU1hc2tQcm9ncmFtKCk7CisgICAgICAgICAgICBjb25zdCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OlJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnJl
bmRlclN1cmZhY2VNYXNrUHJvZ3JhbSgpOwogICAgICAgICAgICAgZHJhd1N1cmZhY2UobGF5ZXJS
ZW5kZXJlciwgbWFza0xheWVyLCBkcmF3VHJhbnNmb3JtLCBkZXZpY2VNYXRyaXgsIGRldmljZVJl
Y3QsIGxheWVyUXVhZCwgY29udGVudHNUZXh0dXJlSWQsIHByb2dyYW0sIHByb2dyYW0tPmZyYWdt
ZW50U2hhZGVyKCkubWFza1NhbXBsZXJMb2NhdGlvbigpLCAtMSwgLTEpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHVzZUFBKSB7Ci0gICAgICAgICAgICBjb25zdCBQcm9n
cmFtQUEqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT5yZW5kZXJTdXJmYWNlUHJvZ3JhbUFBKCk7
CisgICAgICAgICAgICBjb25zdCBMYXllclJlbmRlcmVyQ2hyb21pdW06OlJlbmRlclN1cmZhY2VQ
cm9ncmFtQUEqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT5yZW5kZXJTdXJmYWNlUHJvZ3JhbUFB
KCk7CiAgICAgICAgICAgICBkcmF3U3VyZmFjZShsYXllclJlbmRlcmVyLCBtYXNrTGF5ZXIsIGRy
YXdUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNlUmVjdCwgbGF5ZXJRdWFkLCBjb250ZW50
c1RleHR1cmVJZCwgcHJvZ3JhbSwgLTEsIHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnBvaW50TG9j
YXRpb24oKSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9jYXRpb24oKSk7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25zdCBQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJS
ZW5kZXJlci0+cmVuZGVyU3VyZmFjZVByb2dyYW0oKTsKKyAgICAgICAgICAgIGNvbnN0IExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6UmVuZGVyU3VyZmFjZVByb2dyYW0qIHByb2dyYW0gPSBsYXllclJl
bmRlcmVyLT5yZW5kZXJTdXJmYWNlUHJvZ3JhbSgpOwogICAgICAgICAgICAgZHJhd1N1cmZhY2Uo
bGF5ZXJSZW5kZXJlciwgbWFza0xheWVyLCBkcmF3VHJhbnNmb3JtLCBkZXZpY2VNYXRyaXgsIGRl
dmljZVJlY3QsIGxheWVyUXVhZCwgY29udGVudHNUZXh0dXJlSWQsIHByb2dyYW0sIC0xLCAtMSwg
LTEpOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaAppbmRleCBm
NDEzMmUyMGNmOGY1NDMzZTRhZDI0ZGY2YmY5MDZiNWQ4MWU1MDEzLi4xMGE1ZjM2NWU3MDMxODBi
NGZiYmE5ZjQxM2U0Mjk2ZGZhNDNiZjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuaApA
QCAtMzIsOCArMzIsNiBAQAogI2luY2x1ZGUgIkZpbHRlck9wZXJhdGlvbnMuaCIKICNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCi0jaW5jbHVkZSAiUHJvZ3JhbUJp
bmRpbmcuaCIKLSNpbmNsdWRlICJTaGFkZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlNrQml0bWFw
LmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hbmFnZXIuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlv
bk1hdHJpeC5oIgpAQCAtMTM2LDExICsxMzQsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldE1h
c2tMYXllcihDQ0xheWVySW1wbCogbWFza0xheWVyKSB7IG1fbWFza0xheWVyID0gbWFza0xheWVy
OyB9CiAKLSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleCwgRnJh
Z21lbnRTaGFkZXJSR0JBVGV4QWxwaGE+IFByb2dyYW07Ci0gICAgdHlwZWRlZiBQcm9ncmFtQmlu
ZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXgsIEZyYWdtZW50U2hhZGVyUkdCQVRleEFscGhhTWFzaz4g
TWFza1Byb2dyYW07Ci0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJRdWFk
LCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYUFBPiBQcm9ncmFtQUE7Ci0gICAgdHlwZWRlZiBQ
cm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJRdWFkLCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBo
YU1hc2tBQT4gTWFza1Byb2dyYW1BQTsKLQogICAgIE1hbmFnZWRUZXh0dXJlKiBjb250ZW50c1Rl
eHR1cmUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRzVGV4dHVyZS5nZXQoKTsgfQogICAgIE1h
bmFnZWRUZXh0dXJlKiBiYWNrZ3JvdW5kVGV4dHVyZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dy
b3VuZFRleHR1cmUuZ2V0KCk7IH0KIApAQCAtMTY1LDYgKzE1OCw4IEBAIHByaXZhdGU6CiAgICAg
dGVtcGxhdGUgPGNsYXNzIFQ+CiAgICAgdm9pZCBkcmF3U3VyZmFjZShMYXllclJlbmRlcmVyQ2hy
b21pdW0qLCBDQ0xheWVySW1wbCosIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3VHJh
bnNmb3JtLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZGV2aWNlVHJhbnNmb3JtLCBjb25z
dCBDQ0xheWVyUXVhZCYgZGV2aWNlUmVjdCwgY29uc3QgQ0NMYXllclF1YWQmLCBpbnQgY29udGVu
dHNUZXh0dXJlSWQsIGNvbnN0IFQqIHByb2dyYW0sIGludCBzaGFkZXJNYXNrU2FtcGxlckxvY2F0
aW9uLCBpbnQgc2hhZGVyUXVhZExvY2F0aW9uLCBpbnQgc2hhZGVyRWRnZUxvY2F0aW9uKTsKIAor
ICAgIHN0YXRpYyB2b2lkIGNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihMYXllclJlbmRlcmVyQ2hy
b21pdW0qLCBpbnQgdGV4dHVyZUlkLCBjb25zdCBJbnRTaXplJiBib3VuZHMsIGNvbnN0IFRyYW5z
Zm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0cml4KTsKKwogICAgIENDTGF5ZXJJbXBsKiBtX293bmlu
Z0xheWVyOwogICAgIENDTGF5ZXJJbXBsKiBtX21hc2tMYXllcjsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQ
cm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NpbmdsZVRocmVhZFByb3h5LmNwcAppbmRleCBhYWNmZTU0YWI2MDYyNmJhMjMzZjU0MmEyMmUw
Y2RmOTBhY2FlZWJkLi4zMGJmOWMzMTEyYzk1NzkyY2Y2ZjJhZjE4OTAwNWQzNjBmNTIwNzg4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1NpbmdsZVRocmVhZFByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1NpbmdsZVRocmVhZFByb3h5LmNwcApAQCAtMjksNiArMjksNyBA
QAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiTGF5ZXJSZW5kZXJl
ckNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgorI2luY2x1ZGUgImNjL0NDRm9u
dEF0bGFzLmgiCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCiAjaW5jbHVkZSAiY2Mv
Q0NUZXh0dXJlVXBkYXRlci5oIgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0
dXJlTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RleHR1cmVMYXllckltcGwuaAppbmRleCBmMWMyNjVmYTFlMWViMjBiMjE5ZmY3NjFj
ZWVlNDdlNTc5ZmMwN2EzLi5lYzVjMDRmZDVjNGI0ZTAzMDI3YzY5YWU0MDc4NGFiMjUwNDliMWMw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9j
Yy9DQ1RleHR1cmVMYXllckltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ1RleHR1cmVMYXllckltcGwuaApAQCAtMjYsOCArMjYsNiBAQAog
I2lmbmRlZiBDQ1RleHR1cmVMYXllckltcGxfaAogI2RlZmluZSBDQ1RleHR1cmVMYXllckltcGxf
aAogCi0jaW5jbHVkZSAiUHJvZ3JhbUJpbmRpbmcuaCIKLSNpbmNsdWRlICJTaGFkZXJDaHJvbWl1
bS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTQyLDEyICs0MCw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBhcHBlbmRRdWFk
cyhDQ1F1YWRDdWxsZXImLCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGJvb2wmIGhhZE1pc3Np
bmdUaWxlcykgT1ZFUlJJREU7CiAKLSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNo
YWRlclBvc1RleCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4RmxpcEFscGhhPiBQcm9ncmFtRmxpcDsK
LSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFN0cmV0Y2gsIEZy
YWdtZW50U2hhZGVyUkdCQVRleEFscGhhPiBQcm9ncmFtU3RyZXRjaDsKLSAgICB0eXBlZGVmIFBy
b2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFN0cmV0Y2gsIEZyYWdtZW50U2hhZGVyUkdC
QVRleEZsaXBBbHBoYT4gUHJvZ3JhbVN0cmV0Y2hGbGlwOwotICAgIHR5cGVkZWYgUHJvZ3JhbUJp
bmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhS
ZWN0QWxwaGE+IFRleFJlY3RQcm9ncmFtOwotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVy
dGV4U2hhZGVyUG9zVGV4VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhSZWN0RmxpcEFs
cGhhPiBUZXhSZWN0UHJvZ3JhbUZsaXA7Ci0KICAgICB2aXJ0dWFsIHZvaWQgd2lsbERyYXcoTGF5
ZXJSZW5kZXJlckNocm9taXVtKikgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGRpZExvc2VD
b250ZXh0KCkgT1ZFUlJJREU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKaW5kZXggMTM4
YzcyMzQ5OGJkMWY4Y2NiMTJlOGVkYjkzM2JmNDhhZGQ5MDQ5Ny4uZWEyZmQ1ZThjMmI3N2ZjNjgz
NmRlMGUyZDIxODY1YjNiNjkxNDAyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaHJlYWRQcm94eS5jcHAKQEAg
LTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIgogI2lu
Y2x1ZGUgIlRyYWNlRXZlbnQuaCIKICNpbmNsdWRlICJjYy9DQ0RlbGF5QmFzZWRUaW1lU291cmNl
LmgiCisjaW5jbHVkZSAiY2MvQ0NGb250QXRsYXMuaCIKICNpbmNsdWRlICJjYy9DQ0ZyYW1lUmF0
ZUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0lucHV0SGFuZGxlci5oIgogI2luY2x1ZGUg
ImNjL0NDTGF5ZXJUcmVlSG9zdC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCmluZGV4
IDZmYzVjOWU0OWRmNmFlZDIyMTA1OTBkNWQ2NDExNDM4MmMwNTY0M2YuLmJkMTQ2NjUwYmFkNWE3
YWQ2MDIxZjlhYTcyZGRlZTc3NTJhYTE1YmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBs
LmgKQEAgLTU5LDE5ICs1OSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFJlZ2lvbiB2aXNpYmxl
Q29udGVudE9wYXF1ZVJlZ2lvbigpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBk
aWRMb3NlQ29udGV4dCgpIE9WRVJSSURFOwogCi0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxW
ZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYT4gUHJvZ3JhbTsKLSAg
ICAvLyBTaGFkZXIgcHJvZ3JhbSB0aGF0IHN3YXBzIHJlZCBhbmQgYmx1ZSBjb21wb25lbnRzIG9m
IHRleHR1cmUuCi0gICAgLy8gVXNlZCB3aGVuIHRleHR1cmUgZm9ybWF0IGRvZXMgbm90IG1hdGNo
IG5hdGl2ZSBjb2xvciBmb3JtYXQuCi0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhT
aGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJHQkFUZXhTd2l6emxlQWxwaGE+IFByb2dyYW1Td2l6
emxlOwotCi0gICAgLy8gU2FtZSBhcyBhYm92ZSBidXQgaWdub3JpbmcgYWxwaGEgYW5kIHdyaXRp
bmcgb3V0IDEuMCBmb3IgdGhlIGFscGhhIGNoYW5uZWwuCi0gICAgdHlwZWRlZiBQcm9ncmFtQmlu
ZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJHQkFUZXhPcGFxdWU+IFByb2dy
YW1PcGFxdWU7Ci0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBG
cmFnbWVudFNoYWRlclJHQkFUZXhTd2l6emxlT3BhcXVlPiBQcm9ncmFtU3dpenpsZU9wYXF1ZTsK
LQotICAgIC8vIFNoYWRlciBwcm9ncmFtIHRoYXQgcHJvZHVjZXMgYW50aS1hbGlhc2VkIGxheWVy
IGVkZ2VzLgotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyVGlsZSwgRnJh
Z21lbnRTaGFkZXJSR0JBVGV4Q2xhbXBBbHBoYUFBPiBQcm9ncmFtQUE7Ci0gICAgdHlwZWRlZiBQ
cm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJHQkFUZXhDbGFt
cFN3aXp6bGVBbHBoYUFBPiBQcm9ncmFtU3dpenpsZUFBOwotCiBwcm90ZWN0ZWQ6CiAgICAgZXhw
bGljaXQgQ0NUaWxlZExheWVySW1wbChpbnQgaWQpOwogICAgIC8vIEV4cG9zZWQgZm9yIHRlc3Rp
bmcuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgKaW5kZXggOWE5OTI4NWRkZGQzNTIwY2Qy
MzA5YTAwNGYzMWZjNzhlZmZjNTlmOC4uYzdkNTM1YWY0NWI0NGQ3ODkwMjRmYWRmYzlmYjA2YmNm
ZDkyNzg3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllckltcGwuaApAQCAtMjcsOCArMjcsNiBA
QAogI2RlZmluZSBDQ1ZpZGVvTGF5ZXJJbXBsX2gKIAogI2luY2x1ZGUgIk1hbmFnZWRUZXh0dXJl
LmgiCi0jaW5jbHVkZSAiU2hhZGVyQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJWaWRlb0xheWVyQ2hy
b21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHB1YmxpYy9X
ZWJWaWRlb0ZyYW1lUHJvdmlkZXIuaD4KIApAQCAtNDEsOCArMzksNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBjbGFzcyBDQ0xheWVyVHJlZUhvc3RJbXBsOwogY2xhc3MgQ0NWaWRlb0xheWVySW1w
bDsKIAotdGVtcGxhdGU8Y2xhc3MgVmVydGV4U2hhZGVyLCBjbGFzcyBGcmFnbWVudFNoYWRlcj4g
Y2xhc3MgUHJvZ3JhbUJpbmRpbmc7Ci0KIGNsYXNzIENDVmlkZW9MYXllckltcGwgOiBwdWJsaWMg
Q0NMYXllckltcGwKICAgICAgICAgICAgICAgICAgICAgICAgLCBwdWJsaWMgV2ViS2l0OjpXZWJW
aWRlb0ZyYW1lUHJvdmlkZXI6OkNsaWVudCB7CiBwdWJsaWM6CkBAIC01NiwxMSArNTIsNiBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGFwcGVuZFF1YWRzKENDUXVhZEN1bGxlciYsIGNvbnN0
IENDU2hhcmVkUXVhZFN0YXRlKiwgYm9vbCYgaGFkTWlzc2luZ1RpbGVzKSBPVkVSUklERTsKICAg
ICB2aXJ0dWFsIHZvaWQgZGlkRHJhdygpIE9WRVJSSURFOwogCi0gICAgdHlwZWRlZiBQcm9ncmFt
QmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXhUcmFuc2Zvcm0sIEZyYWdtZW50U2hhZGVyUkdCQVRl
eEZsaXBBbHBoYT4gUkdCQVByb2dyYW07Ci0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0
ZXhTaGFkZXJQb3NUZXhZVVZTdHJldGNoLCBGcmFnbWVudFNoYWRlcllVVlZpZGVvPiBZVVZQcm9n
cmFtOwotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4VHJhbnNm
b3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhGbGlwQWxwaGE+IE5hdGl2ZVRleHR1cmVQcm9ncmFt
OwotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyVmlkZW9UcmFuc2Zvcm0s
IEZyYWdtZW50U2hhZGVyT0VTSW1hZ2VFeHRlcm5hbD4gU3RyZWFtVGV4dHVyZVByb2dyYW07Ci0K
ICAgICB2aXJ0dWFsIHZvaWQgZHVtcExheWVyUHJvcGVydGllcyhUZXh0U3RyZWFtJiwgaW50IGlu
ZGVudCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICBNdXRleCYgcHJvdmlkZXJNdXRleCgpIHsgcmV0
dXJuIG1fcHJvdmlkZXJNdXRleDsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3Rlc3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAppbmRleCAwY2IyZjBkZjNhNGU2
ZTIzODViNmYyNmQ1ODk0ZmU1OWRiNTEyNTQ4Li5iOWM0ZWI5OTg2NGM1MTMwMzE4ZjhjNDNhYTJh
N2I1ZjczZjYwM2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0ND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rl
c3RzL0NDTGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcApAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogCiAjaW5jbHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0SW1wbC5oIgotI2lu
Y2x1ZGUgImNjL0NDUXVhZEN1bGxlci5oIgogCiAjaW5jbHVkZSAiQ0NBbmltYXRpb25UZXN0Q29t
bW9uLmgiCiAjaW5jbHVkZSAiQ0NMYXllclRlc3RDb21tb24uaCIKQEAgLTMzLDEwICszMiwxNyBA
QAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkxheWVy
UmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0NDTGF5ZXJJbXBsLmgiCisjaW5jbHVk
ZSAiY2MvQ0NMYXllclRpbGluZ0RhdGEuaCIKKyNpbmNsdWRlICJjYy9DQ1F1YWRDdWxsZXIuaCIK
ICNpbmNsdWRlICJjYy9DQ1Njcm9sbGJhckxheWVySW1wbC5oIgogI2luY2x1ZGUgImNjL0NDU2lu
Z2xlVGhyZWFkUHJveHkuaCIKKyNpbmNsdWRlICJjYy9DQ1RleHR1cmVMYXllckltcGwuaCIKICNp
bmNsdWRlICJjYy9DQ1RpbGVEcmF3UXVhZC5oIgorI2luY2x1ZGUgImNjL0NDVGlsZWRMYXllcklt
cGwuaCIKKyNpbmNsdWRlICJjYy9DQ1ZpZGVvTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSA8Z3Rlc3Qv
Z3Rlc3QuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVmlkZW9GcmFtZS5oPgorI2luY2x1ZGUgPHB1
YmxpYy9XZWJWaWRlb0ZyYW1lUHJvdmlkZXIuaD4KIAogdXNpbmcgbmFtZXNwYWNlIENDTGF5ZXJU
ZXN0Q29tbW9uOwogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>139115</attachid>
            <date>2012-04-26 18:08:36 -0700</date>
            <delta_ts>2012-04-26 18:15:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-84808-20120426180834.patch</filename>
            <type>text/plain</type>
            <size>69155</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE1MzU2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDgyNjIxMTMwOWM1ZGU1
NWJlMzQ0Y2M5NGNhY2FkM2YzZjAxMDhlZS4uN2U4ZTU4ZGE2YTY4YjM3NGNjNDJmN2MyZjFmMDE4
ODZhNDljYjU4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDEyLTA0LTI0ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBN
b3ZlIFByb2dyYW1CaW5kaW5nIGRlZmluaXRpb25zIHRvIExheWVyUmVuZGVyZXJDaHJvbWl1bSBh
bmQgbm9ybWFsaXplIG5hbWluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODQ4MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBUaGUgR0wgcHJvZ3JhbXMgdXNlZCBhcmUgbG9naWNhbGx5IHBhcnQgb2YgTGF5
ZXJSZW5kZXJlckNocm9taXVtIGFuZCBub3Qgc29tZXRoaW5nIHNwZWNpZmljIHRvIGEgbGF5ZXIg
dHlwZSwKKyAgICAgICAgc2luY2UgYSBkaWZmZXJlbnQgcmVuZGVyZXIgd291bGQgd2FudCB0byB1
c2UgYSBkaWZmZXJlbnQgdGhpbmcgdG8gcmVuZGVyIHRoZSBzYW1lIGxheWVyIHR5cGVzLiBUaGlz
IG1vdmVzIGFsbCBvZgorICAgICAgICB0aGUgUHJvZ3JhbUJpbmRpbmcgZGVmaW5pdGlvbnMgaW50
byBMYXllclJlbmRlcmVyQ2hyb21pdW0gYW5kIGdpdmVzIHRoZW0gY29uc2lzdGVudCBuYW1lcy4g
V2l0aCB0aGUgZXhjZXB0aW9uIG9mCisgICAgICAgIENDUmVuZGVyU3VyZmFjZSAobm90ZWQgYnkg
YW4gaW5saW5lIGNvbW1lbnQpLCB0aGVzZSBwcm9ncmFtcyBhcmUgcHJpdmF0ZSB0byBMUkMuCisK
KyAgICAgICAgVGhpcyBwYXRjaCBhbHNvIGRlZHVwbGljYXRlcyBwcm9ncmFtcyBhIGJpdDoKKyAg
ICAgICAgMS4pIFZpZGVvJ3MgTmF0aXZlVGV4dHVyZSBhbmQgUkdCQSBwcm9ncmFtcyB3ZXJlIHRo
ZSBzYW1lIHRoaW5nLCBmb2xkZWQuCisgICAgICAgIDIuKSBUaGUgVGV4U3RyZXRjaCBhbmQgVGV4
VHJhbnNmb3JtIHNoYWRlcnMgYXJlIGJhc2ljYWxseSB0aGUgc2FtZSB0aGluZywgZm9sZGVkIHRv
Z2V0aGVyLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5oOgorICAgICAgICAoTGF5ZXJDaHJvbWl1bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd0NoZWNrZXJib2FyZFF1YWQpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3RGVidWdCb3JkZXJRdWFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1NvbGlkQ29sb3JR
dWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1RpbGVR
dWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1lVVik6
CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSR0JBKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd05hdGl2ZVRleHR1cmUy
RCk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdTdHJlYW1U
ZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJhd1Rl
eHR1cmVRdWFkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6ZHJh
d0hlYWRzVXBEaXNwbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6aW5pdGlhbGl6ZVNoYXJlZE9iamVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5k
ZXJlckNocm9taXVtOjp0aWxlQ2hlY2tlcmJvYXJkUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnNvbGlkQ29sb3JQcm9ncmFtKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6aGVhZHNVcERpc3BsYXlQcm9ncmFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFjZVByb2dy
YW0pOgorICAgICAgICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJTdXJm
YWNlUHJvZ3JhbUFBKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtQUEpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVQcm9ncmFtT3BhcXVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZVByb2dyYW1BQSk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVQcm9ncmFtU3dpenpsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVQcm9ncmFtU3dpenpsZU9w
YXF1ZSk6CisgICAgICAgIChXZWJDb3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVQcm9n
cmFtU3dpenpsZUFBKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6
dGV4dHVyZVByb2dyYW1GbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6dGV4dHVyZVRleFJlY3RQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dGV4dHVyZVRleFJlY3RQcm9ncmFtRmxpcCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXllclJlbmRlcmVyQ2hyb21pdW06OnZpZGVvUkdCQVByb2dyYW0pOgorICAgICAgICAo
V2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRlb1lVVlByb2dyYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRlb1N0cmVhbVRleHR1cmVQcm9n
cmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNo
YXJlZE9iamVjdHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChMYXllclJl
bmRlcmVyQ2hyb21pdW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1No
YWRlckNocm9taXVtLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9T
aGFkZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDSGVhZHNVcERpc3BsYXkuaDoKKyAgICAgICAgKENDSGVhZHNVcERpc3BsYXkpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuY3Bw
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9z
dEltcGwuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQ1Jl
bmRlclN1cmZhY2U6OmNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDQ1JlbmRlclN1cmZhY2U6OmRyYXdMYXllcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmg6CisgICAgICAgIChDQ1JlbmRlclN1cmZh
Y2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhy
ZWFkUHJveHkuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0ND
VGV4dHVyZUxheWVySW1wbC5oOgorICAgICAgICAoQ0NUZXh0dXJlTGF5ZXJJbXBsKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RocmVhZFByb3h5LmNwcDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmg6
CisgICAgICAgIChDQ1RpbGVkTGF5ZXJJbXBsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ1ZpZGVvTGF5ZXJJbXBsLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAg
ICAgICAgKENDVmlkZW9MYXllckltcGwpOgorCiAyMDEyLTA0LTI2ICBKdXN0aW4gTm92b3NhZCAg
PGp1bm92QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIFNpbmdsZSBidWZmZXJl
ZCBjYW52YXMgbGF5ZXJzIHdpdGggdGhlIHRocmVhZGVkIGNvbXBvc2l0b3IKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggMjYxMDg2NTk4MTMyOWNiZjM0NDQyYjQzNGYzNWVlOWQ4YjY2Yzll
Ni4uOTFmYzNjNTZkZTQzY2ZmOWFlNmQ4YmY1YmI1ODcxNTYyNDJjNjlhMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxMi0wNC0yNCAgSmFtZXMgUm9iaW5z
b24gIDxqYW1lc3JAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFtjaHJvbWl1bV0gTW92ZSBQcm9n
cmFtQmluZGluZyBkZWZpbml0aW9ucyB0byBMYXllclJlbmRlcmVyQ2hyb21pdW0gYW5kIG5vcm1h
bGl6ZSBuYW1pbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTg0ODA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgQWRkIHNvbWUgaW5jbHVkZXMgbmVlZGVkIGJ5IHRoaXMgdGVzdCB0aGF0IHdlcmUgcHJldmlv
dXNseSBwaWNrZWQgdXAgYnkgdXBzdHJlYW0gaGVhZGVycy4KKworICAgICAgICAqIHRlc3RzL0ND
TGF5ZXJUcmVlSG9zdEltcGxUZXN0LmNwcDoKKwogMjAxMi0wNC0yNiAgSnVzdGluIE5vdm9zYWQg
IDxqdW5vdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBTaW5nbGUgYnVmZmVy
ZWQgY2FudmFzIGxheWVycyB3aXRoIHRoZSB0aHJlYWRlZCBjb21wb3NpdG9yCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVt
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmgKaW5kZXggMjZmMjY5OWQwYTMyZWIyMWZlZjM5NjExNmY4MmI3NzYzMTJiYzgxOS4uYjU4
ZjAwODU4ZDUwZDZkNWI1MTM3NzlmYWYxMTU5ODMxYjZjYmI3YSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0u
aApAQCAtMTk0LDggKzE5NCw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBwdXNoUHJv
cGVydGllc1RvKENDTGF5ZXJJbXBsKik7CiAKLSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZl
cnRleFNoYWRlclBvcywgRnJhZ21lbnRTaGFkZXJDb2xvcj4gQm9yZGVyUHJvZ3JhbTsKLQogICAg
IHZvaWQgY2xlYXJSZW5kZXJTdXJmYWNlKCkgeyBtX3JlbmRlclN1cmZhY2UuY2xlYXIoKTsgfQog
ICAgIFJlbmRlclN1cmZhY2VDaHJvbWl1bSogcmVuZGVyU3VyZmFjZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVuZGVyU3VyZmFjZS5nZXQoKTsgfQogICAgIHZvaWQgY3JlYXRlUmVuZGVyU3VyZmFjZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5jcHAKaW5kZXggNjM0OGUxNDk2ODdm
NDM1NTA5NjVjYTg2ZDQ0MWJkNmQ4ZmY2MmIyMS4uMDM0YjU0NzM0NjE4NTFiNzU2YTExZWMzOWMw
ZTUyMTYwZTM4MDRiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uY3BwCkBA
IC0zNCwyMyArMzQsMjAgQEAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5j
bHVkZSAiTGF5ZXJSZW5kZXJlckNocm9taXVtLmgiCiAKKyNpbmNsdWRlICJFeHRlbnNpb25zM0Qu
aCIKICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUgIkZsb2F0UXVh
ZC5oIgogI2luY2x1ZGUgIkdlb21ldHJ5QmluZGluZy5oIgogI2luY2x1ZGUgIkdyVGV4dHVyZS5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiTGF5ZXJDaHJvbWl1
bS5oIgotI2luY2x1ZGUgIkxheWVyUGFpbnRlckNocm9taXVtLmgiCiAjaW5jbHVkZSAiTWFuYWdl
ZFRleHR1cmUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtQ29sb3IuaCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIKLSNpbmNsdWRl
ICJUZXh0U3RyZWFtLmgiCiAjaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgogI2luY2x1ZGUgIlRl
eHR1cmVNYW5hZ2VyLmgiCiAjaW5jbHVkZSAiVHJhY2VFdmVudC5oIgogI2luY2x1ZGUgIlRyYWNr
aW5nVGV4dHVyZUFsbG9jYXRvci5oIgotI2luY2x1ZGUgIlRyZWVTeW5jaHJvbml6ZXIuaCIKICNp
bmNsdWRlICJjYy9DQ0NoZWNrZXJib2FyZERyYXdRdWFkLmgiCiAjaW5jbHVkZSAiY2MvQ0NEYW1h
Z2VUcmFja2VyLmgiCiAjaW5jbHVkZSAiY2MvQ0NEZWJ1Z0JvcmRlckRyYXdRdWFkLmgiCkBAIC02
NCw5ICs2MSw2IEBACiAjaW5jbHVkZSAiY2MvQ0NUZXh0dXJlRHJhd1F1YWQuaCIKICNpbmNsdWRl
ICJjYy9DQ1RpbGVEcmF3UXVhZC5oIgogI2luY2x1ZGUgImNjL0NDVmlkZW9EcmF3UXVhZC5oIgot
I2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgotI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgot
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViVmlk
ZW9GcmFtZS5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CkBAIC00OTQsNyArNDg4LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21p
dW06OmRyYXdRdWFkKGNvbnN0IENDRHJhd1F1YWQqIHF1YWQsIGNvbnN0IEZsb2F0UmVjdCYgc3UK
IAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdDaGVja2VyYm9hcmRRdWFkKGNvbnN0
IENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQqIHF1YWQpCiB7Ci0gICAgY29uc3QgQ2hlY2tlcmJvYXJk
UHJvZ3JhbSogcHJvZ3JhbSA9IGNoZWNrZXJib2FyZFByb2dyYW0oKTsKKyAgICBjb25zdCBUaWxl
Q2hlY2tlcmJvYXJkUHJvZ3JhbSogcHJvZ3JhbSA9IHRpbGVDaGVja2VyYm9hcmRQcm9ncmFtKCk7
CiAgICAgQVNTRVJUKHByb2dyYW0gJiYgcHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSk7CiAgICAgR0xD
KGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwog
CkBAIC01MjMsNyArNTE3LDcgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdDaGVj
a2VyYm9hcmRRdWFkKGNvbnN0IENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQqIHEKIHZvaWQgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpkcmF3RGVidWdCb3JkZXJRdWFkKGNvbnN0IENDRGVidWdCb3JkZXJE
cmF3UXVhZCogcXVhZCkKIHsKICAgICBzdGF0aWMgZmxvYXQgZ2xNYXRyaXhbMTZdOwotICAgIGNv
bnN0IExheWVyQ2hyb21pdW06OkJvcmRlclByb2dyYW0qIHByb2dyYW0gPSBib3JkZXJQcm9ncmFt
KCk7CisgICAgY29uc3QgU29saWRDb2xvclByb2dyYW0qIHByb2dyYW0gPSBzb2xpZENvbG9yUHJv
Z3JhbSgpOwogICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkpOwog
ICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFt
KCkpKTsKIApAQCAtNjE3LDggKzYxMSw4IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3UmVuZGVyU3VyZmFjZVF1YWQoY29uc3QgQ0NSZW5kZXJTdXJmYWNlRHJhd1F1YWQqCiAKIHZv
aWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3U29saWRDb2xvclF1YWQoY29uc3QgQ0NTb2xp
ZENvbG9yRHJhd1F1YWQqIHF1YWQpCiB7Ci0gICAgY29uc3QgTGF5ZXJDaHJvbWl1bTo6Qm9yZGVy
UHJvZ3JhbSogc29saWRDb2xvclByb2dyYW0gPSBib3JkZXJQcm9ncmFtKCk7Ci0gICAgR0xDKGNv
bnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKHNvbGlkQ29sb3JQcm9ncmFtLT5wcm9ncmFt
KCkpKTsKKyAgICBjb25zdCBTb2xpZENvbG9yUHJvZ3JhbSogcHJvZ3JhbSA9IHNvbGlkQ29sb3JQ
cm9ncmFtKCk7CisgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFtKHByb2dy
YW0tPnByb2dyYW0oKSkpOwogCiAgICAgSW50UmVjdCB0aWxlUmVjdCA9IHF1YWQtPnF1YWRSZWN0
KCk7CiAKQEAgLTYyOSwxMSArNjIzLDExIEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpk
cmF3U29saWRDb2xvclF1YWQoY29uc3QgQ0NTb2xpZENvbG9yRHJhd1F1YWQqIHF1YWQpCiAgICAg
ZmxvYXQgb3BhY2l0eSA9IHF1YWQtPm9wYWNpdHkoKTsKICAgICBmbG9hdCBhbHBoYSA9IChjb2xv
ci5hbHBoYSgpIC8gMjU1LjApICogb3BhY2l0eTsKIAotICAgIEdMQyhjb250ZXh0KCksIGNvbnRl
eHQoKS0+dW5pZm9ybTRmKHNvbGlkQ29sb3JQcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLmNvbG9y
TG9jYXRpb24oKSwgKGNvbG9yLnJlZCgpIC8gMjU1LjApICogYWxwaGEsIChjb2xvci5ncmVlbigp
IC8gMjU1LjApICogYWxwaGEsIChjb2xvci5ibHVlKCkgLyAyNTUuMCkgKiBhbHBoYSwgYWxwaGEp
KTsKKyAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVuaWZvcm00Zihwcm9ncmFtLT5mcmFn
bWVudFNoYWRlcigpLmNvbG9yTG9jYXRpb24oKSwgKGNvbG9yLnJlZCgpIC8gMjU1LjApICogYWxw
aGEsIChjb2xvci5ncmVlbigpIC8gMjU1LjApICogYWxwaGEsIChjb2xvci5ibHVlKCkgLyAyNTUu
MCkgKiBhbHBoYSwgYWxwaGEpKTsKIAogICAgIGRyYXdUZXh0dXJlZFF1YWQodGlsZVRyYW5zZm9y
bSwKICAgICAgICAgICAgICAgICAgICAgIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdo
dCgpLCAxLjAsIEZsb2F0UXVhZCgpLAotICAgICAgICAgICAgICAgICAgICAgc29saWRDb2xvclBy
b2dyYW0tPnZlcnRleFNoYWRlcigpLm1hdHJpeExvY2F0aW9uKCksCisgICAgICAgICAgICAgICAg
ICAgICBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpLAogICAgICAgICAg
ICAgICAgICAgICAgLTEsIC0xKTsKIH0KIApAQCAtNjYyLDM5ICs2NTYsNiBAQCBzdGF0aWMgdm9p
ZCB0aWxlVW5pZm9ybUxvY2F0aW9uKFQgcHJvZ3JhbSwgVGlsZVByb2dyYW1Vbmlmb3JtcyYgdW5p
Zm9ybXMpCiAgICAgdW5pZm9ybXMuZWRnZUxvY2F0aW9uID0gcHJvZ3JhbS0+ZnJhZ21lbnRTaGFk
ZXIoKS5lZGdlTG9jYXRpb24oKTsKIH0KIAotc3RhdGljIHZvaWQgZmluZFRpbGVQcm9ncmFtVW5p
Zm9ybXMoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBjb25zdCBDQ1RpbGVE
cmF3UXVhZCogcXVhZCwgVGlsZVByb2dyYW1Vbmlmb3JtcyYgdW5pZm9ybXMsIGJvb2wgcXVhZElz
Q2xpcHBlZCkKLXsKLSAgICAvLyBGb3Igbm93LCB3ZSBzaW1wbHkgc2tpcCBhbnRpLWFsaWFzaW5n
IHdpdGggdGhlIHF1YWQgaXMgY2xpcHBlZC4gVGhpcyBvbmx5IGhhcHBlbnMKLSAgICAvLyBvbiBw
ZXJzcGVjdGl2ZSB0cmFuc2Zvcm1lZCBsYXllcnMgdGhhdCBnbyBwYXJ0aWFsbHkgYmVoaW5kIHRo
ZSBjYW1lcmEuCi0gICAgaWYgKHF1YWQtPmlzQW50aWFsaWFzZWQoKSAmJiAhcXVhZElzQ2xpcHBl
ZCkgewotICAgICAgICBpZiAocXVhZC0+c3dpenpsZUNvbnRlbnRzKCkpIHsKLSAgICAgICAgICAg
IGNvbnN0IENDVGlsZWRMYXllckltcGw6OlByb2dyYW1Td2l6emxlQUEqIHByb2dyYW0gPSBsYXll
clJlbmRlcmVyLT50aWxlclByb2dyYW1Td2l6emxlQUEoKTsKLSAgICAgICAgICAgIHRpbGVVbmlm
b3JtTG9jYXRpb24ocHJvZ3JhbSwgdW5pZm9ybXMpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbUFBKiBwcm9ncmFtID0gbGF5ZXJS
ZW5kZXJlci0+dGlsZXJQcm9ncmFtQUEoKTsKLSAgICAgICAgICAgIHRpbGVVbmlmb3JtTG9jYXRp
b24ocHJvZ3JhbSwgdW5pZm9ybXMpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
aWYgKHF1YWQtPm5lZWRzQmxlbmRpbmcoKSkgewotICAgICAgICAgICAgaWYgKHF1YWQtPnN3aXp6
bGVDb250ZW50cygpKSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6
UHJvZ3JhbVN3aXp6bGUqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dyYW1Td2l6
emxlKCk7Ci0gICAgICAgICAgICAgICAgdGlsZVVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCB1bmlm
b3Jtcyk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGNvbnN0IENDVGls
ZWRMYXllckltcGw6OlByb2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT50aWxlclByb2dy
YW0oKTsKLSAgICAgICAgICAgICAgICB0aWxlVW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sIHVuaWZv
cm1zKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChx
dWFkLT5zd2l6emxlQ29udGVudHMoKSkgewotICAgICAgICAgICAgICAgIGNvbnN0IENDVGlsZWRM
YXllckltcGw6OlByb2dyYW1Td2l6emxlT3BhcXVlKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+
dGlsZXJQcm9ncmFtU3dpenpsZU9wYXF1ZSgpOwotICAgICAgICAgICAgICAgIHRpbGVVbmlmb3Jt
TG9jYXRpb24ocHJvZ3JhbSwgdW5pZm9ybXMpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtT3BhcXVlKiBwcm9ncmFt
ID0gbGF5ZXJSZW5kZXJlci0+dGlsZXJQcm9ncmFtT3BhcXVlKCk7Ci0gICAgICAgICAgICAgICAg
dGlsZVVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCB1bmlmb3Jtcyk7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGls
ZVF1YWQoY29uc3QgQ0NUaWxlRHJhd1F1YWQqIHF1YWQpCiB7CiAgICAgY29uc3QgSW50UmVjdCYg
dGlsZVJlY3QgPSBxdWFkLT5xdWFkVmlzaWJsZVJlY3QoKTsKQEAgLTczOSw3ICs3MDAsMjYgQEAg
dm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdUaWxlUXVhZChjb25zdCBDQ1RpbGVEcmF3
UXVhZCogcXVhZCkKICAgICBGbG9hdFF1YWQgZGV2aWNlTGF5ZXJRdWFkID0gQ0NNYXRoVXRpbDo6
bWFwUXVhZChkZXZpY2VUcmFuc2Zvcm0sIEZsb2F0UXVhZChxdWFkLT5sYXllclJlY3QoKSksIGNs
aXBwZWQpOwogCiAgICAgVGlsZVByb2dyYW1Vbmlmb3JtcyB1bmlmb3JtczsKLSAgICBmaW5kVGls
ZVByb2dyYW1Vbmlmb3Jtcyh0aGlzLCBxdWFkLCB1bmlmb3JtcywgY2xpcHBlZCk7CisgICAgLy8g
Rm9yIG5vdywgd2Ugc2ltcGx5IHNraXAgYW50aS1hbGlhc2luZyB3aXRoIHRoZSBxdWFkIGlzIGNs
aXBwZWQuIFRoaXMgb25seSBoYXBwZW5zCisgICAgLy8gb24gcGVyc3BlY3RpdmUgdHJhbnNmb3Jt
ZWQgbGF5ZXJzIHRoYXQgZ28gcGFydGlhbGx5IGJlaGluZCB0aGUgY2FtZXJhLgorICAgIGlmIChx
dWFkLT5pc0FudGlhbGlhc2VkKCkgJiYgIWNsaXBwZWQpIHsKKyAgICAgICAgaWYgKHF1YWQtPnN3
aXp6bGVDb250ZW50cygpKQorICAgICAgICAgICAgdGlsZVVuaWZvcm1Mb2NhdGlvbih0aWxlUHJv
Z3JhbVN3aXp6bGVBQSgpLCB1bmlmb3Jtcyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRp
bGVVbmlmb3JtTG9jYXRpb24odGlsZVByb2dyYW1BQSgpLCB1bmlmb3Jtcyk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaWYgKHF1YWQtPm5lZWRzQmxlbmRpbmcoKSkgeworICAgICAgICAgICAgaWYg
KHF1YWQtPnN3aXp6bGVDb250ZW50cygpKQorICAgICAgICAgICAgICAgIHRpbGVVbmlmb3JtTG9j
YXRpb24odGlsZVByb2dyYW1Td2l6emxlKCksIHVuaWZvcm1zKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICB0aWxlVW5pZm9ybUxvY2F0aW9uKHRpbGVQcm9ncmFtKCksIHVuaWZv
cm1zKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChxdWFkLT5zd2l6emxlQ29u
dGVudHMoKSkKKyAgICAgICAgICAgICAgICB0aWxlVW5pZm9ybUxvY2F0aW9uKHRpbGVQcm9ncmFt
U3dpenpsZU9wYXF1ZSgpLCB1bmlmb3Jtcyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgdGlsZVVuaWZvcm1Mb2NhdGlvbih0aWxlUHJvZ3JhbU9wYXF1ZSgpLCB1bmlmb3Jtcyk7
CisgICAgICAgIH0KKyAgICB9CiAKICAgICBHTEMoY29udGV4dCgpLCBjb250ZXh0KCktPnVzZVBy
b2dyYW0odW5pZm9ybXMucHJvZ3JhbSkpOwogICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+
dW5pZm9ybTFpKHVuaWZvcm1zLnNhbXBsZXJMb2NhdGlvbiwgMCkpOwpAQCAtODI4LDcgKzgwOCw3
IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3VGlsZVF1YWQoY29uc3QgQ0NUaWxl
RHJhd1F1YWQqIHF1YWQpCiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3WVVWKGNv
bnN0IENDVmlkZW9EcmF3UXVhZCogcXVhZCkKIHsKLSAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBs
OjpZVVZQcm9ncmFtKiBwcm9ncmFtID0gdmlkZW9MYXllcllVVlByb2dyYW0oKTsKKyAgICBjb25z
dCBWaWRlb1lVVlByb2dyYW0qIHByb2dyYW0gPSB2aWRlb1lVVlByb2dyYW0oKTsKICAgICBBU1NF
UlQocHJvZ3JhbSAmJiBwcm9ncmFtLT5pbml0aWFsaXplZCgpKTsKIAogICAgIGNvbnN0IENDVmlk
ZW9MYXllckltcGw6OlRleHR1cmUmIHlUZXh0dXJlID0gcXVhZC0+dGV4dHVyZXMoKVtXZWJLaXQ6
OldlYlZpZGVvRnJhbWU6OnlQbGFuZV07CkBAIC04ODgsNyArODY4LDcgQEAgdm9pZCBMYXllclJl
bmRlcmVyQ2hyb21pdW06OmRyYXdTaW5nbGVUZXh0dXJlVmlkZW9RdWFkKGNvbnN0IENDVmlkZW9E
cmF3UXVhZCogcXUKIAogdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdSR0JBKGNvbnN0
IENDVmlkZW9EcmF3UXVhZCogcXVhZCkKIHsKLSAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpS
R0JBUHJvZ3JhbSogcHJvZ3JhbSA9IHZpZGVvTGF5ZXJSR0JBUHJvZ3JhbSgpOworICAgIGNvbnN0
IFRleHR1cmVQcm9ncmFtKiBwcm9ncmFtID0gdGV4dHVyZVByb2dyYW0oKTsKICAgICBjb25zdCBD
Q1ZpZGVvTGF5ZXJJbXBsOjpUZXh0dXJlJiB0ZXh0dXJlID0gcXVhZC0+dGV4dHVyZXMoKVtXZWJL
aXQ6OldlYlZpZGVvRnJhbWU6OnJnYlBsYW5lXTsKICAgICBmbG9hdCB3aWR0aFNjYWxlRmFjdG9y
ID0gc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRleHR1cmUubV92aXNpYmxlU2l6ZS53aWR0aCgpKSAvIHRl
eHR1cmUubV90ZXh0dXJlLT5zaXplKCkud2lkdGgoKTsKICAgICBkcmF3U2luZ2xlVGV4dHVyZVZp
ZGVvUXVhZChxdWFkLCBwcm9ncmFtLCB3aWR0aFNjYWxlRmFjdG9yLCB0ZXh0dXJlLm1fdGV4dHVy
ZS0+dGV4dHVyZUlkKCksIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKTsKQEAgLTg5Niwx
NSArODc2LDE0IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3UkdCQShjb25zdCBD
Q1ZpZGVvRHJhd1F1YWQqIHF1YWQpCiAKIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3
TmF0aXZlVGV4dHVyZTJEKGNvbnN0IENDVmlkZW9EcmF3UXVhZCogcXVhZCkKIHsKLSAgICBjb25z
dCBDQ1ZpZGVvTGF5ZXJJbXBsOjpOYXRpdmVUZXh0dXJlUHJvZ3JhbSogcHJvZ3JhbSA9IHZpZGVv
TGF5ZXJOYXRpdmVUZXh0dXJlUHJvZ3JhbSgpOwotICAgIGRyYXdTaW5nbGVUZXh0dXJlVmlkZW9R
dWFkKHF1YWQsIHByb2dyYW0sIDEsIHF1YWQtPmZyYW1lKCktPnRleHR1cmVJZCgpLCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCk7CisgICAgZHJhd1NpbmdsZVRleHR1cmVWaWRlb1F1YWQo
cXVhZCwgdGV4dHVyZVByb2dyYW0oKSwgMSwgcXVhZC0+ZnJhbWUoKS0+dGV4dHVyZUlkKCksIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJEKTsKIH0KIAogdm9pZCBMYXllclJlbmRlcmVyQ2hy
b21pdW06OmRyYXdTdHJlYW1UZXh0dXJlKGNvbnN0IENDVmlkZW9EcmF3UXVhZCogcXVhZCkKIHsK
ICAgICBBU1NFUlQoY29udGV4dCgpLT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNf
RUdMX2ltYWdlX2V4dGVybmFsIikgJiYgY29udGV4dCgpLT5nZXRFeHRlbnNpb25zKCktPmlzRW5h
YmxlZCgiR0xfT0VTX0VHTF9pbWFnZV9leHRlcm5hbCIpKTsKIAotICAgIGNvbnN0IENDVmlkZW9M
YXllckltcGw6OlN0cmVhbVRleHR1cmVQcm9ncmFtKiBwcm9ncmFtID0gc3RyZWFtVGV4dHVyZUxh
eWVyUHJvZ3JhbSgpOworICAgIGNvbnN0IFZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0qIHByb2dy
YW0gPSB2aWRlb1N0cmVhbVRleHR1cmVQcm9ncmFtKCk7CiAgICAgR0xDKGNvbnRleHQoKSwgY29u
dGV4dCgpLT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW0oKSkpOwogICAgIEFTU0VSVChxdWFk
LT5tYXRyaXgoKSk7CiAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51bmlmb3JtTWF0cml4
NGZ2KHByb2dyYW0tPnZlcnRleFNoYWRlcigpLnRleE1hdHJpeExvY2F0aW9uKCksIDEsIGZhbHNl
LCBjb25zdF9jYXN0PGZsb2F0Kj4ocXVhZC0+bWF0cml4KCkpKSk7CkBAIC05OTAsMTcgKzk2OSw2
IEBAIHN0cnVjdCBUZXh0dXJlUHJvZ3JhbUJpbmRpbmcgewogICAgIGludCBhbHBoYUxvY2F0aW9u
OwogfTsKIAotc3RydWN0IFRleFN0cmV0Y2hUZXh0dXJlUHJvZ3JhbUJpbmRpbmcgOiBUZXh0dXJl
UHJvZ3JhbUJpbmRpbmcgewotICAgIHRlbXBsYXRlPGNsYXNzIFByb2dyYW0+IHZvaWQgc2V0KFBy
b2dyYW0qIHByb2dyYW0pCi0gICAgewotICAgICAgICBUZXh0dXJlUHJvZ3JhbUJpbmRpbmc6OnNl
dChwcm9ncmFtKTsKLSAgICAgICAgb2Zmc2V0TG9jYXRpb24gPSBwcm9ncmFtLT52ZXJ0ZXhTaGFk
ZXIoKS5vZmZzZXRMb2NhdGlvbigpOwotICAgICAgICBzY2FsZUxvY2F0aW9uID0gcHJvZ3JhbS0+
dmVydGV4U2hhZGVyKCkuc2NhbGVMb2NhdGlvbigpOwotICAgIH0KLSAgICBpbnQgb2Zmc2V0TG9j
YXRpb247Ci0gICAgaW50IHNjYWxlTG9jYXRpb247Ci19OwotCiBzdHJ1Y3QgVGV4VHJhbnNmb3Jt
VGV4dHVyZVByb2dyYW1CaW5kaW5nIDogVGV4dHVyZVByb2dyYW1CaW5kaW5nIHsKICAgICB0ZW1w
bGF0ZTxjbGFzcyBQcm9ncmFtPiB2b2lkIHNldChQcm9ncmFtKiBwcm9ncmFtKQogICAgIHsKQEAg
LTEwMTgsOSArOTg2LDkgQEAgdm9pZCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmRyYXdUZXh0dXJl
UXVhZChjb25zdCBDQ1RleHR1cmVEcmF3UXVhZCogcXVhZCkKICAgICBpZiAocXVhZC0+aW9TdXJm
YWNlVGV4dHVyZUlkKCkpIHsKICAgICAgICAgVGV4VHJhbnNmb3JtVGV4dHVyZVByb2dyYW1CaW5k
aW5nIGJpbmRpbmc7CiAgICAgICAgIGlmIChxdWFkLT5mbGlwcGVkKCkpCi0gICAgICAgICAgICBi
aW5kaW5nLnNldCh0ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXAoKSk7CisgICAgICAgICAg
ICBiaW5kaW5nLnNldCh0ZXh0dXJlSU9TdXJmYWNlUHJvZ3JhbUZsaXAoKSk7CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGJpbmRpbmcuc2V0KHRleHR1cmVMYXllclRleFJlY3RQcm9ncmFtKCkp
OworICAgICAgICAgICAgYmluZGluZy5zZXQodGV4dHVyZUlPU3VyZmFjZVByb2dyYW0oKSk7CiAK
ICAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFMCkpOwogCkBAIC0xMDMwLDI0ICs5OTgsMTYgQEAgdm9pZCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OmRyYXdUZXh0dXJlUXVhZChjb25zdCBDQ1RleHR1cmVEcmF3UXVh
ZCogcXVhZCkKIAogICAgICAgICBtYXRyaXhMb2NhdGlvbiA9IGJpbmRpbmcubWF0cml4TG9jYXRp
b247CiAgICAgICAgIGFscGhhTG9jYXRpb24gPSBiaW5kaW5nLmFscGhhTG9jYXRpb247Ci0gICAg
fSBlbHNlIGlmIChxdWFkLT5mbGlwcGVkKCkgJiYgcXVhZC0+dXZSZWN0KCkgPT0gRmxvYXRSZWN0
KDAsIDAsIDEsIDEpKSB7Ci0gICAgICAgIC8vIEEgZmxpcHBlZCBxdWFkIHdpdGggdGhlIGRlZmF1
bHQgVVYgbWFwcGluZyBpcyBjb21tb24gZW5vdWdoIHRvIHVzZSBhIHNwZWNpYWwgc2hhZGVyLgot
ICAgICAgICAvLyBDYW52YXMgMmQgYW5kIFdlYkdMIGxheWVycyB1c2UgdGhpcyBwYXRoIGFsd2F5
cyBhbmQgcGx1Z2luL2V4dGVybmFsIHRleHR1cmUgbGF5ZXJzIHVzZSB0aGlzIGJ5IGRlZmF1bHQu
Ci0gICAgICAgIGNvbnN0IENDVGV4dHVyZUxheWVySW1wbDo6UHJvZ3JhbUZsaXAqIHByb2dyYW0g
PSB0ZXh0dXJlTGF5ZXJQcm9ncmFtRmxpcCgpOwotICAgICAgICBHTEMoY29udGV4dCgpLCBjb250
ZXh0KCktPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbSgpKSk7Ci0gICAgICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTFpKHByb2dyYW0tPmZyYWdtZW50U2hhZGVyKCkuc2Ft
cGxlckxvY2F0aW9uKCksIDApKTsKLSAgICAgICAgbWF0cml4TG9jYXRpb24gPSBwcm9ncmFtLT52
ZXJ0ZXhTaGFkZXIoKS5tYXRyaXhMb2NhdGlvbigpOwotICAgICAgICBhbHBoYUxvY2F0aW9uID0g
cHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5hbHBoYUxvY2F0aW9uKCk7CiAgICAgfSBlbHNlIHsK
LSAgICAgICAgVGV4U3RyZXRjaFRleHR1cmVQcm9ncmFtQmluZGluZyBiaW5kaW5nOworICAgICAg
ICBUZXhUcmFuc2Zvcm1UZXh0dXJlUHJvZ3JhbUJpbmRpbmcgYmluZGluZzsKICAgICAgICAgaWYg
KHF1YWQtPmZsaXBwZWQoKSkKLSAgICAgICAgICAgIGJpbmRpbmcuc2V0KHRleHR1cmVMYXllclBy
b2dyYW1TdHJldGNoRmxpcCgpKTsKKyAgICAgICAgICAgIGJpbmRpbmcuc2V0KHRleHR1cmVQcm9n
cmFtRmxpcCgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYmluZGluZy5zZXQodGV4dHVy
ZUxheWVyUHJvZ3JhbVN0cmV0Y2goKSk7CisgICAgICAgICAgICBiaW5kaW5nLnNldCh0ZXh0dXJl
UHJvZ3JhbSgpKTsKICAgICAgICAgR0xDKGNvbnRleHQoKSwgY29udGV4dCgpLT51c2VQcm9ncmFt
KGJpbmRpbmcucHJvZ3JhbUlkKSk7CiAgICAgICAgIEdMQyhjb250ZXh0KCksIGNvbnRleHQoKS0+
dW5pZm9ybTFpKGJpbmRpbmcuc2FtcGxlckxvY2F0aW9uLCAwKSk7Ci0gICAgICAgIEdMQyhjb250
ZXh0KCksIGNvbnRleHQoKS0+dW5pZm9ybTJmKGJpbmRpbmcub2Zmc2V0TG9jYXRpb24sIHF1YWQt
PnV2UmVjdCgpLngoKSwgcXVhZC0+dXZSZWN0KCkueSgpKSk7Ci0gICAgICAgIEdMQyhjb250ZXh0
KCksIGNvbnRleHQoKS0+dW5pZm9ybTJmKGJpbmRpbmcuc2NhbGVMb2NhdGlvbiwgcXVhZC0+dXZS
ZWN0KCkud2lkdGgoKSwgcXVhZC0+dXZSZWN0KCkuaGVpZ2h0KCkpKTsKKyAgICAgICAgY29uc3Qg
RmxvYXRSZWN0JiB1dlJlY3QgPSBxdWFkLT51dlJlY3QoKTsKKyAgICAgICAgR0xDKGNvbnRleHQo
KSwgY29udGV4dCgpLT51bmlmb3JtNGYoYmluZGluZy50ZXhUcmFuc2Zvcm1Mb2NhdGlvbiwgdXZS
ZWN0LngoKSwgdXZSZWN0LnkoKSwgdXZSZWN0LndpZHRoKCksIHV2UmVjdC5oZWlnaHQoKSkpOwog
CiAgICAgICAgIG1hdHJpeExvY2F0aW9uID0gYmluZGluZy5tYXRyaXhMb2NhdGlvbjsKICAgICAg
ICAgYWxwaGFMb2NhdGlvbiA9IGJpbmRpbmcuYWxwaGFMb2NhdGlvbjsKQEAgLTEwODYsNyArMTA0
Niw3IEBAIHZvaWQgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpkcmF3SGVhZHNVcERpc3BsYXkoTWFu
YWdlZFRleHR1cmUqIGh1ZFRleHR1cmUsIGNvbnN0CiAgICAgR0xDKG1fY29udGV4dCwgbV9jb250
ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RFU1QpKTsKICAgICB1c2VS
ZW5kZXJTdXJmYWNlKG1fZGVmYXVsdFJlbmRlclN1cmZhY2UpOwogCi0gICAgY29uc3QgQ0NIZWFk
c1VwRGlzcGxheTo6UHJvZ3JhbSogcHJvZ3JhbSA9IGhlYWRzVXBEaXNwbGF5UHJvZ3JhbSgpOwor
ICAgIGNvbnN0IEhlYWRzVXBEaXNwbGF5UHJvZ3JhbSogcHJvZ3JhbSA9IGhlYWRzVXBEaXNwbGF5
UHJvZ3JhbSgpOwogICAgIEFTU0VSVChwcm9ncmFtICYmIHByb2dyYW0tPmluaXRpYWxpemVkKCkp
OwogICAgIEdMQyhtX2NvbnRleHQsIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRTApKTsKICAgICBodWRUZXh0dXJlLT5iaW5kVGV4dHVyZShtX2NvbnRl
eHQuZ2V0KCksIHJlbmRlclN1cmZhY2VUZXh0dXJlQWxsb2NhdG9yKCkpOwpAQCAtMTQwMSw5ICsx
MzYxLDkgQEAgYm9vbCBMYXllclJlbmRlcmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmpl
Y3RzKCkKICAgICAvLyBXZSB3aWxsIGFsd2F5cyBuZWVkIHRoZXNlIHByb2dyYW1zIHRvIHJlbmRl
ciwgc28gY3JlYXRlIHRoZSBwcm9ncmFtcyBlYWdlcmx5IHNvIHRoYXQgdGhlIHNoYWRlciBjb21w
aWxhdGlvbiBjYW4KICAgICAvLyBzdGFydCB3aGlsZSB3ZSBkbyBvdGhlciB3b3JrLiBPdGhlciBw
cm9ncmFtcyBhcmUgY3JlYXRlZCBsYXppbHkgb24gZmlyc3QgYWNjZXNzLgogICAgIG1fc2hhcmVk
R2VvbWV0cnkgPSBhZG9wdFB0cihuZXcgR2VvbWV0cnlCaW5kaW5nKG1fY29udGV4dC5nZXQoKSkp
OwotICAgIG1fcmVuZGVyU3VyZmFjZVByb2dyYW0gPSBhZG9wdFB0cihuZXcgQ0NSZW5kZXJTdXJm
YWNlOjpQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOwotICAgIG1fdGlsZXJQcm9ncmFtID0gYWRv
cHRQdHIobmV3IENDVGlsZWRMYXllckltcGw6OlByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7Ci0g
ICAgbV90aWxlclByb2dyYW1PcGFxdWUgPSBhZG9wdFB0cihuZXcgQ0NUaWxlZExheWVySW1wbDo6
UHJvZ3JhbU9wYXF1ZShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBtX3JlbmRlclN1cmZhY2VQcm9n
cmFtID0gYWRvcHRQdHIobmV3IFJlbmRlclN1cmZhY2VQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkp
OworICAgIG1fdGlsZVByb2dyYW0gPSBhZG9wdFB0cihuZXcgVGlsZVByb2dyYW0obV9jb250ZXh0
LmdldCgpKSk7CisgICAgbV90aWxlUHJvZ3JhbU9wYXF1ZSA9IGFkb3B0UHRyKG5ldyBUaWxlUHJv
Z3JhbU9wYXF1ZShtX2NvbnRleHQuZ2V0KCkpKTsKIAogICAgIEdMQyhtX2NvbnRleHQsIG1fY29u
dGV4dC0+Zmx1c2goKSk7CiAKQEAgLTE0MjQsMzIgKzEzODQsMzIgQEAgYm9vbCBMYXllclJlbmRl
cmVyQ2hyb21pdW06OmluaXRpYWxpemVTaGFyZWRPYmplY3RzKCkKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotY29uc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpDaGVja2VyYm9hcmRQcm9ncmFtKiBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmNoZWNrZXJib2FyZFByb2dyYW0oKQorY29uc3QgTGF5ZXJS
ZW5kZXJlckNocm9taXVtOjpUaWxlQ2hlY2tlcmJvYXJkUHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjp0aWxlQ2hlY2tlcmJvYXJkUHJvZ3JhbSgpCiB7Ci0gICAgaWYgKCFtX2NoZWNrZXJi
b2FyZFByb2dyYW0pCi0gICAgICAgIG1fY2hlY2tlcmJvYXJkUHJvZ3JhbSA9IGFkb3B0UHRyKG5l
dyBDaGVja2VyYm9hcmRQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOwotICAgIGlmICghbV9jaGVj
a2VyYm9hcmRQcm9ncmFtLT5pbml0aWFsaXplZCgpKSB7CisgICAgaWYgKCFtX3RpbGVDaGVja2Vy
Ym9hcmRQcm9ncmFtKQorICAgICAgICBtX3RpbGVDaGVja2VyYm9hcmRQcm9ncmFtID0gYWRvcHRQ
dHIobmV3IFRpbGVDaGVja2VyYm9hcmRQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOworICAgIGlm
ICghbV90aWxlQ2hlY2tlcmJvYXJkUHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgewogICAgICAgICBU
UkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpjaGVja2VyYm9hcmRQcm9ncmFtOjpp
bml0YWxpemUiLCB0aGlzLCAwKTsKLSAgICAgICAgbV9jaGVja2VyYm9hcmRQcm9ncmFtLT5pbml0
aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CisgICAgICAgIG1fdGlsZUNoZWNrZXJib2FyZFByb2dy
YW0tPmluaXRpYWxpemUobV9jb250ZXh0LmdldCgpKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fY2hl
Y2tlcmJvYXJkUHJvZ3JhbS5nZXQoKTsKKyAgICByZXR1cm4gbV90aWxlQ2hlY2tlcmJvYXJkUHJv
Z3JhbS5nZXQoKTsKIH0KIAotY29uc3QgTGF5ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbSogTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpib3JkZXJQcm9ncmFtKCkKK2NvbnN0IExheWVyUmVuZGVyZXJD
aHJvbWl1bTo6U29saWRDb2xvclByb2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c29saWRD
b2xvclByb2dyYW0oKQogewotICAgIGlmICghbV9ib3JkZXJQcm9ncmFtKQotICAgICAgICBtX2Jv
cmRlclByb2dyYW0gPSBhZG9wdFB0cihuZXcgTGF5ZXJDaHJvbWl1bTo6Qm9yZGVyUHJvZ3JhbSht
X2NvbnRleHQuZ2V0KCkpKTsKLSAgICBpZiAoIW1fYm9yZGVyUHJvZ3JhbS0+aW5pdGlhbGl6ZWQo
KSkgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpib3JkZXJQ
cm9ncmFtOjppbml0aWFsaXplIiwgdGhpcywgMCk7Ci0gICAgICAgIG1fYm9yZGVyUHJvZ3JhbS0+
aW5pdGlhbGl6ZShtX2NvbnRleHQuZ2V0KCkpOworICAgIGlmICghbV9zb2xpZENvbG9yUHJvZ3Jh
bSkKKyAgICAgICAgbV9zb2xpZENvbG9yUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBTb2xpZENvbG9y
UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBpZiAoIW1fc29saWRDb2xvclByb2dyYW0t
PmluaXRpYWxpemVkKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJv
bWl1bTo6c29saWRDb2xvclByb2dyYW06OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKKyAgICAgICAg
bV9zb2xpZENvbG9yUHJvZ3JhbS0+aW5pdGlhbGl6ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIH0K
LSAgICByZXR1cm4gbV9ib3JkZXJQcm9ncmFtLmdldCgpOworICAgIHJldHVybiBtX3NvbGlkQ29s
b3JQcm9ncmFtLmdldCgpOwogfQogCi1jb25zdCBDQ0hlYWRzVXBEaXNwbGF5OjpQcm9ncmFtKiBM
YXllclJlbmRlcmVyQ2hyb21pdW06OmhlYWRzVXBEaXNwbGF5UHJvZ3JhbSgpCitjb25zdCBMYXll
clJlbmRlcmVyQ2hyb21pdW06OkhlYWRzVXBEaXNwbGF5UHJvZ3JhbSogTGF5ZXJSZW5kZXJlckNo
cm9taXVtOjpoZWFkc1VwRGlzcGxheVByb2dyYW0oKQogewogICAgIGlmICghbV9oZWFkc1VwRGlz
cGxheVByb2dyYW0pCi0gICAgICAgIG1faGVhZHNVcERpc3BsYXlQcm9ncmFtID0gYWRvcHRQdHIo
bmV3IENDSGVhZHNVcERpc3BsYXk6OlByb2dyYW0obV9jb250ZXh0LmdldCgpKSk7CisgICAgICAg
IG1faGVhZHNVcERpc3BsYXlQcm9ncmFtID0gYWRvcHRQdHIobmV3IEhlYWRzVXBEaXNwbGF5UHJv
Z3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKICAgICBpZiAoIW1faGVhZHNVcERpc3BsYXlQcm9ncmFt
LT5pbml0aWFsaXplZCgpKSB7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hy
b21pdW06OmhlYWRzVXBEaXNwbGF5UHJvZ3JhbTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOwogICAg
ICAgICBtX2hlYWRzVXBEaXNwbGF5UHJvZ3JhbS0+aW5pdGlhbGl6ZShtX2NvbnRleHQuZ2V0KCkp
OwpAQCAtMTQ1Nyw3ICsxNDE3LDcgQEAgY29uc3QgQ0NIZWFkc1VwRGlzcGxheTo6UHJvZ3JhbSog
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpoZWFkc1VwRGlzcGxheVByb2dyYW0oKQogICAgIHJldHVy
biBtX2hlYWRzVXBEaXNwbGF5UHJvZ3JhbS5nZXQoKTsKIH0KIAotY29uc3QgQ0NSZW5kZXJTdXJm
YWNlOjpQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbmRlclN1cmZhY2VQcm9ncmFt
KCkKK2NvbnN0IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6UmVuZGVyU3VyZmFjZVByb2dyYW0qIExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFjZVByb2dyYW0oKQogewogICAgIEFTU0VS
VChtX3JlbmRlclN1cmZhY2VQcm9ncmFtKTsKICAgICBpZiAoIW1fcmVuZGVyU3VyZmFjZVByb2dy
YW0tPmluaXRpYWxpemVkKCkpIHsKQEAgLTE0NjcsMTAgKzE0MjcsMTAgQEAgY29uc3QgQ0NSZW5k
ZXJTdXJmYWNlOjpQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbmRlclN1cmZhY2VQ
cm9ncmFtKCkKICAgICByZXR1cm4gbV9yZW5kZXJTdXJmYWNlUHJvZ3JhbS5nZXQoKTsKIH0KIAot
Y29uc3QgQ0NSZW5kZXJTdXJmYWNlOjpQcm9ncmFtQUEqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
cmVuZGVyU3VyZmFjZVByb2dyYW1BQSgpCitjb25zdCBMYXllclJlbmRlcmVyQ2hyb21pdW06OlJl
bmRlclN1cmZhY2VQcm9ncmFtQUEqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFj
ZVByb2dyYW1BQSgpCiB7CiAgICAgaWYgKCFtX3JlbmRlclN1cmZhY2VQcm9ncmFtQUEpCi0gICAg
ICAgIG1fcmVuZGVyU3VyZmFjZVByb2dyYW1BQSA9IGFkb3B0UHRyKG5ldyBDQ1JlbmRlclN1cmZh
Y2U6OlByb2dyYW1BQShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICAgICAgbV9yZW5kZXJTdXJmYWNl
UHJvZ3JhbUFBID0gYWRvcHRQdHIobmV3IFJlbmRlclN1cmZhY2VQcm9ncmFtQUEobV9jb250ZXh0
LmdldCgpKSk7CiAgICAgaWYgKCFtX3JlbmRlclN1cmZhY2VQcm9ncmFtQUEtPmluaXRpYWxpemVk
KCkpIHsKICAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVy
U3VyZmFjZVByb2dyYW1BQTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOwogICAgICAgICBtX3JlbmRl
clN1cmZhY2VQcm9ncmFtQUEtPmluaXRpYWxpemUobV9jb250ZXh0LmdldCgpKTsKQEAgLTE0Nzgs
MTAgKzE0MzgsMTAgQEAgY29uc3QgQ0NSZW5kZXJTdXJmYWNlOjpQcm9ncmFtQUEqIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFjZVByb2dyYW1BQSgKICAgICByZXR1cm4gbV9yZW5k
ZXJTdXJmYWNlUHJvZ3JhbUFBLmdldCgpOwogfQogCi1jb25zdCBDQ1JlbmRlclN1cmZhY2U6Ok1h
c2tQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbmRlclN1cmZhY2VNYXNrUHJvZ3Jh
bSgpCitjb25zdCBMYXllclJlbmRlcmVyQ2hyb21pdW06OlJlbmRlclN1cmZhY2VNYXNrUHJvZ3Jh
bSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjpyZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0oKQogewog
ICAgIGlmICghbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0pCi0gICAgICAgIG1fcmVuZGVyU3Vy
ZmFjZU1hc2tQcm9ncmFtID0gYWRvcHRQdHIobmV3IENDUmVuZGVyU3VyZmFjZTo6TWFza1Byb2dy
YW0obV9jb250ZXh0LmdldCgpKSk7CisgICAgICAgIG1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFt
ID0gYWRvcHRQdHIobmV3IFJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkp
KTsKICAgICBpZiAoIW1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtLT5pbml0aWFsaXplZCgpKSB7
CiAgICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbmRlclN1cmZh
Y2VNYXNrUHJvZ3JhbTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOwogICAgICAgICBtX3JlbmRlclN1
cmZhY2VNYXNrUHJvZ3JhbS0+aW5pdGlhbGl6ZShtX2NvbnRleHQuZ2V0KCkpOwpAQCAtMTQ4OSwx
MCArMTQ0OSwxMCBAQCBjb25zdCBDQ1JlbmRlclN1cmZhY2U6Ok1hc2tQcm9ncmFtKiBMYXllclJl
bmRlcmVyQ2hyb21pdW06OnJlbmRlclN1cmZhY2VNYXNrUHJvZwogICAgIHJldHVybiBtX3JlbmRl
clN1cmZhY2VNYXNrUHJvZ3JhbS5nZXQoKTsKIH0KIAotY29uc3QgQ0NSZW5kZXJTdXJmYWNlOjpN
YXNrUHJvZ3JhbUFBKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnJlbmRlclN1cmZhY2VNYXNrUHJv
Z3JhbUFBKCkKK2NvbnN0IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6UmVuZGVyU3VyZmFjZU1hc2tQ
cm9ncmFtQUEqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFt
QUEoKQogewogICAgIGlmICghbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW1BQSkKLSAgICAgICAg
bV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW1BQSA9IGFkb3B0UHRyKG5ldyBDQ1JlbmRlclN1cmZh
Y2U6Ok1hc2tQcm9ncmFtQUEobV9jb250ZXh0LmdldCgpKSk7CisgICAgICAgIG1fcmVuZGVyU3Vy
ZmFjZU1hc2tQcm9ncmFtQUEgPSBhZG9wdFB0cihuZXcgUmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFt
QUEobV9jb250ZXh0LmdldCgpKSk7CiAgICAgaWYgKCFtX3JlbmRlclN1cmZhY2VNYXNrUHJvZ3Jh
bUFBLT5pbml0aWFsaXplZCgpKSB7CiAgICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVy
Q2hyb21pdW06OnJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbUFBOjppbml0aWFsaXplIiwgdGhpcywg
MCk7CiAgICAgICAgIG1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtQUEtPmluaXRpYWxpemUobV9j
b250ZXh0LmdldCgpKTsKQEAgLTE1MDAsMTY3ICsxNDYwLDEzNCBAQCBjb25zdCBDQ1JlbmRlclN1
cmZhY2U6Ok1hc2tQcm9ncmFtQUEqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6cmVuZGVyU3VyZmFj
ZU1hc2tQcgogICAgIHJldHVybiBtX3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbUFBLmdldCgpOwog
fQogCi1jb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21p
dW06OnRpbGVyUHJvZ3JhbSgpCi17Ci0gICAgQVNTRVJUKG1fdGlsZXJQcm9ncmFtKTsKLSAgICBp
ZiAoIW1fdGlsZXJQcm9ncmFtLT5pbml0aWFsaXplZCgpKSB7Ci0gICAgICAgIFRSQUNFX0VWRU5U
KCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbTo6aW5pdGlhbGl6ZSIsIHRoaXMs
IDApOwotICAgICAgICBtX3RpbGVyUHJvZ3JhbS0+aW5pdGlhbGl6ZShtX2NvbnRleHQuZ2V0KCkp
OwotICAgIH0KLSAgICByZXR1cm4gbV90aWxlclByb2dyYW0uZ2V0KCk7Ci19Ci0KLWNvbnN0IEND
VGlsZWRMYXllckltcGw6OlByb2dyYW1PcGFxdWUqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGls
ZXJQcm9ncmFtT3BhcXVlKCkKLXsKLSAgICBBU1NFUlQobV90aWxlclByb2dyYW1PcGFxdWUpOwot
ICAgIGlmICghbV90aWxlclByb2dyYW1PcGFxdWUtPmluaXRpYWxpemVkKCkpIHsKLSAgICAgICAg
VFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtT3BhcXVlOjpp
bml0aWFsaXplIiwgdGhpcywgMCk7Ci0gICAgICAgIG1fdGlsZXJQcm9ncmFtT3BhcXVlLT5pbml0
aWFsaXplKG1fY29udGV4dC5nZXQoKSk7Ci0gICAgfQotICAgIHJldHVybiBtX3RpbGVyUHJvZ3Jh
bU9wYXF1ZS5nZXQoKTsKLX0KLQotY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbUFBKiBM
YXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbUFBKCkKLXsKLSAgICBpZiAoIW1fdGls
ZXJQcm9ncmFtQUEpCi0gICAgICAgIG1fdGlsZXJQcm9ncmFtQUEgPSBhZG9wdFB0cihuZXcgQ0NU
aWxlZExheWVySW1wbDo6UHJvZ3JhbUFBKG1fY29udGV4dC5nZXQoKSkpOwotICAgIGlmICghbV90
aWxlclByb2dyYW1BQS0+aW5pdGlhbGl6ZWQoKSkgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlclByb2dyYW1BQTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDAp
OwotICAgICAgICBtX3RpbGVyUHJvZ3JhbUFBLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7
Ci0gICAgfQotICAgIHJldHVybiBtX3RpbGVyUHJvZ3JhbUFBLmdldCgpOwotfQotCi1jb25zdCBD
Q1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtU3dpenpsZSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0
aWxlclByb2dyYW1Td2l6emxlKCkKK2NvbnN0IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6VGlsZVBy
b2dyYW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZVByb2dyYW0oKQogewotICAgIGlmICgh
bV90aWxlclByb2dyYW1Td2l6emxlKQotICAgICAgICBtX3RpbGVyUHJvZ3JhbVN3aXp6bGUgPSBh
ZG9wdFB0cihuZXcgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6bGUobV9jb250ZXh0Lmdl
dCgpKSk7Ci0gICAgaWYgKCFtX3RpbGVyUHJvZ3JhbVN3aXp6bGUtPmluaXRpYWxpemVkKCkpIHsK
LSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFt
U3dpenpsZTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOwotICAgICAgICBtX3RpbGVyUHJvZ3JhbVN3
aXp6bGUtPmluaXRpYWxpemUobV9jb250ZXh0LmdldCgpKTsKKyAgICBBU1NFUlQobV90aWxlUHJv
Z3JhbSk7CisgICAgaWYgKCFtX3RpbGVQcm9ncmFtLT5pbml0aWFsaXplZCgpKSB7CisgICAgICAg
IFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVQcm9ncmFtOjppbml0aWFs
aXplIiwgdGhpcywgMCk7CisgICAgICAgIG1fdGlsZVByb2dyYW0tPmluaXRpYWxpemUobV9jb250
ZXh0LmdldCgpKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fdGlsZXJQcm9ncmFtU3dpenpsZS5nZXQo
KTsKKyAgICByZXR1cm4gbV90aWxlUHJvZ3JhbS5nZXQoKTsKIH0KIAotY29uc3QgQ0NUaWxlZExh
eWVySW1wbDo6UHJvZ3JhbVN3aXp6bGVPcGFxdWUqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGls
ZXJQcm9ncmFtU3dpenpsZU9wYXF1ZSgpCitjb25zdCBMYXllclJlbmRlcmVyQ2hyb21pdW06OlRp
bGVQcm9ncmFtT3BhcXVlKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVQcm9ncmFtT3BhcXVl
KCkKIHsKLSAgICBpZiAoIW1fdGlsZXJQcm9ncmFtU3dpenpsZU9wYXF1ZSkKLSAgICAgICAgbV90
aWxlclByb2dyYW1Td2l6emxlT3BhcXVlID0gYWRvcHRQdHIobmV3IENDVGlsZWRMYXllckltcGw6
OlByb2dyYW1Td2l6emxlT3BhcXVlKG1fY29udGV4dC5nZXQoKSkpOwotICAgIGlmICghbV90aWxl
clByb2dyYW1Td2l6emxlT3BhcXVlLT5pbml0aWFsaXplZCgpKSB7Ci0gICAgICAgIFRSQUNFX0VW
RU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVyUHJvZ3JhbVN3aXp6bGVPcGFxdWU6Omlu
aXRpYWxpemUiLCB0aGlzLCAwKTsKLSAgICAgICAgbV90aWxlclByb2dyYW1Td2l6emxlT3BhcXVl
LT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CisgICAgQVNTRVJUKG1fdGlsZVByb2dyYW1P
cGFxdWUpOworICAgIGlmICghbV90aWxlUHJvZ3JhbU9wYXF1ZS0+aW5pdGlhbGl6ZWQoKSkgewor
ICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlUHJvZ3JhbU9w
YXF1ZTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOworICAgICAgICBtX3RpbGVQcm9ncmFtT3BhcXVl
LT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CiAgICAgfQotICAgIHJldHVybiBtX3RpbGVy
UHJvZ3JhbVN3aXp6bGVPcGFxdWUuZ2V0KCk7CisgICAgcmV0dXJuIG1fdGlsZVByb2dyYW1PcGFx
dWUuZ2V0KCk7CiB9CiAKLWNvbnN0IENDVGlsZWRMYXllckltcGw6OlByb2dyYW1Td2l6emxlQUEq
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtU3dpenpsZUFBKCkKK2NvbnN0IExh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6VGlsZVByb2dyYW1BQSogTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp0aWxlUHJvZ3JhbUFBKCkKIHsKLSAgICBpZiAoIW1fdGlsZXJQcm9ncmFtU3dpenpsZUFBKQot
ICAgICAgICBtX3RpbGVyUHJvZ3JhbVN3aXp6bGVBQSA9IGFkb3B0UHRyKG5ldyBDQ1RpbGVkTGF5
ZXJJbXBsOjpQcm9ncmFtU3dpenpsZUFBKG1fY29udGV4dC5nZXQoKSkpOwotICAgIGlmICghbV90
aWxlclByb2dyYW1Td2l6emxlQUEtPmluaXRpYWxpemVkKCkpIHsKLSAgICAgICAgVFJBQ0VfRVZF
TlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZXJQcm9ncmFtU3dpenpsZUFBOjppbml0aWFs
aXplIiwgdGhpcywgMCk7Ci0gICAgICAgIG1fdGlsZXJQcm9ncmFtU3dpenpsZUFBLT5pbml0aWFs
aXplKG1fY29udGV4dC5nZXQoKSk7CisgICAgaWYgKCFtX3RpbGVQcm9ncmFtQUEpCisgICAgICAg
IG1fdGlsZVByb2dyYW1BQSA9IGFkb3B0UHRyKG5ldyBUaWxlUHJvZ3JhbUFBKG1fY29udGV4dC5n
ZXQoKSkpOworICAgIGlmICghbV90aWxlUHJvZ3JhbUFBLT5pbml0aWFsaXplZCgpKSB7CisgICAg
ICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVQcm9ncmFtQUE6Omlu
aXRpYWxpemUiLCB0aGlzLCAwKTsKKyAgICAgICAgbV90aWxlUHJvZ3JhbUFBLT5pbml0aWFsaXpl
KG1fY29udGV4dC5nZXQoKSk7CiAgICAgfQotICAgIHJldHVybiBtX3RpbGVyUHJvZ3JhbVN3aXp6
bGVBQS5nZXQoKTsKKyAgICByZXR1cm4gbV90aWxlUHJvZ3JhbUFBLmdldCgpOwogfQogCi1jb25z
dCBDQ1RleHR1cmVMYXllckltcGw6OlByb2dyYW1GbGlwKiBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnRleHR1cmVMYXllclByb2dyYW1GbGlwKCkKK2NvbnN0IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6
VGlsZVByb2dyYW1Td2l6emxlKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVQcm9ncmFtU3dp
enpsZSgpCiB7Ci0gICAgaWYgKCFtX3RleHR1cmVMYXllclByb2dyYW1GbGlwKQotICAgICAgICBt
X3RleHR1cmVMYXllclByb2dyYW1GbGlwID0gYWRvcHRQdHIobmV3IENDVGV4dHVyZUxheWVySW1w
bDo6UHJvZ3JhbUZsaXAobV9jb250ZXh0LmdldCgpKSk7Ci0gICAgaWYgKCFtX3RleHR1cmVMYXll
clByb2dyYW1GbGlwLT5pbml0aWFsaXplZCgpKSB7Ci0gICAgICAgIFRSQUNFX0VWRU5UKCJMYXll
clJlbmRlcmVyQ2hyb21pdW06OnRleHR1cmVMYXllclByb2dyYW06OmluaXRpYWxpemUiLCB0aGlz
LCAwKTsKLSAgICAgICAgbV90ZXh0dXJlTGF5ZXJQcm9ncmFtRmxpcC0+aW5pdGlhbGl6ZShtX2Nv
bnRleHQuZ2V0KCkpOworICAgIGlmICghbV90aWxlUHJvZ3JhbVN3aXp6bGUpCisgICAgICAgIG1f
dGlsZVByb2dyYW1Td2l6emxlID0gYWRvcHRQdHIobmV3IFRpbGVQcm9ncmFtU3dpenpsZShtX2Nv
bnRleHQuZ2V0KCkpKTsKKyAgICBpZiAoIW1fdGlsZVByb2dyYW1Td2l6emxlLT5pbml0aWFsaXpl
ZCgpKSB7CisgICAgICAgIFRSQUNFX0VWRU5UKCJMYXllclJlbmRlcmVyQ2hyb21pdW06OnRpbGVQ
cm9ncmFtU3dpenpsZTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOworICAgICAgICBtX3RpbGVQcm9n
cmFtU3dpenpsZS0+aW5pdGlhbGl6ZShtX2NvbnRleHQuZ2V0KCkpOwogICAgIH0KLSAgICByZXR1
cm4gbV90ZXh0dXJlTGF5ZXJQcm9ncmFtRmxpcC5nZXQoKTsKKyAgICByZXR1cm4gbV90aWxlUHJv
Z3JhbVN3aXp6bGUuZ2V0KCk7CiB9CiAKLWNvbnN0IENDVGV4dHVyZUxheWVySW1wbDo6UHJvZ3Jh
bVN0cmV0Y2gqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0
Y2goKQorY29uc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpUaWxlUHJvZ3JhbVN3aXp6bGVPcGFx
dWUqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZVByb2dyYW1Td2l6emxlT3BhcXVlKCkKIHsK
LSAgICBpZiAoIW1fdGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2gpCi0gICAgICAgIG1fdGV4dHVy
ZUxheWVyUHJvZ3JhbVN0cmV0Y2ggPSBhZG9wdFB0cihuZXcgQ0NUZXh0dXJlTGF5ZXJJbXBsOjpQ
cm9ncmFtU3RyZXRjaChtX2NvbnRleHQuZ2V0KCkpKTsKLSAgICBpZiAoIW1fdGV4dHVyZUxheWVy
UHJvZ3JhbVN0cmV0Y2gtPmluaXRpYWxpemVkKCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZUxheWVyUHJvZ3JhbTo6aW5pdGlhbGl6ZSIsIHRo
aXMsIDApOwotICAgICAgICBtX3RleHR1cmVMYXllclByb2dyYW1TdHJldGNoLT5pbml0aWFsaXpl
KG1fY29udGV4dC5nZXQoKSk7CisgICAgaWYgKCFtX3RpbGVQcm9ncmFtU3dpenpsZU9wYXF1ZSkK
KyAgICAgICAgbV90aWxlUHJvZ3JhbVN3aXp6bGVPcGFxdWUgPSBhZG9wdFB0cihuZXcgVGlsZVBy
b2dyYW1Td2l6emxlT3BhcXVlKG1fY29udGV4dC5nZXQoKSkpOworICAgIGlmICghbV90aWxlUHJv
Z3JhbVN3aXp6bGVPcGFxdWUtPmluaXRpYWxpemVkKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQo
IkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZVByb2dyYW1Td2l6emxlT3BhcXVlOjppbml0aWFs
aXplIiwgdGhpcywgMCk7CisgICAgICAgIG1fdGlsZVByb2dyYW1Td2l6emxlT3BhcXVlLT5pbml0
aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CiAgICAgfQotICAgIHJldHVybiBtX3RleHR1cmVMYXll
clByb2dyYW1TdHJldGNoLmdldCgpOworICAgIHJldHVybiBtX3RpbGVQcm9ncmFtU3dpenpsZU9w
YXF1ZS5nZXQoKTsKIH0KIAotY29uc3QgQ0NUZXh0dXJlTGF5ZXJJbXBsOjpQcm9ncmFtU3RyZXRj
aEZsaXAqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2hG
bGlwKCkKK2NvbnN0IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6VGlsZVByb2dyYW1Td2l6emxlQUEq
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGlsZVByb2dyYW1Td2l6emxlQUEoKQogewotICAgIGlm
ICghbV90ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaEZsaXApCi0gICAgICAgIG1fdGV4dHVyZUxh
eWVyUHJvZ3JhbVN0cmV0Y2hGbGlwID0gYWRvcHRQdHIobmV3IENDVGV4dHVyZUxheWVySW1wbDo6
UHJvZ3JhbVN0cmV0Y2hGbGlwKG1fY29udGV4dC5nZXQoKSkpOwotICAgIGlmICghbV90ZXh0dXJl
TGF5ZXJQcm9ncmFtU3RyZXRjaEZsaXAtPmluaXRpYWxpemVkKCkpIHsKLSAgICAgICAgVFJBQ0Vf
RVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2hG
bGlwOjppbml0aWFsaXplIiwgdGhpcywgMCk7Ci0gICAgICAgIG1fdGV4dHVyZUxheWVyUHJvZ3Jh
bVN0cmV0Y2hGbGlwLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CisgICAgaWYgKCFtX3Rp
bGVQcm9ncmFtU3dpenpsZUFBKQorICAgICAgICBtX3RpbGVQcm9ncmFtU3dpenpsZUFBID0gYWRv
cHRQdHIobmV3IFRpbGVQcm9ncmFtU3dpenpsZUFBKG1fY29udGV4dC5nZXQoKSkpOworICAgIGlm
ICghbV90aWxlUHJvZ3JhbVN3aXp6bGVBQS0+aW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBUUkFD
RV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0aWxlUHJvZ3JhbVN3aXp6bGVBQTo6aW5p
dGlhbGl6ZSIsIHRoaXMsIDApOworICAgICAgICBtX3RpbGVQcm9ncmFtU3dpenpsZUFBLT5pbml0
aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CiAgICAgfQotICAgIHJldHVybiBtX3RleHR1cmVMYXll
clByb2dyYW1TdHJldGNoRmxpcC5nZXQoKTsKKyAgICByZXR1cm4gbV90aWxlUHJvZ3JhbVN3aXp6
bGVBQS5nZXQoKTsKIH0KIAotY29uc3QgQ0NUZXh0dXJlTGF5ZXJJbXBsOjpUZXhSZWN0UHJvZ3Jh
bSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbSgpCitj
b25zdCBMYXllclJlbmRlcmVyQ2hyb21pdW06OlRleHR1cmVQcm9ncmFtKiBMYXllclJlbmRlcmVy
Q2hyb21pdW06OnRleHR1cmVQcm9ncmFtKCkKIHsKLSAgICBpZiAoIW1fdGV4dHVyZUxheWVyVGV4
UmVjdFByb2dyYW0pCi0gICAgICAgIG1fdGV4dHVyZUxheWVyVGV4UmVjdFByb2dyYW0gPSBhZG9w
dFB0cihuZXcgQ0NUZXh0dXJlTGF5ZXJJbXBsOjpUZXhSZWN0UHJvZ3JhbShtX2NvbnRleHQuZ2V0
KCkpKTsKLSAgICBpZiAoIW1fdGV4dHVyZUxheWVyVGV4UmVjdFByb2dyYW0tPmluaXRpYWxpemVk
KCkpIHsKLSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVy
ZUxheWVyVGV4UmVjdFByb2dyYW06OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKLSAgICAgICAgbV90
ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbS0+aW5pdGlhbGl6ZShtX2NvbnRleHQuZ2V0KCkpOwor
ICAgIGlmICghbV90ZXh0dXJlUHJvZ3JhbSkKKyAgICAgICAgbV90ZXh0dXJlUHJvZ3JhbSA9IGFk
b3B0UHRyKG5ldyBUZXh0dXJlUHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBpZiAoIW1f
dGV4dHVyZVByb2dyYW0tPmluaXRpYWxpemVkKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkxh
eWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4dHVyZVByb2dyYW06OmluaXRpYWxpemUiLCB0aGlzLCAw
KTsKKyAgICAgICAgbV90ZXh0dXJlUHJvZ3JhbS0+aW5pdGlhbGl6ZShtX2NvbnRleHQuZ2V0KCkp
OwogICAgIH0KLSAgICByZXR1cm4gbV90ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbS5nZXQoKTsK
KyAgICByZXR1cm4gbV90ZXh0dXJlUHJvZ3JhbS5nZXQoKTsKIH0KIAotY29uc3QgQ0NUZXh0dXJl
TGF5ZXJJbXBsOjpUZXhSZWN0UHJvZ3JhbUZsaXAqIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dGV4
dHVyZUxheWVyVGV4UmVjdFByb2dyYW1GbGlwKCkKK2NvbnN0IExheWVyUmVuZGVyZXJDaHJvbWl1
bTo6VGV4dHVyZVByb2dyYW1GbGlwKiBMYXllclJlbmRlcmVyQ2hyb21pdW06OnRleHR1cmVQcm9n
cmFtRmxpcCgpCiB7Ci0gICAgaWYgKCFtX3RleHR1cmVMYXllclRleFJlY3RQcm9ncmFtRmxpcCkK
LSAgICAgICAgbV90ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXAgPSBhZG9wdFB0cihuZXcg
Q0NUZXh0dXJlTGF5ZXJJbXBsOjpUZXhSZWN0UHJvZ3JhbUZsaXAobV9jb250ZXh0LmdldCgpKSk7
Ci0gICAgaWYgKCFtX3RleHR1cmVMYXllclRleFJlY3RQcm9ncmFtRmxpcC0+aW5pdGlhbGl6ZWQo
KSkgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0ZXh0dXJl
TGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXA6OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKLSAgICAgICAg
bV90ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXAtPmluaXRpYWxpemUobV9jb250ZXh0Lmdl
dCgpKTsKKyAgICBpZiAoIW1fdGV4dHVyZVByb2dyYW1GbGlwKQorICAgICAgICBtX3RleHR1cmVQ
cm9ncmFtRmxpcCA9IGFkb3B0UHRyKG5ldyBUZXh0dXJlUHJvZ3JhbUZsaXAobV9jb250ZXh0Lmdl
dCgpKSk7CisgICAgaWYgKCFtX3RleHR1cmVQcm9ncmFtRmxpcC0+aW5pdGlhbGl6ZWQoKSkgewor
ICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0ZXh0dXJlUHJvZ3Jh
bUZsaXA6OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKKyAgICAgICAgbV90ZXh0dXJlUHJvZ3JhbUZs
aXAtPmluaXRpYWxpemUobV9jb250ZXh0LmdldCgpKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fdGV4
dHVyZUxheWVyVGV4UmVjdFByb2dyYW1GbGlwLmdldCgpOworICAgIHJldHVybiBtX3RleHR1cmVQ
cm9ncmFtRmxpcC5nZXQoKTsKIH0KIAotY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6UkdCQVByb2dy
YW0qIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlkZW9MYXllclJHQkFQcm9ncmFtKCkKK2NvbnN0
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6VGV4dHVyZUlPU3VyZmFjZVByb2dyYW0qIExheWVyUmVu
ZGVyZXJDaHJvbWl1bTo6dGV4dHVyZUlPU3VyZmFjZVByb2dyYW0oKQogewotICAgIGlmICghbV92
aWRlb0xheWVyUkdCQVByb2dyYW0pCi0gICAgICAgIG1fdmlkZW9MYXllclJHQkFQcm9ncmFtID0g
YWRvcHRQdHIobmV3IENDVmlkZW9MYXllckltcGw6OlJHQkFQcm9ncmFtKG1fY29udGV4dC5nZXQo
KSkpOwotICAgIGlmICghbV92aWRlb0xheWVyUkdCQVByb2dyYW0tPmluaXRpYWxpemVkKCkpIHsK
LSAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1bTo6dmlkZW9MYXllclJH
QkFQcm9ncmFtOjppbml0aWFsaXplIiwgdGhpcywgMCk7Ci0gICAgICAgIG1fdmlkZW9MYXllclJH
QkFQcm9ncmFtLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CisgICAgaWYgKCFtX3RleHR1
cmVJT1N1cmZhY2VQcm9ncmFtKQorICAgICAgICBtX3RleHR1cmVJT1N1cmZhY2VQcm9ncmFtID0g
YWRvcHRQdHIobmV3IFRleHR1cmVJT1N1cmZhY2VQcm9ncmFtKG1fY29udGV4dC5nZXQoKSkpOwor
ICAgIGlmICghbV90ZXh0dXJlSU9TdXJmYWNlUHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgeworICAg
ICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp0ZXh0dXJlSU9TdXJmYWNl
UHJvZ3JhbTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOworICAgICAgICBtX3RleHR1cmVJT1N1cmZh
Y2VQcm9ncmFtLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CiAgICAgfQotICAgIHJldHVy
biBtX3ZpZGVvTGF5ZXJSR0JBUHJvZ3JhbS5nZXQoKTsKKyAgICByZXR1cm4gbV90ZXh0dXJlSU9T
dXJmYWNlUHJvZ3JhbS5nZXQoKTsKIH0KIAotY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6WVVWUHJv
Z3JhbSogTGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRlb0xheWVyWVVWUHJvZ3JhbSgpCitjb25z
dCBMYXllclJlbmRlcmVyQ2hyb21pdW06OlRleHR1cmVJT1N1cmZhY2VQcm9ncmFtRmxpcCogTGF5
ZXJSZW5kZXJlckNocm9taXVtOjp0ZXh0dXJlSU9TdXJmYWNlUHJvZ3JhbUZsaXAoKQogewotICAg
IGlmICghbV92aWRlb0xheWVyWVVWUHJvZ3JhbSkKLSAgICAgICAgbV92aWRlb0xheWVyWVVWUHJv
Z3JhbSA9IGFkb3B0UHRyKG5ldyBDQ1ZpZGVvTGF5ZXJJbXBsOjpZVVZQcm9ncmFtKG1fY29udGV4
dC5nZXQoKSkpOwotICAgIGlmICghbV92aWRlb0xheWVyWVVWUHJvZ3JhbS0+aW5pdGlhbGl6ZWQo
KSkgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRlb0xh
eWVyWVVWUHJvZ3JhbTo6aW5pdGlhbGl6ZSIsIHRoaXMsIDApOwotICAgICAgICBtX3ZpZGVvTGF5
ZXJZVVZQcm9ncmFtLT5pbml0aWFsaXplKG1fY29udGV4dC5nZXQoKSk7CisgICAgaWYgKCFtX3Rl
eHR1cmVJT1N1cmZhY2VQcm9ncmFtRmxpcCkKKyAgICAgICAgbV90ZXh0dXJlSU9TdXJmYWNlUHJv
Z3JhbUZsaXAgPSBhZG9wdFB0cihuZXcgVGV4dHVyZUlPU3VyZmFjZVByb2dyYW1GbGlwKG1fY29u
dGV4dC5nZXQoKSkpOworICAgIGlmICghbV90ZXh0dXJlSU9TdXJmYWNlUHJvZ3JhbUZsaXAtPmlu
aXRpYWxpemVkKCkpIHsKKyAgICAgICAgVFJBQ0VfRVZFTlQoIkxheWVyUmVuZGVyZXJDaHJvbWl1
bTo6dGV4dHVyZUlPU3VyZmFjZVByb2dyYW1GbGlwOjppbml0aWFsaXplIiwgdGhpcywgMCk7Cisg
ICAgICAgIG1fdGV4dHVyZUlPU3VyZmFjZVByb2dyYW1GbGlwLT5pbml0aWFsaXplKG1fY29udGV4
dC5nZXQoKSk7CiAgICAgfQotICAgIHJldHVybiBtX3ZpZGVvTGF5ZXJZVVZQcm9ncmFtLmdldCgp
OworICAgIHJldHVybiBtX3RleHR1cmVJT1N1cmZhY2VQcm9ncmFtRmxpcC5nZXQoKTsKIH0KIAot
Y29uc3QgQ0NWaWRlb0xheWVySW1wbDo6TmF0aXZlVGV4dHVyZVByb2dyYW0qIExheWVyUmVuZGVy
ZXJDaHJvbWl1bTo6dmlkZW9MYXllck5hdGl2ZVRleHR1cmVQcm9ncmFtKCkKK2NvbnN0IExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6VmlkZW9ZVVZQcm9ncmFtKiBMYXllclJlbmRlcmVyQ2hyb21pdW06
OnZpZGVvWVVWUHJvZ3JhbSgpCiB7Ci0gICAgaWYgKCFtX3ZpZGVvTGF5ZXJOYXRpdmVUZXh0dXJl
UHJvZ3JhbSkKLSAgICAgICAgbV92aWRlb0xheWVyTmF0aXZlVGV4dHVyZVByb2dyYW0gPSBhZG9w
dFB0cihuZXcgQ0NWaWRlb0xheWVySW1wbDo6TmF0aXZlVGV4dHVyZVByb2dyYW0obV9jb250ZXh0
LmdldCgpKSk7Ci0gICAgaWYgKCFtX3ZpZGVvTGF5ZXJOYXRpdmVUZXh0dXJlUHJvZ3JhbS0+aW5p
dGlhbGl6ZWQoKSkgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVt
Ojp2aWRlb0xheWVyTmF0aXZlVGV4dHVyZVByb2dyYW06OmluaXRpYWxpemUiLCB0aGlzLCAwKTsK
LSAgICAgICAgbV92aWRlb0xheWVyTmF0aXZlVGV4dHVyZVByb2dyYW0tPmluaXRpYWxpemUobV9j
b250ZXh0LmdldCgpKTsKKyAgICBpZiAoIW1fdmlkZW9ZVVZQcm9ncmFtKQorICAgICAgICBtX3Zp
ZGVvWVVWUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBWaWRlb1lVVlByb2dyYW0obV9jb250ZXh0Lmdl
dCgpKSk7CisgICAgaWYgKCFtX3ZpZGVvWVVWUHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgeworICAg
ICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjp2aWRlb1lVVlByb2dyYW06
OmluaXRpYWxpemUiLCB0aGlzLCAwKTsKKyAgICAgICAgbV92aWRlb1lVVlByb2dyYW0tPmluaXRp
YWxpemUobV9jb250ZXh0LmdldCgpKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fdmlkZW9MYXllck5h
dGl2ZVRleHR1cmVQcm9ncmFtLmdldCgpOworICAgIHJldHVybiBtX3ZpZGVvWVVWUHJvZ3JhbS5n
ZXQoKTsKIH0KIAotY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6U3RyZWFtVGV4dHVyZVByb2dyYW0q
IExheWVyUmVuZGVyZXJDaHJvbWl1bTo6c3RyZWFtVGV4dHVyZUxheWVyUHJvZ3JhbSgpCitjb25z
dCBMYXllclJlbmRlcmVyQ2hyb21pdW06OlZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0qIExheWVy
UmVuZGVyZXJDaHJvbWl1bTo6dmlkZW9TdHJlYW1UZXh0dXJlUHJvZ3JhbSgpCiB7Ci0gICAgaWYg
KCFtX3N0cmVhbVRleHR1cmVMYXllclByb2dyYW0pCi0gICAgICAgIG1fc3RyZWFtVGV4dHVyZUxh
eWVyUHJvZ3JhbSA9IGFkb3B0UHRyKG5ldyBDQ1ZpZGVvTGF5ZXJJbXBsOjpTdHJlYW1UZXh0dXJl
UHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKLSAgICBpZiAoIW1fc3RyZWFtVGV4dHVyZUxheWVy
UHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgewotICAgICAgICBUUkFDRV9FVkVOVCgiTGF5ZXJSZW5k
ZXJlckNocm9taXVtOjpzdHJlYW1UZXh0dXJlTGF5ZXJQcm9ncmFtOjppbml0aWFsaXplIiwgdGhp
cywgMCk7Ci0gICAgICAgIG1fc3RyZWFtVGV4dHVyZUxheWVyUHJvZ3JhbS0+aW5pdGlhbGl6ZSht
X2NvbnRleHQuZ2V0KCkpOworICAgIGlmICghbV92aWRlb1N0cmVhbVRleHR1cmVQcm9ncmFtKQor
ICAgICAgICBtX3ZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0gPSBhZG9wdFB0cihuZXcgVmlkZW9T
dHJlYW1UZXh0dXJlUHJvZ3JhbShtX2NvbnRleHQuZ2V0KCkpKTsKKyAgICBpZiAoIW1fdmlkZW9T
dHJlYW1UZXh0dXJlUHJvZ3JhbS0+aW5pdGlhbGl6ZWQoKSkgeworICAgICAgICBUUkFDRV9FVkVO
VCgiTGF5ZXJSZW5kZXJlckNocm9taXVtOjpzdHJlYW1UZXh0dXJlUHJvZ3JhbTo6aW5pdGlhbGl6
ZSIsIHRoaXMsIDApOworICAgICAgICBtX3ZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0tPmluaXRp
YWxpemUobV9jb250ZXh0LmdldCgpKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fc3RyZWFtVGV4dHVy
ZUxheWVyUHJvZ3JhbS5nZXQoKTsKKyAgICByZXR1cm4gbV92aWRlb1N0cmVhbVRleHR1cmVQcm9n
cmFtLmdldCgpOwogfQogCiB2b2lkIExheWVyUmVuZGVyZXJDaHJvbWl1bTo6Y2xlYW51cFNoYXJl
ZE9iamVjdHMoKQpAQCAtMTY2OSwzNCArMTU5NiwyMSBAQCB2b2lkIExheWVyUmVuZGVyZXJDaHJv
bWl1bTo6Y2xlYW51cFNoYXJlZE9iamVjdHMoKQogCiAgICAgbV9zaGFyZWRHZW9tZXRyeS5jbGVh
cigpOwogCi0gICAgaWYgKG1fY2hlY2tlcmJvYXJkUHJvZ3JhbSkKLSAgICAgICAgbV9jaGVja2Vy
Ym9hcmRQcm9ncmFtLT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7Ci0gICAgaWYgKG1fYm9yZGVy
UHJvZ3JhbSkKLSAgICAgICAgbV9ib3JkZXJQcm9ncmFtLT5jbGVhbnVwKG1fY29udGV4dC5nZXQo
KSk7Ci0gICAgaWYgKG1faGVhZHNVcERpc3BsYXlQcm9ncmFtKQotICAgICAgICBtX2hlYWRzVXBE
aXNwbGF5UHJvZ3JhbS0+Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkpOwotICAgIGlmIChtX3RleHR1
cmVMYXllclByb2dyYW1GbGlwKQotICAgICAgICBtX3RleHR1cmVMYXllclByb2dyYW1GbGlwLT5j
bGVhbnVwKG1fY29udGV4dC5nZXQoKSk7Ci0gICAgaWYgKG1fdGV4dHVyZUxheWVyUHJvZ3JhbVN0
cmV0Y2gpCi0gICAgICAgIG1fdGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2gtPmNsZWFudXAobV9j
b250ZXh0LmdldCgpKTsKLSAgICBpZiAobV90ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaEZsaXAp
Ci0gICAgICAgIG1fdGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2hGbGlwLT5jbGVhbnVwKG1fY29u
dGV4dC5nZXQoKSk7Ci0gICAgaWYgKG1fdGV4dHVyZUxheWVyVGV4UmVjdFByb2dyYW0pCi0gICAg
ICAgIG1fdGV4dHVyZUxheWVyVGV4UmVjdFByb2dyYW0tPmNsZWFudXAobV9jb250ZXh0LmdldCgp
KTsKLSAgICBpZiAobV90ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXApCi0gICAgICAgIG1f
dGV4dHVyZUxheWVyVGV4UmVjdFByb2dyYW1GbGlwLT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7
Ci0gICAgaWYgKG1fdGlsZXJQcm9ncmFtKQotICAgICAgICBtX3RpbGVyUHJvZ3JhbS0+Y2xlYW51
cChtX2NvbnRleHQuZ2V0KCkpOwotICAgIGlmIChtX3RpbGVyUHJvZ3JhbU9wYXF1ZSkKLSAgICAg
ICAgbV90aWxlclByb2dyYW1PcGFxdWUtPmNsZWFudXAobV9jb250ZXh0LmdldCgpKTsKLSAgICBp
ZiAobV90aWxlclByb2dyYW1Td2l6emxlKQotICAgICAgICBtX3RpbGVyUHJvZ3JhbVN3aXp6bGUt
PmNsZWFudXAobV9jb250ZXh0LmdldCgpKTsKLSAgICBpZiAobV90aWxlclByb2dyYW1Td2l6emxl
T3BhcXVlKQotICAgICAgICBtX3RpbGVyUHJvZ3JhbVN3aXp6bGVPcGFxdWUtPmNsZWFudXAobV9j
b250ZXh0LmdldCgpKTsKLSAgICBpZiAobV90aWxlclByb2dyYW1BQSkKLSAgICAgICAgbV90aWxl
clByb2dyYW1BQS0+Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkpOwotICAgIGlmIChtX3RpbGVyUHJv
Z3JhbVN3aXp6bGVBQSkKLSAgICAgICAgbV90aWxlclByb2dyYW1Td2l6emxlQUEtPmNsZWFudXAo
bV9jb250ZXh0LmdldCgpKTsKKyAgICBpZiAobV90aWxlUHJvZ3JhbSkKKyAgICAgICAgbV90aWxl
UHJvZ3JhbS0+Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkpOworICAgIGlmIChtX3RpbGVQcm9ncmFt
T3BhcXVlKQorICAgICAgICBtX3RpbGVQcm9ncmFtT3BhcXVlLT5jbGVhbnVwKG1fY29udGV4dC5n
ZXQoKSk7CisgICAgaWYgKG1fdGlsZVByb2dyYW1Td2l6emxlKQorICAgICAgICBtX3RpbGVQcm9n
cmFtU3dpenpsZS0+Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkpOworICAgIGlmIChtX3RpbGVQcm9n
cmFtU3dpenpsZU9wYXF1ZSkKKyAgICAgICAgbV90aWxlUHJvZ3JhbVN3aXp6bGVPcGFxdWUtPmNs
ZWFudXAobV9jb250ZXh0LmdldCgpKTsKKyAgICBpZiAobV90aWxlUHJvZ3JhbUFBKQorICAgICAg
ICBtX3RpbGVQcm9ncmFtQUEtPmNsZWFudXAobV9jb250ZXh0LmdldCgpKTsKKyAgICBpZiAobV90
aWxlUHJvZ3JhbVN3aXp6bGVBQSkKKyAgICAgICAgbV90aWxlUHJvZ3JhbVN3aXp6bGVBQS0+Y2xl
YW51cChtX2NvbnRleHQuZ2V0KCkpOworICAgIGlmIChtX3RpbGVDaGVja2VyYm9hcmRQcm9ncmFt
KQorICAgICAgICBtX3RpbGVDaGVja2VyYm9hcmRQcm9ncmFtLT5jbGVhbnVwKG1fY29udGV4dC5n
ZXQoKSk7CisKICAgICBpZiAobV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0pCiAgICAgICAgIG1f
cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtLT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7CiAgICAg
aWYgKG1fcmVuZGVyU3VyZmFjZVByb2dyYW0pCkBAIC0xNzA1LDM4ICsxNjE5LDMwIEBAIHZvaWQg
TGF5ZXJSZW5kZXJlckNocm9taXVtOjpjbGVhbnVwU2hhcmVkT2JqZWN0cygpCiAgICAgICAgIG1f
cmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtQUEtPmNsZWFudXAobV9jb250ZXh0LmdldCgpKTsKICAg
ICBpZiAobV9yZW5kZXJTdXJmYWNlUHJvZ3JhbUFBKQogICAgICAgICBtX3JlbmRlclN1cmZhY2VQ
cm9ncmFtQUEtPmNsZWFudXAobV9jb250ZXh0LmdldCgpKTsKLSAgICBpZiAobV92aWRlb0xheWVy
UkdCQVByb2dyYW0pCi0gICAgICAgIG1fdmlkZW9MYXllclJHQkFQcm9ncmFtLT5jbGVhbnVwKG1f
Y29udGV4dC5nZXQoKSk7Ci0gICAgaWYgKG1fdmlkZW9MYXllcllVVlByb2dyYW0pCi0gICAgICAg
IG1fdmlkZW9MYXllcllVVlByb2dyYW0tPmNsZWFudXAobV9jb250ZXh0LmdldCgpKTsKLSAgICBp
ZiAobV92aWRlb0xheWVyTmF0aXZlVGV4dHVyZVByb2dyYW0pCi0gICAgICAgIG1fdmlkZW9MYXll
ck5hdGl2ZVRleHR1cmVQcm9ncmFtLT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7Ci0gICAgaWYg
KG1fc3RyZWFtVGV4dHVyZUxheWVyUHJvZ3JhbSkKLSAgICAgICAgbV9zdHJlYW1UZXh0dXJlTGF5
ZXJQcm9ncmFtLT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7Ci0KLSAgICBtX2JvcmRlclByb2dy
YW0uY2xlYXIoKTsKLSAgICBtX2hlYWRzVXBEaXNwbGF5UHJvZ3JhbS5jbGVhcigpOwotICAgIG1f
dGV4dHVyZUxheWVyUHJvZ3JhbUZsaXAuY2xlYXIoKTsKLSAgICBtX3RleHR1cmVMYXllclByb2dy
YW1TdHJldGNoLmNsZWFyKCk7Ci0gICAgbV90ZXh0dXJlTGF5ZXJQcm9ncmFtU3RyZXRjaEZsaXAu
Y2xlYXIoKTsKLSAgICBtX3RleHR1cmVMYXllclRleFJlY3RQcm9ncmFtLmNsZWFyKCk7Ci0gICAg
bV90ZXh0dXJlTGF5ZXJUZXhSZWN0UHJvZ3JhbUZsaXAuY2xlYXIoKTsKLSAgICBtX3RpbGVyUHJv
Z3JhbS5jbGVhcigpOwotICAgIG1fdGlsZXJQcm9ncmFtT3BhcXVlLmNsZWFyKCk7Ci0gICAgbV90
aWxlclByb2dyYW1Td2l6emxlLmNsZWFyKCk7Ci0gICAgbV90aWxlclByb2dyYW1Td2l6emxlT3Bh
cXVlLmNsZWFyKCk7Ci0gICAgbV90aWxlclByb2dyYW1BQS5jbGVhcigpOwotICAgIG1fdGlsZXJQ
cm9ncmFtU3dpenpsZUFBLmNsZWFyKCk7Ci0gICAgbV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0u
Y2xlYXIoKTsKLSAgICBtX3JlbmRlclN1cmZhY2VQcm9ncmFtLmNsZWFyKCk7Ci0gICAgbV9yZW5k
ZXJTdXJmYWNlTWFza1Byb2dyYW1BQS5jbGVhcigpOwotICAgIG1fcmVuZGVyU3VyZmFjZVByb2dy
YW1BQS5jbGVhcigpOwotICAgIG1fdmlkZW9MYXllclJHQkFQcm9ncmFtLmNsZWFyKCk7Ci0gICAg
bV92aWRlb0xheWVyWVVWUHJvZ3JhbS5jbGVhcigpOwotICAgIG1fdmlkZW9MYXllck5hdGl2ZVRl
eHR1cmVQcm9ncmFtLmNsZWFyKCk7Ci0gICAgbV9zdHJlYW1UZXh0dXJlTGF5ZXJQcm9ncmFtLmNs
ZWFyKCk7CisKKyAgICBpZiAobV90ZXh0dXJlUHJvZ3JhbSkKKyAgICAgICAgbV90ZXh0dXJlUHJv
Z3JhbS0+Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkpOworICAgIGlmIChtX3RleHR1cmVQcm9ncmFt
RmxpcCkKKyAgICAgICAgbV90ZXh0dXJlUHJvZ3JhbUZsaXAtPmNsZWFudXAobV9jb250ZXh0Lmdl
dCgpKTsKKyAgICBpZiAobV90ZXh0dXJlSU9TdXJmYWNlUHJvZ3JhbSkKKyAgICAgICAgbV90ZXh0
dXJlSU9TdXJmYWNlUHJvZ3JhbS0+Y2xlYW51cChtX2NvbnRleHQuZ2V0KCkpOworICAgIGlmICht
X3RleHR1cmVJT1N1cmZhY2VQcm9ncmFtRmxpcCkKKyAgICAgICAgbV90ZXh0dXJlSU9TdXJmYWNl
UHJvZ3JhbUZsaXAtPmNsZWFudXAobV9jb250ZXh0LmdldCgpKTsKKworICAgIGlmIChtX3ZpZGVv
WVVWUHJvZ3JhbSkKKyAgICAgICAgbV92aWRlb1lVVlByb2dyYW0tPmNsZWFudXAobV9jb250ZXh0
LmdldCgpKTsKKyAgICBpZiAobV92aWRlb1N0cmVhbVRleHR1cmVQcm9ncmFtKQorICAgICAgICBt
X3ZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0tPmNsZWFudXAobV9jb250ZXh0LmdldCgpKTsKKwor
ICAgIGlmIChtX3NvbGlkQ29sb3JQcm9ncmFtKQorICAgICAgICBtX3NvbGlkQ29sb3JQcm9ncmFt
LT5jbGVhbnVwKG1fY29udGV4dC5nZXQoKSk7CisKKyAgICBpZiAobV9oZWFkc1VwRGlzcGxheVBy
b2dyYW0pCisgICAgICAgIG1faGVhZHNVcERpc3BsYXlQcm9ncmFtLT5jbGVhbnVwKG1fY29udGV4
dC5nZXQoKSk7CisKICAgICBpZiAobV9vZmZzY3JlZW5GcmFtZWJ1ZmZlcklkKQogICAgICAgICBH
TEMobV9jb250ZXh0LCBtX2NvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVyKG1fb2Zmc2NyZWVuRnJh
bWVidWZmZXJJZCkpOworCiAgICAgbV90ZXh0dXJlQ29waWVyLmNsZWFyKCk7CiAgICAgbV90ZXh0
dXJlVXBsb2FkZXIuY2xlYXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaApp
bmRleCAzN2IxN2VkYWUwZGE4ZDk3ZDFlNzRlMjQzZDc2YWE5ZDgxMWJhZmM4Li4yZjdkYmMzMGJi
NGEyZjgyMzY3ZjhhYjU0NTJkOGQ3ZmRhMzYyYzdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaApAQCAtMzQsMTggKzM0LDEyIEBACiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCiAKLSNpbmNsdWRlICJDb250ZW50TGF5ZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IkZsb2F0UXVhZC5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRlICJMYXllckNocm9t
aXVtLmgiCiAjaW5jbHVkZSAiVGV4dHVyZUNvcGllci5oIgogI2luY2x1ZGUgIlRleHR1cmVVcGxv
YWRlci5oIgogI2luY2x1ZGUgIlRyYWNraW5nVGV4dHVyZUFsbG9jYXRvci5oIgotI2luY2x1ZGUg
ImNjL0NDRHJhd1F1YWQuaCIKLSNpbmNsdWRlICJjYy9DQ0hlYWRzVXBEaXNwbGF5LmgiCiAjaW5j
bHVkZSAiY2MvQ0NMYXllclRyZWVIb3N0LmgiCi0jaW5jbHVkZSAiY2MvQ0NUZXh0dXJlTGF5ZXJJ
bXBsLmgiCi0jaW5jbHVkZSAiY2MvQ0NWaWRlb0xheWVySW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KQEAgLTU0LDEyICs0OCwxOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K2NsYXNzIENDQ2hlY2tlcmJvYXJkRHJhd1F1YWQ7CitjbGFzcyBDQ0RlYnVnQm9yZGVyRHJhd1F1
YWQ7CitjbGFzcyBDQ0RyYXdRdWFkOwogY2xhc3MgQ0NSZW5kZXJQYXNzOworY2xhc3MgQ0NSZW5k
ZXJTdXJmYWNlRHJhd1F1YWQ7CitjbGFzcyBDQ1NvbGlkQ29sb3JEcmF3UXVhZDsKIGNsYXNzIEND
VGV4dHVyZURyYXdRdWFkOworY2xhc3MgQ0NUaWxlRHJhd1F1YWQ7CitjbGFzcyBDQ1ZpZGVvRHJh
d1F1YWQ7CiBjbGFzcyBHZW9tZXRyeUJpbmRpbmc7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsK
LWNsYXNzIExheWVyUmVuZGVyZXJTd2FwQnVmZmVyc0NvbXBsZXRlQ2FsbGJhY2tBZGFwdGVyOwog
Y2xhc3MgTGF5ZXJSZW5kZXJlckdwdU1lbW9yeUFsbG9jYXRpb25DaGFuZ2VkQ2FsbGJhY2tBZGFw
dGVyOworY2xhc3MgTGF5ZXJSZW5kZXJlclN3YXBCdWZmZXJzQ29tcGxldGVDYWxsYmFja0FkYXB0
ZXI7CiBjbGFzcyBTY29wZWRFbnN1cmVGcmFtZWJ1ZmZlckFsbG9jYXRpb247CiAKIGNsYXNzIExh
eWVyUmVuZGVyZXJDaHJvbWl1bUNsaWVudCB7CkBAIC0xMTIsMzAgKzExMyw2IEBAIHB1YmxpYzoK
ICAgICBjb25zdCBHZW9tZXRyeUJpbmRpbmcqIHNoYXJlZEdlb21ldHJ5KCkgY29uc3QgeyByZXR1
cm4gbV9zaGFyZWRHZW9tZXRyeS5nZXQoKTsgfQogICAgIGNvbnN0IEZsb2F0UXVhZCYgc2hhcmVk
R2VvbWV0cnlRdWFkKCkgY29uc3QgeyByZXR1cm4gbV9zaGFyZWRHZW9tZXRyeVF1YWQ7IH0KIAot
ICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4LCBGcmFnbWVudFNo
YWRlckNoZWNrZXJib2FyZD4gQ2hlY2tlcmJvYXJkUHJvZ3JhbTsKLQotICAgIGNvbnN0IENoZWNr
ZXJib2FyZFByb2dyYW0qIGNoZWNrZXJib2FyZFByb2dyYW0oKTsKLSAgICBjb25zdCBMYXllckNo
cm9taXVtOjpCb3JkZXJQcm9ncmFtKiBib3JkZXJQcm9ncmFtKCk7Ci0gICAgY29uc3QgQ0NIZWFk
c1VwRGlzcGxheTo6UHJvZ3JhbSogaGVhZHNVcERpc3BsYXlQcm9ncmFtKCk7Ci0gICAgY29uc3Qg
Q0NSZW5kZXJTdXJmYWNlOjpQcm9ncmFtKiByZW5kZXJTdXJmYWNlUHJvZ3JhbSgpOwotICAgIGNv
bnN0IENDUmVuZGVyU3VyZmFjZTo6UHJvZ3JhbUFBKiByZW5kZXJTdXJmYWNlUHJvZ3JhbUFBKCk7
Ci0gICAgY29uc3QgQ0NSZW5kZXJTdXJmYWNlOjpNYXNrUHJvZ3JhbSogcmVuZGVyU3VyZmFjZU1h
c2tQcm9ncmFtKCk7Ci0gICAgY29uc3QgQ0NSZW5kZXJTdXJmYWNlOjpNYXNrUHJvZ3JhbUFBKiBy
ZW5kZXJTdXJmYWNlTWFza1Byb2dyYW1BQSgpOwotICAgIGNvbnN0IENDVGV4dHVyZUxheWVySW1w
bDo6UHJvZ3JhbUZsaXAqIHRleHR1cmVMYXllclByb2dyYW1GbGlwKCk7Ci0gICAgY29uc3QgQ0NU
ZXh0dXJlTGF5ZXJJbXBsOjpQcm9ncmFtU3RyZXRjaCogdGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0
Y2goKTsKLSAgICBjb25zdCBDQ1RleHR1cmVMYXllckltcGw6OlByb2dyYW1TdHJldGNoRmxpcCog
dGV4dHVyZUxheWVyUHJvZ3JhbVN0cmV0Y2hGbGlwKCk7Ci0gICAgY29uc3QgQ0NUZXh0dXJlTGF5
ZXJJbXBsOjpUZXhSZWN0UHJvZ3JhbSogdGV4dHVyZUxheWVyVGV4UmVjdFByb2dyYW0oKTsKLSAg
ICBjb25zdCBDQ1RleHR1cmVMYXllckltcGw6OlRleFJlY3RQcm9ncmFtRmxpcCogdGV4dHVyZUxh
eWVyVGV4UmVjdFByb2dyYW1GbGlwKCk7Ci0gICAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJv
Z3JhbSogdGlsZXJQcm9ncmFtKCk7Ci0gICAgY29uc3QgQ0NUaWxlZExheWVySW1wbDo6UHJvZ3Jh
bU9wYXF1ZSogdGlsZXJQcm9ncmFtT3BhcXVlKCk7Ci0gICAgY29uc3QgQ0NUaWxlZExheWVySW1w
bDo6UHJvZ3JhbUFBKiB0aWxlclByb2dyYW1BQSgpOwotICAgIGNvbnN0IENDVGlsZWRMYXllcklt
cGw6OlByb2dyYW1Td2l6emxlKiB0aWxlclByb2dyYW1Td2l6emxlKCk7Ci0gICAgY29uc3QgQ0NU
aWxlZExheWVySW1wbDo6UHJvZ3JhbVN3aXp6bGVPcGFxdWUqIHRpbGVyUHJvZ3JhbVN3aXp6bGVP
cGFxdWUoKTsKLSAgICBjb25zdCBDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtU3dpenpsZUFBKiB0
aWxlclByb2dyYW1Td2l6emxlQUEoKTsKLSAgICBjb25zdCBDQ1ZpZGVvTGF5ZXJJbXBsOjpSR0JB
UHJvZ3JhbSogdmlkZW9MYXllclJHQkFQcm9ncmFtKCk7Ci0gICAgY29uc3QgQ0NWaWRlb0xheWVy
SW1wbDo6WVVWUHJvZ3JhbSogdmlkZW9MYXllcllVVlByb2dyYW0oKTsKLSAgICBjb25zdCBDQ1Zp
ZGVvTGF5ZXJJbXBsOjpOYXRpdmVUZXh0dXJlUHJvZ3JhbSogdmlkZW9MYXllck5hdGl2ZVRleHR1
cmVQcm9ncmFtKCk7Ci0gICAgY29uc3QgQ0NWaWRlb0xheWVySW1wbDo6U3RyZWFtVGV4dHVyZVBy
b2dyYW0qIHN0cmVhbVRleHR1cmVMYXllclByb2dyYW0oKTsKIAogICAgIHZvaWQgZ2V0RnJhbWVi
dWZmZXJQaXhlbHModm9pZCAqcGl4ZWxzLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgYm9vbCBnZXRG
cmFtZWJ1ZmZlclRleHR1cmUoTWFuYWdlZFRleHR1cmUqLCBjb25zdCBJbnRSZWN0JiBkZXZpY2VS
ZWN0KTsKQEAgLTIxOSwzMyArMTk2LDkzIEBAIHByaXZhdGU6CiAgICAgTWFuYWdlZFRleHR1cmUq
IG1fY3VycmVudE1hbmFnZWRUZXh0dXJlOwogICAgIHVuc2lnbmVkIG1fb2Zmc2NyZWVuRnJhbWVi
dWZmZXJJZDsKIAotICAgIC8vIFN0b3JlIHZhbHVlcyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiBp
bnN0YW5jZXMgb2YgZWFjaCBsYXllciB0eXBlCi0gICAgLy8gYXNzb2NpYXRlZCB3aXRoIHRoaXMg
aW5zdGFuY2Ugb2YgdGhlIGNvbXBvc2l0b3IuIFNpbmNlIHRoZXJlIGNhbiBiZQotICAgIC8vIG11
bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgY29tcG9zaXRvciBydW5uaW5nIGluIHRoZSBzYW1lIHJl
bmRlcmVyIHByb2Nlc3MKLSAgICAvLyB3ZSBjYW5ub3Qgc3RvcmUgdGhlc2UgdmFsdWVzIGluIHN0
YXRpYyB2YXJpYWJsZXMuCiAgICAgT3duUHRyPEdlb21ldHJ5QmluZGluZz4gbV9zaGFyZWRHZW9t
ZXRyeTsKLSAgICBPd25QdHI8Q2hlY2tlcmJvYXJkUHJvZ3JhbT4gbV9jaGVja2VyYm9hcmRQcm9n
cmFtOwotICAgIE93blB0cjxMYXllckNocm9taXVtOjpCb3JkZXJQcm9ncmFtPiBtX2JvcmRlclBy
b2dyYW07Ci0gICAgT3duUHRyPENDSGVhZHNVcERpc3BsYXk6OlByb2dyYW0+IG1faGVhZHNVcERp
c3BsYXlQcm9ncmFtOwotICAgIE93blB0cjxDQ1RleHR1cmVMYXllckltcGw6OlByb2dyYW1GbGlw
PiBtX3RleHR1cmVMYXllclByb2dyYW1GbGlwOwotICAgIE93blB0cjxDQ1RleHR1cmVMYXllcklt
cGw6OlByb2dyYW1TdHJldGNoPiBtX3RleHR1cmVMYXllclByb2dyYW1TdHJldGNoOwotICAgIE93
blB0cjxDQ1RleHR1cmVMYXllckltcGw6OlByb2dyYW1TdHJldGNoRmxpcD4gbV90ZXh0dXJlTGF5
ZXJQcm9ncmFtU3RyZXRjaEZsaXA7Ci0gICAgT3duUHRyPENDVGV4dHVyZUxheWVySW1wbDo6VGV4
UmVjdFByb2dyYW0+IG1fdGV4dHVyZUxheWVyVGV4UmVjdFByb2dyYW07Ci0gICAgT3duUHRyPEND
VGV4dHVyZUxheWVySW1wbDo6VGV4UmVjdFByb2dyYW1GbGlwPiBtX3RleHR1cmVMYXllclRleFJl
Y3RQcm9ncmFtRmxpcDsKLSAgICBPd25QdHI8Q0NUaWxlZExheWVySW1wbDo6UHJvZ3JhbT4gbV90
aWxlclByb2dyYW07Ci0gICAgT3duUHRyPENDVGlsZWRMYXllckltcGw6OlByb2dyYW1PcGFxdWU+
IG1fdGlsZXJQcm9ncmFtT3BhcXVlOwotICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9n
cmFtU3dpenpsZT4gbV90aWxlclByb2dyYW1Td2l6emxlOwotICAgIE93blB0cjxDQ1RpbGVkTGF5
ZXJJbXBsOjpQcm9ncmFtU3dpenpsZU9wYXF1ZT4gbV90aWxlclByb2dyYW1Td2l6emxlT3BhcXVl
OwotICAgIE93blB0cjxDQ1RpbGVkTGF5ZXJJbXBsOjpQcm9ncmFtQUE+IG1fdGlsZXJQcm9ncmFt
QUE7Ci0gICAgT3duUHRyPENDVGlsZWRMYXllckltcGw6OlByb2dyYW1Td2l6emxlQUE+IG1fdGls
ZXJQcm9ncmFtU3dpenpsZUFBOwotICAgIE93blB0cjxDQ1JlbmRlclN1cmZhY2U6Ok1hc2tQcm9n
cmFtPiBtX3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbTsKLSAgICBPd25QdHI8Q0NSZW5kZXJTdXJm
YWNlOjpQcm9ncmFtPiBtX3JlbmRlclN1cmZhY2VQcm9ncmFtOwotICAgIE93blB0cjxDQ1JlbmRl
clN1cmZhY2U6Ok1hc2tQcm9ncmFtQUE+IG1fcmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtQUE7Ci0g
ICAgT3duUHRyPENDUmVuZGVyU3VyZmFjZTo6UHJvZ3JhbUFBPiBtX3JlbmRlclN1cmZhY2VQcm9n
cmFtQUE7Ci0gICAgT3duUHRyPENDVmlkZW9MYXllckltcGw6OlJHQkFQcm9ncmFtPiBtX3ZpZGVv
TGF5ZXJSR0JBUHJvZ3JhbTsKLSAgICBPd25QdHI8Q0NWaWRlb0xheWVySW1wbDo6WVVWUHJvZ3Jh
bT4gbV92aWRlb0xheWVyWVVWUHJvZ3JhbTsKLSAgICBPd25QdHI8Q0NWaWRlb0xheWVySW1wbDo6
TmF0aXZlVGV4dHVyZVByb2dyYW0+IG1fdmlkZW9MYXllck5hdGl2ZVRleHR1cmVQcm9ncmFtOwot
ICAgIE93blB0cjxDQ1ZpZGVvTGF5ZXJJbXBsOjpTdHJlYW1UZXh0dXJlUHJvZ3JhbT4gbV9zdHJl
YW1UZXh0dXJlTGF5ZXJQcm9ncmFtOworCisgICAgLy8gVGhpcyBibG9jayBvZiBiaW5kaW5ncyBk
ZWZpbmVzIGFsbCBvZiB0aGUgcHJvZ3JhbXMgdXNlZCBieSB0aGUgY29tcG9zaXRvciBpdHNlbGYu
CisKKyAgICAvLyBUaWxlZCBsYXllciBzaGFkZXJzLgorICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRp
bmc8VmVydGV4U2hhZGVyVGlsZSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxwaGE+IFRpbGVQcm9n
cmFtOworICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyVGlsZSwgRnJhZ21l
bnRTaGFkZXJSR0JBVGV4Q2xhbXBBbHBoYUFBPiBUaWxlUHJvZ3JhbUFBOworICAgIHR5cGVkZWYg
UHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyVGlsZSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4Q2xh
bXBTd2l6emxlQWxwaGFBQT4gVGlsZVByb2dyYW1Td2l6emxlQUE7CisgICAgdHlwZWRlZiBQcm9n
cmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFnbWVudFNoYWRlclJHQkFUZXhPcGFxdWU+
IFRpbGVQcm9ncmFtT3BhcXVlOworICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hh
ZGVyVGlsZSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4U3dpenpsZUFscGhhPiBUaWxlUHJvZ3JhbVN3
aXp6bGU7CisgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJUaWxlLCBGcmFn
bWVudFNoYWRlclJHQkFUZXhTd2l6emxlT3BhcXVlPiBUaWxlUHJvZ3JhbVN3aXp6bGVPcGFxdWU7
CisgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXgsIEZyYWdtZW50
U2hhZGVyQ2hlY2tlcmJvYXJkPiBUaWxlQ2hlY2tlcmJvYXJkUHJvZ3JhbTsKKworICAgIC8vIFJl
bmRlciBzdXJmYWNlIHNoYWRlcnMuCisgICAgLy8gQ0NSZW5kZXJTdXJmYWNlOjpkcmF3TGF5ZXJz
KCkgbmVlZHMgdG8gc2VlIHRoZXNlIHByb2dyYW1zIGN1cnJlbnRseS4KKyAgICAvLyBGSVhNRTog
RHJhdyB3aXRoIGEgcXVhZCB0eXBlIGZvciByZW5kZXIgc3VyZmFjZXMgYW5kIGdldCByaWQgb2Yg
dGhpcyBmcmllbmRseW5lc3MuCisgICAgZnJpZW5kIGNsYXNzIENDUmVuZGVyU3VyZmFjZTsgCisg
ICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXgsIEZyYWdtZW50U2hh
ZGVyUkdCQVRleEFscGhhPiBSZW5kZXJTdXJmYWNlUHJvZ3JhbTsKKyAgICB0eXBlZGVmIFByb2dy
YW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxwaGFN
YXNrPiBSZW5kZXJTdXJmYWNlTWFza1Byb2dyYW07CisgICAgdHlwZWRlZiBQcm9ncmFtQmluZGlu
ZzxWZXJ0ZXhTaGFkZXJRdWFkLCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYUFBPiBSZW5kZXJT
dXJmYWNlUHJvZ3JhbUFBOworICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVy
UXVhZCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxwaGFNYXNrQUE+IFJlbmRlclN1cmZhY2VNYXNr
UHJvZ3JhbUFBOworCisgICAgLy8gVGV4dHVyZSBzaGFkZXJzLgorICAgIHR5cGVkZWYgUHJvZ3Jh
bUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFU
ZXhBbHBoYT4gVGV4dHVyZVByb2dyYW07CisgICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0
ZXhTaGFkZXJQb3NUZXhUcmFuc2Zvcm0sIEZyYWdtZW50U2hhZGVyUkdCQVRleEZsaXBBbHBoYT4g
VGV4dHVyZVByb2dyYW1GbGlwOworICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hh
ZGVyUG9zVGV4VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhSZWN0QWxwaGE+IFRleHR1
cmVJT1N1cmZhY2VQcm9ncmFtOworICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hh
ZGVyUG9zVGV4VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhSZWN0RmxpcEFscGhhPiBU
ZXh0dXJlSU9TdXJmYWNlUHJvZ3JhbUZsaXA7CisKKyAgICAvLyBWaWRlbyBzaGFkZXJzLgorICAg
IHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyVmlkZW9UcmFuc2Zvcm0sIEZyYWdt
ZW50U2hhZGVyT0VTSW1hZ2VFeHRlcm5hbD4gVmlkZW9TdHJlYW1UZXh0dXJlUHJvZ3JhbTsKKyAg
ICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFlVVlN0cmV0Y2gsIEZy
YWdtZW50U2hhZGVyWVVWVmlkZW8+IFZpZGVvWVVWUHJvZ3JhbTsKKworICAgIC8vIFNwZWNpYWwg
cHVycG9zZSAvIGVmZmVjdHMgc2hhZGVycy4KKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZl
cnRleFNoYWRlclBvcywgRnJhZ21lbnRTaGFkZXJDb2xvcj4gU29saWRDb2xvclByb2dyYW07CisK
KyAgICAvLyBEZWJ1Z2dpbmcgc2hhZGVycy4KKyAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZl
cnRleFNoYWRlclBvc1RleCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4U3dpenpsZUFscGhhPiBIZWFk
c1VwRGlzcGxheVByb2dyYW07CisKKworICAgIGNvbnN0IFRpbGVQcm9ncmFtKiB0aWxlUHJvZ3Jh
bSgpOworICAgIGNvbnN0IFRpbGVQcm9ncmFtT3BhcXVlKiB0aWxlUHJvZ3JhbU9wYXF1ZSgpOwor
ICAgIGNvbnN0IFRpbGVQcm9ncmFtQUEqIHRpbGVQcm9ncmFtQUEoKTsKKyAgICBjb25zdCBUaWxl
UHJvZ3JhbVN3aXp6bGUqIHRpbGVQcm9ncmFtU3dpenpsZSgpOworICAgIGNvbnN0IFRpbGVQcm9n
cmFtU3dpenpsZU9wYXF1ZSogdGlsZVByb2dyYW1Td2l6emxlT3BhcXVlKCk7CisgICAgY29uc3Qg
VGlsZVByb2dyYW1Td2l6emxlQUEqIHRpbGVQcm9ncmFtU3dpenpsZUFBKCk7CisgICAgY29uc3Qg
VGlsZUNoZWNrZXJib2FyZFByb2dyYW0qIHRpbGVDaGVja2VyYm9hcmRQcm9ncmFtKCk7CisgCisg
ICAgY29uc3QgUmVuZGVyU3VyZmFjZVByb2dyYW0qIHJlbmRlclN1cmZhY2VQcm9ncmFtKCk7Cisg
ICAgY29uc3QgUmVuZGVyU3VyZmFjZVByb2dyYW1BQSogcmVuZGVyU3VyZmFjZVByb2dyYW1BQSgp
OworICAgIGNvbnN0IFJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSogcmVuZGVyU3VyZmFjZU1hc2tQ
cm9ncmFtKCk7CisgICAgY29uc3QgUmVuZGVyU3VyZmFjZU1hc2tQcm9ncmFtQUEqIHJlbmRlclN1
cmZhY2VNYXNrUHJvZ3JhbUFBKCk7CisKKyAgICBjb25zdCBUZXh0dXJlUHJvZ3JhbSogdGV4dHVy
ZVByb2dyYW0oKTsKKyAgICBjb25zdCBUZXh0dXJlUHJvZ3JhbUZsaXAqIHRleHR1cmVQcm9ncmFt
RmxpcCgpOworICAgIGNvbnN0IFRleHR1cmVJT1N1cmZhY2VQcm9ncmFtKiB0ZXh0dXJlSU9TdXJm
YWNlUHJvZ3JhbSgpOworICAgIGNvbnN0IFRleHR1cmVJT1N1cmZhY2VQcm9ncmFtRmxpcCogdGV4
dHVyZUlPU3VyZmFjZVByb2dyYW1GbGlwKCk7CisKKyAgICBjb25zdCBWaWRlb1lVVlByb2dyYW0q
IHZpZGVvWVVWUHJvZ3JhbSgpOworICAgIGNvbnN0IFZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0q
IHZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW0oKTsKKworICAgIGNvbnN0IFNvbGlkQ29sb3JQcm9n
cmFtKiBzb2xpZENvbG9yUHJvZ3JhbSgpOworCisgICAgY29uc3QgSGVhZHNVcERpc3BsYXlQcm9n
cmFtKiBoZWFkc1VwRGlzcGxheVByb2dyYW0oKTsKKworICAgIE93blB0cjxUaWxlUHJvZ3JhbT4g
bV90aWxlUHJvZ3JhbTsKKyAgICBPd25QdHI8VGlsZVByb2dyYW1PcGFxdWU+IG1fdGlsZVByb2dy
YW1PcGFxdWU7CisgICAgT3duUHRyPFRpbGVQcm9ncmFtQUE+IG1fdGlsZVByb2dyYW1BQTsKKyAg
ICBPd25QdHI8VGlsZVByb2dyYW1Td2l6emxlPiBtX3RpbGVQcm9ncmFtU3dpenpsZTsKKyAgICBP
d25QdHI8VGlsZVByb2dyYW1Td2l6emxlT3BhcXVlPiBtX3RpbGVQcm9ncmFtU3dpenpsZU9wYXF1
ZTsKKyAgICBPd25QdHI8VGlsZVByb2dyYW1Td2l6emxlQUE+IG1fdGlsZVByb2dyYW1Td2l6emxl
QUE7CisgICAgT3duUHRyPFRpbGVDaGVja2VyYm9hcmRQcm9ncmFtPiBtX3RpbGVDaGVja2VyYm9h
cmRQcm9ncmFtOworCisgICAgT3duUHRyPFJlbmRlclN1cmZhY2VQcm9ncmFtPiBtX3JlbmRlclN1
cmZhY2VQcm9ncmFtOworICAgIE93blB0cjxSZW5kZXJTdXJmYWNlUHJvZ3JhbUFBPiBtX3JlbmRl
clN1cmZhY2VQcm9ncmFtQUE7CisgICAgT3duUHRyPFJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbT4g
bV9yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW07CisgICAgT3duUHRyPFJlbmRlclN1cmZhY2VNYXNr
UHJvZ3JhbUFBPiBtX3JlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbUFBOworCisgICAgT3duUHRyPFRl
eHR1cmVQcm9ncmFtPiBtX3RleHR1cmVQcm9ncmFtOworICAgIE93blB0cjxUZXh0dXJlUHJvZ3Jh
bUZsaXA+IG1fdGV4dHVyZVByb2dyYW1GbGlwOworICAgIE93blB0cjxUZXh0dXJlSU9TdXJmYWNl
UHJvZ3JhbT4gbV90ZXh0dXJlSU9TdXJmYWNlUHJvZ3JhbTsKKyAgICBPd25QdHI8VGV4dHVyZUlP
U3VyZmFjZVByb2dyYW1GbGlwPiBtX3RleHR1cmVJT1N1cmZhY2VQcm9ncmFtRmxpcDsKKworICAg
IE93blB0cjxWaWRlb1lVVlByb2dyYW0+IG1fdmlkZW9ZVVZQcm9ncmFtOworICAgIE93blB0cjxW
aWRlb1N0cmVhbVRleHR1cmVQcm9ncmFtPiBtX3ZpZGVvU3RyZWFtVGV4dHVyZVByb2dyYW07CisK
KyAgICBPd25QdHI8U29saWRDb2xvclByb2dyYW0+IG1fc29saWRDb2xvclByb2dyYW07CisgICAg
T3duUHRyPEhlYWRzVXBEaXNwbGF5UHJvZ3JhbT4gbV9oZWFkc1VwRGlzcGxheVByb2dyYW07CiAK
ICAgICBPd25QdHI8VGV4dHVyZU1hbmFnZXI+IG1fcmVuZGVyU3VyZmFjZVRleHR1cmVNYW5hZ2Vy
OwogICAgIE93blB0cjxBY2NlbGVyYXRlZFRleHR1cmVDb3BpZXI+IG1fdGV4dHVyZUNvcGllcjsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1No
YWRlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1NoYWRlckNocm9taXVtLmNwcAppbmRleCA4ZmEyNWM0M2MwOWViOTgwOTU5YjczZTMyODUy
NThiZDM1Zjk4NDY0Li5lN2I4YzVhYWZiZjNlN2ViODJmYzQyMjhhNzJlODYwYzdhMGM1Y2NmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaGFk
ZXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vU2hhZGVyQ2hyb21pdW0uY3BwCkBAIC02MywzOCArNjMsNiBAQCBTdHJpbmcgVmVydGV4
U2hhZGVyUG9zVGV4OjpnZXRTaGFkZXJTdHJpbmcoKSBjb25zdAogICAgICk7CiB9CiAKLVZlcnRl
eFNoYWRlclBvc1RleFN0cmV0Y2g6OlZlcnRleFNoYWRlclBvc1RleFN0cmV0Y2goKQotICAgIDog
bV9tYXRyaXhMb2NhdGlvbigtMSkKLSAgICAsIG1fb2Zmc2V0TG9jYXRpb24oLTEpCi0gICAgLCBt
X3NjYWxlTG9jYXRpb24oLTEpCi17Ci19Ci0KLXZvaWQgVmVydGV4U2hhZGVyUG9zVGV4U3RyZXRj
aDo6aW5pdChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQgcHJvZ3JhbSkKLXsK
LSAgICBtX21hdHJpeExvY2F0aW9uID0gY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dy
YW0sICJtYXRyaXgiKTsKLSAgICBtX29mZnNldExvY2F0aW9uID0gY29udGV4dC0+Z2V0VW5pZm9y
bUxvY2F0aW9uKHByb2dyYW0sICJvZmZzZXQiKTsKLSAgICBtX3NjYWxlTG9jYXRpb24gPSBjb250
ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgInNjYWxlIik7Ci0gICAgQVNTRVJUKG1f
bWF0cml4TG9jYXRpb24gIT0gLTEgJiYgbV9vZmZzZXRMb2NhdGlvbiAhPSAtMSAmJiBtX3NjYWxl
TG9jYXRpb24gIT0gLTEpOwotfQotCi1TdHJpbmcgVmVydGV4U2hhZGVyUG9zVGV4U3RyZXRjaDo6
Z2V0U2hhZGVyU3RyaW5nKCkgY29uc3QKLXsKLSAgICByZXR1cm4gU0hBREVSKAotICAgICAgICBh
dHRyaWJ1dGUgdmVjNCBhX3Bvc2l0aW9uOwotICAgICAgICBhdHRyaWJ1dGUgdmVjMiBhX3RleENv
b3JkOwotICAgICAgICB1bmlmb3JtIG1hdDQgbWF0cml4OwotICAgICAgICB1bmlmb3JtIHZlYzIg
b2Zmc2V0OwotICAgICAgICB1bmlmb3JtIHZlYzIgc2NhbGU7Ci0gICAgICAgIHZhcnlpbmcgdmVj
MiB2X3RleENvb3JkOwotICAgICAgICB2b2lkIG1haW4oKQotICAgICAgICB7Ci0gICAgICAgICAg
ICBnbF9Qb3NpdGlvbiA9IG1hdHJpeCAqIGFfcG9zaXRpb247Ci0gICAgICAgICAgICB2X3RleENv
b3JkID0gc2NhbGUgKiBhX3RleENvb3JkICsgb2Zmc2V0OwotICAgICAgICB9Ci0gICAgKTsKLX0K
LQogVmVydGV4U2hhZGVyUG9zVGV4WVVWU3RyZXRjaDo6VmVydGV4U2hhZGVyUG9zVGV4WVVWU3Ry
ZXRjaCgpCiAgICAgOiBtX21hdHJpeExvY2F0aW9uKC0xKQogICAgICwgbV95V2lkdGhTY2FsZUZh
Y3RvckxvY2F0aW9uKC0xKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1NoYWRlckNocm9taXVtLmgKaW5kZXggYjI4MzdlOTFlYWMxYTg5
NTUzOTRiZGIxODFmMTQ5ZDI2ZjNhNzBhYy4uODFkYjNlMjQzMjFlMzVmMTY4OWEzNDFhNmZlMTQ0
MzlhMzBhMDVkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vU2hhZGVyQ2hyb21pdW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9TaGFkZXJDaHJvbWl1bS5oCkBAIC00OCwyMyArNDgsNiBAQCBwcml2
YXRlOgogICAgIGludCBtX21hdHJpeExvY2F0aW9uOwogfTsKIAotY2xhc3MgVmVydGV4U2hhZGVy
UG9zVGV4U3RyZXRjaCB7Ci1wdWJsaWM6Ci0gICAgVmVydGV4U2hhZGVyUG9zVGV4U3RyZXRjaCgp
OwotCi0gICAgdm9pZCBpbml0KEdyYXBoaWNzQ29udGV4dDNEKiwgdW5zaWduZWQgcHJvZ3JhbSk7
Ci0gICAgU3RyaW5nIGdldFNoYWRlclN0cmluZygpIGNvbnN0OwotCi0gICAgaW50IG1hdHJpeExv
Y2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXRyaXhMb2NhdGlvbjsgfQotICAgIGludCBvZmZz
ZXRMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0TG9jYXRpb247IH0KLSAgICBpbnQg
c2NhbGVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGVMb2NhdGlvbjsgfQotCi1wcml2
YXRlOgotICAgIGludCBtX21hdHJpeExvY2F0aW9uOwotICAgIGludCBtX29mZnNldExvY2F0aW9u
OwotICAgIGludCBtX3NjYWxlTG9jYXRpb247Ci19OwotCiBjbGFzcyBWZXJ0ZXhTaGFkZXJQb3NU
ZXhZVVZTdHJldGNoIHsKIHB1YmxpYzoKICAgICBWZXJ0ZXhTaGFkZXJQb3NUZXhZVVZTdHJldGNo
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmgKaW5kZXggYzIyZGZjMjI5YTVkOGMwNTFj
MzRmMjUxYzQ5MWI2NjhkYWE2NmYwZi4uNDgzMWU1ZGQxOGMzZTExMjFhMTkyYjk5YTc0YWYxYmFj
Y2QyY2ZhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NIZWFkc1VwRGlzcGxheS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDSGVhZHNVcERpc3BsYXkuaApAQCAtMjcsOCArMjcsNiBA
QAogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCi0jaW5jbHVkZSAiUHJvZ3Jh
bUJpbmRpbmcuaCIKLSNpbmNsdWRlICJTaGFkZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUgImNjL0ND
Rm9udEF0bGFzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTU2LDggKzU0LDYgQEAgcHVi
bGljOgogICAgIGJvb2wgZW5hYmxlZChjb25zdCBDQ1NldHRpbmdzJikgY29uc3Q7CiAgICAgdm9p
ZCBkcmF3KENDTGF5ZXJUcmVlSG9zdEltcGwqKTsKIAotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRp
bmc8VmVydGV4U2hhZGVyUG9zVGV4LCBGcmFnbWVudFNoYWRlclJHQkFUZXhTd2l6emxlQWxwaGE+
IFByb2dyYW07Ci0KIHByaXZhdGU6CiAgICAgQ0NIZWFkc1VwRGlzcGxheSgpIHsgfTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclRyZWVIb3N0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAppbmRleCBjNGQ1OTliNzEzNzNlMGFh
NjYyYWNlZTljYmQzZTQ2Yzk4MGE2YmY0Li4xNDdiMmM0ZjgzMmZhYmJiNDU2N2QzYTFjZmEyZGRh
YzdlODU5ODA4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmNwcApAQCAt
MzQsOCArMzQsMTAgQEAKICNpbmNsdWRlICJjYy9DQ0RhbWFnZVRyYWNrZXIuaCIKICNpbmNsdWRl
ICJjYy9DQ0RlYnVnUmVjdEhpc3RvcnkuaCIKICNpbmNsdWRlICJjYy9DQ0RlbGF5QmFzZWRUaW1l
U291cmNlLmgiCisjaW5jbHVkZSAiY2MvQ0NGb250QXRsYXMuaCIKICNpbmNsdWRlICJjYy9DQ0Zy
YW1lUmF0ZUNvdW50ZXIuaCIKICNpbmNsdWRlICJjYy9DQ0dlc3R1cmVDdXJ2ZS5oIgorI2luY2x1
ZGUgImNjL0NDSGVhZHNVcERpc3BsYXkuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVySXRlcmF0b3Iu
aCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVy
VHJlZUhvc3RDb21tb24uaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaAppbmRl
eCAzZDI3MmVkM2MzOGI3MWZjZTM3MzYwM2Q3ZTI2Y2VjNjEwNzU2NjRkLi40NDIxZTQ5YzA4NjMy
NTgzNjI1OWNlYTc5MTJjNjBkMjY5OTlkYzNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyVHJlZUhvc3RJbXBsLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclRyZWVI
b3N0SW1wbC5oCkBAIC00Myw2ICs0Myw3IEBAIGNsYXNzIENDQ29tcGxldGlvbkV2ZW50OwogY2xh
c3MgQ0NEZWJ1Z1JlY3RIaXN0b3J5OwogY2xhc3MgQ0NGb250QXRsYXM7CiBjbGFzcyBDQ0ZyYW1l
UmF0ZUNvdW50ZXI7CitjbGFzcyBDQ0hlYWRzVXBEaXNwbGF5OwogY2xhc3MgQ0NQYWdlU2NhbGVB
bmltYXRpb247CiBjbGFzcyBDQ0xheWVySW1wbDsKIGNsYXNzIENDTGF5ZXJUcmVlSG9zdEltcGxU
aW1lU291cmNlQWRhcHRlcjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ1JlbmRlclN1cmZhY2UuY3BwCmluZGV4IGM4
YjkxY2ZjNmQ3ZDU0NGU5Y2QxZmQ0NWE3NGY1YTgyNjYwMjU5M2QuLmVjMWFjMTY3YTBlYWQyMDEx
YmMxYTc5ZDMzNDkyNWVlNDRjZmIwYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDUmVuZGVyU3VyZmFjZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmNw
cApAQCAtMTY5LDkgKzE2OSw5IEBAIEludFJlY3QgQ0NSZW5kZXJTdXJmYWNlOjpyZWFkYmFja0Rl
dmljZUNvbnRlbnRSZWN0KExheWVyUmVuZGVyZXJDaHJvbWl1bSogbGF5ZXJSCiAgICAgcmV0dXJu
IGNvbXB1dGVSZWFkYmFja0RldmljZUJvdW5kaW5nQm94KGxheWVyUmVuZGVyZXIsIGRyYXdUcmFu
c2Zvcm0pOwogfQogCi1zdGF0aWMgdm9pZCBjb3B5VGV4dHVyZVRvRnJhbWVidWZmZXIoTGF5ZXJS
ZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBpbnQgdGV4dHVyZUlkLCBjb25zdCBJbnRT
aXplJiBib3VuZHMsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBkcmF3TWF0cml4KQordm9p
ZCBDQ1JlbmRlclN1cmZhY2U6OmNvcHlUZXh0dXJlVG9GcmFtZWJ1ZmZlcihMYXllclJlbmRlcmVy
Q2hyb21pdW0qIGxheWVyUmVuZGVyZXIsIGludCB0ZXh0dXJlSWQsIGNvbnN0IEludFNpemUmIGJv
dW5kcywgY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIGRyYXdNYXRyaXgpCiB7Ci0gICAgY29u
c3QgQ0NSZW5kZXJTdXJmYWNlOjpQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+cmVu
ZGVyU3VyZmFjZVByb2dyYW0oKTsKKyAgICBjb25zdCBMYXllclJlbmRlcmVyQ2hyb21pdW06OlJl
bmRlclN1cmZhY2VQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+cmVuZGVyU3VyZmFj
ZVByb2dyYW0oKTsKIAogICAgIEdMQyhsYXllclJlbmRlcmVyLT5jb250ZXh0KCksIGxheWVyUmVu
ZGVyZXItPmNvbnRleHQoKS0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RTApKTsKICAgICBHTEMobGF5ZXJSZW5kZXJlci0+Y29udGV4dCgpLCBsYXllclJlbmRlcmVyLT5j
b250ZXh0KCktPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0
dXJlSWQpKTsKQEAgLTI5MSwxOCArMjkxLDE4IEBAIHZvaWQgQ0NSZW5kZXJTdXJmYWNlOjpkcmF3
TGF5ZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiBsYXllclJlbmRlcmVyLCBDQ0xheWVySW1wCiAK
ICAgICBpZiAodXNlTWFzaykgewogICAgICAgICBpZiAodXNlQUEpIHsKLSAgICAgICAgICAgIGNv
bnN0IE1hc2tQcm9ncmFtQUEqIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT5yZW5kZXJTdXJmYWNl
TWFza1Byb2dyYW1BQSgpOworICAgICAgICAgICAgY29uc3QgTGF5ZXJSZW5kZXJlckNocm9taXVt
OjpSZW5kZXJTdXJmYWNlTWFza1Byb2dyYW1BQSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnJl
bmRlclN1cmZhY2VNYXNrUHJvZ3JhbUFBKCk7CiAgICAgICAgICAgICBkcmF3U3VyZmFjZShsYXll
clJlbmRlcmVyLCBtYXNrTGF5ZXIsIGRyYXdUcmFuc2Zvcm0sIGRldmljZU1hdHJpeCwgZGV2aWNl
UmVjdCwgbGF5ZXJRdWFkLCBjb250ZW50c1RleHR1cmVJZCwgcHJvZ3JhbSwgcHJvZ3JhbS0+ZnJh
Z21lbnRTaGFkZXIoKS5tYXNrU2FtcGxlckxvY2F0aW9uKCksIHByb2dyYW0tPnZlcnRleFNoYWRl
cigpLnBvaW50TG9jYXRpb24oKSwgcHJvZ3JhbS0+ZnJhZ21lbnRTaGFkZXIoKS5lZGdlTG9jYXRp
b24oKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25zdCBNYXNrUHJvZ3JhbSog
cHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnJlbmRlclN1cmZhY2VNYXNrUHJvZ3JhbSgpOworICAg
ICAgICAgICAgY29uc3QgTGF5ZXJSZW5kZXJlckNocm9taXVtOjpSZW5kZXJTdXJmYWNlTWFza1By
b2dyYW0qIHByb2dyYW0gPSBsYXllclJlbmRlcmVyLT5yZW5kZXJTdXJmYWNlTWFza1Byb2dyYW0o
KTsKICAgICAgICAgICAgIGRyYXdTdXJmYWNlKGxheWVyUmVuZGVyZXIsIG1hc2tMYXllciwgZHJh
d1RyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGNvbnRlbnRz
VGV4dHVyZUlkLCBwcm9ncmFtLCBwcm9ncmFtLT5mcmFnbWVudFNoYWRlcigpLm1hc2tTYW1wbGVy
TG9jYXRpb24oKSwgLTEsIC0xKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlm
ICh1c2VBQSkgewotICAgICAgICAgICAgY29uc3QgUHJvZ3JhbUFBKiBwcm9ncmFtID0gbGF5ZXJS
ZW5kZXJlci0+cmVuZGVyU3VyZmFjZVByb2dyYW1BQSgpOworICAgICAgICAgICAgY29uc3QgTGF5
ZXJSZW5kZXJlckNocm9taXVtOjpSZW5kZXJTdXJmYWNlUHJvZ3JhbUFBKiBwcm9ncmFtID0gbGF5
ZXJSZW5kZXJlci0+cmVuZGVyU3VyZmFjZVByb2dyYW1BQSgpOwogICAgICAgICAgICAgZHJhd1N1
cmZhY2UobGF5ZXJSZW5kZXJlciwgbWFza0xheWVyLCBkcmF3VHJhbnNmb3JtLCBkZXZpY2VNYXRy
aXgsIGRldmljZVJlY3QsIGxheWVyUXVhZCwgY29udGVudHNUZXh0dXJlSWQsIHByb2dyYW0sIC0x
LCBwcm9ncmFtLT52ZXJ0ZXhTaGFkZXIoKS5wb2ludExvY2F0aW9uKCksIHByb2dyYW0tPmZyYWdt
ZW50U2hhZGVyKCkuZWRnZUxvY2F0aW9uKCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgY29uc3QgUHJvZ3JhbSogcHJvZ3JhbSA9IGxheWVyUmVuZGVyZXItPnJlbmRlclN1cmZhY2VQ
cm9ncmFtKCk7CisgICAgICAgICAgICBjb25zdCBMYXllclJlbmRlcmVyQ2hyb21pdW06OlJlbmRl
clN1cmZhY2VQcm9ncmFtKiBwcm9ncmFtID0gbGF5ZXJSZW5kZXJlci0+cmVuZGVyU3VyZmFjZVBy
b2dyYW0oKTsKICAgICAgICAgICAgIGRyYXdTdXJmYWNlKGxheWVyUmVuZGVyZXIsIG1hc2tMYXll
ciwgZHJhd1RyYW5zZm9ybSwgZGV2aWNlTWF0cml4LCBkZXZpY2VSZWN0LCBsYXllclF1YWQsIGNv
bnRlbnRzVGV4dHVyZUlkLCBwcm9ncmFtLCAtMSwgLTEsIC0xKTsKICAgICAgICAgfQogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDUmVuZGVyU3VyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKaW5kZXggZjQxMzJlMjBjZjhmNTQzM2U0YWQyNGRm
NmJmOTA2YjVkODFlNTAxMy4uMTBhNWYzNjVlNzAzMTgwYjRmYmJhOWY0MTNlNDI5NmRmYTQzYmYx
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NSZW5kZXJTdXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vY2MvQ0NSZW5kZXJTdXJmYWNlLmgKQEAgLTMyLDggKzMyLDYgQEAKICNpbmNs
dWRlICJGaWx0ZXJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVk
ZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIlByb2dyYW1CaW5kaW5nLmgiCi0jaW5jbHVkZSAiU2hh
ZGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJTa0JpdG1hcC5oIgogI2luY2x1ZGUgIlRleHR1cmVN
YW5hZ2VyLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKQEAgLTEzNiwxMSAr
MTM0LDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRNYXNrTGF5ZXIoQ0NMYXllckltcGwqIG1h
c2tMYXllcikgeyBtX21hc2tMYXllciA9IG1hc2tMYXllcjsgfQogCi0gICAgdHlwZWRlZiBQcm9n
cmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXgsIEZyYWdtZW50U2hhZGVyUkdCQVRleEFscGhh
PiBQcm9ncmFtOwotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4
LCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBoYU1hc2s+IE1hc2tQcm9ncmFtOwotICAgIHR5cGVk
ZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUXVhZCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4
QWxwaGFBQT4gUHJvZ3JhbUFBOwotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hh
ZGVyUXVhZCwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4QWxwaGFNYXNrQUE+IE1hc2tQcm9ncmFtQUE7
Ci0KICAgICBNYW5hZ2VkVGV4dHVyZSogY29udGVudHNUZXh0dXJlKCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZW50c1RleHR1cmUuZ2V0KCk7IH0KICAgICBNYW5hZ2VkVGV4dHVyZSogYmFja2dyb3Vu
ZFRleHR1cmUoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRUZXh0dXJlLmdldCgpOyB9CiAK
QEAgLTE2NSw2ICsxNTgsOCBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlIDxjbGFzcyBUPgogICAg
IHZvaWQgZHJhd1N1cmZhY2UoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgQ0NMYXllckltcGwqLCBj
b25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd1RyYW5zZm9ybSwgY29uc3QgVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIGRldmljZVRyYW5zZm9ybSwgY29uc3QgQ0NMYXllclF1YWQmIGRldmljZVJl
Y3QsIGNvbnN0IENDTGF5ZXJRdWFkJiwgaW50IGNvbnRlbnRzVGV4dHVyZUlkLCBjb25zdCBUKiBw
cm9ncmFtLCBpbnQgc2hhZGVyTWFza1NhbXBsZXJMb2NhdGlvbiwgaW50IHNoYWRlclF1YWRMb2Nh
dGlvbiwgaW50IHNoYWRlckVkZ2VMb2NhdGlvbik7CiAKKyAgICBzdGF0aWMgdm9pZCBjb3B5VGV4
dHVyZVRvRnJhbWVidWZmZXIoTGF5ZXJSZW5kZXJlckNocm9taXVtKiwgaW50IHRleHR1cmVJZCwg
Y29uc3QgSW50U2l6ZSYgYm91bmRzLCBjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgZHJhd01h
dHJpeCk7CisKICAgICBDQ0xheWVySW1wbCogbV9vd25pbmdMYXllcjsKICAgICBDQ0xheWVySW1w
bCogbV9tYXNrTGF5ZXI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDU2luZ2xlVGhyZWFkUHJveHkuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAK
aW5kZXggMTU3ZWY3NjU5OWM4MWE1MGFmYTliZTExMmY5Yjg0MDBiMjgzNzEwYi4uNTYxYjE0MmM2
YTIxZDhjNzU5MWE2MjBjNDRmZGJiYzcyMWQxNjA2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5nbGVUaHJlYWRQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NTaW5n
bGVUaHJlYWRQcm94eS5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRC5oIgogI2luY2x1ZGUgIkxheWVyUmVuZGVyZXJDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IlRyYWNlRXZlbnQuaCIKKyNpbmNsdWRlICJjYy9DQ0ZvbnRBdGxhcy5oIgogI2luY2x1ZGUgImNj
L0NDTGF5ZXJUcmVlSG9zdC5oIgogI2luY2x1ZGUgImNjL0NDVGV4dHVyZVVwZGF0ZXIuaCIKICNp
bmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVGV4dHVyZUxheWVySW1wbC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlTGF5ZXJJbXBs
LmgKaW5kZXggZjFjMjY1ZmExZTFlYjIwYjIxOWZmNzYxY2VlZTQ3ZTU3OWZjMDdhMy4uZWM1YzA0
ZmQ1YzRiNGUwMzAyN2M2OWFlNDA3ODRhYjI1MDQ5YjFjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0dXJlTGF5ZXJJbXBsLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NUZXh0
dXJlTGF5ZXJJbXBsLmgKQEAgLTI2LDggKzI2LDYgQEAKICNpZm5kZWYgQ0NUZXh0dXJlTGF5ZXJJ
bXBsX2gKICNkZWZpbmUgQ0NUZXh0dXJlTGF5ZXJJbXBsX2gKIAotI2luY2x1ZGUgIlByb2dyYW1C
aW5kaW5nLmgiCi0jaW5jbHVkZSAiU2hhZGVyQ2hyb21pdW0uaCIKICNpbmNsdWRlICJjYy9DQ0xh
eWVySW1wbC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MiwxMiArNDAsNiBAQCBwdWJs
aWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kUXVhZHMoQ0NRdWFkQ3VsbGVyJiwgY29uc3Qg
Q0NTaGFyZWRRdWFkU3RhdGUqLCBib29sJiBoYWRNaXNzaW5nVGlsZXMpIE9WRVJSSURFOwogCi0g
ICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXgsIEZyYWdtZW50U2hh
ZGVyUkdCQVRleEZsaXBBbHBoYT4gUHJvZ3JhbUZsaXA7Ci0gICAgdHlwZWRlZiBQcm9ncmFtQmlu
ZGluZzxWZXJ0ZXhTaGFkZXJQb3NUZXhTdHJldGNoLCBGcmFnbWVudFNoYWRlclJHQkFUZXhBbHBo
YT4gUHJvZ3JhbVN0cmV0Y2g7Ci0gICAgdHlwZWRlZiBQcm9ncmFtQmluZGluZzxWZXJ0ZXhTaGFk
ZXJQb3NUZXhTdHJldGNoLCBGcmFnbWVudFNoYWRlclJHQkFUZXhGbGlwQWxwaGE+IFByb2dyYW1T
dHJldGNoRmxpcDsKLSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1Rl
eFRyYW5zZm9ybSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4UmVjdEFscGhhPiBUZXhSZWN0UHJvZ3Jh
bTsKLSAgICB0eXBlZGVmIFByb2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9y
bSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4UmVjdEZsaXBBbHBoYT4gVGV4UmVjdFByb2dyYW1GbGlw
OwotCiAgICAgdmlydHVhbCB2b2lkIHdpbGxEcmF3KExheWVyUmVuZGVyZXJDaHJvbWl1bSopIE9W
RVJSSURFOwogICAgIHZpcnR1YWwgdm9pZCBkaWRMb3NlQ29udGV4dCgpIE9WRVJSSURFOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1RocmVhZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCmluZGV4IDFjZmI2ZDE3NmY1M2RlNjgwYmNhNTE5ZDZi
YjhlZTMzYmJjYWU1ODEuLmFjYmZhNTNlYTJkZjNjNDVjYzhiZjNjNDgxNTIxMWZhZWMyNWFmN2Eg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGhyZWFkUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL2NjL0NDVGhyZWFkUHJveHkuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVk
ZSAiU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJUcmFjZUV2ZW50LmgiCiAj
aW5jbHVkZSAiY2MvQ0NEZWxheUJhc2VkVGltZVNvdXJjZS5oIgorI2luY2x1ZGUgImNjL0NDRm9u
dEF0bGFzLmgiCiAjaW5jbHVkZSAiY2MvQ0NGcmFtZVJhdGVDb250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiY2MvQ0NJbnB1dEhhbmRsZXIuaCIKICNpbmNsdWRlICJjYy9DQ0xheWVyVHJlZUhvc3QuaCIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2Nj
L0NDVGlsZWRMYXllckltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL2NjL0NDVGlsZWRMYXllckltcGwuaAppbmRleCA2ZmM1YzllNDlkZjZhZWQyMjEwNTkw
ZDVkNjQxMTQzODJjMDU2NDNmLi5iZDE0NjY1MGJhZDVhN2FkNjAyMWY5YWE3MmRkZWU3NzUyYWEx
NWJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ1RpbGVkTGF5ZXJJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vY2MvQ0NUaWxlZExheWVySW1wbC5oCkBAIC01OSwxOSArNTksNiBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBSZWdpb24gdmlzaWJsZUNvbnRlbnRPcGFxdWVSZWdpb24oKSBj
b25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkTG9zZUNvbnRleHQoKSBPVkVSUklE
RTsKIAotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyVGlsZSwgRnJhZ21l
bnRTaGFkZXJSR0JBVGV4QWxwaGE+IFByb2dyYW07Ci0gICAgLy8gU2hhZGVyIHByb2dyYW0gdGhh
dCBzd2FwcyByZWQgYW5kIGJsdWUgY29tcG9uZW50cyBvZiB0ZXh0dXJlLgotICAgIC8vIFVzZWQg
d2hlbiB0ZXh0dXJlIGZvcm1hdCBkb2VzIG5vdCBtYXRjaCBuYXRpdmUgY29sb3IgZm9ybWF0Lgot
ICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyVGlsZSwgRnJhZ21lbnRTaGFk
ZXJSR0JBVGV4U3dpenpsZUFscGhhPiBQcm9ncmFtU3dpenpsZTsKLQotICAgIC8vIFNhbWUgYXMg
YWJvdmUgYnV0IGlnbm9yaW5nIGFscGhhIGFuZCB3cml0aW5nIG91dCAxLjAgZm9yIHRoZSBhbHBo
YSBjaGFubmVsLgotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyVGlsZSwg
RnJhZ21lbnRTaGFkZXJSR0JBVGV4T3BhcXVlPiBQcm9ncmFtT3BhcXVlOwotICAgIHR5cGVkZWYg
UHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyVGlsZSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4U3dp
enpsZU9wYXF1ZT4gUHJvZ3JhbVN3aXp6bGVPcGFxdWU7Ci0KLSAgICAvLyBTaGFkZXIgcHJvZ3Jh
bSB0aGF0IHByb2R1Y2VzIGFudGktYWxpYXNlZCBsYXllciBlZGdlcy4KLSAgICB0eXBlZGVmIFBy
b2dyYW1CaW5kaW5nPFZlcnRleFNoYWRlclRpbGUsIEZyYWdtZW50U2hhZGVyUkdCQVRleENsYW1w
QWxwaGFBQT4gUHJvZ3JhbUFBOwotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hh
ZGVyVGlsZSwgRnJhZ21lbnRTaGFkZXJSR0JBVGV4Q2xhbXBTd2l6emxlQWxwaGFBQT4gUHJvZ3Jh
bVN3aXp6bGVBQTsKLQogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IENDVGlsZWRMYXllckltcGwo
aW50IGlkKTsKICAgICAvLyBFeHBvc2VkIGZvciB0ZXN0aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xheWVySW1wbC5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NWaWRlb0xh
eWVySW1wbC5oCmluZGV4IDBhZDI2M2ZmZDM5N2NiNGE5ZTg4NWJkNDc4MjIyZDZmY2RhODQxYTUu
LjQ0NjA2YzEzYjJkNzEwMmI5MmI0ZTMxZTBmZDNhOTAyZjQ1NTE0NTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDVmlkZW9MYXllcklt
cGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9D
Q1ZpZGVvTGF5ZXJJbXBsLmgKQEAgLTI3LDggKzI3LDYgQEAKICNkZWZpbmUgQ0NWaWRlb0xheWVy
SW1wbF9oCiAKICNpbmNsdWRlICJNYW5hZ2VkVGV4dHVyZS5oIgotI2luY2x1ZGUgIlNoYWRlckNo
cm9taXVtLmgiCi0jaW5jbHVkZSAiVmlkZW9MYXllckNocm9taXVtLmgiCiAjaW5jbHVkZSAiY2Mv
Q0NMYXllckltcGwuaCIKICNpbmNsdWRlIDxwdWJsaWMvV2ViVmlkZW9GcmFtZVByb3ZpZGVyLmg+
CiAKQEAgLTQxLDggKzM5LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ0NMYXllclRy
ZWVIb3N0SW1wbDsKIGNsYXNzIENDVmlkZW9MYXllckltcGw7CiAKLXRlbXBsYXRlPGNsYXNzIFZl
cnRleFNoYWRlciwgY2xhc3MgRnJhZ21lbnRTaGFkZXI+IGNsYXNzIFByb2dyYW1CaW5kaW5nOwot
CiBjbGFzcyBDQ1ZpZGVvTGF5ZXJJbXBsIDogcHVibGljIENDTGF5ZXJJbXBsCiAgICAgICAgICAg
ICAgICAgICAgICAgICwgcHVibGljIFdlYktpdDo6V2ViVmlkZW9GcmFtZVByb3ZpZGVyOjpDbGll
bnQgewogcHVibGljOgpAQCAtNTYsMTEgKzUyLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9p
ZCBhcHBlbmRRdWFkcyhDQ1F1YWRDdWxsZXImLCBjb25zdCBDQ1NoYXJlZFF1YWRTdGF0ZSosIGJv
b2wmIGhhZE1pc3NpbmdUaWxlcykgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGRpZERyYXco
KSBPVkVSUklERTsKIAotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9z
VGV4VHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlclJHQkFUZXhGbGlwQWxwaGE+IFJHQkFQcm9ncmFt
OwotICAgIHR5cGVkZWYgUHJvZ3JhbUJpbmRpbmc8VmVydGV4U2hhZGVyUG9zVGV4WVVWU3RyZXRj
aCwgRnJhZ21lbnRTaGFkZXJZVVZWaWRlbz4gWVVWUHJvZ3JhbTsKLSAgICB0eXBlZGVmIFByb2dy
YW1CaW5kaW5nPFZlcnRleFNoYWRlclBvc1RleFRyYW5zZm9ybSwgRnJhZ21lbnRTaGFkZXJSR0JB
VGV4RmxpcEFscGhhPiBOYXRpdmVUZXh0dXJlUHJvZ3JhbTsKLSAgICB0eXBlZGVmIFByb2dyYW1C
aW5kaW5nPFZlcnRleFNoYWRlclZpZGVvVHJhbnNmb3JtLCBGcmFnbWVudFNoYWRlck9FU0ltYWdl
RXh0ZXJuYWw+IFN0cmVhbVRleHR1cmVQcm9ncmFtOwotCiAgICAgdmlydHVhbCB2b2lkIGR1bXBM
YXllclByb3BlcnRpZXMoVGV4dFN0cmVhbSYsIGludCBpbmRlbnQpIGNvbnN0IE9WRVJSSURFOwog
CiAgICAgTXV0ZXgmIHByb3ZpZGVyTXV0ZXgoKSB7IHJldHVybiBtX3Byb3ZpZGVyTXV0ZXg7IH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvQ0NMYXllclRyZWVIb3N0
SW1wbFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhv
c3RJbXBsVGVzdC5jcHAKaW5kZXggMzRlYWMwZjhiMDlhOWVhNTE5ZGU0YTU5ZmU3MTg4MGM4ODRk
NzNhNS4uMTAxOGUxNWEwNThlMTg4MmIyYjU5MTkyNDU0ZGUzNTI3NGU5MDk4NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBsVGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9DQ0xheWVyVHJlZUhvc3RJbXBs
VGVzdC5jcHAKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2luY2x1
ZGUgImNjL0NDTGF5ZXJUcmVlSG9zdEltcGwuaCIKLSNpbmNsdWRlICJjYy9DQ1F1YWRDdWxsZXIu
aCIKIAogI2luY2x1ZGUgIkNDQW5pbWF0aW9uVGVzdENvbW1vbi5oIgogI2luY2x1ZGUgIkNDTGF5
ZXJUZXN0Q29tbW9uLmgiCkBAIC0zMywxMCArMzIsMTcgQEAKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuaCIKICNpbmNsdWRlICJMYXllclJlbmRlcmVyQ2hyb21pdW0uaCIKICNp
bmNsdWRlICJjYy9DQ0xheWVySW1wbC5oIgorI2luY2x1ZGUgImNjL0NDTGF5ZXJUaWxpbmdEYXRh
LmgiCisjaW5jbHVkZSAiY2MvQ0NRdWFkQ3VsbGVyLmgiCiAjaW5jbHVkZSAiY2MvQ0NTY3JvbGxi
YXJMYXllckltcGwuaCIKICNpbmNsdWRlICJjYy9DQ1NpbmdsZVRocmVhZFByb3h5LmgiCisjaW5j
bHVkZSAiY2MvQ0NUZXh0dXJlTGF5ZXJJbXBsLmgiCiAjaW5jbHVkZSAiY2MvQ0NUaWxlRHJhd1F1
YWQuaCIKKyNpbmNsdWRlICJjYy9DQ1RpbGVkTGF5ZXJJbXBsLmgiCisjaW5jbHVkZSAiY2MvQ0NW
aWRlb0xheWVySW1wbC5oIgogI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+CisjaW5jbHVkZSA8cHVi
bGljL1dlYlZpZGVvRnJhbWUuaD4KKyNpbmNsdWRlIDxwdWJsaWMvV2ViVmlkZW9GcmFtZVByb3Zp
ZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBDQ0xheWVyVGVzdENvbW1vbjsKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwo=
</data>
<flag name="review"
          id="144673"
          type_id="1"
          status="+"
          setter="enne"
    />
          </attachment>
      

    </bug>

</bugzilla>