<?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>98989</bug_id>
          
          <creation_ts>2012-10-10 21:14:02 -0700</creation_ts>
          <short_desc>[CSS Shaders] Add CustomFilterRenderer to reuse this class by Accelerated Compositing.</short_desc>
          <delta_ts>2012-10-31 02:48:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>98396</dependson>
          <blocked>74651</blocked>
    
    <blocked>98990</blocked>
    
    <blocked>100107</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Dongseong Hwang">dongseong.hwang</reporter>
          <assigned_to name="Dongseong Hwang">dongseong.hwang</assigned_to>
          <cc>achicu</cc>
    
    <cc>dino</cc>
    
    <cc>eric</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mvujovic</cc>
    
    <cc>noam</cc>
    
    <cc>rakuco</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>739583</commentid>
    <comment_count>0</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-10 21:14:02 -0700</bug_when>
    <thetext>Extract CustomFilterRenderer class from the rendering part of FECustomFilter. FECustomFilter now plays a role in extending FilterEffect and delegates rendering css shaders to CustomFilterRenderer.

CustomFilterRenderer does not know Filter and FilterEffect. We can create a CustomFilterRenderer instance with only CustomFilterGlobalContext and CustomFilterOperation. It means that Accelerated Compositing can create the CustomFilterRenderer instance if Accelerated Compositing has CustomFilterGlobalContext and CustomFilterOperation, and it is possible if we refactor CustomFilterGlobalContext little.

This patch prepares to enable CSS Shaders on Accelerated Compositing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>739586</commentid>
    <comment_count>1</comment_count>
      <attachid>168138</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-10 21:20:27 -0700</bug_when>
    <thetext>Created attachment 168138
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740302</commentid>
    <comment_count>2</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-11 15:25:26 -0700</bug_when>
    <thetext>Alex + Max may have comments here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>740325</commentid>
    <comment_count>3</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-11 15:39:33 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Alex + Max may have comments here.

Thanks. I&apos;m looking forward!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743607</commentid>
    <comment_count>4</comment_count>
      <attachid>168138</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-10-16 15:01:46 -0700</bug_when>
    <thetext>Comment on attachment 168138
Patch

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

Looks good! Thanks for the patch.

&gt; Source/WebCore/ChangeLog:16
&gt; +        CustomFilterGlobalContext and CustomFilterOperation, and it is possible if we

I would remove the dependency on the CustomFilterOperation. Most probably the platform code has no access to it. Anyway, FECustomFilter had no dependency on that, so please remove it.

&gt; Source/WebCore/ChangeLog:21
&gt; +        No new tests. Covered by css1/filters/custom

nit: typo css1 -&gt; css3

&gt; Source/WebCore/platform/graphics/filters/CustomFilterRenderer.cpp:55
&gt; +PassRefPtr&lt;CustomFilterRenderer&gt; CustomFilterRenderer::create(CustomFilterGlobalContext* customFilterGlobalContext, CustomFilterOperation* operation)

This layer should not use the CustomFilterOperation directly. I would rather keep the same constructor as the FECustomFilter had before.

&gt; Source/WebCore/platform/graphics/filters/CustomFilterRenderer.cpp:148
&gt; +bool CustomFilterRenderer::render(Uint8ClampedArray* source, Uint8ClampedArray* destination, const IntSize&amp; size)

I think this one could have a better name to explain that it would read back the pixels. I suppose at some point you will add one to execute only on textures, so that the Accelerated Pipeline doesn&apos;t read back.

&gt; Source/WebCore/platform/graphics/filters/CustomFilterRenderer.cpp:474
&gt; +static void orthogonalProjectionMatrix(TransformationMatrix&amp; matrix, float left, float right, float bottom, float top)
&gt; +{
&gt; +    ASSERT(matrix.isIdentity());
&gt; +

I think static methods would better be placed at the beginning of the file.

&gt; Source/WebCore/platform/graphics/filters/CustomFilterRenderer.h:67
&gt; +    enum CustomFilterDrawType {
&gt; +        NEEDS_INPUT_TEXTURE,
&gt; +        NO_INPUT_TEXTURE

I know you just copy-pasted this one, but it seems like NO_INPUT_TEXTURE is never used. Can you please remove CustomFilterDrawType type? I think it was intended to help implementing a renderer that has the input already as a texture instead of just some bytes in the memory.

For the accelerated compositor you will need a different render method that will take a source texture ID and a destination texture ID, so maybe we could add it back in a different form at that time.

&gt; Source/WebCore/platform/graphics/filters/FECustomFilter.cpp:44
&gt; +FECustomFilter::FECustomFilter(Filter* filter, PassRefPtr&lt;CustomFilterRenderer&gt; renderer)

I think FECustomFilter should create its own CustomFilterRenderer and not be passed one. CustomFilterRenderer would then be just an implementation detail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743837</commentid>
    <comment_count>5</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-16 21:45:25 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 168138 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=168138&amp;action=review

Thank you for your review!

&gt; &gt; Source/WebCore/ChangeLog:16
&gt; &gt; +        CustomFilterGlobalContext and CustomFilterOperation, and it is possible if we
&gt; 
&gt; I would remove the dependency on the CustomFilterOperation. Most probably the platform code has no access to it. Anyway, FECustomFilter had no dependency on that, so please remove it.

Ok. I will make FECustomFilter have no dependency on CustomFilterOperation. I think it is better for FECustomFilter to not know CustomFilterOperation.
IMHO, each GraphicsLayer uses FilterOperation directly. Moreover, TextureMapperLayer and TextureMaperGL heavily use FilterOperation, too.


&gt; &gt; Source/WebCore/platform/graphics/filters/CustomFilterRenderer.cpp:148
&gt; &gt; +bool CustomFilterRenderer::render(Uint8ClampedArray* source, Uint8ClampedArray* destination, const IntSize&amp; size)
&gt; 
&gt; I think this one could have a better name to explain that it would read back the pixels. I suppose at some point you will add one to execute only on textures, so that the Accelerated Pipeline doesn&apos;t read back.

You&apos;re right. The name is poor. I&apos;ll more refactor CustomFilterRenderer for the Accelerated Pipeline.


&gt; &gt; Source/WebCore/platform/graphics/filters/CustomFilterRenderer.h:67
&gt; &gt; +    enum CustomFilterDrawType {
&gt; &gt; +        NEEDS_INPUT_TEXTURE,
&gt; &gt; +        NO_INPUT_TEXTURE
&gt; 
&gt; I know you just copy-pasted this one, but it seems like NO_INPUT_TEXTURE is never used. Can you please remove CustomFilterDrawType type? I think it was intended to help implementing a renderer that has the input already as a texture instead of just some bytes in the memory.

Yes, I can and I want :)
I want to file and post another bug removing CustomFilterDrawType which this bug depends on.

I have a question.
There is the CustomFilterProgramType enumeration in CustomFilterProgramInfo.h. Is it also useless?

enum CustomFilterProgramType {
    PROGRAM_TYPE_NO_ELEMENT_TEXTURE,
    PROGRAM_TYPE_BLENDS_ELEMENT_TEXTURE
};

CustomFilterProgramType is set only in StyleResolver.

PassRefPtr&lt;CustomFilterOperation&gt; StyleResolver::createCustomFilterOperation(WebKitCSSFilterValue* filterValue)
{
    ...
    CustomFilterProgramType programType = PROGRAM_TYPE_NO_ELEMENT_TEXTURE;
    ...
        if (fragmentShaderOrMixFunction-&gt;isWebKitCSSMixFunctionValue()) {
            programType = PROGRAM_TYPE_BLENDS_ELEMENT_TEXTURE;
        ...
}

I don&apos;t understand why only mix(&lt;uri&gt; ..) needs the DOM element texture. I think just &lt;uri&gt; fragmentShader also needs the DOM element texture.
http://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#fragmentShader-attribute

Could I remove CustomFilterProgramType also?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744731</commentid>
    <comment_count>6</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-17 15:55:21 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; I know you just copy-pasted this one, but it seems like NO_INPUT_TEXTURE is never used. Can you please remove CustomFilterDrawType type? I think it was intended to help implementing a renderer that has the input already as a texture instead of just some bytes in the memory.
&gt; I don&apos;t understand why only mix(&lt;uri&gt; ..) needs the DOM element texture. I think just &lt;uri&gt; fragmentShader also needs the DOM element texture.
&gt; http://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#fragmentShader-attribute
&gt; 
&gt; Could I remove CustomFilterProgramType also?

I understand my old question is wrong after reading spec: &quot;38.2.1. Fragment Shaders Differences with GLSL.&quot; http://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html#fragment-shaders-differences-with-glsl

I understand &lt;uri&gt; fragmentShader can not use the DOM element texture.  &lt;uri&gt; fragmentShader can just render a simple shader like &quot;gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);&quot;. Am I right?

As you mentioned, we just need to remove CustomFilterDrawType. I&apos;ll do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745123</commentid>
    <comment_count>7</comment_count>
      <attachid>169381</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-18 03:19:35 -0700</bug_when>
    <thetext>Created attachment 169381
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>745132</commentid>
    <comment_count>8</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-18 03:30:09 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 168138 [details])
&gt; I would remove the dependency on the CustomFilterOperation. Most probably the platform code has no access to it. Anyway, FECustomFilter had no dependency on that, so please remove it.

Done.

&gt; nit: typo css1 -&gt; css3

Done.

&gt; This layer should not use the CustomFilterOperation directly. I would rather keep the same constructor as the FECustomFilter had before.

Done.

&gt; &gt; Source/WebCore/platform/graphics/filters/CustomFilterRenderer.cpp:148
&gt; &gt; +bool CustomFilterRenderer::render(Uint8ClampedArray* source, Uint8ClampedArray* destination, const IntSize&amp; size)
&gt; 
&gt; I think this one could have a better name to explain that it would read back the pixels. I suppose at some point you will add one to execute only on textures, so that the Accelerated Pipeline doesn&apos;t read back.

The previous patch had made FECustomFilter delegate uploading texture, rendering, managing fbo and reading back pixel to CustomFilterRenderer. However, this patch only delegates rendering css shaders to CustomFilterRenderer because Accelerated Compositing needs CustomFilterRenderer only to render css shaders.
FECustomFilter has jobs:  uploading texture, managing fbo and reading back pixel as it has done. CustomFilterRenderer::paint will be used by both FECustomFilter and Accelerated Compositing.

&gt; I know you just copy-pasted this one, but it seems like NO_INPUT_TEXTURE is never used. Can you please remove CustomFilterDrawType type? I think it was intended to help implementing a renderer that has the input already as a texture instead of just some bytes in the memory.
&gt; 
&gt; For the accelerated compositor you will need a different render method that will take a source texture ID and a destination texture ID, so maybe we could add it back in a different form at that time.

Done.

&gt; I think FECustomFilter should create its own CustomFilterRenderer and not be passed one. CustomFilterRenderer would then be just an implementation detail.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746949</commentid>
    <comment_count>9</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-20 01:26:29 -0700</bug_when>
    <thetext>I enabled CSS Shaders on Texture Mapper in Bug 98990. It is the first enabling CSS Shaders on Accelerated Compositing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747691</commentid>
    <comment_count>10</comment_count>
      <attachid>169381</attachid>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-10-22 10:57:33 -0700</bug_when>
    <thetext>Comment on attachment 169381
Patch

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

Thanks! Looks good, I like the new approach where the CustomFilterRenderer is not messing around with textures anymore.

I have a few minor comments. Going this way, it looks like CustomFilterRenderer could be really decoupled from the Global Context and that would simplify a bunch of the other checks.

&gt; Source/WebCore/platform/graphics/filters/CustomFilterRenderer.cpp:76
&gt; +PassRefPtr&lt;CustomFilterRenderer&gt; CustomFilterRenderer::create(CustomFilterGlobalContext* customFilterGlobalContext, const CustomFilterProgramInfo&amp; programInfo, const CustomFilterParameterList&amp; parameters,
&gt; +    unsigned meshRows, unsigned meshColumns, CustomFilterOperation::MeshBoxType meshBoxType, CustomFilterOperation::MeshType meshType)
&gt; +{

I would remove the need to pass the customFIlterGlobalContext at this point. It looks like you only need the context and the validated program. Let&apos;s make this class as simple as possible, so that it can be embedded anywhere.

&gt; Source/WebCore/platform/graphics/filters/CustomFilterRenderer.cpp:116
&gt; +    m_contextSize = size;

Can you add a fixme and a new bug to remove m_contextSize from the CustomFilterRenderer? I think we would need something like CustomFilterRendererState that will contain the size and maybe other parameters in the future. We should pass that to bindProgramBuffers instead of storing it.

&gt; Source/WebCore/platform/graphics/filters/CustomFilterRenderer.cpp:145
&gt; +    // FIXME: Sharing the mesh would just save the time needed to upload it to the GPU, so I assume we could
&gt; +    // benchmark that for performance.
&gt; +    // https://bugs.webkit.org/show_bug.cgi?id=88429
&gt; +    m_mesh = CustomFilterMesh::create(m_context.get(), m_meshColumns, m_meshRows, FloatRect(0, 0, 1, 1), m_meshType);

Move this to a separate method called initializeMeshIfNeeded(), so that it is not guarded by the first return. It should not be an issue, but looks weird to have it in a method called initializeCompiledProgram.

Also, make the call after checking that the compiled program is initialized in prepareForDrawing.

&gt; Source/WebCore/platform/graphics/filters/FECustomFilter.cpp:68
&gt; +    RefPtr&lt;FECustomFilter&gt; feCustomFilter = adoptRef(new FECustomFilter(filter, customFilterGlobalContext, programInfo, parameters, meshRows, meshColumns, meshBoxType, meshType));

It looks like you could remove the dependency on customFilterGlobalContext and just pass in the validated program + the GraphicsContext3D directly. That will simplify a bunch of the checks we do here.

&gt; Source/WebCore/platform/graphics/filters/FECustomFilter.cpp:72
&gt; +    ASSERT(feCustomFilter-&gt;m_context.get());

Right now the context is never null, but it might be in the future if shaders are disabled after a GPU reset.

&gt; Source/WebCore/platform/graphics/filters/FECustomFilter.cpp:-122
&gt; -    if (!m_context)

At this point there is no guarantee that the m_context is not 0. I think you should put this back in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748481</commentid>
    <comment_count>11</comment_count>
      <attachid>170116</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-23 04:14:51 -0700</bug_when>
    <thetext>Created attachment 170116
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748485</commentid>
    <comment_count>12</comment_count>
      <attachid>169381</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-23 04:22:25 -0700</bug_when>
    <thetext>Comment on attachment 169381
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/filters/CustomFilterRenderer.cpp:76
&gt;&gt; +{
&gt; 
&gt; I would remove the need to pass the customFIlterGlobalContext at this point. It looks like you only need the context and the validated program. Let&apos;s make this class as simple as possible, so that it can be embedded anywhere.

Thanks for your careful review!

Done.

&gt;&gt; Source/WebCore/platform/graphics/filters/CustomFilterRenderer.cpp:116
&gt;&gt; +    m_contextSize = size;
&gt; 
&gt; Can you add a fixme and a new bug to remove m_contextSize from the CustomFilterRenderer? I think we would need something like CustomFilterRendererState that will contain the size and maybe other parameters in the future. We should pass that to bindProgramBuffers instead of storing it.

Done.
I filed Bug 100107.

&gt;&gt; Source/WebCore/platform/graphics/filters/CustomFilterRenderer.cpp:145
&gt;&gt; +    m_mesh = CustomFilterMesh::create(m_context.get(), m_meshColumns, m_meshRows, FloatRect(0, 0, 1, 1), m_meshType);
&gt; 
&gt; Move this to a separate method called initializeMeshIfNeeded(), so that it is not guarded by the first return. It should not be an issue, but looks weird to have it in a method called initializeCompiledProgram.
&gt; 
&gt; Also, make the call after checking that the compiled program is initialized in prepareForDrawing.

Done.

&gt;&gt; Source/WebCore/platform/graphics/filters/FECustomFilter.cpp:68
&gt;&gt; +    RefPtr&lt;FECustomFilter&gt; feCustomFilter = adoptRef(new FECustomFilter(filter, customFilterGlobalContext, programInfo, parameters, meshRows, meshColumns, meshBoxType, meshType));
&gt; 
&gt; It looks like you could remove the dependency on customFilterGlobalContext and just pass in the validated program + the GraphicsContext3D directly. That will simplify a bunch of the checks we do here.

Done. You are right. The bunch of the checks are only in createCustomFilterEffect now.

&gt;&gt; Source/WebCore/platform/graphics/filters/FECustomFilter.cpp:72
&gt;&gt; +    ASSERT(feCustomFilter-&gt;m_context.get());
&gt; 
&gt; Right now the context is never null, but it might be in the future if shaders are disabled after a GPU reset.

Done.

&gt;&gt; Source/WebCore/platform/graphics/filters/FECustomFilter.cpp:-122
&gt;&gt; -    if (!m_context)
&gt; 
&gt; At this point there is no guarantee that the m_context is not 0. I think you should put this back in.

I put ASSERT(m_context) because we have guarantee that the m_context is not 0. We set m_context in the constructor of FECustomFilter. createCustomFilterEffect in FilterEffectRenderer.cpp dose not create FECustomFilter if the m_context is 0.
Moreover, many methods of FECustomFilter already use the m_context without the checks. IMHO if we put this back in, other folks will be confused when reading here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748493</commentid>
    <comment_count>13</comment_count>
      <attachid>170116</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-10-23 04:39:09 -0700</bug_when>
    <thetext>Comment on attachment 170116
Patch

Attachment 170116 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/14486902</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748985</commentid>
    <comment_count>14</comment_count>
      <attachid>170234</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-23 14:28:31 -0700</bug_when>
    <thetext>Created attachment 170234
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>748998</commentid>
    <comment_count>15</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-23 14:36:55 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Created an attachment (id=170234) [details]
&gt; Patch

I fixed build fail on mac due to
CustomFilterRenderer.cpp:79:173: error: unused parameter &apos;programInfo&apos; [-Werror,-Wunused-parameter]</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749006</commentid>
    <comment_count>16</comment_count>
      <attachid>170234</attachid>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-10-23 14:45:16 -0700</bug_when>
    <thetext>Comment on attachment 170234
Patch

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

&gt; Source/WebCore/platform/graphics/filters/CustomFilterRenderer.cpp:79
&gt; +CustomFilterRenderer::CustomFilterRenderer(PassRefPtr&lt;GraphicsContext3D&gt; context, PassRefPtr&lt;CustomFilterValidatedProgram&gt; validatedProgram, const CustomFilterProgramInfo&amp;, const CustomFilterParameterList&amp; parameters,

Do we need to pass in CustomFilterProgramInfo separately? Can ask for validatedProgram-&gt;programInfo() instead?

&gt; Source/WebCore/platform/graphics/filters/CustomFilterRenderer.cpp:97
&gt; +    return m_validatedProgram-&gt;programInfo().programType() == PROGRAM_TYPE_BLENDS_ELEMENT_TEXTURE;

Like this.

&gt; Source/WebCore/platform/graphics/filters/FECustomFilter.cpp:47
&gt; +FECustomFilter::FECustomFilter(Filter* filter, PassRefPtr&lt;GraphicsContext3D&gt; context, PassRefPtr&lt;CustomFilterValidatedProgram&gt; validatedProgram, const CustomFilterProgramInfo&amp; programInfo, const CustomFilterParameterList&amp; parameters,

Ditto regarding CustomFilterProgramInfo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749019</commentid>
    <comment_count>17</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-23 14:50:42 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (From update of attachment 170234 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=170234&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/filters/CustomFilterRenderer.cpp:79
&gt; &gt; +CustomFilterRenderer::CustomFilterRenderer(PassRefPtr&lt;GraphicsContext3D&gt; context, PassRefPtr&lt;CustomFilterValidatedProgram&gt; validatedProgram, const CustomFilterProgramInfo&amp;, const CustomFilterParameterList&amp; parameters,
&gt; 
&gt; Do we need to pass in CustomFilterProgramInfo separately? Can ask for validatedProgram-&gt;programInfo() instead?

Oops, I was not careful. We don&apos;t need CustomFilterProgramInfo in CustomFilterRenderer. Thank you. I&apos;ll update.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749057</commentid>
    <comment_count>18</comment_count>
      <attachid>170249</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-23 15:28:13 -0700</bug_when>
    <thetext>Created attachment 170249
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749061</commentid>
    <comment_count>19</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-23 15:30:26 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #16)
&gt; &gt; (From update of attachment 170234 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=170234&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/filters/CustomFilterRenderer.cpp:79
&gt; &gt; &gt; +CustomFilterRenderer::CustomFilterRenderer(PassRefPtr&lt;GraphicsContext3D&gt; context, PassRefPtr&lt;CustomFilterValidatedProgram&gt; validatedProgram, const CustomFilterProgramInfo&amp;, const CustomFilterParameterList&amp; parameters,
&gt; &gt; 
&gt; &gt; Do we need to pass in CustomFilterProgramInfo separately? Can ask for validatedProgram-&gt;programInfo() instead?
&gt; 
&gt; Oops, I was not careful. We don&apos;t need CustomFilterProgramInfo in CustomFilterRenderer. Thank you. I&apos;ll update.

I removed CustomFilterProgramInfo in CustomFilterRenderer. Thank Max.
In addition, I removed unused two headers in CustomFilterRenderer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749091</commentid>
    <comment_count>20</comment_count>
    <who name="Max Vujovic">mvujovic</who>
    <bug_when>2012-10-23 16:03:21 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; I removed CustomFilterProgramInfo in CustomFilterRenderer. Thank Max.
&gt; In addition, I removed unused two headers in CustomFilterRenderer.

Nice. Thanks Huang :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749170</commentid>
    <comment_count>21</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-23 17:56:04 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #19)
&gt; &gt; I removed CustomFilterProgramInfo in CustomFilterRenderer. Thank Max.
&gt; &gt; In addition, I removed unused two headers in CustomFilterRenderer.
&gt; 
&gt; Nice. Thanks Huang :)

Thank you, too! :) I&apos;ll ask dino to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754194</commentid>
    <comment_count>22</comment_count>
      <attachid>170249</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-30 04:06:16 -0700</bug_when>
    <thetext>Comment on attachment 170249
Patch

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

This looks great. Just two very minor nits. Sorry this means another submission - you&apos;ll hopefully be getting commit access very soon :)

&gt; Source/WebCore/ChangeLog:10
&gt; +        rendering css shaders to CustomFilterRenderer.

Super Nit &quot;css&quot; -&gt; &quot;CSS&quot;

&gt; Source/WebCore/platform/graphics/filters/CustomFilterRenderer.cpp:196
&gt; +        // The viewport is a box with the size of 1 unit, so we are scalling up here to make sure that translations happen using real pixel

Typo &quot;scaling&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754228</commentid>
    <comment_count>23</comment_count>
      <attachid>171422</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-30 05:07:23 -0700</bug_when>
    <thetext>Created attachment 171422
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754233</commentid>
    <comment_count>24</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-30 05:10:36 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 170249 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=170249&amp;action=review
&gt; 
&gt; This looks great. Just two very minor nits. Sorry this means another submission - you&apos;ll hopefully be getting commit access very soon :)

Thanks for your review! I hope so :)

&gt; Super Nit &quot;css&quot; -&gt; &quot;CSS&quot;
&gt; Typo &quot;scaling&quot;

Done.

I rename CustomFilterRenderer::draw() from CustomFilterRenderer::paint() because Chiculita seems to prefer draw to paint. right? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754261</commentid>
    <comment_count>25</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-10-30 05:43:15 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; (In reply to comment #22)
&gt; &gt; (From update of attachment 170249 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=170249&amp;action=review

&gt; I rename CustomFilterRenderer::draw() from CustomFilterRenderer::paint() because Chiculita seems to prefer draw to paint. right? :)

Hm, I don&apos;t have a preference, but looking at the code we&apos;ve used &quot;draw&quot; a lot in this class. Maybe we could change that to &quot;paint&quot; at a later time in order to be more consistent with the rest of WebKit. But that&apos;s a different patch.

I can set you the commit-queue flag if needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754268</commentid>
    <comment_count>26</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-30 05:59:31 -0700</bug_when>
    <thetext>(In reply to comment #25)
&gt; (In reply to comment #24)
&gt; &gt; (In reply to comment #22)
&gt; Hm, I don&apos;t have a preference, but looking at the code we&apos;ve used &quot;draw&quot; a lot in this class. Maybe we could change that to &quot;paint&quot; at a later time in order to be more consistent with the rest of WebKit. But that&apos;s a different patch.

Hi, alex. I just recalled CCCustomFilterRenderer::draw().

&gt; I can set you the commit-queue flag if needed.

If you do, I&apos;ll be happy!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754271</commentid>
    <comment_count>27</comment_count>
      <attachid>171422</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-30 06:02:51 -0700</bug_when>
    <thetext>Comment on attachment 171422
Patch

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

&gt; Source/WebCore/ChangeLog:36
&gt; +        (WebCore::CustomFilterRenderer::paint):

This is wrong now :( Alex, could you land this manually (sorry, I can&apos;t do it right now). No need to go through another review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754280</commentid>
    <comment_count>28</comment_count>
      <attachid>171422</attachid>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-30 06:10:44 -0700</bug_when>
    <thetext>Comment on attachment 171422
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:36
&gt;&gt; +        (WebCore::CustomFilterRenderer::paint):
&gt; 
&gt; This is wrong now :( Alex, could you land this manually (sorry, I can&apos;t do it right now). No need to go through another review.

Oops. Sorry. Thanks Alex in advance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754434</commentid>
    <comment_count>29</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-10-30 09:30:42 -0700</bug_when>
    <thetext>(In reply to comment #28)
&gt; (From update of attachment 171422 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=171422&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/ChangeLog:36
&gt; &gt;&gt; +        (WebCore::CustomFilterRenderer::paint):
&gt; &gt; 
&gt; &gt; This is wrong now :( Alex, could you land this manually (sorry, I can&apos;t do it right now). No need to go through another review.
&gt; 
&gt; Oops. Sorry. Thanks Alex in advance.

I&apos;m rebasing and landing it manually. Thanks for the patch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754471</commentid>
    <comment_count>30</comment_count>
    <who name="Alexandru Chiculita">achicu</who>
    <bug_when>2012-10-30 10:09:09 -0700</bug_when>
    <thetext>Landed manually in http://trac.webkit.org/changeset/132920.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>754921</commentid>
    <comment_count>31</comment_count>
    <who name="Dongseong Hwang">dongseong.hwang</who>
    <bug_when>2012-10-30 20:49:37 -0700</bug_when>
    <thetext>Thank alex, dino and max for review and commit. I&apos;m happy because of contributing to an awesome feature, which is CSS Shaders. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>755088</commentid>
    <comment_count>32</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2012-10-31 02:48:42 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; Thank alex, dino and max for review and commit. I&apos;m happy because of contributing to an awesome feature, which is CSS Shaders. :)

You&apos;re very welcome. Keep the patches coming :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>168138</attachid>
            <date>2012-10-10 21:20:27 -0700</date>
            <delta_ts>2012-10-18 03:19:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98989-20121011131921.patch</filename>
            <type>text/plain</type>
            <size>77156</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxMDA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzBlNTRhNDM2OTM5ZTkw
ZDViODkwNjBhZjE4NTRhNjIzM2I1MTZlMy4uZjAwYTYyYTRjYjIzN2M0MDhmNjY4MGQxODUwZmQx
Y2Q3Yzg1YTkwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDgzIEBACiAyMDEyLTEwLTEwICBIdWFu
ZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgogCisgICAgICAgIFtDU1MgU2hh
ZGVyc10gQWRkIEN1c3RvbUZpbHRlclJlbmRlcmVyIHRvIHJldXNlIHRoaXMgY2xhc3MgYnkgQWNj
ZWxlcmF0ZWQgQ29tcG9zaXRpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05ODk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEV4dHJhY3QgQ3VzdG9tRmlsdGVyUmVuZGVyZXIgY2xhc3MgZnJvbSB0aGUg
cmVuZGVyaW5nIHBhcnQgb2YgRkVDdXN0b21GaWx0ZXIuCisgICAgICAgIEZFQ3VzdG9tRmlsdGVy
IG5vdyBwbGF5cyBhIHJvbGUgaW4gZXh0ZW5kaW5nIEZpbHRlckVmZmVjdCBhbmQgZGVsZWdhdGVz
CisgICAgICAgIHJlbmRlcmluZyBjc3Mgc2hhZGVycyB0byBDdXN0b21GaWx0ZXJSZW5kZXJlci4K
KworICAgICAgICBDdXN0b21GaWx0ZXJSZW5kZXJlciBkb2VzIG5vdCBrbm93IEZpbHRlciBhbmQg
RmlsdGVyRWZmZWN0LiBXZSBjYW4gY3JlYXRlIGEKKyAgICAgICAgQ3VzdG9tRmlsdGVyUmVuZGVy
ZXIgaW5zdGFuY2Ugd2l0aCBvbmx5IEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQgYW5kCisgICAg
ICAgIEN1c3RvbUZpbHRlck9wZXJhdGlvbi4gSXQgbWVhbnMgdGhhdCBBY2NlbGVyYXRlZCBDb21w
b3NpdGluZyBjYW4gY3JlYXRlIHRoZQorICAgICAgICBDdXN0b21GaWx0ZXJSZW5kZXJlciBpbnN0
YW5jZSBpZiBBY2NlbGVyYXRlZCBDb21wb3NpdGluZyBoYXMKKyAgICAgICAgQ3VzdG9tRmlsdGVy
R2xvYmFsQ29udGV4dCBhbmQgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLCBhbmQgaXQgaXMgcG9zc2li
bGUgaWYgd2UKKyAgICAgICAgcmVmYWN0b3IgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCBsaXR0
bGUuCisKKyAgICAgICAgVGhpcyBwYXRjaCBwcmVwYXJlcyB0byBlbmFibGUgQ1NTIFNoYWRlcnMg
b24gQWNjZWxlcmF0ZWQgQ29tcG9zaXRpbmcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBDb3Zl
cmVkIGJ5IGNzczEvZmlsdGVycy9jdXN0b20KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0Ogor
ICAgICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAg
ICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3Bw
OiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZF
Q3VzdG9tRmlsdGVyLmNwcC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VzdG9tRmlsdGVyUmVuZGVyZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21G
aWx0ZXJSZW5kZXJlcjo6Q3VzdG9tRmlsdGVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VzdG9tRmlsdGVyUmVuZGVyZXI6On5DdXN0b21GaWx0ZXJSZW5kZXJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5kZXJlcjo6ZGVsZXRlUmVuZGVyQnVmZmVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5kZXJlcjo6ZGVsZXRlTXVsdGlzYW1wbGVSZW5k
ZXJCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVyOjpwcmVt
dWx0aXBsaWVkQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUmVuZGVyZXI6
OnByb2dyYW1OZWVkc0lucHV0VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0
ZXJSZW5kZXJlcjo6cmVuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclJlbmRl
cmVyOjpkcmF3RmlsdGVyTWVzaCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5k
ZXJlcjo6cHJlcGFyZUZvckRyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVy
UmVuZGVyZXI6OmluaXRpYWxpemVDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZp
bHRlclJlbmRlcmVyOjplbnN1cmVJbnB1dFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tRmlsdGVyUmVuZGVyZXI6OnVwbG9hZElucHV0VGV4dHVyZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDdXN0b21GaWx0ZXJSZW5kZXJlcjo6ZW5zdXJlRnJhbWVCdWZmZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VzdG9tRmlsdGVyUmVuZGVyZXI6OmNyZWF0ZU11bHRpc2FtcGxlQnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVyOjpyZXNvbHZlTXVsdGlzYW1wbGVC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUmVuZGVyZXI6OmNhblVzZU11
bHRpc2FtcGxlQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5kZXJl
cjo6cmVzaXplTXVsdGlzYW1wbGVCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZp
bHRlclJlbmRlcmVyOjpyZXNpemVDb250ZXh0SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VzdG9tRmlsdGVyUmVuZGVyZXI6OnJlc2l6ZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VzdG9tRmlsdGVyUmVuZGVyZXI6OmJpbmRWZXJ0ZXhBdHRyaWJ1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q3VzdG9tRmlsdGVyUmVuZGVyZXI6OnVuYmluZFZlcnRleEF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5kZXJlcjo6YmluZFByb2dyYW1BcnJheVBhcmFt
ZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUmVuZGVyZXI6OmJpbmRQcm9n
cmFtTnVtYmVyUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5k
ZXJlcjo6YmluZFByb2dyYW1UcmFuc2Zvcm1QYXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VzdG9tRmlsdGVyUmVuZGVyZXI6OmJpbmRQcm9ncmFtUGFyYW1ldGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpvcnRob2dvbmFsUHJvamVjdGlvbk1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21GaWx0ZXJSZW5kZXJlcjo6YmluZFByb2dyYW1BbmRCdWZmZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVyOjp1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGVzKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
dXN0b21GaWx0ZXIuaC4KKyAgICAgICAgICBDdXN0b21GaWx0ZXJSZW5kZXJlciByZW5kZXJzIGN1
c3RvbSBmaWx0ZXJzIGluIEdQVSB1c2luZyBhCisgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Qs
IHJlYWQgdGhlIHJlc3VsdCBiYWNrIGFuZCB1c2UgaXQgaW4gdGhlIHNvZnR3YXJlCisgICAgICAg
ICAgZmlsdGVycyBwaXBlbGluZS4KKyAgICAgICAgKEpTQyk6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKEN1c3RvbUZpbHRlclJlbmRlcmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZFQ3Vz
dG9tRmlsdGVyOjpGRUN1c3RvbUZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpGRUN1c3RvbUZp
bHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ3VzdG9tRmlsdGVyOjp+RkVDdXN0
b21GaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OmFwcGx5U2hhZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ3VzdG9tRmlsdGVyOjpjbGVhclNoYWRlclJlc3VsdCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChGRUN1c3RvbUZpbHRlcik6CisgICAgICAgICog
cmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNy
ZWF0ZUN1c3RvbUZpbHRlckVmZmVjdCk6CisKKzIwMTItMTAtMTAgIEh1YW5nIERvbmdzdW5nICA8
bHV4dGVsbGFAY29tcGFueTEwMC5uZXQ+CisKICAgICAgICAgW1dLMl0gQWRkIEN1c3RvbUZpbHRl
ck9wZXJhdGlvbiBzZXJpYWxpemF0aW9uIGluIEFyZ3VtZW50Q29kZXIuCiAgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05ODczMwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IDI1ZGMxZTVkYzY2NjYxYjFlZTY4MWNkN2I4ZmJmNmQxYTRiMzc5ZTUuLmIxMTUw
N2ZlOTk4YTU1OWRhYWM2ZTc3YWJlY2IzM2Y1NTNiZThkYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CkBAIC0xOTA0LDYgKzE5MDQsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcAogICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uY3BwCisgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5jcHAKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RUNvbG9yTWF0cml4LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggMDk5MTgw
NGRjMzYwNDRkMGExNjY4YTM5ODEwNTcyNjA3ZDkyOGU4ZS4uYWJhMjNkODZlYzZlNDViNWRhNTQy
ZGUxZDgzMzY5MWJkZmQ0ODBiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC00
MzA4LDYgKzQzMDgsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW1JbmZv
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21G
aWx0ZXJQcm9ncmFtSW5mby5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmNwcCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5oIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3Jh
bS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9t
RmlsdGVyQ29tcGlsZWRQcm9ncmFtLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyLmggXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkK
aW5kZXggMjg0Y2JlMDg1NWQzMmRmNTZlYTdhNzkwN2RjZjJiOWFlNzI0M2FmZC4uOTQwMTZhYmQz
YjQzMzcwMjVjNWNhMjViNDAyYTg1YjYwOTE4ODVlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0yMDc0LDYg
KzIwNzQsNyBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1
c3RvbUZpbHRlclBhcmFtZXRlci5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1
c3RvbUZpbHRlclByb2dyYW0uaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0
b21GaWx0ZXJQcm9ncmFtSW5mby5oIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1
c3RvbUZpbHRlclJlbmRlcmVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3Vz
dG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQmxlbmQuaCBcCkBAIC0zNDgyLDEzICszNDgzLDE0IEBAIGVuYWJsZT8o
WFNMVCkgewogCiBlbmFibGU/KEZJTFRFUlMpIHsKICAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW0uY3Bw
IFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJHbG9iYWxD
b250ZXh0LmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmls
dGVyTWVzaC5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZp
bHRlck1lc2hHZW5lcmF0b3IuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9DdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uY3BwIFwKLSAgICAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW0uY3BwIFwKLSAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJNZXNoLmNwcCBcCi0g
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyTWVzaEdlbmVyYXRv
ci5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJl
bmRlcmVyLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmls
dGVyVmFsaWRhdGVkUHJvZ3JhbS5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFQmxlbmQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA1ZGYwYTIzOGVkODFhODg2
YWQ3MmQyZGM2NDY1ZWE0Y2MzODM0NDQ0Li5iYTM5YzQxZmQ4MzgyZDcyMTE3ZmRmZDlkYzRjOTUz
YTc5YWNkNzU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00OTQ3LDYgKzQ5NDcsOCBAQAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dy
YW1JbmZvLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0
b21GaWx0ZXJQcm9ncmFtSW5mby5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5oJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyQ29t
cGlsZWRQcm9ncmFtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA3MWEyMmFiZDY0Mzk1NWU5YTY1MzQzNDA3
N2I1OWM1OGMwNjFjZDMzLi4wOWJmZTI3OGMzNmRjMmMzOTk4YzAyNDIyMDE3NTNjYTNiOWEyNjg2
IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAt
MzE5MTcsNiArMzE5MTcsMTQgQEAKIAkJCQkJCT4KIAkJCQkJPC9GaWxlPgogCQkJCQk8RmlsZQor
CQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEN1c3RvbUZp
bHRlclJlbmRlcmVyLmNwcCIKKwkJCQkJCT4KKwkJCQkJPC9GaWxlPgorCQkJCQk8RmlsZQorCQkJ
CQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEN1c3RvbUZpbHRl
clJlbmRlcmVyLmgiCisJCQkJCQk+CisJCQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUKIAkJCQkJCVJl
bGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xDdXN0b21GaWx0ZXJDb21w
aWxlZFByb2dyYW0uY3BwIgogCQkJCQkJPgogCQkJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjNkN2M3M2ViYThh
ZjZkYWI2ZmI3MWI0ZTE5MTE2ZmRkMTE4YjAzYi4uMTljYjI1ZjU1MDViMWFjY2EzZjA5YmMxNDc3
Y2IzZmU5ZDZmNjNlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagpAQCAtMTQ5MSw2ICsxNDkxLDggQEAKIAkJNTAzRDBDQUExNEI1QjA4
NzAwRjMyRjU3IC8qIEN1c3RvbUZpbHRlclByb2dyYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTAzRDBDQTcxNEI1QjA4NzAwRjMyRjU3IC8qIEN1
c3RvbUZpbHRlclByb2dyYW0uY3BwICovOyB9OwogCQk1MDNEMENBQjE0QjVCMDg3MDBGMzJGNTcg
LyogQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTAzRDBDQTgxNEI1QjA4NzAwRjMyRjU3IC8qIEN1c3RvbUZpbHRlclBy
b2dyYW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQk1MDNEMENB
QzE0QjVCMDg3MDBGMzJGNTcgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbUNsaWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTAzRDBDQTkxNEI1QjA4NzAw
RjMyRjU3IC8qIEN1c3RvbUZpbHRlclByb2dyYW1DbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MDNEMENBQTE0QjVCMDg3MDBGMzJGNTgg
LyogQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTAzRDBDQTcxNEI1QjA4NzAwRjMyRjU4IC8qIEN1c3RvbUZpbHRl
clJlbmRlcmVyLmNwcCAqLzsgfTsKKwkJNTAzRDBDQUIxNEI1QjA4NzAwRjMyRjU4IC8qIEN1c3Rv
bUZpbHRlclJlbmRlcmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA1MDNEMENBODE0QjVCMDg3MDBGMzJGNTggLyogQ3VzdG9tRmlsdGVyUmVuZGVyZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQk1MDNEMENBRTE0QjVC
MEJBMDBGMzJGNTcgLyogU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDNEMENBRDE0QjVCMEJBMDBGMzJGNTcg
LyogU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoKTsgfTsgfTsKIAkJNTA4Q0NBNEYxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dUaHJl
YWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwOEND
QTREMTNDRjEwNkIwMDMxNTFGMyAvKiBSZW5kZXJGbG93VGhyZWFkLmggKi87IH07CiAJCTUwOEND
QTUwMTNDRjEwNkIwMDMxNTFGMyAvKiBSZW5kZXJGbG93VGhyZWFkLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwOENDQTRFMTNDRjEwNkIwMDMxNTFG
MyAvKiBSZW5kZXJGbG93VGhyZWFkLmNwcCAqLzsgfTsKQEAgLTg2NzUsNiArODY3Nyw4IEBACiAJ
CTUwM0QwQ0E3MTRCNUIwODcwMEYzMkY1NyAvKiBDdXN0b21GaWx0ZXJQcm9ncmFtLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEN1c3RvbUZpbHRlclByb2dyYW0uY3Bw
OyBwYXRoID0gZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTAzRDBDQTgxNEI1QjA4NzAwRjMyRjU3IC8qIEN1c3RvbUZpbHRlclBy
b2dyYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ3VzdG9tRmlsdGVyUHJv
Z3JhbS5oOyBwYXRoID0gZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTUwM0QwQ0E5MTRCNUIwODcwMEYzMkY1NyAvKiBDdXN0b21GaWx0
ZXJQcm9ncmFtQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEN1c3Rv
bUZpbHRlclByb2dyYW1DbGllbnQuaDsgcGF0aCA9IGZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3Jh
bUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MDNEMENBNzE0QjVCMDg3
MDBGMzJGNTggLyogQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwOyBwYXRoID0gZmlsdGVy
cy9DdXN0b21GaWx0ZXJSZW5kZXJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTUwM0QwQ0E4MTRCNUIwODcwMEYzMkY1OCAvKiBDdXN0b21GaWx0ZXJSZW5kZXJlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDdXN0b21GaWx0ZXJSZW5kZXJlci5oOyBwYXRo
ID0gZmlsdGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1MDNEMENBRDE0QjVCMEJBMDBGMzJGNTcgLyogU3R5bGVDdXN0b21GaWx0ZXJQcm9n
cmFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0eWxlQ3VzdG9tRmlsdGVy
UHJvZ3JhbS5oOyBwYXRoID0gc3R5bGUvU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUwOENDQTREMTNDRjEwNkIwMDMxNTFGMyAvKiBSZW5k
ZXJGbG93VGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckZs
b3dUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTA4Q0NBNEUxM0NGMTA2
QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUmVuZGVyRmxvd1RocmVhZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0xODIwMCw2ICsxODIwNCw4IEBACiAJCQkJNTAzRDBDQTkxNEI1QjA4NzAwRjMy
RjU3IC8qIEN1c3RvbUZpbHRlclByb2dyYW1DbGllbnQuaCAqLywKIAkJCQk1MEQ4OENCMzE1QkRG
REFBMDAxODA5RjQgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uY3BwICovLAogCQkJCTUwRDg4
Q0I0MTVCREZEQUEwMDE4MDlGNCAvKiBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5oICovLAorCQkJ
CTUwM0QwQ0E3MTRCNUIwODcwMEYzMkY1OCAvKiBDdXN0b21GaWx0ZXJSZW5kZXJlci5jcHAgKi8s
CisJCQkJNTAzRDBDQTgxNEI1QjA4NzAwRjMyRjU4IC8qIEN1c3RvbUZpbHRlclJlbmRlcmVyLmgg
Ki8sCiAJCQkJNTA5RUMxMDgxNUU4NDhDQTAwRTgyNTgxIC8qIEN1c3RvbUZpbHRlclRyYW5zZm9y
bVBhcmFtZXRlci5oICovLAogCQkJCUEyOTUzMkNEMTVERDVFMTcwMDQ2OUVCQyAvKiBDdXN0b21G
aWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmNwcCAqLywKIAkJCQlBMjk1MzJDRTE1REQ1RTE3MDA0NjlF
QkMgLyogQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oICovLApAQCAtMjI2MTksNiArMjI2
MjUsNyBAQAogCQkJCTUwM0QwQ0FCMTRCNUIwODcwMEYzMkY1NyAvKiBDdXN0b21GaWx0ZXJQcm9n
cmFtLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MDNEMENBQzE0QjVCMDg3MDBGMzJGNTcgLyogQ3Vz
dG9tRmlsdGVyUHJvZ3JhbUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTBEODhDQjYxNUJE
RkRBQTAwMTgwOUY0IC8qIEN1c3RvbUZpbHRlclByb2dyYW1JbmZvLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1MDNEMENBQjE0QjVCMDg3MDBGMzJGNTggLyogQ3VzdG9tRmlsdGVyUmVuZGVyZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUEyOTUzMkQwMTVERDVFMTcwMDQ2OUVCQyAvKiBDdXN0b21GaWx0
ZXJWYWxpZGF0ZWRQcm9ncmFtLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOENCNDEzRTBFODYzM0ZE
MDAzMkM0RjAgLyogRGFzaEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODBFNkQwQjBBMTk4
OUNBMDA3RkI4QzUgLyogRGFzaGJvYXJkUmVnaW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTI2MjA2
LDYgKzI2MjEzLDcgQEAKIAkJCQk1MENDMEEzOTE0QzZGNUIxMDAxN0FCNTEgLyogQ3VzdG9tRmls
dGVyT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUwM0QwQ0FBMTRCNUIwODcwMEYz
MkY1NyAvKiBDdXN0b21GaWx0ZXJQcm9ncmFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUwRDg4
Q0I1MTVCREZEQUEwMDE4MDlGNCAvKiBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk1MDNEMENBQTE0QjVCMDg3MDBGMzJGNTggLyogQ3VzdG9tRmlsdGVyUmVu
ZGVyZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI5NTMyQ0YxNURENUUxNzAwNDY5RUJDIC8q
IEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdC
QzZBMjAxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTk3QkM2QTIzMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUF1dGhvcml6ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI0
MGNjNTc2ZTAzMTM5MjdmN2M0ZTVmNmZiYTdjMjc5MTUzYTc3MTUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJl
bmRlcmVyLmNwcApAQCAtMCwwICsxLDU2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBB
ZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMSBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAg
IGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwor
ICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAq
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
CisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoQ1NTX1NIQURFUlMpICYmIFVTRSgzRF9HUkFQSElDUykKKyNpbmNsdWRlICJDdXN0b21GaWx0
ZXJSZW5kZXJlci5oIgorCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXIuaCIK
KyNpbmNsdWRlICJDdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW0uaCIKKyNpbmNsdWRlICJDdXN0
b21GaWx0ZXJDb25zdGFudHMuaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0
LmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyTWVzaC5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRl
ck51bWJlclBhcmFtZXRlci5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRlclBhcmFtZXRlci5oIgor
I2luY2x1ZGUgIkN1c3RvbUZpbHRlclByb2dyYW0uaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJU
cmFuc2Zvcm1QYXJhbWV0ZXIuaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9n
cmFtLmgiCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorCisjaW5jbHVkZSA8
d3RmL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUGFzc1Jl
ZlB0cjxDdXN0b21GaWx0ZXJSZW5kZXJlcj4gQ3VzdG9tRmlsdGVyUmVuZGVyZXI6OmNyZWF0ZShD
dXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KiBjdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LCBDdXN0
b21GaWx0ZXJPcGVyYXRpb24qIG9wZXJhdGlvbikKK3sKKyAgICBpZiAoIW9wZXJhdGlvbi0+cHJv
Z3JhbSgpLT5pc0xvYWRlZCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBSZWZQdHI8Q3VzdG9t
RmlsdGVyUmVuZGVyZXI+IHJlbmRlcmVyID0gYWRvcHRSZWYobmV3IEN1c3RvbUZpbHRlclJlbmRl
cmVyKGN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQsIG9wZXJhdGlvbikpOworICAgIGlmICghcmVu
ZGVyZXItPm1fdmFsaWRhdGVkUHJvZ3JhbS0+aXNJbml0aWFsaXplZCgpKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gcmVuZGVyZXIucmVsZWFzZSgpOworfQorCitDdXN0b21GaWx0ZXJS
ZW5kZXJlcjo6Q3VzdG9tRmlsdGVyUmVuZGVyZXIoQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCog
Y3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCwgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uKiBvcGVyYXRp
b24pCisgICAgOiBtX2dsb2JhbENvbnRleHQoY3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCkKKyAg
ICAsIG1fY29tcGlsZWRQcm9ncmFtKDApIC8vIERvbid0IGNvbXBpbGUgdGhlIHByb2dyYW0gdW5s
ZXNzIHdlIG5lZWQgdG8gcGFpbnQuCisgICAgLCBtX2lucHV0VGV4dHVyZSgwKQorICAgICwgbV9m
cmFtZUJ1ZmZlcigwKQorICAgICwgbV9kZXB0aEJ1ZmZlcigwKQorICAgICwgbV9kZXN0VGV4dHVy
ZSgwKQorICAgICwgbV90cmllZE11bHRpc2FtcGxlQnVmZmVyKGZhbHNlKQorICAgICwgbV9tdWx0
aXNhbXBsZUZyYW1lQnVmZmVyKDApCisgICAgLCBtX211bHRpc2FtcGxlUmVuZGVyQnVmZmVyKDAp
CisgICAgLCBtX211bHRpc2FtcGxlRGVwdGhCdWZmZXIoMCkKKyAgICAsIG1fcGFyYW1ldGVycyhv
cGVyYXRpb24tPnBhcmFtZXRlcnMoKSkKKyAgICAsIG1fbWVzaFJvd3Mob3BlcmF0aW9uLT5tZXNo
Um93cygpKQorICAgICwgbV9tZXNoQ29sdW1ucyhvcGVyYXRpb24tPm1lc2hDb2x1bW5zKCkpCisg
ICAgLCBtX21lc2hUeXBlKG9wZXJhdGlvbi0+bWVzaFR5cGUoKSkKK3sKKyAgICBtX3ZhbGlkYXRl
ZFByb2dyYW0gPSBtX2dsb2JhbENvbnRleHQtPmdldFZhbGlkYXRlZFByb2dyYW0ob3BlcmF0aW9u
LT5wcm9ncmFtKCktPnByb2dyYW1JbmZvKCkpOworICAgIGlmICghbV92YWxpZGF0ZWRQcm9ncmFt
LT5pc0luaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybjsKK30KKworQ3VzdG9tRmlsdGVyUmVu
ZGVyZXI6On5DdXN0b21GaWx0ZXJSZW5kZXJlcigpCit7CisgICAgZGVsZXRlUmVuZGVyQnVmZmVy
cygpOworfQorCit2b2lkIEN1c3RvbUZpbHRlclJlbmRlcmVyOjpkZWxldGVSZW5kZXJCdWZmZXJz
KCkKK3sKKyAgICBpZiAoIW1fY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgaWYgKG1faW5wdXRUZXh0dXJlKSB7CisgICAg
ICAgIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX2lucHV0VGV4dHVyZSk7CisgICAgICAgIG1f
aW5wdXRUZXh0dXJlID0gMDsKKyAgICB9CisgICAgaWYgKG1fZnJhbWVCdWZmZXIpIHsKKyAgICAg
ICAgLy8gTWFrZSBzdXJlIHRvIHVuYmluZCBhbnkgZnJhbWVidWZmZXIgZnJvbSB0aGUgY29udGV4
dCBmaXJzdCwgb3RoZXJ3aXNlCisgICAgICAgIC8vIHNvbWUgcGxhdGZvcm1zIG1pZ2h0IHJlZnVz
ZSB0byBiaW5kIHRoZSBzYW1lIGJ1ZmZlciBpZCBhZ2Fpbi4KKyAgICAgICAgbV9jb250ZXh0LT5i
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCAwKTsKKyAgICAg
ICAgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihtX2ZyYW1lQnVmZmVyKTsKKyAgICAgICAg
bV9mcmFtZUJ1ZmZlciA9IDA7CisgICAgfQorICAgIGlmIChtX2RlcHRoQnVmZmVyKSB7CisgICAg
ICAgIG1fY29udGV4dC0+ZGVsZXRlUmVuZGVyYnVmZmVyKG1fZGVwdGhCdWZmZXIpOworICAgICAg
ICBtX2RlcHRoQnVmZmVyID0gMDsKKyAgICB9CisgICAgaWYgKG1fZGVzdFRleHR1cmUpIHsKKyAg
ICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKG1fZGVzdFRleHR1cmUpOworICAgICAgICBt
X2Rlc3RUZXh0dXJlID0gMDsKKyAgICB9CisgICAgZGVsZXRlTXVsdGlzYW1wbGVSZW5kZXJCdWZm
ZXJzKCk7Cit9CisKK3ZvaWQgQ3VzdG9tRmlsdGVyUmVuZGVyZXI6OmRlbGV0ZU11bHRpc2FtcGxl
UmVuZGVyQnVmZmVycygpCit7CisgICAgaWYgKG1fbXVsdGlzYW1wbGVGcmFtZUJ1ZmZlcikgewor
ICAgICAgICAvLyBNYWtlIHN1cmUgdG8gdW5iaW5kIGFueSBmcmFtZWJ1ZmZlciBmcm9tIHRoZSBj
b250ZXh0IGZpcnN0LCBvdGhlcndpc2UKKyAgICAgICAgLy8gc29tZSBwbGF0Zm9ybXMgbWlnaHQg
cmVmdXNlIHRvIGJpbmQgdGhlIHNhbWUgYnVmZmVyIGlkIGFnYWluLgorICAgICAgICBtX2NvbnRl
eHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOwor
ICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVyKG1fbXVsdGlzYW1wbGVGcmFtZUJ1
ZmZlcik7CisgICAgICAgIG1fbXVsdGlzYW1wbGVGcmFtZUJ1ZmZlciA9IDA7CisgICAgfQorICAg
IGlmIChtX211bHRpc2FtcGxlUmVuZGVyQnVmZmVyKSB7CisgICAgICAgIG1fY29udGV4dC0+ZGVs
ZXRlUmVuZGVyYnVmZmVyKG1fbXVsdGlzYW1wbGVSZW5kZXJCdWZmZXIpOworICAgICAgICBtX211
bHRpc2FtcGxlUmVuZGVyQnVmZmVyID0gMDsKKyAgICB9CisgICAgaWYgKG1fbXVsdGlzYW1wbGVE
ZXB0aEJ1ZmZlcikgeworICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihtX211
bHRpc2FtcGxlRGVwdGhCdWZmZXIpOworICAgICAgICBtX211bHRpc2FtcGxlRGVwdGhCdWZmZXIg
PSAwOworICAgIH0KK30KKworYm9vbCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6cHJlbXVsdGlwbGll
ZEFscGhhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92YWxpZGF0ZWRQcm9ncmFtLT5wcm9ncmFt
SW5mbygpLnByb2dyYW1UeXBlKCkgPT0gUFJPR1JBTV9UWVBFX0JMRU5EU19FTEVNRU5UX1RFWFRV
UkU7Cit9CisKK2Jvb2wgQ3VzdG9tRmlsdGVyUmVuZGVyZXI6OnByb2dyYW1OZWVkc0lucHV0VGV4
dHVyZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fY29tcGlsZWRQcm9ncmFtLmdldCgpKTsKKyAg
ICByZXR1cm4gbV9jb21waWxlZFByb2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpICE9IC0xOworfQor
Citib29sIEN1c3RvbUZpbHRlclJlbmRlcmVyOjpyZW5kZXIoVWludDhDbGFtcGVkQXJyYXkqIHNv
dXJjZSwgVWludDhDbGFtcGVkQXJyYXkqIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJiBzaXpl
KQoreworICAgIGlmICghcmVzaXplQ29udGV4dElmTmVlZGVkKHNpemUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBib29sIG5lZWRzSW5wdXRUZXh0dXJlID0gcHJvZ3JhbU5lZWRzSW5w
dXRUZXh0dXJlKCk7CisgICAgaWYgKG5lZWRzSW5wdXRUZXh0dXJlKSB7CisgICAgICAgIEFTU0VS
VChzb3VyY2UpOworICAgICAgICB1cGxvYWRJbnB1dFRleHR1cmUoc291cmNlKTsKKyAgICB9Cisg
ICAgZHJhd0ZpbHRlck1lc2gobmVlZHNJbnB1dFRleHR1cmUgPyBtX2lucHV0VGV4dHVyZSA6IDAp
OworCisgICAgQVNTRVJUKHN0YXRpY19jYXN0PHNpemVfdD4oc2l6ZS53aWR0aCgpICogc2l6ZS5o
ZWlnaHQoKSAqIDQpID09IGRlc3RpbmF0aW9uLT5sZW5ndGgoKSk7CisgICAgbV9jb250ZXh0LT5y
ZWFkUGl4ZWxzKDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBkZXN0aW5hdGlv
bi0+ZGF0YSgpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEN1c3RvbUZpbHRlclJl
bmRlcmVyOjpkcmF3RmlsdGVyTWVzaChQbGF0Zm9ybTNET2JqZWN0IGlucHV0VGV4dHVyZSkKK3sK
KyAgICBib29sIG11bHRpc2FtcGxlID0gY2FuVXNlTXVsdGlzYW1wbGVCdWZmZXJzKCk7CisgICAg
bV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBtdWx0aXNhbXBsZSA/IG1fbXVsdGlzYW1wbGVGcmFtZUJ1ZmZlciA6IG1fZnJhbWVCdWZmZXIp
OworICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgbV9jb250ZXh0U2l6ZS53aWR0aCgpLCBt
X2NvbnRleHRTaXplLmhlaWdodCgpKTsKKworICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAw
LCAwLCAwKTsKKyAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9C
VUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQpOworCisgICAg
YmluZFByb2dyYW1BbmRCdWZmZXJzKGlucHV0VGV4dHVyZSk7CisgICAgbV9jb250ZXh0LT5kcmF3
RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgbV9tZXNoLT5pbmRpY2VzQ291
bnQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKTsKKyAgICB1bmJpbmRW
ZXJ0ZXhBdHRyaWJ1dGVzKCk7CisKKyAgICBpZiAobXVsdGlzYW1wbGUpCisgICAgICAgIHJlc29s
dmVNdWx0aXNhbXBsZUJ1ZmZlcigpOworfQorCitib29sIEN1c3RvbUZpbHRlclJlbmRlcmVyOjpw
cmVwYXJlRm9yRHJhd2luZyhDdXN0b21GaWx0ZXJEcmF3VHlwZSBmaWx0ZXJEcmF3VHlwZSkKK3sK
KyAgICBpZiAoIW1fY29udGV4dCAmJiAhaW5pdGlhbGl6ZUNvbnRleHQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICAv
LyBJZiB0aGUgc2hhZGVyIGhhZCBjb21waWxlciBlcnJvcnMgd2UgY2Fubm90IGRyYXcgYW55dGhp
bmcuCisgICAgaWYgKCFtX2NvbXBpbGVkUHJvZ3JhbS0+aXNJbml0aWFsaXplZCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBPbmx5IGFsbG9jYXRlIGEgdGV4dHVyZSBpZiB0aGUg
cHJvZ3JhbSBuZWVkcyBvbmUgYW5kIHRoZSBjYWxsZXIgZG9lc24ndCBhbGxvY2F0ZSBvbmUgYnkg
aXRzZWxmLgorICAgIGlmICgocHJvZ3JhbU5lZWRzSW5wdXRUZXh0dXJlKCkgJiYgKGZpbHRlckRy
YXdUeXBlID09IE5FRURTX0lOUFVUX1RFWFRVUkUpICYmICFlbnN1cmVJbnB1dFRleHR1cmUoKSkK
KyAgICAgICAgfHwgIWVuc3VyZUZyYW1lQnVmZmVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEN1c3RvbUZpbHRlclJlbmRlcmVyOjppbml0
aWFsaXplQ29udGV4dCgpCit7CisgICAgQVNTRVJUKCFtX2NvbnRleHQuZ2V0KCkpOworICAgIG1f
Y29udGV4dCA9IG1fZ2xvYmFsQ29udGV4dC0+Y29udGV4dCgpOworICAgIGlmICghbV9jb250ZXh0
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKKyAgICBtX2NvbXBpbGVkUHJvZ3JhbSA9IG1fdmFsaWRhdGVkUHJvZ3JhbS0+Y29tcGls
ZWRQcm9ncmFtKCk7CisKKyAgICAvLyBGSVhNRTogU2hhcmluZyB0aGUgbWVzaCB3b3VsZCBqdXN0
IHNhdmUgdGhlIHRpbWUgbmVlZGVkIHRvIHVwbG9hZCBpdCB0byB0aGUgR1BVLCBzbyBJIGFzc3Vt
ZSB3ZSBjb3VsZAorICAgIC8vIGJlbmNobWFyayB0aGF0IGZvciBwZXJmb3JtYW5jZS4KKyAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg0MjkKKyAgICBtX21l
c2ggPSBDdXN0b21GaWx0ZXJNZXNoOjpjcmVhdGUobV9jb250ZXh0LmdldCgpLCBtX21lc2hDb2x1
bW5zLCBtX21lc2hSb3dzLCBGbG9hdFJlY3QoMCwgMCwgMSwgMSksIG1fbWVzaFR5cGUpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ3VzdG9tRmlsdGVyUmVuZGVyZXI6OmVuc3VyZUlu
cHV0VGV4dHVyZSgpCit7CisgICAgaWYgKCFtX2lucHV0VGV4dHVyZSkKKyAgICAgICAgbV9pbnB1
dFRleHR1cmUgPSBtX2NvbnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKKyAgICByZXR1cm4gbV9pbnB1
dFRleHR1cmU7Cit9CisKK3ZvaWQgQ3VzdG9tRmlsdGVyUmVuZGVyZXI6OnVwbG9hZElucHV0VGV4
dHVyZShVaW50OENsYW1wZWRBcnJheSogc3JjUGl4ZWxBcnJheSkKK3sKKyAgICBtX2NvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2lucHV0VGV4dHVy
ZSk7CisgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgbV9jb250ZXh0U2l6ZS53aWR0aCgpLCBt
X2NvbnRleHRTaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHNyY1BpeGVsQXJyYXktPmRhdGEoKSk7Cit9CisK
K2Jvb2wgQ3VzdG9tRmlsdGVyUmVuZGVyZXI6OmVuc3VyZUZyYW1lQnVmZmVyKCkKK3sKKyAgICBp
ZiAoIW1fZnJhbWVCdWZmZXIpCisgICAgICAgIG1fZnJhbWVCdWZmZXIgPSBtX2NvbnRleHQtPmNy
ZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgaWYgKCFtX2RlcHRoQnVmZmVyKQorICAgICAgICBtX2Rl
cHRoQnVmZmVyID0gbV9jb250ZXh0LT5jcmVhdGVSZW5kZXJidWZmZXIoKTsKKyAgICBpZiAoIW1f
ZGVzdFRleHR1cmUpCisgICAgICAgIG1fZGVzdFRleHR1cmUgPSBtX2NvbnRleHQtPmNyZWF0ZVRl
eHR1cmUoKTsKKyAgICByZXR1cm4gbV9mcmFtZUJ1ZmZlciAmJiBtX2RlcHRoQnVmZmVyICYmIG1f
ZGVzdFRleHR1cmU7Cit9CisKK2Jvb2wgQ3VzdG9tRmlsdGVyUmVuZGVyZXI6OmNyZWF0ZU11bHRp
c2FtcGxlQnVmZmVyKCkKK3sKKyAgICBBU1NFUlQoIW1fdHJpZWRNdWx0aXNhbXBsZUJ1ZmZlcik7
CisgICAgbV90cmllZE11bHRpc2FtcGxlQnVmZmVyID0gdHJ1ZTsKKworICAgIEV4dGVuc2lvbnMz
RCogZXh0ZW5zaW9ucyA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOworICAgIGlmICghZXh0
ZW5zaW9ucworICAgICAgICB8fCAhZXh0ZW5zaW9ucy0+bWF5U3VwcG9ydE11bHRpc2FtcGxpbmco
KQorICAgICAgICB8fCAhZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVmZmVy
X211bHRpc2FtcGxlIikKKyAgICAgICAgfHwgIWV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9BTkdM
RV9mcmFtZWJ1ZmZlcl9ibGl0IikKKyAgICAgICAgfHwgIWV4dGVuc2lvbnMtPnN1cHBvcnRzKCJH
TF9PRVNfcmdiOF9yZ2JhOCIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBleHRlbnNp
b25zLT5lbnN1cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9ibGl0Iik7CisgICAgZXh0
ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1wbGUi
KTsKKyAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfcmdiOF9yZ2JhOCIpOwor
CisgICAgaWYgKCFtX211bHRpc2FtcGxlRnJhbWVCdWZmZXIpCisgICAgICAgIG1fbXVsdGlzYW1w
bGVGcmFtZUJ1ZmZlciA9IG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBpZiAo
IW1fbXVsdGlzYW1wbGVSZW5kZXJCdWZmZXIpCisgICAgICAgIG1fbXVsdGlzYW1wbGVSZW5kZXJC
dWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworICAgIGlmICghbV9tdWx0
aXNhbXBsZURlcHRoQnVmZmVyKQorICAgICAgICBtX211bHRpc2FtcGxlRGVwdGhCdWZmZXIgPSBt
X2NvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgQ3VzdG9tRmlsdGVyUmVuZGVyZXI6OnJlc29sdmVNdWx0aXNhbXBsZUJ1ZmZlcigpCit7
CisgICAgQVNTRVJUKG1fdHJpZWRNdWx0aXNhbXBsZUJ1ZmZlciAmJiBtX211bHRpc2FtcGxlRnJh
bWVCdWZmZXIgJiYgbV9tdWx0aXNhbXBsZVJlbmRlckJ1ZmZlciAmJiBtX211bHRpc2FtcGxlRGVw
dGhCdWZmZXIpOworICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEV4dGVuc2lvbnMzRDo6
UkVBRF9GUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZyYW1lQnVmZmVyKTsKKyAgICBtX2NvbnRl
eHQtPmJpbmRGcmFtZWJ1ZmZlcihFeHRlbnNpb25zM0Q6OkRSQVdfRlJBTUVCVUZGRVIsIG1fZnJh
bWVCdWZmZXIpOworCisgICAgQVNTRVJUKG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpKTsKKyAg
ICBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS0+YmxpdEZyYW1lYnVmZmVyKDAsIDAsIG1fY29u
dGV4dFNpemUud2lkdGgoKSwgbV9jb250ZXh0U2l6ZS5oZWlnaHQoKSwgMCwgMCwgbV9jb250ZXh0
U2l6ZS53aWR0aCgpLCBtX2NvbnRleHRTaXplLmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6
Q09MT1JfQlVGRkVSX0JJVCwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpOworCisgICAgbV9j
b250ZXh0LT5iaW5kRnJhbWVidWZmZXIoRXh0ZW5zaW9uczNEOjpSRUFEX0ZSQU1FQlVGRkVSLCAw
KTsKKyAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihFeHRlbnNpb25zM0Q6OkRSQVdfRlJB
TUVCVUZGRVIsIDApOworCisgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2ZyYW1lQnVmZmVyKTsKK30KKworYm9vbCBDdXN0b21G
aWx0ZXJSZW5kZXJlcjo6Y2FuVXNlTXVsdGlzYW1wbGVCdWZmZXJzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV90cmllZE11bHRpc2FtcGxlQnVmZmVyICYmIG1fbXVsdGlzYW1wbGVGcmFtZUJ1ZmZl
ciAmJiBtX211bHRpc2FtcGxlUmVuZGVyQnVmZmVyICYmIG1fbXVsdGlzYW1wbGVEZXB0aEJ1ZmZl
cjsKK30KKworYm9vbCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6cmVzaXplTXVsdGlzYW1wbGVCdWZm
ZXJzKGNvbnN0IEludFNpemUmIG5ld0NvbnRleHRTaXplKQoreworICAgIGlmICghbV90cmllZE11
bHRpc2FtcGxlQnVmZmVyICYmICFjcmVhdGVNdWx0aXNhbXBsZUJ1ZmZlcigpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWNhblVzZU11bHRpc2FtcGxlQnVmZmVycygpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhTYW1wbGVDb3Vu
dCA9IDQ7CisgICAgaW50IG1heFN1cHBvcnRlZFNhbXBsZUNvdW50ID0gMDsKKyAgICBtX2NvbnRl
eHQtPmdldEludGVnZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX1NBTVBMRVMsICZtYXhTdXBwb3J0ZWRT
YW1wbGVDb3VudCk7CisgICAgaW50IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oa01heFNhbXBsZUNv
dW50LCBtYXhTdXBwb3J0ZWRTYW1wbGVDb3VudCk7CisgICAgaWYgKCFzYW1wbGVDb3VudCkgewor
ICAgICAgICBkZWxldGVNdWx0aXNhbXBsZVJlbmRlckJ1ZmZlcnMoKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IG1fY29udGV4
dC0+Z2V0RXh0ZW5zaW9ucygpOworICAgIEFTU0VSVChleHRlbnNpb25zKTsKKworICAgIG1fY29u
dGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9t
dWx0aXNhbXBsZUZyYW1lQnVmZmVyKTsKKworICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlUmVuZGVyQnVm
ZmVyKTsKKyAgICBleHRlbnNpb25zLT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgc2FtcGxlQ291bnQsIEV4dGVuc2lvbnMzRDo6
UkdCQThfT0VTLCBuZXdDb250ZXh0U2l6ZS53aWR0aCgpLCBuZXdDb250ZXh0U2l6ZS5oZWlnaHQo
KSk7CisgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRl
eHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZVJlbmRlckJ1ZmZl
cik7CisKKyAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6
OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZURlcHRoQnVmZmVyKTsKKyAgICBleHRlbnNpb25z
LT5yZW5kZXJidWZmZXJTdG9yYWdlTXVsdGlzYW1wbGUoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRF
UkJVRkZFUiwgc2FtcGxlQ291bnQsIEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9DT01QT05FTlQx
NiwgbmV3Q29udGV4dFNpemUud2lkdGgoKSwgbmV3Q29udGV4dFNpemUuaGVpZ2h0KCkpOworICAg
IG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZS
QU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZURlcHRoQnVmZmVyKTsKKworICAg
IG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSLCAwKTsKKworICAgIGlmIChtX2NvbnRleHQtPmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR3Jh
cGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVC
VUZGRVJfQ09NUExFVEUpIHsKKyAgICAgICAgZGVsZXRlTXVsdGlzYW1wbGVSZW5kZXJCdWZmZXJz
KCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6cmVzaXplQ29udGV4dElmTmVlZGVkKGNvbnN0
IEludFNpemUmIG5ld0NvbnRleHRTaXplKQoreworICAgIGlmIChuZXdDb250ZXh0U2l6ZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobV9jb250ZXh0U2l6ZSA9PSBu
ZXdDb250ZXh0U2l6ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpbnQgbWF4VGV4dHVy
ZVNpemUgPSAwOworICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6
Ok1BWF9URVhUVVJFX1NJWkUsICZtYXhUZXh0dXJlU2l6ZSk7CisgICAgaWYgKG5ld0NvbnRleHRT
aXplLmhlaWdodCgpID4gbWF4VGV4dHVyZVNpemUgfHwgbmV3Q29udGV4dFNpemUud2lkdGgoKSA+
IG1heFRleHR1cmVTaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gcmVz
aXplQ29udGV4dChuZXdDb250ZXh0U2l6ZSk7Cit9CisKK2Jvb2wgQ3VzdG9tRmlsdGVyUmVuZGVy
ZXI6OnJlc2l6ZUNvbnRleHQoY29uc3QgSW50U2l6ZSYgbmV3Q29udGV4dFNpemUpCit7CisgICAg
Ym9vbCBtdWx0aXNhbXBsZSA9IHJlc2l6ZU11bHRpc2FtcGxlQnVmZmVycyhuZXdDb250ZXh0U2l6
ZSk7CisKKyAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
RlJBTUVCVUZGRVIsIG1fZnJhbWVCdWZmZXIpOworICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fZGVzdFRleHR1cmUpOworICAgIC8vIFdl
IGFyZSBnb2luZyB0byBjbGVhciB0aGUgb3V0cHV0IGJ1ZmZlciBhbnl3YXksIHNvIHdlIGNhbiBz
YWZlbHkgaW5pdGlhbGl6ZSB0aGUgZGVzdGluYXRpb24gdGV4dHVyZSB3aXRoIGdhcmJhZ2UgZGF0
YS4KKyNpZiBQTEFURk9STShDSFJPTUlVTSkKKyAgICAvLyBGSVhNRTogR3JhcGhpY3NDb250ZXh0
M0Q6OnRleEltYWdlMkREaXJlY3QgaXMgbm90IGltcGxlbWVudGVkIG9uIENocm9taXVtLgorICAg
IG1fY29udGV4dC0+dGV4SW1hZ2UyRChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG5ld0NvbnRleHRTaXplLndpZHRoKCksIG5ld0NvbnRl
eHRTaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250
ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOworI2Vsc2UKKyAgICBtX2NvbnRleHQtPnRleEltYWdl
MkREaXJlY3QoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpSR0JBLCBuZXdDb250ZXh0U2l6ZS53aWR0aCgpLCBuZXdDb250ZXh0U2l6ZS5oZWlnaHQo
KSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05F
RF9CWVRFLCAwKTsKKyNlbmRpZgorICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQo
R3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1Jf
QVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2Rlc3RUZXh0dXJl
LCAwKTsKKworICAgIC8vIFdlIGRvbid0IG5lZWQgdGhlIGRlcHRoIGJ1ZmZlciBmb3IgdGhlIHRl
eHR1cmUgZnJhbWVidWZmZXIsIGlmIHdlIGFscmVhZHkKKyAgICAvLyBoYXZlIGEgbXVsdGlzYW1w
bGUgYnVmZmVyLgorICAgIGlmICghbXVsdGlzYW1wbGUpIHsKKyAgICAgICAgbV9jb250ZXh0LT5i
aW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fZGVwdGhC
dWZmZXIpOworICAgICAgICBtX2NvbnRleHQtPnJlbmRlcmJ1ZmZlclN0b3JhZ2UoR3JhcGhpY3ND
b250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0NPTVBPTkVO
VDE2LCBuZXdDb250ZXh0U2l6ZS53aWR0aCgpLCBuZXdDb250ZXh0U2l6ZS5oZWlnaHQoKSk7Cisg
ICAgICAgIG1fY29udGV4dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkZSQU1FQlVGRkVSLCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQVRUQUNITUVOVCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7CisgICAgfQorCisg
ICAgaWYgKG1fY29udGV4dC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIpICE9IEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUl9DT01QTEVU
RSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG11bHRpc2FtcGxlKSB7CisgICAg
ICAgIC8vIENsZWFyIHRoZSBmcmFtZWJ1ZmZlciBmaXJzdCwgb3RoZXJ3aXNlIHRoZSBmaXJzdCBi
bGl0IHdpbGwgZmFpbC4KKyAgICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAsIDAp
OworICAgICAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZG
RVJfQklUKTsKKyAgICB9CisKKyAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7CisKKyAgICBtX2NvbnRleHRTaXplID0gbmV3
Q29udGV4dFNpemU7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ3VzdG9tRmlsdGVyUmVu
ZGVyZXI6OmJpbmRWZXJ0ZXhBdHRyaWJ1dGUoaW50IGF0dHJpYnV0ZUxvY2F0aW9uLCB1bnNpZ25l
ZCBzaXplLCB1bnNpZ25lZCBvZmZzZXQpCit7CisgICAgaWYgKGF0dHJpYnV0ZUxvY2F0aW9uICE9
IC0xKSB7CisgICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihhdHRyaWJ1dGVM
b2NhdGlvbiwgc2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgbV9tZXNoLT5i
eXRlc1BlclZlcnRleCgpLCBvZmZzZXQpOworICAgICAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KGF0dHJpYnV0ZUxvY2F0aW9uKTsKKyAgICB9Cit9CisKK3ZvaWQgQ3VzdG9t
RmlsdGVyUmVuZGVyZXI6OnVuYmluZFZlcnRleEF0dHJpYnV0ZShpbnQgYXR0cmlidXRlTG9jYXRp
b24pCit7CisgICAgaWYgKGF0dHJpYnV0ZUxvY2F0aW9uICE9IC0xKQorICAgICAgICBtX2NvbnRl
eHQtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWJ1dGVMb2NhdGlvbik7Cit9CisKK3Zv
aWQgQ3VzdG9tRmlsdGVyUmVuZGVyZXI6OmJpbmRQcm9ncmFtQXJyYXlQYXJhbWV0ZXJzKGludCB1
bmlmb3JtTG9jYXRpb24sIEN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyKiBhcnJheVBhcmFtZXRl
cikKK3sKKyAgICB1bnNpZ25lZCBwYXJhbWV0ZXJTaXplID0gYXJyYXlQYXJhbWV0ZXItPnNpemUo
KTsKKyAgICBWZWN0b3I8R0MzRGZsb2F0PiBmbG9hdFZlY3RvcjsKKworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJTaXplOyArK2kpCisgICAgICAgIGZsb2F0VmVjdG9yLmFw
cGVuZChhcnJheVBhcmFtZXRlci0+dmFsdWVBdChpKSk7CisKKyAgICBtX2NvbnRleHQtPnVuaWZv
cm0xZnYodW5pZm9ybUxvY2F0aW9uLCBwYXJhbWV0ZXJTaXplLCBmbG9hdFZlY3Rvci5kYXRhKCkp
OworfQorCit2b2lkIEN1c3RvbUZpbHRlclJlbmRlcmVyOjpiaW5kUHJvZ3JhbU51bWJlclBhcmFt
ZXRlcnMoaW50IHVuaWZvcm1Mb2NhdGlvbiwgQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyKiBu
dW1iZXJQYXJhbWV0ZXIpCit7CisgICAgc3dpdGNoIChudW1iZXJQYXJhbWV0ZXItPnNpemUoKSkg
eworICAgIGNhc2UgMToKKyAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYodW5pZm9ybUxvY2F0
aW9uLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIDI6CisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKHVuaWZvcm1Mb2NhdGlvbiwgbnVt
YmVyUGFyYW1ldGVyLT52YWx1ZUF0KDApLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIDM6CisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTNm
KHVuaWZvcm1Mb2NhdGlvbiwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDApLCBudW1iZXJQYXJh
bWV0ZXItPnZhbHVlQXQoMSksIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgyKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgNDoKKyAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtNGYodW5pZm9y
bUxvY2F0aW9uLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMCksIG51bWJlclBhcmFtZXRlci0+
dmFsdWVBdCgxKSwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDIpLCBudW1iZXJQYXJhbWV0ZXIt
PnZhbHVlQXQoMykpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK3ZvaWQgQ3VzdG9tRmlsdGVyUmVuZGVyZXI6
OmJpbmRQcm9ncmFtVHJhbnNmb3JtUGFyYW1ldGVyKGludCB1bmlmb3JtTG9jYXRpb24sIEN1c3Rv
bUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlciogdHJhbnNmb3JtUGFyYW1ldGVyKQoreworICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKKyAgICBpZiAobV9jb250ZXh0U2l6ZS53aWR0aCgp
ICYmIG1fY29udGV4dFNpemUuaGVpZ2h0KCkpIHsKKyAgICAgICAgLy8gVGhlIHZpZXdwb3J0IGlz
IGEgYm94IHdpdGggdGhlIHNpemUgb2YgMSB1bml0LCBzbyB3ZSBhcmUgc2NhbGxpbmcgdXAgaGVy
ZSB0byBtYWtlIHN1cmUgdGhhdCB0cmFuc2xhdGlvbnMgaGFwcGVuIHVzaW5nIHJlYWwgcGl4ZWwK
KyAgICAgICAgLy8gdW5pdHMuIEF0IHRoZSBlbmQgd2Ugc2NhbGUgYmFjayBkb3duIGluIG9yZGVy
IHRvIG1hcCBpdCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBib3guIE5vdGUgdGhhdCB0cmFuc2Zvcm1z
IGNvbWUgaW4gcmV2ZXJzZSBvcmRlciwgYmVjYXVzZSBpdCBpcworICAgICAgICAvLyBzdXBwb3Nl
ZCB0byBtdWx0aXBseSB0byB0aGUgbGVmdCBvZiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHZlcnRp
Y2VzLgorICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIG9yaWdpbiAoMCwgMCkgb2YgdGhlIHZpZXdw
b3J0IGlzIGluIHRoZSBtaWRkbGUgb2YgdGhlIGNvbnRleHQsIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0
byBjaGFuZ2UgdGhlIG9yaWdpbiBvZiB0aGUgdHJhbnNmb3JtCisgICAgICAgIC8vIGluIG9yZGVy
IHRvIHJvdGF0ZSBhcm91bmQgdGhlIG1pZGRsZSBvZiBtZXNoLgorICAgICAgICBtYXRyaXguc2Nh
bGUzZCgxLjAgLyBtX2NvbnRleHRTaXplLndpZHRoKCksIDEuMCAvIG1fY29udGV4dFNpemUuaGVp
Z2h0KCksIDEpOworICAgICAgICB0cmFuc2Zvcm1QYXJhbWV0ZXItPmFwcGx5VHJhbnNmb3JtKG1h
dHJpeCwgbV9jb250ZXh0U2l6ZSk7CisgICAgICAgIG1hdHJpeC5zY2FsZTNkKG1fY29udGV4dFNp
emUud2lkdGgoKSwgbV9jb250ZXh0U2l6ZS5oZWlnaHQoKSwgMSk7CisgICAgfQorICAgIGZsb2F0
IGdsTWF0cml4WzE2XTsKKyAgICBtYXRyaXgudG9Db2x1bW5NYWpvckZsb2F0QXJyYXkoZ2xNYXRy
aXgpOworICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdih1bmlmb3JtTG9jYXRpb24sIDEs
IGZhbHNlLCAmZ2xNYXRyaXhbMF0pOworfQorCit2b2lkIEN1c3RvbUZpbHRlclJlbmRlcmVyOjpi
aW5kUHJvZ3JhbVBhcmFtZXRlcnMoKQoreworICAgIC8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIHJl
c2V0IHVuaWZvcm1zIHRoYXQgYXJlIG5vdCBzcGVjaWZpZWQgaW4gQ1NTLiBUaGlzIGlzIG5lZWRl
ZCB0byBhdm9pZCB1c2luZyB2YWx1ZXMKKyAgICAvLyBzZXQgYnkgb3RoZXIgcHJldmlvdXMgcmVu
ZGVyZWQgZmlsdGVycy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzY0NDAKKworICAgIHNpemVfdCBwYXJhbWV0ZXJzU2l6ZSA9IG1fcGFyYW1ldGVycy5z
aXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzU2l6ZTsgKytpKSB7
CisgICAgICAgIEN1c3RvbUZpbHRlclBhcmFtZXRlciogcGFyYW1ldGVyID0gbV9wYXJhbWV0ZXJz
LmF0KGkpLmdldCgpOworICAgICAgICBpbnQgdW5pZm9ybUxvY2F0aW9uID0gbV9jb21waWxlZFBy
b2dyYW0tPnVuaWZvcm1Mb2NhdGlvbkJ5TmFtZShwYXJhbWV0ZXItPm5hbWUoKSk7CisgICAgICAg
IGlmICh1bmlmb3JtTG9jYXRpb24gPT0gLTEpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgc3dpdGNoIChwYXJhbWV0ZXItPnBhcmFtZXRlclR5cGUoKSkgeworICAgICAgICBjYXNlIEN1
c3RvbUZpbHRlclBhcmFtZXRlcjo6QVJSQVk6CisgICAgICAgICAgICBiaW5kUHJvZ3JhbUFycmF5
UGFyYW1ldGVycyh1bmlmb3JtTG9jYXRpb24sIHN0YXRpY19jYXN0PEN1c3RvbUZpbHRlckFycmF5
UGFyYW1ldGVyKj4ocGFyYW1ldGVyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDdXN0b21GaWx0ZXJQYXJhbWV0ZXI6Ok5VTUJFUjoKKyAgICAgICAgICAgIGJpbmRQcm9ncmFt
TnVtYmVyUGFyYW1ldGVycyh1bmlmb3JtTG9jYXRpb24sIHN0YXRpY19jYXN0PEN1c3RvbUZpbHRl
ck51bWJlclBhcmFtZXRlcio+KHBhcmFtZXRlcikpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyOjpUUkFOU0ZPUk06CisgICAgICAgICAgICBi
aW5kUHJvZ3JhbVRyYW5zZm9ybVBhcmFtZXRlcih1bmlmb3JtTG9jYXRpb24sIHN0YXRpY19jYXN0
PEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcio+KHBhcmFtZXRlcikpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIG9ydGhvZ29uYWxQ
cm9qZWN0aW9uTWF0cml4KFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IGxlZnQs
IGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGZsb2F0IHRvcCkKK3sKKyAgICBBU1NFUlQobWF0
cml4LmlzSWRlbnRpdHkoKSk7CisKKyAgICBmbG9hdCBkZWx0YVggPSByaWdodCAtIGxlZnQ7Cisg
ICAgZmxvYXQgZGVsdGFZID0gdG9wIC0gYm90dG9tOworICAgIGlmICghZGVsdGFYIHx8ICFkZWx0
YVkpCisgICAgICAgIHJldHVybjsKKyAgICBtYXRyaXguc2V0TTExKDIuMGYgLyBkZWx0YVgpOwor
ICAgIG1hdHJpeC5zZXRNNDEoLShyaWdodCArIGxlZnQpIC8gZGVsdGFYKTsKKyAgICBtYXRyaXgu
c2V0TTIyKDIuMGYgLyBkZWx0YVkpOworICAgIG1hdHJpeC5zZXRNNDIoLSh0b3AgKyBib3R0b20p
IC8gZGVsdGFZKTsKKworICAgIC8vIFVzZSBiaWcgZW5vdWdoIG5lYXIvZmFyIHZhbHVlcywgc28g
dGhhdCBzaW1wbGUgcm90YXRpb25zIG9mIHJhdGhlciBsYXJnZSBvYmplY3RzIHdpbGwgbm90Cisg
ICAgLy8gZ2V0IGNsaXBwZWQuIDEwMDAwIHNob3VsZCBjb3ZlciBtb3N0IG9mIHRoZSBzY3JlZW4g
cmVzb2x1dGlvbnMuCisgICAgY29uc3QgZmxvYXQgZmFyVmFsdWUgPSAxMDAwMDsKKyAgICBjb25z
dCBmbG9hdCBuZWFyVmFsdWUgPSAtMTAwMDA7CisgICAgbWF0cml4LnNldE0zMygtMi4wZiAvIChm
YXJWYWx1ZSAtIG5lYXJWYWx1ZSkpOworICAgIG1hdHJpeC5zZXRNNDMoLSAoZmFyVmFsdWUgKyBu
ZWFyVmFsdWUpIC8gKGZhclZhbHVlIC0gbmVhclZhbHVlKSk7CisgICAgbWF0cml4LnNldE00NCgx
LjBmKTsKK30KKwordm9pZCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6YmluZFByb2dyYW1BbmRCdWZm
ZXJzKFBsYXRmb3JtM0RPYmplY3QgaW5wdXRUZXh0dXJlKQoreworICAgIEFTU0VSVChtX2NvbXBp
bGVkUHJvZ3JhbS0+aXNJbml0aWFsaXplZCgpKTsKKworICAgIG1fY29udGV4dC0+dXNlUHJvZ3Jh
bShtX2NvbXBpbGVkUHJvZ3JhbS0+cHJvZ3JhbSgpKTsKKworICAgIGlmIChwcm9ncmFtTmVlZHNJ
bnB1dFRleHR1cmUoKSkgeworICAgICAgICAvLyBXZSBzaG91bGQgYmUgYmluZGluZyB0aGUgRE9N
IGVsZW1lbnQgdGV4dHVyZSBzYW1wbGVyIG9ubHkgaWYgdGhlIGF1dGhvciBpcyB1c2luZyB0aGUg
Q1NTIG1peCBmdW5jdGlvbi4KKyAgICAgICAgQVNTRVJUKG1fdmFsaWRhdGVkUHJvZ3JhbS0+cHJv
Z3JhbUluZm8oKS5wcm9ncmFtVHlwZSgpID09IFBST0dSQU1fVFlQRV9CTEVORFNfRUxFTUVOVF9U
RVhUVVJFKTsKKyAgICAgICAgQVNTRVJUKG1fY29tcGlsZWRQcm9ncmFtLT5zYW1wbGVyTG9jYXRp
b24oKSAhPSAtMSk7CisKKyAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFMCk7CisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKG1fY29t
cGlsZWRQcm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSwgMCk7CisgICAgICAgIG1fY29udGV4dC0+
YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGlucHV0VGV4dHVyZSk7
CisgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3ND
b250ZXh0M0Q6OkxJTkVBUik7CisgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFH
X0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgICAgIG1fY29udGV4dC0+
dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250
ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7
CisgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRl
eHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAgfQorCisgICAgaWYgKG1fY29tcGlsZWRQcm9ncmFt
LT5wcm9qZWN0aW9uTWF0cml4TG9jYXRpb24oKSAhPSAtMSkgeworICAgICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4OworICAgICAgICBvcnRob2dvbmFsUHJvamVjdGlv
bk1hdHJpeChwcm9qZWN0aW9uTWF0cml4LCAtMC41LCAwLjUsIC0wLjUsIDAuNSk7CisgICAgICAg
IGZsb2F0IGdsUHJvamVjdGlvbk1hdHJpeFsxNl07CisgICAgICAgIHByb2plY3Rpb25NYXRyaXgu
dG9Db2x1bW5NYWpvckZsb2F0QXJyYXkoZ2xQcm9qZWN0aW9uTWF0cml4KTsKKyAgICAgICAgbV9j
b250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KG1fY29tcGlsZWRQcm9ncmFtLT5wcm9qZWN0aW9uTWF0
cml4TG9jYXRpb24oKSwgMSwgZmFsc2UsICZnbFByb2plY3Rpb25NYXRyaXhbMF0pOworICAgIH0K
KworICAgIEFTU0VSVChtX21lc2hDb2x1bW5zKTsKKyAgICBBU1NFUlQobV9tZXNoUm93cyk7CisK
KyAgICBpZiAobV9jb21waWxlZFByb2dyYW0tPm1lc2hTaXplTG9jYXRpb24oKSAhPSAtMSkKKyAg
ICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobV9jb21waWxlZFByb2dyYW0tPm1lc2hTaXplTG9j
YXRpb24oKSwgbV9tZXNoQ29sdW1ucywgbV9tZXNoUm93cyk7CisKKyAgICBpZiAobV9jb21waWxl
ZFByb2dyYW0tPnRpbGVTaXplTG9jYXRpb24oKSAhPSAtMSkKKyAgICAgICAgbV9jb250ZXh0LT51
bmlmb3JtMmYobV9jb21waWxlZFByb2dyYW0tPnRpbGVTaXplTG9jYXRpb24oKSwgMS4wIC8gbV9t
ZXNoQ29sdW1ucywgMS4wIC8gbV9tZXNoUm93cyk7CisKKyAgICBpZiAobV9jb21waWxlZFByb2dy
YW0tPm1lc2hCb3hMb2NhdGlvbigpICE9IC0xKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdp
bGwgY2hhbmdlIHdoZW4gZmlsdGVyIG1hcmdpbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwKKyAgICAg
ICAgLy8gc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTQwMAor
ICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm00ZihtX2NvbXBpbGVkUHJvZ3JhbS0+bWVzaEJveExv
Y2F0aW9uKCksIC0wLjUsIC0wLjUsIDEuMCwgMS4wKTsKKyAgICB9CisKKyAgICBpZiAobV9jb21w
aWxlZFByb2dyYW0tPnNhbXBsZXJTaXplTG9jYXRpb24oKSAhPSAtMSkKKyAgICAgICAgbV9jb250
ZXh0LT51bmlmb3JtMmYobV9jb21waWxlZFByb2dyYW0tPnNhbXBsZXJTaXplTG9jYXRpb24oKSwg
bV9jb250ZXh0U2l6ZS53aWR0aCgpLCBtX2NvbnRleHRTaXplLmhlaWdodCgpKTsKKworICAgIG1f
Y29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX21l
c2gtPnZlcnRpY2VzQnVmZmVyT2JqZWN0KCkpOworICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihH
cmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1fbWVzaC0+ZWxlbWVudHNC
dWZmZXJPYmplY3QoKSk7CisKKyAgICBiaW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9n
cmFtLT5wb3NpdGlvbkF0dHJpYkxvY2F0aW9uKCksIFBvc2l0aW9uQXR0cmliU2l6ZSwgUG9zaXRp
b25BdHRyaWJPZmZzZXQpOworICAgIGJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dy
YW0tPnRleEF0dHJpYkxvY2F0aW9uKCksIFRleEF0dHJpYlNpemUsIFRleEF0dHJpYk9mZnNldCk7
CisgICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhlIGludGVybmFsIHRleCBjb29yZCBhdHRyaWJ1
dGUgImNzc19hX3RleENvb3JkIi4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9OTQzNTgKKyAgICBiaW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9n
cmFtLT5pbnRlcm5hbFRleENvb3JkQXR0cmliTG9jYXRpb24oKSwgVGV4QXR0cmliU2l6ZSwgVGV4
QXR0cmliT2Zmc2V0KTsKKyAgICBiaW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFt
LT5tZXNoQXR0cmliTG9jYXRpb24oKSwgTWVzaEF0dHJpYlNpemUsIE1lc2hBdHRyaWJPZmZzZXQp
OworICAgIGlmIChtX21lc2hUeXBlID09IEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6REVUQUNIRUQp
CisgICAgICAgIGJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPnRyaWFuZ2xl
QXR0cmliTG9jYXRpb24oKSwgVHJpYW5nbGVBdHRyaWJTaXplLCBUcmlhbmdsZUF0dHJpYk9mZnNl
dCk7CisKKyAgICBiaW5kUHJvZ3JhbVBhcmFtZXRlcnMoKTsKK30KKwordm9pZCBDdXN0b21GaWx0
ZXJSZW5kZXJlcjo6dW5iaW5kVmVydGV4QXR0cmlidXRlcygpCit7CisgICAgdW5iaW5kVmVydGV4
QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFtLT5wb3NpdGlvbkF0dHJpYkxvY2F0aW9uKCkpOwor
ICAgIHVuYmluZFZlcnRleEF0dHJpYnV0ZShtX2NvbXBpbGVkUHJvZ3JhbS0+dGV4QXR0cmliTG9j
YXRpb24oKSk7CisgICAgdW5iaW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFtLT5p
bnRlcm5hbFRleENvb3JkQXR0cmliTG9jYXRpb24oKSk7CisgICAgdW5iaW5kVmVydGV4QXR0cmli
dXRlKG1fY29tcGlsZWRQcm9ncmFtLT5tZXNoQXR0cmliTG9jYXRpb24oKSk7CisgICAgaWYgKG1f
bWVzaFR5cGUgPT0gQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpERVRBQ0hFRCkKKyAgICAgICAgdW5i
aW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFtLT50cmlhbmdsZUF0dHJpYkxvY2F0
aW9uKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
Q1NTX1NIQURFUlMpICYmIFVTRSgzRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUmVuZGVyZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUmVuZGVy
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4zYWY2Yzc3ZmFiNTRkYjlmN2RkYjVmZTI0M2MwM2UwZjkyY2QwMzE2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5oCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICog
ICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
CisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAor
ICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQ3VzdG9tRmlsdGVyUmVuZGVyZXJf
aAorI2RlZmluZSBDdXN0b21GaWx0ZXJSZW5kZXJlcl9oCisKKyNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpICYmIFVTRSgzRF9HUkFQSElDUykKKworI2luY2x1ZGUgIkN1c3RvbUZpbHRlck9wZXJhdGlv
bi5oIgorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMzRC5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsKK2NsYXNz
IFVpbnQ4Q2xhbXBlZEFycmF5OworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEN1
c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyOworY2xhc3MgQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9n
cmFtOworY2xhc3MgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dDsKK2NsYXNzIEN1c3RvbUZpbHRl
ck1lc2g7CitjbGFzcyBDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXI7CitjbGFzcyBDdXN0b21G
aWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXI7CitjbGFzcyBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9n
cmFtOworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBJbnRTaXplOworCitjbGFzcyBD
dXN0b21GaWx0ZXJSZW5kZXJlciA6IHB1YmxpYyBSZWZDb3VudGVkPEN1c3RvbUZpbHRlclJlbmRl
cmVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUmVuZGVy
ZXI+IGNyZWF0ZShDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KiwgQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uKik7CisgICAgfkN1c3RvbUZpbHRlclJlbmRlcmVyKCk7CisKKyAgICBib29sIHByZW11bHRp
cGxpZWRBbHBoYSgpIGNvbnN0OworICAgIGJvb2wgcHJvZ3JhbU5lZWRzSW5wdXRUZXh0dXJlKCkg
Y29uc3Q7CisKKyAgICBlbnVtIEN1c3RvbUZpbHRlckRyYXdUeXBlIHsKKyAgICAgICAgTkVFRFNf
SU5QVVRfVEVYVFVSRSwKKyAgICAgICAgTk9fSU5QVVRfVEVYVFVSRQorICAgIH07CisgICAgYm9v
bCBwcmVwYXJlRm9yRHJhd2luZyhDdXN0b21GaWx0ZXJEcmF3VHlwZSA9IE5FRURTX0lOUFVUX1RF
WFRVUkUpOworCisgICAgYm9vbCByZW5kZXIoVWludDhDbGFtcGVkQXJyYXkqIHNvdXJjZSwgVWlu
dDhDbGFtcGVkQXJyYXkqIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRTaXplJik7CisKK3ByaXZhdGU6
CisgICAgQ3VzdG9tRmlsdGVyUmVuZGVyZXIoQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCosIEN1
c3RvbUZpbHRlck9wZXJhdGlvbiopOworCisgICAgYm9vbCBpbml0aWFsaXplQ29udGV4dCgpOwor
CisgICAgdm9pZCBkcmF3RmlsdGVyTWVzaChQbGF0Zm9ybTNET2JqZWN0IGlucHV0VGV4dHVyZSk7
CisgICAgYm9vbCBlbnN1cmVJbnB1dFRleHR1cmUoKTsKKyAgICB2b2lkIHVwbG9hZElucHV0VGV4
dHVyZShVaW50OENsYW1wZWRBcnJheSogc3JjUGl4ZWxBcnJheSk7CisgICAgYm9vbCByZXNpemVD
b250ZXh0SWZOZWVkZWQoY29uc3QgSW50U2l6ZSYpOworICAgIGJvb2wgcmVzaXplQ29udGV4dChj
b25zdCBJbnRTaXplJik7CisKKyAgICBib29sIGNhblVzZU11bHRpc2FtcGxlQnVmZmVycygpIGNv
bnN0OworICAgIGJvb2wgY3JlYXRlTXVsdGlzYW1wbGVCdWZmZXIoKTsKKyAgICBib29sIHJlc2l6
ZU11bHRpc2FtcGxlQnVmZmVycyhjb25zdCBJbnRTaXplJik7CisgICAgdm9pZCByZXNvbHZlTXVs
dGlzYW1wbGVCdWZmZXIoKTsKKyAgICB2b2lkIGRlbGV0ZU11bHRpc2FtcGxlUmVuZGVyQnVmZmVy
cygpOworCisgICAgYm9vbCBlbnN1cmVGcmFtZUJ1ZmZlcigpOworICAgIHZvaWQgZGVsZXRlUmVu
ZGVyQnVmZmVycygpOworCisgICAgdm9pZCBiaW5kVmVydGV4QXR0cmlidXRlKGludCBhdHRyaWJ1
dGVMb2NhdGlvbiwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgb2Zmc2V0KTsKKyAgICB2b2lkIHVu
YmluZFZlcnRleEF0dHJpYnV0ZShpbnQgYXR0cmlidXRlTG9jYXRpb24pOworICAgIHZvaWQgYmlu
ZFByb2dyYW1BcnJheVBhcmFtZXRlcnMoaW50IHVuaWZvcm1Mb2NhdGlvbiwgQ3VzdG9tRmlsdGVy
QXJyYXlQYXJhbWV0ZXIqKTsKKyAgICB2b2lkIGJpbmRQcm9ncmFtTnVtYmVyUGFyYW1ldGVycyhp
bnQgdW5pZm9ybUxvY2F0aW9uLCBDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIqKTsKKyAgICB2
b2lkIGJpbmRQcm9ncmFtVHJhbnNmb3JtUGFyYW1ldGVyKGludCB1bmlmb3JtTG9jYXRpb24sIEN1
c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlciopOworICAgIHZvaWQgYmluZFByb2dyYW1QYXJh
bWV0ZXJzKCk7CisgICAgdm9pZCBiaW5kUHJvZ3JhbUFuZEJ1ZmZlcnMoUGxhdGZvcm0zRE9iamVj
dCBpbnB1dFRleHR1cmUpOworICAgIHZvaWQgdW5iaW5kVmVydGV4QXR0cmlidXRlcygpOworCisg
ICAgLy8gTm8gbmVlZCB0byBrZWVwIGEgcmVmZXJlbmNlIGhlcmUuIEl0IGlzIG93bmVkIGJ5IHRo
ZSBSZW5kZXJWaWV3LgorICAgIEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQqIG1fZ2xvYmFsQ29u
dGV4dDsKKworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OworICAgIFJl
ZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiBtX3ZhbGlkYXRlZFByb2dyYW07Cisg
ICAgUmVmUHRyPEN1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbT4gbV9jb21waWxlZFByb2dyYW07
CisgICAgUmVmUHRyPEN1c3RvbUZpbHRlck1lc2g+IG1fbWVzaDsKKyAgICBJbnRTaXplIG1fY29u
dGV4dFNpemU7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1faW5wdXRUZXh0dXJlOworICAgIFBs
YXRmb3JtM0RPYmplY3QgbV9mcmFtZUJ1ZmZlcjsKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZGVw
dGhCdWZmZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2Rlc3RUZXh0dXJlOworCisgICAgYm9v
bCBtX3RyaWVkTXVsdGlzYW1wbGVCdWZmZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX211bHRp
c2FtcGxlRnJhbWVCdWZmZXI7CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX211bHRpc2FtcGxlUmVu
ZGVyQnVmZmVyOworICAgIFBsYXRmb3JtM0RPYmplY3QgbV9tdWx0aXNhbXBsZURlcHRoQnVmZmVy
OworCisgICAgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCBtX3BhcmFtZXRlcnM7CisKKyAgICB1
bnNpZ25lZCBtX21lc2hSb3dzOworICAgIHVuc2lnbmVkIG1fbWVzaENvbHVtbnM7CisgICAgQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSBtX21lc2hUeXBlOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENTU19TSEFERVJTKSAmJiBVU0UoM0Rf
R1JBUEhJQ1MpCisKKyNlbmRpZiAvLyBDdXN0b21GaWx0ZXJSZW5kZXJlcl9oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21G
aWx0ZXIuY3BwCmluZGV4IDcwN2VkYjg2NmZlMTNjMmM5N2QwNWNjNjYxOTdlOTBkZjJmMGFhNTYu
LjI4ZWI0MWYyODA0Yzg4ZWUxMDE2ODRkY2MzMGE3ZjY2ZWYyMDFmYzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21G
aWx0ZXIuY3BwCkBAIC0zMywxMzQgKzMzLDI3IEBACiAjaWYgRU5BQkxFKENTU19TSEFERVJTKSAm
JiBVU0UoM0RfR1JBUEhJQ1MpCiAjaW5jbHVkZSAiRkVDdXN0b21GaWx0ZXIuaCIKIAotI2luY2x1
ZGUgIkN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyLmgiCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVy
Q29tcGlsZWRQcm9ncmFtLmgiCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyQ29uc3RhbnRzLmgiCi0j
aW5jbHVkZSAiQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC5oIgotI2luY2x1ZGUgIkN1c3RvbUZp
bHRlck1lc2guaCIKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIuaCIKLSNp
bmNsdWRlICJDdXN0b21GaWx0ZXJQYXJhbWV0ZXIuaCIKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJQ
cm9ncmFtLmgiCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyLmgiCi0j
aW5jbHVkZSAiQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oIgotI2luY2x1ZGUgIkRyYXdp
bmdCdWZmZXIuaCIKLSNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKLSNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUmVuZGVyZXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgotI2luY2x1ZGUgIlRp
bGluZ0RhdGEuaCIKLSNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogCiAjaW5jbHVk
ZSA8d3RmL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3Rh
dGljIGNvbnN0IGludCBrTWF4U2FtcGxlQ291bnQgPSA0OwotCi1zdGF0aWMgdm9pZCBvcnRob2dv
bmFsUHJvamVjdGlvbk1hdHJpeChUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBs
ZWZ0LCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBmbG9hdCB0b3ApCi17Ci0gICAgQVNTRVJU
KG1hdHJpeC5pc0lkZW50aXR5KCkpOwotICAgIAotICAgIGZsb2F0IGRlbHRhWCA9IHJpZ2h0IC0g
bGVmdDsKLSAgICBmbG9hdCBkZWx0YVkgPSB0b3AgLSBib3R0b207Ci0gICAgaWYgKCFkZWx0YVgg
fHwgIWRlbHRhWSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1hdHJpeC5zZXRNMTEoMi4wZiAvIGRl
bHRhWCk7Ci0gICAgbWF0cml4LnNldE00MSgtKHJpZ2h0ICsgbGVmdCkgLyBkZWx0YVgpOwotICAg
IG1hdHJpeC5zZXRNMjIoMi4wZiAvIGRlbHRhWSk7Ci0gICAgbWF0cml4LnNldE00MigtKHRvcCAr
IGJvdHRvbSkgLyBkZWx0YVkpOwotCi0gICAgLy8gVXNlIGJpZyBlbm91Z2ggbmVhci9mYXIgdmFs
dWVzLCBzbyB0aGF0IHNpbXBsZSByb3RhdGlvbnMgb2YgcmF0aGVyIGxhcmdlIG9iamVjdHMgd2ls
bCBub3QKLSAgICAvLyBnZXQgY2xpcHBlZC4gMTAwMDAgc2hvdWxkIGNvdmVyIG1vc3Qgb2YgdGhl
IHNjcmVlbiByZXNvbHV0aW9ucy4KLSAgICBjb25zdCBmbG9hdCBmYXJWYWx1ZSA9IDEwMDAwOwot
ICAgIGNvbnN0IGZsb2F0IG5lYXJWYWx1ZSA9IC0xMDAwMDsKLSAgICBtYXRyaXguc2V0TTMzKC0y
LjBmIC8gKGZhclZhbHVlIC0gbmVhclZhbHVlKSk7Ci0gICAgbWF0cml4LnNldE00MygtIChmYXJW
YWx1ZSArIG5lYXJWYWx1ZSkgLyAoZmFyVmFsdWUgLSBuZWFyVmFsdWUpKTsKLSAgICBtYXRyaXgu
c2V0TTQ0KDEuMGYpOwotfQotCi1GRUN1c3RvbUZpbHRlcjo6RkVDdXN0b21GaWx0ZXIoRmlsdGVy
KiBmaWx0ZXIsIEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQqIGN1c3RvbUZpbHRlckdsb2JhbENv
bnRleHQsIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4gdmFsaWRhdGVk
UHJvZ3JhbSwgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVycywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBtZXNoUm93cywgdW5zaWduZWQg
bWVzaENvbHVtbnMsIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaEJveFR5cGUsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSBt
ZXNoVHlwZSkKK0ZFQ3VzdG9tRmlsdGVyOjpGRUN1c3RvbUZpbHRlcihGaWx0ZXIqIGZpbHRlciwg
UGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJSZW5kZXJlcj4gcmVuZGVyZXIpCiAgICAgOiBGaWx0ZXJF
ZmZlY3QoZmlsdGVyKQotICAgICwgbV9nbG9iYWxDb250ZXh0KGN1c3RvbUZpbHRlckdsb2JhbENv
bnRleHQpCi0gICAgLCBtX3ZhbGlkYXRlZFByb2dyYW0odmFsaWRhdGVkUHJvZ3JhbSkKLSAgICAs
IG1fY29tcGlsZWRQcm9ncmFtKDApIC8vIERvbid0IGNvbXBpbGUgdGhlIHByb2dyYW0gdW5sZXNz
IHdlIG5lZWQgdG8gcGFpbnQuCi0gICAgLCBtX2lucHV0VGV4dHVyZSgwKQotICAgICwgbV9mcmFt
ZUJ1ZmZlcigwKQotICAgICwgbV9kZXB0aEJ1ZmZlcigwKQotICAgICwgbV9kZXN0VGV4dHVyZSgw
KQotICAgICwgbV90cmllZE11bHRpc2FtcGxlQnVmZmVyKGZhbHNlKQotICAgICwgbV9tdWx0aXNh
bXBsZUZyYW1lQnVmZmVyKDApCi0gICAgLCBtX211bHRpc2FtcGxlUmVuZGVyQnVmZmVyKDApCi0g
ICAgLCBtX211bHRpc2FtcGxlRGVwdGhCdWZmZXIoMCkKLSAgICAsIG1fcGFyYW1ldGVycyhwYXJh
bWV0ZXJzKQotICAgICwgbV9tZXNoUm93cyhtZXNoUm93cykKLSAgICAsIG1fbWVzaENvbHVtbnMo
bWVzaENvbHVtbnMpCi0gICAgLCBtX21lc2hUeXBlKG1lc2hUeXBlKQorICAgICwgbV9jdXN0b21G
aWx0ZXJSZW5kZXJlcihyZW5kZXJlcikKIHsKLSAgICAvLyBBbiBGRUN1c3RvbUZpbHRlciBzaG91
bGRuJ3QgaGF2ZSBiZWVuIGNyZWF0ZWQgdW5sZXNzIHRoZSBwcm9ncmFtIHBhc3NlZCB2YWxpZGF0
aW9uLgotICAgIEFTU0VSVChtX3ZhbGlkYXRlZFByb2dyYW0tPmlzSW5pdGlhbGl6ZWQoKSk7CiB9
CiAKLVBhc3NSZWZQdHI8RkVDdXN0b21GaWx0ZXI+IEZFQ3VzdG9tRmlsdGVyOjpjcmVhdGUoRmls
dGVyKiBmaWx0ZXIsIEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQqIGN1c3RvbUZpbHRlckdsb2Jh
bENvbnRleHQsIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4gdmFsaWRh
dGVkUHJvZ3JhbSwgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVycywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBtZXNo
Um93cywgdW5zaWduZWQgbWVzaENvbHVtbnMsIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaEJv
eFR5cGUgbWVzaEJveFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSBtZXNoVHlwZSkKK1Bhc3NSZWZQ
dHI8RkVDdXN0b21GaWx0ZXI+IEZFQ3VzdG9tRmlsdGVyOjpjcmVhdGUoRmlsdGVyKiBmaWx0ZXIs
IFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUmVuZGVyZXI+IHJlbmRlcmVyKQogewotICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRkVDdXN0b21GaWx0ZXIoZmlsdGVyLCBjdXN0b21GaWx0ZXJHbG9iYWxD
b250ZXh0LCB2YWxpZGF0ZWRQcm9ncmFtLCBwYXJhbWV0ZXJzLCBtZXNoUm93cywgbWVzaENvbHVt
bnMsIG1lc2hCb3hUeXBlLCBtZXNoVHlwZSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVD
dXN0b21GaWx0ZXIoZmlsdGVyLCByZW5kZXJlcikpOwogfQogCiBGRUN1c3RvbUZpbHRlcjo6fkZF
Q3VzdG9tRmlsdGVyKCkKIHsKLSAgICBkZWxldGVSZW5kZXJCdWZmZXJzKCk7Ci19Ci0KLXZvaWQg
RkVDdXN0b21GaWx0ZXI6OmRlbGV0ZVJlbmRlckJ1ZmZlcnMoKQotewotICAgIGlmICghbV9jb250
ZXh0KQotICAgICAgICByZXR1cm47Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQo
KTsKLSAgICBpZiAobV9pbnB1dFRleHR1cmUpIHsKLSAgICAgICAgbV9jb250ZXh0LT5kZWxldGVU
ZXh0dXJlKG1faW5wdXRUZXh0dXJlKTsKLSAgICAgICAgbV9pbnB1dFRleHR1cmUgPSAwOwotICAg
IH0KLSAgICBpZiAobV9mcmFtZUJ1ZmZlcikgewotICAgICAgICAvLyBNYWtlIHN1cmUgdG8gdW5i
aW5kIGFueSBmcmFtZWJ1ZmZlciBmcm9tIHRoZSBjb250ZXh0IGZpcnN0LCBvdGhlcndpc2UKLSAg
ICAgICAgLy8gc29tZSBwbGF0Zm9ybXMgbWlnaHQgcmVmdXNlIHRvIGJpbmQgdGhlIHNhbWUgYnVm
ZmVyIGlkIGFnYWluLgotICAgICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIDApOwotICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZUZy
YW1lYnVmZmVyKG1fZnJhbWVCdWZmZXIpOwotICAgICAgICBtX2ZyYW1lQnVmZmVyID0gMDsKLSAg
ICB9Ci0gICAgaWYgKG1fZGVwdGhCdWZmZXIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5kZWxldGVS
ZW5kZXJidWZmZXIobV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAgIG1fZGVwdGhCdWZmZXIgPSAwOwot
ICAgIH0KLSAgICBpZiAobV9kZXN0VGV4dHVyZSkgewotICAgICAgICBtX2NvbnRleHQtPmRlbGV0
ZVRleHR1cmUobV9kZXN0VGV4dHVyZSk7Ci0gICAgICAgIG1fZGVzdFRleHR1cmUgPSAwOwotICAg
IH0KLSAgICBkZWxldGVNdWx0aXNhbXBsZVJlbmRlckJ1ZmZlcnMoKTsKLX0KLQotdm9pZCBGRUN1
c3RvbUZpbHRlcjo6ZGVsZXRlTXVsdGlzYW1wbGVSZW5kZXJCdWZmZXJzKCkKLXsKLSAgICBpZiAo
bV9tdWx0aXNhbXBsZUZyYW1lQnVmZmVyKSB7Ci0gICAgICAgIC8vIE1ha2Ugc3VyZSB0byB1bmJp
bmQgYW55IGZyYW1lYnVmZmVyIGZyb20gdGhlIGNvbnRleHQgZmlyc3QsIG90aGVyd2lzZQotICAg
ICAgICAvLyBzb21lIHBsYXRmb3JtcyBtaWdodCByZWZ1c2UgdG8gYmluZCB0aGUgc2FtZSBidWZm
ZXIgaWQgYWdhaW4uCi0gICAgICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgMCk7Ci0gICAgICAgIG1fY29udGV4dC0+ZGVsZXRlRnJh
bWVidWZmZXIobV9tdWx0aXNhbXBsZUZyYW1lQnVmZmVyKTsKLSAgICAgICAgbV9tdWx0aXNhbXBs
ZUZyYW1lQnVmZmVyID0gMDsKLSAgICB9Ci0gICAgaWYgKG1fbXVsdGlzYW1wbGVSZW5kZXJCdWZm
ZXIpIHsKLSAgICAgICAgbV9jb250ZXh0LT5kZWxldGVSZW5kZXJidWZmZXIobV9tdWx0aXNhbXBs
ZVJlbmRlckJ1ZmZlcik7Ci0gICAgICAgIG1fbXVsdGlzYW1wbGVSZW5kZXJCdWZmZXIgPSAwOwot
ICAgIH0KLSAgICBpZiAobV9tdWx0aXNhbXBsZURlcHRoQnVmZmVyKSB7Ci0gICAgICAgIG1fY29u
dGV4dC0+ZGVsZXRlUmVuZGVyYnVmZmVyKG1fbXVsdGlzYW1wbGVEZXB0aEJ1ZmZlcik7Ci0gICAg
ICAgIG1fbXVsdGlzYW1wbGVEZXB0aEJ1ZmZlciA9IDA7Ci0gICAgfQogfQogCiB2b2lkIEZFQ3Vz
dG9tRmlsdGVyOjpwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKQpAQCAtMTY5LDQyOCArNjIsMzcgQEAg
dm9pZCBGRUN1c3RvbUZpbHRlcjo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICAgICAgY2xl
YXJTaGFkZXJSZXN1bHQoKTsKIH0KIAotdm9pZCBGRUN1c3RvbUZpbHRlcjo6Y2xlYXJTaGFkZXJS
ZXN1bHQoKQotewotICAgIGNsZWFyUmVzdWx0KCk7Ci0gICAgVWludDhDbGFtcGVkQXJyYXkqIGRz
dFBpeGVsQXJyYXkgPSBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwotICAgIGlmICgh
ZHN0UGl4ZWxBcnJheSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgRmlsdGVyRWZmZWN0KiBpbiA9
IGlucHV0RWZmZWN0KDApOwotICAgIHNldElzQWxwaGFJbWFnZShpbi0+aXNBbHBoYUltYWdlKCkp
OwotICAgIEludFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0
SW1hZ2VEYXRhKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKLSAgICBpbi0+Y29weVVubXVsdGlw
bGllZEltYWdlKGRzdFBpeGVsQXJyYXksIGVmZmVjdERyYXdpbmdSZWN0KTsKLX0KLQotdm9pZCBG
RUN1c3RvbUZpbHRlcjo6ZHJhd0ZpbHRlck1lc2goUGxhdGZvcm0zRE9iamVjdCBpbnB1dFRleHR1
cmUpCi17Ci0gICAgYm9vbCBtdWx0aXNhbXBsZSA9IGNhblVzZU11bHRpc2FtcGxlQnVmZmVycygp
OwotICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFN
RUJVRkZFUiwgbXVsdGlzYW1wbGUgPyBtX211bHRpc2FtcGxlRnJhbWVCdWZmZXIgOiBtX2ZyYW1l
QnVmZmVyKTsKLSAgICBtX2NvbnRleHQtPnZpZXdwb3J0KDAsIDAsIG1fY29udGV4dFNpemUud2lk
dGgoKSwgbV9jb250ZXh0U2l6ZS5oZWlnaHQoKSk7Ci0gICAgCi0gICAgbV9jb250ZXh0LT5jbGVh
ckNvbG9yKDAsIDAsIDAsIDApOwotICAgIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0
M0Q6OkNPTE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQlVGRkVSX0JJ
VCk7Ci0gICAgCi0gICAgYmluZFByb2dyYW1BbmRCdWZmZXJzKGlucHV0VGV4dHVyZSk7Ci0gICAg
bV9jb250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgbV9t
ZXNoLT5pbmRpY2VzQ291bnQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAw
KTsKLSAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGVzKCk7Ci0KLSAgICBpZiAobXVsdGlzYW1wbGUp
Ci0gICAgICAgIHJlc29sdmVNdWx0aXNhbXBsZUJ1ZmZlcigpOwotfQotCi1ib29sIEZFQ3VzdG9t
RmlsdGVyOjpwcmVwYXJlRm9yRHJhd2luZyhDdXN0b21GaWx0ZXJEcmF3VHlwZSBmaWx0ZXJEcmF3
VHlwZSkKLXsKLSAgICBpZiAoIW1fY29udGV4dCAmJiAhaW5pdGlhbGl6ZUNvbnRleHQoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7
Ci0KLSAgICAvLyBJZiB0aGUgc2hhZGVyIGhhZCBjb21waWxlciBlcnJvcnMgd2UgY2Fubm90IGRy
YXcgYW55dGhpbmcuCi0gICAgaWYgKCFtX2NvbXBpbGVkUHJvZ3JhbS0+aXNJbml0aWFsaXplZCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gT25seSBhbGxvY2F0ZSBhIHRl
eHR1cmUgaWYgdGhlIHByb2dyYW0gbmVlZHMgb25lIGFuZCB0aGUgY2FsbGVyIGRvZXNuJ3QgYWxs
b2NhdGUgb25lIGJ5IGl0c2VsZi4KLSAgICBpZiAoKHByb2dyYW1OZWVkc0lucHV0VGV4dHVyZSgp
ICYmIChmaWx0ZXJEcmF3VHlwZSA9PSBORUVEU19JTlBVVF9URVhUVVJFKSAmJiAhZW5zdXJlSW5w
dXRUZXh0dXJlKCkpCi0gICAgICAgIHx8ICFlbnN1cmVGcmFtZUJ1ZmZlcigpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVDdXN0b21G
aWx0ZXI6OnByb2dyYW1OZWVkc0lucHV0VGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1f
Y29tcGlsZWRQcm9ncmFtLmdldCgpKTsKLSAgICByZXR1cm4gbV9jb21waWxlZFByb2dyYW0tPnNh
bXBsZXJMb2NhdGlvbigpICE9IC0xOwotfQotCiBib29sIEZFQ3VzdG9tRmlsdGVyOjphcHBseVNo
YWRlcigpCiB7Ci0gICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBtX3ZhbGlk
YXRlZFByb2dyYW0tPnByb2dyYW1JbmZvKCkucHJvZ3JhbVR5cGUoKSA9PSBQUk9HUkFNX1RZUEVf
QkxFTkRTX0VMRU1FTlRfVEVYVFVSRSA/IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
IDogY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBVaW50OENsYW1wZWRBcnJh
eSogZHN0UGl4ZWxBcnJheSA9IG1fY3VzdG9tRmlsdGVyUmVuZGVyZXItPnByZW11bHRpcGxpZWRB
bHBoYSgpID8gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkgOiBjcmVhdGVVbm11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOwogICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgaWYgKCFwcmVwYXJlRm9yRHJhd2luZygpKQorICAgIGlmICghbV9j
dXN0b21GaWx0ZXJSZW5kZXJlci0+cHJlcGFyZUZvckRyYXdpbmcoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgRmlsdGVyRWZmZWN0KiBpbiA9IGlucHV0RWZmZWN0KDApOwogICAgIElu
dFJlY3QgZWZmZWN0RHJhd2luZ1JlY3QgPSByZXF1ZXN0ZWRSZWdpb25PZklucHV0SW1hZ2VEYXRh
KGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKTsKICAgICBJbnRTaXplIG5ld0NvbnRleHRTaXplKGVm
ZmVjdERyYXdpbmdSZWN0LnNpemUoKSk7Ci0gICAgaWYgKCFyZXNpemVDb250ZXh0SWZOZWVkZWQo
bmV3Q29udGV4dFNpemUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib29sIG5lZWRz
SW5wdXRUZXh0dXJlID0gcHJvZ3JhbU5lZWRzSW5wdXRUZXh0dXJlKCk7Ci0gICAgaWYgKG5lZWRz
SW5wdXRUZXh0dXJlKSB7Ci0gICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc3JjUGl4
ZWxBcnJheSA9IGluLT5hc1VubXVsdGlwbGllZEltYWdlKGVmZmVjdERyYXdpbmdSZWN0KTsKLSAg
ICAgICAgdXBsb2FkSW5wdXRUZXh0dXJlKHNyY1BpeGVsQXJyYXkuZ2V0KCkpOwotICAgIH0KLSAg
ICBkcmF3RmlsdGVyTWVzaChuZWVkc0lucHV0VGV4dHVyZSA/IG1faW5wdXRUZXh0dXJlIDogMCk7
Ci0KLSAgICBBU1NFUlQoc3RhdGljX2Nhc3Q8c2l6ZV90PihuZXdDb250ZXh0U2l6ZS53aWR0aCgp
ICogbmV3Q29udGV4dFNpemUuaGVpZ2h0KCkgKiA0KSA9PSBkc3RQaXhlbEFycmF5LT5sZW5ndGgo
KSk7Ci0gICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKDAsIDAsIG5ld0NvbnRleHRTaXplLndpZHRo
KCksIG5ld0NvbnRleHRTaXplLmhlaWdodCgpLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIGRzdFBpeGVsQXJyYXktPmRhdGEoKSk7Ci0K
LSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUN1c3RvbUZpbHRlcjo6aW5pdGlhbGl6ZUNv
bnRleHQoKQotewotICAgIEFTU0VSVCghbV9jb250ZXh0LmdldCgpKTsKLSAgICBtX2NvbnRleHQg
PSBtX2dsb2JhbENvbnRleHQtPmNvbnRleHQoKTsKLSAgICBpZiAoIW1fY29udGV4dCkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0g
ICAgbV9jb21waWxlZFByb2dyYW0gPSBtX3ZhbGlkYXRlZFByb2dyYW0tPmNvbXBpbGVkUHJvZ3Jh
bSgpOwotCi0gICAgLy8gRklYTUU6IFNoYXJpbmcgdGhlIG1lc2ggd291bGQganVzdCBzYXZlIHRo
ZSB0aW1lIG5lZWRlZCB0byB1cGxvYWQgaXQgdG8gdGhlIEdQVSwgc28gSSBhc3N1bWUgd2UgY291
bGQKLSAgICAvLyBiZW5jaG1hcmsgdGhhdCBmb3IgcGVyZm9ybWFuY2UuCi0gICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NDI5Ci0gICAgbV9tZXNoID0gQ3Vz
dG9tRmlsdGVyTWVzaDo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSwgbV9tZXNoQ29sdW1ucywgbV9t
ZXNoUm93cywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UmVj
dCgwLCAwLCAxLCAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9t
ZXNoVHlwZSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBGRUN1c3RvbUZpbHRlcjo6
ZW5zdXJlSW5wdXRUZXh0dXJlKCkKLXsKLSAgICBpZiAoIW1faW5wdXRUZXh0dXJlKQotICAgICAg
ICBtX2lucHV0VGV4dHVyZSA9IG1fY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOwotICAgIHJldHVy
biBtX2lucHV0VGV4dHVyZTsKLX0KLQotdm9pZCBGRUN1c3RvbUZpbHRlcjo6dXBsb2FkSW5wdXRU
ZXh0dXJlKFVpbnQ4Q2xhbXBlZEFycmF5KiBzcmNQaXhlbEFycmF5KQotewotICAgIG1fY29udGV4
dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1faW5wdXRUZXh0
dXJlKTsKLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBtX2NvbnRleHRTaXplLndpZHRoKCks
IG1fY29udGV4dFNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFw
aGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgc3JjUGl4ZWxBcnJheS0+ZGF0YSgpKTsKLX0K
LQotYm9vbCBGRUN1c3RvbUZpbHRlcjo6ZW5zdXJlRnJhbWVCdWZmZXIoKQotewotICAgIGlmICgh
bV9mcmFtZUJ1ZmZlcikKLSAgICAgICAgbV9mcmFtZUJ1ZmZlciA9IG1fY29udGV4dC0+Y3JlYXRl
RnJhbWVidWZmZXIoKTsKLSAgICBpZiAoIW1fZGVwdGhCdWZmZXIpCi0gICAgICAgIG1fZGVwdGhC
dWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZVJlbmRlcmJ1ZmZlcigpOwotICAgIGlmICghbV9kZXN0
VGV4dHVyZSkKLSAgICAgICAgbV9kZXN0VGV4dHVyZSA9IG1fY29udGV4dC0+Y3JlYXRlVGV4dHVy
ZSgpOwotICAgIHJldHVybiBtX2ZyYW1lQnVmZmVyICYmIG1fZGVwdGhCdWZmZXIgJiYgbV9kZXN0
VGV4dHVyZTsKLX0KLQotYm9vbCBGRUN1c3RvbUZpbHRlcjo6Y3JlYXRlTXVsdGlzYW1wbGVCdWZm
ZXIoKQotewotICAgIEFTU0VSVCghbV90cmllZE11bHRpc2FtcGxlQnVmZmVyKTsKLSAgICBtX3Ry
aWVkTXVsdGlzYW1wbGVCdWZmZXIgPSB0cnVlOwotCi0gICAgRXh0ZW5zaW9uczNEKiBleHRlbnNp
b25zID0gbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCk7Ci0gICAgaWYgKCFleHRlbnNpb25zCi0g
ICAgICAgIHx8ICFleHRlbnNpb25zLT5tYXlTdXBwb3J0TXVsdGlzYW1wbGluZygpCi0gICAgICAg
IHx8ICFleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfQU5HTEVfZnJhbWVidWZmZXJfbXVsdGlzYW1w
bGUiKQotICAgICAgICB8fCAhZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0FOR0xFX2ZyYW1lYnVm
ZmVyX2JsaXQiKQotICAgICAgICB8fCAhZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX09FU19yZ2I4
X3JnYmE4IikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGV4dGVuc2lvbnMtPmVuc3Vy
ZUVuYWJsZWQoIkdMX0FOR0xFX2ZyYW1lYnVmZmVyX2JsaXQiKTsKLSAgICBleHRlbnNpb25zLT5l
bnN1cmVFbmFibGVkKCJHTF9BTkdMRV9mcmFtZWJ1ZmZlcl9tdWx0aXNhbXBsZSIpOwotICAgIGV4
dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdMX09FU19yZ2I4X3JnYmE4Iik7Ci0KLSAgICBpZiAo
IW1fbXVsdGlzYW1wbGVGcmFtZUJ1ZmZlcikKLSAgICAgICAgbV9tdWx0aXNhbXBsZUZyYW1lQnVm
ZmVyID0gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwotICAgIGlmICghbV9tdWx0aXNh
bXBsZVJlbmRlckJ1ZmZlcikKLSAgICAgICAgbV9tdWx0aXNhbXBsZVJlbmRlckJ1ZmZlciA9IG1f
Y29udGV4dC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0gICAgaWYgKCFtX211bHRpc2FtcGxlRGVw
dGhCdWZmZXIpCi0gICAgICAgIG1fbXVsdGlzYW1wbGVEZXB0aEJ1ZmZlciA9IG1fY29udGV4dC0+
Y3JlYXRlUmVuZGVyYnVmZmVyKCk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBGRUN1
c3RvbUZpbHRlcjo6cmVzb2x2ZU11bHRpc2FtcGxlQnVmZmVyKCkKLXsKLSAgICBBU1NFUlQobV90
cmllZE11bHRpc2FtcGxlQnVmZmVyICYmIG1fbXVsdGlzYW1wbGVGcmFtZUJ1ZmZlciAmJiBtX211
bHRpc2FtcGxlUmVuZGVyQnVmZmVyICYmIG1fbXVsdGlzYW1wbGVEZXB0aEJ1ZmZlcik7Ci0gICAg
bV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoRXh0ZW5zaW9uczNEOjpSRUFEX0ZSQU1FQlVGRkVS
LCBtX211bHRpc2FtcGxlRnJhbWVCdWZmZXIpOwotICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKEV4dGVuc2lvbnMzRDo6RFJBV19GUkFNRUJVRkZFUiwgbV9mcmFtZUJ1ZmZlcik7CiAKLSAg
ICBBU1NFUlQobV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkpOwotICAgIG1fY29udGV4dC0+Z2V0
RXh0ZW5zaW9ucygpLT5ibGl0RnJhbWVidWZmZXIoMCwgMCwgbV9jb250ZXh0U2l6ZS53aWR0aCgp
LCBtX2NvbnRleHRTaXplLmhlaWdodCgpLCAwLCAwLCBtX2NvbnRleHRTaXplLndpZHRoKCksIG1f
Y29udGV4dFNpemUuaGVpZ2h0KCksIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklU
LCBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVCk7CisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFy
cmF5PiBzcmNQaXhlbEFycmF5OworICAgIGlmIChtX2N1c3RvbUZpbHRlclJlbmRlcmVyLT5wcm9n
cmFtTmVlZHNJbnB1dFRleHR1cmUoKSkKKyAgICAgICAgc3JjUGl4ZWxBcnJheSA9IGluLT5hc1Vu
bXVsdGlwbGllZEltYWdlKGVmZmVjdERyYXdpbmdSZWN0KTsKIAotICAgIG1fY29udGV4dC0+Ymlu
ZEZyYW1lYnVmZmVyKEV4dGVuc2lvbnMzRDo6UkVBRF9GUkFNRUJVRkZFUiwgMCk7Ci0gICAgbV9j
b250ZXh0LT5iaW5kRnJhbWVidWZmZXIoRXh0ZW5zaW9uczNEOjpEUkFXX0ZSQU1FQlVGRkVSLCAw
KTsKLSAgICAKLSAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIG1fZnJhbWVCdWZmZXIpOworICAgIHJldHVybiBtX2N1c3RvbUZpbHRl
clJlbmRlcmVyLT5yZW5kZXIoc3JjUGl4ZWxBcnJheS5nZXQoKSwgZHN0UGl4ZWxBcnJheSwgbmV3
Q29udGV4dFNpemUpOwogfQogCi1ib29sIEZFQ3VzdG9tRmlsdGVyOjpjYW5Vc2VNdWx0aXNhbXBs
ZUJ1ZmZlcnMoKSBjb25zdAotewotICAgIHJldHVybiBtX3RyaWVkTXVsdGlzYW1wbGVCdWZmZXIg
JiYgbV9tdWx0aXNhbXBsZUZyYW1lQnVmZmVyICYmIG1fbXVsdGlzYW1wbGVSZW5kZXJCdWZmZXIg
JiYgbV9tdWx0aXNhbXBsZURlcHRoQnVmZmVyOwotfQotCi1ib29sIEZFQ3VzdG9tRmlsdGVyOjpy
ZXNpemVNdWx0aXNhbXBsZUJ1ZmZlcnMoY29uc3QgSW50U2l6ZSYgbmV3Q29udGV4dFNpemUpCi17
Ci0gICAgaWYgKCFtX3RyaWVkTXVsdGlzYW1wbGVCdWZmZXIgJiYgIWNyZWF0ZU11bHRpc2FtcGxl
QnVmZmVyKCkpCi0gICAgICAgICByZXR1cm4gZmFsc2U7Ci0gCi0gICAgaWYgKCFjYW5Vc2VNdWx0
aXNhbXBsZUJ1ZmZlcnMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaW50IG1heFN1
cHBvcnRlZFNhbXBsZUNvdW50ID0gMDsKLSAgICBtX2NvbnRleHQtPmdldEludGVnZXJ2KEV4dGVu
c2lvbnMzRDo6TUFYX1NBTVBMRVMsICZtYXhTdXBwb3J0ZWRTYW1wbGVDb3VudCk7Ci0gICAgaW50
IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oa01heFNhbXBsZUNvdW50LCBtYXhTdXBwb3J0ZWRTYW1w
bGVDb3VudCk7Ci0gICAgaWYgKCFzYW1wbGVDb3VudCkgewotICAgICAgICBkZWxldGVNdWx0aXNh
bXBsZVJlbmRlckJ1ZmZlcnMoKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAg
IEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOwot
ICAgIEFTU0VSVChleHRlbnNpb25zKTsKLSAgICAKLSAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1
ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGcmFtZUJ1
ZmZlcik7Ci0KLSAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0
M0Q6OlJFTkRFUkJVRkZFUiwgbV9tdWx0aXNhbXBsZVJlbmRlckJ1ZmZlcik7Ci0gICAgZXh0ZW5z
aW9ucy0+cmVuZGVyYnVmZmVyU3RvcmFnZU11bHRpc2FtcGxlKEdyYXBoaWNzQ29udGV4dDNEOjpS
RU5ERVJCVUZGRVIsIHNhbXBsZUNvdW50LCBFeHRlbnNpb25zM0Q6OlJHQkE4X09FUywgbmV3Q29u
dGV4dFNpemUud2lkdGgoKSwgbmV3Q29udGV4dFNpemUuaGVpZ2h0KCkpOwotICAgIG1fY29udGV4
dC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVSZW5kZXJCdWZmZXIpOwotCi0gICAgbV9jb250
ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1f
bXVsdGlzYW1wbGVEZXB0aEJ1ZmZlcik7Ci0gICAgZXh0ZW5zaW9ucy0+cmVuZGVyYnVmZmVyU3Rv
cmFnZU11bHRpc2FtcGxlKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIHNhbXBsZUNv
dW50LCBHcmFwaGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTYsIG5ld0NvbnRleHRTaXpl
LndpZHRoKCksIG5ld0NvbnRleHRTaXplLmhlaWdodCgpKTsKLSAgICBtX2NvbnRleHQtPmZyYW1l
YnVmZmVyUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkRFUFRIX0FUVEFDSE1FTlQsIEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJC
VUZGRVIsIG1fbXVsdGlzYW1wbGVEZXB0aEJ1ZmZlcik7Ci0KLSAgICBtX2NvbnRleHQtPmJpbmRS
ZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7Ci0KLSAgICBp
ZiAobV9jb250ZXh0LT5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpG
UkFNRUJVRkZFUikgIT0gR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKSB7
Ci0gICAgICAgIGRlbGV0ZU11bHRpc2FtcGxlUmVuZGVyQnVmZmVycygpOwotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgRkVDdXN0b21G
aWx0ZXI6OnJlc2l6ZUNvbnRleHRJZk5lZWRlZChjb25zdCBJbnRTaXplJiBuZXdDb250ZXh0U2l6
ZSkKLXsKLSAgICBpZiAobmV3Q29udGV4dFNpemUuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgaWYgKG1fY29udGV4dFNpemUgPT0gbmV3Q29udGV4dFNpemUpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgaW50IG1heFRleHR1cmVTaXplID0gMDsKLSAgICBtX2NvbnRl
eHQtPmdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVEVYVFVSRV9TSVpFLCAmbWF4
VGV4dHVyZVNpemUpOwotICAgIGlmIChuZXdDb250ZXh0U2l6ZS5oZWlnaHQoKSA+IG1heFRleHR1
cmVTaXplIHx8IG5ld0NvbnRleHRTaXplLndpZHRoKCkgPiBtYXhUZXh0dXJlU2l6ZSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHJlc2l6ZUNvbnRleHQobmV3Q29udGV4dFNp
emUpOwotfQotCi1ib29sIEZFQ3VzdG9tRmlsdGVyOjpyZXNpemVDb250ZXh0KGNvbnN0IEludFNp
emUmIG5ld0NvbnRleHRTaXplKQotewotICAgIGJvb2wgbXVsdGlzYW1wbGUgPSByZXNpemVNdWx0
aXNhbXBsZUJ1ZmZlcnMobmV3Q29udGV4dFNpemUpOwotCi0gICAgbV9jb250ZXh0LT5iaW5kRnJh
bWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2ZyYW1lQnVmZmVyKTsK
LSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBtX2Rlc3RUZXh0dXJlKTsKLSAgICAvLyBXZSBhcmUgZ29pbmcgdG8gY2xlYXIgdGhlIG91dHB1
dCBidWZmZXIgYW55d2F5LCBzbyB3ZSBjYW4gc2FmZWx5IGluaXRpYWxpemUgdGhlIGRlc3RpbmF0
aW9uIHRleHR1cmUgd2l0aCBnYXJiYWdlIGRhdGEuCi0jaWYgUExBVEZPUk0oQ0hST01JVU0pCi0g
ICAgLy8gRklYTUU6IEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJERGlyZWN0IGlzIG5vdCBp
bXBsZW1lbnRlZCBvbiBDaHJvbWl1bS4KLSAgICBtX2NvbnRleHQtPnRleEltYWdlMkQoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBuZXdD
b250ZXh0U2l6ZS53aWR0aCgpLCBuZXdDb250ZXh0U2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlJHQkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKTsKLSNl
bHNlCi0gICAgbV9jb250ZXh0LT50ZXhJbWFnZTJERGlyZWN0KEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgbmV3Q29udGV4dFNpemUud2lk
dGgoKSwgbmV3Q29udGV4dFNpemUuaGVpZ2h0KCksIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JB
LCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllURSwgMCk7Ci0jZW5kaWYKLSAgICBtX2Nv
bnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZF
UiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFDSE1FTlQwLCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgbV9kZXN0VGV4dHVyZSwgMCk7Ci0gCi0gICAgLy8gV2UgZG9uJ3QgbmVl
ZCB0aGUgZGVwdGggYnVmZmVyIGZvciB0aGUgdGV4dHVyZSBmcmFtZWJ1ZmZlciwgaWYgd2UgYWxy
ZWFkeQotICAgIC8vIGhhdmUgYSBtdWx0aXNhbXBsZSBidWZmZXIuCi0gICAgaWYgKCFtdWx0aXNh
bXBsZSkgewotICAgICAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250
ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9kZXB0aEJ1ZmZlcik7Ci0gICAgICAgIG1fY29udGV4dC0+
cmVuZGVyYnVmZmVyU3RvcmFnZShHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCBHcmFw
aGljc0NvbnRleHQzRDo6REVQVEhfQ09NUE9ORU5UMTYsIG5ld0NvbnRleHRTaXplLndpZHRoKCks
IG5ld0NvbnRleHRTaXplLmhlaWdodCgpKTsKLSAgICAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZl
clJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29u
dGV4dDNEOjpERVBUSF9BVFRBQ0hNRU5ULCBHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVS
LCBtX2RlcHRoQnVmZmVyKTsKLSAgICB9Ci0KLSAgICBpZiAobV9jb250ZXh0LT5jaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUikgIT0gR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSX0NPTVBMRVRFKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAobXVsdGlzYW1wbGUpIHsKLSAgICAgICAgLy8gQ2xlYXIgdGhlIGZyYW1lYnVmZmVy
IGZpcnN0LCBvdGhlcndpc2UgdGhlIGZpcnN0IGJsaXQgd2lsbCBmYWlsLgotICAgICAgICBtX2Nv
bnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci0gICAgICAgIG1fY29udGV4dC0+Y2xlYXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOwotICAgIH0KLQotICAgIG1fY29u
dGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAw
KTsKLSAgICAKLSAgICBtX2NvbnRleHRTaXplID0gbmV3Q29udGV4dFNpemU7Ci0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgRkVDdXN0b21GaWx0ZXI6OmJpbmRWZXJ0ZXhBdHRyaWJ1dGUoaW50
IGF0dHJpYnV0ZUxvY2F0aW9uLCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0g
ICAgaWYgKGF0dHJpYnV0ZUxvY2F0aW9uICE9IC0xKSB7Ci0gICAgICAgIG1fY29udGV4dC0+dmVy
dGV4QXR0cmliUG9pbnRlcihhdHRyaWJ1dGVMb2NhdGlvbiwgc2l6ZSwgR3JhcGhpY3NDb250ZXh0
M0Q6OkZMT0FULCBmYWxzZSwgbV9tZXNoLT5ieXRlc1BlclZlcnRleCgpLCBvZmZzZXQpOwotICAg
ICAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGF0dHJpYnV0ZUxvY2F0aW9u
KTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDdXN0b21GaWx0ZXI6OnVuYmluZFZlcnRleEF0dHJpYnV0
ZShpbnQgYXR0cmlidXRlTG9jYXRpb24pCi17Ci0gICAgaWYgKGF0dHJpYnV0ZUxvY2F0aW9uICE9
IC0xKQotICAgICAgICBtX2NvbnRleHQtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWJ1
dGVMb2NhdGlvbik7Ci19Ci0KLXZvaWQgRkVDdXN0b21GaWx0ZXI6OmJpbmRQcm9ncmFtQXJyYXlQ
YXJhbWV0ZXJzKGludCB1bmlmb3JtTG9jYXRpb24sIEN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVy
KiBhcnJheVBhcmFtZXRlcikKLXsKLSAgICB1bnNpZ25lZCBwYXJhbWV0ZXJTaXplID0gYXJyYXlQ
YXJhbWV0ZXItPnNpemUoKTsKLSAgICBWZWN0b3I8R0MzRGZsb2F0PiBmbG9hdFZlY3RvcjsKLQot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJTaXplOyArK2kpCi0gICAgICAg
IGZsb2F0VmVjdG9yLmFwcGVuZChhcnJheVBhcmFtZXRlci0+dmFsdWVBdChpKSk7Ci0KLSAgICBt
X2NvbnRleHQtPnVuaWZvcm0xZnYodW5pZm9ybUxvY2F0aW9uLCBwYXJhbWV0ZXJTaXplLCBmbG9h
dFZlY3Rvci5kYXRhKCkpOwotfQotCi12b2lkIEZFQ3VzdG9tRmlsdGVyOjpiaW5kUHJvZ3JhbU51
bWJlclBhcmFtZXRlcnMoaW50IHVuaWZvcm1Mb2NhdGlvbiwgQ3VzdG9tRmlsdGVyTnVtYmVyUGFy
YW1ldGVyKiBudW1iZXJQYXJhbWV0ZXIpCi17Ci0gICAgc3dpdGNoIChudW1iZXJQYXJhbWV0ZXIt
PnNpemUoKSkgewotICAgIGNhc2UgMToKLSAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYodW5p
Zm9ybUxvY2F0aW9uLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMCkpOwotICAgICAgICBicmVh
azsKLSAgICBjYXNlIDI6Ci0gICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKHVuaWZvcm1Mb2Nh
dGlvbiwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDApLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVl
QXQoMSkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDM6Ci0gICAgICAgIG1fY29udGV4dC0+
dW5pZm9ybTNmKHVuaWZvcm1Mb2NhdGlvbiwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDApLCBu
dW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMSksIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgyKSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgNDoKLSAgICAgICAgbV9jb250ZXh0LT51bmlmb3Jt
NGYodW5pZm9ybUxvY2F0aW9uLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMCksIG51bWJlclBh
cmFtZXRlci0+dmFsdWVBdCgxKSwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDIpLCBudW1iZXJQ
YXJhbWV0ZXItPnZhbHVlQXQoMykpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDdXN0b21GaWx0
ZXI6OmJpbmRQcm9ncmFtVHJhbnNmb3JtUGFyYW1ldGVyKGludCB1bmlmb3JtTG9jYXRpb24sIEN1
c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlciogdHJhbnNmb3JtUGFyYW1ldGVyKQotewotICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJpeDsKLSAgICBpZiAobV9jb250ZXh0U2l6ZS53aWR0
aCgpICYmIG1fY29udGV4dFNpemUuaGVpZ2h0KCkpIHsKLSAgICAgICAgLy8gVGhlIHZpZXdwb3J0
IGlzIGEgYm94IHdpdGggdGhlIHNpemUgb2YgMSB1bml0LCBzbyB3ZSBhcmUgc2NhbGxpbmcgdXAg
aGVyZSB0byBtYWtlIHN1cmUgdGhhdCB0cmFuc2xhdGlvbnMgaGFwcGVuIHVzaW5nIHJlYWwgcGl4
ZWwKLSAgICAgICAgLy8gdW5pdHMuIEF0IHRoZSBlbmQgd2Ugc2NhbGUgYmFjayBkb3duIGluIG9y
ZGVyIHRvIG1hcCBpdCBiYWNrIHRvIHRoZSBvcmlnaW5hbCBib3guIE5vdGUgdGhhdCB0cmFuc2Zv
cm1zIGNvbWUgaW4gcmV2ZXJzZSBvcmRlciwgYmVjYXVzZSBpdCBpcyAKLSAgICAgICAgLy8gc3Vw
cG9zZWQgdG8gbXVsdGlwbHkgdG8gdGhlIGxlZnQgb2YgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB2
ZXJ0aWNlcy4KLSAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBvcmlnaW4gKDAsIDApIG9mIHRoZSB2
aWV3cG9ydCBpcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBjb250ZXh0LCBzbyB0aGVyZSdzIG5vIG5l
ZWQgdG8gY2hhbmdlIHRoZSBvcmlnaW4gb2YgdGhlIHRyYW5zZm9ybQotICAgICAgICAvLyBpbiBv
cmRlciB0byByb3RhdGUgYXJvdW5kIHRoZSBtaWRkbGUgb2YgbWVzaC4KLSAgICAgICAgbWF0cml4
LnNjYWxlM2QoMS4wIC8gbV9jb250ZXh0U2l6ZS53aWR0aCgpLCAxLjAgLyBtX2NvbnRleHRTaXpl
LmhlaWdodCgpLCAxKTsKLSAgICAgICAgdHJhbnNmb3JtUGFyYW1ldGVyLT5hcHBseVRyYW5zZm9y
bShtYXRyaXgsIG1fY29udGV4dFNpemUpOwotICAgICAgICBtYXRyaXguc2NhbGUzZChtX2NvbnRl
eHRTaXplLndpZHRoKCksIG1fY29udGV4dFNpemUuaGVpZ2h0KCksIDEpOwotICAgIH0KLSAgICBm
bG9hdCBnbE1hdHJpeFsxNl07Ci0gICAgbWF0cml4LnRvQ29sdW1uTWFqb3JGbG9hdEFycmF5KGds
TWF0cml4KTsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYodW5pZm9ybUxvY2F0aW9u
LCAxLCBmYWxzZSwgJmdsTWF0cml4WzBdKTsKLX0KLQotdm9pZCBGRUN1c3RvbUZpbHRlcjo6Ymlu
ZFByb2dyYW1QYXJhbWV0ZXJzKCkKLXsKLSAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byByZXNl
dCB1bmlmb3JtcyB0aGF0IGFyZSBub3Qgc3BlY2lmaWVkIGluIENTUy4gVGhpcyBpcyBuZWVkZWQg
dG8gYXZvaWQgdXNpbmcgdmFsdWVzCi0gICAgLy8gc2V0IGJ5IG90aGVyIHByZXZpb3VzIHJlbmRl
cmVkIGZpbHRlcnMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTc2NDQwCi0gICAgCi0gICAgc2l6ZV90IHBhcmFtZXRlcnNTaXplID0gbV9wYXJhbWV0ZXJz
LnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHBhcmFtZXRlcnNTaXplOyArK2kp
IHsKLSAgICAgICAgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyKiBwYXJhbWV0ZXIgPSBtX3BhcmFtZXRl
cnMuYXQoaSkuZ2V0KCk7Ci0gICAgICAgIGludCB1bmlmb3JtTG9jYXRpb24gPSBtX2NvbXBpbGVk
UHJvZ3JhbS0+dW5pZm9ybUxvY2F0aW9uQnlOYW1lKHBhcmFtZXRlci0+bmFtZSgpKTsKLSAgICAg
ICAgaWYgKHVuaWZvcm1Mb2NhdGlvbiA9PSAtMSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBzd2l0Y2ggKHBhcmFtZXRlci0+cGFyYW1ldGVyVHlwZSgpKSB7Ci0gICAgICAgIGNhc2Ug
Q3VzdG9tRmlsdGVyUGFyYW1ldGVyOjpBUlJBWToKLSAgICAgICAgICAgIGJpbmRQcm9ncmFtQXJy
YXlQYXJhbWV0ZXJzKHVuaWZvcm1Mb2NhdGlvbiwgc3RhdGljX2Nhc3Q8Q3VzdG9tRmlsdGVyQXJy
YXlQYXJhbWV0ZXIqPihwYXJhbWV0ZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEN1c3RvbUZpbHRlclBhcmFtZXRlcjo6TlVNQkVSOgotICAgICAgICAgICAgYmluZFByb2dy
YW1OdW1iZXJQYXJhbWV0ZXJzKHVuaWZvcm1Mb2NhdGlvbiwgc3RhdGljX2Nhc3Q8Q3VzdG9tRmls
dGVyTnVtYmVyUGFyYW1ldGVyKj4ocGFyYW1ldGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDdXN0b21GaWx0ZXJQYXJhbWV0ZXI6OlRSQU5TRk9STToKLSAgICAgICAgICAg
IGJpbmRQcm9ncmFtVHJhbnNmb3JtUGFyYW1ldGVyKHVuaWZvcm1Mb2NhdGlvbiwgc3RhdGljX2Nh
c3Q8Q3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKj4ocGFyYW1ldGVyKSk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBGRUN1c3RvbUZpbHRlcjo6
YmluZFByb2dyYW1BbmRCdWZmZXJzKFBsYXRmb3JtM0RPYmplY3QgaW5wdXRUZXh0dXJlKQordm9p
ZCBGRUN1c3RvbUZpbHRlcjo6Y2xlYXJTaGFkZXJSZXN1bHQoKQogewotICAgIEFTU0VSVChtX2Nv
bXBpbGVkUHJvZ3JhbS0+aXNJbml0aWFsaXplZCgpKTsKLQotICAgIG1fY29udGV4dC0+dXNlUHJv
Z3JhbShtX2NvbXBpbGVkUHJvZ3JhbS0+cHJvZ3JhbSgpKTsKLSAgICAKLSAgICBpZiAocHJvZ3Jh
bU5lZWRzSW5wdXRUZXh0dXJlKCkpIHsKLSAgICAgICAgLy8gV2Ugc2hvdWxkIGJlIGJpbmRpbmcg
dGhlIERPTSBlbGVtZW50IHRleHR1cmUgc2FtcGxlciBvbmx5IGlmIHRoZSBhdXRob3IgaXMgdXNp
bmcgdGhlIENTUyBtaXggZnVuY3Rpb24uCi0gICAgICAgIEFTU0VSVChtX3ZhbGlkYXRlZFByb2dy
YW0tPnByb2dyYW1JbmZvKCkucHJvZ3JhbVR5cGUoKSA9PSBQUk9HUkFNX1RZUEVfQkxFTkRTX0VM
RU1FTlRfVEVYVFVSRSk7Ci0gICAgICAgIEFTU0VSVChtX2NvbXBpbGVkUHJvZ3JhbS0+c2FtcGxl
ckxvY2F0aW9uKCkgIT0gLTEpOwotCi0gICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwotICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0x
aShtX2NvbXBpbGVkUHJvZ3JhbS0+c2FtcGxlckxvY2F0aW9uKCksIDApOwotICAgICAgICBtX2Nv
bnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBpbnB1dFRl
eHR1cmUpOwotICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdy
YXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgICAgICBtX2Nv
bnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RP
X0VER0UpOwotICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9jb21w
aWxlZFByb2dyYW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpICE9IC0xKSB7Ci0gICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHByb2plY3Rpb25NYXRyaXg7IAotICAgICAgICBvcnRob2dv
bmFsUHJvamVjdGlvbk1hdHJpeChwcm9qZWN0aW9uTWF0cml4LCAtMC41LCAwLjUsIC0wLjUsIDAu
NSk7Ci0gICAgICAgIGZsb2F0IGdsUHJvamVjdGlvbk1hdHJpeFsxNl07Ci0gICAgICAgIHByb2pl
Y3Rpb25NYXRyaXgudG9Db2x1bW5NYWpvckZsb2F0QXJyYXkoZ2xQcm9qZWN0aW9uTWF0cml4KTsK
LSAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KG1fY29tcGlsZWRQcm9ncmFtLT5w
cm9qZWN0aW9uTWF0cml4TG9jYXRpb24oKSwgMSwgZmFsc2UsICZnbFByb2plY3Rpb25NYXRyaXhb
MF0pOwotICAgIH0KLQotICAgIEFTU0VSVChtX21lc2hDb2x1bW5zKTsKLSAgICBBU1NFUlQobV9t
ZXNoUm93cyk7Ci0KLSAgICBpZiAobV9jb21waWxlZFByb2dyYW0tPm1lc2hTaXplTG9jYXRpb24o
KSAhPSAtMSkKLSAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobV9jb21waWxlZFByb2dyYW0t
Pm1lc2hTaXplTG9jYXRpb24oKSwgbV9tZXNoQ29sdW1ucywgbV9tZXNoUm93cyk7Ci0KLSAgICBp
ZiAobV9jb21waWxlZFByb2dyYW0tPnRpbGVTaXplTG9jYXRpb24oKSAhPSAtMSkKLSAgICAgICAg
bV9jb250ZXh0LT51bmlmb3JtMmYobV9jb21waWxlZFByb2dyYW0tPnRpbGVTaXplTG9jYXRpb24o
KSwgMS4wIC8gbV9tZXNoQ29sdW1ucywgMS4wIC8gbV9tZXNoUm93cyk7Ci0KLSAgICBpZiAobV9j
b21waWxlZFByb2dyYW0tPm1lc2hCb3hMb2NhdGlvbigpICE9IC0xKSB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBUaGlzIHdpbGwgY2hhbmdlIHdoZW4gZmlsdGVyIG1hcmdpbnMgd2lsbCBiZSBpbXBsZW1l
bnRlZCwKLSAgICAgICAgLy8gc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD03MTQwMAotICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm00ZihtX2NvbXBpbGVkUHJvZ3Jh
bS0+bWVzaEJveExvY2F0aW9uKCksIC0wLjUsIC0wLjUsIDEuMCwgMS4wKTsKLSAgICB9Ci0KLSAg
ICBpZiAobV9jb21waWxlZFByb2dyYW0tPnNhbXBsZXJTaXplTG9jYXRpb24oKSAhPSAtMSkKLSAg
ICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobV9jb21waWxlZFByb2dyYW0tPnNhbXBsZXJTaXpl
TG9jYXRpb24oKSwgbV9jb250ZXh0U2l6ZS53aWR0aCgpLCBtX2NvbnRleHRTaXplLmhlaWdodCgp
KTsKLSAgICAKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFS
UkFZX0JVRkZFUiwgbV9tZXNoLT52ZXJ0aWNlc0J1ZmZlck9iamVjdCgpKTsKLSAgICBtX2NvbnRl
eHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBt
X21lc2gtPmVsZW1lbnRzQnVmZmVyT2JqZWN0KCkpOwotCi0gICAgYmluZFZlcnRleEF0dHJpYnV0
ZShtX2NvbXBpbGVkUHJvZ3JhbS0+cG9zaXRpb25BdHRyaWJMb2NhdGlvbigpLCBQb3NpdGlvbkF0
dHJpYlNpemUsIFBvc2l0aW9uQXR0cmliT2Zmc2V0KTsKLSAgICBiaW5kVmVydGV4QXR0cmlidXRl
KG1fY29tcGlsZWRQcm9ncmFtLT50ZXhBdHRyaWJMb2NhdGlvbigpLCBUZXhBdHRyaWJTaXplLCBU
ZXhBdHRyaWJPZmZzZXQpOwotICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoZSBpbnRlcm5hbCB0
ZXggY29vcmQgYXR0cmlidXRlICJjc3NfYV90ZXhDb29yZCIuIAotICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDM1OAotICAgIGJpbmRWZXJ0ZXhBdHRyaWJ1
dGUobV9jb21waWxlZFByb2dyYW0tPmludGVybmFsVGV4Q29vcmRBdHRyaWJMb2NhdGlvbigpLCBU
ZXhBdHRyaWJTaXplLCBUZXhBdHRyaWJPZmZzZXQpOwotICAgIGJpbmRWZXJ0ZXhBdHRyaWJ1dGUo
bV9jb21waWxlZFByb2dyYW0tPm1lc2hBdHRyaWJMb2NhdGlvbigpLCBNZXNoQXR0cmliU2l6ZSwg
TWVzaEF0dHJpYk9mZnNldCk7Ci0gICAgaWYgKG1fbWVzaFR5cGUgPT0gQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uOjpERVRBQ0hFRCkKLSAgICAgICAgYmluZFZlcnRleEF0dHJpYnV0ZShtX2NvbXBpbGVk
UHJvZ3JhbS0+dHJpYW5nbGVBdHRyaWJMb2NhdGlvbigpLCBUcmlhbmdsZUF0dHJpYlNpemUsIFRy
aWFuZ2xlQXR0cmliT2Zmc2V0KTsKLSAgICAKLSAgICBiaW5kUHJvZ3JhbVBhcmFtZXRlcnMoKTsK
LX0KKyAgICBjbGVhclJlc3VsdCgpOworICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFy
cmF5ID0gY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBpZiAoIWRzdFBpeGVs
QXJyYXkpCisgICAgICAgIHJldHVybjsKIAotdm9pZCBGRUN1c3RvbUZpbHRlcjo6dW5iaW5kVmVy
dGV4QXR0cmlidXRlcygpCi17Ci0gICAgdW5iaW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQ
cm9ncmFtLT5wb3NpdGlvbkF0dHJpYkxvY2F0aW9uKCkpOwotICAgIHVuYmluZFZlcnRleEF0dHJp
YnV0ZShtX2NvbXBpbGVkUHJvZ3JhbS0+dGV4QXR0cmliTG9jYXRpb24oKSk7Ci0gICAgdW5iaW5k
VmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFtLT5pbnRlcm5hbFRleENvb3JkQXR0cmli
TG9jYXRpb24oKSk7Ci0gICAgdW5iaW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFt
LT5tZXNoQXR0cmliTG9jYXRpb24oKSk7Ci0gICAgaWYgKG1fbWVzaFR5cGUgPT0gQ3VzdG9tRmls
dGVyT3BlcmF0aW9uOjpERVRBQ0hFRCkKLSAgICAgICAgdW5iaW5kVmVydGV4QXR0cmlidXRlKG1f
Y29tcGlsZWRQcm9ncmFtLT50cmlhbmdsZUF0dHJpYkxvY2F0aW9uKCkpOworICAgIEZpbHRlckVm
ZmVjdCogaW4gPSBpbnB1dEVmZmVjdCgwKTsKKyAgICBzZXRJc0FscGhhSW1hZ2UoaW4tPmlzQWxw
aGFJbWFnZSgpKTsKKyAgICBJbnRSZWN0IGVmZmVjdERyYXdpbmdSZWN0ID0gcmVxdWVzdGVkUmVn
aW9uT2ZJbnB1dEltYWdlRGF0YShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSk7CisgICAgaW4tPmNv
cHlVbm11bHRpcGxpZWRJbWFnZShkc3RQaXhlbEFycmF5LCBlZmZlY3REcmF3aW5nUmVjdCk7CiB9
CiAKIHZvaWQgRkVDdXN0b21GaWx0ZXI6OmR1bXAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oCmluZGV4IDA5
ZGE1ZjFjN2Y3NDY2ODA5ZTkzYThiODg0ZmQyYTFkNTZiOGUxYjQuLjI3OTRiOTU3MDFlMDRlZWVi
ZmQ3ZWRjOGM5ZWU5OTY1YzI2ZmYxMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmgKQEAgLTMyLDM1ICsz
MiwxNyBAQAogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKSAmJiBVU0UoM0RfR1JBUEhJQ1MpCiAK
LSNpbmNsdWRlICJDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCIKICNpbmNsdWRlICJGaWx0ZXIuaCIK
ICNpbmNsdWRlICJGaWx0ZXJFZmZlY3QuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIK
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAKLW5hbWVzcGFjZSBKU0MgewotY2xhc3MgVWludDhD
bGFtcGVkQXJyYXk7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2FjaGVkU2hh
ZGVyOwotY2xhc3MgQ3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXI7Ci1jbGFzcyBDdXN0b21GaWx0
ZXJDb21waWxlZFByb2dyYW07Ci1jbGFzcyBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0OwotY2xh
c3MgQ3VzdG9tRmlsdGVyTWVzaDsKLWNsYXNzIEN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlcjsK
LWNsYXNzIEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcjsKLWNsYXNzIEN1c3RvbUZpbHRl
clZhbGlkYXRlZFByb2dyYW07Ci1jbGFzcyBEcmF3aW5nQnVmZmVyOwotY2xhc3MgR3JhcGhpY3ND
b250ZXh0M0Q7Ci1jbGFzcyBJbnRTaXplOworY2xhc3MgQ3VzdG9tRmlsdGVyUmVuZGVyZXI7CiAK
IGNsYXNzIEZFQ3VzdG9tRmlsdGVyIDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8RkVDdXN0b21GaWx0ZXI+IGNyZWF0ZShGaWx0ZXIqLCBDdXN0
b21GaWx0ZXJHbG9iYWxDb250ZXh0KiwgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQ
cm9ncmFtPiwgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYsCi0gICAgICAgICAgICAg
ICAgICAgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1lc2hDb2x1bW5zLCBDdXN0b21GaWx0
ZXJPcGVyYXRpb246Ok1lc2hCb3hUeXBlLCAKLSAgICAgICAgICAgICAgICAgICBDdXN0b21GaWx0
ZXJPcGVyYXRpb246Ok1lc2hUeXBlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUN1c3RvbUZp
bHRlcj4gY3JlYXRlKEZpbHRlciosIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUmVuZGVyZXI+KTsK
IAogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKICAgICB2aXJ0dWFs
IHZvaWQgZHVtcCgpOwpAQCAtNjgsNzAgKzUwLDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFRl
eHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSYsIGludCBpbmRlbnRp
b24pIGNvbnN0OwogCiBwcml2YXRlOgotICAgIEZFQ3VzdG9tRmlsdGVyKEZpbHRlciosIEN1c3Rv
bUZpbHRlckdsb2JhbENvbnRleHQqLCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlkYXRlZFBy
b2dyYW0+LCBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiwKLSAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBtZXNoUm93cywgdW5zaWduZWQgbWVzaENvbHVtbnMsIEN1c3RvbUZpbHRl
ck9wZXJhdGlvbjo6TWVzaEJveFR5cGUsIAotICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpbHRl
ck9wZXJhdGlvbjo6TWVzaFR5cGUpOworICAgIEZFQ3VzdG9tRmlsdGVyKEZpbHRlciosIFBhc3NS
ZWZQdHI8Q3VzdG9tRmlsdGVyUmVuZGVyZXI+KTsKICAgICB+RkVDdXN0b21GaWx0ZXIoKTsKLSAg
ICAKKwogICAgIGJvb2wgYXBwbHlTaGFkZXIoKTsKICAgICB2b2lkIGNsZWFyU2hhZGVyUmVzdWx0
KCk7Ci0gICAgYm9vbCBpbml0aWFsaXplQ29udGV4dCgpOwotICAgIAotICAgIGVudW0gQ3VzdG9t
RmlsdGVyRHJhd1R5cGUgewotICAgICAgICBORUVEU19JTlBVVF9URVhUVVJFLAotICAgICAgICBO
T19JTlBVVF9URVhUVVJFCi0gICAgfTsKLSAgICBib29sIHByZXBhcmVGb3JEcmF3aW5nKEN1c3Rv
bUZpbHRlckRyYXdUeXBlID0gTkVFRFNfSU5QVVRfVEVYVFVSRSk7Ci0KLSAgICB2b2lkIGRyYXdG
aWx0ZXJNZXNoKFBsYXRmb3JtM0RPYmplY3QgaW5wdXRUZXh0dXJlKTsKLSAgICBib29sIHByb2dy
YW1OZWVkc0lucHV0VGV4dHVyZSgpIGNvbnN0OwotICAgIGJvb2wgZW5zdXJlSW5wdXRUZXh0dXJl
KCk7Ci0gICAgdm9pZCB1cGxvYWRJbnB1dFRleHR1cmUoVWludDhDbGFtcGVkQXJyYXkqIHNyY1Bp
eGVsQXJyYXkpOwotICAgIGJvb2wgcmVzaXplQ29udGV4dElmTmVlZGVkKGNvbnN0IEludFNpemUm
KTsKLSAgICBib29sIHJlc2l6ZUNvbnRleHQoY29uc3QgSW50U2l6ZSYpOwotCi0gICAgYm9vbCBj
YW5Vc2VNdWx0aXNhbXBsZUJ1ZmZlcnMoKSBjb25zdDsKLSAgICBib29sIGNyZWF0ZU11bHRpc2Ft
cGxlQnVmZmVyKCk7Ci0gICAgYm9vbCByZXNpemVNdWx0aXNhbXBsZUJ1ZmZlcnMoY29uc3QgSW50
U2l6ZSYpOwotICAgIHZvaWQgcmVzb2x2ZU11bHRpc2FtcGxlQnVmZmVyKCk7Ci0gICAgdm9pZCBk
ZWxldGVNdWx0aXNhbXBsZVJlbmRlckJ1ZmZlcnMoKTsKLQotICAgIGJvb2wgZW5zdXJlRnJhbWVC
dWZmZXIoKTsKLSAgICB2b2lkIGRlbGV0ZVJlbmRlckJ1ZmZlcnMoKTsKLQotICAgIHZvaWQgYmlu
ZFZlcnRleEF0dHJpYnV0ZShpbnQgYXR0cmlidXRlTG9jYXRpb24sIHVuc2lnbmVkIHNpemUsIHVu
c2lnbmVkIG9mZnNldCk7Ci0gICAgdm9pZCB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUoaW50IGF0dHJp
YnV0ZUxvY2F0aW9uKTsKLSAgICB2b2lkIGJpbmRQcm9ncmFtQXJyYXlQYXJhbWV0ZXJzKGludCB1
bmlmb3JtTG9jYXRpb24sIEN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyKik7Ci0gICAgdm9pZCBi
aW5kUHJvZ3JhbU51bWJlclBhcmFtZXRlcnMoaW50IHVuaWZvcm1Mb2NhdGlvbiwgQ3VzdG9tRmls
dGVyTnVtYmVyUGFyYW1ldGVyKik7Ci0gICAgdm9pZCBiaW5kUHJvZ3JhbVRyYW5zZm9ybVBhcmFt
ZXRlcihpbnQgdW5pZm9ybUxvY2F0aW9uLCBDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIq
KTsKLSAgICB2b2lkIGJpbmRQcm9ncmFtUGFyYW1ldGVycygpOwotICAgIHZvaWQgYmluZFByb2dy
YW1BbmRCdWZmZXJzKFBsYXRmb3JtM0RPYmplY3QgaW5wdXRUZXh0dXJlKTsKLSAgICB2b2lkIHVu
YmluZFZlcnRleEF0dHJpYnV0ZXMoKTsKLSAgICAKLSAgICAvLyBObyBuZWVkIHRvIGtlZXAgYSBy
ZWZlcmVuY2UgaGVyZS4gSXQgaXMgb3duZWQgYnkgdGhlIFJlbmRlclZpZXcuCi0gICAgQ3VzdG9t
RmlsdGVyR2xvYmFsQ29udGV4dCogbV9nbG9iYWxDb250ZXh0OwotICAgIAotICAgIFJlZlB0cjxH
cmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwotICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJWYWxp
ZGF0ZWRQcm9ncmFtPiBtX3ZhbGlkYXRlZFByb2dyYW07Ci0gICAgUmVmUHRyPEN1c3RvbUZpbHRl
ckNvbXBpbGVkUHJvZ3JhbT4gbV9jb21waWxlZFByb2dyYW07Ci0gICAgUmVmUHRyPEN1c3RvbUZp
bHRlck1lc2g+IG1fbWVzaDsKLSAgICBJbnRTaXplIG1fY29udGV4dFNpemU7Ci0KLSAgICBQbGF0
Zm9ybTNET2JqZWN0IG1faW5wdXRUZXh0dXJlOwotICAgIFBsYXRmb3JtM0RPYmplY3QgbV9mcmFt
ZUJ1ZmZlcjsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IG1fZGVwdGhCdWZmZXI7Ci0gICAgUGxhdGZv
cm0zRE9iamVjdCBtX2Rlc3RUZXh0dXJlOwotCi0gICAgYm9vbCBtX3RyaWVkTXVsdGlzYW1wbGVC
dWZmZXI7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX211bHRpc2FtcGxlRnJhbWVCdWZmZXI7Ci0g
ICAgUGxhdGZvcm0zRE9iamVjdCBtX211bHRpc2FtcGxlUmVuZGVyQnVmZmVyOwotICAgIFBsYXRm
b3JtM0RPYmplY3QgbV9tdWx0aXNhbXBsZURlcHRoQnVmZmVyOwotCi0gICAgQ3VzdG9tRmlsdGVy
UGFyYW1ldGVyTGlzdCBtX3BhcmFtZXRlcnM7CiAKLSAgICB1bnNpZ25lZCBtX21lc2hSb3dzOwot
ICAgIHVuc2lnbmVkIG1fbWVzaENvbHVtbnM7Ci0gICAgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpN
ZXNoVHlwZSBtX21lc2hUeXBlOworICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJSZW5kZXJlcj4gbV9j
dXN0b21GaWx0ZXJSZW5kZXJlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCmluZGV4
IGZkMDdmNGE4OGRiNWMyMjEwZGI3MzdhZDE3MzVhY2EyMWMxMzI1MzYuLmRmYmEwOTllNzJhZDFi
NWY5Yjg5MWZiNDk4NDYzOTBmZTFiZGM3ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcApAQCAtNDQsOCArNDQsOSBAQAogCiAjaWYg
RU5BQkxFKENTU19TSEFERVJTKSAmJiBVU0UoM0RfR1JBUEhJQ1MpCiAjaW5jbHVkZSAiQ3VzdG9t
RmlsdGVyR2xvYmFsQ29udGV4dC5oIgotI2luY2x1ZGUgIkN1c3RvbUZpbHRlclByb2dyYW0uaCIK
ICNpbmNsdWRlICJDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0
ZXJQcm9ncmFtLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUmVuZGVyZXIuaCIKICNpbmNsdWRl
ICJDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmgiCiAjaW5jbHVkZSAiRkVDdXN0b21GaWx0
ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC05NiwyMCArOTcsMTUgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8RkVDdXN0b21GaWx0ZXI+IGNyZWF0ZUN1c3RvbUZpbHRlckVmZmVjdChGaWx0
ZXIqIGZpbHRlciwgRG9jdW0KIHsKICAgICBpZiAoIWlzQ1NTQ3VzdG9tRmlsdGVyRW5hYmxlZChk
b2N1bWVudCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIAotICAgIFJlZlB0cjxDdXN0b21GaWx0
ZXJQcm9ncmFtPiBwcm9ncmFtID0gb3BlcmF0aW9uLT5wcm9ncmFtKCk7Ci0gICAgaWYgKCFwcm9n
cmFtLT5pc0xvYWRlZCgpKQotICAgICAgICByZXR1cm4gMDsKIAogICAgIEN1c3RvbUZpbHRlckds
b2JhbENvbnRleHQqIGdsb2JhbENvbnRleHQgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpLT5jdXN0
b21GaWx0ZXJHbG9iYWxDb250ZXh0KCk7CiAgICAgZ2xvYmFsQ29udGV4dC0+cHJlcGFyZUNvbnRl
eHRJZk5lZWRlZChkb2N1bWVudC0+dmlldygpLT5ob3N0V2luZG93KCkpOwotICAgIFJlZlB0cjxD
dXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiB2YWxpZGF0ZWRQcm9ncmFtID0gZ2xvYmFsQ29u
dGV4dC0+Z2V0VmFsaWRhdGVkUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSW5mbygpKTsKLSAgICBp
ZiAoIXZhbGlkYXRlZFByb2dyYW0tPmlzSW5pdGlhbGl6ZWQoKSkKKworICAgIFJlZlB0cjxDdXN0
b21GaWx0ZXJSZW5kZXJlcj4gY3VzdG9tUmVuZGVyZXIgPSBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6
Y3JlYXRlKGdsb2JhbENvbnRleHQsIG9wZXJhdGlvbik7CisgICAgaWYgKCFjdXN0b21SZW5kZXJl
cikKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gRkVDdXN0b21GaWx0ZXI6OmNyZWF0
ZShmaWx0ZXIsIGdsb2JhbENvbnRleHQsIHZhbGlkYXRlZFByb2dyYW0sIG9wZXJhdGlvbi0+cGFy
YW1ldGVycygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbi0+
bWVzaFJvd3MoKSwgb3BlcmF0aW9uLT5tZXNoQ29sdW1ucygpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbi0+bWVzaEJveFR5cGUoKSwgb3BlcmF0aW9uLT5tZXNo
VHlwZSgpKTsKKyAgICByZXR1cm4gRkVDdXN0b21GaWx0ZXI6OmNyZWF0ZShmaWx0ZXIsIGN1c3Rv
bVJlbmRlcmVyLnJlbGVhc2UoKSk7CiB9CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169381</attachid>
            <date>2012-10-18 03:19:35 -0700</date>
            <delta_ts>2012-10-23 04:22:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98989-20121018191813.patch</filename>
            <type>text/plain</type>
            <size>57710</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMxNjUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTFmMzY4MGNmYjNmYWRl
YjNjMDcwYTdhNDY4NDZkZDYyZjk3NjI4My4uNTBkYmEwNDRjM2U1Mzg1ZmVhMzA4MTQyNzcyYTlj
ZjQ2YTY3MThlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEyLTEwLTE4ICBIdWFu
ZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIFtDU1MgU2hh
ZGVyc10gQWRkIEN1c3RvbUZpbHRlclJlbmRlcmVyIHRvIHJldXNlIHRoaXMgY2xhc3MgYnkgQWNj
ZWxlcmF0ZWQgQ29tcG9zaXRpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05ODk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEV4dHJhY3QgQ3VzdG9tRmlsdGVyUmVuZGVyZXIgY2xhc3MgZnJvbSB0aGUg
cmVuZGVyaW5nIHBhcnQgb2YgRkVDdXN0b21GaWx0ZXIuCisgICAgICAgIEZFQ3VzdG9tRmlsdGVy
IG5vdyBwbGF5cyBhIHJvbGUgaW4gZXh0ZW5kaW5nIEZpbHRlckVmZmVjdCBhbmQgZGVsZWdhdGVz
CisgICAgICAgIHJlbmRlcmluZyBjc3Mgc2hhZGVycyB0byBDdXN0b21GaWx0ZXJSZW5kZXJlci4K
KworICAgICAgICBDdXN0b21GaWx0ZXJSZW5kZXJlciBkb2VzIG5vdCBrbm93IEZpbHRlciBhbmQg
RmlsdGVyRWZmZWN0LiBXZSBjYW4KKyAgICAgICAgY3JlYXRlIGEgQ3VzdG9tRmlsdGVyUmVuZGVy
ZXIgaW5zdGFuY2Ugd2l0aCBvbmx5CisgICAgICAgIEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQs
IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvIGFuZAorICAgICAgICBDdXN0b21GaWx0ZXJQYXJhbWV0
ZXJMaXN0LiBJdCBtZWFucyB0aGF0IEFjY2VsZXJhdGVkIENvbXBvc2l0aW5nIGNhbgorICAgICAg
ICBjcmVhdGUgdGhlIEN1c3RvbUZpbHRlclJlbmRlcmVyIGluc3RhbmNlIGlmIEFjY2VsZXJhdGVk
IENvbXBvc2l0aW5nIGhhcworICAgICAgICBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0IGFuZCBD
dXN0b21GaWx0ZXJPcGVyYXRpb24sIGFuZCBpdCBpcyBhbHJlYWR5CisgICAgICAgIHBvc3NpYmxl
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggcHJlcGFyZXMgdG8gZW5hYmxlIENTUyBTaGFkZXJzIG9u
IEFjY2VsZXJhdGVkIENvbXBvc2l0aW5nLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gQ292ZXJl
ZCBieSBjc3MzL2ZpbHRlcnMvY3VzdG9tCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAg
ICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Om9ydGhvZ29uYWxQ
cm9qZWN0aW9uTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUmVuZGVyZXI6OkN1c3Rv
bUZpbHRlclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVy
Ojp+Q3VzdG9tRmlsdGVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVy
UmVuZGVyZXI6OnByZW11bHRpcGxpZWRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21G
aWx0ZXJSZW5kZXJlcjo6cHJvZ3JhbU5lZWRzSW5wdXRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OkN1c3RvbUZpbHRlclJlbmRlcmVyOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0
b21GaWx0ZXJSZW5kZXJlcjo6cHJlcGFyZUZvckRyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VzdG9tRmlsdGVyUmVuZGVyZXI6OmluaXRpYWxpemVDb21waWxlZFByb2dyYW1JZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5kZXJlcjo6YmluZFZlcnRleEF0dHJp
YnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5kZXJlcjo6dW5iaW5kVmVy
dGV4QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVyOjpi
aW5kUHJvZ3JhbUFycmF5UGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0
ZXJSZW5kZXJlcjo6YmluZFByb2dyYW1OdW1iZXJQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OkN1c3RvbUZpbHRlclJlbmRlcmVyOjpiaW5kUHJvZ3JhbVRyYW5zZm9ybVBhcmFtZXRlcik6
CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5kZXJlcjo6YmluZFByb2dyYW1QYXJh
bWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVyOjpiaW5kUHJv
Z3JhbUFuZEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUmVuZGVyZXI6
OnVuYmluZFZlcnRleEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvQ3VzdG9tRmlsdGVyUmVuZGVyZXIuaDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChDdXN0b21GaWx0ZXJSZW5kZXJlcik6CisgICAgICAgICAgQ3VzdG9t
RmlsdGVyUmVuZGVyZXIgcmVuZGVycyBjdXN0b20gZmlsdGVycyBpbiBHUFUgdXNpbmcgYQorICAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dDNELgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRkVDdXN0b21GaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0
ZXI6OkZFQ3VzdG9tRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ3VzdG9tRmlsdGVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OmRlbGV0ZVJlbmRlckJ1
ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OmRyYXdGaWx0ZXJNZXNo
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ3VzdG9tRmlsdGVyOjpwcmVwYXJlRm9yRHJhd2luZyk6
CisgICAgICAgIChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6YXBwbHlTaGFkZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OnJlc29sdmVNdWx0aXNhbXBsZUJ1ZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6cmVzaXplTXVsdGlzYW1wbGVCdWZmZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ3VzdG9tRmlsdGVyOjpyZXNpemVDb250ZXh0KToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmg6CisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZFQ3VzdG9tRmlsdGVyKToKKyAgICAgICAgKiByZW5k
ZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRl
Q3VzdG9tRmlsdGVyRWZmZWN0KToKKwogMjAxMi0xMC0xMiAgSHVhbmcgRG9uZ3N1bmcgIDxsdXh0
ZWxsYUBjb21wYW55MTAwLm5ldD4KIAogICAgICAgICBbV0syXSBBZGQgQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uIHNlcmlhbGl6YXRpb24gaW4gQXJndW1lbnRDb2Rlci4KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQK
aW5kZXggMDA0MGEzOWFlYWJiOWY3ZTRkMDk2YmI1ZjU3YTEwMDYwZmExMmE5Yy4uMGRiYTk4Yjdh
NGM5NzhhYTZkMDIyODEwOGZlOWIyZjg1YWI1MzU4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAg
LTE5MDYsNiArMTkwNiw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5jcHAKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmNwcAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVCbGVuZC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29s
b3JNYXRyaXguY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA0MGYxMzkxZjE5
YmRlN2ZlOTliMWNmMmVlNzc0NGQxNGU3ZDczYzhhLi5mMTRjMjhiZGVkYWVlYWIxYzI1MzA4OWM4
NGFkZDg4MzVmNTAyYzc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5s
aXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTQzMTYs
NiArNDMxNiw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmggXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRl
clByb2dyYW1JbmZvLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0
ZXJDb21waWxlZFByb2dyYW0uaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9DdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIuaCBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRl
eCA4ZTY0OTE1NjAzOWI0MWI0MTgwNTZiZjVhNjYwMTVhZWM1ZGJiNDg3Li5mMzI5MjJiNjdhNzk2
MTRkMWQ1ZGNjZmZhZGJlOTcwNGMxZjM1NmNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTIwNzIsNiArMjA3
Miw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9t
RmlsdGVyUGFyYW1ldGVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9t
RmlsdGVyUHJvZ3JhbS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZp
bHRlclByb2dyYW1JbmZvLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9t
RmlsdGVyUmVuZGVyZXIuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21G
aWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9DdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVCbGVuZC5oIFwKQEAgLTM0ODEsMTMgKzM0ODIsMTQgQEAgZW5hYmxlPyhYU0xU
KSB7CiAKIGVuYWJsZT8oRklMVEVSUykgewogICAgIFNPVVJDRVMgKz0gXAorICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbS5jcHAgXAog
ICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckdsb2JhbENvbnRl
eHQuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJN
ZXNoLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVy
TWVzaEdlbmVyYXRvci5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1
c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5jcHAgXAotICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbS5jcHAgXAotICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlck1lc2guY3BwIFwKLSAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJNZXNoR2VuZXJhdG9yLmNw
cCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUmVuZGVy
ZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJW
YWxpZGF0ZWRQcm9ncmFtLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RGlzdGFudExpZ2h0U291cmNlLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVCbGVuZC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBp
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDBhNDc3Yjg5MzBiOTJlMTZkYTZm
NDg1NDg0MTViMTEwYjRiNDYzMGEuLjlmZDljMGM3OGJmY2E2NTkzZDVkN2NlOTJhMDY5N2M0MTYx
ZTUzYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQ5NTUsNiArNDk1NSw4IEBACiAgICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbUlu
Zm8uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZp
bHRlclByb2dyYW1JbmZvLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmgnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtLmNwcCcsCiAg
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJDb21waWxl
ZFByb2dyYW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0
b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGUzODdlZjMwYTNkMTE4MzBiNmMzNzE4MTc4NzY4
OTY3YmRiM2E5OTMuLmM0OWE2ZDg0MjA5ZDY1N2ZiYTBlODUzMmZhZTIxODcxODNmMTU0NmYgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisr
KyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC0zMTkx
Myw2ICszMTkxMywxNCBAQAogCQkJCQkJPgogCQkJCQk8L0ZpbGU+CiAJCQkJCTxGaWxlCisJCQkJ
CQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcQ3VzdG9tRmlsdGVy
UmVuZGVyZXIuY3BwIgorCQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJCQkJCTxGaWxlCisJCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNcQ3VzdG9tRmlsdGVyUmVu
ZGVyZXIuaCIKKwkJCQkJCT4KKwkJCQkJPC9GaWxlPgorCQkJCQk8RmlsZQogCQkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEN1c3RvbUZpbHRlckNvbXBpbGVk
UHJvZ3JhbS5jcHAiCiAJCQkJCQk+CiAJCQkJCTwvRmlsZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwODQ5OGUzY2NlYTZiMTUx
MTc2NDg1MTZmM2IzMTZlMzU3N2JlNWU4Li4xYjkyNDNhNDdlMTkzNTFjMTBlYTQ2ZWNmNzQ1NzA0
YzE0MzZiYTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCkBAIC0xNDg4LDYgKzE0ODgsOCBAQAogCQk1MDNEMENBQTE0QjVCMDg3MDBG
MzJGNTcgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDNEMENBNzE0QjVCMDg3MDBGMzJGNTcgLyogQ3VzdG9t
RmlsdGVyUHJvZ3JhbS5jcHAgKi87IH07CiAJCTUwM0QwQ0FCMTRCNUIwODcwMEYzMkY1NyAvKiBD
dXN0b21GaWx0ZXJQcm9ncmFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA1MDNEMENBODE0QjVCMDg3MDBGMzJGNTcgLyogQ3VzdG9tRmlsdGVyUHJvZ3Jh
bS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTUwM0QwQ0FDMTRC
NUIwODcwMEYzMkY1NyAvKiBDdXN0b21GaWx0ZXJQcm9ncmFtQ2xpZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDNEMENBOTE0QjVCMDg3MDBGMzJG
NTcgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbUNsaWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUwM0QwQ0FBMTRCNUIwODcwMEYzMkY1OCAvKiBD
dXN0b21GaWx0ZXJSZW5kZXJlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MDNEMENBNzE0QjVCMDg3MDBGMzJGNTggLyogQ3VzdG9tRmlsdGVyUmVu
ZGVyZXIuY3BwICovOyB9OworCQk1MDNEMENBQjE0QjVCMDg3MDBGMzJGNTggLyogQ3VzdG9tRmls
dGVyUmVuZGVyZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDUwM0QwQ0E4MTRCNUIwODcwMEYzMkY1OCAvKiBDdXN0b21GaWx0ZXJSZW5kZXJlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTUwM0QwQ0FFMTRCNUIwQkEw
MEYzMkY1NyAvKiBTdHlsZUN1c3RvbUZpbHRlclByb2dyYW0uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwM0QwQ0FEMTRCNUIwQkEwMEYzMkY1NyAvKiBT
dHlsZUN1c3RvbUZpbHRlclByb2dyYW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgp
OyB9OyB9OwogCQk1MDhDQ0E0RjEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTA4Q0NBNEQx
M0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQuaCAqLzsgfTsKIAkJNTA4Q0NBNTAx
M0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTA4Q0NBNEUxM0NGMTA2QjAwMzE1MUYzIC8q
IFJlbmRlckZsb3dUaHJlYWQuY3BwICovOyB9OwpAQCAtODY3Niw2ICs4Njc4LDggQEAKIAkJNTAz
RDBDQTcxNEI1QjA4NzAwRjMyRjU3IC8qIEN1c3RvbUZpbHRlclByb2dyYW0uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHA7IHBh
dGggPSBmaWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MDNEMENBODE0QjVCMDg3MDBGMzJGNTcgLyogQ3VzdG9tRmlsdGVyUHJvZ3Jh
bS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDdXN0b21GaWx0ZXJQcm9ncmFt
Lmg7IHBhdGggPSBmaWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTAzRDBDQTkxNEI1QjA4NzAwRjMyRjU3IC8qIEN1c3RvbUZpbHRlclBy
b2dyYW1DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQ3VzdG9tRmls
dGVyUHJvZ3JhbUNsaWVudC5oOyBwYXRoID0gZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtQ2xp
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUwM0QwQ0E3MTRCNUIwODcwMEYz
MkY1OCAvKiBDdXN0b21GaWx0ZXJSZW5kZXJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBDdXN0b21GaWx0ZXJSZW5kZXJlci5jcHA7IHBhdGggPSBmaWx0ZXJzL0N1
c3RvbUZpbHRlclJlbmRlcmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTAz
RDBDQTgxNEI1QjA4NzAwRjMyRjU4IC8qIEN1c3RvbUZpbHRlclJlbmRlcmVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEN1c3RvbUZpbHRlclJlbmRlcmVyLmg7IHBhdGggPSBm
aWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTUwM0QwQ0FEMTRCNUIwQkEwMEYzMkY1NyAvKiBTdHlsZUN1c3RvbUZpbHRlclByb2dyYW0u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU3R5bGVDdXN0b21GaWx0ZXJQcm9n
cmFtLmg7IHBhdGggPSBzdHlsZS9TdHlsZUN1c3RvbUZpbHRlclByb2dyYW0uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTA4Q0NBNEQxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZs
b3dUaHJlYWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyRmxvd1Ro
cmVhZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MDhDQ0E0RTEzQ0YxMDZCMDAz
MTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBSZW5kZXJGbG93VGhyZWFkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTE4MjIyLDYgKzE4MjI2LDggQEAKIAkJCQk1MDNEMENBOTE0QjVCMDg3MDBGMzJGNTcg
LyogQ3VzdG9tRmlsdGVyUHJvZ3JhbUNsaWVudC5oICovLAogCQkJCTUwRDg4Q0IzMTVCREZEQUEw
MDE4MDlGNCAvKiBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5jcHAgKi8sCiAJCQkJNTBEODhDQjQx
NUJERkRBQTAwMTgwOUY0IC8qIEN1c3RvbUZpbHRlclByb2dyYW1JbmZvLmggKi8sCisJCQkJNTAz
RDBDQTcxNEI1QjA4NzAwRjMyRjU4IC8qIEN1c3RvbUZpbHRlclJlbmRlcmVyLmNwcCAqLywKKwkJ
CQk1MDNEMENBODE0QjVCMDg3MDBGMzJGNTggLyogQ3VzdG9tRmlsdGVyUmVuZGVyZXIuaCAqLywK
IAkJCQk1MDlFQzEwODE1RTg0OENBMDBFODI1ODEgLyogQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFy
YW1ldGVyLmggKi8sCiAJCQkJQTI5NTMyQ0QxNURENUUxNzAwNDY5RUJDIC8qIEN1c3RvbUZpbHRl
clZhbGlkYXRlZFByb2dyYW0uY3BwICovLAogCQkJCUEyOTUzMkNFMTVERDVFMTcwMDQ2OUVCQyAv
KiBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmggKi8sCkBAIC0yMjY0NCw2ICsyMjY1MCw3
IEBACiAJCQkJNTAzRDBDQUIxNEI1QjA4NzAwRjMyRjU3IC8qIEN1c3RvbUZpbHRlclByb2dyYW0u
aCBpbiBIZWFkZXJzICovLAogCQkJCTUwM0QwQ0FDMTRCNUIwODcwMEYzMkY1NyAvKiBDdXN0b21G
aWx0ZXJQcm9ncmFtQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MEQ4OENCNjE1QkRGREFB
MDAxODA5RjQgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTUwM0QwQ0FCMTRCNUIwODcwMEYzMkY1OCAvKiBDdXN0b21GaWx0ZXJSZW5kZXJlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTI5NTMyRDAxNURENUUxNzAwNDY5RUJDIC8qIEN1c3RvbUZpbHRlclZh
bGlkYXRlZFByb2dyYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0I0MTNFMEU4NjMzRkQwMDMy
QzRGMCAvKiBEYXNoQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU2RDBCMEExOTg5Q0Ew
MDdGQjhDNSAvKiBEYXNoYm9hcmRSZWdpb24uaCBpbiBIZWFkZXJzICovLApAQCAtMjYyMzMsNiAr
MjYyNDAsNyBAQAogCQkJCTUwQ0MwQTM5MTRDNkY1QjEwMDE3QUI1MSAvKiBDdXN0b21GaWx0ZXJP
cGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTAzRDBDQUExNEI1QjA4NzAwRjMyRjU3
IC8qIEN1c3RvbUZpbHRlclByb2dyYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTBEODhDQjUx
NUJERkRBQTAwMTgwOUY0IC8qIEN1c3RvbUZpbHRlclByb2dyYW1JbmZvLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTUwM0QwQ0FBMTRCNUIwODcwMEYzMkY1OCAvKiBDdXN0b21GaWx0ZXJSZW5kZXJl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMjk1MzJDRjE1REQ1RTE3MDA0NjlFQkMgLyogQ3Vz
dG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JDNkEy
MDE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTdC
QzZBMjMxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQXV0aG9yaXplci5jcHAgaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjRmZTkw
YTg2ZTMwYWMxNjRlZDdlODFhNzRjOGI1Yjg1ZThjYjgzNQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUmVuZGVy
ZXIuY3BwCkBAIC0wLDAgKzEsMzEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFkb2Jl
IFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDExIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICogICAgZGlz
Y2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiAg
ICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KAnSBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLAorICogT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisgKiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAq
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShD
U1NfU0hBREVSUykgJiYgVVNFKDNEX0dSQVBISUNTKQorI2luY2x1ZGUgIkN1c3RvbUZpbHRlclJl
bmRlcmVyLmgiCisKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlci5oIgorI2lu
Y2x1ZGUgIkN1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbS5oIgorI2luY2x1ZGUgIkN1c3RvbUZp
bHRlckNvbnN0YW50cy5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuaCIK
KyNpbmNsdWRlICJDdXN0b21GaWx0ZXJNZXNoLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyTnVt
YmVyUGFyYW1ldGVyLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUGFyYW1ldGVyLmgiCisjaW5j
bHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRlclRyYW5z
Zm9ybVBhcmFtZXRlci5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0u
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0
aW9uTWF0cml4LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgb3J0aG9n
b25hbFByb2plY3Rpb25NYXRyaXgoVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQg
bGVmdCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRvbSwgZmxvYXQgdG9wKQoreworICAgIEFTU0VS
VChtYXRyaXguaXNJZGVudGl0eSgpKTsKKworICAgIGZsb2F0IGRlbHRhWCA9IHJpZ2h0IC0gbGVm
dDsKKyAgICBmbG9hdCBkZWx0YVkgPSB0b3AgLSBib3R0b207CisgICAgaWYgKCFkZWx0YVggfHwg
IWRlbHRhWSkKKyAgICAgICAgcmV0dXJuOworICAgIG1hdHJpeC5zZXRNMTEoMi4wZiAvIGRlbHRh
WCk7CisgICAgbWF0cml4LnNldE00MSgtKHJpZ2h0ICsgbGVmdCkgLyBkZWx0YVgpOworICAgIG1h
dHJpeC5zZXRNMjIoMi4wZiAvIGRlbHRhWSk7CisgICAgbWF0cml4LnNldE00MigtKHRvcCArIGJv
dHRvbSkgLyBkZWx0YVkpOworCisgICAgLy8gVXNlIGJpZyBlbm91Z2ggbmVhci9mYXIgdmFsdWVz
LCBzbyB0aGF0IHNpbXBsZSByb3RhdGlvbnMgb2YgcmF0aGVyIGxhcmdlIG9iamVjdHMgd2lsbCBu
b3QKKyAgICAvLyBnZXQgY2xpcHBlZC4gMTAwMDAgc2hvdWxkIGNvdmVyIG1vc3Qgb2YgdGhlIHNj
cmVlbiByZXNvbHV0aW9ucy4KKyAgICBjb25zdCBmbG9hdCBmYXJWYWx1ZSA9IDEwMDAwOworICAg
IGNvbnN0IGZsb2F0IG5lYXJWYWx1ZSA9IC0xMDAwMDsKKyAgICBtYXRyaXguc2V0TTMzKC0yLjBm
IC8gKGZhclZhbHVlIC0gbmVhclZhbHVlKSk7CisgICAgbWF0cml4LnNldE00MygtIChmYXJWYWx1
ZSArIG5lYXJWYWx1ZSkgLyAoZmFyVmFsdWUgLSBuZWFyVmFsdWUpKTsKKyAgICBtYXRyaXguc2V0
TTQ0KDEuMGYpOworfQorCitQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclJlbmRlcmVyPiBDdXN0b21G
aWx0ZXJSZW5kZXJlcjo6Y3JlYXRlKEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQqIGN1c3RvbUZp
bHRlckdsb2JhbENvbnRleHQsIGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJiBwcm9ncmFt
SW5mbywgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVycywKKyAgICB1
bnNpZ25lZCBtZXNoUm93cywgdW5zaWduZWQgbWVzaENvbHVtbnMsIEN1c3RvbUZpbHRlck9wZXJh
dGlvbjo6TWVzaEJveFR5cGUgbWVzaEJveFR5cGUsIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVz
aFR5cGUgbWVzaFR5cGUpCit7CisgICAgaWYgKCFjdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LT5j
b250ZXh0KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPEN1c3RvbUZpbHRlclJl
bmRlcmVyPiByZW5kZXJlciA9IGFkb3B0UmVmKG5ldyBDdXN0b21GaWx0ZXJSZW5kZXJlcihjdXN0
b21GaWx0ZXJHbG9iYWxDb250ZXh0LCBwcm9ncmFtSW5mbywgcGFyYW1ldGVycywgbWVzaFJvd3Ms
IG1lc2hDb2x1bW5zLCBtZXNoQm94VHlwZSwgbWVzaFR5cGUpKTsKKyAgICBpZiAoIXJlbmRlcmVy
LT5tX3ZhbGlkYXRlZFByb2dyYW0tPmlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICByZXR1cm4gcmVuZGVyZXIucmVsZWFzZSgpOworfQorCitDdXN0b21GaWx0ZXJSZW5k
ZXJlcjo6Q3VzdG9tRmlsdGVyUmVuZGVyZXIoQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCogY3Vz
dG9tRmlsdGVyR2xvYmFsQ29udGV4dCwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mIHBy
b2dyYW1JbmZvLCBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBwYXJhbWV0ZXJzLAor
ICAgIHVuc2lnbmVkIG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uOjpNZXNoQm94VHlwZSwgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSBt
ZXNoVHlwZSkKKyAgICA6IG1fY29udGV4dChjdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LT5jb250
ZXh0KCkpCisgICAgLCBtX2NvbXBpbGVkUHJvZ3JhbSgwKSAvLyBEb24ndCBjb21waWxlIHRoZSBw
cm9ncmFtIHVubGVzcyB3ZSBuZWVkIHRvIHBhaW50LgorICAgICwgbV9wYXJhbWV0ZXJzKHBhcmFt
ZXRlcnMpCisgICAgLCBtX21lc2hSb3dzKG1lc2hSb3dzKQorICAgICwgbV9tZXNoQ29sdW1ucyht
ZXNoQ29sdW1ucykKKyAgICAsIG1fbWVzaFR5cGUobWVzaFR5cGUpCit7CisgICAgbV92YWxpZGF0
ZWRQcm9ncmFtID0gY3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC0+Z2V0VmFsaWRhdGVkUHJvZ3Jh
bShwcm9ncmFtSW5mbyk7Cit9CisKK0N1c3RvbUZpbHRlclJlbmRlcmVyOjp+Q3VzdG9tRmlsdGVy
UmVuZGVyZXIoKQoreworfQorCitib29sIEN1c3RvbUZpbHRlclJlbmRlcmVyOjpwcmVtdWx0aXBs
aWVkQWxwaGEoKSBjb25zdAoreworICAgIHJldHVybiBtX3ZhbGlkYXRlZFByb2dyYW0tPnByb2dy
YW1JbmZvKCkucHJvZ3JhbVR5cGUoKSA9PSBQUk9HUkFNX1RZUEVfQkxFTkRTX0VMRU1FTlRfVEVY
VFVSRTsKK30KKworYm9vbCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6cHJvZ3JhbU5lZWRzSW5wdXRU
ZXh0dXJlKCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9jb21waWxlZFByb2dyYW0uZ2V0KCkpOwor
ICAgIHJldHVybiBtX2NvbXBpbGVkUHJvZ3JhbS0+c2FtcGxlckxvY2F0aW9uKCkgIT0gLTE7Cit9
CisKK3ZvaWQgQ3VzdG9tRmlsdGVyUmVuZGVyZXI6OnBhaW50KFBsYXRmb3JtM0RPYmplY3QgaW5w
dXRUZXh0dXJlLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIG1fY29udGV4dFNpemUgPSBz
aXplOworCisgICAgYmluZFByb2dyYW1BbmRCdWZmZXJzKGlucHV0VGV4dHVyZSk7CisgICAgbV9j
b250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgbV9tZXNo
LT5pbmRpY2VzQ291bnQoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKTsK
KyAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGVzKCk7Cit9CisKK2Jvb2wgQ3VzdG9tRmlsdGVyUmVu
ZGVyZXI6OnByZXBhcmVGb3JEcmF3aW5nKCkKK3sKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIGluaXRpYWxpemVDb21waWxlZFByb2dyYW1JZk5lZWRlZCgpOworCisg
ICAgLy8gSWYgdGhlIHNoYWRlciBoYWQgY29tcGlsZXIgZXJyb3JzIHdlIGNhbm5vdCBkcmF3IGFu
eXRoaW5nLgorICAgIGlmICghbV9jb21waWxlZFByb2dyYW0tPmlzSW5pdGlhbGl6ZWQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ3VzdG9t
RmlsdGVyUmVuZGVyZXI6OmluaXRpYWxpemVDb21waWxlZFByb2dyYW1JZk5lZWRlZCgpCit7Cisg
ICAgaWYgKG1fY29tcGlsZWRQcm9ncmFtLmdldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBt
X2NvbXBpbGVkUHJvZ3JhbSA9IG1fdmFsaWRhdGVkUHJvZ3JhbS0+Y29tcGlsZWRQcm9ncmFtKCk7
CisKKyAgICAvLyBGSVhNRTogU2hhcmluZyB0aGUgbWVzaCB3b3VsZCBqdXN0IHNhdmUgdGhlIHRp
bWUgbmVlZGVkIHRvIHVwbG9hZCBpdCB0byB0aGUgR1BVLCBzbyBJIGFzc3VtZSB3ZSBjb3VsZAor
ICAgIC8vIGJlbmNobWFyayB0aGF0IGZvciBwZXJmb3JtYW5jZS4KKyAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg0MjkKKyAgICBtX21lc2ggPSBDdXN0b21G
aWx0ZXJNZXNoOjpjcmVhdGUobV9jb250ZXh0LmdldCgpLCBtX21lc2hDb2x1bW5zLCBtX21lc2hS
b3dzLCBGbG9hdFJlY3QoMCwgMCwgMSwgMSksIG1fbWVzaFR5cGUpOworfQorCit2b2lkIEN1c3Rv
bUZpbHRlclJlbmRlcmVyOjpiaW5kVmVydGV4QXR0cmlidXRlKGludCBhdHRyaWJ1dGVMb2NhdGlv
biwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgb2Zmc2V0KQoreworICAgIGlmIChhdHRyaWJ1dGVM
b2NhdGlvbiAhPSAtMSkgeworICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIo
YXR0cmlidXRlTG9jYXRpb24sIHNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2Us
IG1fbWVzaC0+Ynl0ZXNQZXJWZXJ0ZXgoKSwgb2Zmc2V0KTsKKyAgICAgICAgbV9jb250ZXh0LT5l
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWJ1dGVMb2NhdGlvbik7CisgICAgfQorfQorCit2
b2lkIEN1c3RvbUZpbHRlclJlbmRlcmVyOjp1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUoaW50IGF0dHJp
YnV0ZUxvY2F0aW9uKQoreworICAgIGlmIChhdHRyaWJ1dGVMb2NhdGlvbiAhPSAtMSkKKyAgICAg
ICAgbV9jb250ZXh0LT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoYXR0cmlidXRlTG9jYXRpb24p
OworfQorCit2b2lkIEN1c3RvbUZpbHRlclJlbmRlcmVyOjpiaW5kUHJvZ3JhbUFycmF5UGFyYW1l
dGVycyhpbnQgdW5pZm9ybUxvY2F0aW9uLCBDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlciogYXJy
YXlQYXJhbWV0ZXIpCit7CisgICAgdW5zaWduZWQgcGFyYW1ldGVyU2l6ZSA9IGFycmF5UGFyYW1l
dGVyLT5zaXplKCk7CisgICAgVmVjdG9yPEdDM0RmbG9hdD4gZmxvYXRWZWN0b3I7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVyU2l6ZTsgKytpKQorICAgICAgICBmbG9h
dFZlY3Rvci5hcHBlbmQoYXJyYXlQYXJhbWV0ZXItPnZhbHVlQXQoaSkpOworCisgICAgbV9jb250
ZXh0LT51bmlmb3JtMWZ2KHVuaWZvcm1Mb2NhdGlvbiwgcGFyYW1ldGVyU2l6ZSwgZmxvYXRWZWN0
b3IuZGF0YSgpKTsKK30KKwordm9pZCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6YmluZFByb2dyYW1O
dW1iZXJQYXJhbWV0ZXJzKGludCB1bmlmb3JtTG9jYXRpb24sIEN1c3RvbUZpbHRlck51bWJlclBh
cmFtZXRlciogbnVtYmVyUGFyYW1ldGVyKQoreworICAgIHN3aXRjaCAobnVtYmVyUGFyYW1ldGVy
LT5zaXplKCkpIHsKKyAgICBjYXNlIDE6CisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKHVu
aWZvcm1Mb2NhdGlvbiwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDApKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSAyOgorICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZih1bmlmb3JtTG9j
YXRpb24sIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgwKSwgbnVtYmVyUGFyYW1ldGVyLT52YWx1
ZUF0KDEpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgICBtX2NvbnRleHQt
PnVuaWZvcm0zZih1bmlmb3JtTG9jYXRpb24sIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgwKSwg
bnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDEpLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMikp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICAgIG1fY29udGV4dC0+dW5pZm9y
bTRmKHVuaWZvcm1Mb2NhdGlvbiwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDApLCBudW1iZXJQ
YXJhbWV0ZXItPnZhbHVlQXQoMSksIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgyKSwgbnVtYmVy
UGFyYW1ldGVyLT52YWx1ZUF0KDMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEN1c3RvbUZpbHRl
clJlbmRlcmVyOjpiaW5kUHJvZ3JhbVRyYW5zZm9ybVBhcmFtZXRlcihpbnQgdW5pZm9ybUxvY2F0
aW9uLCBDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIqIHRyYW5zZm9ybVBhcmFtZXRlcikK
K3sKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisgICAgaWYgKG1fY29udGV4dFNp
emUud2lkdGgoKSAmJiBtX2NvbnRleHRTaXplLmhlaWdodCgpKSB7CisgICAgICAgIC8vIFRoZSB2
aWV3cG9ydCBpcyBhIGJveCB3aXRoIHRoZSBzaXplIG9mIDEgdW5pdCwgc28gd2UgYXJlIHNjYWxs
aW5nIHVwIGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgdHJhbnNsYXRpb25zIGhhcHBlbiB1c2luZyBy
ZWFsIHBpeGVsCisgICAgICAgIC8vIHVuaXRzLiBBdCB0aGUgZW5kIHdlIHNjYWxlIGJhY2sgZG93
biBpbiBvcmRlciB0byBtYXAgaXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYm94LiBOb3RlIHRoYXQg
dHJhbnNmb3JtcyBjb21lIGluIHJldmVyc2Ugb3JkZXIsIGJlY2F1c2UgaXQgaXMKKyAgICAgICAg
Ly8gc3VwcG9zZWQgdG8gbXVsdGlwbHkgdG8gdGhlIGxlZnQgb2YgdGhlIGNvb3JkaW5hdGVzIG9m
IHRoZSB2ZXJ0aWNlcy4KKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBvcmlnaW4gKDAsIDApIG9m
IHRoZSB2aWV3cG9ydCBpcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBjb250ZXh0LCBzbyB0aGVyZSdz
IG5vIG5lZWQgdG8gY2hhbmdlIHRoZSBvcmlnaW4gb2YgdGhlIHRyYW5zZm9ybQorICAgICAgICAv
LyBpbiBvcmRlciB0byByb3RhdGUgYXJvdW5kIHRoZSBtaWRkbGUgb2YgbWVzaC4KKyAgICAgICAg
bWF0cml4LnNjYWxlM2QoMS4wIC8gbV9jb250ZXh0U2l6ZS53aWR0aCgpLCAxLjAgLyBtX2NvbnRl
eHRTaXplLmhlaWdodCgpLCAxKTsKKyAgICAgICAgdHJhbnNmb3JtUGFyYW1ldGVyLT5hcHBseVRy
YW5zZm9ybShtYXRyaXgsIG1fY29udGV4dFNpemUpOworICAgICAgICBtYXRyaXguc2NhbGUzZCht
X2NvbnRleHRTaXplLndpZHRoKCksIG1fY29udGV4dFNpemUuaGVpZ2h0KCksIDEpOworICAgIH0K
KyAgICBmbG9hdCBnbE1hdHJpeFsxNl07CisgICAgbWF0cml4LnRvQ29sdW1uTWFqb3JGbG9hdEFy
cmF5KGdsTWF0cml4KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYodW5pZm9ybUxv
Y2F0aW9uLCAxLCBmYWxzZSwgJmdsTWF0cml4WzBdKTsKK30KKwordm9pZCBDdXN0b21GaWx0ZXJS
ZW5kZXJlcjo6YmluZFByb2dyYW1QYXJhbWV0ZXJzKCkKK3sKKyAgICAvLyBGSVhNRTogRmluZCBh
IHdheSB0byByZXNldCB1bmlmb3JtcyB0aGF0IGFyZSBub3Qgc3BlY2lmaWVkIGluIENTUy4gVGhp
cyBpcyBuZWVkZWQgdG8gYXZvaWQgdXNpbmcgdmFsdWVzCisgICAgLy8gc2V0IGJ5IG90aGVyIHBy
ZXZpb3VzIHJlbmRlcmVkIGZpbHRlcnMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc2NDQwCisKKyAgICBzaXplX3QgcGFyYW1ldGVyc1NpemUgPSBtX3Bh
cmFtZXRlcnMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVyc1Np
emU7ICsraSkgeworICAgICAgICBDdXN0b21GaWx0ZXJQYXJhbWV0ZXIqIHBhcmFtZXRlciA9IG1f
cGFyYW1ldGVycy5hdChpKS5nZXQoKTsKKyAgICAgICAgaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1f
Y29tcGlsZWRQcm9ncmFtLT51bmlmb3JtTG9jYXRpb25CeU5hbWUocGFyYW1ldGVyLT5uYW1lKCkp
OworICAgICAgICBpZiAodW5pZm9ybUxvY2F0aW9uID09IC0xKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIHN3aXRjaCAocGFyYW1ldGVyLT5wYXJhbWV0ZXJUeXBlKCkpIHsKKyAgICAg
ICAgY2FzZSBDdXN0b21GaWx0ZXJQYXJhbWV0ZXI6OkFSUkFZOgorICAgICAgICAgICAgYmluZFBy
b2dyYW1BcnJheVBhcmFtZXRlcnModW5pZm9ybUxvY2F0aW9uLCBzdGF0aWNfY2FzdDxDdXN0b21G
aWx0ZXJBcnJheVBhcmFtZXRlcio+KHBhcmFtZXRlcikpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyOjpOVU1CRVI6CisgICAgICAgICAgICBi
aW5kUHJvZ3JhbU51bWJlclBhcmFtZXRlcnModW5pZm9ybUxvY2F0aW9uLCBzdGF0aWNfY2FzdDxD
dXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIqPihwYXJhbWV0ZXIpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEN1c3RvbUZpbHRlclBhcmFtZXRlcjo6VFJBTlNGT1JNOgorICAg
ICAgICAgICAgYmluZFByb2dyYW1UcmFuc2Zvcm1QYXJhbWV0ZXIodW5pZm9ybUxvY2F0aW9uLCBz
dGF0aWNfY2FzdDxDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIqPihwYXJhbWV0ZXIpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEN1c3RvbUZp
bHRlclJlbmRlcmVyOjpiaW5kUHJvZ3JhbUFuZEJ1ZmZlcnMoUGxhdGZvcm0zRE9iamVjdCBpbnB1
dFRleHR1cmUpCit7CisgICAgQVNTRVJUKG1fY29tcGlsZWRQcm9ncmFtLT5pc0luaXRpYWxpemVk
KCkpOworCisgICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKG1fY29tcGlsZWRQcm9ncmFtLT5wcm9n
cmFtKCkpOworCisgICAgaWYgKHByb2dyYW1OZWVkc0lucHV0VGV4dHVyZSgpKSB7CisgICAgICAg
IC8vIFdlIHNob3VsZCBiZSBiaW5kaW5nIHRoZSBET00gZWxlbWVudCB0ZXh0dXJlIHNhbXBsZXIg
b25seSBpZiB0aGUgYXV0aG9yIGlzIHVzaW5nIHRoZSBDU1MgbWl4IGZ1bmN0aW9uLgorICAgICAg
ICBBU1NFUlQobV92YWxpZGF0ZWRQcm9ncmFtLT5wcm9ncmFtSW5mbygpLnByb2dyYW1UeXBlKCkg
PT0gUFJPR1JBTV9UWVBFX0JMRU5EU19FTEVNRU5UX1RFWFRVUkUpOworICAgICAgICBBU1NFUlQo
bV9jb21waWxlZFByb2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpICE9IC0xKTsKKworICAgICAgICBt
X2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKyAg
ICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWkobV9jb21waWxlZFByb2dyYW0tPnNhbXBsZXJMb2Nh
dGlvbigpLCAwKTsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgaW5wdXRUZXh0dXJlKTsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICAg
ICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQz
RDo6TElORUFSKTsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdy
YXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAg
ICB9CisKKyAgICBpZiAobV9jb21waWxlZFByb2dyYW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlv
bigpICE9IC0xKSB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHByb2plY3Rpb25NYXRy
aXg7CisgICAgICAgIG9ydGhvZ29uYWxQcm9qZWN0aW9uTWF0cml4KHByb2plY3Rpb25NYXRyaXgs
IC0wLjUsIDAuNSwgLTAuNSwgMC41KTsKKyAgICAgICAgZmxvYXQgZ2xQcm9qZWN0aW9uTWF0cml4
WzE2XTsKKyAgICAgICAgcHJvamVjdGlvbk1hdHJpeC50b0NvbHVtbk1ham9yRmxvYXRBcnJheShn
bFByb2plY3Rpb25NYXRyaXgpOworICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYo
bV9jb21waWxlZFByb2dyYW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwg
JmdsUHJvamVjdGlvbk1hdHJpeFswXSk7CisgICAgfQorCisgICAgQVNTRVJUKG1fbWVzaENvbHVt
bnMpOworICAgIEFTU0VSVChtX21lc2hSb3dzKTsKKworICAgIGlmIChtX2NvbXBpbGVkUHJvZ3Jh
bS0+bWVzaFNpemVMb2NhdGlvbigpICE9IC0xKQorICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0y
ZihtX2NvbXBpbGVkUHJvZ3JhbS0+bWVzaFNpemVMb2NhdGlvbigpLCBtX21lc2hDb2x1bW5zLCBt
X21lc2hSb3dzKTsKKworICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+dGlsZVNpemVMb2NhdGlv
bigpICE9IC0xKQorICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX2NvbXBpbGVkUHJvZ3Jh
bS0+dGlsZVNpemVMb2NhdGlvbigpLCAxLjAgLyBtX21lc2hDb2x1bW5zLCAxLjAgLyBtX21lc2hS
b3dzKTsKKworICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+bWVzaEJveExvY2F0aW9uKCkgIT0g
LTEpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBjaGFuZ2Ugd2hlbiBmaWx0ZXIgbWFy
Z2lucyB3aWxsIGJlIGltcGxlbWVudGVkLAorICAgICAgICAvLyBzZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNDAwCisgICAgICAgIG1fY29udGV4dC0+dW5pZm9y
bTRmKG1fY29tcGlsZWRQcm9ncmFtLT5tZXNoQm94TG9jYXRpb24oKSwgLTAuNSwgLTAuNSwgMS4w
LCAxLjApOworICAgIH0KKworICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+c2FtcGxlclNpemVM
b2NhdGlvbigpICE9IC0xKQorICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX2NvbXBpbGVk
UHJvZ3JhbS0+c2FtcGxlclNpemVMb2NhdGlvbigpLCBtX2NvbnRleHRTaXplLndpZHRoKCksIG1f
Y29udGV4dFNpemUuaGVpZ2h0KCkpOworCisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fbWVzaC0+dmVydGljZXNCdWZmZXJPYmplY3Qo
KSk7CisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5U
X0FSUkFZX0JVRkZFUiwgbV9tZXNoLT5lbGVtZW50c0J1ZmZlck9iamVjdCgpKTsKKworICAgIGJp
bmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPnBvc2l0aW9uQXR0cmliTG9jYXRp
b24oKSwgUG9zaXRpb25BdHRyaWJTaXplLCBQb3NpdGlvbkF0dHJpYk9mZnNldCk7CisgICAgYmlu
ZFZlcnRleEF0dHJpYnV0ZShtX2NvbXBpbGVkUHJvZ3JhbS0+dGV4QXR0cmliTG9jYXRpb24oKSwg
VGV4QXR0cmliU2l6ZSwgVGV4QXR0cmliT2Zmc2V0KTsKKyAgICAvLyBGSVhNRTogR2V0IHJpZCBv
ZiB0aGUgaW50ZXJuYWwgdGV4IGNvb3JkIGF0dHJpYnV0ZSAiY3NzX2FfdGV4Q29vcmQiLgorICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDM1OAorICAgIGJp
bmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPmludGVybmFsVGV4Q29vcmRBdHRy
aWJMb2NhdGlvbigpLCBUZXhBdHRyaWJTaXplLCBUZXhBdHRyaWJPZmZzZXQpOworICAgIGJpbmRW
ZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPm1lc2hBdHRyaWJMb2NhdGlvbigpLCBN
ZXNoQXR0cmliU2l6ZSwgTWVzaEF0dHJpYk9mZnNldCk7CisgICAgaWYgKG1fbWVzaFR5cGUgPT0g
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpERVRBQ0hFRCkKKyAgICAgICAgYmluZFZlcnRleEF0dHJp
YnV0ZShtX2NvbXBpbGVkUHJvZ3JhbS0+dHJpYW5nbGVBdHRyaWJMb2NhdGlvbigpLCBUcmlhbmds
ZUF0dHJpYlNpemUsIFRyaWFuZ2xlQXR0cmliT2Zmc2V0KTsKKworICAgIGJpbmRQcm9ncmFtUGFy
YW1ldGVycygpOworfQorCit2b2lkIEN1c3RvbUZpbHRlclJlbmRlcmVyOjp1bmJpbmRWZXJ0ZXhB
dHRyaWJ1dGVzKCkKK3sKKyAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dy
YW0tPnBvc2l0aW9uQXR0cmliTG9jYXRpb24oKSk7CisgICAgdW5iaW5kVmVydGV4QXR0cmlidXRl
KG1fY29tcGlsZWRQcm9ncmFtLT50ZXhBdHRyaWJMb2NhdGlvbigpKTsKKyAgICB1bmJpbmRWZXJ0
ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPmludGVybmFsVGV4Q29vcmRBdHRyaWJMb2Nh
dGlvbigpKTsKKyAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPm1l
c2hBdHRyaWJMb2NhdGlvbigpKTsKKyAgICBpZiAobV9tZXNoVHlwZSA9PSBDdXN0b21GaWx0ZXJP
cGVyYXRpb246OkRFVEFDSEVEKQorICAgICAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21w
aWxlZFByb2dyYW0tPnRyaWFuZ2xlQXR0cmliTG9jYXRpb24oKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShDU1NfU0hBREVSUykgJiYgVVNFKDNEX0dS
QVBISUNTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjcxZTRjN2Vh
NTQ5NzI5NTVkMDRiZWRlNmRkOWVlMjhhYjU5MmExNjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVy
LmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBZG9iZSBTeXN0
ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMiBDb21wYW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBIT0xERVIgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQor
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IKKyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEN1c3RvbUZpbHRlclJlbmRlcmVyX2gKKyNkZWZpbmUgQ3VzdG9tRmlsdGVyUmVu
ZGVyZXJfaAorCisjaWYgRU5BQkxFKENTU19TSEFERVJTKSAmJiBVU0UoM0RfR1JBUEhJQ1MpCisK
KyNpbmNsdWRlICJDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5
cGVzM0QuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDdXN0b21GaWx0ZXJBcnJheVBh
cmFtZXRlcjsKK2NsYXNzIEN1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbTsKK2NsYXNzIEN1c3Rv
bUZpbHRlckdsb2JhbENvbnRleHQ7CitjbGFzcyBDdXN0b21GaWx0ZXJNZXNoOworY2xhc3MgQ3Vz
dG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyOworY2xhc3MgQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFy
YW1ldGVyOworY2xhc3MgQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbTsKK2NsYXNzIEdyYXBo
aWNzQ29udGV4dDNEOworY2xhc3MgSW50U2l6ZTsKKworY2xhc3MgQ3VzdG9tRmlsdGVyUmVuZGVy
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxDdXN0b21GaWx0ZXJSZW5kZXJlcj4geworcHVibGljOgor
ICAgIHN0YXRpYyBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclJlbmRlcmVyPiBjcmVhdGUoQ3VzdG9t
RmlsdGVyR2xvYmFsQ29udGV4dCosIGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJiwgY29u
c3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYsCisgICAgICAgIHVuc2lnbmVkIG1lc2hSb3dz
LCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoQm94VHlw
ZSwgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSk7CisgICAgfkN1c3RvbUZpbHRlclJl
bmRlcmVyKCk7CisKKyAgICBib29sIHByZW11bHRpcGxpZWRBbHBoYSgpIGNvbnN0OworICAgIGJv
b2wgcHJvZ3JhbU5lZWRzSW5wdXRUZXh0dXJlKCkgY29uc3Q7CisKKyAgICBib29sIHByZXBhcmVG
b3JEcmF3aW5nKCk7CisKKyAgICB2b2lkIHBhaW50KFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IElu
dFNpemUmKTsKKworcHJpdmF0ZToKKyAgICBDdXN0b21GaWx0ZXJSZW5kZXJlcihDdXN0b21GaWx0
ZXJHbG9iYWxDb250ZXh0KiwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mLCBjb25zdCBD
dXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiwKKyAgICAgICAgdW5zaWduZWQgbWVzaFJvd3MsIHVu
c2lnbmVkIG1lc2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hCb3hUeXBlLCBD
dXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hUeXBlKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZUNv
bXBpbGVkUHJvZ3JhbUlmTmVlZGVkKCk7CisKKyAgICB2b2lkIGJpbmRWZXJ0ZXhBdHRyaWJ1dGUo
aW50IGF0dHJpYnV0ZUxvY2F0aW9uLCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBvZmZzZXQpOwor
ICAgIHZvaWQgdW5iaW5kVmVydGV4QXR0cmlidXRlKGludCBhdHRyaWJ1dGVMb2NhdGlvbik7Cisg
ICAgdm9pZCBiaW5kUHJvZ3JhbUFycmF5UGFyYW1ldGVycyhpbnQgdW5pZm9ybUxvY2F0aW9uLCBD
dXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlciopOworICAgIHZvaWQgYmluZFByb2dyYW1OdW1iZXJQ
YXJhbWV0ZXJzKGludCB1bmlmb3JtTG9jYXRpb24sIEN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRl
ciopOworICAgIHZvaWQgYmluZFByb2dyYW1UcmFuc2Zvcm1QYXJhbWV0ZXIoaW50IHVuaWZvcm1M
b2NhdGlvbiwgQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKik7CisgICAgdm9pZCBiaW5k
UHJvZ3JhbVBhcmFtZXRlcnMoKTsKKyAgICB2b2lkIGJpbmRQcm9ncmFtQW5kQnVmZmVycyhQbGF0
Zm9ybTNET2JqZWN0IGlucHV0VGV4dHVyZSk7CisgICAgdm9pZCB1bmJpbmRWZXJ0ZXhBdHRyaWJ1
dGVzKCk7CisKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBS
ZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4gbV92YWxpZGF0ZWRQcm9ncmFtOwor
ICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW0+IG1fY29tcGlsZWRQcm9ncmFt
OworICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJNZXNoPiBtX21lc2g7CisgICAgSW50U2l6ZSBtX2Nv
bnRleHRTaXplOworCisgICAgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCBtX3BhcmFtZXRlcnM7
CisKKyAgICB1bnNpZ25lZCBtX21lc2hSb3dzOworICAgIHVuc2lnbmVkIG1fbWVzaENvbHVtbnM7
CisgICAgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSBtX21lc2hUeXBlOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENTU19TSEFERVJTKSAm
JiBVU0UoM0RfR1JBUEhJQ1MpCisKKyNlbmRpZiAvLyBDdXN0b21GaWx0ZXJSZW5kZXJlcl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3Vz
dG9tRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDdXN0b21GaWx0ZXIuY3BwCmluZGV4IDcwN2VkYjg2NmZlMTNjMmM5N2QwNWNjNjYxOTdlOTBk
ZjJmMGFhNTYuLjRhOGM4MzZkOGM2ZDUxOWQ5ZWIxMDUzYTU1MzE5MGU0MWE1M2Y4MGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21G
aWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDdXN0b21GaWx0ZXIuY3BwCkBAIC0zMyw2MSArMzMsMjMgQEAKICNpZiBFTkFCTEUoQ1NTX1NI
QURFUlMpICYmIFVTRSgzRF9HUkFQSElDUykKICNpbmNsdWRlICJGRUN1c3RvbUZpbHRlci5oIgog
Ci0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXIuaCIKLSNpbmNsdWRlICJDdXN0
b21GaWx0ZXJDb21waWxlZFByb2dyYW0uaCIKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJDb25zdGFu
dHMuaCIKICNpbmNsdWRlICJDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmgiCi0jaW5jbHVkZSAi
Q3VzdG9tRmlsdGVyTWVzaC5oIgotI2luY2x1ZGUgIkN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRl
ci5oIgotI2luY2x1ZGUgIkN1c3RvbUZpbHRlclBhcmFtZXRlci5oIgotI2luY2x1ZGUgIkN1c3Rv
bUZpbHRlclByb2dyYW0uaCIKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0
ZXIuaCIKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmgiCi0jaW5jbHVk
ZSAiRHJhd2luZ0J1ZmZlci5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRlclJlbmRlcmVyLmgiCiAj
aW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
LSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCi0jaW5j
bHVkZSAiVGlsaW5nRGF0YS5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAK
ICNpbmNsdWRlIDx3dGYvVWludDhDbGFtcGVkQXJyYXkuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1zdGF0aWMgY29uc3QgaW50IGtNYXhTYW1wbGVDb3VudCA9IDQ7Ci0KLXN0YXRpYyB2b2lk
IG9ydGhvZ29uYWxQcm9qZWN0aW9uTWF0cml4KFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgs
IGZsb2F0IGxlZnQsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGZsb2F0IHRvcCkKLXsKLSAg
ICBBU1NFUlQobWF0cml4LmlzSWRlbnRpdHkoKSk7Ci0gICAgCi0gICAgZmxvYXQgZGVsdGFYID0g
cmlnaHQgLSBsZWZ0OwotICAgIGZsb2F0IGRlbHRhWSA9IHRvcCAtIGJvdHRvbTsKLSAgICBpZiAo
IWRlbHRhWCB8fCAhZGVsdGFZKQotICAgICAgICByZXR1cm47Ci0gICAgbWF0cml4LnNldE0xMSgy
LjBmIC8gZGVsdGFYKTsKLSAgICBtYXRyaXguc2V0TTQxKC0ocmlnaHQgKyBsZWZ0KSAvIGRlbHRh
WCk7Ci0gICAgbWF0cml4LnNldE0yMigyLjBmIC8gZGVsdGFZKTsKLSAgICBtYXRyaXguc2V0TTQy
KC0odG9wICsgYm90dG9tKSAvIGRlbHRhWSk7Ci0KLSAgICAvLyBVc2UgYmlnIGVub3VnaCBuZWFy
L2ZhciB2YWx1ZXMsIHNvIHRoYXQgc2ltcGxlIHJvdGF0aW9ucyBvZiByYXRoZXIgbGFyZ2Ugb2Jq
ZWN0cyB3aWxsIG5vdAotICAgIC8vIGdldCBjbGlwcGVkLiAxMDAwMCBzaG91bGQgY292ZXIgbW9z
dCBvZiB0aGUgc2NyZWVuIHJlc29sdXRpb25zLgotICAgIGNvbnN0IGZsb2F0IGZhclZhbHVlID0g
MTAwMDA7Ci0gICAgY29uc3QgZmxvYXQgbmVhclZhbHVlID0gLTEwMDAwOwotICAgIG1hdHJpeC5z
ZXRNMzMoLTIuMGYgLyAoZmFyVmFsdWUgLSBuZWFyVmFsdWUpKTsKLSAgICBtYXRyaXguc2V0TTQz
KC0gKGZhclZhbHVlICsgbmVhclZhbHVlKSAvIChmYXJWYWx1ZSAtIG5lYXJWYWx1ZSkpOwotICAg
IG1hdHJpeC5zZXRNNDQoMS4wZik7Ci19Ci0KLUZFQ3VzdG9tRmlsdGVyOjpGRUN1c3RvbUZpbHRl
cihGaWx0ZXIqIGZpbHRlciwgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCogY3VzdG9tRmlsdGVy
R2xvYmFsQ29udGV4dCwgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiB2
YWxpZGF0ZWRQcm9ncmFtLCBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBwYXJhbWV0
ZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1lc2hSb3dzLCB1
bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoQm94VHlwZSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1l
c2hUeXBlIG1lc2hUeXBlKQorRkVDdXN0b21GaWx0ZXI6OkZFQ3VzdG9tRmlsdGVyKEZpbHRlciog
ZmlsdGVyLCBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KiBjdXN0b21GaWx0ZXJHbG9iYWxDb250
ZXh0LCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8sIGNvbnN0IEN1
c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHBhcmFtZXRlcnMsCisgICAgdW5zaWduZWQgbWVzaFJv
d3MsIHVuc2lnbmVkIG1lc2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hCb3hU
eXBlIG1lc2hCb3hUeXBlLAorICAgIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaFR5cGUgbWVz
aFR5cGUpCiAgICAgOiBGaWx0ZXJFZmZlY3QoZmlsdGVyKQotICAgICwgbV9nbG9iYWxDb250ZXh0
KGN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQpCi0gICAgLCBtX3ZhbGlkYXRlZFByb2dyYW0odmFs
aWRhdGVkUHJvZ3JhbSkKLSAgICAsIG1fY29tcGlsZWRQcm9ncmFtKDApIC8vIERvbid0IGNvbXBp
bGUgdGhlIHByb2dyYW0gdW5sZXNzIHdlIG5lZWQgdG8gcGFpbnQuCisgICAgLCBtX2N1c3RvbUZp
bHRlclJlbmRlcmVyKEN1c3RvbUZpbHRlclJlbmRlcmVyOjpjcmVhdGUoY3VzdG9tRmlsdGVyR2xv
YmFsQ29udGV4dCwgcHJvZ3JhbUluZm8sIHBhcmFtZXRlcnMsIG1lc2hSb3dzLCBtZXNoQ29sdW1u
cywgbWVzaEJveFR5cGUsIG1lc2hUeXBlKSkKKyAgICAsIG1fY29udGV4dChjdXN0b21GaWx0ZXJH
bG9iYWxDb250ZXh0LT5jb250ZXh0KCkpCiAgICAgLCBtX2lucHV0VGV4dHVyZSgwKQogICAgICwg
bV9mcmFtZUJ1ZmZlcigwKQogICAgICwgbV9kZXB0aEJ1ZmZlcigwKQpAQCAtOTYsMjAgKzU4LDE5
IEBAIEZFQ3VzdG9tRmlsdGVyOjpGRUN1c3RvbUZpbHRlcihGaWx0ZXIqIGZpbHRlciwgQ3VzdG9t
RmlsdGVyR2xvYmFsQ29udGV4dCogY3VzdG9tCiAgICAgLCBtX211bHRpc2FtcGxlRnJhbWVCdWZm
ZXIoMCkKICAgICAsIG1fbXVsdGlzYW1wbGVSZW5kZXJCdWZmZXIoMCkKICAgICAsIG1fbXVsdGlz
YW1wbGVEZXB0aEJ1ZmZlcigwKQotICAgICwgbV9wYXJhbWV0ZXJzKHBhcmFtZXRlcnMpCi0gICAg
LCBtX21lc2hSb3dzKG1lc2hSb3dzKQotICAgICwgbV9tZXNoQ29sdW1ucyhtZXNoQ29sdW1ucykK
LSAgICAsIG1fbWVzaFR5cGUobWVzaFR5cGUpCiB7Ci0gICAgLy8gQW4gRkVDdXN0b21GaWx0ZXIg
c2hvdWxkbid0IGhhdmUgYmVlbiBjcmVhdGVkIHVubGVzcyB0aGUgcHJvZ3JhbSBwYXNzZWQgdmFs
aWRhdGlvbi4KLSAgICBBU1NFUlQobV92YWxpZGF0ZWRQcm9ncmFtLT5pc0luaXRpYWxpemVkKCkp
OwogfQogCi1QYXNzUmVmUHRyPEZFQ3VzdG9tRmlsdGVyPiBGRUN1c3RvbUZpbHRlcjo6Y3JlYXRl
KEZpbHRlciogZmlsdGVyLCBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KiBjdXN0b21GaWx0ZXJH
bG9iYWxDb250ZXh0LCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0+IHZh
bGlkYXRlZFByb2dyYW0sIGNvbnN0IEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHBhcmFtZXRl
cnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg
bWVzaFJvd3MsIHVuc2lnbmVkIG1lc2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1l
c2hCb3hUeXBlIG1lc2hCb3hUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaFR5cGUgbWVzaFR5cGUpCitQYXNz
UmVmUHRyPEZFQ3VzdG9tRmlsdGVyPiBGRUN1c3RvbUZpbHRlcjo6Y3JlYXRlKEZpbHRlciogZmls
dGVyLCBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KiBjdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0
LCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYgcHJvZ3JhbUluZm8sIGNvbnN0IEN1c3Rv
bUZpbHRlclBhcmFtZXRlckxpc3QmIHBhcmFtZXRlcnMsCisgICAgdW5zaWduZWQgbWVzaFJvd3Ms
IHVuc2lnbmVkIG1lc2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hCb3hUeXBl
IG1lc2hCb3hUeXBlLAorICAgIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaFR5cGUgbWVzaFR5
cGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUN1c3RvbUZpbHRlcihmaWx0ZXIsIGN1
c3RvbUZpbHRlckdsb2JhbENvbnRleHQsIHZhbGlkYXRlZFByb2dyYW0sIHBhcmFtZXRlcnMsIG1l
c2hSb3dzLCBtZXNoQ29sdW1ucywgbWVzaEJveFR5cGUsIG1lc2hUeXBlKSk7CisgICAgUmVmUHRy
PEZFQ3VzdG9tRmlsdGVyPiBmZUN1c3RvbUZpbHRlciA9IGFkb3B0UmVmKG5ldyBGRUN1c3RvbUZp
bHRlcihmaWx0ZXIsIGN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQsIHByb2dyYW1JbmZvLCBwYXJh
bWV0ZXJzLCBtZXNoUm93cywgbWVzaENvbHVtbnMsIG1lc2hCb3hUeXBlLCBtZXNoVHlwZSkpOwor
ICAgIGlmICghZmVDdXN0b21GaWx0ZXItPm1fY3VzdG9tRmlsdGVyUmVuZGVyZXIpCisgICAgICAg
IHJldHVybiAwOworCisgICAgQVNTRVJUKGZlQ3VzdG9tRmlsdGVyLT5tX2NvbnRleHQuZ2V0KCkp
OworICAgIHJldHVybiBmZUN1c3RvbUZpbHRlci5yZWxlYXNlKCk7CiB9CiAKIEZFQ3VzdG9tRmls
dGVyOjp+RkVDdXN0b21GaWx0ZXIoKQpAQCAtMTE5LDggKzgwLDYgQEAgRkVDdXN0b21GaWx0ZXI6
On5GRUN1c3RvbUZpbHRlcigpCiAKIHZvaWQgRkVDdXN0b21GaWx0ZXI6OmRlbGV0ZVJlbmRlckJ1
ZmZlcnMoKQogewotICAgIGlmICghbV9jb250ZXh0KQotICAgICAgICByZXR1cm47CiAgICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKICAgICBpZiAobV9pbnB1dFRleHR1cmUpIHsK
ICAgICAgICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKG1faW5wdXRUZXh0dXJlKTsKQEAgLTE4
Nyw0NSArMTQ2LDMzIEBAIHZvaWQgRkVDdXN0b21GaWx0ZXI6OmRyYXdGaWx0ZXJNZXNoKFBsYXRm
b3JtM0RPYmplY3QgaW5wdXRUZXh0dXJlKQogICAgIGJvb2wgbXVsdGlzYW1wbGUgPSBjYW5Vc2VN
dWx0aXNhbXBsZUJ1ZmZlcnMoKTsKICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG11bHRpc2FtcGxlID8gbV9tdWx0aXNhbXBsZUZy
YW1lQnVmZmVyIDogbV9mcmFtZUJ1ZmZlcik7CiAgICAgbV9jb250ZXh0LT52aWV3cG9ydCgwLCAw
LCBtX2NvbnRleHRTaXplLndpZHRoKCksIG1fY29udGV4dFNpemUuaGVpZ2h0KCkpOwotICAgIAor
CiAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKDAsIDAsIDAsIDApOwogICAgIG1fY29udGV4dC0+
Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQgfCBHcmFwaGljc0NvbnRl
eHQzRDo6REVQVEhfQlVGRkVSX0JJVCk7Ci0gICAgCi0gICAgYmluZFByb2dyYW1BbmRCdWZmZXJz
KGlucHV0VGV4dHVyZSk7Ci0gICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250
ZXh0M0Q6OlRSSUFOR0xFUywgbV9tZXNoLT5pbmRpY2VzQ291bnQoKSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX1NIT1JULCAwKTsKLSAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGVzKCk7CisK
KyAgICBtX2N1c3RvbUZpbHRlclJlbmRlcmVyLT5wYWludChpbnB1dFRleHR1cmUsIG1fY29udGV4
dFNpemUpOwogCiAgICAgaWYgKG11bHRpc2FtcGxlKQogICAgICAgICByZXNvbHZlTXVsdGlzYW1w
bGVCdWZmZXIoKTsKIH0KIAotYm9vbCBGRUN1c3RvbUZpbHRlcjo6cHJlcGFyZUZvckRyYXdpbmco
Q3VzdG9tRmlsdGVyRHJhd1R5cGUgZmlsdGVyRHJhd1R5cGUpCitib29sIEZFQ3VzdG9tRmlsdGVy
OjpwcmVwYXJlRm9yRHJhd2luZygpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQgJiYgIWluaXRpYWxp
emVDb250ZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICBtX2NvbnRleHQtPm1ha2VD
b250ZXh0Q3VycmVudCgpOwogCi0gICAgLy8gSWYgdGhlIHNoYWRlciBoYWQgY29tcGlsZXIgZXJy
b3JzIHdlIGNhbm5vdCBkcmF3IGFueXRoaW5nLgotICAgIGlmICghbV9jb21waWxlZFByb2dyYW0t
PmlzSW5pdGlhbGl6ZWQoKSkKKyAgICBpZiAoIW1fY3VzdG9tRmlsdGVyUmVuZGVyZXItPnByZXBh
cmVGb3JEcmF3aW5nKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwogICAgIC8vIE9u
bHkgYWxsb2NhdGUgYSB0ZXh0dXJlIGlmIHRoZSBwcm9ncmFtIG5lZWRzIG9uZSBhbmQgdGhlIGNh
bGxlciBkb2Vzbid0IGFsbG9jYXRlIG9uZSBieSBpdHNlbGYuCi0gICAgaWYgKChwcm9ncmFtTmVl
ZHNJbnB1dFRleHR1cmUoKSAmJiAoZmlsdGVyRHJhd1R5cGUgPT0gTkVFRFNfSU5QVVRfVEVYVFVS
RSkgJiYgIWVuc3VyZUlucHV0VGV4dHVyZSgpKQotICAgICAgICB8fCAhZW5zdXJlRnJhbWVCdWZm
ZXIoKSkKKyAgICBpZiAoKG1fY3VzdG9tRmlsdGVyUmVuZGVyZXItPnByb2dyYW1OZWVkc0lucHV0
VGV4dHVyZSgpICYmICFlbnN1cmVJbnB1dFRleHR1cmUoKSkgfHwgIWVuc3VyZUZyYW1lQnVmZmVy
KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KIAot
Ym9vbCBGRUN1c3RvbUZpbHRlcjo6cHJvZ3JhbU5lZWRzSW5wdXRUZXh0dXJlKCkgY29uc3QKLXsK
LSAgICBBU1NFUlQobV9jb21waWxlZFByb2dyYW0uZ2V0KCkpOwotICAgIHJldHVybiBtX2NvbXBp
bGVkUHJvZ3JhbS0+c2FtcGxlckxvY2F0aW9uKCkgIT0gLTE7CisgICAgcmV0dXJuIHRydWU7CiB9
CiAKIGJvb2wgRkVDdXN0b21GaWx0ZXI6OmFwcGx5U2hhZGVyKCkKIHsKLSAgICBVaW50OENsYW1w
ZWRBcnJheSogZHN0UGl4ZWxBcnJheSA9IG1fdmFsaWRhdGVkUHJvZ3JhbS0+cHJvZ3JhbUluZm8o
KS5wcm9ncmFtVHlwZSgpID09IFBST0dSQU1fVFlQRV9CTEVORFNfRUxFTUVOVF9URVhUVVJFID8g
Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkgOiBjcmVhdGVVbm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCgpOworICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5ID0gbV9jdXN0
b21GaWx0ZXJSZW5kZXJlci0+cHJlbXVsdGlwbGllZEFscGhhKCkgPyBjcmVhdGVQcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQoKSA6IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CiAgICAg
aWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTIzOCw3ICsx
ODUsNyBAQCBib29sIEZFQ3VzdG9tRmlsdGVyOjphcHBseVNoYWRlcigpCiAgICAgaWYgKCFyZXNp
emVDb250ZXh0SWZOZWVkZWQobmV3Q29udGV4dFNpemUpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBib29sIG5lZWRzSW5wdXRUZXh0dXJlID0gcHJvZ3JhbU5lZWRzSW5wdXRUZXh0dXJl
KCk7CisgICAgYm9vbCBuZWVkc0lucHV0VGV4dHVyZSA9IG1fY3VzdG9tRmlsdGVyUmVuZGVyZXIt
PnByb2dyYW1OZWVkc0lucHV0VGV4dHVyZSgpOwogICAgIGlmIChuZWVkc0lucHV0VGV4dHVyZSkg
ewogICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNyY1BpeGVsQXJyYXkgPSBpbi0+
YXNVbm11bHRpcGxpZWRJbWFnZShlZmZlY3REcmF3aW5nUmVjdCk7CiAgICAgICAgIHVwbG9hZElu
cHV0VGV4dHVyZShzcmNQaXhlbEFycmF5LmdldCgpKTsKQEAgLTI1MSwyNSArMTk4LDYgQEAgYm9v
bCBGRUN1c3RvbUZpbHRlcjo6YXBwbHlTaGFkZXIoKQogICAgIHJldHVybiB0cnVlOwogfQogCi1i
b29sIEZFQ3VzdG9tRmlsdGVyOjppbml0aWFsaXplQ29udGV4dCgpCi17Ci0gICAgQVNTRVJUKCFt
X2NvbnRleHQuZ2V0KCkpOwotICAgIG1fY29udGV4dCA9IG1fZ2xvYmFsQ29udGV4dC0+Y29udGV4
dCgpOwotICAgIGlmICghbV9jb250ZXh0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgbV9j
b250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2NvbXBpbGVkUHJvZ3JhbSA9IG1f
dmFsaWRhdGVkUHJvZ3JhbS0+Y29tcGlsZWRQcm9ncmFtKCk7Ci0KLSAgICAvLyBGSVhNRTogU2hh
cmluZyB0aGUgbWVzaCB3b3VsZCBqdXN0IHNhdmUgdGhlIHRpbWUgbmVlZGVkIHRvIHVwbG9hZCBp
dCB0byB0aGUgR1BVLCBzbyBJIGFzc3VtZSB3ZSBjb3VsZAotICAgIC8vIGJlbmNobWFyayB0aGF0
IGZvciBwZXJmb3JtYW5jZS4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODg0MjkKLSAgICBtX21lc2ggPSBDdXN0b21GaWx0ZXJNZXNoOjpjcmVhdGUobV9j
b250ZXh0LmdldCgpLCBtX21lc2hDb2x1bW5zLCBtX21lc2hSb3dzLCAKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWN0KDAsIDAsIDEsIDEpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX21lc2hUeXBlKTsKLQotICAgIHJldHVybiB0
cnVlOwotfQotCiBib29sIEZFQ3VzdG9tRmlsdGVyOjplbnN1cmVJbnB1dFRleHR1cmUoKQogewog
ICAgIGlmICghbV9pbnB1dFRleHR1cmUpCkBAIC0zMzIsNyArMjYwLDcgQEAgdm9pZCBGRUN1c3Rv
bUZpbHRlcjo6cmVzb2x2ZU11bHRpc2FtcGxlQnVmZmVyKCkKIAogICAgIG1fY29udGV4dC0+Ymlu
ZEZyYW1lYnVmZmVyKEV4dGVuc2lvbnMzRDo6UkVBRF9GUkFNRUJVRkZFUiwgMCk7CiAgICAgbV9j
b250ZXh0LT5iaW5kRnJhbWVidWZmZXIoRXh0ZW5zaW9uczNEOjpEUkFXX0ZSQU1FQlVGRkVSLCAw
KTsKLSAgICAKKwogICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpGUkFNRUJVRkZFUiwgbV9mcmFtZUJ1ZmZlcik7CiB9CiAKQEAgLTM0NCwxMSArMjcyLDEy
IEBAIGJvb2wgRkVDdXN0b21GaWx0ZXI6OmNhblVzZU11bHRpc2FtcGxlQnVmZmVycygpIGNvbnN0
CiBib29sIEZFQ3VzdG9tRmlsdGVyOjpyZXNpemVNdWx0aXNhbXBsZUJ1ZmZlcnMoY29uc3QgSW50
U2l6ZSYgbmV3Q29udGV4dFNpemUpCiB7CiAgICAgaWYgKCFtX3RyaWVkTXVsdGlzYW1wbGVCdWZm
ZXIgJiYgIWNyZWF0ZU11bHRpc2FtcGxlQnVmZmVyKCkpCi0gICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICghY2FuVXNlTXVsdGlzYW1wbGVC
dWZmZXJzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIHN0YXRpYyBjb25zdCBpbnQg
a01heFNhbXBsZUNvdW50ID0gNDsKICAgICBpbnQgbWF4U3VwcG9ydGVkU2FtcGxlQ291bnQgPSAw
OwogICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhfU0FNUExFUywg
Jm1heFN1cHBvcnRlZFNhbXBsZUNvdW50KTsKICAgICBpbnQgc2FtcGxlQ291bnQgPSBzdGQ6Om1p
bihrTWF4U2FtcGxlQ291bnQsIG1heFN1cHBvcnRlZFNhbXBsZUNvdW50KTsKQEAgLTM1OSw3ICsy
ODgsNyBAQCBib29sIEZFQ3VzdG9tRmlsdGVyOjpyZXNpemVNdWx0aXNhbXBsZUJ1ZmZlcnMoY29u
c3QgSW50U2l6ZSYgbmV3Q29udGV4dFNpemUpCiAKICAgICBFeHRlbnNpb25zM0QqIGV4dGVuc2lv
bnMgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKICAgICBBU1NFUlQoZXh0ZW5zaW9ucyk7
Ci0gICAgCisKICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGcmFtZUJ1ZmZlcik7CiAKICAgICBtX2NvbnRl
eHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgbV9t
dWx0aXNhbXBsZVJlbmRlckJ1ZmZlcik7CkBAIC00MDksNyArMzM4LDcgQEAgYm9vbCBGRUN1c3Rv
bUZpbHRlcjo6cmVzaXplQ29udGV4dChjb25zdCBJbnRTaXplJiBuZXdDb250ZXh0U2l6ZSkKICAg
ICBtX2NvbnRleHQtPnRleEltYWdlMkREaXJlY3QoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBuZXdDb250ZXh0U2l6ZS53aWR0aCgpLCBu
ZXdDb250ZXh0U2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKTsKICNlbmRpZgogICAgIG1fY29udGV4dC0+
ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBHcmFw
aGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFXzJELCBtX2Rlc3RUZXh0dXJlLCAwKTsKLSAKKwogICAgIC8vIFdlIGRvbid0IG5lZWQgdGhl
IGRlcHRoIGJ1ZmZlciBmb3IgdGhlIHRleHR1cmUgZnJhbWVidWZmZXIsIGlmIHdlIGFscmVhZHkK
ICAgICAvLyBoYXZlIGEgbXVsdGlzYW1wbGUgYnVmZmVyLgogICAgIGlmICghbXVsdGlzYW1wbGUp
IHsKQEAgLTQyOCwxNzEgKzM1NywxMSBAQCBib29sIEZFQ3VzdG9tRmlsdGVyOjpyZXNpemVDb250
ZXh0KGNvbnN0IEludFNpemUmIG5ld0NvbnRleHRTaXplKQogICAgIH0KIAogICAgIG1fY29udGV4
dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVGRkVSLCAwKTsK
LSAgICAKKwogICAgIG1fY29udGV4dFNpemUgPSBuZXdDb250ZXh0U2l6ZTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBGRUN1c3RvbUZpbHRlcjo6YmluZFZlcnRleEF0dHJpYnV0ZShpbnQg
YXR0cmlidXRlTG9jYXRpb24sIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIG9mZnNldCkKLXsKLSAg
ICBpZiAoYXR0cmlidXRlTG9jYXRpb24gIT0gLTEpIHsKLSAgICAgICAgbV9jb250ZXh0LT52ZXJ0
ZXhBdHRyaWJQb2ludGVyKGF0dHJpYnV0ZUxvY2F0aW9uLCBzaXplLCBHcmFwaGljc0NvbnRleHQz
RDo6RkxPQVQsIGZhbHNlLCBtX21lc2gtPmJ5dGVzUGVyVmVydGV4KCksIG9mZnNldCk7Ci0gICAg
ICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYXR0cmlidXRlTG9jYXRpb24p
OwotICAgIH0KLX0KLQotdm9pZCBGRUN1c3RvbUZpbHRlcjo6dW5iaW5kVmVydGV4QXR0cmlidXRl
KGludCBhdHRyaWJ1dGVMb2NhdGlvbikKLXsKLSAgICBpZiAoYXR0cmlidXRlTG9jYXRpb24gIT0g
LTEpCi0gICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGF0dHJpYnV0
ZUxvY2F0aW9uKTsKLX0KLQotdm9pZCBGRUN1c3RvbUZpbHRlcjo6YmluZFByb2dyYW1BcnJheVBh
cmFtZXRlcnMoaW50IHVuaWZvcm1Mb2NhdGlvbiwgQ3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXIq
IGFycmF5UGFyYW1ldGVyKQotewotICAgIHVuc2lnbmVkIHBhcmFtZXRlclNpemUgPSBhcnJheVBh
cmFtZXRlci0+c2l6ZSgpOwotICAgIFZlY3RvcjxHQzNEZmxvYXQ+IGZsb2F0VmVjdG9yOwotCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlclNpemU7ICsraSkKLSAgICAgICAg
ZmxvYXRWZWN0b3IuYXBwZW5kKGFycmF5UGFyYW1ldGVyLT52YWx1ZUF0KGkpKTsKLQotICAgIG1f
Y29udGV4dC0+dW5pZm9ybTFmdih1bmlmb3JtTG9jYXRpb24sIHBhcmFtZXRlclNpemUsIGZsb2F0
VmVjdG9yLmRhdGEoKSk7Ci19Ci0KLXZvaWQgRkVDdXN0b21GaWx0ZXI6OmJpbmRQcm9ncmFtTnVt
YmVyUGFyYW1ldGVycyhpbnQgdW5pZm9ybUxvY2F0aW9uLCBDdXN0b21GaWx0ZXJOdW1iZXJQYXJh
bWV0ZXIqIG51bWJlclBhcmFtZXRlcikKLXsKLSAgICBzd2l0Y2ggKG51bWJlclBhcmFtZXRlci0+
c2l6ZSgpKSB7Ci0gICAgY2FzZSAxOgotICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZih1bmlm
b3JtTG9jYXRpb24sIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgwKSk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgMjoKLSAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmYodW5pZm9ybUxvY2F0
aW9uLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMCksIG51bWJlclBhcmFtZXRlci0+dmFsdWVB
dCgxKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMzoKLSAgICAgICAgbV9jb250ZXh0LT51
bmlmb3JtM2YodW5pZm9ybUxvY2F0aW9uLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMCksIG51
bWJlclBhcmFtZXRlci0+dmFsdWVBdCgxKSwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDIpKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0OgotICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm00
Zih1bmlmb3JtTG9jYXRpb24sIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgwKSwgbnVtYmVyUGFy
YW1ldGVyLT52YWx1ZUF0KDEpLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMiksIG51bWJlclBh
cmFtZXRlci0+dmFsdWVBdCgzKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotdm9pZCBGRUN1c3RvbUZpbHRl
cjo6YmluZFByb2dyYW1UcmFuc2Zvcm1QYXJhbWV0ZXIoaW50IHVuaWZvcm1Mb2NhdGlvbiwgQ3Vz
dG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKiB0cmFuc2Zvcm1QYXJhbWV0ZXIpCi17Ci0gICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwotICAgIGlmIChtX2NvbnRleHRTaXplLndpZHRo
KCkgJiYgbV9jb250ZXh0U2l6ZS5oZWlnaHQoKSkgewotICAgICAgICAvLyBUaGUgdmlld3BvcnQg
aXMgYSBib3ggd2l0aCB0aGUgc2l6ZSBvZiAxIHVuaXQsIHNvIHdlIGFyZSBzY2FsbGluZyB1cCBo
ZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IHRyYW5zbGF0aW9ucyBoYXBwZW4gdXNpbmcgcmVhbCBwaXhl
bAotICAgICAgICAvLyB1bml0cy4gQXQgdGhlIGVuZCB3ZSBzY2FsZSBiYWNrIGRvd24gaW4gb3Jk
ZXIgdG8gbWFwIGl0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGJveC4gTm90ZSB0aGF0IHRyYW5zZm9y
bXMgY29tZSBpbiByZXZlcnNlIG9yZGVyLCBiZWNhdXNlIGl0IGlzIAotICAgICAgICAvLyBzdXBw
b3NlZCB0byBtdWx0aXBseSB0byB0aGUgbGVmdCBvZiB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIHZl
cnRpY2VzLgotICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIG9yaWdpbiAoMCwgMCkgb2YgdGhlIHZp
ZXdwb3J0IGlzIGluIHRoZSBtaWRkbGUgb2YgdGhlIGNvbnRleHQsIHNvIHRoZXJlJ3Mgbm8gbmVl
ZCB0byBjaGFuZ2UgdGhlIG9yaWdpbiBvZiB0aGUgdHJhbnNmb3JtCi0gICAgICAgIC8vIGluIG9y
ZGVyIHRvIHJvdGF0ZSBhcm91bmQgdGhlIG1pZGRsZSBvZiBtZXNoLgotICAgICAgICBtYXRyaXgu
c2NhbGUzZCgxLjAgLyBtX2NvbnRleHRTaXplLndpZHRoKCksIDEuMCAvIG1fY29udGV4dFNpemUu
aGVpZ2h0KCksIDEpOwotICAgICAgICB0cmFuc2Zvcm1QYXJhbWV0ZXItPmFwcGx5VHJhbnNmb3Jt
KG1hdHJpeCwgbV9jb250ZXh0U2l6ZSk7Ci0gICAgICAgIG1hdHJpeC5zY2FsZTNkKG1fY29udGV4
dFNpemUud2lkdGgoKSwgbV9jb250ZXh0U2l6ZS5oZWlnaHQoKSwgMSk7Ci0gICAgfQotICAgIGZs
b2F0IGdsTWF0cml4WzE2XTsKLSAgICBtYXRyaXgudG9Db2x1bW5NYWpvckZsb2F0QXJyYXkoZ2xN
YXRyaXgpOwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdih1bmlmb3JtTG9jYXRpb24s
IDEsIGZhbHNlLCAmZ2xNYXRyaXhbMF0pOwotfQotCi12b2lkIEZFQ3VzdG9tRmlsdGVyOjpiaW5k
UHJvZ3JhbVBhcmFtZXRlcnMoKQotewotICAgIC8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIHJlc2V0
IHVuaWZvcm1zIHRoYXQgYXJlIG5vdCBzcGVjaWZpZWQgaW4gQ1NTLiBUaGlzIGlzIG5lZWRlZCB0
byBhdm9pZCB1c2luZyB2YWx1ZXMKLSAgICAvLyBzZXQgYnkgb3RoZXIgcHJldmlvdXMgcmVuZGVy
ZWQgZmlsdGVycy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NzY0NDAKLSAgICAKLSAgICBzaXplX3QgcGFyYW1ldGVyc1NpemUgPSBtX3BhcmFtZXRlcnMu
c2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVyc1NpemU7ICsraSkg
ewotICAgICAgICBDdXN0b21GaWx0ZXJQYXJhbWV0ZXIqIHBhcmFtZXRlciA9IG1fcGFyYW1ldGVy
cy5hdChpKS5nZXQoKTsKLSAgICAgICAgaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1fY29tcGlsZWRQ
cm9ncmFtLT51bmlmb3JtTG9jYXRpb25CeU5hbWUocGFyYW1ldGVyLT5uYW1lKCkpOwotICAgICAg
ICBpZiAodW5pZm9ybUxvY2F0aW9uID09IC0xKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIHN3aXRjaCAocGFyYW1ldGVyLT5wYXJhbWV0ZXJUeXBlKCkpIHsKLSAgICAgICAgY2FzZSBD
dXN0b21GaWx0ZXJQYXJhbWV0ZXI6OkFSUkFZOgotICAgICAgICAgICAgYmluZFByb2dyYW1BcnJh
eVBhcmFtZXRlcnModW5pZm9ybUxvY2F0aW9uLCBzdGF0aWNfY2FzdDxDdXN0b21GaWx0ZXJBcnJh
eVBhcmFtZXRlcio+KHBhcmFtZXRlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyOjpOVU1CRVI6Ci0gICAgICAgICAgICBiaW5kUHJvZ3Jh
bU51bWJlclBhcmFtZXRlcnModW5pZm9ybUxvY2F0aW9uLCBzdGF0aWNfY2FzdDxDdXN0b21GaWx0
ZXJOdW1iZXJQYXJhbWV0ZXIqPihwYXJhbWV0ZXIpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIEN1c3RvbUZpbHRlclBhcmFtZXRlcjo6VFJBTlNGT1JNOgotICAgICAgICAgICAg
YmluZFByb2dyYW1UcmFuc2Zvcm1QYXJhbWV0ZXIodW5pZm9ybUxvY2F0aW9uLCBzdGF0aWNfY2Fz
dDxDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIqPihwYXJhbWV0ZXIpKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEZFQ3VzdG9tRmlsdGVyOjpi
aW5kUHJvZ3JhbUFuZEJ1ZmZlcnMoUGxhdGZvcm0zRE9iamVjdCBpbnB1dFRleHR1cmUpCi17Ci0g
ICAgQVNTRVJUKG1fY29tcGlsZWRQcm9ncmFtLT5pc0luaXRpYWxpemVkKCkpOwotCi0gICAgbV9j
b250ZXh0LT51c2VQcm9ncmFtKG1fY29tcGlsZWRQcm9ncmFtLT5wcm9ncmFtKCkpOwotICAgIAot
ICAgIGlmIChwcm9ncmFtTmVlZHNJbnB1dFRleHR1cmUoKSkgewotICAgICAgICAvLyBXZSBzaG91
bGQgYmUgYmluZGluZyB0aGUgRE9NIGVsZW1lbnQgdGV4dHVyZSBzYW1wbGVyIG9ubHkgaWYgdGhl
IGF1dGhvciBpcyB1c2luZyB0aGUgQ1NTIG1peCBmdW5jdGlvbi4KLSAgICAgICAgQVNTRVJUKG1f
dmFsaWRhdGVkUHJvZ3JhbS0+cHJvZ3JhbUluZm8oKS5wcm9ncmFtVHlwZSgpID09IFBST0dSQU1f
VFlQRV9CTEVORFNfRUxFTUVOVF9URVhUVVJFKTsKLSAgICAgICAgQVNTRVJUKG1fY29tcGlsZWRQ
cm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSAhPSAtMSk7Ci0KLSAgICAgICAgbV9jb250ZXh0LT5h
Y3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7Ci0gICAgICAgIG1fY29u
dGV4dC0+dW5pZm9ybTFpKG1fY29tcGlsZWRQcm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSwgMCk7
Ci0gICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIGlucHV0VGV4dHVyZSk7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
TUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgICAgIG1fY29udGV4
dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7
Ci0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRl
eHQzRDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
V1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgfQotICAgIAot
ICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+cHJvamVjdGlvbk1hdHJpeExvY2F0aW9uKCkgIT0g
LTEpIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJvamVjdGlvbk1hdHJpeDsgCi0g
ICAgICAgIG9ydGhvZ29uYWxQcm9qZWN0aW9uTWF0cml4KHByb2plY3Rpb25NYXRyaXgsIC0wLjUs
IDAuNSwgLTAuNSwgMC41KTsKLSAgICAgICAgZmxvYXQgZ2xQcm9qZWN0aW9uTWF0cml4WzE2XTsK
LSAgICAgICAgcHJvamVjdGlvbk1hdHJpeC50b0NvbHVtbk1ham9yRmxvYXRBcnJheShnbFByb2pl
Y3Rpb25NYXRyaXgpOwotICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobV9jb21w
aWxlZFByb2dyYW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgJmdsUHJv
amVjdGlvbk1hdHJpeFswXSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fbWVzaENvbHVtbnMpOwot
ICAgIEFTU0VSVChtX21lc2hSb3dzKTsKLQotICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+bWVz
aFNpemVMb2NhdGlvbigpICE9IC0xKQotICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX2Nv
bXBpbGVkUHJvZ3JhbS0+bWVzaFNpemVMb2NhdGlvbigpLCBtX21lc2hDb2x1bW5zLCBtX21lc2hS
b3dzKTsKLQotICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+dGlsZVNpemVMb2NhdGlvbigpICE9
IC0xKQotICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX2NvbXBpbGVkUHJvZ3JhbS0+dGls
ZVNpemVMb2NhdGlvbigpLCAxLjAgLyBtX21lc2hDb2x1bW5zLCAxLjAgLyBtX21lc2hSb3dzKTsK
LQotICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+bWVzaEJveExvY2F0aW9uKCkgIT0gLTEpIHsK
LSAgICAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBjaGFuZ2Ugd2hlbiBmaWx0ZXIgbWFyZ2lucyB3
aWxsIGJlIGltcGxlbWVudGVkLAotICAgICAgICAvLyBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTcxNDAwCi0gICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKG1f
Y29tcGlsZWRQcm9ncmFtLT5tZXNoQm94TG9jYXRpb24oKSwgLTAuNSwgLTAuNSwgMS4wLCAxLjAp
OwotICAgIH0KLQotICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+c2FtcGxlclNpemVMb2NhdGlv
bigpICE9IC0xKQotICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX2NvbXBpbGVkUHJvZ3Jh
bS0+c2FtcGxlclNpemVMb2NhdGlvbigpLCBtX2NvbnRleHRTaXplLndpZHRoKCksIG1fY29udGV4
dFNpemUuaGVpZ2h0KCkpOwotICAgIAotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX21lc2gtPnZlcnRpY2VzQnVmZmVyT2JqZWN0KCkp
OwotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9B
UlJBWV9CVUZGRVIsIG1fbWVzaC0+ZWxlbWVudHNCdWZmZXJPYmplY3QoKSk7Ci0KLSAgICBiaW5k
VmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFtLT5wb3NpdGlvbkF0dHJpYkxvY2F0aW9u
KCksIFBvc2l0aW9uQXR0cmliU2l6ZSwgUG9zaXRpb25BdHRyaWJPZmZzZXQpOwotICAgIGJpbmRW
ZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPnRleEF0dHJpYkxvY2F0aW9uKCksIFRl
eEF0dHJpYlNpemUsIFRleEF0dHJpYk9mZnNldCk7Ci0gICAgLy8gRklYTUU6IEdldCByaWQgb2Yg
dGhlIGludGVybmFsIHRleCBjb29yZCBhdHRyaWJ1dGUgImNzc19hX3RleENvb3JkIi4gCi0gICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MzU4Ci0gICAgYmlu
ZFZlcnRleEF0dHJpYnV0ZShtX2NvbXBpbGVkUHJvZ3JhbS0+aW50ZXJuYWxUZXhDb29yZEF0dHJp
YkxvY2F0aW9uKCksIFRleEF0dHJpYlNpemUsIFRleEF0dHJpYk9mZnNldCk7Ci0gICAgYmluZFZl
cnRleEF0dHJpYnV0ZShtX2NvbXBpbGVkUHJvZ3JhbS0+bWVzaEF0dHJpYkxvY2F0aW9uKCksIE1l
c2hBdHRyaWJTaXplLCBNZXNoQXR0cmliT2Zmc2V0KTsKLSAgICBpZiAobV9tZXNoVHlwZSA9PSBD
dXN0b21GaWx0ZXJPcGVyYXRpb246OkRFVEFDSEVEKQotICAgICAgICBiaW5kVmVydGV4QXR0cmli
dXRlKG1fY29tcGlsZWRQcm9ncmFtLT50cmlhbmdsZUF0dHJpYkxvY2F0aW9uKCksIFRyaWFuZ2xl
QXR0cmliU2l6ZSwgVHJpYW5nbGVBdHRyaWJPZmZzZXQpOwotICAgIAotICAgIGJpbmRQcm9ncmFt
UGFyYW1ldGVycygpOwotfQotCi12b2lkIEZFQ3VzdG9tRmlsdGVyOjp1bmJpbmRWZXJ0ZXhBdHRy
aWJ1dGVzKCkKLXsKLSAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0t
PnBvc2l0aW9uQXR0cmliTG9jYXRpb24oKSk7Ci0gICAgdW5iaW5kVmVydGV4QXR0cmlidXRlKG1f
Y29tcGlsZWRQcm9ncmFtLT50ZXhBdHRyaWJMb2NhdGlvbigpKTsKLSAgICB1bmJpbmRWZXJ0ZXhB
dHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPmludGVybmFsVGV4Q29vcmRBdHRyaWJMb2NhdGlv
bigpKTsKLSAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPm1lc2hB
dHRyaWJMb2NhdGlvbigpKTsKLSAgICBpZiAobV9tZXNoVHlwZSA9PSBDdXN0b21GaWx0ZXJPcGVy
YXRpb246OkRFVEFDSEVEKQotICAgICAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxl
ZFByb2dyYW0tPnRyaWFuZ2xlQXR0cmliTG9jYXRpb24oKSk7Ci19Ci0KIHZvaWQgRkVDdXN0b21G
aWx0ZXI6OmR1bXAoKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oCmluZGV4IDA5ZGE1ZjFjN2Y3NDY2
ODA5ZTkzYThiODg0ZmQyYTFkNTZiOGUxYjQuLjRlYWVkZTJhMjU0MjUzNmFhNDBkNmZmMzc1MmJh
NDlmYTI1OWUyY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmgKQEAgLTQ0LDIzICs0NCwxNiBAQCBjbGFz
cyBVaW50OENsYW1wZWRBcnJheTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDYWNo
ZWRTaGFkZXI7Ci1jbGFzcyBDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlcjsKLWNsYXNzIEN1c3Rv
bUZpbHRlckNvbXBpbGVkUHJvZ3JhbTsKIGNsYXNzIEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQ7
Ci1jbGFzcyBDdXN0b21GaWx0ZXJNZXNoOwotY2xhc3MgQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1l
dGVyOwotY2xhc3MgQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyOwotY2xhc3MgQ3VzdG9t
RmlsdGVyVmFsaWRhdGVkUHJvZ3JhbTsKLWNsYXNzIERyYXdpbmdCdWZmZXI7CitjbGFzcyBDdXN0
b21GaWx0ZXJSZW5kZXJlcjsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xhc3MgSW50U2l6
ZTsKIAogY2xhc3MgRkVDdXN0b21GaWx0ZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0IHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUN1c3RvbUZpbHRlcj4gY3JlYXRlKEZpbHRlcios
IEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQqLCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlk
YXRlZFByb2dyYW0+LCBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiwKLSAgICAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBtZXNoUm93cywgdW5zaWduZWQgbWVzaENvbHVtbnMsIEN1c3Rv
bUZpbHRlck9wZXJhdGlvbjo6TWVzaEJveFR5cGUsIAotICAgICAgICAgICAgICAgICAgIEN1c3Rv
bUZpbHRlck9wZXJhdGlvbjo6TWVzaFR5cGUpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFQ3Vz
dG9tRmlsdGVyPiBjcmVhdGUoRmlsdGVyKiwgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCosIGNv
bnN0IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJiwgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVy
TGlzdCYsCisgICAgICAgIHVuc2lnbmVkIG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywg
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoQm94VHlwZSwKKyAgICAgICAgQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uOjpNZXNoVHlwZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCk7CiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKQEAgLTY4LDIzICs2MSwxOCBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBleHRlcm5hbFJlcHJlc2VudGF0aW9uKFRl
eHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBGRUN1c3Rv
bUZpbHRlcihGaWx0ZXIqLCBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KiwgUGFzc1JlZlB0cjxD
dXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiwgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVy
TGlzdCYsCi0gICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1l
c2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hCb3hUeXBlLCAKLSAgICAgICAg
ICAgICAgICAgICBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hUeXBlKTsKKyAgICBGRUN1c3Rv
bUZpbHRlcihGaWx0ZXIqLCBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KiwgY29uc3QgQ3VzdG9t
RmlsdGVyUHJvZ3JhbUluZm8mLCBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiwKKyAg
ICAgICAgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1lc2hDb2x1bW5zLCBDdXN0b21GaWx0
ZXJPcGVyYXRpb246Ok1lc2hCb3hUeXBlLAorICAgICAgICBDdXN0b21GaWx0ZXJPcGVyYXRpb246
Ok1lc2hUeXBlKTsKICAgICB+RkVDdXN0b21GaWx0ZXIoKTsKLSAgICAKKwogICAgIGJvb2wgYXBw
bHlTaGFkZXIoKTsKICAgICB2b2lkIGNsZWFyU2hhZGVyUmVzdWx0KCk7CiAgICAgYm9vbCBpbml0
aWFsaXplQ29udGV4dCgpOwotICAgIAotICAgIGVudW0gQ3VzdG9tRmlsdGVyRHJhd1R5cGUgewot
ICAgICAgICBORUVEU19JTlBVVF9URVhUVVJFLAotICAgICAgICBOT19JTlBVVF9URVhUVVJFCi0g
ICAgfTsKLSAgICBib29sIHByZXBhcmVGb3JEcmF3aW5nKEN1c3RvbUZpbHRlckRyYXdUeXBlID0g
TkVFRFNfSU5QVVRfVEVYVFVSRSk7CisKKyAgICBib29sIHByZXBhcmVGb3JEcmF3aW5nKCk7CiAK
ICAgICB2b2lkIGRyYXdGaWx0ZXJNZXNoKFBsYXRmb3JtM0RPYmplY3QgaW5wdXRUZXh0dXJlKTsK
LSAgICBib29sIHByb2dyYW1OZWVkc0lucHV0VGV4dHVyZSgpIGNvbnN0OwogICAgIGJvb2wgZW5z
dXJlSW5wdXRUZXh0dXJlKCk7CiAgICAgdm9pZCB1cGxvYWRJbnB1dFRleHR1cmUoVWludDhDbGFt
cGVkQXJyYXkqIHNyY1BpeGVsQXJyYXkpOwogICAgIGJvb2wgcmVzaXplQ29udGV4dElmTmVlZGVk
KGNvbnN0IEludFNpemUmKTsKQEAgLTk5LDIyICs4Nyw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBl
bnN1cmVGcmFtZUJ1ZmZlcigpOwogICAgIHZvaWQgZGVsZXRlUmVuZGVyQnVmZmVycygpOwogCi0g
ICAgdm9pZCBiaW5kVmVydGV4QXR0cmlidXRlKGludCBhdHRyaWJ1dGVMb2NhdGlvbiwgdW5zaWdu
ZWQgc2l6ZSwgdW5zaWduZWQgb2Zmc2V0KTsKLSAgICB2b2lkIHVuYmluZFZlcnRleEF0dHJpYnV0
ZShpbnQgYXR0cmlidXRlTG9jYXRpb24pOwotICAgIHZvaWQgYmluZFByb2dyYW1BcnJheVBhcmFt
ZXRlcnMoaW50IHVuaWZvcm1Mb2NhdGlvbiwgQ3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXIqKTsK
LSAgICB2b2lkIGJpbmRQcm9ncmFtTnVtYmVyUGFyYW1ldGVycyhpbnQgdW5pZm9ybUxvY2F0aW9u
LCBDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIqKTsKLSAgICB2b2lkIGJpbmRQcm9ncmFtVHJh
bnNmb3JtUGFyYW1ldGVyKGludCB1bmlmb3JtTG9jYXRpb24sIEN1c3RvbUZpbHRlclRyYW5zZm9y
bVBhcmFtZXRlciopOwotICAgIHZvaWQgYmluZFByb2dyYW1QYXJhbWV0ZXJzKCk7Ci0gICAgdm9p
ZCBiaW5kUHJvZ3JhbUFuZEJ1ZmZlcnMoUGxhdGZvcm0zRE9iamVjdCBpbnB1dFRleHR1cmUpOwot
ICAgIHZvaWQgdW5iaW5kVmVydGV4QXR0cmlidXRlcygpOwotICAgIAotICAgIC8vIE5vIG5lZWQg
dG8ga2VlcCBhIHJlZmVyZW5jZSBoZXJlLiBJdCBpcyBvd25lZCBieSB0aGUgUmVuZGVyVmlldy4K
LSAgICBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KiBtX2dsb2JhbENvbnRleHQ7Ci0gICAgCisg
ICAgUmVmUHRyPEN1c3RvbUZpbHRlclJlbmRlcmVyPiBtX2N1c3RvbUZpbHRlclJlbmRlcmVyOwog
ICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwotICAgIFJlZlB0cjxDdXN0
b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiBtX3ZhbGlkYXRlZFByb2dyYW07Ci0gICAgUmVmUHRy
PEN1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbT4gbV9jb21waWxlZFByb2dyYW07Ci0gICAgUmVm
UHRyPEN1c3RvbUZpbHRlck1lc2g+IG1fbWVzaDsKICAgICBJbnRTaXplIG1fY29udGV4dFNpemU7
CiAKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1faW5wdXRUZXh0dXJlOwpAQCAtMTI2LDEyICsxMDAs
NiBAQCBwcml2YXRlOgogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9tdWx0aXNhbXBsZUZyYW1lQnVm
ZmVyOwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9tdWx0aXNhbXBsZVJlbmRlckJ1ZmZlcjsKICAg
ICBQbGF0Zm9ybTNET2JqZWN0IG1fbXVsdGlzYW1wbGVEZXB0aEJ1ZmZlcjsKLQotICAgIEN1c3Rv
bUZpbHRlclBhcmFtZXRlckxpc3QgbV9wYXJhbWV0ZXJzOwotCi0gICAgdW5zaWduZWQgbV9tZXNo
Um93czsKLSAgICB1bnNpZ25lZCBtX21lc2hDb2x1bW5zOwotICAgIEN1c3RvbUZpbHRlck9wZXJh
dGlvbjo6TWVzaFR5cGUgbV9tZXNoVHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3Bw
CmluZGV4IGZkMDdmNGE4OGRiNWMyMjEwZGI3MzdhZDE3MzVhY2EyMWMxMzI1MzYuLjAyZWJmMTc5
YTIyMjBmOWU3MzZlMWJlNzA2M2IxYjAwZWZkOGVkZGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcApAQCAtNDQsOSArNDQsOCBAQAog
CiAjaWYgRU5BQkxFKENTU19TSEFERVJTKSAmJiBVU0UoM0RfR1JBUEhJQ1MpCiAjaW5jbHVkZSAi
Q3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC5oIgotI2luY2x1ZGUgIkN1c3RvbUZpbHRlclByb2dy
YW0uaCIKICNpbmNsdWRlICJDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJDdXN0
b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3Jh
bS5oIgogI2luY2x1ZGUgIkZFQ3VzdG9tRmlsdGVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCkBAIC05NiwyMCArOTUsMjAgQEAgc3RhdGljIFBhc3NS
ZWZQdHI8RkVDdXN0b21GaWx0ZXI+IGNyZWF0ZUN1c3RvbUZpbHRlckVmZmVjdChGaWx0ZXIqIGZp
bHRlciwgRG9jdW0KIHsKICAgICBpZiAoIWlzQ1NTQ3VzdG9tRmlsdGVyRW5hYmxlZChkb2N1bWVu
dCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIAorCiAgICAgUmVmUHRyPEN1c3RvbUZpbHRlclBy
b2dyYW0+IHByb2dyYW0gPSBvcGVyYXRpb24tPnByb2dyYW0oKTsKICAgICBpZiAoIXByb2dyYW0t
PmlzTG9hZGVkKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAgQ3VzdG9tRmlsdGVyR2xvYmFs
Q29udGV4dCogZ2xvYmFsQ29udGV4dCA9IGRvY3VtZW50LT5yZW5kZXJWaWV3KCktPmN1c3RvbUZp
bHRlckdsb2JhbENvbnRleHQoKTsKICAgICBnbG9iYWxDb250ZXh0LT5wcmVwYXJlQ29udGV4dElm
TmVlZGVkKGRvY3VtZW50LT52aWV3KCktPmhvc3RXaW5kb3coKSk7Ci0gICAgUmVmUHRyPEN1c3Rv
bUZpbHRlclZhbGlkYXRlZFByb2dyYW0+IHZhbGlkYXRlZFByb2dyYW0gPSBnbG9iYWxDb250ZXh0
LT5nZXRWYWxpZGF0ZWRQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JbmZvKCkpOwotICAgIGlmICgh
dmFsaWRhdGVkUHJvZ3JhbS0+aXNJbml0aWFsaXplZCgpKQorCisgICAgUmVmUHRyPEZFQ3VzdG9t
RmlsdGVyPiBmZUN1c3RvbUZpbHRlciA9IEZFQ3VzdG9tRmlsdGVyOjpjcmVhdGUoZmlsdGVyLCBn
bG9iYWxDb250ZXh0LCBwcm9ncmFtLT5wcm9ncmFtSW5mbygpLCBvcGVyYXRpb24tPnBhcmFtZXRl
cnMoKSwKKyAgICAgICAgb3BlcmF0aW9uLT5tZXNoUm93cygpLCBvcGVyYXRpb24tPm1lc2hDb2x1
bW5zKCksIG9wZXJhdGlvbi0+bWVzaEJveFR5cGUoKSwgb3BlcmF0aW9uLT5tZXNoVHlwZSgpKTsK
KyAgICBpZiAoIWZlQ3VzdG9tRmlsdGVyKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVy
biBGRUN1c3RvbUZpbHRlcjo6Y3JlYXRlKGZpbHRlciwgZ2xvYmFsQ29udGV4dCwgdmFsaWRhdGVk
UHJvZ3JhbSwgb3BlcmF0aW9uLT5wYXJhbWV0ZXJzKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3BlcmF0aW9uLT5tZXNoUm93cygpLCBvcGVyYXRpb24tPm1lc2hDb2x1bW5z
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLT5tZXNoQm94
VHlwZSgpLCBvcGVyYXRpb24tPm1lc2hUeXBlKCkpOworICAgIHJldHVybiBmZUN1c3RvbUZpbHRl
ci5yZWxlYXNlKCk7CiB9CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170116</attachid>
            <date>2012-10-23 04:14:51 -0700</date>
            <delta_ts>2012-10-23 14:28:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98989-20121023201315.patch</filename>
            <type>text/plain</type>
            <size>58010</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMDMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGU3NDY0ODNjYzZmZjU1
ZTU0OTdmOTkwMDYwYmI3NmQyNDE0ODhiNC4uZWYwNjc4N2Y3OGNkNTYyZmJjNzQ4MzNiNzQyYjI0
YTgyMmYwN2RjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDczIEBACisyMDEyLTEwLTIzICBIdWFu
ZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIFtDU1MgU2hh
ZGVyc10gQWRkIEN1c3RvbUZpbHRlclJlbmRlcmVyIHRvIHJldXNlIHRoaXMgY2xhc3MgYnkgQWNj
ZWxlcmF0ZWQgQ29tcG9zaXRpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05ODk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEV4dHJhY3QgQ3VzdG9tRmlsdGVyUmVuZGVyZXIgY2xhc3MgZnJvbSB0aGUg
cmVuZGVyaW5nIHBhcnQgb2YgRkVDdXN0b21GaWx0ZXIuCisgICAgICAgIEZFQ3VzdG9tRmlsdGVy
IG5vdyBwbGF5cyBhIHJvbGUgaW4gZXh0ZW5kaW5nIEZpbHRlckVmZmVjdCBhbmQgZGVsZWdhdGVz
CisgICAgICAgIHJlbmRlcmluZyBjc3Mgc2hhZGVycyB0byBDdXN0b21GaWx0ZXJSZW5kZXJlci4K
KworICAgICAgICBDdXN0b21GaWx0ZXJSZW5kZXJlciBkb2VzIG5vdCBrbm93IEZpbHRlciBhbmQg
RmlsdGVyRWZmZWN0LiBXZSBjYW4KKyAgICAgICAgY3JlYXRlIGEgQ3VzdG9tRmlsdGVyUmVuZGVy
ZXIgaW5zdGFuY2Ugd2l0aCBvbmx5CisgICAgICAgIEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQs
IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvIGFuZAorICAgICAgICBDdXN0b21GaWx0ZXJQYXJhbWV0
ZXJMaXN0LiBJdCBtZWFucyB0aGF0IEFjY2VsZXJhdGVkIENvbXBvc2l0aW5nIGNhbgorICAgICAg
ICBjcmVhdGUgdGhlIEN1c3RvbUZpbHRlclJlbmRlcmVyIGluc3RhbmNlIGlmIEFjY2VsZXJhdGVk
IENvbXBvc2l0aW5nIGhhcworICAgICAgICBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0IGFuZCBD
dXN0b21GaWx0ZXJPcGVyYXRpb24sIGFuZCBpdCBpcyBhbHJlYWR5CisgICAgICAgIHBvc3NpYmxl
LgorCisgICAgICAgIFRoaXMgcGF0Y2ggcHJlcGFyZXMgdG8gZW5hYmxlIENTUyBTaGFkZXJzIG9u
IEFjY2VsZXJhdGVkIENvbXBvc2l0aW5nLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gQ292ZXJl
ZCBieSBjc3MzL2ZpbHRlcnMvY3VzdG9tCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAg
ICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qOgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6Om9ydGhvZ29uYWxQ
cm9qZWN0aW9uTWF0cml4KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVy
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUmVuZGVyZXI6OkN1c3Rv
bUZpbHRlclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVy
Ojp+Q3VzdG9tRmlsdGVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVy
UmVuZGVyZXI6OnByZW11bHRpcGxpZWRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21G
aWx0ZXJSZW5kZXJlcjo6cHJvZ3JhbU5lZWRzSW5wdXRUZXh0dXJlKToKKyAgICAgICAgKFdlYkNv
cmU6OkN1c3RvbUZpbHRlclJlbmRlcmVyOjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0
b21GaWx0ZXJSZW5kZXJlcjo6cHJlcGFyZUZvckRyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VzdG9tRmlsdGVyUmVuZGVyZXI6OmluaXRpYWxpemVDb21waWxlZFByb2dyYW1JZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5kZXJlcjo6aW5pdGlhbGl6ZU1lc2hJ
Zk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5kZXJlcjo6YmluZFZl
cnRleEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5kZXJlcjo6
dW5iaW5kVmVydGV4QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclJl
bmRlcmVyOjpiaW5kUHJvZ3JhbUFycmF5UGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21GaWx0ZXJSZW5kZXJlcjo6YmluZFByb2dyYW1OdW1iZXJQYXJhbWV0ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVyOjpiaW5kUHJvZ3JhbVRyYW5zZm9ybVBh
cmFtZXRlcik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5kZXJlcjo6YmluZFBy
b2dyYW1QYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVy
OjpiaW5kUHJvZ3JhbUFuZEJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVy
UmVuZGVyZXI6OnVuYmluZFZlcnRleEF0dHJpYnV0ZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUmVuZGVyZXIuaDogQ29waWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDdXN0b21GaWx0ZXJSZW5kZXJlcik6CisgICAgICAg
ICAgQ3VzdG9tRmlsdGVyUmVuZGVyZXIgcmVuZGVycyBjdXN0b20gZmlsdGVycyBpbiBHUFUgdXNp
bmcgYQorICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNELgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVD
dXN0b21GaWx0ZXI6OkZFQ3VzdG9tRmlsdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ3VzdG9t
RmlsdGVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OmRlbGV0
ZVJlbmRlckJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OmRyYXdG
aWx0ZXJNZXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ3VzdG9tRmlsdGVyOjpwcmVwYXJlRm9y
RHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6YXBwbHlTaGFkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OnJlc29sdmVNdWx0aXNhbXBsZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6cmVzaXplTXVsdGlzYW1w
bGVCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ3VzdG9tRmlsdGVyOjpyZXNpemVDb250
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVy
Lmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEZFQ3VzdG9tRmlsdGVyKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlQ3VzdG9tRmlsdGVyRWZmZWN0KToKKwogMjAxMi0xMC0xOSAgSHVhbmcgRG9uZ3N1
bmcgIDxsdXh0ZWxsYUBjb21wYW55MTAwLm5ldD4KIAogICAgICAgICBbQ1NTIFNoYWRlcnNdIFNl
dCBGaWx0ZXJPcGVyYXRpb25zIG9uIEdyYXBoaWNzTGF5ZXIgYWZ0ZXIgdGhlIHByb2dyYW0gb2Yg
Q1NTIFNoYWRlcnMgaXMgbG9hZGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA3OGY5ODk4ZGY0
MWExMDc1N2RkYjM0YmY1YTljODg4YzQ5ODJjODQwLi4wZWU4ZDI3OWRlNjU1MTA3Mzk0MDQ2ZDNi
YmQ2YmY2MTI1MDc0ZDJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTkxMSw2ICsxOTExLDcg
QEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3Vz
dG9tRmlsdGVyUHJvZ3JhbS5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3Rv
bUZpbHRlclByb2dyYW1JbmZvLmNwcAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3Vz
dG9tRmlsdGVyUmVuZGVyZXIuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0
YW50TGlnaHRTb3VyY2UuY3BwCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5k
LmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IGNmZjk4Yzg2ZTdmYTViMDJlNDA0ZmRjYzQ1
ZWY4NjNkYTYwODg1MWUuLjBhMDYzNDRmMjc3YTRkYmM1MzliNTVmOGI0NDdkZGU4YTVjNDgxNWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNDMzNiw2ICs0MzM2LDggQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uaCBc
CisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJS
ZW5kZXJlci5jcHAgXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
Q3VzdG9tRmlsdGVyUmVuZGVyZXIuaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9DdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW0uY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3Jh
bS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZp
bHRlclRyYW5zZm9ybVBhcmFtZXRlci5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IDBkZDQ5ZTdhMzFlZmE2
MjVhNTYzNWJlYzk4ZGMxY2FjZGI4MDZhMTQuLmNkZTI3YzdlZjYyNzY4NDNjYWNhNjg3MzZjZjgy
NTI3YTQxNTQzMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIv
U291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMjA3Nyw2ICsyMDc3LDcgQEAgSEVBREVSUyAr
PSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQYXJhbWV0ZXIu
aCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmgg
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8u
aCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5o
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclRyYW5zZm9ybVBh
cmFtZXRlci5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclZh
bGlkYXRlZFByb2dyYW0uaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5k
LmggXApAQCAtMzQ4NiwxMyArMzQ4NywxNCBAQCBlbmFibGU/KFhTTFQpIHsKIAogZW5hYmxlPyhG
SUxURVJTKSB7CiAgICAgU09VUkNFUyArPSBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtLmNwcCBcCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC5jcHAgXAorICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlck1lc2guY3BwIFwKKyAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJNZXNoR2VuZXJhdG9yLmNw
cCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVy
UHJvZ3JhbS5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZp
bHRlclByb2dyYW1JbmZvLmNwcCBcCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
Q3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtLmNwcCBcCi0gICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyTWVzaC5jcHAgXAotICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlck1lc2hHZW5lcmF0b3IuY3BwIFwKKyAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5jcHAgXAogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0u
Y3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9EaXN0YW50TGlnaHRTb3Vy
Y2UuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJsZW5kLmNwcCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLmd5cGkKaW5kZXggMDhjNWQ2N2YzNjczMzBkYTQ5ZjQ3MjA2MmVkZWM2NmE1ZGVh
ZjhmZC4uZGU0MjYwMjJiYjFjYmRmZTU4MzZhM2RhMWUwMjRlYWYxZTk1NDM1NSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUuZ3lwaQpAQCAtNDk4MCw2ICs0OTgwLDggQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uaCcsCiAgICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5jcHAnLAogICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8u
aCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJS
ZW5kZXJlci5jcHAnLAorICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3Vz
dG9tRmlsdGVyUmVuZGVyZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9DdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW0uY3BwJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbS5oJywKICAg
ICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclZhbGlkYXRl
ZFByb2dyYW0uY3BwJywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9q
L1dlYkNvcmUudmNwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52
Y3Byb2oKaW5kZXggYzc2NmMwNmY2YjE0ZTM3MDJlYzY2YjRmM2M1M2I5YTU5MzI0YTVkYS4uNjk2
MjcxZTY3Njg3Y2VlMDIyZTE0ODgyZjU0YTAyMzNhNTA0MzBiNCAxMDA3NTUKLS0tIGEvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKKysrIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTMxOTI5LDYgKzMxOTI5LDE0IEBA
CiAJCQkJCQk+CiAJCQkJCTwvRmlsZT4KIAkJCQkJPEZpbGUKKwkJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xDdXN0b21GaWx0ZXJSZW5kZXJlci5jcHAiCisJ
CQkJCQk+CisJCQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUKKwkJCQkJCVJlbGF0aXZlUGF0aD0iLi5c
cGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xDdXN0b21GaWx0ZXJSZW5kZXJlci5oIgorCQkJCQkJ
PgorCQkJCQk8L0ZpbGU+CisJCQkJCTxGaWxlCiAJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRm
b3JtXGdyYXBoaWNzXGZpbHRlcnNcQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtLmNwcCIKIAkJ
CQkJCT4KIAkJCQkJPC9GaWxlPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDM2ODlmNDZiNjA3ZGQ3YTRiYmZkYjA3N2U4NDIzNjhm
NWUyZTBhN2EuLjI5MGUwM2Q1YjhiYWI0MDE5ZTljYjIyMGEyOTFkMzY4MGE1MDVkMTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTE0OTAsNiArMTQ5MCw4IEBACiAJCTUwM0QwQ0FBMTRCNUIwODcwMEYzMkY1NyAvKiBDdXN0b21G
aWx0ZXJQcm9ncmFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDUwM0QwQ0E3MTRCNUIwODcwMEYzMkY1NyAvKiBDdXN0b21GaWx0ZXJQcm9ncmFtLmNw
cCAqLzsgfTsKIAkJNTAzRDBDQUIxNEI1QjA4NzAwRjMyRjU3IC8qIEN1c3RvbUZpbHRlclByb2dy
YW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwM0Qw
Q0E4MTRCNUIwODcwMEYzMkY1NyAvKiBDdXN0b21GaWx0ZXJQcm9ncmFtLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJNTAzRDBDQUMxNEI1QjA4NzAwRjMyRjU3IC8q
IEN1c3RvbUZpbHRlclByb2dyYW1DbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUwM0QwQ0E5MTRCNUIwODcwMEYzMkY1NyAvKiBDdXN0b21GaWx0
ZXJQcm9ncmFtQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJNTAzRDBDQUExNEI1QjA4NzAwRjMyRjU4IC8qIEN1c3RvbUZpbHRlclJlbmRl
cmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUw
M0QwQ0E3MTRCNUIwODcwMEYzMkY1OCAvKiBDdXN0b21GaWx0ZXJSZW5kZXJlci5jcHAgKi87IH07
CisJCTUwM0QwQ0FCMTRCNUIwODcwMEYzMkY1OCAvKiBDdXN0b21GaWx0ZXJSZW5kZXJlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTAzRDBDQTgxNEI1
QjA4NzAwRjMyRjU4IC8qIEN1c3RvbUZpbHRlclJlbmRlcmVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJNTAzRDBDQUUxNEI1QjBCQTAwRjMyRjU3IC8qIFN0eWxl
Q3VzdG9tRmlsdGVyUHJvZ3JhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTAzRDBDQUQxNEI1QjBCQTAwRjMyRjU3IC8qIFN0eWxlQ3VzdG9tRmlsdGVy
UHJvZ3JhbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTUwOEND
QTRGMTNDRjEwNkIwMDMxNTFGMyAvKiBSZW5kZXJGbG93VGhyZWFkLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDhDQ0E0RDEzQ0YxMDZCMDAzMTUxRjMg
LyogUmVuZGVyRmxvd1RocmVhZC5oICovOyB9OwogCQk1MDhDQ0E1MDEzQ0YxMDZCMDAzMTUxRjMg
LyogUmVuZGVyRmxvd1RocmVhZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MDhDQ0E0RTEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVh
ZC5jcHAgKi87IH07CkBAIC04Njg4LDYgKzg2OTAsOCBAQAogCQk1MDNEMENBNzE0QjVCMDg3MDBG
MzJGNTcgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBDdXN0b21GaWx0ZXJQcm9ncmFtLmNwcDsgcGF0aCA9IGZpbHRlcnMvQ3Vz
dG9tRmlsdGVyUHJvZ3JhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUwM0Qw
Q0E4MTRCNUIwODcwMEYzMkY1NyAvKiBDdXN0b21GaWx0ZXJQcm9ncmFtLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEN1c3RvbUZpbHRlclByb2dyYW0uaDsgcGF0aCA9IGZpbHRl
cnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MDNEMENBOTE0QjVCMDg3MDBGMzJGNTcgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbUNsaWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDdXN0b21GaWx0ZXJQcm9ncmFtQ2xpZW50
Lmg7IHBhdGggPSBmaWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW1DbGllbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTAzRDBDQTcxNEI1QjA4NzAwRjMyRjU4IC8qIEN1c3RvbUZp
bHRlclJlbmRlcmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEN1
c3RvbUZpbHRlclJlbmRlcmVyLmNwcDsgcGF0aCA9IGZpbHRlcnMvQ3VzdG9tRmlsdGVyUmVuZGVy
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MDNEMENBODE0QjVCMDg3MDBG
MzJGNTggLyogQ3VzdG9tRmlsdGVyUmVuZGVyZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQ3VzdG9tRmlsdGVyUmVuZGVyZXIuaDsgcGF0aCA9IGZpbHRlcnMvQ3VzdG9tRmls
dGVyUmVuZGVyZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTAzRDBDQUQxNEI1
QjBCQTAwRjMyRjU3IC8qIFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBTdHlsZUN1c3RvbUZpbHRlclByb2dyYW0uaDsgcGF0aCA9IHN0
eWxlL1N0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MDhDQ0E0RDEzQ0YxMDZCMDAzMTUxRjMgLyogUmVuZGVyRmxvd1RocmVhZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJGbG93VGhyZWFkLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUwOENDQTRFMTNDRjEwNkIwMDMxNTFGMyAvKiBSZW5kZXJG
bG93VGhyZWFkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRl
ckZsb3dUaHJlYWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgyNDQsNiAr
MTgyNDgsOCBAQAogCQkJCTUwM0QwQ0E5MTRCNUIwODcwMEYzMkY1NyAvKiBDdXN0b21GaWx0ZXJQ
cm9ncmFtQ2xpZW50LmggKi8sCiAJCQkJNTBEODhDQjMxNUJERkRBQTAwMTgwOUY0IC8qIEN1c3Rv
bUZpbHRlclByb2dyYW1JbmZvLmNwcCAqLywKIAkJCQk1MEQ4OENCNDE1QkRGREFBMDAxODA5RjQg
LyogQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uaCAqLywKKwkJCQk1MDNEMENBNzE0QjVCMDg3MDBG
MzJGNTggLyogQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwICovLAorCQkJCTUwM0QwQ0E4MTRCNUIw
ODcwMEYzMkY1OCAvKiBDdXN0b21GaWx0ZXJSZW5kZXJlci5oICovLAogCQkJCTUwOUVDMTA4MTVF
ODQ4Q0EwMEU4MjU4MSAvKiBDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIuaCAqLywKIAkJ
CQlBMjk1MzJDRDE1REQ1RTE3MDA0NjlFQkMgLyogQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3Jh
bS5jcHAgKi8sCiAJCQkJQTI5NTMyQ0UxNURENUUxNzAwNDY5RUJDIC8qIEN1c3RvbUZpbHRlclZh
bGlkYXRlZFByb2dyYW0uaCAqLywKQEAgLTIyNjc0LDYgKzIyNjgwLDcgQEAKIAkJCQk1MDNEMENB
QjE0QjVCMDg3MDBGMzJGNTcgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTAzRDBDQUMxNEI1QjA4NzAwRjMyRjU3IC8qIEN1c3RvbUZpbHRlclByb2dyYW1DbGll
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUwRDg4Q0I2MTVCREZEQUEwMDE4MDlGNCAvKiBDdXN0
b21GaWx0ZXJQcm9ncmFtSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJNTAzRDBDQUIxNEI1QjA4
NzAwRjMyRjU4IC8qIEN1c3RvbUZpbHRlclJlbmRlcmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
Mjk1MzJEMDE1REQ1RTE3MDA0NjlFQkMgLyogQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThDQjQxM0UwRTg2MzNGRDAwMzJDNEYwIC8qIERhc2hBcnJh
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZEMEIwQTE5ODlDQTAwN0ZCOEM1IC8qIERhc2hi
b2FyZFJlZ2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNjI2OCw2ICsyNjI3NSw3IEBACiAJCQkJ
NTBDQzBBMzkxNEM2RjVCMTAwMTdBQjUxIC8qIEN1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk1MDNEMENBQTE0QjVCMDg3MDBGMzJGNTcgLyogQ3VzdG9tRmlsdGVy
UHJvZ3JhbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MEQ4OENCNTE1QkRGREFBMDAxODA5RjQg
LyogQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNTAzRDBD
QUExNEI1QjA4NzAwRjMyRjU4IC8qIEN1c3RvbUZpbHRlclJlbmRlcmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUEyOTUzMkNGMTVERDVFMTcwMDQ2OUVCQyAvKiBDdXN0b21GaWx0ZXJWYWxpZGF0
ZWRQcm9ncmFtLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk3QkM2QTIwMTUwNUYwODEwMDFCNzRB
QyAvKiBEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5N0JDNkEyMzE1MDVGMDgxMDAx
Qjc0QUMgLyogRGF0YWJhc2VBdXRob3JpemVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJS
ZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1
c3RvbUZpbHRlclJlbmRlcmVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYjI0Y2UxYTZmNTgzYmIyNjRmYjAy
ODk3NGZmMDczZmYxYzllZTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5jcHAKQEAgLTAsMCAr
MSwzMTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQWRvYmUgU3lzdGVtcyBJbmNvcnBv
cmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQWRvYmUg
U3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlCisgKiAgICBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZworICog
ICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAgIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQgSE9MREVSIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKENTU19TSEFERVJTKSAmJiBV
U0UoM0RfR1JBUEhJQ1MpCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUmVuZGVyZXIuaCIKKworI2lu
Y2x1ZGUgIkN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmls
dGVyQ29tcGlsZWRQcm9ncmFtLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyQ29uc3RhbnRzLmgi
CisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyTWVzaC5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRlck51
bWJlclBhcmFtZXRlci5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRlclBhcmFtZXRlci5oIgorI2lu
Y2x1ZGUgIkN1c3RvbUZpbHRlclByb2dyYW0uaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJUcmFu
c2Zvcm1QYXJhbWV0ZXIuaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFt
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJUcmFuc2Zvcm1h
dGlvbk1hdHJpeC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2b2lkIG9ydGhv
Z29uYWxQcm9qZWN0aW9uTWF0cml4KFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0
IGxlZnQsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGZsb2F0IHRvcCkKK3sKKyAgICBBU1NF
UlQobWF0cml4LmlzSWRlbnRpdHkoKSk7CisKKyAgICBmbG9hdCBkZWx0YVggPSByaWdodCAtIGxl
ZnQ7CisgICAgZmxvYXQgZGVsdGFZID0gdG9wIC0gYm90dG9tOworICAgIGlmICghZGVsdGFYIHx8
ICFkZWx0YVkpCisgICAgICAgIHJldHVybjsKKyAgICBtYXRyaXguc2V0TTExKDIuMGYgLyBkZWx0
YVgpOworICAgIG1hdHJpeC5zZXRNNDEoLShyaWdodCArIGxlZnQpIC8gZGVsdGFYKTsKKyAgICBt
YXRyaXguc2V0TTIyKDIuMGYgLyBkZWx0YVkpOworICAgIG1hdHJpeC5zZXRNNDIoLSh0b3AgKyBi
b3R0b20pIC8gZGVsdGFZKTsKKworICAgIC8vIFVzZSBiaWcgZW5vdWdoIG5lYXIvZmFyIHZhbHVl
cywgc28gdGhhdCBzaW1wbGUgcm90YXRpb25zIG9mIHJhdGhlciBsYXJnZSBvYmplY3RzIHdpbGwg
bm90CisgICAgLy8gZ2V0IGNsaXBwZWQuIDEwMDAwIHNob3VsZCBjb3ZlciBtb3N0IG9mIHRoZSBz
Y3JlZW4gcmVzb2x1dGlvbnMuCisgICAgY29uc3QgZmxvYXQgZmFyVmFsdWUgPSAxMDAwMDsKKyAg
ICBjb25zdCBmbG9hdCBuZWFyVmFsdWUgPSAtMTAwMDA7CisgICAgbWF0cml4LnNldE0zMygtMi4w
ZiAvIChmYXJWYWx1ZSAtIG5lYXJWYWx1ZSkpOworICAgIG1hdHJpeC5zZXRNNDMoLSAoZmFyVmFs
dWUgKyBuZWFyVmFsdWUpIC8gKGZhclZhbHVlIC0gbmVhclZhbHVlKSk7CisgICAgbWF0cml4LnNl
dE00NCgxLjBmKTsKK30KKworUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJSZW5kZXJlcj4gQ3VzdG9t
RmlsdGVyUmVuZGVyZXI6OmNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250
ZXh0LCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0+IHZhbGlkYXRlZFBy
b2dyYW0sIGNvbnN0IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbywgY29uc3Qg
Q3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYgcGFyYW1ldGVycywKKyAgICB1bnNpZ25lZCBtZXNo
Um93cywgdW5zaWduZWQgbWVzaENvbHVtbnMsIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaEJv
eFR5cGUgbWVzaEJveFR5cGUsIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaFR5cGUgbWVzaFR5
cGUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDdXN0b21GaWx0ZXJSZW5kZXJlcihjb250
ZXh0LCB2YWxpZGF0ZWRQcm9ncmFtLCBwcm9ncmFtSW5mbywgcGFyYW1ldGVycywgbWVzaFJvd3Ms
IG1lc2hDb2x1bW5zLCBtZXNoQm94VHlwZSwgbWVzaFR5cGUpKTsKK30KKworQ3VzdG9tRmlsdGVy
UmVuZGVyZXI6OkN1c3RvbUZpbHRlclJlbmRlcmVyKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQsIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4gdmFs
aWRhdGVkUHJvZ3JhbSwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mIHByb2dyYW1JbmZv
LCBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBwYXJhbWV0ZXJzLAorICAgIHVuc2ln
bmVkIG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
OjpNZXNoQm94VHlwZSwgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSBtZXNoVHlwZSkK
KyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV92YWxpZGF0ZWRQcm9ncmFtKHZhbGlk
YXRlZFByb2dyYW0pCisgICAgLCBtX2NvbXBpbGVkUHJvZ3JhbSgwKSAvLyBEb24ndCBjb21waWxl
IHRoZSBwcm9ncmFtIHVubGVzcyB3ZSBuZWVkIHRvIHBhaW50LgorICAgICwgbV9wYXJhbWV0ZXJz
KHBhcmFtZXRlcnMpCisgICAgLCBtX21lc2hSb3dzKG1lc2hSb3dzKQorICAgICwgbV9tZXNoQ29s
dW1ucyhtZXNoQ29sdW1ucykKKyAgICAsIG1fbWVzaFR5cGUobWVzaFR5cGUpCit7Cit9CisKK0N1
c3RvbUZpbHRlclJlbmRlcmVyOjp+Q3VzdG9tRmlsdGVyUmVuZGVyZXIoKQoreworfQorCitib29s
IEN1c3RvbUZpbHRlclJlbmRlcmVyOjpwcmVtdWx0aXBsaWVkQWxwaGEoKSBjb25zdAoreworICAg
IHJldHVybiBtX3ZhbGlkYXRlZFByb2dyYW0tPnByb2dyYW1JbmZvKCkucHJvZ3JhbVR5cGUoKSA9
PSBQUk9HUkFNX1RZUEVfQkxFTkRTX0VMRU1FTlRfVEVYVFVSRTsKK30KKworYm9vbCBDdXN0b21G
aWx0ZXJSZW5kZXJlcjo6cHJvZ3JhbU5lZWRzSW5wdXRUZXh0dXJlKCkgY29uc3QKK3sKKyAgICBB
U1NFUlQobV9jb21waWxlZFByb2dyYW0uZ2V0KCkpOworICAgIHJldHVybiBtX2NvbXBpbGVkUHJv
Z3JhbS0+c2FtcGxlckxvY2F0aW9uKCkgIT0gLTE7Cit9CisKK3ZvaWQgQ3VzdG9tRmlsdGVyUmVu
ZGVyZXI6OnBhaW50KFBsYXRmb3JtM0RPYmplY3QgaW5wdXRUZXh0dXJlLCBjb25zdCBJbnRTaXpl
JiBzaXplKQoreworICAgIC8vIEZJWE1FOiBXZSB3b3VsZCBuZWVkIHNvbWV0aGluZyBsaWtlIEN1
c3RvbUZpbHRlclJlbmRlcmVyU3RhdGUgdGhhdCB3aWxsIGNvbnRhaW4gdGhlIHNpemUgYW5kIG90
aGVyIHBhcmFtZXRlcnMgaW4gdGhlIGZ1dHVyZS4gV2Ugc2hvdWxkIHBhc3MgdGhhdCB0byBiaW5k
UHJvZ3JhbUJ1ZmZlcnMgaW5zdGVhZCBvZiBzdG9yaW5nIGl0LgorICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAxMDcKKyAgICBtX2NvbnRleHRTaXplID0g
c2l6ZTsKKworICAgIGJpbmRQcm9ncmFtQW5kQnVmZmVycyhpbnB1dFRleHR1cmUpOworICAgIG1f
Y29udGV4dC0+ZHJhd0VsZW1lbnRzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRVMsIG1fbWVz
aC0+aW5kaWNlc0NvdW50KCksIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCwgMCk7
CisgICAgdW5iaW5kVmVydGV4QXR0cmlidXRlcygpOworfQorCitib29sIEN1c3RvbUZpbHRlclJl
bmRlcmVyOjpwcmVwYXJlRm9yRHJhd2luZygpCit7CisgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBpbml0aWFsaXplQ29tcGlsZWRQcm9ncmFtSWZOZWVkZWQoKTsKKwor
ICAgIC8vIElmIHRoZSBzaGFkZXIgaGFkIGNvbXBpbGVyIGVycm9ycyB3ZSBjYW5ub3QgZHJhdyBh
bnl0aGluZy4KKyAgICBpZiAoIW1fY29tcGlsZWRQcm9ncmFtLT5pc0luaXRpYWxpemVkKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGluaXRpYWxpemVNZXNoSWZOZWVkZWQoKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6aW5pdGlhbGl6
ZUNvbXBpbGVkUHJvZ3JhbUlmTmVlZGVkKCkKK3sKKyAgICBpZiAobV9jb21waWxlZFByb2dyYW0u
Z2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29tcGlsZWRQcm9ncmFtID0gbV92YWxp
ZGF0ZWRQcm9ncmFtLT5jb21waWxlZFByb2dyYW0oKTsKK30KKwordm9pZCBDdXN0b21GaWx0ZXJS
ZW5kZXJlcjo6aW5pdGlhbGl6ZU1lc2hJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fbWVzaC5nZXQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IFNoYXJpbmcgdGhlIG1lc2ggd291
bGQganVzdCBzYXZlIHRoZSB0aW1lIG5lZWRlZCB0byB1cGxvYWQgaXQgdG8gdGhlIEdQVSwgc28g
SSBhc3N1bWUgd2UgY291bGQKKyAgICAvLyBiZW5jaG1hcmsgdGhhdCBmb3IgcGVyZm9ybWFuY2Uu
CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NDI5Cisg
ICAgbV9tZXNoID0gQ3VzdG9tRmlsdGVyTWVzaDo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSwgbV9t
ZXNoQ29sdW1ucywgbV9tZXNoUm93cywgRmxvYXRSZWN0KDAsIDAsIDEsIDEpLCBtX21lc2hUeXBl
KTsKK30KKwordm9pZCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6YmluZFZlcnRleEF0dHJpYnV0ZShp
bnQgYXR0cmlidXRlTG9jYXRpb24sIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIG9mZnNldCkKK3sK
KyAgICBpZiAoYXR0cmlidXRlTG9jYXRpb24gIT0gLTEpIHsKKyAgICAgICAgbV9jb250ZXh0LT52
ZXJ0ZXhBdHRyaWJQb2ludGVyKGF0dHJpYnV0ZUxvY2F0aW9uLCBzaXplLCBHcmFwaGljc0NvbnRl
eHQzRDo6RkxPQVQsIGZhbHNlLCBtX21lc2gtPmJ5dGVzUGVyVmVydGV4KCksIG9mZnNldCk7Cisg
ICAgICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYXR0cmlidXRlTG9jYXRp
b24pOworICAgIH0KK30KKwordm9pZCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6dW5iaW5kVmVydGV4
QXR0cmlidXRlKGludCBhdHRyaWJ1dGVMb2NhdGlvbikKK3sKKyAgICBpZiAoYXR0cmlidXRlTG9j
YXRpb24gIT0gLTEpCisgICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KGF0dHJpYnV0ZUxvY2F0aW9uKTsKK30KKwordm9pZCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6Ymlu
ZFByb2dyYW1BcnJheVBhcmFtZXRlcnMoaW50IHVuaWZvcm1Mb2NhdGlvbiwgQ3VzdG9tRmlsdGVy
QXJyYXlQYXJhbWV0ZXIqIGFycmF5UGFyYW1ldGVyKQoreworICAgIHVuc2lnbmVkIHBhcmFtZXRl
clNpemUgPSBhcnJheVBhcmFtZXRlci0+c2l6ZSgpOworICAgIFZlY3RvcjxHQzNEZmxvYXQ+IGZs
b2F0VmVjdG9yOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlclNpemU7
ICsraSkKKyAgICAgICAgZmxvYXRWZWN0b3IuYXBwZW5kKGFycmF5UGFyYW1ldGVyLT52YWx1ZUF0
KGkpKTsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdih1bmlmb3JtTG9jYXRpb24sIHBhcmFt
ZXRlclNpemUsIGZsb2F0VmVjdG9yLmRhdGEoKSk7Cit9CisKK3ZvaWQgQ3VzdG9tRmlsdGVyUmVu
ZGVyZXI6OmJpbmRQcm9ncmFtTnVtYmVyUGFyYW1ldGVycyhpbnQgdW5pZm9ybUxvY2F0aW9uLCBD
dXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIqIG51bWJlclBhcmFtZXRlcikKK3sKKyAgICBzd2l0
Y2ggKG51bWJlclBhcmFtZXRlci0+c2l6ZSgpKSB7CisgICAgY2FzZSAxOgorICAgICAgICBtX2Nv
bnRleHQtPnVuaWZvcm0xZih1bmlmb3JtTG9jYXRpb24sIG51bWJlclBhcmFtZXRlci0+dmFsdWVB
dCgwKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAgbV9jb250ZXh0LT51
bmlmb3JtMmYodW5pZm9ybUxvY2F0aW9uLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMCksIG51
bWJlclBhcmFtZXRlci0+dmFsdWVBdCgxKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMzoK
KyAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtM2YodW5pZm9ybUxvY2F0aW9uLCBudW1iZXJQYXJh
bWV0ZXItPnZhbHVlQXQoMCksIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgxKSwgbnVtYmVyUGFy
YW1ldGVyLT52YWx1ZUF0KDIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA0OgorICAgICAg
ICBtX2NvbnRleHQtPnVuaWZvcm00Zih1bmlmb3JtTG9jYXRpb24sIG51bWJlclBhcmFtZXRlci0+
dmFsdWVBdCgwKSwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDEpLCBudW1iZXJQYXJhbWV0ZXIt
PnZhbHVlQXQoMiksIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgzKSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30K
Kwordm9pZCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6YmluZFByb2dyYW1UcmFuc2Zvcm1QYXJhbWV0
ZXIoaW50IHVuaWZvcm1Mb2NhdGlvbiwgQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKiB0
cmFuc2Zvcm1QYXJhbWV0ZXIpCit7CisgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4Owor
ICAgIGlmIChtX2NvbnRleHRTaXplLndpZHRoKCkgJiYgbV9jb250ZXh0U2l6ZS5oZWlnaHQoKSkg
eworICAgICAgICAvLyBUaGUgdmlld3BvcnQgaXMgYSBib3ggd2l0aCB0aGUgc2l6ZSBvZiAxIHVu
aXQsIHNvIHdlIGFyZSBzY2FsbGluZyB1cCBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IHRyYW5zbGF0
aW9ucyBoYXBwZW4gdXNpbmcgcmVhbCBwaXhlbAorICAgICAgICAvLyB1bml0cy4gQXQgdGhlIGVu
ZCB3ZSBzY2FsZSBiYWNrIGRvd24gaW4gb3JkZXIgdG8gbWFwIGl0IGJhY2sgdG8gdGhlIG9yaWdp
bmFsIGJveC4gTm90ZSB0aGF0IHRyYW5zZm9ybXMgY29tZSBpbiByZXZlcnNlIG9yZGVyLCBiZWNh
dXNlIGl0IGlzCisgICAgICAgIC8vIHN1cHBvc2VkIHRvIG11bHRpcGx5IHRvIHRoZSBsZWZ0IG9m
IHRoZSBjb29yZGluYXRlcyBvZiB0aGUgdmVydGljZXMuCisgICAgICAgIC8vIE5vdGUgdGhhdCB0
aGUgb3JpZ2luICgwLCAwKSBvZiB0aGUgdmlld3BvcnQgaXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUg
Y29udGV4dCwgc28gdGhlcmUncyBubyBuZWVkIHRvIGNoYW5nZSB0aGUgb3JpZ2luIG9mIHRoZSB0
cmFuc2Zvcm0KKyAgICAgICAgLy8gaW4gb3JkZXIgdG8gcm90YXRlIGFyb3VuZCB0aGUgbWlkZGxl
IG9mIG1lc2guCisgICAgICAgIG1hdHJpeC5zY2FsZTNkKDEuMCAvIG1fY29udGV4dFNpemUud2lk
dGgoKSwgMS4wIC8gbV9jb250ZXh0U2l6ZS5oZWlnaHQoKSwgMSk7CisgICAgICAgIHRyYW5zZm9y
bVBhcmFtZXRlci0+YXBwbHlUcmFuc2Zvcm0obWF0cml4LCBtX2NvbnRleHRTaXplKTsKKyAgICAg
ICAgbWF0cml4LnNjYWxlM2QobV9jb250ZXh0U2l6ZS53aWR0aCgpLCBtX2NvbnRleHRTaXplLmhl
aWdodCgpLCAxKTsKKyAgICB9CisgICAgZmxvYXQgZ2xNYXRyaXhbMTZdOworICAgIG1hdHJpeC50
b0NvbHVtbk1ham9yRmxvYXRBcnJheShnbE1hdHJpeCk7CisgICAgbV9jb250ZXh0LT51bmlmb3Jt
TWF0cml4NGZ2KHVuaWZvcm1Mb2NhdGlvbiwgMSwgZmFsc2UsICZnbE1hdHJpeFswXSk7Cit9CisK
K3ZvaWQgQ3VzdG9tRmlsdGVyUmVuZGVyZXI6OmJpbmRQcm9ncmFtUGFyYW1ldGVycygpCit7Cisg
ICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8gcmVzZXQgdW5pZm9ybXMgdGhhdCBhcmUgbm90IHNw
ZWNpZmllZCBpbiBDU1MuIFRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIHVzaW5nIHZhbHVlcworICAg
IC8vIHNldCBieSBvdGhlciBwcmV2aW91cyByZW5kZXJlZCBmaWx0ZXJzLgorICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjQ0MAorCisgICAgc2l6ZV90IHBh
cmFtZXRlcnNTaXplID0gbV9wYXJhbWV0ZXJzLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IHBhcmFtZXRlcnNTaXplOyArK2kpIHsKKyAgICAgICAgQ3VzdG9tRmlsdGVyUGFyYW1l
dGVyKiBwYXJhbWV0ZXIgPSBtX3BhcmFtZXRlcnMuYXQoaSkuZ2V0KCk7CisgICAgICAgIGludCB1
bmlmb3JtTG9jYXRpb24gPSBtX2NvbXBpbGVkUHJvZ3JhbS0+dW5pZm9ybUxvY2F0aW9uQnlOYW1l
KHBhcmFtZXRlci0+bmFtZSgpKTsKKyAgICAgICAgaWYgKHVuaWZvcm1Mb2NhdGlvbiA9PSAtMSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBzd2l0Y2ggKHBhcmFtZXRlci0+cGFyYW1l
dGVyVHlwZSgpKSB7CisgICAgICAgIGNhc2UgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyOjpBUlJBWToK
KyAgICAgICAgICAgIGJpbmRQcm9ncmFtQXJyYXlQYXJhbWV0ZXJzKHVuaWZvcm1Mb2NhdGlvbiwg
c3RhdGljX2Nhc3Q8Q3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXIqPihwYXJhbWV0ZXIpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEN1c3RvbUZpbHRlclBhcmFtZXRlcjo6TlVN
QkVSOgorICAgICAgICAgICAgYmluZFByb2dyYW1OdW1iZXJQYXJhbWV0ZXJzKHVuaWZvcm1Mb2Nh
dGlvbiwgc3RhdGljX2Nhc3Q8Q3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyKj4ocGFyYW1ldGVy
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDdXN0b21GaWx0ZXJQYXJhbWV0
ZXI6OlRSQU5TRk9STToKKyAgICAgICAgICAgIGJpbmRQcm9ncmFtVHJhbnNmb3JtUGFyYW1ldGVy
KHVuaWZvcm1Mb2NhdGlvbiwgc3RhdGljX2Nhc3Q8Q3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1l
dGVyKj4ocGFyYW1ldGVyKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6YmluZFByb2dyYW1BbmRCdWZmZXJzKFBs
YXRmb3JtM0RPYmplY3QgaW5wdXRUZXh0dXJlKQoreworICAgIEFTU0VSVChtX2NvbXBpbGVkUHJv
Z3JhbS0+aXNJbml0aWFsaXplZCgpKTsKKworICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShtX2Nv
bXBpbGVkUHJvZ3JhbS0+cHJvZ3JhbSgpKTsKKworICAgIGlmIChwcm9ncmFtTmVlZHNJbnB1dFRl
eHR1cmUoKSkgeworICAgICAgICAvLyBXZSBzaG91bGQgYmUgYmluZGluZyB0aGUgRE9NIGVsZW1l
bnQgdGV4dHVyZSBzYW1wbGVyIG9ubHkgaWYgdGhlIGF1dGhvciBpcyB1c2luZyB0aGUgQ1NTIG1p
eCBmdW5jdGlvbi4KKyAgICAgICAgQVNTRVJUKG1fdmFsaWRhdGVkUHJvZ3JhbS0+cHJvZ3JhbUlu
Zm8oKS5wcm9ncmFtVHlwZSgpID09IFBST0dSQU1fVFlQRV9CTEVORFNfRUxFTUVOVF9URVhUVVJF
KTsKKyAgICAgICAgQVNTRVJUKG1fY29tcGlsZWRQcm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSAh
PSAtMSk7CisKKyAgICAgICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFMCk7CisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKG1fY29tcGlsZWRQ
cm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSwgMCk7CisgICAgICAgIG1fY29udGV4dC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGlucHV0VGV4dHVyZSk7CisgICAg
ICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0
M0Q6OkxJTkVBUik7CisgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRF
UiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7CisgICAgICAgIG1fY29udGV4dC0+dGV4UGFy
YW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7CisgICAg
ICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6
Q0xBTVBfVE9fRURHRSk7CisgICAgfQorCisgICAgaWYgKG1fY29tcGlsZWRQcm9ncmFtLT5wcm9q
ZWN0aW9uTWF0cml4TG9jYXRpb24oKSAhPSAtMSkgeworICAgICAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBwcm9qZWN0aW9uTWF0cml4OworICAgICAgICBvcnRob2dvbmFsUHJvamVjdGlvbk1hdHJp
eChwcm9qZWN0aW9uTWF0cml4LCAtMC41LCAwLjUsIC0wLjUsIDAuNSk7CisgICAgICAgIGZsb2F0
IGdsUHJvamVjdGlvbk1hdHJpeFsxNl07CisgICAgICAgIHByb2plY3Rpb25NYXRyaXgudG9Db2x1
bW5NYWpvckZsb2F0QXJyYXkoZ2xQcm9qZWN0aW9uTWF0cml4KTsKKyAgICAgICAgbV9jb250ZXh0
LT51bmlmb3JtTWF0cml4NGZ2KG1fY29tcGlsZWRQcm9ncmFtLT5wcm9qZWN0aW9uTWF0cml4TG9j
YXRpb24oKSwgMSwgZmFsc2UsICZnbFByb2plY3Rpb25NYXRyaXhbMF0pOworICAgIH0KKworICAg
IEFTU0VSVChtX21lc2hDb2x1bW5zKTsKKyAgICBBU1NFUlQobV9tZXNoUm93cyk7CisKKyAgICBp
ZiAobV9jb21waWxlZFByb2dyYW0tPm1lc2hTaXplTG9jYXRpb24oKSAhPSAtMSkKKyAgICAgICAg
bV9jb250ZXh0LT51bmlmb3JtMmYobV9jb21waWxlZFByb2dyYW0tPm1lc2hTaXplTG9jYXRpb24o
KSwgbV9tZXNoQ29sdW1ucywgbV9tZXNoUm93cyk7CisKKyAgICBpZiAobV9jb21waWxlZFByb2dy
YW0tPnRpbGVTaXplTG9jYXRpb24oKSAhPSAtMSkKKyAgICAgICAgbV9jb250ZXh0LT51bmlmb3Jt
MmYobV9jb21waWxlZFByb2dyYW0tPnRpbGVTaXplTG9jYXRpb24oKSwgMS4wIC8gbV9tZXNoQ29s
dW1ucywgMS4wIC8gbV9tZXNoUm93cyk7CisKKyAgICBpZiAobV9jb21waWxlZFByb2dyYW0tPm1l
c2hCb3hMb2NhdGlvbigpICE9IC0xKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgY2hh
bmdlIHdoZW4gZmlsdGVyIG1hcmdpbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwKKyAgICAgICAgLy8g
c2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTQwMAorICAgICAg
ICBtX2NvbnRleHQtPnVuaWZvcm00ZihtX2NvbXBpbGVkUHJvZ3JhbS0+bWVzaEJveExvY2F0aW9u
KCksIC0wLjUsIC0wLjUsIDEuMCwgMS4wKTsKKyAgICB9CisKKyAgICBpZiAobV9jb21waWxlZFBy
b2dyYW0tPnNhbXBsZXJTaXplTG9jYXRpb24oKSAhPSAtMSkKKyAgICAgICAgbV9jb250ZXh0LT51
bmlmb3JtMmYobV9jb21waWxlZFByb2dyYW0tPnNhbXBsZXJTaXplTG9jYXRpb24oKSwgbV9jb250
ZXh0U2l6ZS53aWR0aCgpLCBtX2NvbnRleHRTaXplLmhlaWdodCgpKTsKKworICAgIG1fY29udGV4
dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX21lc2gtPnZl
cnRpY2VzQnVmZmVyT2JqZWN0KCkpOworICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1fbWVzaC0+ZWxlbWVudHNCdWZmZXJP
YmplY3QoKSk7CisKKyAgICBiaW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFtLT5w
b3NpdGlvbkF0dHJpYkxvY2F0aW9uKCksIFBvc2l0aW9uQXR0cmliU2l6ZSwgUG9zaXRpb25BdHRy
aWJPZmZzZXQpOworICAgIGJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPnRl
eEF0dHJpYkxvY2F0aW9uKCksIFRleEF0dHJpYlNpemUsIFRleEF0dHJpYk9mZnNldCk7CisgICAg
Ly8gRklYTUU6IEdldCByaWQgb2YgdGhlIGludGVybmFsIHRleCBjb29yZCBhdHRyaWJ1dGUgImNz
c19hX3RleENvb3JkIi4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTQzNTgKKyAgICBiaW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFtLT5p
bnRlcm5hbFRleENvb3JkQXR0cmliTG9jYXRpb24oKSwgVGV4QXR0cmliU2l6ZSwgVGV4QXR0cmli
T2Zmc2V0KTsKKyAgICBiaW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFtLT5tZXNo
QXR0cmliTG9jYXRpb24oKSwgTWVzaEF0dHJpYlNpemUsIE1lc2hBdHRyaWJPZmZzZXQpOworICAg
IGlmIChtX21lc2hUeXBlID09IEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6REVUQUNIRUQpCisgICAg
ICAgIGJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPnRyaWFuZ2xlQXR0cmli
TG9jYXRpb24oKSwgVHJpYW5nbGVBdHRyaWJTaXplLCBUcmlhbmdsZUF0dHJpYk9mZnNldCk7CisK
KyAgICBiaW5kUHJvZ3JhbVBhcmFtZXRlcnMoKTsKK30KKwordm9pZCBDdXN0b21GaWx0ZXJSZW5k
ZXJlcjo6dW5iaW5kVmVydGV4QXR0cmlidXRlcygpCit7CisgICAgdW5iaW5kVmVydGV4QXR0cmli
dXRlKG1fY29tcGlsZWRQcm9ncmFtLT5wb3NpdGlvbkF0dHJpYkxvY2F0aW9uKCkpOworICAgIHVu
YmluZFZlcnRleEF0dHJpYnV0ZShtX2NvbXBpbGVkUHJvZ3JhbS0+dGV4QXR0cmliTG9jYXRpb24o
KSk7CisgICAgdW5iaW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFtLT5pbnRlcm5h
bFRleENvb3JkQXR0cmliTG9jYXRpb24oKSk7CisgICAgdW5iaW5kVmVydGV4QXR0cmlidXRlKG1f
Y29tcGlsZWRQcm9ncmFtLT5tZXNoQXR0cmliTG9jYXRpb24oKSk7CisgICAgaWYgKG1fbWVzaFR5
cGUgPT0gQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpERVRBQ0hFRCkKKyAgICAgICAgdW5iaW5kVmVy
dGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFtLT50cmlhbmdsZUF0dHJpYkxvY2F0aW9uKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoQ1NTX1NI
QURFUlMpICYmIFVTRSgzRF9HUkFQSElDUykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUmVuZGVyZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUmVuZGVyZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi4zMjRkOTUwZjVkMTFmNzIwMDFkNGQ5ZWRmMjlhNmU3YWUwOWIxNmI0Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9D
dXN0b21GaWx0ZXJSZW5kZXJlci5oCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgQ29tcGFueSAxMDAsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
CisgKiAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNj
bGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAqICAg
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSIOKAnEFTIElT4oCdIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksCisgKiBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCisgKiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YKKyAqIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICog
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBDdXN0b21GaWx0ZXJSZW5kZXJlcl9oCisjZGVm
aW5lIEN1c3RvbUZpbHRlclJlbmRlcmVyX2gKKworI2lmIEVOQUJMRShDU1NfU0hBREVSUykgJiYg
VVNFKDNEX0dSQVBISUNTKQorCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCisj
aW5jbHVkZSAiR3JhcGhpY3NUeXBlczNELmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXI7CitjbGFzcyBDdXN0b21GaWx0ZXJDb21waWxlZFBy
b2dyYW07CitjbGFzcyBDdXN0b21GaWx0ZXJNZXNoOworY2xhc3MgQ3VzdG9tRmlsdGVyTnVtYmVy
UGFyYW1ldGVyOworY2xhc3MgQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyOworY2xhc3Mg
Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbTsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwor
Y2xhc3MgSW50U2l6ZTsKKworY2xhc3MgQ3VzdG9tRmlsdGVyUmVuZGVyZXIgOiBwdWJsaWMgUmVm
Q291bnRlZDxDdXN0b21GaWx0ZXJSZW5kZXJlcj4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEN1c3RvbUZpbHRlclJlbmRlcmVyPiBjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4sIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4sIGNvbnN0
IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJiwgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlz
dCYsCisgICAgICAgIHVuc2lnbmVkIG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoQm94VHlwZSwgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpN
ZXNoVHlwZSk7CisgICAgfkN1c3RvbUZpbHRlclJlbmRlcmVyKCk7CisKKyAgICBib29sIHByZW11
bHRpcGxpZWRBbHBoYSgpIGNvbnN0OworICAgIGJvb2wgcHJvZ3JhbU5lZWRzSW5wdXRUZXh0dXJl
KCkgY29uc3Q7CisKKyAgICBib29sIHByZXBhcmVGb3JEcmF3aW5nKCk7CisKKyAgICB2b2lkIHBh
aW50KFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IEludFNpemUmKTsKKworcHJpdmF0ZToKKyAgICBD
dXN0b21GaWx0ZXJSZW5kZXJlcihQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc1Jl
ZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiwgY29uc3QgQ3VzdG9tRmlsdGVyUHJv
Z3JhbUluZm8mLCBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiwKKyAgICAgICAgdW5z
aWduZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1lc2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJPcGVyYXRp
b246Ok1lc2hCb3hUeXBlLCBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hUeXBlKTsKKworICAg
IHZvaWQgaW5pdGlhbGl6ZUNvbXBpbGVkUHJvZ3JhbUlmTmVlZGVkKCk7CisgICAgdm9pZCBpbml0
aWFsaXplTWVzaElmTmVlZGVkKCk7CisKKyAgICB2b2lkIGJpbmRWZXJ0ZXhBdHRyaWJ1dGUoaW50
IGF0dHJpYnV0ZUxvY2F0aW9uLCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBvZmZzZXQpOworICAg
IHZvaWQgdW5iaW5kVmVydGV4QXR0cmlidXRlKGludCBhdHRyaWJ1dGVMb2NhdGlvbik7CisgICAg
dm9pZCBiaW5kUHJvZ3JhbUFycmF5UGFyYW1ldGVycyhpbnQgdW5pZm9ybUxvY2F0aW9uLCBDdXN0
b21GaWx0ZXJBcnJheVBhcmFtZXRlciopOworICAgIHZvaWQgYmluZFByb2dyYW1OdW1iZXJQYXJh
bWV0ZXJzKGludCB1bmlmb3JtTG9jYXRpb24sIEN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlciop
OworICAgIHZvaWQgYmluZFByb2dyYW1UcmFuc2Zvcm1QYXJhbWV0ZXIoaW50IHVuaWZvcm1Mb2Nh
dGlvbiwgQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKik7CisgICAgdm9pZCBiaW5kUHJv
Z3JhbVBhcmFtZXRlcnMoKTsKKyAgICB2b2lkIGJpbmRQcm9ncmFtQW5kQnVmZmVycyhQbGF0Zm9y
bTNET2JqZWN0IGlucHV0VGV4dHVyZSk7CisgICAgdm9pZCB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGVz
KCk7CisKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsKKyAgICBSZWZQ
dHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4gbV92YWxpZGF0ZWRQcm9ncmFtOworICAg
IFJlZlB0cjxDdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW0+IG1fY29tcGlsZWRQcm9ncmFtOwor
ICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJNZXNoPiBtX21lc2g7CisgICAgSW50U2l6ZSBtX2NvbnRl
eHRTaXplOworCisgICAgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCBtX3BhcmFtZXRlcnM7CisK
KyAgICB1bnNpZ25lZCBtX21lc2hSb3dzOworICAgIHVuc2lnbmVkIG1fbWVzaENvbHVtbnM7Cisg
ICAgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSBtX21lc2hUeXBlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENTU19TSEFERVJTKSAmJiBV
U0UoM0RfR1JBUEhJQ1MpCisKKyNlbmRpZiAvLyBDdXN0b21GaWx0ZXJSZW5kZXJlcl9oCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9t
RmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
dXN0b21GaWx0ZXIuY3BwCmluZGV4IDcwN2VkYjg2NmZlMTNjMmM5N2QwNWNjNjYxOTdlOTBkZjJm
MGFhNTYuLjM1ZThkOWYzNjIwNGExZmYzNWE0ZTQ4ZGI5Mzk5MzAwYzY4NzQyMTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
dXN0b21GaWx0ZXIuY3BwCkBAIC0zMyw2MSArMzMsMjMgQEAKICNpZiBFTkFCTEUoQ1NTX1NIQURF
UlMpICYmIFVTRSgzRF9HUkFQSElDUykKICNpbmNsdWRlICJGRUN1c3RvbUZpbHRlci5oIgogCi0j
aW5jbHVkZSAiQ3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXIuaCIKLSNpbmNsdWRlICJDdXN0b21G
aWx0ZXJDb21waWxlZFByb2dyYW0uaCIKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJDb25zdGFudHMu
aCIKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmgiCi0jaW5jbHVkZSAiQ3Vz
dG9tRmlsdGVyTWVzaC5oIgotI2luY2x1ZGUgIkN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlci5o
IgotI2luY2x1ZGUgIkN1c3RvbUZpbHRlclBhcmFtZXRlci5oIgotI2luY2x1ZGUgIkN1c3RvbUZp
bHRlclByb2dyYW0uaCIKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIu
aCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJSZW5kZXJlci5oIgogI2luY2x1ZGUgIkN1c3RvbUZp
bHRlclZhbGlkYXRlZFByb2dyYW0uaCIKLSNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCiAjaW5j
bHVkZSAiRXh0ZW5zaW9uczNELmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNp
bmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1
ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCi0jaW5jbHVk
ZSAiVGlsaW5nRGF0YS5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCiAKICNp
bmNsdWRlIDx3dGYvVWludDhDbGFtcGVkQXJyYXkuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1zdGF0aWMgY29uc3QgaW50IGtNYXhTYW1wbGVDb3VudCA9IDQ7Ci0KLXN0YXRpYyB2b2lkIG9y
dGhvZ29uYWxQcm9qZWN0aW9uTWF0cml4KFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZs
b2F0IGxlZnQsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGZsb2F0IHRvcCkKLXsKLSAgICBB
U1NFUlQobWF0cml4LmlzSWRlbnRpdHkoKSk7Ci0gICAgCi0gICAgZmxvYXQgZGVsdGFYID0gcmln
aHQgLSBsZWZ0OwotICAgIGZsb2F0IGRlbHRhWSA9IHRvcCAtIGJvdHRvbTsKLSAgICBpZiAoIWRl
bHRhWCB8fCAhZGVsdGFZKQotICAgICAgICByZXR1cm47Ci0gICAgbWF0cml4LnNldE0xMSgyLjBm
IC8gZGVsdGFYKTsKLSAgICBtYXRyaXguc2V0TTQxKC0ocmlnaHQgKyBsZWZ0KSAvIGRlbHRhWCk7
Ci0gICAgbWF0cml4LnNldE0yMigyLjBmIC8gZGVsdGFZKTsKLSAgICBtYXRyaXguc2V0TTQyKC0o
dG9wICsgYm90dG9tKSAvIGRlbHRhWSk7Ci0KLSAgICAvLyBVc2UgYmlnIGVub3VnaCBuZWFyL2Zh
ciB2YWx1ZXMsIHNvIHRoYXQgc2ltcGxlIHJvdGF0aW9ucyBvZiByYXRoZXIgbGFyZ2Ugb2JqZWN0
cyB3aWxsIG5vdAotICAgIC8vIGdldCBjbGlwcGVkLiAxMDAwMCBzaG91bGQgY292ZXIgbW9zdCBv
ZiB0aGUgc2NyZWVuIHJlc29sdXRpb25zLgotICAgIGNvbnN0IGZsb2F0IGZhclZhbHVlID0gMTAw
MDA7Ci0gICAgY29uc3QgZmxvYXQgbmVhclZhbHVlID0gLTEwMDAwOwotICAgIG1hdHJpeC5zZXRN
MzMoLTIuMGYgLyAoZmFyVmFsdWUgLSBuZWFyVmFsdWUpKTsKLSAgICBtYXRyaXguc2V0TTQzKC0g
KGZhclZhbHVlICsgbmVhclZhbHVlKSAvIChmYXJWYWx1ZSAtIG5lYXJWYWx1ZSkpOwotICAgIG1h
dHJpeC5zZXRNNDQoMS4wZik7Ci19Ci0KLUZFQ3VzdG9tRmlsdGVyOjpGRUN1c3RvbUZpbHRlcihG
aWx0ZXIqIGZpbHRlciwgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCogY3VzdG9tRmlsdGVyR2xv
YmFsQ29udGV4dCwgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiB2YWxp
ZGF0ZWRQcm9ncmFtLCBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBwYXJhbWV0ZXJz
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1lc2hSb3dzLCB1bnNp
Z25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoQm94VHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hU
eXBlIG1lc2hUeXBlKQorRkVDdXN0b21GaWx0ZXI6OkZFQ3VzdG9tRmlsdGVyKEZpbHRlciogZmls
dGVyLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBQYXNzUmVmUHRyPEN1
c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0+IHZhbGlkYXRlZFByb2dyYW0sIGNvbnN0IEN1c3Rv
bUZpbHRlclByb2dyYW1JbmZvJiBwcm9ncmFtSW5mbywgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1l
dGVyTGlzdCYgcGFyYW1ldGVycywKKyAgICB1bnNpZ25lZCBtZXNoUm93cywgdW5zaWduZWQgbWVz
aENvbHVtbnMsIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaEJveFR5cGUgbWVzaEJveFR5cGUs
CisgICAgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSBtZXNoVHlwZSkKICAgICA6IEZp
bHRlckVmZmVjdChmaWx0ZXIpCi0gICAgLCBtX2dsb2JhbENvbnRleHQoY3VzdG9tRmlsdGVyR2xv
YmFsQ29udGV4dCkKLSAgICAsIG1fdmFsaWRhdGVkUHJvZ3JhbSh2YWxpZGF0ZWRQcm9ncmFtKQot
ICAgICwgbV9jb21waWxlZFByb2dyYW0oMCkgLy8gRG9uJ3QgY29tcGlsZSB0aGUgcHJvZ3JhbSB1
bmxlc3Mgd2UgbmVlZCB0byBwYWludC4KKyAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICwg
bV9jdXN0b21GaWx0ZXJSZW5kZXJlcihDdXN0b21GaWx0ZXJSZW5kZXJlcjo6Y3JlYXRlKG1fY29u
dGV4dCwgdmFsaWRhdGVkUHJvZ3JhbSwgcHJvZ3JhbUluZm8sIHBhcmFtZXRlcnMsIG1lc2hSb3dz
LCBtZXNoQ29sdW1ucywgbWVzaEJveFR5cGUsIG1lc2hUeXBlKSkKICAgICAsIG1faW5wdXRUZXh0
dXJlKDApCiAgICAgLCBtX2ZyYW1lQnVmZmVyKDApCiAgICAgLCBtX2RlcHRoQnVmZmVyKDApCkBA
IC05NiwyMCArNTgsMTQgQEAgRkVDdXN0b21GaWx0ZXI6OkZFQ3VzdG9tRmlsdGVyKEZpbHRlciog
ZmlsdGVyLCBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KiBjdXN0b20KICAgICAsIG1fbXVsdGlz
YW1wbGVGcmFtZUJ1ZmZlcigwKQogICAgICwgbV9tdWx0aXNhbXBsZVJlbmRlckJ1ZmZlcigwKQog
ICAgICwgbV9tdWx0aXNhbXBsZURlcHRoQnVmZmVyKDApCi0gICAgLCBtX3BhcmFtZXRlcnMocGFy
YW1ldGVycykKLSAgICAsIG1fbWVzaFJvd3MobWVzaFJvd3MpCi0gICAgLCBtX21lc2hDb2x1bW5z
KG1lc2hDb2x1bW5zKQotICAgICwgbV9tZXNoVHlwZShtZXNoVHlwZSkKIHsKLSAgICAvLyBBbiBG
RUN1c3RvbUZpbHRlciBzaG91bGRuJ3QgaGF2ZSBiZWVuIGNyZWF0ZWQgdW5sZXNzIHRoZSBwcm9n
cmFtIHBhc3NlZCB2YWxpZGF0aW9uLgotICAgIEFTU0VSVChtX3ZhbGlkYXRlZFByb2dyYW0tPmlz
SW5pdGlhbGl6ZWQoKSk7CiB9CiAKLVBhc3NSZWZQdHI8RkVDdXN0b21GaWx0ZXI+IEZFQ3VzdG9t
RmlsdGVyOjpjcmVhdGUoRmlsdGVyKiBmaWx0ZXIsIEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQq
IGN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQsIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRh
dGVkUHJvZ3JhbT4gdmFsaWRhdGVkUHJvZ3JhbSwgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVy
TGlzdCYgcGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1bnNpZ25lZCBtZXNoUm93cywgdW5zaWduZWQgbWVzaENvbHVtbnMsIEN1c3RvbUZpbHRl
ck9wZXJhdGlvbjo6TWVzaEJveFR5cGUgbWVzaEJveFR5cGUsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSBt
ZXNoVHlwZSkKK1Bhc3NSZWZQdHI8RkVDdXN0b21GaWx0ZXI+IEZFQ3VzdG9tRmlsdGVyOjpjcmVh
dGUoRmlsdGVyKiBmaWx0ZXIsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQs
IFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4gdmFsaWRhdGVkUHJvZ3Jh
bSwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvLCBjb25zdCBDdXN0
b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBwYXJhbWV0ZXJzLAorICAgIHVuc2lnbmVkIG1lc2hSb3dz
LCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoQm94VHlw
ZSBtZXNoQm94VHlwZSwKKyAgICBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hUeXBlIG1lc2hU
eXBlKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVDdXN0b21GaWx0ZXIoZmlsdGVyLCBj
dXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LCB2YWxpZGF0ZWRQcm9ncmFtLCBwYXJhbWV0ZXJzLCBt
ZXNoUm93cywgbWVzaENvbHVtbnMsIG1lc2hCb3hUeXBlLCBtZXNoVHlwZSkpOworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgRkVDdXN0b21GaWx0ZXIoZmlsdGVyLCBjb250ZXh0LCB2YWxpZGF0ZWRQ
cm9ncmFtLCBwcm9ncmFtSW5mbywgcGFyYW1ldGVycywgbWVzaFJvd3MsIG1lc2hDb2x1bW5zLCBt
ZXNoQm94VHlwZSwgbWVzaFR5cGUpKTsKIH0KIAogRkVDdXN0b21GaWx0ZXI6On5GRUN1c3RvbUZp
bHRlcigpCkBAIC0xMTksOCArNzUsNyBAQCBGRUN1c3RvbUZpbHRlcjo6fkZFQ3VzdG9tRmlsdGVy
KCkKIAogdm9pZCBGRUN1c3RvbUZpbHRlcjo6ZGVsZXRlUmVuZGVyQnVmZmVycygpCiB7Ci0gICAg
aWYgKCFtX2NvbnRleHQpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV9jb250ZXh0KTsK
ICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGlmIChtX2lucHV0VGV4
dHVyZSkgewogICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUobV9pbnB1dFRleHR1cmUp
OwpAQCAtMTg3LDQ1ICsxNDIsMzMgQEAgdm9pZCBGRUN1c3RvbUZpbHRlcjo6ZHJhd0ZpbHRlck1l
c2goUGxhdGZvcm0zRE9iamVjdCBpbnB1dFRleHR1cmUpCiAgICAgYm9vbCBtdWx0aXNhbXBsZSA9
IGNhblVzZU11bHRpc2FtcGxlQnVmZmVycygpOwogICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbXVsdGlzYW1wbGUgPyBtX211bHRp
c2FtcGxlRnJhbWVCdWZmZXIgOiBtX2ZyYW1lQnVmZmVyKTsKICAgICBtX2NvbnRleHQtPnZpZXdw
b3J0KDAsIDAsIG1fY29udGV4dFNpemUud2lkdGgoKSwgbV9jb250ZXh0U2l6ZS5oZWlnaHQoKSk7
Ci0gICAgCisKICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwgMCk7CiAgICAgbV9j
b250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCB8IEdyYXBo
aWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUKTsKLSAgICAKLSAgICBiaW5kUHJvZ3JhbUFu
ZEJ1ZmZlcnMoaW5wdXRUZXh0dXJlKTsKLSAgICBtX2NvbnRleHQtPmRyYXdFbGVtZW50cyhHcmFw
aGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCBtX21lc2gtPmluZGljZXNDb3VudCgpLCBHcmFwaGlj
c0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDApOwotICAgIHVuYmluZFZlcnRleEF0dHJpYnV0
ZXMoKTsKKworICAgIG1fY3VzdG9tRmlsdGVyUmVuZGVyZXItPnBhaW50KGlucHV0VGV4dHVyZSwg
bV9jb250ZXh0U2l6ZSk7CiAKICAgICBpZiAobXVsdGlzYW1wbGUpCiAgICAgICAgIHJlc29sdmVN
dWx0aXNhbXBsZUJ1ZmZlcigpOwogfQogCi1ib29sIEZFQ3VzdG9tRmlsdGVyOjpwcmVwYXJlRm9y
RHJhd2luZyhDdXN0b21GaWx0ZXJEcmF3VHlwZSBmaWx0ZXJEcmF3VHlwZSkKK2Jvb2wgRkVDdXN0
b21GaWx0ZXI6OnByZXBhcmVGb3JEcmF3aW5nKCkKIHsKLSAgICBpZiAoIW1fY29udGV4dCAmJiAh
aW5pdGlhbGl6ZUNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIG1fY29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAKLSAgICAvLyBJZiB0aGUgc2hhZGVyIGhhZCBjb21w
aWxlciBlcnJvcnMgd2UgY2Fubm90IGRyYXcgYW55dGhpbmcuCi0gICAgaWYgKCFtX2NvbXBpbGVk
UHJvZ3JhbS0+aXNJbml0aWFsaXplZCgpKQorICAgIGlmICghbV9jdXN0b21GaWx0ZXJSZW5kZXJl
ci0+cHJlcGFyZUZvckRyYXdpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAg
ICAgLy8gT25seSBhbGxvY2F0ZSBhIHRleHR1cmUgaWYgdGhlIHByb2dyYW0gbmVlZHMgb25lIGFu
ZCB0aGUgY2FsbGVyIGRvZXNuJ3QgYWxsb2NhdGUgb25lIGJ5IGl0c2VsZi4KLSAgICBpZiAoKHBy
b2dyYW1OZWVkc0lucHV0VGV4dHVyZSgpICYmIChmaWx0ZXJEcmF3VHlwZSA9PSBORUVEU19JTlBV
VF9URVhUVVJFKSAmJiAhZW5zdXJlSW5wdXRUZXh0dXJlKCkpCi0gICAgICAgIHx8ICFlbnN1cmVG
cmFtZUJ1ZmZlcigpKQorICAgIGlmICgobV9jdXN0b21GaWx0ZXJSZW5kZXJlci0+cHJvZ3JhbU5l
ZWRzSW5wdXRUZXh0dXJlKCkgJiYgIWVuc3VyZUlucHV0VGV4dHVyZSgpKSB8fCAhZW5zdXJlRnJh
bWVCdWZmZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJldHVybiB0cnVl
OwotfQogCi1ib29sIEZFQ3VzdG9tRmlsdGVyOjpwcm9ncmFtTmVlZHNJbnB1dFRleHR1cmUoKSBj
b25zdAotewotICAgIEFTU0VSVChtX2NvbXBpbGVkUHJvZ3JhbS5nZXQoKSk7Ci0gICAgcmV0dXJu
IG1fY29tcGlsZWRQcm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSAhPSAtMTsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAogYm9vbCBGRUN1c3RvbUZpbHRlcjo6YXBwbHlTaGFkZXIoKQogewotICAgIFVp
bnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5ID0gbV92YWxpZGF0ZWRQcm9ncmFtLT5wcm9n
cmFtSW5mbygpLnByb2dyYW1UeXBlKCkgPT0gUFJPR1JBTV9UWVBFX0JMRU5EU19FTEVNRU5UX1RF
WFRVUkUgPyBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKSA6IGNyZWF0ZVVubXVsdGlw
bGllZEltYWdlUmVzdWx0KCk7CisgICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXkg
PSBtX2N1c3RvbUZpbHRlclJlbmRlcmVyLT5wcmVtdWx0aXBsaWVkQWxwaGEoKSA/IGNyZWF0ZVBy
ZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpIDogY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKICAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
MjM4LDcgKzE4MSw3IEBAIGJvb2wgRkVDdXN0b21GaWx0ZXI6OmFwcGx5U2hhZGVyKCkKICAgICBp
ZiAoIXJlc2l6ZUNvbnRleHRJZk5lZWRlZChuZXdDb250ZXh0U2l6ZSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIGJvb2wgbmVlZHNJbnB1dFRleHR1cmUgPSBwcm9ncmFtTmVlZHNJbnB1
dFRleHR1cmUoKTsKKyAgICBib29sIG5lZWRzSW5wdXRUZXh0dXJlID0gbV9jdXN0b21GaWx0ZXJS
ZW5kZXJlci0+cHJvZ3JhbU5lZWRzSW5wdXRUZXh0dXJlKCk7CiAgICAgaWYgKG5lZWRzSW5wdXRU
ZXh0dXJlKSB7CiAgICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc3JjUGl4ZWxBcnJh
eSA9IGluLT5hc1VubXVsdGlwbGllZEltYWdlKGVmZmVjdERyYXdpbmdSZWN0KTsKICAgICAgICAg
dXBsb2FkSW5wdXRUZXh0dXJlKHNyY1BpeGVsQXJyYXkuZ2V0KCkpOwpAQCAtMjUxLDI1ICsxOTQs
NiBAQCBib29sIEZFQ3VzdG9tRmlsdGVyOjphcHBseVNoYWRlcigpCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLWJvb2wgRkVDdXN0b21GaWx0ZXI6OmluaXRpYWxpemVDb250ZXh0KCkKLXsKLSAgICBB
U1NFUlQoIW1fY29udGV4dC5nZXQoKSk7Ci0gICAgbV9jb250ZXh0ID0gbV9nbG9iYWxDb250ZXh0
LT5jb250ZXh0KCk7Ci0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1fY29tcGlsZWRQcm9n
cmFtID0gbV92YWxpZGF0ZWRQcm9ncmFtLT5jb21waWxlZFByb2dyYW0oKTsKLQotICAgIC8vIEZJ
WE1FOiBTaGFyaW5nIHRoZSBtZXNoIHdvdWxkIGp1c3Qgc2F2ZSB0aGUgdGltZSBuZWVkZWQgdG8g
dXBsb2FkIGl0IHRvIHRoZSBHUFUsIHNvIEkgYXNzdW1lIHdlIGNvdWxkCi0gICAgLy8gYmVuY2ht
YXJrIHRoYXQgZm9yIHBlcmZvcm1hbmNlLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD04ODQyOQotICAgIG1fbWVzaCA9IEN1c3RvbUZpbHRlck1lc2g6OmNy
ZWF0ZShtX2NvbnRleHQuZ2V0KCksIG1fbWVzaENvbHVtbnMsIG1fbWVzaFJvd3MsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QoMCwgMCwgMSwgMSksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbWVzaFR5cGUpOwotCi0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgRkVDdXN0b21GaWx0ZXI6OmVuc3VyZUlucHV0VGV4dHVy
ZSgpCiB7CiAgICAgaWYgKCFtX2lucHV0VGV4dHVyZSkKQEAgLTMzMiw3ICsyNTYsNyBAQCB2b2lk
IEZFQ3VzdG9tRmlsdGVyOjpyZXNvbHZlTXVsdGlzYW1wbGVCdWZmZXIoKQogCiAgICAgbV9jb250
ZXh0LT5iaW5kRnJhbWVidWZmZXIoRXh0ZW5zaW9uczNEOjpSRUFEX0ZSQU1FQlVGRkVSLCAwKTsK
ICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihFeHRlbnNpb25zM0Q6OkRSQVdfRlJBTUVC
VUZGRVIsIDApOwotICAgIAorCiAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2ZyYW1lQnVmZmVyKTsKIH0KIApAQCAtMzQ0LDEx
ICsyNjgsMTIgQEAgYm9vbCBGRUN1c3RvbUZpbHRlcjo6Y2FuVXNlTXVsdGlzYW1wbGVCdWZmZXJz
KCkgY29uc3QKIGJvb2wgRkVDdXN0b21GaWx0ZXI6OnJlc2l6ZU11bHRpc2FtcGxlQnVmZmVycyhj
b25zdCBJbnRTaXplJiBuZXdDb250ZXh0U2l6ZSkKIHsKICAgICBpZiAoIW1fdHJpZWRNdWx0aXNh
bXBsZUJ1ZmZlciAmJiAhY3JlYXRlTXVsdGlzYW1wbGVCdWZmZXIoKSkKLSAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYgKCFjYW5Vc2VNdWx0
aXNhbXBsZUJ1ZmZlcnMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgc3RhdGljIGNv
bnN0IGludCBrTWF4U2FtcGxlQ291bnQgPSA0OwogICAgIGludCBtYXhTdXBwb3J0ZWRTYW1wbGVD
b3VudCA9IDA7CiAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNpb25zM0Q6Ok1BWF9T
QU1QTEVTLCAmbWF4U3VwcG9ydGVkU2FtcGxlQ291bnQpOwogICAgIGludCBzYW1wbGVDb3VudCA9
IHN0ZDo6bWluKGtNYXhTYW1wbGVDb3VudCwgbWF4U3VwcG9ydGVkU2FtcGxlQ291bnQpOwpAQCAt
MzU5LDcgKzI4NCw3IEBAIGJvb2wgRkVDdXN0b21GaWx0ZXI6OnJlc2l6ZU11bHRpc2FtcGxlQnVm
ZmVycyhjb25zdCBJbnRTaXplJiBuZXdDb250ZXh0U2l6ZSkKIAogICAgIEV4dGVuc2lvbnMzRCog
ZXh0ZW5zaW9ucyA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOwogICAgIEFTU0VSVChleHRl
bnNpb25zKTsKLSAgICAKKwogICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZyYW1lQnVmZmVyKTsKIAogICAg
IG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSLCBtX211bHRpc2FtcGxlUmVuZGVyQnVmZmVyKTsKQEAgLTQwOSw3ICszMzQsNyBAQCBib29s
IEZFQ3VzdG9tRmlsdGVyOjpyZXNpemVDb250ZXh0KGNvbnN0IEludFNpemUmIG5ld0NvbnRleHRT
aXplKQogICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRERpcmVjdChHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG5ld0NvbnRleHRTaXplLndp
ZHRoKCksIG5ld0NvbnRleHRTaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0NvbnRleHQzRDo6UkdC
QSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOwogI2VuZGlmCiAgICAgbV9j
b250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZG
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIG1fZGVzdFRleHR1cmUsIDApOwotIAorCiAgICAgLy8gV2UgZG9uJ3Qg
bmVlZCB0aGUgZGVwdGggYnVmZmVyIGZvciB0aGUgdGV4dHVyZSBmcmFtZWJ1ZmZlciwgaWYgd2Ug
YWxyZWFkeQogICAgIC8vIGhhdmUgYSBtdWx0aXNhbXBsZSBidWZmZXIuCiAgICAgaWYgKCFtdWx0
aXNhbXBsZSkgewpAQCAtNDI4LDE3MSArMzUzLDExIEBAIGJvb2wgRkVDdXN0b21GaWx0ZXI6OnJl
c2l6ZUNvbnRleHQoY29uc3QgSW50U2l6ZSYgbmV3Q29udGV4dFNpemUpCiAgICAgfQogCiAgICAg
bV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpSRU5ERVJCVUZG
RVIsIDApOwotICAgIAorCiAgICAgbV9jb250ZXh0U2l6ZSA9IG5ld0NvbnRleHRTaXplOwogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFQ3VzdG9tRmlsdGVyOjpiaW5kVmVydGV4QXR0cmli
dXRlKGludCBhdHRyaWJ1dGVMb2NhdGlvbiwgdW5zaWduZWQgc2l6ZSwgdW5zaWduZWQgb2Zmc2V0
KQotewotICAgIGlmIChhdHRyaWJ1dGVMb2NhdGlvbiAhPSAtMSkgewotICAgICAgICBtX2NvbnRl
eHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoYXR0cmlidXRlTG9jYXRpb24sIHNpemUsIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIG1fbWVzaC0+Ynl0ZXNQZXJWZXJ0ZXgoKSwgb2Zmc2V0
KTsKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWJ1dGVM
b2NhdGlvbik7Ci0gICAgfQotfQotCi12b2lkIEZFQ3VzdG9tRmlsdGVyOjp1bmJpbmRWZXJ0ZXhB
dHRyaWJ1dGUoaW50IGF0dHJpYnV0ZUxvY2F0aW9uKQotewotICAgIGlmIChhdHRyaWJ1dGVMb2Nh
dGlvbiAhPSAtMSkKLSAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXko
YXR0cmlidXRlTG9jYXRpb24pOwotfQotCi12b2lkIEZFQ3VzdG9tRmlsdGVyOjpiaW5kUHJvZ3Jh
bUFycmF5UGFyYW1ldGVycyhpbnQgdW5pZm9ybUxvY2F0aW9uLCBDdXN0b21GaWx0ZXJBcnJheVBh
cmFtZXRlciogYXJyYXlQYXJhbWV0ZXIpCi17Ci0gICAgdW5zaWduZWQgcGFyYW1ldGVyU2l6ZSA9
IGFycmF5UGFyYW1ldGVyLT5zaXplKCk7Ci0gICAgVmVjdG9yPEdDM0RmbG9hdD4gZmxvYXRWZWN0
b3I7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVyU2l6ZTsgKytpKQot
ICAgICAgICBmbG9hdFZlY3Rvci5hcHBlbmQoYXJyYXlQYXJhbWV0ZXItPnZhbHVlQXQoaSkpOwot
Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KHVuaWZvcm1Mb2NhdGlvbiwgcGFyYW1ldGVyU2l6
ZSwgZmxvYXRWZWN0b3IuZGF0YSgpKTsKLX0KLQotdm9pZCBGRUN1c3RvbUZpbHRlcjo6YmluZFBy
b2dyYW1OdW1iZXJQYXJhbWV0ZXJzKGludCB1bmlmb3JtTG9jYXRpb24sIEN1c3RvbUZpbHRlck51
bWJlclBhcmFtZXRlciogbnVtYmVyUGFyYW1ldGVyKQotewotICAgIHN3aXRjaCAobnVtYmVyUGFy
YW1ldGVyLT5zaXplKCkpIHsKLSAgICBjYXNlIDE6Ci0gICAgICAgIG1fY29udGV4dC0+dW5pZm9y
bTFmKHVuaWZvcm1Mb2NhdGlvbiwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDApKTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZih1bmlm
b3JtTG9jYXRpb24sIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgwKSwgbnVtYmVyUGFyYW1ldGVy
LT52YWx1ZUF0KDEpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzOgotICAgICAgICBtX2Nv
bnRleHQtPnVuaWZvcm0zZih1bmlmb3JtTG9jYXRpb24sIG51bWJlclBhcmFtZXRlci0+dmFsdWVB
dCgwKSwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDEpLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVl
QXQoMikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAgICAgIG1fY29udGV4dC0+
dW5pZm9ybTRmKHVuaWZvcm1Mb2NhdGlvbiwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDApLCBu
dW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMSksIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgyKSwg
bnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDMpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVs
dDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi12b2lkIEZFQ3Vz
dG9tRmlsdGVyOjpiaW5kUHJvZ3JhbVRyYW5zZm9ybVBhcmFtZXRlcihpbnQgdW5pZm9ybUxvY2F0
aW9uLCBDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIqIHRyYW5zZm9ybVBhcmFtZXRlcikK
LXsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7Ci0gICAgaWYgKG1fY29udGV4dFNp
emUud2lkdGgoKSAmJiBtX2NvbnRleHRTaXplLmhlaWdodCgpKSB7Ci0gICAgICAgIC8vIFRoZSB2
aWV3cG9ydCBpcyBhIGJveCB3aXRoIHRoZSBzaXplIG9mIDEgdW5pdCwgc28gd2UgYXJlIHNjYWxs
aW5nIHVwIGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgdHJhbnNsYXRpb25zIGhhcHBlbiB1c2luZyBy
ZWFsIHBpeGVsCi0gICAgICAgIC8vIHVuaXRzLiBBdCB0aGUgZW5kIHdlIHNjYWxlIGJhY2sgZG93
biBpbiBvcmRlciB0byBtYXAgaXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYm94LiBOb3RlIHRoYXQg
dHJhbnNmb3JtcyBjb21lIGluIHJldmVyc2Ugb3JkZXIsIGJlY2F1c2UgaXQgaXMgCi0gICAgICAg
IC8vIHN1cHBvc2VkIHRvIG11bHRpcGx5IHRvIHRoZSBsZWZ0IG9mIHRoZSBjb29yZGluYXRlcyBv
ZiB0aGUgdmVydGljZXMuCi0gICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgb3JpZ2luICgwLCAwKSBv
ZiB0aGUgdmlld3BvcnQgaXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgY29udGV4dCwgc28gdGhlcmUn
cyBubyBuZWVkIHRvIGNoYW5nZSB0aGUgb3JpZ2luIG9mIHRoZSB0cmFuc2Zvcm0KLSAgICAgICAg
Ly8gaW4gb3JkZXIgdG8gcm90YXRlIGFyb3VuZCB0aGUgbWlkZGxlIG9mIG1lc2guCi0gICAgICAg
IG1hdHJpeC5zY2FsZTNkKDEuMCAvIG1fY29udGV4dFNpemUud2lkdGgoKSwgMS4wIC8gbV9jb250
ZXh0U2l6ZS5oZWlnaHQoKSwgMSk7Ci0gICAgICAgIHRyYW5zZm9ybVBhcmFtZXRlci0+YXBwbHlU
cmFuc2Zvcm0obWF0cml4LCBtX2NvbnRleHRTaXplKTsKLSAgICAgICAgbWF0cml4LnNjYWxlM2Qo
bV9jb250ZXh0U2l6ZS53aWR0aCgpLCBtX2NvbnRleHRTaXplLmhlaWdodCgpLCAxKTsKLSAgICB9
Ci0gICAgZmxvYXQgZ2xNYXRyaXhbMTZdOwotICAgIG1hdHJpeC50b0NvbHVtbk1ham9yRmxvYXRB
cnJheShnbE1hdHJpeCk7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KHVuaWZvcm1M
b2NhdGlvbiwgMSwgZmFsc2UsICZnbE1hdHJpeFswXSk7Ci19Ci0KLXZvaWQgRkVDdXN0b21GaWx0
ZXI6OmJpbmRQcm9ncmFtUGFyYW1ldGVycygpCi17Ci0gICAgLy8gRklYTUU6IEZpbmQgYSB3YXkg
dG8gcmVzZXQgdW5pZm9ybXMgdGhhdCBhcmUgbm90IHNwZWNpZmllZCBpbiBDU1MuIFRoaXMgaXMg
bmVlZGVkIHRvIGF2b2lkIHVzaW5nIHZhbHVlcwotICAgIC8vIHNldCBieSBvdGhlciBwcmV2aW91
cyByZW5kZXJlZCBmaWx0ZXJzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD03NjQ0MAotICAgIAotICAgIHNpemVfdCBwYXJhbWV0ZXJzU2l6ZSA9IG1fcGFy
YW1ldGVycy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzU2l6
ZTsgKytpKSB7Ci0gICAgICAgIEN1c3RvbUZpbHRlclBhcmFtZXRlciogcGFyYW1ldGVyID0gbV9w
YXJhbWV0ZXJzLmF0KGkpLmdldCgpOwotICAgICAgICBpbnQgdW5pZm9ybUxvY2F0aW9uID0gbV9j
b21waWxlZFByb2dyYW0tPnVuaWZvcm1Mb2NhdGlvbkJ5TmFtZShwYXJhbWV0ZXItPm5hbWUoKSk7
Ci0gICAgICAgIGlmICh1bmlmb3JtTG9jYXRpb24gPT0gLTEpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgc3dpdGNoIChwYXJhbWV0ZXItPnBhcmFtZXRlclR5cGUoKSkgewotICAgICAg
ICBjYXNlIEN1c3RvbUZpbHRlclBhcmFtZXRlcjo6QVJSQVk6Ci0gICAgICAgICAgICBiaW5kUHJv
Z3JhbUFycmF5UGFyYW1ldGVycyh1bmlmb3JtTG9jYXRpb24sIHN0YXRpY19jYXN0PEN1c3RvbUZp
bHRlckFycmF5UGFyYW1ldGVyKj4ocGFyYW1ldGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBDdXN0b21GaWx0ZXJQYXJhbWV0ZXI6Ok5VTUJFUjoKLSAgICAgICAgICAgIGJp
bmRQcm9ncmFtTnVtYmVyUGFyYW1ldGVycyh1bmlmb3JtTG9jYXRpb24sIHN0YXRpY19jYXN0PEN1
c3RvbUZpbHRlck51bWJlclBhcmFtZXRlcio+KHBhcmFtZXRlcikpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGNhc2UgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyOjpUUkFOU0ZPUk06Ci0gICAg
ICAgICAgICBiaW5kUHJvZ3JhbVRyYW5zZm9ybVBhcmFtZXRlcih1bmlmb3JtTG9jYXRpb24sIHN0
YXRpY19jYXN0PEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcio+KHBhcmFtZXRlcikpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgRkVDdXN0b21G
aWx0ZXI6OmJpbmRQcm9ncmFtQW5kQnVmZmVycyhQbGF0Zm9ybTNET2JqZWN0IGlucHV0VGV4dHVy
ZSkKLXsKLSAgICBBU1NFUlQobV9jb21waWxlZFByb2dyYW0tPmlzSW5pdGlhbGl6ZWQoKSk7Ci0K
LSAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0obV9jb21waWxlZFByb2dyYW0tPnByb2dyYW0oKSk7
Ci0gICAgCi0gICAgaWYgKHByb2dyYW1OZWVkc0lucHV0VGV4dHVyZSgpKSB7Ci0gICAgICAgIC8v
IFdlIHNob3VsZCBiZSBiaW5kaW5nIHRoZSBET00gZWxlbWVudCB0ZXh0dXJlIHNhbXBsZXIgb25s
eSBpZiB0aGUgYXV0aG9yIGlzIHVzaW5nIHRoZSBDU1MgbWl4IGZ1bmN0aW9uLgotICAgICAgICBB
U1NFUlQobV92YWxpZGF0ZWRQcm9ncmFtLT5wcm9ncmFtSW5mbygpLnByb2dyYW1UeXBlKCkgPT0g
UFJPR1JBTV9UWVBFX0JMRU5EU19FTEVNRU5UX1RFWFRVUkUpOwotICAgICAgICBBU1NFUlQobV9j
b21waWxlZFByb2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpICE9IC0xKTsKLQotICAgICAgICBtX2Nv
bnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKLSAgICAg
ICAgbV9jb250ZXh0LT51bmlmb3JtMWkobV9jb21waWxlZFByb2dyYW0tPnNhbXBsZXJMb2NhdGlv
bigpLCAwKTsKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgaW5wdXRUZXh0dXJlKTsKLSAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJh
bWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAgICAgICAg
bV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6
TElORUFSKTsKLSAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBo
aWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJh
bWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICB9
Ci0gICAgCi0gICAgaWYgKG1fY29tcGlsZWRQcm9ncmFtLT5wcm9qZWN0aW9uTWF0cml4TG9jYXRp
b24oKSAhPSAtMSkgewotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0
cml4OyAKLSAgICAgICAgb3J0aG9nb25hbFByb2plY3Rpb25NYXRyaXgocHJvamVjdGlvbk1hdHJp
eCwgLTAuNSwgMC41LCAtMC41LCAwLjUpOwotICAgICAgICBmbG9hdCBnbFByb2plY3Rpb25NYXRy
aXhbMTZdOwotICAgICAgICBwcm9qZWN0aW9uTWF0cml4LnRvQ29sdW1uTWFqb3JGbG9hdEFycmF5
KGdsUHJvamVjdGlvbk1hdHJpeCk7Ci0gICAgICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRm
dihtX2NvbXBpbGVkUHJvZ3JhbS0+cHJvamVjdGlvbk1hdHJpeExvY2F0aW9uKCksIDEsIGZhbHNl
LCAmZ2xQcm9qZWN0aW9uTWF0cml4WzBdKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQobV9tZXNoQ29s
dW1ucyk7Ci0gICAgQVNTRVJUKG1fbWVzaFJvd3MpOwotCi0gICAgaWYgKG1fY29tcGlsZWRQcm9n
cmFtLT5tZXNoU2l6ZUxvY2F0aW9uKCkgIT0gLTEpCi0gICAgICAgIG1fY29udGV4dC0+dW5pZm9y
bTJmKG1fY29tcGlsZWRQcm9ncmFtLT5tZXNoU2l6ZUxvY2F0aW9uKCksIG1fbWVzaENvbHVtbnMs
IG1fbWVzaFJvd3MpOwotCi0gICAgaWYgKG1fY29tcGlsZWRQcm9ncmFtLT50aWxlU2l6ZUxvY2F0
aW9uKCkgIT0gLTEpCi0gICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKG1fY29tcGlsZWRQcm9n
cmFtLT50aWxlU2l6ZUxvY2F0aW9uKCksIDEuMCAvIG1fbWVzaENvbHVtbnMsIDEuMCAvIG1fbWVz
aFJvd3MpOwotCi0gICAgaWYgKG1fY29tcGlsZWRQcm9ncmFtLT5tZXNoQm94TG9jYXRpb24oKSAh
PSAtMSkgewotICAgICAgICAvLyBGSVhNRTogVGhpcyB3aWxsIGNoYW5nZSB3aGVuIGZpbHRlciBt
YXJnaW5zIHdpbGwgYmUgaW1wbGVtZW50ZWQsCi0gICAgICAgIC8vIHNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE0MDAKLSAgICAgICAgbV9jb250ZXh0LT51bmlm
b3JtNGYobV9jb21waWxlZFByb2dyYW0tPm1lc2hCb3hMb2NhdGlvbigpLCAtMC41LCAtMC41LCAx
LjAsIDEuMCk7Ci0gICAgfQotCi0gICAgaWYgKG1fY29tcGlsZWRQcm9ncmFtLT5zYW1wbGVyU2l6
ZUxvY2F0aW9uKCkgIT0gLTEpCi0gICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKG1fY29tcGls
ZWRQcm9ncmFtLT5zYW1wbGVyU2l6ZUxvY2F0aW9uKCksIG1fY29udGV4dFNpemUud2lkdGgoKSwg
bV9jb250ZXh0U2l6ZS5oZWlnaHQoKSk7Ci0gICAgCi0gICAgbV9jb250ZXh0LT5iaW5kQnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fbWVzaC0+dmVydGljZXNCdWZmZXJP
YmplY3QoKSk7Ci0gICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpF
TEVNRU5UX0FSUkFZX0JVRkZFUiwgbV9tZXNoLT5lbGVtZW50c0J1ZmZlck9iamVjdCgpKTsKLQot
ICAgIGJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPnBvc2l0aW9uQXR0cmli
TG9jYXRpb24oKSwgUG9zaXRpb25BdHRyaWJTaXplLCBQb3NpdGlvbkF0dHJpYk9mZnNldCk7Ci0g
ICAgYmluZFZlcnRleEF0dHJpYnV0ZShtX2NvbXBpbGVkUHJvZ3JhbS0+dGV4QXR0cmliTG9jYXRp
b24oKSwgVGV4QXR0cmliU2l6ZSwgVGV4QXR0cmliT2Zmc2V0KTsKLSAgICAvLyBGSVhNRTogR2V0
IHJpZCBvZiB0aGUgaW50ZXJuYWwgdGV4IGNvb3JkIGF0dHJpYnV0ZSAiY3NzX2FfdGV4Q29vcmQi
LiAKLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTQzNTgK
LSAgICBiaW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFtLT5pbnRlcm5hbFRleENv
b3JkQXR0cmliTG9jYXRpb24oKSwgVGV4QXR0cmliU2l6ZSwgVGV4QXR0cmliT2Zmc2V0KTsKLSAg
ICBiaW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFtLT5tZXNoQXR0cmliTG9jYXRp
b24oKSwgTWVzaEF0dHJpYlNpemUsIE1lc2hBdHRyaWJPZmZzZXQpOwotICAgIGlmIChtX21lc2hU
eXBlID09IEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6REVUQUNIRUQpCi0gICAgICAgIGJpbmRWZXJ0
ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPnRyaWFuZ2xlQXR0cmliTG9jYXRpb24oKSwg
VHJpYW5nbGVBdHRyaWJTaXplLCBUcmlhbmdsZUF0dHJpYk9mZnNldCk7Ci0gICAgCi0gICAgYmlu
ZFByb2dyYW1QYXJhbWV0ZXJzKCk7Ci19Ci0KLXZvaWQgRkVDdXN0b21GaWx0ZXI6OnVuYmluZFZl
cnRleEF0dHJpYnV0ZXMoKQotewotICAgIHVuYmluZFZlcnRleEF0dHJpYnV0ZShtX2NvbXBpbGVk
UHJvZ3JhbS0+cG9zaXRpb25BdHRyaWJMb2NhdGlvbigpKTsKLSAgICB1bmJpbmRWZXJ0ZXhBdHRy
aWJ1dGUobV9jb21waWxlZFByb2dyYW0tPnRleEF0dHJpYkxvY2F0aW9uKCkpOwotICAgIHVuYmlu
ZFZlcnRleEF0dHJpYnV0ZShtX2NvbXBpbGVkUHJvZ3JhbS0+aW50ZXJuYWxUZXhDb29yZEF0dHJp
YkxvY2F0aW9uKCkpOwotICAgIHVuYmluZFZlcnRleEF0dHJpYnV0ZShtX2NvbXBpbGVkUHJvZ3Jh
bS0+bWVzaEF0dHJpYkxvY2F0aW9uKCkpOwotICAgIGlmIChtX21lc2hUeXBlID09IEN1c3RvbUZp
bHRlck9wZXJhdGlvbjo6REVUQUNIRUQpCi0gICAgICAgIHVuYmluZFZlcnRleEF0dHJpYnV0ZSht
X2NvbXBpbGVkUHJvZ3JhbS0+dHJpYW5nbGVBdHRyaWJMb2NhdGlvbigpKTsKLX0KLQogdm9pZCBG
RUN1c3RvbUZpbHRlcjo6ZHVtcCgpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmgKaW5kZXggMDlkYTVm
MWM3Zjc0NjY4MDllOTNhOGI4ODRmZDJhMWQ1NmI4ZTFiNC4uYjdmOTgxMzBhZWRhOWU4NTZhMzcz
ZTdiMDhhZGExMDIzMzQxYTkxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuaApAQCAtNDQsMjMgKzQ0LDE2
IEBAIGNsYXNzIFVpbnQ4Q2xhbXBlZEFycmF5OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNs
YXNzIENhY2hlZFNoYWRlcjsKLWNsYXNzIEN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyOwotY2xh
c3MgQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtOwotY2xhc3MgQ3VzdG9tRmlsdGVyR2xvYmFs
Q29udGV4dDsKLWNsYXNzIEN1c3RvbUZpbHRlck1lc2g7Ci1jbGFzcyBDdXN0b21GaWx0ZXJOdW1i
ZXJQYXJhbWV0ZXI7Ci1jbGFzcyBDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXI7CitjbGFz
cyBDdXN0b21GaWx0ZXJSZW5kZXJlcjsKIGNsYXNzIEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dy
YW07Ci1jbGFzcyBEcmF3aW5nQnVmZmVyOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiBjbGFz
cyBJbnRTaXplOwogCiBjbGFzcyBGRUN1c3RvbUZpbHRlciA6IHB1YmxpYyBGaWx0ZXJFZmZlY3Qg
ewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFQ3VzdG9tRmlsdGVyPiBjcmVhdGUo
RmlsdGVyKiwgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCosIFBhc3NSZWZQdHI8Q3VzdG9tRmls
dGVyVmFsaWRhdGVkUHJvZ3JhbT4sIGNvbnN0IEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmLAot
ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1u
cywgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoQm94VHlwZSwgCi0gICAgICAgICAgICAgICAg
ICAgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSk7CisgICAgc3RhdGljIFBhc3NSZWZQ
dHI8RkVDdXN0b21GaWx0ZXI+IGNyZWF0ZShGaWx0ZXIqLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiwgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiwgY29uc3Qg
Q3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mLCBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0
JiwKKyAgICAgICAgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1lc2hDb2x1bW5zLCBDdXN0
b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hCb3hUeXBlLAorICAgICAgICBDdXN0b21GaWx0ZXJPcGVy
YXRpb246Ok1lc2hUeXBlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKTsKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwpAQCAtNjgsMjMgKzYxLDE4IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oVGV4dFN0
cmVhbSYsIGludCBpbmRlbnRpb24pIGNvbnN0OwogCiBwcml2YXRlOgotICAgIEZFQ3VzdG9tRmls
dGVyKEZpbHRlciosIEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQqLCBQYXNzUmVmUHRyPEN1c3Rv
bUZpbHRlclZhbGlkYXRlZFByb2dyYW0+LCBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0
JiwKLSAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBtZXNoUm93cywgdW5zaWduZWQgbWVzaENv
bHVtbnMsIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaEJveFR5cGUsIAotICAgICAgICAgICAg
ICAgICAgIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaFR5cGUpOworICAgIEZFQ3VzdG9tRmls
dGVyKEZpbHRlciosIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzUmVmUHRyPEN1
c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0+LCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5m
byYsIGNvbnN0IEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmLAorICAgICAgICB1bnNpZ25lZCBt
ZXNoUm93cywgdW5zaWduZWQgbWVzaENvbHVtbnMsIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVz
aEJveFR5cGUsCisgICAgICAgIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaFR5cGUpOwogICAg
IH5GRUN1c3RvbUZpbHRlcigpOwotICAgIAorCiAgICAgYm9vbCBhcHBseVNoYWRlcigpOwogICAg
IHZvaWQgY2xlYXJTaGFkZXJSZXN1bHQoKTsKICAgICBib29sIGluaXRpYWxpemVDb250ZXh0KCk7
Ci0gICAgCi0gICAgZW51bSBDdXN0b21GaWx0ZXJEcmF3VHlwZSB7Ci0gICAgICAgIE5FRURTX0lO
UFVUX1RFWFRVUkUsCi0gICAgICAgIE5PX0lOUFVUX1RFWFRVUkUKLSAgICB9OwotICAgIGJvb2wg
cHJlcGFyZUZvckRyYXdpbmcoQ3VzdG9tRmlsdGVyRHJhd1R5cGUgPSBORUVEU19JTlBVVF9URVhU
VVJFKTsKKworICAgIGJvb2wgcHJlcGFyZUZvckRyYXdpbmcoKTsKIAogICAgIHZvaWQgZHJhd0Zp
bHRlck1lc2goUGxhdGZvcm0zRE9iamVjdCBpbnB1dFRleHR1cmUpOwotICAgIGJvb2wgcHJvZ3Jh
bU5lZWRzSW5wdXRUZXh0dXJlKCkgY29uc3Q7CiAgICAgYm9vbCBlbnN1cmVJbnB1dFRleHR1cmUo
KTsKICAgICB2b2lkIHVwbG9hZElucHV0VGV4dHVyZShVaW50OENsYW1wZWRBcnJheSogc3JjUGl4
ZWxBcnJheSk7CiAgICAgYm9vbCByZXNpemVDb250ZXh0SWZOZWVkZWQoY29uc3QgSW50U2l6ZSYp
OwpAQCAtOTksMjIgKzg3LDggQEAgcHJpdmF0ZToKICAgICBib29sIGVuc3VyZUZyYW1lQnVmZmVy
KCk7CiAgICAgdm9pZCBkZWxldGVSZW5kZXJCdWZmZXJzKCk7CiAKLSAgICB2b2lkIGJpbmRWZXJ0
ZXhBdHRyaWJ1dGUoaW50IGF0dHJpYnV0ZUxvY2F0aW9uLCB1bnNpZ25lZCBzaXplLCB1bnNpZ25l
ZCBvZmZzZXQpOwotICAgIHZvaWQgdW5iaW5kVmVydGV4QXR0cmlidXRlKGludCBhdHRyaWJ1dGVM
b2NhdGlvbik7Ci0gICAgdm9pZCBiaW5kUHJvZ3JhbUFycmF5UGFyYW1ldGVycyhpbnQgdW5pZm9y
bUxvY2F0aW9uLCBDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlciopOwotICAgIHZvaWQgYmluZFBy
b2dyYW1OdW1iZXJQYXJhbWV0ZXJzKGludCB1bmlmb3JtTG9jYXRpb24sIEN1c3RvbUZpbHRlck51
bWJlclBhcmFtZXRlciopOwotICAgIHZvaWQgYmluZFByb2dyYW1UcmFuc2Zvcm1QYXJhbWV0ZXIo
aW50IHVuaWZvcm1Mb2NhdGlvbiwgQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKik7Ci0g
ICAgdm9pZCBiaW5kUHJvZ3JhbVBhcmFtZXRlcnMoKTsKLSAgICB2b2lkIGJpbmRQcm9ncmFtQW5k
QnVmZmVycyhQbGF0Zm9ybTNET2JqZWN0IGlucHV0VGV4dHVyZSk7Ci0gICAgdm9pZCB1bmJpbmRW
ZXJ0ZXhBdHRyaWJ1dGVzKCk7Ci0gICAgCi0gICAgLy8gTm8gbmVlZCB0byBrZWVwIGEgcmVmZXJl
bmNlIGhlcmUuIEl0IGlzIG93bmVkIGJ5IHRoZSBSZW5kZXJWaWV3LgotICAgIEN1c3RvbUZpbHRl
ckdsb2JhbENvbnRleHQqIG1fZ2xvYmFsQ29udGV4dDsKLSAgICAKICAgICBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IG1fY29udGV4dDsKLSAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVk
UHJvZ3JhbT4gbV92YWxpZGF0ZWRQcm9ncmFtOwotICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJDb21w
aWxlZFByb2dyYW0+IG1fY29tcGlsZWRQcm9ncmFtOwotICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJN
ZXNoPiBtX21lc2g7CisgICAgUmVmUHRyPEN1c3RvbUZpbHRlclJlbmRlcmVyPiBtX2N1c3RvbUZp
bHRlclJlbmRlcmVyOwogICAgIEludFNpemUgbV9jb250ZXh0U2l6ZTsKIAogICAgIFBsYXRmb3Jt
M0RPYmplY3QgbV9pbnB1dFRleHR1cmU7CkBAIC0xMjYsMTIgKzEwMCw2IEBAIHByaXZhdGU6CiAg
ICAgUGxhdGZvcm0zRE9iamVjdCBtX211bHRpc2FtcGxlRnJhbWVCdWZmZXI7CiAgICAgUGxhdGZv
cm0zRE9iamVjdCBtX211bHRpc2FtcGxlUmVuZGVyQnVmZmVyOwogICAgIFBsYXRmb3JtM0RPYmpl
Y3QgbV9tdWx0aXNhbXBsZURlcHRoQnVmZmVyOwotCi0gICAgQ3VzdG9tRmlsdGVyUGFyYW1ldGVy
TGlzdCBtX3BhcmFtZXRlcnM7Ci0KLSAgICB1bnNpZ25lZCBtX21lc2hSb3dzOwotICAgIHVuc2ln
bmVkIG1fbWVzaENvbHVtbnM7Ci0gICAgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSBt
X21lc2hUeXBlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKaW5kZXggZmQwN2Y0YTg4
ZGI1YzIyMTBkYjczN2FkMTczNWFjYTIxYzEzMjUzNi4uNTY1NmVlZGRjMWVmZDJlYzZlYjQ1N2I3
ZGFiMmIyY2EzMTlkZjE5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Zp
bHRlckVmZmVjdFJlbmRlcmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmls
dGVyRWZmZWN0UmVuZGVyZXIuY3BwCkBAIC00NCw4ICs0NCw4IEBACiAKICNpZiBFTkFCTEUoQ1NT
X1NIQURFUlMpICYmIFVTRSgzRF9HUkFQSElDUykKICNpbmNsdWRlICJDdXN0b21GaWx0ZXJHbG9i
YWxDb250ZXh0LmgiCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIgogI2luY2x1ZGUg
IkN1c3RvbUZpbHRlck9wZXJhdGlvbi5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRlclByb2dyYW0u
aCIKICNpbmNsdWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmgiCiAjaW5jbHVkZSAi
RkVDdXN0b21GaWx0ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCkBAIC05NiwyMCArOTYs
MjIgQEAgc3RhdGljIFBhc3NSZWZQdHI8RkVDdXN0b21GaWx0ZXI+IGNyZWF0ZUN1c3RvbUZpbHRl
ckVmZmVjdChGaWx0ZXIqIGZpbHRlciwgRG9jdW0KIHsKICAgICBpZiAoIWlzQ1NTQ3VzdG9tRmls
dGVyRW5hYmxlZChkb2N1bWVudCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIAorCiAgICAgUmVm
UHRyPEN1c3RvbUZpbHRlclByb2dyYW0+IHByb2dyYW0gPSBvcGVyYXRpb24tPnByb2dyYW0oKTsK
ICAgICBpZiAoIXByb2dyYW0tPmlzTG9hZGVkKCkpCiAgICAgICAgIHJldHVybiAwOwogCiAgICAg
Q3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCogZ2xvYmFsQ29udGV4dCA9IGRvY3VtZW50LT5yZW5k
ZXJWaWV3KCktPmN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQoKTsKICAgICBnbG9iYWxDb250ZXh0
LT5wcmVwYXJlQ29udGV4dElmTmVlZGVkKGRvY3VtZW50LT52aWV3KCktPmhvc3RXaW5kb3coKSk7
CisgICAgaWYgKCFnbG9iYWxDb250ZXh0LT5jb250ZXh0KCkpCisgICAgICAgIHJldHVybiAwOwor
CiAgICAgUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0+IHZhbGlkYXRlZFByb2dy
YW0gPSBnbG9iYWxDb250ZXh0LT5nZXRWYWxpZGF0ZWRQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1J
bmZvKCkpOwogICAgIGlmICghdmFsaWRhdGVkUHJvZ3JhbS0+aXNJbml0aWFsaXplZCgpKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBGRUN1c3RvbUZpbHRlcjo6Y3JlYXRlKGZpbHRl
ciwgZ2xvYmFsQ29udGV4dCwgdmFsaWRhdGVkUHJvZ3JhbSwgb3BlcmF0aW9uLT5wYXJhbWV0ZXJz
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uLT5tZXNoUm93
cygpLCBvcGVyYXRpb24tPm1lc2hDb2x1bW5zKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0aW9uLT5tZXNoQm94VHlwZSgpLCBvcGVyYXRpb24tPm1lc2hUeXBlKCkp
OworICAgIHJldHVybiBGRUN1c3RvbUZpbHRlcjo6Y3JlYXRlKGZpbHRlciwgZ2xvYmFsQ29udGV4
dC0+Y29udGV4dCgpLCB2YWxpZGF0ZWRQcm9ncmFtLnJlbGVhc2UoKSwgcHJvZ3JhbS0+cHJvZ3Jh
bUluZm8oKSwgb3BlcmF0aW9uLT5wYXJhbWV0ZXJzKCksCisgICAgICAgIG9wZXJhdGlvbi0+bWVz
aFJvd3MoKSwgb3BlcmF0aW9uLT5tZXNoQ29sdW1ucygpLCBvcGVyYXRpb24tPm1lc2hCb3hUeXBl
KCksIG9wZXJhdGlvbi0+bWVzaFR5cGUoKSk7CiB9CiAjZW5kaWYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170234</attachid>
            <date>2012-10-23 14:28:31 -0700</date>
            <delta_ts>2012-10-23 15:28:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98989-20121024062653.patch</filename>
            <type>text/plain</type>
            <size>57976</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMDMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGU3NDY0ODNjYzZmZjU1
ZTU0OTdmOTkwMDYwYmI3NmQyNDE0ODhiNC4uN2Y5MTE0NTc4MDNmYjY1NTZiZDhlMjExZjE3NzEw
MmNhNTI4NmUyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcyIEBACisyMDEyLTEwLTIzICBIdWFu
ZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIFtDU1MgU2hh
ZGVyc10gQWRkIEN1c3RvbUZpbHRlclJlbmRlcmVyIHRvIHJldXNlIHRoaXMgY2xhc3MgYnkgQWNj
ZWxlcmF0ZWQgQ29tcG9zaXRpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05ODk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEV4dHJhY3QgQ3VzdG9tRmlsdGVyUmVuZGVyZXIgY2xhc3MgZnJvbSB0aGUg
cmVuZGVyaW5nIHBhcnQgb2YgRkVDdXN0b21GaWx0ZXIuCisgICAgICAgIEZFQ3VzdG9tRmlsdGVy
IG5vdyBwbGF5cyBhIHJvbGUgaW4gZXh0ZW5kaW5nIEZpbHRlckVmZmVjdCBhbmQgZGVsZWdhdGVz
CisgICAgICAgIHJlbmRlcmluZyBjc3Mgc2hhZGVycyB0byBDdXN0b21GaWx0ZXJSZW5kZXJlci4K
KworICAgICAgICBDdXN0b21GaWx0ZXJSZW5kZXJlciBkb2VzIG5vdCBrbm93IEZpbHRlciBhbmQg
RmlsdGVyRWZmZWN0LiBXZSBjYW4KKyAgICAgICAgY3JlYXRlIGEgQ3VzdG9tRmlsdGVyUmVuZGVy
ZXIgaW5zdGFuY2Ugd2l0aCBvbmx5IEdyYXBoaWNzQ29udGV4dDNELAorICAgICAgICBDdXN0b21G
aWx0ZXJWYWxpZGF0ZWRQcm9ncmFtIGFuZCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mby4gSXQgbWVh
bnMgdGhhdAorICAgICAgICBBY2NlbGVyYXRlZCBDb21wb3NpdGluZyBjYW4gY3JlYXRlIHRoZSBD
dXN0b21GaWx0ZXJSZW5kZXJlciBpbnN0YW5jZSBpZgorICAgICAgICBBY2NlbGVyYXRlZCBDb21w
b3NpdGluZyBoYXMgR3JhcGhpY3NDb250ZXh0M0QgYW5kIEN1c3RvbUZpbHRlck9wZXJhdGlvbiwK
KyAgICAgICAgYW5kIGl0IGlzIGFscmVhZHkgcG9zc2libGUuCisKKyAgICAgICAgVGhpcyBwYXRj
aCBwcmVwYXJlcyB0byBlbmFibGUgQ1NTIFNoYWRlcnMgb24gQWNjZWxlcmF0ZWQgQ29tcG9zaXRp
bmcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBDb3ZlcmVkIGJ5IGNzczMvZmlsdGVycy9jdXN0
b20KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdOVW1ha2VmaWxlLmxp
c3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6Cisg
ICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmUpOgorICAgICAgICAoV2ViQ29yZTo6b3J0aG9nb25hbFByb2plY3Rpb25NYXRyaXgpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUmVuZGVyZXI6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5kZXJlcjo6Q3VzdG9tRmlsdGVyUmVuZGVyZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUmVuZGVyZXI6On5DdXN0b21GaWx0ZXJSZW5kZXJl
cik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5kZXJlcjo6cHJlbXVsdGlwbGll
ZEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVyOjpwcm9ncmFt
TmVlZHNJbnB1dFRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUmVuZGVy
ZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVyOjpwcmVw
YXJlRm9yRHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5kZXJlcjo6
aW5pdGlhbGl6ZUNvbXBpbGVkUHJvZ3JhbUlmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
c3RvbUZpbHRlclJlbmRlcmVyOjppbml0aWFsaXplTWVzaElmTmVlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVyOjpiaW5kVmVydGV4QXR0cmlidXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVyOjp1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUmVuZGVyZXI6OmJpbmRQcm9ncmFtQXJy
YXlQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVyOjpi
aW5kUHJvZ3JhbU51bWJlclBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmls
dGVyUmVuZGVyZXI6OmJpbmRQcm9ncmFtVHJhbnNmb3JtUGFyYW1ldGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVyOjpiaW5kUHJvZ3JhbVBhcmFtZXRlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUmVuZGVyZXI6OmJpbmRQcm9ncmFtQW5kQnVmZmVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5kZXJlcjo6dW5iaW5kVmVydGV4
QXR0cmlidXRlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21G
aWx0ZXJSZW5kZXJlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmguCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKEN1c3RvbUZpbHRlclJlbmRlcmVyKToKKyAgICAgICAgICBDdXN0b21GaWx0ZXJSZW5kZXJl
ciByZW5kZXJzIGN1c3RvbSBmaWx0ZXJzIGluIEdQVSB1c2luZyBhCisgICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0M0QuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3Rv
bUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6RkVDdXN0b21G
aWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6ZGVsZXRlUmVuZGVyQnVmZmVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6ZHJhd0ZpbHRlck1lc2gpOgorICAgICAgICAo
V2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OnByZXBhcmVGb3JEcmF3aW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OkZFQ3VzdG9tRmlsdGVyOjphcHBseVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpG
RUN1c3RvbUZpbHRlcjo6cmVzb2x2ZU11bHRpc2FtcGxlQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkZFQ3VzdG9tRmlsdGVyOjpyZXNpemVNdWx0aXNhbXBsZUJ1ZmZlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OnJlc2l6ZUNvbnRleHQpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuaDoKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoRkVDdXN0b21GaWx0ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9GaWx0ZXJF
ZmZlY3RSZW5kZXJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVDdXN0b21GaWx0ZXJF
ZmZlY3QpOgorCiAyMDEyLTEwLTE5ICBIdWFuZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkx
MDAubmV0PgogCiAgICAgICAgIFtDU1MgU2hhZGVyc10gU2V0IEZpbHRlck9wZXJhdGlvbnMgb24g
R3JhcGhpY3NMYXllciBhZnRlciB0aGUgcHJvZ3JhbSBvZiBDU1MgU2hhZGVycyBpcyBsb2FkZWQu
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDc4Zjk4OThkZjQxYTEwNzU3ZGRiMzRiZjVhOWM4ODhj
NDk4MmM4NDAuLjBlZThkMjc5ZGU2NTUxMDczOTQwNDZkM2JiZDZiZjYxMjUwNzRkMmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L0NNYWtlTGlzdHMudHh0CkBAIC0xOTExLDYgKzE5MTEsNyBAQCBTRVQoV2ViQ29yZV9TT1VSQ0VT
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJPcGVyYXRpb24uY3Bw
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uY3Bw
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5jcHAK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KaW5kZXggY2ZmOThjODZlN2ZhNWIwMmU0MDRmZGNjNDVlZjg2M2RhNjA4ODUxZS4uMGEwNjM0
NGYyNzdhNGRiYzUzOWI1NWY4YjQ0N2RkZThhNWM0ODE1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCkBAIC00MzM2LDYgKzQzMzYsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3Jh
bS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZp
bHRlclByb2dyYW1JbmZvLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRl
ckNvbXBpbGVkUHJvZ3JhbS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVy
LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkKaW5kZXggMGRkNDllN2EzMWVmYTYyNWE1NjM1YmVjOThkYzFjYWNkYjgw
NmExNC4uY2RlMjdjN2VmNjI3Njg0M2NhY2E2ODczNmNmODI1MjdhNDE1NDMyOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQu
cHJpCkBAIC0yMDc3LDYgKzIwNzcsNyBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclBhcmFtZXRlci5oIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5oIFwKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyLmggXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaCBcCkBAIC0zNDg2LDEzICszNDg3
LDE0IEBAIGVuYWJsZT8oWFNMVCkgewogCiBlbmFibGU/KEZJTFRFUlMpIHsKICAgICBTT1VSQ0VT
ICs9IFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJDb21w
aWxlZFByb2dyYW0uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0
b21GaWx0ZXJHbG9iYWxDb250ZXh0LmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvQ3VzdG9tRmlsdGVyTWVzaC5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0N1c3RvbUZpbHRlck1lc2hHZW5lcmF0b3IuY3BwIFwKICAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwIFwKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcCBcCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uY3BwIFwK
LSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJDb21waWxlZFBy
b2dyYW0uY3BwIFwKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0
ZXJNZXNoLmNwcCBcCi0gICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmls
dGVyTWVzaEdlbmVyYXRvci5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0N1c3RvbUZpbHRlclJlbmRlcmVyLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5jcHAgXAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNvdXJjZS5jcHAgXAogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCAw
OGM1ZDY3ZjM2NzMzMGRhNDlmNDcyMDYyZWRlYzY2YTVkZWFmOGZkLi5kZTQyNjAyMmJiMWNiZGZl
NTgzNmEzZGExZTAyNGVhZjFlOTU0MzU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC00OTgwLDYgKzQ5
ODAsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmls
dGVyUHJvZ3JhbS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1
c3RvbUZpbHRlclByb2dyYW1JbmZvLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmNwcCcsCisgICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5oJywK
ICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckNvbXBp
bGVkUHJvZ3JhbS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
Q3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5jcHAnLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCBjNzY2YzA2ZjZi
MTRlMzcwMmVjNjZiNGYzYzUzYjlhNTkzMjRhNWRhLi42OTYyNzFlNjc2ODdjZWUwMjJlMTQ4ODJm
NTRhMDIzM2E1MDQzMGI0IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagpAQCAtMzE5MjksNiArMzE5MjksMTQgQEAKIAkJCQkJCT4KIAkJCQkJPC9GaWxl
PgogCQkJCQk8RmlsZQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xm
aWx0ZXJzXEN1c3RvbUZpbHRlclJlbmRlcmVyLmNwcCIKKwkJCQkJCT4KKwkJCQkJPC9GaWxlPgor
CQkJCQk8RmlsZQorCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0
ZXJzXEN1c3RvbUZpbHRlclJlbmRlcmVyLmgiCisJCQkJCQk+CisJCQkJCTwvRmlsZT4KKwkJCQkJ
PEZpbGUKIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xD
dXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW0uY3BwIgogCQkJCQkJPgogCQkJCQk8L0ZpbGU+CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggMzY4OWY0NmI2MDdkZDdhNGJiZmRiMDc3ZTg0MjM2OGY1ZTJlMGE3YS4uMjkwZTAzZDViOGJh
YjQwMTllOWNiMjIwYTI5MWQzNjgwYTUwNWQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTQ5MCw2ICsxNDkwLDggQEAKIAkJ
NTAzRDBDQUExNEI1QjA4NzAwRjMyRjU3IC8qIEN1c3RvbUZpbHRlclByb2dyYW0uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTAzRDBDQTcxNEI1QjA4
NzAwRjMyRjU3IC8qIEN1c3RvbUZpbHRlclByb2dyYW0uY3BwICovOyB9OwogCQk1MDNEMENBQjE0
QjVCMDg3MDBGMzJGNTcgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTAzRDBDQTgxNEI1QjA4NzAwRjMyRjU3IC8q
IEN1c3RvbUZpbHRlclByb2dyYW0uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9
OyB9OwogCQk1MDNEMENBQzE0QjVCMDg3MDBGMzJGNTcgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbUNs
aWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTAz
RDBDQTkxNEI1QjA4NzAwRjMyRjU3IC8qIEN1c3RvbUZpbHRlclByb2dyYW1DbGllbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MDNEMENBQTE0
QjVCMDg3MDBGMzJGNTggLyogQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTAzRDBDQTcxNEI1QjA4NzAwRjMyRjU4
IC8qIEN1c3RvbUZpbHRlclJlbmRlcmVyLmNwcCAqLzsgfTsKKwkJNTAzRDBDQUIxNEI1QjA4NzAw
RjMyRjU4IC8qIEN1c3RvbUZpbHRlclJlbmRlcmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDNEMENBODE0QjVCMDg3MDBGMzJGNTggLyogQ3VzdG9t
RmlsdGVyUmVuZGVyZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9Owog
CQk1MDNEMENBRTE0QjVCMEJBMDBGMzJGNTcgLyogU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDNEMENBRDE0
QjVCMEJBMDBGMzJGNTcgLyogU3R5bGVDdXN0b21GaWx0ZXJQcm9ncmFtLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJNTA4Q0NBNEYxM0NGMTA2QjAwMzE1MUYzIC8q
IFJlbmRlckZsb3dUaHJlYWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDUwOENDQTREMTNDRjEwNkIwMDMxNTFGMyAvKiBSZW5kZXJGbG93VGhyZWFkLmgg
Ki87IH07CiAJCTUwOENDQTUwMTNDRjEwNkIwMDMxNTFGMyAvKiBSZW5kZXJGbG93VGhyZWFkLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwOENDQTRF
MTNDRjEwNkIwMDMxNTFGMyAvKiBSZW5kZXJGbG93VGhyZWFkLmNwcCAqLzsgfTsKQEAgLTg2ODgs
NiArODY5MCw4IEBACiAJCTUwM0QwQ0E3MTRCNUIwODcwMEYzMkY1NyAvKiBDdXN0b21GaWx0ZXJQ
cm9ncmFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEN1c3RvbUZp
bHRlclByb2dyYW0uY3BwOyBwYXRoID0gZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTAzRDBDQTgxNEI1QjA4NzAwRjMyRjU3IC8q
IEN1c3RvbUZpbHRlclByb2dyYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
Q3VzdG9tRmlsdGVyUHJvZ3JhbS5oOyBwYXRoID0gZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFt
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUwM0QwQ0E5MTRCNUIwODcwMEYzMkY1
NyAvKiBDdXN0b21GaWx0ZXJQcm9ncmFtQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEN1c3RvbUZpbHRlclByb2dyYW1DbGllbnQuaDsgcGF0aCA9IGZpbHRlcnMvQ3Vz
dG9tRmlsdGVyUHJvZ3JhbUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MDNEMENBNzE0QjVCMDg3MDBGMzJGNTggLyogQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3Bw
OyBwYXRoID0gZmlsdGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUwM0QwQ0E4MTRCNUIwODcwMEYzMkY1OCAvKiBDdXN0b21GaWx0ZXJS
ZW5kZXJlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDdXN0b21GaWx0ZXJS
ZW5kZXJlci5oOyBwYXRoID0gZmlsdGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MDNEMENBRDE0QjVCMEJBMDBGMzJGNTcgLyogU3R5bGVD
dXN0b21GaWx0ZXJQcm9ncmFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0
eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oOyBwYXRoID0gc3R5bGUvU3R5bGVDdXN0b21GaWx0ZXJQ
cm9ncmFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUwOENDQTREMTNDRjEwNkIw
MDMxNTFGMyAvKiBSZW5kZXJGbG93VGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbmRlckZsb3dUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTA4Q0NBNEUxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyRmxvd1RocmVhZC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODI0NCw2ICsxODI0OCw4IEBACiAJCQkJNTAzRDBD
QTkxNEI1QjA4NzAwRjMyRjU3IC8qIEN1c3RvbUZpbHRlclByb2dyYW1DbGllbnQuaCAqLywKIAkJ
CQk1MEQ4OENCMzE1QkRGREFBMDAxODA5RjQgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uY3Bw
ICovLAogCQkJCTUwRDg4Q0I0MTVCREZEQUEwMDE4MDlGNCAvKiBDdXN0b21GaWx0ZXJQcm9ncmFt
SW5mby5oICovLAorCQkJCTUwM0QwQ0E3MTRCNUIwODcwMEYzMkY1OCAvKiBDdXN0b21GaWx0ZXJS
ZW5kZXJlci5jcHAgKi8sCisJCQkJNTAzRDBDQTgxNEI1QjA4NzAwRjMyRjU4IC8qIEN1c3RvbUZp
bHRlclJlbmRlcmVyLmggKi8sCiAJCQkJNTA5RUMxMDgxNUU4NDhDQTAwRTgyNTgxIC8qIEN1c3Rv
bUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlci5oICovLAogCQkJCUEyOTUzMkNEMTVERDVFMTcwMDQ2
OUVCQyAvKiBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmNwcCAqLywKIAkJCQlBMjk1MzJD
RTE1REQ1RTE3MDA0NjlFQkMgLyogQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oICovLApA
QCAtMjI2NzQsNiArMjI2ODAsNyBAQAogCQkJCTUwM0QwQ0FCMTRCNUIwODcwMEYzMkY1NyAvKiBD
dXN0b21GaWx0ZXJQcm9ncmFtLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MDNEMENBQzE0QjVCMDg3
MDBGMzJGNTcgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTBEODhDQjYxNUJERkRBQTAwMTgwOUY0IC8qIEN1c3RvbUZpbHRlclByb2dyYW1JbmZvLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk1MDNEMENBQjE0QjVCMDg3MDBGMzJGNTggLyogQ3VzdG9tRmls
dGVyUmVuZGVyZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyOTUzMkQwMTVERDVFMTcwMDQ2OUVC
QyAvKiBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
OENCNDEzRTBFODYzM0ZEMDAzMkM0RjAgLyogRGFzaEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBODBFNkQwQjBBMTk4OUNBMDA3RkI4QzUgLyogRGFzaGJvYXJkUmVnaW9uLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI2MjY4LDYgKzI2Mjc1LDcgQEAKIAkJCQk1MENDMEEzOTE0QzZGNUIxMDAxN0FC
NTEgLyogQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUwM0Qw
Q0FBMTRCNUIwODcwMEYzMkY1NyAvKiBDdXN0b21GaWx0ZXJQcm9ncmFtLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUwRDg4Q0I1MTVCREZEQUEwMDE4MDlGNCAvKiBDdXN0b21GaWx0ZXJQcm9ncmFt
SW5mby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MDNEMENBQTE0QjVCMDg3MDBGMzJGNTggLyog
Q3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI5NTMyQ0YxNURE
NUUxNzAwNDY5RUJDIC8qIEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTdCQzZBMjAxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTk3QkM2QTIzMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUF1dGhv
cml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmM5N2FkMzk3MzE5ZDJhYmMwYmJhYjNjNjhlZmIzZGE4NTFjZjZjMjIKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0N1c3RvbUZpbHRlclJlbmRlcmVyLmNwcApAQCAtMCwwICsxLDMxMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCc
QVMgSVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUK
KyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpICYmIFVTRSgzRF9HUkFQSElDUykKKyNpbmNs
dWRlICJDdXN0b21GaWx0ZXJSZW5kZXJlci5oIgorCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyQXJy
YXlQYXJhbWV0ZXIuaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW0uaCIK
KyNpbmNsdWRlICJDdXN0b21GaWx0ZXJDb25zdGFudHMuaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0
ZXJNZXNoLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyLmgiCisjaW5j
bHVkZSAiQ3VzdG9tRmlsdGVyUGFyYW1ldGVyLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJv
Z3JhbS5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlci5oIgorI2lu
Y2x1ZGUgIkN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQzRC5oIgorI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0cml4LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHZvaWQgb3J0aG9nb25hbFByb2plY3Rpb25NYXRyaXgo
VHJhbnNmb3JtYXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQsIGZs
b2F0IGJvdHRvbSwgZmxvYXQgdG9wKQoreworICAgIEFTU0VSVChtYXRyaXguaXNJZGVudGl0eSgp
KTsKKworICAgIGZsb2F0IGRlbHRhWCA9IHJpZ2h0IC0gbGVmdDsKKyAgICBmbG9hdCBkZWx0YVkg
PSB0b3AgLSBib3R0b207CisgICAgaWYgKCFkZWx0YVggfHwgIWRlbHRhWSkKKyAgICAgICAgcmV0
dXJuOworICAgIG1hdHJpeC5zZXRNMTEoMi4wZiAvIGRlbHRhWCk7CisgICAgbWF0cml4LnNldE00
MSgtKHJpZ2h0ICsgbGVmdCkgLyBkZWx0YVgpOworICAgIG1hdHJpeC5zZXRNMjIoMi4wZiAvIGRl
bHRhWSk7CisgICAgbWF0cml4LnNldE00MigtKHRvcCArIGJvdHRvbSkgLyBkZWx0YVkpOworCisg
ICAgLy8gVXNlIGJpZyBlbm91Z2ggbmVhci9mYXIgdmFsdWVzLCBzbyB0aGF0IHNpbXBsZSByb3Rh
dGlvbnMgb2YgcmF0aGVyIGxhcmdlIG9iamVjdHMgd2lsbCBub3QKKyAgICAvLyBnZXQgY2xpcHBl
ZC4gMTAwMDAgc2hvdWxkIGNvdmVyIG1vc3Qgb2YgdGhlIHNjcmVlbiByZXNvbHV0aW9ucy4KKyAg
ICBjb25zdCBmbG9hdCBmYXJWYWx1ZSA9IDEwMDAwOworICAgIGNvbnN0IGZsb2F0IG5lYXJWYWx1
ZSA9IC0xMDAwMDsKKyAgICBtYXRyaXguc2V0TTMzKC0yLjBmIC8gKGZhclZhbHVlIC0gbmVhclZh
bHVlKSk7CisgICAgbWF0cml4LnNldE00MygtIChmYXJWYWx1ZSArIG5lYXJWYWx1ZSkgLyAoZmFy
VmFsdWUgLSBuZWFyVmFsdWUpKTsKKyAgICBtYXRyaXguc2V0TTQ0KDEuMGYpOworfQorCitQYXNz
UmVmUHRyPEN1c3RvbUZpbHRlclJlbmRlcmVyPiBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6Y3JlYXRl
KFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQsIFBhc3NSZWZQdHI8Q3VzdG9t
RmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4gdmFsaWRhdGVkUHJvZ3JhbSwgY29uc3QgQ3VzdG9tRmls
dGVyUHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvLCBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJM
aXN0JiBwYXJhbWV0ZXJzLAorICAgIHVuc2lnbmVkIG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29s
dW1ucywgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoQm94VHlwZSBtZXNoQm94VHlwZSwgQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSBtZXNoVHlwZSkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYobmV3IEN1c3RvbUZpbHRlclJlbmRlcmVyKGNvbnRleHQsIHZhbGlkYXRlZFByb2dyYW0s
IHByb2dyYW1JbmZvLCBwYXJhbWV0ZXJzLCBtZXNoUm93cywgbWVzaENvbHVtbnMsIG1lc2hCb3hU
eXBlLCBtZXNoVHlwZSkpOworfQorCitDdXN0b21GaWx0ZXJSZW5kZXJlcjo6Q3VzdG9tRmlsdGVy
UmVuZGVyZXIoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwgUGFzc1JlZlB0
cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiB2YWxpZGF0ZWRQcm9ncmFtLCBjb25zdCBD
dXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYsIGNvbnN0IEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3Qm
IHBhcmFtZXRlcnMsCisgICAgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1lc2hDb2x1bW5z
LCBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hCb3hUeXBlLCBDdXN0b21GaWx0ZXJPcGVyYXRp
b246Ok1lc2hUeXBlIG1lc2hUeXBlKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBt
X3ZhbGlkYXRlZFByb2dyYW0odmFsaWRhdGVkUHJvZ3JhbSkKKyAgICAsIG1fY29tcGlsZWRQcm9n
cmFtKDApIC8vIERvbid0IGNvbXBpbGUgdGhlIHByb2dyYW0gdW5sZXNzIHdlIG5lZWQgdG8gcGFp
bnQuCisgICAgLCBtX3BhcmFtZXRlcnMocGFyYW1ldGVycykKKyAgICAsIG1fbWVzaFJvd3MobWVz
aFJvd3MpCisgICAgLCBtX21lc2hDb2x1bW5zKG1lc2hDb2x1bW5zKQorICAgICwgbV9tZXNoVHlw
ZShtZXNoVHlwZSkKK3sKK30KKworQ3VzdG9tRmlsdGVyUmVuZGVyZXI6On5DdXN0b21GaWx0ZXJS
ZW5kZXJlcigpCit7Cit9CisKK2Jvb2wgQ3VzdG9tRmlsdGVyUmVuZGVyZXI6OnByZW11bHRpcGxp
ZWRBbHBoYSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmFsaWRhdGVkUHJvZ3JhbS0+cHJvZ3Jh
bUluZm8oKS5wcm9ncmFtVHlwZSgpID09IFBST0dSQU1fVFlQRV9CTEVORFNfRUxFTUVOVF9URVhU
VVJFOworfQorCitib29sIEN1c3RvbUZpbHRlclJlbmRlcmVyOjpwcm9ncmFtTmVlZHNJbnB1dFRl
eHR1cmUoKSBjb25zdAoreworICAgIEFTU0VSVChtX2NvbXBpbGVkUHJvZ3JhbS5nZXQoKSk7Cisg
ICAgcmV0dXJuIG1fY29tcGlsZWRQcm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSAhPSAtMTsKK30K
Kwordm9pZCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6cGFpbnQoUGxhdGZvcm0zRE9iamVjdCBpbnB1
dFRleHR1cmUsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgLy8gRklYTUU6IFdlIHdvdWxk
IG5lZWQgc29tZXRoaW5nIGxpa2UgQ3VzdG9tRmlsdGVyUmVuZGVyZXJTdGF0ZSB0aGF0IHdpbGwg
Y29udGFpbiB0aGUgc2l6ZSBhbmQgb3RoZXIgcGFyYW1ldGVycyBpbiB0aGUgZnV0dXJlLiBXZSBz
aG91bGQgcGFzcyB0aGF0IHRvIGJpbmRQcm9ncmFtQnVmZmVycyBpbnN0ZWFkIG9mIHN0b3Jpbmcg
aXQuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDEw
NworICAgIG1fY29udGV4dFNpemUgPSBzaXplOworCisgICAgYmluZFByb2dyYW1BbmRCdWZmZXJz
KGlucHV0VGV4dHVyZSk7CisgICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250
ZXh0M0Q6OlRSSUFOR0xFUywgbV9tZXNoLT5pbmRpY2VzQ291bnQoKSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX1NIT1JULCAwKTsKKyAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGVzKCk7Cit9
CisKK2Jvb2wgQ3VzdG9tRmlsdGVyUmVuZGVyZXI6OnByZXBhcmVGb3JEcmF3aW5nKCkKK3sKKyAg
ICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGluaXRpYWxpemVDb21waWxl
ZFByb2dyYW1JZk5lZWRlZCgpOworCisgICAgLy8gSWYgdGhlIHNoYWRlciBoYWQgY29tcGlsZXIg
ZXJyb3JzIHdlIGNhbm5vdCBkcmF3IGFueXRoaW5nLgorICAgIGlmICghbV9jb21waWxlZFByb2dy
YW0tPmlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaW5pdGlh
bGl6ZU1lc2hJZk5lZWRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEN1c3RvbUZp
bHRlclJlbmRlcmVyOjppbml0aWFsaXplQ29tcGlsZWRQcm9ncmFtSWZOZWVkZWQoKQoreworICAg
IGlmIChtX2NvbXBpbGVkUHJvZ3JhbS5nZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9j
b21waWxlZFByb2dyYW0gPSBtX3ZhbGlkYXRlZFByb2dyYW0tPmNvbXBpbGVkUHJvZ3JhbSgpOwor
fQorCit2b2lkIEN1c3RvbUZpbHRlclJlbmRlcmVyOjppbml0aWFsaXplTWVzaElmTmVlZGVkKCkK
K3sKKyAgICBpZiAobV9tZXNoLmdldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhN
RTogU2hhcmluZyB0aGUgbWVzaCB3b3VsZCBqdXN0IHNhdmUgdGhlIHRpbWUgbmVlZGVkIHRvIHVw
bG9hZCBpdCB0byB0aGUgR1BVLCBzbyBJIGFzc3VtZSB3ZSBjb3VsZAorICAgIC8vIGJlbmNobWFy
ayB0aGF0IGZvciBwZXJmb3JtYW5jZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9ODg0MjkKKyAgICBtX21lc2ggPSBDdXN0b21GaWx0ZXJNZXNoOjpjcmVh
dGUobV9jb250ZXh0LmdldCgpLCBtX21lc2hDb2x1bW5zLCBtX21lc2hSb3dzLCBGbG9hdFJlY3Qo
MCwgMCwgMSwgMSksIG1fbWVzaFR5cGUpOworfQorCit2b2lkIEN1c3RvbUZpbHRlclJlbmRlcmVy
OjpiaW5kVmVydGV4QXR0cmlidXRlKGludCBhdHRyaWJ1dGVMb2NhdGlvbiwgdW5zaWduZWQgc2l6
ZSwgdW5zaWduZWQgb2Zmc2V0KQoreworICAgIGlmIChhdHRyaWJ1dGVMb2NhdGlvbiAhPSAtMSkg
eworICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoYXR0cmlidXRlTG9jYXRp
b24sIHNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIG1fbWVzaC0+Ynl0ZXNQ
ZXJWZXJ0ZXgoKSwgb2Zmc2V0KTsKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShhdHRyaWJ1dGVMb2NhdGlvbik7CisgICAgfQorfQorCit2b2lkIEN1c3RvbUZpbHRl
clJlbmRlcmVyOjp1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUoaW50IGF0dHJpYnV0ZUxvY2F0aW9uKQor
eworICAgIGlmIChhdHRyaWJ1dGVMb2NhdGlvbiAhPSAtMSkKKyAgICAgICAgbV9jb250ZXh0LT5k
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkoYXR0cmlidXRlTG9jYXRpb24pOworfQorCit2b2lkIEN1
c3RvbUZpbHRlclJlbmRlcmVyOjpiaW5kUHJvZ3JhbUFycmF5UGFyYW1ldGVycyhpbnQgdW5pZm9y
bUxvY2F0aW9uLCBDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlciogYXJyYXlQYXJhbWV0ZXIpCit7
CisgICAgdW5zaWduZWQgcGFyYW1ldGVyU2l6ZSA9IGFycmF5UGFyYW1ldGVyLT5zaXplKCk7Cisg
ICAgVmVjdG9yPEdDM0RmbG9hdD4gZmxvYXRWZWN0b3I7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcGFyYW1ldGVyU2l6ZTsgKytpKQorICAgICAgICBmbG9hdFZlY3Rvci5hcHBlbmQo
YXJyYXlQYXJhbWV0ZXItPnZhbHVlQXQoaSkpOworCisgICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2
KHVuaWZvcm1Mb2NhdGlvbiwgcGFyYW1ldGVyU2l6ZSwgZmxvYXRWZWN0b3IuZGF0YSgpKTsKK30K
Kwordm9pZCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6YmluZFByb2dyYW1OdW1iZXJQYXJhbWV0ZXJz
KGludCB1bmlmb3JtTG9jYXRpb24sIEN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlciogbnVtYmVy
UGFyYW1ldGVyKQoreworICAgIHN3aXRjaCAobnVtYmVyUGFyYW1ldGVyLT5zaXplKCkpIHsKKyAg
ICBjYXNlIDE6CisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKHVuaWZvcm1Mb2NhdGlvbiwg
bnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDApKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAy
OgorICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZih1bmlmb3JtTG9jYXRpb24sIG51bWJlclBh
cmFtZXRlci0+dmFsdWVBdCgwKSwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDEpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0zZih1bmlm
b3JtTG9jYXRpb24sIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgwKSwgbnVtYmVyUGFyYW1ldGVy
LT52YWx1ZUF0KDEpLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMikpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIDQ6CisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKHVuaWZvcm1Mb2Nh
dGlvbiwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDApLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVl
QXQoMSksIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgyKSwgbnVtYmVyUGFyYW1ldGVyLT52YWx1
ZUF0KDMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEN1c3RvbUZpbHRlclJlbmRlcmVyOjpiaW5k
UHJvZ3JhbVRyYW5zZm9ybVBhcmFtZXRlcihpbnQgdW5pZm9ybUxvY2F0aW9uLCBDdXN0b21GaWx0
ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIqIHRyYW5zZm9ybVBhcmFtZXRlcikKK3sKKyAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBtYXRyaXg7CisgICAgaWYgKG1fY29udGV4dFNpemUud2lkdGgoKSAmJiBt
X2NvbnRleHRTaXplLmhlaWdodCgpKSB7CisgICAgICAgIC8vIFRoZSB2aWV3cG9ydCBpcyBhIGJv
eCB3aXRoIHRoZSBzaXplIG9mIDEgdW5pdCwgc28gd2UgYXJlIHNjYWxsaW5nIHVwIGhlcmUgdG8g
bWFrZSBzdXJlIHRoYXQgdHJhbnNsYXRpb25zIGhhcHBlbiB1c2luZyByZWFsIHBpeGVsCisgICAg
ICAgIC8vIHVuaXRzLiBBdCB0aGUgZW5kIHdlIHNjYWxlIGJhY2sgZG93biBpbiBvcmRlciB0byBt
YXAgaXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYm94LiBOb3RlIHRoYXQgdHJhbnNmb3JtcyBjb21l
IGluIHJldmVyc2Ugb3JkZXIsIGJlY2F1c2UgaXQgaXMKKyAgICAgICAgLy8gc3VwcG9zZWQgdG8g
bXVsdGlwbHkgdG8gdGhlIGxlZnQgb2YgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB2ZXJ0aWNlcy4K
KyAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBvcmlnaW4gKDAsIDApIG9mIHRoZSB2aWV3cG9ydCBp
cyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBjb250ZXh0LCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gY2hh
bmdlIHRoZSBvcmlnaW4gb2YgdGhlIHRyYW5zZm9ybQorICAgICAgICAvLyBpbiBvcmRlciB0byBy
b3RhdGUgYXJvdW5kIHRoZSBtaWRkbGUgb2YgbWVzaC4KKyAgICAgICAgbWF0cml4LnNjYWxlM2Qo
MS4wIC8gbV9jb250ZXh0U2l6ZS53aWR0aCgpLCAxLjAgLyBtX2NvbnRleHRTaXplLmhlaWdodCgp
LCAxKTsKKyAgICAgICAgdHJhbnNmb3JtUGFyYW1ldGVyLT5hcHBseVRyYW5zZm9ybShtYXRyaXgs
IG1fY29udGV4dFNpemUpOworICAgICAgICBtYXRyaXguc2NhbGUzZChtX2NvbnRleHRTaXplLndp
ZHRoKCksIG1fY29udGV4dFNpemUuaGVpZ2h0KCksIDEpOworICAgIH0KKyAgICBmbG9hdCBnbE1h
dHJpeFsxNl07CisgICAgbWF0cml4LnRvQ29sdW1uTWFqb3JGbG9hdEFycmF5KGdsTWF0cml4KTsK
KyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYodW5pZm9ybUxvY2F0aW9uLCAxLCBmYWxz
ZSwgJmdsTWF0cml4WzBdKTsKK30KKwordm9pZCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6YmluZFBy
b2dyYW1QYXJhbWV0ZXJzKCkKK3sKKyAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byByZXNldCB1
bmlmb3JtcyB0aGF0IGFyZSBub3Qgc3BlY2lmaWVkIGluIENTUy4gVGhpcyBpcyBuZWVkZWQgdG8g
YXZvaWQgdXNpbmcgdmFsdWVzCisgICAgLy8gc2V0IGJ5IG90aGVyIHByZXZpb3VzIHJlbmRlcmVk
IGZpbHRlcnMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTc2NDQwCisKKyAgICBzaXplX3QgcGFyYW1ldGVyc1NpemUgPSBtX3BhcmFtZXRlcnMuc2l6ZSgp
OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVyc1NpemU7ICsraSkgeworICAg
ICAgICBDdXN0b21GaWx0ZXJQYXJhbWV0ZXIqIHBhcmFtZXRlciA9IG1fcGFyYW1ldGVycy5hdChp
KS5nZXQoKTsKKyAgICAgICAgaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1fY29tcGlsZWRQcm9ncmFt
LT51bmlmb3JtTG9jYXRpb25CeU5hbWUocGFyYW1ldGVyLT5uYW1lKCkpOworICAgICAgICBpZiAo
dW5pZm9ybUxvY2F0aW9uID09IC0xKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHN3
aXRjaCAocGFyYW1ldGVyLT5wYXJhbWV0ZXJUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBDdXN0b21G
aWx0ZXJQYXJhbWV0ZXI6OkFSUkFZOgorICAgICAgICAgICAgYmluZFByb2dyYW1BcnJheVBhcmFt
ZXRlcnModW5pZm9ybUxvY2F0aW9uLCBzdGF0aWNfY2FzdDxDdXN0b21GaWx0ZXJBcnJheVBhcmFt
ZXRlcio+KHBhcmFtZXRlcikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3Vz
dG9tRmlsdGVyUGFyYW1ldGVyOjpOVU1CRVI6CisgICAgICAgICAgICBiaW5kUHJvZ3JhbU51bWJl
clBhcmFtZXRlcnModW5pZm9ybUxvY2F0aW9uLCBzdGF0aWNfY2FzdDxDdXN0b21GaWx0ZXJOdW1i
ZXJQYXJhbWV0ZXIqPihwYXJhbWV0ZXIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEN1c3RvbUZpbHRlclBhcmFtZXRlcjo6VFJBTlNGT1JNOgorICAgICAgICAgICAgYmluZFBy
b2dyYW1UcmFuc2Zvcm1QYXJhbWV0ZXIodW5pZm9ybUxvY2F0aW9uLCBzdGF0aWNfY2FzdDxDdXN0
b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIqPihwYXJhbWV0ZXIpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEN1c3RvbUZpbHRlclJlbmRlcmVyOjpi
aW5kUHJvZ3JhbUFuZEJ1ZmZlcnMoUGxhdGZvcm0zRE9iamVjdCBpbnB1dFRleHR1cmUpCit7Cisg
ICAgQVNTRVJUKG1fY29tcGlsZWRQcm9ncmFtLT5pc0luaXRpYWxpemVkKCkpOworCisgICAgbV9j
b250ZXh0LT51c2VQcm9ncmFtKG1fY29tcGlsZWRQcm9ncmFtLT5wcm9ncmFtKCkpOworCisgICAg
aWYgKHByb2dyYW1OZWVkc0lucHV0VGV4dHVyZSgpKSB7CisgICAgICAgIC8vIFdlIHNob3VsZCBi
ZSBiaW5kaW5nIHRoZSBET00gZWxlbWVudCB0ZXh0dXJlIHNhbXBsZXIgb25seSBpZiB0aGUgYXV0
aG9yIGlzIHVzaW5nIHRoZSBDU1MgbWl4IGZ1bmN0aW9uLgorICAgICAgICBBU1NFUlQobV92YWxp
ZGF0ZWRQcm9ncmFtLT5wcm9ncmFtSW5mbygpLnByb2dyYW1UeXBlKCkgPT0gUFJPR1JBTV9UWVBF
X0JMRU5EU19FTEVNRU5UX1RFWFRVUkUpOworICAgICAgICBBU1NFUlQobV9jb21waWxlZFByb2dy
YW0tPnNhbXBsZXJMb2NhdGlvbigpICE9IC0xKTsKKworICAgICAgICBtX2NvbnRleHQtPmFjdGl2
ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKyAgICAgICAgbV9jb250ZXh0
LT51bmlmb3JtMWkobV9jb21waWxlZFByb2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpLCAwKTsKKyAg
ICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8y
RCwgaW5wdXRUZXh0dXJlKTsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5f
RklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICAgICAgbV9jb250ZXh0LT50
ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAg
ICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNE
OjpDTEFNUF9UT19FREdFKTsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQ
X1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICB9CisKKyAgICBpZiAo
bV9jb21waWxlZFByb2dyYW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpICE9IC0xKSB7Cisg
ICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHByb2plY3Rpb25NYXRyaXg7CisgICAgICAgIG9y
dGhvZ29uYWxQcm9qZWN0aW9uTWF0cml4KHByb2plY3Rpb25NYXRyaXgsIC0wLjUsIDAuNSwgLTAu
NSwgMC41KTsKKyAgICAgICAgZmxvYXQgZ2xQcm9qZWN0aW9uTWF0cml4WzE2XTsKKyAgICAgICAg
cHJvamVjdGlvbk1hdHJpeC50b0NvbHVtbk1ham9yRmxvYXRBcnJheShnbFByb2plY3Rpb25NYXRy
aXgpOworICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobV9jb21waWxlZFByb2dy
YW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgJmdsUHJvamVjdGlvbk1h
dHJpeFswXSk7CisgICAgfQorCisgICAgQVNTRVJUKG1fbWVzaENvbHVtbnMpOworICAgIEFTU0VS
VChtX21lc2hSb3dzKTsKKworICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+bWVzaFNpemVMb2Nh
dGlvbigpICE9IC0xKQorICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX2NvbXBpbGVkUHJv
Z3JhbS0+bWVzaFNpemVMb2NhdGlvbigpLCBtX21lc2hDb2x1bW5zLCBtX21lc2hSb3dzKTsKKwor
ICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+dGlsZVNpemVMb2NhdGlvbigpICE9IC0xKQorICAg
ICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX2NvbXBpbGVkUHJvZ3JhbS0+dGlsZVNpemVMb2Nh
dGlvbigpLCAxLjAgLyBtX21lc2hDb2x1bW5zLCAxLjAgLyBtX21lc2hSb3dzKTsKKworICAgIGlm
IChtX2NvbXBpbGVkUHJvZ3JhbS0+bWVzaEJveExvY2F0aW9uKCkgIT0gLTEpIHsKKyAgICAgICAg
Ly8gRklYTUU6IFRoaXMgd2lsbCBjaGFuZ2Ugd2hlbiBmaWx0ZXIgbWFyZ2lucyB3aWxsIGJlIGlt
cGxlbWVudGVkLAorICAgICAgICAvLyBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTcxNDAwCisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKG1fY29tcGlsZWRQ
cm9ncmFtLT5tZXNoQm94TG9jYXRpb24oKSwgLTAuNSwgLTAuNSwgMS4wLCAxLjApOworICAgIH0K
KworICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+c2FtcGxlclNpemVMb2NhdGlvbigpICE9IC0x
KQorICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX2NvbXBpbGVkUHJvZ3JhbS0+c2FtcGxl
clNpemVMb2NhdGlvbigpLCBtX2NvbnRleHRTaXplLndpZHRoKCksIG1fY29udGV4dFNpemUuaGVp
Z2h0KCkpOworCisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpB
UlJBWV9CVUZGRVIsIG1fbWVzaC0+dmVydGljZXNCdWZmZXJPYmplY3QoKSk7CisgICAgbV9jb250
ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUiwg
bV9tZXNoLT5lbGVtZW50c0J1ZmZlck9iamVjdCgpKTsKKworICAgIGJpbmRWZXJ0ZXhBdHRyaWJ1
dGUobV9jb21waWxlZFByb2dyYW0tPnBvc2l0aW9uQXR0cmliTG9jYXRpb24oKSwgUG9zaXRpb25B
dHRyaWJTaXplLCBQb3NpdGlvbkF0dHJpYk9mZnNldCk7CisgICAgYmluZFZlcnRleEF0dHJpYnV0
ZShtX2NvbXBpbGVkUHJvZ3JhbS0+dGV4QXR0cmliTG9jYXRpb24oKSwgVGV4QXR0cmliU2l6ZSwg
VGV4QXR0cmliT2Zmc2V0KTsKKyAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGUgaW50ZXJuYWwg
dGV4IGNvb3JkIGF0dHJpYnV0ZSAiY3NzX2FfdGV4Q29vcmQiLgorICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDM1OAorICAgIGJpbmRWZXJ0ZXhBdHRyaWJ1
dGUobV9jb21waWxlZFByb2dyYW0tPmludGVybmFsVGV4Q29vcmRBdHRyaWJMb2NhdGlvbigpLCBU
ZXhBdHRyaWJTaXplLCBUZXhBdHRyaWJPZmZzZXQpOworICAgIGJpbmRWZXJ0ZXhBdHRyaWJ1dGUo
bV9jb21waWxlZFByb2dyYW0tPm1lc2hBdHRyaWJMb2NhdGlvbigpLCBNZXNoQXR0cmliU2l6ZSwg
TWVzaEF0dHJpYk9mZnNldCk7CisgICAgaWYgKG1fbWVzaFR5cGUgPT0gQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uOjpERVRBQ0hFRCkKKyAgICAgICAgYmluZFZlcnRleEF0dHJpYnV0ZShtX2NvbXBpbGVk
UHJvZ3JhbS0+dHJpYW5nbGVBdHRyaWJMb2NhdGlvbigpLCBUcmlhbmdsZUF0dHJpYlNpemUsIFRy
aWFuZ2xlQXR0cmliT2Zmc2V0KTsKKworICAgIGJpbmRQcm9ncmFtUGFyYW1ldGVycygpOworfQor
Cit2b2lkIEN1c3RvbUZpbHRlclJlbmRlcmVyOjp1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGVzKCkKK3sK
KyAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPnBvc2l0aW9uQXR0
cmliTG9jYXRpb24oKSk7CisgICAgdW5iaW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9n
cmFtLT50ZXhBdHRyaWJMb2NhdGlvbigpKTsKKyAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9j
b21waWxlZFByb2dyYW0tPmludGVybmFsVGV4Q29vcmRBdHRyaWJMb2NhdGlvbigpKTsKKyAgICB1
bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPm1lc2hBdHRyaWJMb2NhdGlv
bigpKTsKKyAgICBpZiAobV9tZXNoVHlwZSA9PSBDdXN0b21GaWx0ZXJPcGVyYXRpb246OkRFVEFD
SEVEKQorICAgICAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPnRy
aWFuZ2xlQXR0cmliTG9jYXRpb24oKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShDU1NfU0hBREVSUykgJiYgVVNFKDNEX0dSQVBISUNTKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0
ZXJSZW5kZXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9D
dXN0b21GaWx0ZXJSZW5kZXJlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMyNGQ5NTBmNWQxMWY3MjAwMWQ0ZDll
ZGYyOWE2ZTdhZTA5YjE2YjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmgKQEAgLTAsMCArMSw5
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRl
ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEw
MCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg
4oCcQVMgSVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIg
QkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEN1c3Rv
bUZpbHRlclJlbmRlcmVyX2gKKyNkZWZpbmUgQ3VzdG9tRmlsdGVyUmVuZGVyZXJfaAorCisjaWYg
RU5BQkxFKENTU19TSEFERVJTKSAmJiBVU0UoM0RfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDdXN0
b21GaWx0ZXJPcGVyYXRpb24uaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKKyNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlcjsKK2NsYXNz
IEN1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbTsKK2NsYXNzIEN1c3RvbUZpbHRlck1lc2g7Citj
bGFzcyBDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXI7CitjbGFzcyBDdXN0b21GaWx0ZXJUcmFu
c2Zvcm1QYXJhbWV0ZXI7CitjbGFzcyBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtOworY2xh
c3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBJbnRTaXplOworCitjbGFzcyBDdXN0b21GaWx0
ZXJSZW5kZXJlciA6IHB1YmxpYyBSZWZDb3VudGVkPEN1c3RvbUZpbHRlclJlbmRlcmVyPiB7Citw
dWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUmVuZGVyZXI+IGNyZWF0
ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJW
YWxpZGF0ZWRQcm9ncmFtPiwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mLCBjb25zdCBD
dXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiwKKyAgICAgICAgdW5zaWduZWQgbWVzaFJvd3MsIHVu
c2lnbmVkIG1lc2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hCb3hUeXBlLCBD
dXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hUeXBlKTsKKyAgICB+Q3VzdG9tRmlsdGVyUmVuZGVy
ZXIoKTsKKworICAgIGJvb2wgcHJlbXVsdGlwbGllZEFscGhhKCkgY29uc3Q7CisgICAgYm9vbCBw
cm9ncmFtTmVlZHNJbnB1dFRleHR1cmUoKSBjb25zdDsKKworICAgIGJvb2wgcHJlcGFyZUZvckRy
YXdpbmcoKTsKKworICAgIHZvaWQgcGFpbnQoUGxhdGZvcm0zRE9iamVjdCwgY29uc3QgSW50U2l6
ZSYpOworCitwcml2YXRlOgorICAgIEN1c3RvbUZpbHRlclJlbmRlcmVyKFBhc3NSZWZQdHI8R3Jh
cGhpY3NDb250ZXh0M0Q+LCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0+
LCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYsIGNvbnN0IEN1c3RvbUZpbHRlclBhcmFt
ZXRlckxpc3QmLAorICAgICAgICB1bnNpZ25lZCBtZXNoUm93cywgdW5zaWduZWQgbWVzaENvbHVt
bnMsIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaEJveFR5cGUsIEN1c3RvbUZpbHRlck9wZXJh
dGlvbjo6TWVzaFR5cGUpOworCisgICAgdm9pZCBpbml0aWFsaXplQ29tcGlsZWRQcm9ncmFtSWZO
ZWVkZWQoKTsKKyAgICB2b2lkIGluaXRpYWxpemVNZXNoSWZOZWVkZWQoKTsKKworICAgIHZvaWQg
YmluZFZlcnRleEF0dHJpYnV0ZShpbnQgYXR0cmlidXRlTG9jYXRpb24sIHVuc2lnbmVkIHNpemUs
IHVuc2lnbmVkIG9mZnNldCk7CisgICAgdm9pZCB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUoaW50IGF0
dHJpYnV0ZUxvY2F0aW9uKTsKKyAgICB2b2lkIGJpbmRQcm9ncmFtQXJyYXlQYXJhbWV0ZXJzKGlu
dCB1bmlmb3JtTG9jYXRpb24sIEN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyKik7CisgICAgdm9p
ZCBiaW5kUHJvZ3JhbU51bWJlclBhcmFtZXRlcnMoaW50IHVuaWZvcm1Mb2NhdGlvbiwgQ3VzdG9t
RmlsdGVyTnVtYmVyUGFyYW1ldGVyKik7CisgICAgdm9pZCBiaW5kUHJvZ3JhbVRyYW5zZm9ybVBh
cmFtZXRlcihpbnQgdW5pZm9ybUxvY2F0aW9uLCBDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0
ZXIqKTsKKyAgICB2b2lkIGJpbmRQcm9ncmFtUGFyYW1ldGVycygpOworICAgIHZvaWQgYmluZFBy
b2dyYW1BbmRCdWZmZXJzKFBsYXRmb3JtM0RPYmplY3QgaW5wdXRUZXh0dXJlKTsKKyAgICB2b2lk
IHVuYmluZFZlcnRleEF0dHJpYnV0ZXMoKTsKKworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4gbV9jb250ZXh0OworICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiBt
X3ZhbGlkYXRlZFByb2dyYW07CisgICAgUmVmUHRyPEN1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3Jh
bT4gbV9jb21waWxlZFByb2dyYW07CisgICAgUmVmUHRyPEN1c3RvbUZpbHRlck1lc2g+IG1fbWVz
aDsKKyAgICBJbnRTaXplIG1fY29udGV4dFNpemU7CisKKyAgICBDdXN0b21GaWx0ZXJQYXJhbWV0
ZXJMaXN0IG1fcGFyYW1ldGVyczsKKworICAgIHVuc2lnbmVkIG1fbWVzaFJvd3M7CisgICAgdW5z
aWduZWQgbV9tZXNoQ29sdW1uczsKKyAgICBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hUeXBl
IG1fbWVzaFR5cGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoQ1NTX1NIQURFUlMpICYmIFVTRSgzRF9HUkFQSElDUykKKworI2VuZGlmIC8vIEN1c3Rv
bUZpbHRlclJlbmRlcmVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5jcHAKaW5kZXggNzA3ZWRiODY2ZmUx
M2MyYzk3ZDA1Y2M2NjE5N2U5MGRmMmYwYWE1Ni4uMzVlOGQ5ZjM2MjA0YTFmZjM1YTRlNDhkYjkz
OTkzMDBjNjg3NDIxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5jcHAKQEAgLTMzLDYxICszMywyMyBA
QAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykgJiYgVVNFKDNEX0dSQVBISUNTKQogI2luY2x1ZGUg
IkZFQ3VzdG9tRmlsdGVyLmgiCiAKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRl
ci5oIgotI2luY2x1ZGUgIkN1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbS5oIgotI2luY2x1ZGUg
IkN1c3RvbUZpbHRlckNvbnN0YW50cy5oIgotI2luY2x1ZGUgIkN1c3RvbUZpbHRlckdsb2JhbENv
bnRleHQuaCIKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJNZXNoLmgiCi0jaW5jbHVkZSAiQ3VzdG9t
RmlsdGVyTnVtYmVyUGFyYW1ldGVyLmgiCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUGFyYW1ldGVy
LmgiCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIgotI2luY2x1ZGUgIkN1c3RvbUZp
bHRlclRyYW5zZm9ybVBhcmFtZXRlci5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRlclJlbmRlcmVy
LmgiCiAjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oIgotI2luY2x1ZGUg
IkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKICNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUgIkltYWdlRGF0YS5oIgotI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUmVuZGVyVHJlZUFzVGV4dC5oIgogI2luY2x1ZGUg
IlRleHRTdHJlYW0uaCIKLSNpbmNsdWRlICJUaWxpbmdEYXRhLmgiCi0jaW5jbHVkZSAiVHJhbnNm
b3JtYXRpb25NYXRyaXguaCIKIAogI2luY2x1ZGUgPHd0Zi9VaW50OENsYW1wZWRBcnJheS5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBjb25zdCBpbnQga01heFNhbXBsZUNvdW50
ID0gNDsKLQotc3RhdGljIHZvaWQgb3J0aG9nb25hbFByb2plY3Rpb25NYXRyaXgoVHJhbnNmb3Jt
YXRpb25NYXRyaXgmIG1hdHJpeCwgZmxvYXQgbGVmdCwgZmxvYXQgcmlnaHQsIGZsb2F0IGJvdHRv
bSwgZmxvYXQgdG9wKQotewotICAgIEFTU0VSVChtYXRyaXguaXNJZGVudGl0eSgpKTsKLSAgICAK
LSAgICBmbG9hdCBkZWx0YVggPSByaWdodCAtIGxlZnQ7Ci0gICAgZmxvYXQgZGVsdGFZID0gdG9w
IC0gYm90dG9tOwotICAgIGlmICghZGVsdGFYIHx8ICFkZWx0YVkpCi0gICAgICAgIHJldHVybjsK
LSAgICBtYXRyaXguc2V0TTExKDIuMGYgLyBkZWx0YVgpOwotICAgIG1hdHJpeC5zZXRNNDEoLShy
aWdodCArIGxlZnQpIC8gZGVsdGFYKTsKLSAgICBtYXRyaXguc2V0TTIyKDIuMGYgLyBkZWx0YVkp
OwotICAgIG1hdHJpeC5zZXRNNDIoLSh0b3AgKyBib3R0b20pIC8gZGVsdGFZKTsKLQotICAgIC8v
IFVzZSBiaWcgZW5vdWdoIG5lYXIvZmFyIHZhbHVlcywgc28gdGhhdCBzaW1wbGUgcm90YXRpb25z
IG9mIHJhdGhlciBsYXJnZSBvYmplY3RzIHdpbGwgbm90Ci0gICAgLy8gZ2V0IGNsaXBwZWQuIDEw
MDAwIHNob3VsZCBjb3ZlciBtb3N0IG9mIHRoZSBzY3JlZW4gcmVzb2x1dGlvbnMuCi0gICAgY29u
c3QgZmxvYXQgZmFyVmFsdWUgPSAxMDAwMDsKLSAgICBjb25zdCBmbG9hdCBuZWFyVmFsdWUgPSAt
MTAwMDA7Ci0gICAgbWF0cml4LnNldE0zMygtMi4wZiAvIChmYXJWYWx1ZSAtIG5lYXJWYWx1ZSkp
OwotICAgIG1hdHJpeC5zZXRNNDMoLSAoZmFyVmFsdWUgKyBuZWFyVmFsdWUpIC8gKGZhclZhbHVl
IC0gbmVhclZhbHVlKSk7Ci0gICAgbWF0cml4LnNldE00NCgxLjBmKTsKLX0KLQotRkVDdXN0b21G
aWx0ZXI6OkZFQ3VzdG9tRmlsdGVyKEZpbHRlciogZmlsdGVyLCBDdXN0b21GaWx0ZXJHbG9iYWxD
b250ZXh0KiBjdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRl
clZhbGlkYXRlZFByb2dyYW0+IHZhbGlkYXRlZFByb2dyYW0sIGNvbnN0IEN1c3RvbUZpbHRlclBh
cmFtZXRlckxpc3QmIHBhcmFtZXRlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dW5zaWduZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1lc2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJPcGVy
YXRpb246Ok1lc2hCb3hUeXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3Rv
bUZpbHRlck9wZXJhdGlvbjo6TWVzaFR5cGUgbWVzaFR5cGUpCitGRUN1c3RvbUZpbHRlcjo6RkVD
dXN0b21GaWx0ZXIoRmlsdGVyKiBmaWx0ZXIsIFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
IGNvbnRleHQsIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4gdmFsaWRh
dGVkUHJvZ3JhbSwgY29uc3QgQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8mIHByb2dyYW1JbmZvLCBj
b25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBwYXJhbWV0ZXJzLAorICAgIHVuc2lnbmVk
IG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpN
ZXNoQm94VHlwZSBtZXNoQm94VHlwZSwKKyAgICBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hU
eXBlIG1lc2hUeXBlKQogICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlcikKLSAgICAsIG1fZ2xvYmFs
Q29udGV4dChjdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KQotICAgICwgbV92YWxpZGF0ZWRQcm9n
cmFtKHZhbGlkYXRlZFByb2dyYW0pCi0gICAgLCBtX2NvbXBpbGVkUHJvZ3JhbSgwKSAvLyBEb24n
dCBjb21waWxlIHRoZSBwcm9ncmFtIHVubGVzcyB3ZSBuZWVkIHRvIHBhaW50LgorICAgICwgbV9j
b250ZXh0KGNvbnRleHQpCisgICAgLCBtX2N1c3RvbUZpbHRlclJlbmRlcmVyKEN1c3RvbUZpbHRl
clJlbmRlcmVyOjpjcmVhdGUobV9jb250ZXh0LCB2YWxpZGF0ZWRQcm9ncmFtLCBwcm9ncmFtSW5m
bywgcGFyYW1ldGVycywgbWVzaFJvd3MsIG1lc2hDb2x1bW5zLCBtZXNoQm94VHlwZSwgbWVzaFR5
cGUpKQogICAgICwgbV9pbnB1dFRleHR1cmUoMCkKICAgICAsIG1fZnJhbWVCdWZmZXIoMCkKICAg
ICAsIG1fZGVwdGhCdWZmZXIoMCkKQEAgLTk2LDIwICs1OCwxNCBAQCBGRUN1c3RvbUZpbHRlcjo6
RkVDdXN0b21GaWx0ZXIoRmlsdGVyKiBmaWx0ZXIsIEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQq
IGN1c3RvbQogICAgICwgbV9tdWx0aXNhbXBsZUZyYW1lQnVmZmVyKDApCiAgICAgLCBtX211bHRp
c2FtcGxlUmVuZGVyQnVmZmVyKDApCiAgICAgLCBtX211bHRpc2FtcGxlRGVwdGhCdWZmZXIoMCkK
LSAgICAsIG1fcGFyYW1ldGVycyhwYXJhbWV0ZXJzKQotICAgICwgbV9tZXNoUm93cyhtZXNoUm93
cykKLSAgICAsIG1fbWVzaENvbHVtbnMobWVzaENvbHVtbnMpCi0gICAgLCBtX21lc2hUeXBlKG1l
c2hUeXBlKQogewotICAgIC8vIEFuIEZFQ3VzdG9tRmlsdGVyIHNob3VsZG4ndCBoYXZlIGJlZW4g
Y3JlYXRlZCB1bmxlc3MgdGhlIHByb2dyYW0gcGFzc2VkIHZhbGlkYXRpb24uCi0gICAgQVNTRVJU
KG1fdmFsaWRhdGVkUHJvZ3JhbS0+aXNJbml0aWFsaXplZCgpKTsKIH0KIAotUGFzc1JlZlB0cjxG
RUN1c3RvbUZpbHRlcj4gRkVDdXN0b21GaWx0ZXI6OmNyZWF0ZShGaWx0ZXIqIGZpbHRlciwgQ3Vz
dG9tRmlsdGVyR2xvYmFsQ29udGV4dCogY3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCwgUGFzc1Jl
ZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiB2YWxpZGF0ZWRQcm9ncmFtLCBjb25z
dCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBwYXJhbWV0ZXJzLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1lc2hSb3dzLCB1bnNpZ25lZCBt
ZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoQm94VHlwZSBtZXNoQm94VHlw
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWx0
ZXJPcGVyYXRpb246Ok1lc2hUeXBlIG1lc2hUeXBlKQorUGFzc1JlZlB0cjxGRUN1c3RvbUZpbHRl
cj4gRkVDdXN0b21GaWx0ZXI6OmNyZWF0ZShGaWx0ZXIqIGZpbHRlciwgUGFzc1JlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gY29udGV4dCwgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQ
cm9ncmFtPiB2YWxpZGF0ZWRQcm9ncmFtLCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYg
cHJvZ3JhbUluZm8sIGNvbnN0IEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHBhcmFtZXRlcnMs
CisgICAgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1lc2hDb2x1bW5zLCBDdXN0b21GaWx0
ZXJPcGVyYXRpb246Ok1lc2hCb3hUeXBlIG1lc2hCb3hUeXBlLAorICAgIEN1c3RvbUZpbHRlck9w
ZXJhdGlvbjo6TWVzaFR5cGUgbWVzaFR5cGUpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBG
RUN1c3RvbUZpbHRlcihmaWx0ZXIsIGN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQsIHZhbGlkYXRl
ZFByb2dyYW0sIHBhcmFtZXRlcnMsIG1lc2hSb3dzLCBtZXNoQ29sdW1ucywgbWVzaEJveFR5cGUs
IG1lc2hUeXBlKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGRUN1c3RvbUZpbHRlcihmaWx0
ZXIsIGNvbnRleHQsIHZhbGlkYXRlZFByb2dyYW0sIHByb2dyYW1JbmZvLCBwYXJhbWV0ZXJzLCBt
ZXNoUm93cywgbWVzaENvbHVtbnMsIG1lc2hCb3hUeXBlLCBtZXNoVHlwZSkpOwogfQogCiBGRUN1
c3RvbUZpbHRlcjo6fkZFQ3VzdG9tRmlsdGVyKCkKQEAgLTExOSw4ICs3NSw3IEBAIEZFQ3VzdG9t
RmlsdGVyOjp+RkVDdXN0b21GaWx0ZXIoKQogCiB2b2lkIEZFQ3VzdG9tRmlsdGVyOjpkZWxldGVS
ZW5kZXJCdWZmZXJzKCkKIHsKLSAgICBpZiAoIW1fY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwor
ICAgIEFTU0VSVChtX2NvbnRleHQpOwogICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7CiAgICAgaWYgKG1faW5wdXRUZXh0dXJlKSB7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRl
VGV4dHVyZShtX2lucHV0VGV4dHVyZSk7CkBAIC0xODcsNDUgKzE0MiwzMyBAQCB2b2lkIEZFQ3Vz
dG9tRmlsdGVyOjpkcmF3RmlsdGVyTWVzaChQbGF0Zm9ybTNET2JqZWN0IGlucHV0VGV4dHVyZSkK
ICAgICBib29sIG11bHRpc2FtcGxlID0gY2FuVXNlTXVsdGlzYW1wbGVCdWZmZXJzKCk7CiAgICAg
bV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVS
LCBtdWx0aXNhbXBsZSA/IG1fbXVsdGlzYW1wbGVGcmFtZUJ1ZmZlciA6IG1fZnJhbWVCdWZmZXIp
OwogICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgbV9jb250ZXh0U2l6ZS53aWR0aCgpLCBt
X2NvbnRleHRTaXplLmhlaWdodCgpKTsKLSAgICAKKwogICAgIG1fY29udGV4dC0+Y2xlYXJDb2xv
cigwLCAwLCAwLCAwKTsKICAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpD
T0xPUl9CVUZGRVJfQklUIHwgR3JhcGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQpOwot
ICAgIAotICAgIGJpbmRQcm9ncmFtQW5kQnVmZmVycyhpbnB1dFRleHR1cmUpOwotICAgIG1fY29u
dGV4dC0+ZHJhd0VsZW1lbnRzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRVMsIG1fbWVzaC0+
aW5kaWNlc0NvdW50KCksIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCwgMCk7Ci0g
ICAgdW5iaW5kVmVydGV4QXR0cmlidXRlcygpOworCisgICAgbV9jdXN0b21GaWx0ZXJSZW5kZXJl
ci0+cGFpbnQoaW5wdXRUZXh0dXJlLCBtX2NvbnRleHRTaXplKTsKIAogICAgIGlmIChtdWx0aXNh
bXBsZSkKICAgICAgICAgcmVzb2x2ZU11bHRpc2FtcGxlQnVmZmVyKCk7CiB9CiAKLWJvb2wgRkVD
dXN0b21GaWx0ZXI6OnByZXBhcmVGb3JEcmF3aW5nKEN1c3RvbUZpbHRlckRyYXdUeXBlIGZpbHRl
ckRyYXdUeXBlKQorYm9vbCBGRUN1c3RvbUZpbHRlcjo6cHJlcGFyZUZvckRyYXdpbmcoKQogewot
ICAgIGlmICghbV9jb250ZXh0ICYmICFpbml0aWFsaXplQ29udGV4dCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKIAotICAgIC8v
IElmIHRoZSBzaGFkZXIgaGFkIGNvbXBpbGVyIGVycm9ycyB3ZSBjYW5ub3QgZHJhdyBhbnl0aGlu
Zy4KLSAgICBpZiAoIW1fY29tcGlsZWRQcm9ncmFtLT5pc0luaXRpYWxpemVkKCkpCisgICAgaWYg
KCFtX2N1c3RvbUZpbHRlclJlbmRlcmVyLT5wcmVwYXJlRm9yRHJhd2luZygpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICAvLyBPbmx5IGFsbG9jYXRlIGEgdGV4dHVyZSBpZiB0
aGUgcHJvZ3JhbSBuZWVkcyBvbmUgYW5kIHRoZSBjYWxsZXIgZG9lc24ndCBhbGxvY2F0ZSBvbmUg
YnkgaXRzZWxmLgotICAgIGlmICgocHJvZ3JhbU5lZWRzSW5wdXRUZXh0dXJlKCkgJiYgKGZpbHRl
ckRyYXdUeXBlID09IE5FRURTX0lOUFVUX1RFWFRVUkUpICYmICFlbnN1cmVJbnB1dFRleHR1cmUo
KSkKLSAgICAgICAgfHwgIWVuc3VyZUZyYW1lQnVmZmVyKCkpCisgICAgaWYgKChtX2N1c3RvbUZp
bHRlclJlbmRlcmVyLT5wcm9ncmFtTmVlZHNJbnB1dFRleHR1cmUoKSAmJiAhZW5zdXJlSW5wdXRU
ZXh0dXJlKCkpIHx8ICFlbnN1cmVGcmFtZUJ1ZmZlcigpKQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19CiAKLWJvb2wgRkVDdXN0b21GaWx0ZXI6OnByb2dy
YW1OZWVkc0lucHV0VGV4dHVyZSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fY29tcGlsZWRQcm9n
cmFtLmdldCgpKTsKLSAgICByZXR1cm4gbV9jb21waWxlZFByb2dyYW0tPnNhbXBsZXJMb2NhdGlv
bigpICE9IC0xOworICAgIHJldHVybiB0cnVlOwogfQogCiBib29sIEZFQ3VzdG9tRmlsdGVyOjph
cHBseVNoYWRlcigpCiB7Ci0gICAgVWludDhDbGFtcGVkQXJyYXkqIGRzdFBpeGVsQXJyYXkgPSBt
X3ZhbGlkYXRlZFByb2dyYW0tPnByb2dyYW1JbmZvKCkucHJvZ3JhbVR5cGUoKSA9PSBQUk9HUkFN
X1RZUEVfQkxFTkRTX0VMRU1FTlRfVEVYVFVSRSA/IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJl
c3VsdCgpIDogY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyAgICBVaW50OENsYW1w
ZWRBcnJheSogZHN0UGl4ZWxBcnJheSA9IG1fY3VzdG9tRmlsdGVyUmVuZGVyZXItPnByZW11bHRp
cGxpZWRBbHBoYSgpID8gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkgOiBjcmVhdGVV
bm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwogICAgIGlmICghZHN0UGl4ZWxBcnJheSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yMzgsNyArMTgxLDcgQEAgYm9vbCBGRUN1c3RvbUZpbHRl
cjo6YXBwbHlTaGFkZXIoKQogICAgIGlmICghcmVzaXplQ29udGV4dElmTmVlZGVkKG5ld0NvbnRl
eHRTaXplKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgYm9vbCBuZWVkc0lucHV0VGV4
dHVyZSA9IHByb2dyYW1OZWVkc0lucHV0VGV4dHVyZSgpOworICAgIGJvb2wgbmVlZHNJbnB1dFRl
eHR1cmUgPSBtX2N1c3RvbUZpbHRlclJlbmRlcmVyLT5wcm9ncmFtTmVlZHNJbnB1dFRleHR1cmUo
KTsKICAgICBpZiAobmVlZHNJbnB1dFRleHR1cmUpIHsKICAgICAgICAgUmVmUHRyPFVpbnQ4Q2xh
bXBlZEFycmF5PiBzcmNQaXhlbEFycmF5ID0gaW4tPmFzVW5tdWx0aXBsaWVkSW1hZ2UoZWZmZWN0
RHJhd2luZ1JlY3QpOwogICAgICAgICB1cGxvYWRJbnB1dFRleHR1cmUoc3JjUGl4ZWxBcnJheS5n
ZXQoKSk7CkBAIC0yNTEsMjUgKzE5NCw2IEBAIGJvb2wgRkVDdXN0b21GaWx0ZXI6OmFwcGx5U2hh
ZGVyKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBGRUN1c3RvbUZpbHRlcjo6aW5pdGlh
bGl6ZUNvbnRleHQoKQotewotICAgIEFTU0VSVCghbV9jb250ZXh0LmdldCgpKTsKLSAgICBtX2Nv
bnRleHQgPSBtX2dsb2JhbENvbnRleHQtPmNvbnRleHQoKTsKLSAgICBpZiAoIW1fY29udGV4dCkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgbV9jb21waWxlZFByb2dyYW0gPSBtX3ZhbGlkYXRlZFByb2dyYW0tPmNvbXBpbGVk
UHJvZ3JhbSgpOwotCi0gICAgLy8gRklYTUU6IFNoYXJpbmcgdGhlIG1lc2ggd291bGQganVzdCBz
YXZlIHRoZSB0aW1lIG5lZWRlZCB0byB1cGxvYWQgaXQgdG8gdGhlIEdQVSwgc28gSSBhc3N1bWUg
d2UgY291bGQKLSAgICAvLyBiZW5jaG1hcmsgdGhhdCBmb3IgcGVyZm9ybWFuY2UuCi0gICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg4NDI5Ci0gICAgbV9tZXNo
ID0gQ3VzdG9tRmlsdGVyTWVzaDo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSwgbV9tZXNoQ29sdW1u
cywgbV9tZXNoUm93cywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZs
b2F0UmVjdCgwLCAwLCAxLCAxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9tZXNoVHlwZSk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQogYm9vbCBGRUN1c3RvbUZp
bHRlcjo6ZW5zdXJlSW5wdXRUZXh0dXJlKCkKIHsKICAgICBpZiAoIW1faW5wdXRUZXh0dXJlKQpA
QCAtMzMyLDcgKzI1Niw3IEBAIHZvaWQgRkVDdXN0b21GaWx0ZXI6OnJlc29sdmVNdWx0aXNhbXBs
ZUJ1ZmZlcigpCiAKICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihFeHRlbnNpb25zM0Q6
OlJFQURfRlJBTUVCVUZGRVIsIDApOwogICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEV4
dGVuc2lvbnMzRDo6RFJBV19GUkFNRUJVRkZFUiwgMCk7Ci0gICAgCisKICAgICBtX2NvbnRleHQt
PmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fZnJhbWVC
dWZmZXIpOwogfQogCkBAIC0zNDQsMTEgKzI2OCwxMiBAQCBib29sIEZFQ3VzdG9tRmlsdGVyOjpj
YW5Vc2VNdWx0aXNhbXBsZUJ1ZmZlcnMoKSBjb25zdAogYm9vbCBGRUN1c3RvbUZpbHRlcjo6cmVz
aXplTXVsdGlzYW1wbGVCdWZmZXJzKGNvbnN0IEludFNpemUmIG5ld0NvbnRleHRTaXplKQogewog
ICAgIGlmICghbV90cmllZE11bHRpc2FtcGxlQnVmZmVyICYmICFjcmVhdGVNdWx0aXNhbXBsZUJ1
ZmZlcigpKQotICAgICAgICAgcmV0dXJuIGZhbHNlOwotIAorICAgICAgICByZXR1cm4gZmFsc2U7
CisKICAgICBpZiAoIWNhblVzZU11bHRpc2FtcGxlQnVmZmVycygpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKKyAgICBzdGF0aWMgY29uc3QgaW50IGtNYXhTYW1wbGVDb3VudCA9IDQ7CiAgICAg
aW50IG1heFN1cHBvcnRlZFNhbXBsZUNvdW50ID0gMDsKICAgICBtX2NvbnRleHQtPmdldEludGVn
ZXJ2KEV4dGVuc2lvbnMzRDo6TUFYX1NBTVBMRVMsICZtYXhTdXBwb3J0ZWRTYW1wbGVDb3VudCk7
CiAgICAgaW50IHNhbXBsZUNvdW50ID0gc3RkOjptaW4oa01heFNhbXBsZUNvdW50LCBtYXhTdXBw
b3J0ZWRTYW1wbGVDb3VudCk7CkBAIC0zNTksNyArMjg0LDcgQEAgYm9vbCBGRUN1c3RvbUZpbHRl
cjo6cmVzaXplTXVsdGlzYW1wbGVCdWZmZXJzKGNvbnN0IEludFNpemUmIG5ld0NvbnRleHRTaXpl
KQogCiAgICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gbV9jb250ZXh0LT5nZXRFeHRlbnNp
b25zKCk7CiAgICAgQVNTRVJUKGV4dGVuc2lvbnMpOwotICAgIAorCiAgICAgbV9jb250ZXh0LT5i
aW5kRnJhbWVidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX211bHRpc2Ft
cGxlRnJhbWVCdWZmZXIpOwogCiAgICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpSRU5ERVJCVUZGRVIsIG1fbXVsdGlzYW1wbGVSZW5kZXJCdWZmZXIpOwpA
QCAtNDA5LDcgKzMzNCw3IEBAIGJvb2wgRkVDdXN0b21GaWx0ZXI6OnJlc2l6ZUNvbnRleHQoY29u
c3QgSW50U2l6ZSYgbmV3Q29udGV4dFNpemUpCiAgICAgbV9jb250ZXh0LT50ZXhJbWFnZTJERGly
ZWN0KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwLCBHcmFwaGljc0NvbnRleHQzRDo6
UkdCQSwgbmV3Q29udGV4dFNpemUud2lkdGgoKSwgbmV3Q29udGV4dFNpemUuaGVpZ2h0KCksIDAs
IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfQllU
RSwgMCk7CiAjZW5kaWYKICAgICBtX2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0FUVEFD
SE1FTlQwLCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgbV9kZXN0VGV4dHVyZSwgMCk7
Ci0gCisKICAgICAvLyBXZSBkb24ndCBuZWVkIHRoZSBkZXB0aCBidWZmZXIgZm9yIHRoZSB0ZXh0
dXJlIGZyYW1lYnVmZmVyLCBpZiB3ZSBhbHJlYWR5CiAgICAgLy8gaGF2ZSBhIG11bHRpc2FtcGxl
IGJ1ZmZlci4KICAgICBpZiAoIW11bHRpc2FtcGxlKSB7CkBAIC00MjgsMTcxICszNTMsMTEgQEAg
Ym9vbCBGRUN1c3RvbUZpbHRlcjo6cmVzaXplQ29udGV4dChjb25zdCBJbnRTaXplJiBuZXdDb250
ZXh0U2l6ZSkKICAgICB9CiAKICAgICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OlJFTkRFUkJVRkZFUiwgMCk7Ci0gICAgCisKICAgICBtX2NvbnRleHRTaXpl
ID0gbmV3Q29udGV4dFNpemU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRkVDdXN0b21G
aWx0ZXI6OmJpbmRWZXJ0ZXhBdHRyaWJ1dGUoaW50IGF0dHJpYnV0ZUxvY2F0aW9uLCB1bnNpZ25l
ZCBzaXplLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0gICAgaWYgKGF0dHJpYnV0ZUxvY2F0aW9uICE9
IC0xKSB7Ci0gICAgICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihhdHRyaWJ1dGVM
b2NhdGlvbiwgc2l6ZSwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgbV9tZXNoLT5i
eXRlc1BlclZlcnRleCgpLCBvZmZzZXQpOwotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRl
eEF0dHJpYkFycmF5KGF0dHJpYnV0ZUxvY2F0aW9uKTsKLSAgICB9Ci19Ci0KLXZvaWQgRkVDdXN0
b21GaWx0ZXI6OnVuYmluZFZlcnRleEF0dHJpYnV0ZShpbnQgYXR0cmlidXRlTG9jYXRpb24pCi17
Ci0gICAgaWYgKGF0dHJpYnV0ZUxvY2F0aW9uICE9IC0xKQotICAgICAgICBtX2NvbnRleHQtPmRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShhdHRyaWJ1dGVMb2NhdGlvbik7Ci19Ci0KLXZvaWQgRkVD
dXN0b21GaWx0ZXI6OmJpbmRQcm9ncmFtQXJyYXlQYXJhbWV0ZXJzKGludCB1bmlmb3JtTG9jYXRp
b24sIEN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyKiBhcnJheVBhcmFtZXRlcikKLXsKLSAgICB1
bnNpZ25lZCBwYXJhbWV0ZXJTaXplID0gYXJyYXlQYXJhbWV0ZXItPnNpemUoKTsKLSAgICBWZWN0
b3I8R0MzRGZsb2F0PiBmbG9hdFZlY3RvcjsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBwYXJhbWV0ZXJTaXplOyArK2kpCi0gICAgICAgIGZsb2F0VmVjdG9yLmFwcGVuZChhcnJheVBh
cmFtZXRlci0+dmFsdWVBdChpKSk7Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xZnYodW5pZm9y
bUxvY2F0aW9uLCBwYXJhbWV0ZXJTaXplLCBmbG9hdFZlY3Rvci5kYXRhKCkpOwotfQotCi12b2lk
IEZFQ3VzdG9tRmlsdGVyOjpiaW5kUHJvZ3JhbU51bWJlclBhcmFtZXRlcnMoaW50IHVuaWZvcm1M
b2NhdGlvbiwgQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyKiBudW1iZXJQYXJhbWV0ZXIpCi17
Ci0gICAgc3dpdGNoIChudW1iZXJQYXJhbWV0ZXItPnNpemUoKSkgewotICAgIGNhc2UgMToKLSAg
ICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWYodW5pZm9ybUxvY2F0aW9uLCBudW1iZXJQYXJhbWV0
ZXItPnZhbHVlQXQoMCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDI6Ci0gICAgICAgIG1f
Y29udGV4dC0+dW5pZm9ybTJmKHVuaWZvcm1Mb2NhdGlvbiwgbnVtYmVyUGFyYW1ldGVyLT52YWx1
ZUF0KDApLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMSkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIDM6Ci0gICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTNmKHVuaWZvcm1Mb2NhdGlvbiwg
bnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDApLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMSks
IG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgyKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
NDoKLSAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtNGYodW5pZm9ybUxvY2F0aW9uLCBudW1iZXJQ
YXJhbWV0ZXItPnZhbHVlQXQoMCksIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgxKSwgbnVtYmVy
UGFyYW1ldGVyLT52YWx1ZUF0KDIpLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMykpOwotICAg
ICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICB9Ci19Ci0KLXZvaWQgRkVDdXN0b21GaWx0ZXI6OmJpbmRQcm9ncmFtVHJhbnNmb3JtUGFy
YW1ldGVyKGludCB1bmlmb3JtTG9jYXRpb24sIEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRl
ciogdHJhbnNmb3JtUGFyYW1ldGVyKQotewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IG1hdHJp
eDsKLSAgICBpZiAobV9jb250ZXh0U2l6ZS53aWR0aCgpICYmIG1fY29udGV4dFNpemUuaGVpZ2h0
KCkpIHsKLSAgICAgICAgLy8gVGhlIHZpZXdwb3J0IGlzIGEgYm94IHdpdGggdGhlIHNpemUgb2Yg
MSB1bml0LCBzbyB3ZSBhcmUgc2NhbGxpbmcgdXAgaGVyZSB0byBtYWtlIHN1cmUgdGhhdCB0cmFu
c2xhdGlvbnMgaGFwcGVuIHVzaW5nIHJlYWwgcGl4ZWwKLSAgICAgICAgLy8gdW5pdHMuIEF0IHRo
ZSBlbmQgd2Ugc2NhbGUgYmFjayBkb3duIGluIG9yZGVyIHRvIG1hcCBpdCBiYWNrIHRvIHRoZSBv
cmlnaW5hbCBib3guIE5vdGUgdGhhdCB0cmFuc2Zvcm1zIGNvbWUgaW4gcmV2ZXJzZSBvcmRlciwg
YmVjYXVzZSBpdCBpcyAKLSAgICAgICAgLy8gc3VwcG9zZWQgdG8gbXVsdGlwbHkgdG8gdGhlIGxl
ZnQgb2YgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB2ZXJ0aWNlcy4KLSAgICAgICAgLy8gTm90ZSB0
aGF0IHRoZSBvcmlnaW4gKDAsIDApIG9mIHRoZSB2aWV3cG9ydCBpcyBpbiB0aGUgbWlkZGxlIG9m
IHRoZSBjb250ZXh0LCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gY2hhbmdlIHRoZSBvcmlnaW4gb2Yg
dGhlIHRyYW5zZm9ybQotICAgICAgICAvLyBpbiBvcmRlciB0byByb3RhdGUgYXJvdW5kIHRoZSBt
aWRkbGUgb2YgbWVzaC4KLSAgICAgICAgbWF0cml4LnNjYWxlM2QoMS4wIC8gbV9jb250ZXh0U2l6
ZS53aWR0aCgpLCAxLjAgLyBtX2NvbnRleHRTaXplLmhlaWdodCgpLCAxKTsKLSAgICAgICAgdHJh
bnNmb3JtUGFyYW1ldGVyLT5hcHBseVRyYW5zZm9ybShtYXRyaXgsIG1fY29udGV4dFNpemUpOwot
ICAgICAgICBtYXRyaXguc2NhbGUzZChtX2NvbnRleHRTaXplLndpZHRoKCksIG1fY29udGV4dFNp
emUuaGVpZ2h0KCksIDEpOwotICAgIH0KLSAgICBmbG9hdCBnbE1hdHJpeFsxNl07Ci0gICAgbWF0
cml4LnRvQ29sdW1uTWFqb3JGbG9hdEFycmF5KGdsTWF0cml4KTsKLSAgICBtX2NvbnRleHQtPnVu
aWZvcm1NYXRyaXg0ZnYodW5pZm9ybUxvY2F0aW9uLCAxLCBmYWxzZSwgJmdsTWF0cml4WzBdKTsK
LX0KLQotdm9pZCBGRUN1c3RvbUZpbHRlcjo6YmluZFByb2dyYW1QYXJhbWV0ZXJzKCkKLXsKLSAg
ICAvLyBGSVhNRTogRmluZCBhIHdheSB0byByZXNldCB1bmlmb3JtcyB0aGF0IGFyZSBub3Qgc3Bl
Y2lmaWVkIGluIENTUy4gVGhpcyBpcyBuZWVkZWQgdG8gYXZvaWQgdXNpbmcgdmFsdWVzCi0gICAg
Ly8gc2V0IGJ5IG90aGVyIHByZXZpb3VzIHJlbmRlcmVkIGZpbHRlcnMuCi0gICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NDQwCi0gICAgCi0gICAgc2l6ZV90
IHBhcmFtZXRlcnNTaXplID0gbV9wYXJhbWV0ZXJzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHBhcmFtZXRlcnNTaXplOyArK2kpIHsKLSAgICAgICAgQ3VzdG9tRmlsdGVyUGFy
YW1ldGVyKiBwYXJhbWV0ZXIgPSBtX3BhcmFtZXRlcnMuYXQoaSkuZ2V0KCk7Ci0gICAgICAgIGlu
dCB1bmlmb3JtTG9jYXRpb24gPSBtX2NvbXBpbGVkUHJvZ3JhbS0+dW5pZm9ybUxvY2F0aW9uQnlO
YW1lKHBhcmFtZXRlci0+bmFtZSgpKTsKLSAgICAgICAgaWYgKHVuaWZvcm1Mb2NhdGlvbiA9PSAt
MSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBzd2l0Y2ggKHBhcmFtZXRlci0+cGFy
YW1ldGVyVHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyOjpBUlJB
WToKLSAgICAgICAgICAgIGJpbmRQcm9ncmFtQXJyYXlQYXJhbWV0ZXJzKHVuaWZvcm1Mb2NhdGlv
biwgc3RhdGljX2Nhc3Q8Q3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXIqPihwYXJhbWV0ZXIpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEN1c3RvbUZpbHRlclBhcmFtZXRlcjo6
TlVNQkVSOgotICAgICAgICAgICAgYmluZFByb2dyYW1OdW1iZXJQYXJhbWV0ZXJzKHVuaWZvcm1M
b2NhdGlvbiwgc3RhdGljX2Nhc3Q8Q3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyKj4ocGFyYW1l
dGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDdXN0b21GaWx0ZXJQYXJh
bWV0ZXI6OlRSQU5TRk9STToKLSAgICAgICAgICAgIGJpbmRQcm9ncmFtVHJhbnNmb3JtUGFyYW1l
dGVyKHVuaWZvcm1Mb2NhdGlvbiwgc3RhdGljX2Nhc3Q8Q3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFy
YW1ldGVyKj4ocGFyYW1ldGVyKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAg
IH0KLX0KLQotdm9pZCBGRUN1c3RvbUZpbHRlcjo6YmluZFByb2dyYW1BbmRCdWZmZXJzKFBsYXRm
b3JtM0RPYmplY3QgaW5wdXRUZXh0dXJlKQotewotICAgIEFTU0VSVChtX2NvbXBpbGVkUHJvZ3Jh
bS0+aXNJbml0aWFsaXplZCgpKTsKLQotICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShtX2NvbXBp
bGVkUHJvZ3JhbS0+cHJvZ3JhbSgpKTsKLSAgICAKLSAgICBpZiAocHJvZ3JhbU5lZWRzSW5wdXRU
ZXh0dXJlKCkpIHsKLSAgICAgICAgLy8gV2Ugc2hvdWxkIGJlIGJpbmRpbmcgdGhlIERPTSBlbGVt
ZW50IHRleHR1cmUgc2FtcGxlciBvbmx5IGlmIHRoZSBhdXRob3IgaXMgdXNpbmcgdGhlIENTUyBt
aXggZnVuY3Rpb24uCi0gICAgICAgIEFTU0VSVChtX3ZhbGlkYXRlZFByb2dyYW0tPnByb2dyYW1J
bmZvKCkucHJvZ3JhbVR5cGUoKSA9PSBQUk9HUkFNX1RZUEVfQkxFTkRTX0VMRU1FTlRfVEVYVFVS
RSk7Ci0gICAgICAgIEFTU0VSVChtX2NvbXBpbGVkUHJvZ3JhbS0+c2FtcGxlckxvY2F0aW9uKCkg
IT0gLTEpOwotCi0gICAgICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRTApOwotICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xaShtX2NvbXBpbGVk
UHJvZ3JhbS0+c2FtcGxlckxvY2F0aW9uKCksIDApOwotICAgICAgICBtX2NvbnRleHQtPmJpbmRU
ZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBpbnB1dFRleHR1cmUpOwotICAg
ICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4
dDNEOjpMSU5FQVIpOwotICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxU
RVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgICAgICBtX2NvbnRleHQtPnRleFBh
cmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAg
ICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVf
MkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0M0Q6
OkNMQU1QX1RPX0VER0UpOwotICAgIH0KLSAgICAKLSAgICBpZiAobV9jb21waWxlZFByb2dyYW0t
PnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpICE9IC0xKSB7Ci0gICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IHByb2plY3Rpb25NYXRyaXg7IAotICAgICAgICBvcnRob2dvbmFsUHJvamVjdGlv
bk1hdHJpeChwcm9qZWN0aW9uTWF0cml4LCAtMC41LCAwLjUsIC0wLjUsIDAuNSk7Ci0gICAgICAg
IGZsb2F0IGdsUHJvamVjdGlvbk1hdHJpeFsxNl07Ci0gICAgICAgIHByb2plY3Rpb25NYXRyaXgu
dG9Db2x1bW5NYWpvckZsb2F0QXJyYXkoZ2xQcm9qZWN0aW9uTWF0cml4KTsKLSAgICAgICAgbV9j
b250ZXh0LT51bmlmb3JtTWF0cml4NGZ2KG1fY29tcGlsZWRQcm9ncmFtLT5wcm9qZWN0aW9uTWF0
cml4TG9jYXRpb24oKSwgMSwgZmFsc2UsICZnbFByb2plY3Rpb25NYXRyaXhbMF0pOwotICAgIH0K
LQotICAgIEFTU0VSVChtX21lc2hDb2x1bW5zKTsKLSAgICBBU1NFUlQobV9tZXNoUm93cyk7Ci0K
LSAgICBpZiAobV9jb21waWxlZFByb2dyYW0tPm1lc2hTaXplTG9jYXRpb24oKSAhPSAtMSkKLSAg
ICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmYobV9jb21waWxlZFByb2dyYW0tPm1lc2hTaXplTG9j
YXRpb24oKSwgbV9tZXNoQ29sdW1ucywgbV9tZXNoUm93cyk7Ci0KLSAgICBpZiAobV9jb21waWxl
ZFByb2dyYW0tPnRpbGVTaXplTG9jYXRpb24oKSAhPSAtMSkKLSAgICAgICAgbV9jb250ZXh0LT51
bmlmb3JtMmYobV9jb21waWxlZFByb2dyYW0tPnRpbGVTaXplTG9jYXRpb24oKSwgMS4wIC8gbV9t
ZXNoQ29sdW1ucywgMS4wIC8gbV9tZXNoUm93cyk7Ci0KLSAgICBpZiAobV9jb21waWxlZFByb2dy
YW0tPm1lc2hCb3hMb2NhdGlvbigpICE9IC0xKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBUaGlzIHdp
bGwgY2hhbmdlIHdoZW4gZmlsdGVyIG1hcmdpbnMgd2lsbCBiZSBpbXBsZW1lbnRlZCwKLSAgICAg
ICAgLy8gc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTQwMAot
ICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm00ZihtX2NvbXBpbGVkUHJvZ3JhbS0+bWVzaEJveExv
Y2F0aW9uKCksIC0wLjUsIC0wLjUsIDEuMCwgMS4wKTsKLSAgICB9Ci0KLSAgICBpZiAobV9jb21w
aWxlZFByb2dyYW0tPnNhbXBsZXJTaXplTG9jYXRpb24oKSAhPSAtMSkKLSAgICAgICAgbV9jb250
ZXh0LT51bmlmb3JtMmYobV9jb21waWxlZFByb2dyYW0tPnNhbXBsZXJTaXplTG9jYXRpb24oKSwg
bV9jb250ZXh0U2l6ZS53aWR0aCgpLCBtX2NvbnRleHRTaXplLmhlaWdodCgpKTsKLSAgICAKLSAg
ICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwg
bV9tZXNoLT52ZXJ0aWNlc0J1ZmZlck9iamVjdCgpKTsKLSAgICBtX2NvbnRleHQtPmJpbmRCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtX21lc2gtPmVsZW1l
bnRzQnVmZmVyT2JqZWN0KCkpOwotCi0gICAgYmluZFZlcnRleEF0dHJpYnV0ZShtX2NvbXBpbGVk
UHJvZ3JhbS0+cG9zaXRpb25BdHRyaWJMb2NhdGlvbigpLCBQb3NpdGlvbkF0dHJpYlNpemUsIFBv
c2l0aW9uQXR0cmliT2Zmc2V0KTsKLSAgICBiaW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQ
cm9ncmFtLT50ZXhBdHRyaWJMb2NhdGlvbigpLCBUZXhBdHRyaWJTaXplLCBUZXhBdHRyaWJPZmZz
ZXQpOwotICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoZSBpbnRlcm5hbCB0ZXggY29vcmQgYXR0
cmlidXRlICJjc3NfYV90ZXhDb29yZCIuIAotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD05NDM1OAotICAgIGJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxl
ZFByb2dyYW0tPmludGVybmFsVGV4Q29vcmRBdHRyaWJMb2NhdGlvbigpLCBUZXhBdHRyaWJTaXpl
LCBUZXhBdHRyaWJPZmZzZXQpOwotICAgIGJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFBy
b2dyYW0tPm1lc2hBdHRyaWJMb2NhdGlvbigpLCBNZXNoQXR0cmliU2l6ZSwgTWVzaEF0dHJpYk9m
ZnNldCk7Ci0gICAgaWYgKG1fbWVzaFR5cGUgPT0gQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpERVRB
Q0hFRCkKLSAgICAgICAgYmluZFZlcnRleEF0dHJpYnV0ZShtX2NvbXBpbGVkUHJvZ3JhbS0+dHJp
YW5nbGVBdHRyaWJMb2NhdGlvbigpLCBUcmlhbmdsZUF0dHJpYlNpemUsIFRyaWFuZ2xlQXR0cmli
T2Zmc2V0KTsKLSAgICAKLSAgICBiaW5kUHJvZ3JhbVBhcmFtZXRlcnMoKTsKLX0KLQotdm9pZCBG
RUN1c3RvbUZpbHRlcjo6dW5iaW5kVmVydGV4QXR0cmlidXRlcygpCi17Ci0gICAgdW5iaW5kVmVy
dGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFtLT5wb3NpdGlvbkF0dHJpYkxvY2F0aW9uKCkp
OwotICAgIHVuYmluZFZlcnRleEF0dHJpYnV0ZShtX2NvbXBpbGVkUHJvZ3JhbS0+dGV4QXR0cmli
TG9jYXRpb24oKSk7Ci0gICAgdW5iaW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFt
LT5pbnRlcm5hbFRleENvb3JkQXR0cmliTG9jYXRpb24oKSk7Ci0gICAgdW5iaW5kVmVydGV4QXR0
cmlidXRlKG1fY29tcGlsZWRQcm9ncmFtLT5tZXNoQXR0cmliTG9jYXRpb24oKSk7Ci0gICAgaWYg
KG1fbWVzaFR5cGUgPT0gQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpERVRBQ0hFRCkKLSAgICAgICAg
dW5iaW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFtLT50cmlhbmdsZUF0dHJpYkxv
Y2F0aW9uKCkpOwotfQotCiB2b2lkIEZFQ3VzdG9tRmlsdGVyOjpkdW1wKCkKIHsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21G
aWx0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0
b21GaWx0ZXIuaAppbmRleCAwOWRhNWYxYzdmNzQ2NjgwOWU5M2E4Yjg4NGZkMmExZDU2YjhlMWI0
Li5iN2Y5ODEzMGFlZGE5ZTg1NmEzNzNlN2IwOGFkYTEwMjMzNDFhOTEwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZp
bHRlci5oCkBAIC00NCwyMyArNDQsMTYgQEAgY2xhc3MgVWludDhDbGFtcGVkQXJyYXk7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ2FjaGVkU2hhZGVyOwotY2xhc3MgQ3VzdG9tRmls
dGVyQXJyYXlQYXJhbWV0ZXI7Ci1jbGFzcyBDdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW07Ci1j
bGFzcyBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0OwotY2xhc3MgQ3VzdG9tRmlsdGVyTWVzaDsK
LWNsYXNzIEN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlcjsKLWNsYXNzIEN1c3RvbUZpbHRlclRy
YW5zZm9ybVBhcmFtZXRlcjsKK2NsYXNzIEN1c3RvbUZpbHRlclJlbmRlcmVyOwogY2xhc3MgQ3Vz
dG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbTsKLWNsYXNzIERyYXdpbmdCdWZmZXI7CiBjbGFzcyBH
cmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIEludFNpemU7CiAKIGNsYXNzIEZFQ3VzdG9tRmlsdGVy
IDogcHVibGljIEZpbHRlckVmZmVjdCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
RkVDdXN0b21GaWx0ZXI+IGNyZWF0ZShGaWx0ZXIqLCBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0
KiwgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiwgY29uc3QgQ3VzdG9t
RmlsdGVyUGFyYW1ldGVyTGlzdCYsCi0gICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbWVzaFJv
d3MsIHVuc2lnbmVkIG1lc2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hCb3hU
eXBlLCAKLSAgICAgICAgICAgICAgICAgICBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hUeXBl
KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUN1c3RvbUZpbHRlcj4gY3JlYXRlKEZpbHRlcios
IFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclZh
bGlkYXRlZFByb2dyYW0+LCBjb25zdCBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mbyYsIGNvbnN0IEN1
c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmLAorICAgICAgICB1bnNpZ25lZCBtZXNoUm93cywgdW5z
aWduZWQgbWVzaENvbHVtbnMsIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaEJveFR5cGUsCisg
ICAgICAgIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaFR5cGUpOwogCiAgICAgdmlydHVhbCB2
b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CkBA
IC02OCwyMyArNjEsMTggQEAgcHVibGljOgogICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJu
YWxSZXByZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7CiAKIHBy
aXZhdGU6Ci0gICAgRkVDdXN0b21GaWx0ZXIoRmlsdGVyKiwgQ3VzdG9tRmlsdGVyR2xvYmFsQ29u
dGV4dCosIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4sIGNvbnN0IEN1
c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmLAotICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1l
c2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNo
Qm94VHlwZSwgCi0gICAgICAgICAgICAgICAgICAgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNo
VHlwZSk7CisgICAgRkVDdXN0b21GaWx0ZXIoRmlsdGVyKiwgUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4sIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4sIGNvbnN0
IEN1c3RvbUZpbHRlclByb2dyYW1JbmZvJiwgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlz
dCYsCisgICAgICAgIHVuc2lnbmVkIG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoQm94VHlwZSwKKyAgICAgICAgQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uOjpNZXNoVHlwZSk7CiAgICAgfkZFQ3VzdG9tRmlsdGVyKCk7Ci0gICAgCisKICAgICBi
b29sIGFwcGx5U2hhZGVyKCk7CiAgICAgdm9pZCBjbGVhclNoYWRlclJlc3VsdCgpOwogICAgIGJv
b2wgaW5pdGlhbGl6ZUNvbnRleHQoKTsKLSAgICAKLSAgICBlbnVtIEN1c3RvbUZpbHRlckRyYXdU
eXBlIHsKLSAgICAgICAgTkVFRFNfSU5QVVRfVEVYVFVSRSwKLSAgICAgICAgTk9fSU5QVVRfVEVY
VFVSRQotICAgIH07Ci0gICAgYm9vbCBwcmVwYXJlRm9yRHJhd2luZyhDdXN0b21GaWx0ZXJEcmF3
VHlwZSA9IE5FRURTX0lOUFVUX1RFWFRVUkUpOworCisgICAgYm9vbCBwcmVwYXJlRm9yRHJhd2lu
ZygpOwogCiAgICAgdm9pZCBkcmF3RmlsdGVyTWVzaChQbGF0Zm9ybTNET2JqZWN0IGlucHV0VGV4
dHVyZSk7Ci0gICAgYm9vbCBwcm9ncmFtTmVlZHNJbnB1dFRleHR1cmUoKSBjb25zdDsKICAgICBi
b29sIGVuc3VyZUlucHV0VGV4dHVyZSgpOwogICAgIHZvaWQgdXBsb2FkSW5wdXRUZXh0dXJlKFVp
bnQ4Q2xhbXBlZEFycmF5KiBzcmNQaXhlbEFycmF5KTsKICAgICBib29sIHJlc2l6ZUNvbnRleHRJ
Zk5lZWRlZChjb25zdCBJbnRTaXplJik7CkBAIC05OSwyMiArODcsOCBAQCBwcml2YXRlOgogICAg
IGJvb2wgZW5zdXJlRnJhbWVCdWZmZXIoKTsKICAgICB2b2lkIGRlbGV0ZVJlbmRlckJ1ZmZlcnMo
KTsKIAotICAgIHZvaWQgYmluZFZlcnRleEF0dHJpYnV0ZShpbnQgYXR0cmlidXRlTG9jYXRpb24s
IHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIG9mZnNldCk7Ci0gICAgdm9pZCB1bmJpbmRWZXJ0ZXhB
dHRyaWJ1dGUoaW50IGF0dHJpYnV0ZUxvY2F0aW9uKTsKLSAgICB2b2lkIGJpbmRQcm9ncmFtQXJy
YXlQYXJhbWV0ZXJzKGludCB1bmlmb3JtTG9jYXRpb24sIEN1c3RvbUZpbHRlckFycmF5UGFyYW1l
dGVyKik7Ci0gICAgdm9pZCBiaW5kUHJvZ3JhbU51bWJlclBhcmFtZXRlcnMoaW50IHVuaWZvcm1M
b2NhdGlvbiwgQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVyKik7Ci0gICAgdm9pZCBiaW5kUHJv
Z3JhbVRyYW5zZm9ybVBhcmFtZXRlcihpbnQgdW5pZm9ybUxvY2F0aW9uLCBDdXN0b21GaWx0ZXJU
cmFuc2Zvcm1QYXJhbWV0ZXIqKTsKLSAgICB2b2lkIGJpbmRQcm9ncmFtUGFyYW1ldGVycygpOwot
ICAgIHZvaWQgYmluZFByb2dyYW1BbmRCdWZmZXJzKFBsYXRmb3JtM0RPYmplY3QgaW5wdXRUZXh0
dXJlKTsKLSAgICB2b2lkIHVuYmluZFZlcnRleEF0dHJpYnV0ZXMoKTsKLSAgICAKLSAgICAvLyBO
byBuZWVkIHRvIGtlZXAgYSByZWZlcmVuY2UgaGVyZS4gSXQgaXMgb3duZWQgYnkgdGhlIFJlbmRl
clZpZXcuCi0gICAgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCogbV9nbG9iYWxDb250ZXh0Owot
ICAgIAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwotICAgIFJlZlB0
cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiBtX3ZhbGlkYXRlZFByb2dyYW07Ci0gICAg
UmVmUHRyPEN1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbT4gbV9jb21waWxlZFByb2dyYW07Ci0g
ICAgUmVmUHRyPEN1c3RvbUZpbHRlck1lc2g+IG1fbWVzaDsKKyAgICBSZWZQdHI8Q3VzdG9tRmls
dGVyUmVuZGVyZXI+IG1fY3VzdG9tRmlsdGVyUmVuZGVyZXI7CiAgICAgSW50U2l6ZSBtX2NvbnRl
eHRTaXplOwogCiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX2lucHV0VGV4dHVyZTsKQEAgLTEyNiwx
MiArMTAwLDYgQEAgcHJpdmF0ZToKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbXVsdGlzYW1wbGVG
cmFtZUJ1ZmZlcjsKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbXVsdGlzYW1wbGVSZW5kZXJCdWZm
ZXI7CiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX211bHRpc2FtcGxlRGVwdGhCdWZmZXI7Ci0KLSAg
ICBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0IG1fcGFyYW1ldGVyczsKLQotICAgIHVuc2lnbmVk
IG1fbWVzaFJvd3M7Ci0gICAgdW5zaWduZWQgbV9tZXNoQ29sdW1uczsKLSAgICBDdXN0b21GaWx0
ZXJPcGVyYXRpb246Ok1lc2hUeXBlIG1fbWVzaFR5cGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0
UmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRl
cmVyLmNwcAppbmRleCBmZDA3ZjRhODhkYjVjMjIxMGRiNzM3YWQxNzM1YWNhMjFjMTMyNTM2Li41
NjU2ZWVkZGMxZWZkMmVjNmViNDU3YjdkYWIyYjJjYTMxOWRmMTljIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKQEAgLTQ0LDggKzQ0
LDggQEAKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykgJiYgVVNFKDNEX0dSQVBISUNTKQogI2lu
Y2x1ZGUgIkN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuaCIKLSNpbmNsdWRlICJDdXN0b21GaWx0
ZXJQcm9ncmFtLmgiCiAjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgiCisjaW5jbHVk
ZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIgogI2luY2x1ZGUgIkN1c3RvbUZpbHRlclZhbGlkYXRl
ZFByb2dyYW0uaCIKICNpbmNsdWRlICJGRUN1c3RvbUZpbHRlci5oIgogI2luY2x1ZGUgIlJlbmRl
clZpZXcuaCIKQEAgLTk2LDIwICs5NiwyMiBAQCBzdGF0aWMgUGFzc1JlZlB0cjxGRUN1c3RvbUZp
bHRlcj4gY3JlYXRlQ3VzdG9tRmlsdGVyRWZmZWN0KEZpbHRlciogZmlsdGVyLCBEb2N1bQogewog
ICAgIGlmICghaXNDU1NDdXN0b21GaWx0ZXJFbmFibGVkKGRvY3VtZW50KSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgCisKICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyUHJvZ3JhbT4gcHJvZ3JhbSA9
IG9wZXJhdGlvbi0+cHJvZ3JhbSgpOwogICAgIGlmICghcHJvZ3JhbS0+aXNMb2FkZWQoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKICAgICBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KiBnbG9iYWxD
b250ZXh0ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKS0+Y3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4
dCgpOwogICAgIGdsb2JhbENvbnRleHQtPnByZXBhcmVDb250ZXh0SWZOZWVkZWQoZG9jdW1lbnQt
PnZpZXcoKS0+aG9zdFdpbmRvdygpKTsKKyAgICBpZiAoIWdsb2JhbENvbnRleHQtPmNvbnRleHQo
KSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVk
UHJvZ3JhbT4gdmFsaWRhdGVkUHJvZ3JhbSA9IGdsb2JhbENvbnRleHQtPmdldFZhbGlkYXRlZFBy
b2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUluZm8oKSk7CiAgICAgaWYgKCF2YWxpZGF0ZWRQcm9ncmFt
LT5pc0luaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIEZFQ3Vz
dG9tRmlsdGVyOjpjcmVhdGUoZmlsdGVyLCBnbG9iYWxDb250ZXh0LCB2YWxpZGF0ZWRQcm9ncmFt
LCBvcGVyYXRpb24tPnBhcmFtZXRlcnMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvcGVyYXRpb24tPm1lc2hSb3dzKCksIG9wZXJhdGlvbi0+bWVzaENvbHVtbnMoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24tPm1lc2hCb3hUeXBlKCks
IG9wZXJhdGlvbi0+bWVzaFR5cGUoKSk7CisgICAgcmV0dXJuIEZFQ3VzdG9tRmlsdGVyOjpjcmVh
dGUoZmlsdGVyLCBnbG9iYWxDb250ZXh0LT5jb250ZXh0KCksIHZhbGlkYXRlZFByb2dyYW0ucmVs
ZWFzZSgpLCBwcm9ncmFtLT5wcm9ncmFtSW5mbygpLCBvcGVyYXRpb24tPnBhcmFtZXRlcnMoKSwK
KyAgICAgICAgb3BlcmF0aW9uLT5tZXNoUm93cygpLCBvcGVyYXRpb24tPm1lc2hDb2x1bW5zKCks
IG9wZXJhdGlvbi0+bWVzaEJveFR5cGUoKSwgb3BlcmF0aW9uLT5tZXNoVHlwZSgpKTsKIH0KICNl
bmRpZgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>170249</attachid>
            <date>2012-10-23 15:28:13 -0700</date>
            <delta_ts>2012-10-30 05:07:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98989-20121024072634.patch</filename>
            <type>text/plain</type>
            <size>57516</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyMjcxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzcwZWIyMzgzZjYyZWU4
NTZiNzU3OGExYjc4OWFjNjhhMmIyYzQ5NS4uOTQzODUyMDY2ZDhjZjYxZWEyMDRhMTY3OTEyMjFl
MTkyY2QxNDg4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEyLTEwLTIzICBIdWFu
ZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIFtDU1MgU2hh
ZGVyc10gQWRkIEN1c3RvbUZpbHRlclJlbmRlcmVyIHRvIHJldXNlIHRoaXMgY2xhc3MgYnkgQWNj
ZWxlcmF0ZWQgQ29tcG9zaXRpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05ODk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEV4dHJhY3QgQ3VzdG9tRmlsdGVyUmVuZGVyZXIgY2xhc3MgZnJvbSB0aGUg
cmVuZGVyaW5nIHBhcnQgb2YgRkVDdXN0b21GaWx0ZXIuCisgICAgICAgIEZFQ3VzdG9tRmlsdGVy
IG5vdyBwbGF5cyBhIHJvbGUgaW4gZXh0ZW5kaW5nIEZpbHRlckVmZmVjdCBhbmQgZGVsZWdhdGVz
CisgICAgICAgIHJlbmRlcmluZyBjc3Mgc2hhZGVycyB0byBDdXN0b21GaWx0ZXJSZW5kZXJlci4K
KworICAgICAgICBDdXN0b21GaWx0ZXJSZW5kZXJlciBkb2VzIG5vdCBrbm93IEZpbHRlciBhbmQg
RmlsdGVyRWZmZWN0LiBXZSBjYW4KKyAgICAgICAgY3JlYXRlIGEgQ3VzdG9tRmlsdGVyUmVuZGVy
ZXIgaW5zdGFuY2Ugd2l0aCBvbmx5IEdyYXBoaWNzQ29udGV4dDNEIGFuZAorICAgICAgICBDdXN0
b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLiBJdCBtZWFucyB0aGF0IEFjY2VsZXJhdGVkIENvbXBv
c2l0aW5nIGNhbgorICAgICAgICBjcmVhdGUgdGhlIEN1c3RvbUZpbHRlclJlbmRlcmVyIGluc3Rh
bmNlIGlmIEFjY2VsZXJhdGVkIENvbXBvc2l0aW5nIGhhcworICAgICAgICBHcmFwaGljc0NvbnRl
eHQzRCBhbmQgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLCBhbmQgaXQgaXMgYWxyZWFkeSBwb3NzaWJs
ZS4KKworICAgICAgICBUaGlzIHBhdGNoIHByZXBhcmVzIHRvIGVuYWJsZSBDU1MgU2hhZGVycyBv
biBBY2NlbGVyYXRlZCBDb21wb3NpdGluZy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIENvdmVy
ZWQgYnkgY3NzMy9maWx0ZXJzL2N1c3RvbQorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAg
ICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpvcnRob2dvbmFs
UHJvamVjdGlvbk1hdHJpeCk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5kZXJl
cjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVyOjpDdXN0
b21GaWx0ZXJSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5kZXJl
cjo6fkN1c3RvbUZpbHRlclJlbmRlcmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRl
clJlbmRlcmVyOjpwcmVtdWx0aXBsaWVkQWxwaGEpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9t
RmlsdGVyUmVuZGVyZXI6OnByb2dyYW1OZWVkc0lucHV0VGV4dHVyZSk6CisgICAgICAgIChXZWJD
b3JlOjpDdXN0b21GaWx0ZXJSZW5kZXJlcjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q3Vz
dG9tRmlsdGVyUmVuZGVyZXI6OnByZXBhcmVGb3JEcmF3aW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OkN1c3RvbUZpbHRlclJlbmRlcmVyOjppbml0aWFsaXplQ29tcGlsZWRQcm9ncmFtSWZOZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUmVuZGVyZXI6OmluaXRpYWxpemVNZXNo
SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUmVuZGVyZXI6OmJpbmRW
ZXJ0ZXhBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUmVuZGVyZXI6
OnVuYmluZFZlcnRleEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJS
ZW5kZXJlcjo6YmluZFByb2dyYW1BcnJheVBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6
Q3VzdG9tRmlsdGVyUmVuZGVyZXI6OmJpbmRQcm9ncmFtTnVtYmVyUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5kZXJlcjo6YmluZFByb2dyYW1UcmFuc2Zvcm1Q
YXJhbWV0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUmVuZGVyZXI6OmJpbmRQ
cm9ncmFtUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5kZXJl
cjo6YmluZFByb2dyYW1BbmRCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRl
clJlbmRlcmVyOjp1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuaC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoQ3VzdG9tRmlsdGVyUmVuZGVyZXIpOgorICAgICAg
ICAgIEN1c3RvbUZpbHRlclJlbmRlcmVyIHJlbmRlcnMgY3VzdG9tIGZpbHRlcnMgaW4gR1BVIHVz
aW5nIGEKKyAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZF
Q3VzdG9tRmlsdGVyOjpGRUN1c3RvbUZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpGRUN1c3Rv
bUZpbHRlcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ3VzdG9tRmlsdGVyOjpkZWxl
dGVSZW5kZXJCdWZmZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ3VzdG9tRmlsdGVyOjpkcmF3
RmlsdGVyTWVzaCk6CisgICAgICAgIChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6cHJlcGFyZUZv
ckRyYXdpbmcpOgorICAgICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OmFwcGx5U2hhZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ3VzdG9tRmlsdGVyOjpyZXNvbHZlTXVsdGlzYW1wbGVC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OnJlc2l6ZU11bHRpc2Ft
cGxlQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6cmVzaXplQ29u
dGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRl
ci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChGRUN1c3RvbUZpbHRlcik6CisgICAg
ICAgICogcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRlcmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZUN1c3RvbUZpbHRlckVmZmVjdCk6CisKIDIwMTItMTAtMjMgIFJvZ2VyIEZvbmcg
IDxyb2dlcl9mb25nQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2luXSBQb3B1cCBtZW51cyBwb3Np
dGlvbmluZyBuZWVkcyB0byB0YWtlIG11bHRpcGxlIG1vbml0b3JzIGludG8gYWNjb3VudC4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKaW5kZXggNDdiMjllNjY0MGM2YWRiMzA1YzY3NWYxYTg2NjEwOWQzZTI3
NTI5MS4uNTFlOGJjMTRhZGFiYzAxOWUxODNjZjc1ZjA3NzM3ZTM1MWU1ZGY3YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKQEAgLTE5MTIsNiArMTkxMiw3IEBAIFNFVChXZWJDb3JlX1NPVVJDRVMKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCA3Yjg1YmE0ZmI0NzAwOTczYTQ5MDRjZTJjMTQwYzQ4ZDE0Yjc4NDk0Li45ZGNlMTYyYTEy
NzBlZDY5ODg3MjhiMDgzOTg0OWNmNTI2MWY3OGIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KQEAgLTQzMzgsNiArNDMzOCw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVy
UHJvZ3JhbUluZm8uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0N1c3RvbUZpbHRlclByb2dyYW1JbmZvLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyQ29t
cGlsZWRQcm9ncmFtLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9DdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW0uaCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIuaCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQppbmRleCBmMmM0ZDZkODUyZjVjZTViNWU5YzVkMzgzNDAyYWEwZWNkYzU5YjJj
Li44ZWNhNmQzN2VmNjJkY2FkYzBmNWU4MDNhNjcwNjVjNWQ3YzI0YTc3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkK
QEAgLTIwNzgsNiArMjA3OCw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUGFyYW1ldGVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW1JbmZvLmggXAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUmVuZGVyZXIuaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9DdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIuaCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmggXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5oIFwKQEAgLTM0ODgsMTMgKzM0ODksMTQg
QEAgZW5hYmxlPyhYU0xUKSB7CiAKIGVuYWJsZT8oRklMVEVSUykgewogICAgIFNPVVJDRVMgKz0g
XAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckNvbXBpbGVk
UHJvZ3JhbS5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZp
bHRlckdsb2JhbENvbnRleHQuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9DdXN0b21GaWx0ZXJNZXNoLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvQ3VzdG9tRmlsdGVyTWVzaEdlbmVyYXRvci5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlck9wZXJhdGlvbi5jcHAgXAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uY3BwIFwKICAgICAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5jcHAgXAotICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3Jh
bS5jcHAgXAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlck1l
c2guY3BwIFwKLSAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJN
ZXNoR2VuZXJhdG9yLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3Vz
dG9tRmlsdGVyUmVuZGVyZXIuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9DdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcCBcCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IGU3ZDRh
Mjc4Mjg0Y2ExOTlkMzBkYjBhZjI4ZDA3NGJkNGQ0OTY3M2MuLjMzYzMzZDQ2MjQ3NzIxM2MxYzFm
YmQ3ZDEwN2FlYjA4OTA0YTM5ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
Z3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTQ5ODEsNiArNDk4MSw4
IEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQ
cm9ncmFtLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9t
RmlsdGVyUHJvZ3JhbUluZm8uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW1JbmZvLmgnLAorICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwJywKKyAgICAgICAgICAg
ICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmgnLAogICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyQ29tcGlsZWRQ
cm9ncmFtLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0
b21GaWx0ZXJDb21waWxlZFByb2dyYW0uaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9DdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmNwcCcsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGRjZTIyMmQwNDE0ODE5
ZTNmYzhkODU3ZDdiZmI0MDE4MTQ3MGZiZjQuLjA5NzdkMzRkNGY1ODg3ZjMwMTdlOTQ4OTZlMzA4
ZGJlMTlmODQ0OWIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCkBAIC0zMTkzNyw2ICszMTkzNywxNCBAQAogCQkJCQkJPgogCQkJCQk8L0ZpbGU+CiAJ
CQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRl
cnNcQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwIgorCQkJCQkJPgorCQkJCQk8L0ZpbGU+CisJCQkJ
CTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGZpbHRlcnNc
Q3VzdG9tRmlsdGVyUmVuZGVyZXIuaCIKKwkJCQkJCT4KKwkJCQkJPC9GaWxlPgorCQkJCQk8Rmls
ZQogCQkJCQkJUmVsYXRpdmVQYXRoPSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEN1c3Rv
bUZpbHRlckNvbXBpbGVkUHJvZ3JhbS5jcHAiCiAJCQkJCQk+CiAJCQkJCTwvRmlsZT4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2
YzE1ODU2NmZhY2M2YjBjYzQ3YzRkM2I1OTQ3NWI1NzMxNGZkYzljLi5hNTk0NTA3ZjA0NDA1MTI2
NjYzNTdkYzM3NGZjNDU1Y2RjNGM3ZGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDkwLDYgKzE0OTAsOCBAQAogCQk1MDNE
MENBQTE0QjVCMDg3MDBGMzJGNTcgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDNEMENBNzE0QjVCMDg3MDBG
MzJGNTcgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAgKi87IH07CiAJCTUwM0QwQ0FCMTRCNUIw
ODcwMEYzMkY1NyAvKiBDdXN0b21GaWx0ZXJQcm9ncmFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDNEMENBODE0QjVCMDg3MDBGMzJGNTcgLyogQ3Vz
dG9tRmlsdGVyUHJvZ3JhbS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07
CiAJCTUwM0QwQ0FDMTRCNUIwODcwMEYzMkY1NyAvKiBDdXN0b21GaWx0ZXJQcm9ncmFtQ2xpZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDNEMENB
OTE0QjVCMDg3MDBGMzJGNTcgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbUNsaWVudC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTUwM0QwQ0FBMTRCNUIw
ODcwMEYzMkY1OCAvKiBDdXN0b21GaWx0ZXJSZW5kZXJlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDNEMENBNzE0QjVCMDg3MDBGMzJGNTggLyog
Q3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwICovOyB9OworCQk1MDNEMENBQjE0QjVCMDg3MDBGMzJG
NTggLyogQ3VzdG9tRmlsdGVyUmVuZGVyZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDUwM0QwQ0E4MTRCNUIwODcwMEYzMkY1OCAvKiBDdXN0b21GaWx0
ZXJSZW5kZXJlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKCk7IH07IH07CiAJCTUw
M0QwQ0FFMTRCNUIwQkEwMEYzMkY1NyAvKiBTdHlsZUN1c3RvbUZpbHRlclByb2dyYW0uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUwM0QwQ0FEMTRCNUIw
QkEwMEYzMkY1NyAvKiBTdHlsZUN1c3RvbUZpbHRlclByb2dyYW0uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQk1MDgxRTNDMzNDRTU4MEMxNkVGOEI0OEIgLyogQ2Fj
aGVkUmVzb3VyY2VSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDUwODFFM0RGM0NGQzgwQzE2RUY4QjQ4QiAvKiBDYWNoZWRSZXNvdXJjZVJl
cXVlc3QuY3BwICovOyB9OwogCQk1MDgxRTNFMDNDRkY4MEMxNkVGOEI0OEIgLyogQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA1MDgxRTNFMTNEMDI4MEMxNkVGOEI0OEIgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTg2OTAs
NiArODY5Miw4IEBACiAJCTUwM0QwQ0E3MTRCNUIwODcwMEYzMkY1NyAvKiBDdXN0b21GaWx0ZXJQ
cm9ncmFtLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEN1c3RvbUZp
bHRlclByb2dyYW0uY3BwOyBwYXRoID0gZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTAzRDBDQTgxNEI1QjA4NzAwRjMyRjU3IC8q
IEN1c3RvbUZpbHRlclByb2dyYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
Q3VzdG9tRmlsdGVyUHJvZ3JhbS5oOyBwYXRoID0gZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFt
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUwM0QwQ0E5MTRCNUIwODcwMEYzMkY1
NyAvKiBDdXN0b21GaWx0ZXJQcm9ncmFtQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEN1c3RvbUZpbHRlclByb2dyYW1DbGllbnQuaDsgcGF0aCA9IGZpbHRlcnMvQ3Vz
dG9tRmlsdGVyUHJvZ3JhbUNsaWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
MDNEMENBNzE0QjVCMDg3MDBGMzJGNTggLyogQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3Bw
OyBwYXRoID0gZmlsdGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUwM0QwQ0E4MTRCNUIwODcwMEYzMkY1OCAvKiBDdXN0b21GaWx0ZXJS
ZW5kZXJlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDdXN0b21GaWx0ZXJS
ZW5kZXJlci5oOyBwYXRoID0gZmlsdGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MDNEMENBRDE0QjVCMEJBMDBGMzJGNTcgLyogU3R5bGVD
dXN0b21GaWx0ZXJQcm9ncmFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFN0
eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oOyBwYXRoID0gc3R5bGUvU3R5bGVDdXN0b21GaWx0ZXJQ
cm9ncmFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUwOENDQTREMTNDRjEwNkIw
MDMxNTFGMyAvKiBSZW5kZXJGbG93VGhyZWFkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFJlbmRlckZsb3dUaHJlYWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NTA4Q0NBNEUxM0NGMTA2QjAwMzE1MUYzIC8qIFJlbmRlckZsb3dUaHJlYWQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyRmxvd1RocmVhZC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODI0OCw2ICsxODI1Miw4IEBACiAJCQkJNTAzRDBD
QTkxNEI1QjA4NzAwRjMyRjU3IC8qIEN1c3RvbUZpbHRlclByb2dyYW1DbGllbnQuaCAqLywKIAkJ
CQk1MEQ4OENCMzE1QkRGREFBMDAxODA5RjQgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uY3Bw
ICovLAogCQkJCTUwRDg4Q0I0MTVCREZEQUEwMDE4MDlGNCAvKiBDdXN0b21GaWx0ZXJQcm9ncmFt
SW5mby5oICovLAorCQkJCTUwM0QwQ0E3MTRCNUIwODcwMEYzMkY1OCAvKiBDdXN0b21GaWx0ZXJS
ZW5kZXJlci5jcHAgKi8sCisJCQkJNTAzRDBDQTgxNEI1QjA4NzAwRjMyRjU4IC8qIEN1c3RvbUZp
bHRlclJlbmRlcmVyLmggKi8sCiAJCQkJNTA5RUMxMDgxNUU4NDhDQTAwRTgyNTgxIC8qIEN1c3Rv
bUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlci5oICovLAogCQkJCUEyOTUzMkNEMTVERDVFMTcwMDQ2
OUVCQyAvKiBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmNwcCAqLywKIAkJCQlBMjk1MzJD
RTE1REQ1RTE3MDA0NjlFQkMgLyogQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oICovLApA
QCAtMjI2ODEsNiArMjI2ODcsNyBAQAogCQkJCTUwM0QwQ0FCMTRCNUIwODcwMEYzMkY1NyAvKiBD
dXN0b21GaWx0ZXJQcm9ncmFtLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MDNEMENBQzE0QjVCMDg3
MDBGMzJGNTcgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTBEODhDQjYxNUJERkRBQTAwMTgwOUY0IC8qIEN1c3RvbUZpbHRlclByb2dyYW1JbmZvLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk1MDNEMENBQjE0QjVCMDg3MDBGMzJGNTggLyogQ3VzdG9tRmls
dGVyUmVuZGVyZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUEyOTUzMkQwMTVERDVFMTcwMDQ2OUVC
QyAvKiBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
OENCNDEzRTBFODYzM0ZEMDAzMkM0RjAgLyogRGFzaEFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBODBFNkQwQjBBMTk4OUNBMDA3RkI4QzUgLyogRGFzaGJvYXJkUmVnaW9uLmggaW4gSGVhZGVy
cyAqLywKQEAgLTI2Mjc2LDYgKzI2MjgzLDcgQEAKIAkJCQk1MENDMEEzOTE0QzZGNUIxMDAxN0FC
NTEgLyogQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUwM0Qw
Q0FBMTRCNUIwODcwMEYzMkY1NyAvKiBDdXN0b21GaWx0ZXJQcm9ncmFtLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTUwRDg4Q0I1MTVCREZEQUEwMDE4MDlGNCAvKiBDdXN0b21GaWx0ZXJQcm9ncmFt
SW5mby5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk1MDNEMENBQTE0QjVCMDg3MDBGMzJGNTggLyog
Q3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTI5NTMyQ0YxNURE
NUUxNzAwNDY5RUJDIC8qIEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJOTdCQzZBMjAxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTk3QkM2QTIzMTUwNUYwODEwMDFCNzRBQyAvKiBEYXRhYmFzZUF1dGhv
cml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjg5NTBiZWVmZjYxNjUzYmM5ZGYxYjYzZGNjZjU4NTQ3OWViODNlNDcKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0N1c3RvbUZpbHRlclJlbmRlcmVyLmNwcApAQCAtMCwwICsxLDMwOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCc
QVMgSVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUK
KyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpICYmIFVTRSgzRF9HUkFQSElDUykKKyNpbmNs
dWRlICJDdXN0b21GaWx0ZXJSZW5kZXJlci5oIgorCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyQXJy
YXlQYXJhbWV0ZXIuaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJDb25zdGFudHMuaCIKKyNpbmNs
dWRlICJDdXN0b21GaWx0ZXJNZXNoLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyTnVtYmVyUGFy
YW1ldGVyLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUGFyYW1ldGVyLmgiCisjaW5jbHVkZSAi
Q3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVy
VmFsaWRhdGVkUHJvZ3JhbS5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5j
bHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dGF0aWMgdm9pZCBvcnRob2dvbmFsUHJvamVjdGlvbk1hdHJpeChUcmFuc2Zvcm1hdGlvbk1hdHJp
eCYgbWF0cml4LCBmbG9hdCBsZWZ0LCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9tLCBmbG9hdCB0
b3ApCit7CisgICAgQVNTRVJUKG1hdHJpeC5pc0lkZW50aXR5KCkpOworCisgICAgZmxvYXQgZGVs
dGFYID0gcmlnaHQgLSBsZWZ0OworICAgIGZsb2F0IGRlbHRhWSA9IHRvcCAtIGJvdHRvbTsKKyAg
ICBpZiAoIWRlbHRhWCB8fCAhZGVsdGFZKQorICAgICAgICByZXR1cm47CisgICAgbWF0cml4LnNl
dE0xMSgyLjBmIC8gZGVsdGFYKTsKKyAgICBtYXRyaXguc2V0TTQxKC0ocmlnaHQgKyBsZWZ0KSAv
IGRlbHRhWCk7CisgICAgbWF0cml4LnNldE0yMigyLjBmIC8gZGVsdGFZKTsKKyAgICBtYXRyaXgu
c2V0TTQyKC0odG9wICsgYm90dG9tKSAvIGRlbHRhWSk7CisKKyAgICAvLyBVc2UgYmlnIGVub3Vn
aCBuZWFyL2ZhciB2YWx1ZXMsIHNvIHRoYXQgc2ltcGxlIHJvdGF0aW9ucyBvZiByYXRoZXIgbGFy
Z2Ugb2JqZWN0cyB3aWxsIG5vdAorICAgIC8vIGdldCBjbGlwcGVkLiAxMDAwMCBzaG91bGQgY292
ZXIgbW9zdCBvZiB0aGUgc2NyZWVuIHJlc29sdXRpb25zLgorICAgIGNvbnN0IGZsb2F0IGZhclZh
bHVlID0gMTAwMDA7CisgICAgY29uc3QgZmxvYXQgbmVhclZhbHVlID0gLTEwMDAwOworICAgIG1h
dHJpeC5zZXRNMzMoLTIuMGYgLyAoZmFyVmFsdWUgLSBuZWFyVmFsdWUpKTsKKyAgICBtYXRyaXgu
c2V0TTQzKC0gKGZhclZhbHVlICsgbmVhclZhbHVlKSAvIChmYXJWYWx1ZSAtIG5lYXJWYWx1ZSkp
OworICAgIG1hdHJpeC5zZXRNNDQoMS4wZik7Cit9CisKK1Bhc3NSZWZQdHI8Q3VzdG9tRmlsdGVy
UmVuZGVyZXI+IEN1c3RvbUZpbHRlclJlbmRlcmVyOjpjcmVhdGUoUGFzc1JlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCwgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9n
cmFtPiB2YWxpZGF0ZWRQcm9ncmFtLCBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBw
YXJhbWV0ZXJzLAorICAgIHVuc2lnbmVkIG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywg
Q3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoQm94VHlwZSBtZXNoQm94VHlwZSwgQ3VzdG9tRmls
dGVyT3BlcmF0aW9uOjpNZXNoVHlwZSBtZXNoVHlwZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IEN1c3RvbUZpbHRlclJlbmRlcmVyKGNvbnRleHQsIHZhbGlkYXRlZFByb2dyYW0sIHBhcmFt
ZXRlcnMsIG1lc2hSb3dzLCBtZXNoQ29sdW1ucywgbWVzaEJveFR5cGUsIG1lc2hUeXBlKSk7Cit9
CisKK0N1c3RvbUZpbHRlclJlbmRlcmVyOjpDdXN0b21GaWx0ZXJSZW5kZXJlcihQYXNzUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlk
YXRlZFByb2dyYW0+IHZhbGlkYXRlZFByb2dyYW0sIGNvbnN0IEN1c3RvbUZpbHRlclBhcmFtZXRl
ckxpc3QmIHBhcmFtZXRlcnMsCisgICAgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1lc2hD
b2x1bW5zLCBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hCb3hUeXBlLCBDdXN0b21GaWx0ZXJP
cGVyYXRpb246Ok1lc2hUeXBlIG1lc2hUeXBlKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisg
ICAgLCBtX3ZhbGlkYXRlZFByb2dyYW0odmFsaWRhdGVkUHJvZ3JhbSkKKyAgICAsIG1fY29tcGls
ZWRQcm9ncmFtKDApIC8vIERvbid0IGNvbXBpbGUgdGhlIHByb2dyYW0gdW5sZXNzIHdlIG5lZWQg
dG8gcGFpbnQuCisgICAgLCBtX3BhcmFtZXRlcnMocGFyYW1ldGVycykKKyAgICAsIG1fbWVzaFJv
d3MobWVzaFJvd3MpCisgICAgLCBtX21lc2hDb2x1bW5zKG1lc2hDb2x1bW5zKQorICAgICwgbV9t
ZXNoVHlwZShtZXNoVHlwZSkKK3sKK30KKworQ3VzdG9tRmlsdGVyUmVuZGVyZXI6On5DdXN0b21G
aWx0ZXJSZW5kZXJlcigpCit7Cit9CisKK2Jvb2wgQ3VzdG9tRmlsdGVyUmVuZGVyZXI6OnByZW11
bHRpcGxpZWRBbHBoYSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmFsaWRhdGVkUHJvZ3JhbS0+
cHJvZ3JhbUluZm8oKS5wcm9ncmFtVHlwZSgpID09IFBST0dSQU1fVFlQRV9CTEVORFNfRUxFTUVO
VF9URVhUVVJFOworfQorCitib29sIEN1c3RvbUZpbHRlclJlbmRlcmVyOjpwcm9ncmFtTmVlZHNJ
bnB1dFRleHR1cmUoKSBjb25zdAoreworICAgIEFTU0VSVChtX2NvbXBpbGVkUHJvZ3JhbS5nZXQo
KSk7CisgICAgcmV0dXJuIG1fY29tcGlsZWRQcm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSAhPSAt
MTsKK30KKwordm9pZCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6cGFpbnQoUGxhdGZvcm0zRE9iamVj
dCBpbnB1dFRleHR1cmUsIGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgLy8gRklYTUU6IFdl
IHdvdWxkIG5lZWQgc29tZXRoaW5nIGxpa2UgQ3VzdG9tRmlsdGVyUmVuZGVyZXJTdGF0ZSB0aGF0
IHdpbGwgY29udGFpbiB0aGUgc2l6ZSBhbmQgb3RoZXIgcGFyYW1ldGVycyBpbiB0aGUgZnV0dXJl
LiBXZSBzaG91bGQgcGFzcyB0aGF0IHRvIGJpbmRQcm9ncmFtQnVmZmVycyBpbnN0ZWFkIG9mIHN0
b3JpbmcgaXQuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwMDEwNworICAgIG1fY29udGV4dFNpemUgPSBzaXplOworCisgICAgYmluZFByb2dyYW1BbmRC
dWZmZXJzKGlucHV0VGV4dHVyZSk7CisgICAgbV9jb250ZXh0LT5kcmF3RWxlbWVudHMoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgbV9tZXNoLT5pbmRpY2VzQ291bnQoKSwgR3JhcGhpY3ND
b250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKTsKKyAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGVz
KCk7Cit9CisKK2Jvb2wgQ3VzdG9tRmlsdGVyUmVuZGVyZXI6OnByZXBhcmVGb3JEcmF3aW5nKCkK
K3sKKyAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIGluaXRpYWxpemVD
b21waWxlZFByb2dyYW1JZk5lZWRlZCgpOworCisgICAgLy8gSWYgdGhlIHNoYWRlciBoYWQgY29t
cGlsZXIgZXJyb3JzIHdlIGNhbm5vdCBkcmF3IGFueXRoaW5nLgorICAgIGlmICghbV9jb21waWxl
ZFByb2dyYW0tPmlzSW5pdGlhbGl6ZWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
aW5pdGlhbGl6ZU1lc2hJZk5lZWRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEN1
c3RvbUZpbHRlclJlbmRlcmVyOjppbml0aWFsaXplQ29tcGlsZWRQcm9ncmFtSWZOZWVkZWQoKQor
eworICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS5nZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9jb21waWxlZFByb2dyYW0gPSBtX3ZhbGlkYXRlZFByb2dyYW0tPmNvbXBpbGVkUHJvZ3Jh
bSgpOworfQorCit2b2lkIEN1c3RvbUZpbHRlclJlbmRlcmVyOjppbml0aWFsaXplTWVzaElmTmVl
ZGVkKCkKK3sKKyAgICBpZiAobV9tZXNoLmdldCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBGSVhNRTogU2hhcmluZyB0aGUgbWVzaCB3b3VsZCBqdXN0IHNhdmUgdGhlIHRpbWUgbmVlZGVk
IHRvIHVwbG9hZCBpdCB0byB0aGUgR1BVLCBzbyBJIGFzc3VtZSB3ZSBjb3VsZAorICAgIC8vIGJl
bmNobWFyayB0aGF0IGZvciBwZXJmb3JtYW5jZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODg0MjkKKyAgICBtX21lc2ggPSBDdXN0b21GaWx0ZXJNZXNo
OjpjcmVhdGUobV9jb250ZXh0LmdldCgpLCBtX21lc2hDb2x1bW5zLCBtX21lc2hSb3dzLCBGbG9h
dFJlY3QoMCwgMCwgMSwgMSksIG1fbWVzaFR5cGUpOworfQorCit2b2lkIEN1c3RvbUZpbHRlclJl
bmRlcmVyOjpiaW5kVmVydGV4QXR0cmlidXRlKGludCBhdHRyaWJ1dGVMb2NhdGlvbiwgdW5zaWdu
ZWQgc2l6ZSwgdW5zaWduZWQgb2Zmc2V0KQoreworICAgIGlmIChhdHRyaWJ1dGVMb2NhdGlvbiAh
PSAtMSkgeworICAgICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoYXR0cmlidXRl
TG9jYXRpb24sIHNpemUsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIG1fbWVzaC0+
Ynl0ZXNQZXJWZXJ0ZXgoKSwgb2Zmc2V0KTsKKyAgICAgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0
ZXhBdHRyaWJBcnJheShhdHRyaWJ1dGVMb2NhdGlvbik7CisgICAgfQorfQorCit2b2lkIEN1c3Rv
bUZpbHRlclJlbmRlcmVyOjp1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUoaW50IGF0dHJpYnV0ZUxvY2F0
aW9uKQoreworICAgIGlmIChhdHRyaWJ1dGVMb2NhdGlvbiAhPSAtMSkKKyAgICAgICAgbV9jb250
ZXh0LT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoYXR0cmlidXRlTG9jYXRpb24pOworfQorCit2
b2lkIEN1c3RvbUZpbHRlclJlbmRlcmVyOjpiaW5kUHJvZ3JhbUFycmF5UGFyYW1ldGVycyhpbnQg
dW5pZm9ybUxvY2F0aW9uLCBDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlciogYXJyYXlQYXJhbWV0
ZXIpCit7CisgICAgdW5zaWduZWQgcGFyYW1ldGVyU2l6ZSA9IGFycmF5UGFyYW1ldGVyLT5zaXpl
KCk7CisgICAgVmVjdG9yPEdDM0RmbG9hdD4gZmxvYXRWZWN0b3I7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVyU2l6ZTsgKytpKQorICAgICAgICBmbG9hdFZlY3Rvci5h
cHBlbmQoYXJyYXlQYXJhbWV0ZXItPnZhbHVlQXQoaSkpOworCisgICAgbV9jb250ZXh0LT51bmlm
b3JtMWZ2KHVuaWZvcm1Mb2NhdGlvbiwgcGFyYW1ldGVyU2l6ZSwgZmxvYXRWZWN0b3IuZGF0YSgp
KTsKK30KKwordm9pZCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6YmluZFByb2dyYW1OdW1iZXJQYXJh
bWV0ZXJzKGludCB1bmlmb3JtTG9jYXRpb24sIEN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlciog
bnVtYmVyUGFyYW1ldGVyKQoreworICAgIHN3aXRjaCAobnVtYmVyUGFyYW1ldGVyLT5zaXplKCkp
IHsKKyAgICBjYXNlIDE6CisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKHVuaWZvcm1Mb2Nh
dGlvbiwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDApKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSAyOgorICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZih1bmlmb3JtTG9jYXRpb24sIG51
bWJlclBhcmFtZXRlci0+dmFsdWVBdCgwKSwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDEpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAzOgorICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0z
Zih1bmlmb3JtTG9jYXRpb24sIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgwKSwgbnVtYmVyUGFy
YW1ldGVyLT52YWx1ZUF0KDEpLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKHVuaWZv
cm1Mb2NhdGlvbiwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDApLCBudW1iZXJQYXJhbWV0ZXIt
PnZhbHVlQXQoMSksIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgyKSwgbnVtYmVyUGFyYW1ldGVy
LT52YWx1ZUF0KDMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit2b2lkIEN1c3RvbUZpbHRlclJlbmRlcmVy
OjpiaW5kUHJvZ3JhbVRyYW5zZm9ybVBhcmFtZXRlcihpbnQgdW5pZm9ybUxvY2F0aW9uLCBDdXN0
b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIqIHRyYW5zZm9ybVBhcmFtZXRlcikKK3sKKyAgICBU
cmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7CisgICAgaWYgKG1fY29udGV4dFNpemUud2lkdGgo
KSAmJiBtX2NvbnRleHRTaXplLmhlaWdodCgpKSB7CisgICAgICAgIC8vIFRoZSB2aWV3cG9ydCBp
cyBhIGJveCB3aXRoIHRoZSBzaXplIG9mIDEgdW5pdCwgc28gd2UgYXJlIHNjYWxsaW5nIHVwIGhl
cmUgdG8gbWFrZSBzdXJlIHRoYXQgdHJhbnNsYXRpb25zIGhhcHBlbiB1c2luZyByZWFsIHBpeGVs
CisgICAgICAgIC8vIHVuaXRzLiBBdCB0aGUgZW5kIHdlIHNjYWxlIGJhY2sgZG93biBpbiBvcmRl
ciB0byBtYXAgaXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYm94LiBOb3RlIHRoYXQgdHJhbnNmb3Jt
cyBjb21lIGluIHJldmVyc2Ugb3JkZXIsIGJlY2F1c2UgaXQgaXMKKyAgICAgICAgLy8gc3VwcG9z
ZWQgdG8gbXVsdGlwbHkgdG8gdGhlIGxlZnQgb2YgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB2ZXJ0
aWNlcy4KKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoZSBvcmlnaW4gKDAsIDApIG9mIHRoZSB2aWV3
cG9ydCBpcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBjb250ZXh0LCBzbyB0aGVyZSdzIG5vIG5lZWQg
dG8gY2hhbmdlIHRoZSBvcmlnaW4gb2YgdGhlIHRyYW5zZm9ybQorICAgICAgICAvLyBpbiBvcmRl
ciB0byByb3RhdGUgYXJvdW5kIHRoZSBtaWRkbGUgb2YgbWVzaC4KKyAgICAgICAgbWF0cml4LnNj
YWxlM2QoMS4wIC8gbV9jb250ZXh0U2l6ZS53aWR0aCgpLCAxLjAgLyBtX2NvbnRleHRTaXplLmhl
aWdodCgpLCAxKTsKKyAgICAgICAgdHJhbnNmb3JtUGFyYW1ldGVyLT5hcHBseVRyYW5zZm9ybSht
YXRyaXgsIG1fY29udGV4dFNpemUpOworICAgICAgICBtYXRyaXguc2NhbGUzZChtX2NvbnRleHRT
aXplLndpZHRoKCksIG1fY29udGV4dFNpemUuaGVpZ2h0KCksIDEpOworICAgIH0KKyAgICBmbG9h
dCBnbE1hdHJpeFsxNl07CisgICAgbWF0cml4LnRvQ29sdW1uTWFqb3JGbG9hdEFycmF5KGdsTWF0
cml4KTsKKyAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYodW5pZm9ybUxvY2F0aW9uLCAx
LCBmYWxzZSwgJmdsTWF0cml4WzBdKTsKK30KKwordm9pZCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6
YmluZFByb2dyYW1QYXJhbWV0ZXJzKCkKK3sKKyAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byBy
ZXNldCB1bmlmb3JtcyB0aGF0IGFyZSBub3Qgc3BlY2lmaWVkIGluIENTUy4gVGhpcyBpcyBuZWVk
ZWQgdG8gYXZvaWQgdXNpbmcgdmFsdWVzCisgICAgLy8gc2V0IGJ5IG90aGVyIHByZXZpb3VzIHJl
bmRlcmVkIGZpbHRlcnMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc2NDQwCisKKyAgICBzaXplX3QgcGFyYW1ldGVyc1NpemUgPSBtX3BhcmFtZXRlcnMu
c2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVyc1NpemU7ICsraSkg
eworICAgICAgICBDdXN0b21GaWx0ZXJQYXJhbWV0ZXIqIHBhcmFtZXRlciA9IG1fcGFyYW1ldGVy
cy5hdChpKS5nZXQoKTsKKyAgICAgICAgaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1fY29tcGlsZWRQ
cm9ncmFtLT51bmlmb3JtTG9jYXRpb25CeU5hbWUocGFyYW1ldGVyLT5uYW1lKCkpOworICAgICAg
ICBpZiAodW5pZm9ybUxvY2F0aW9uID09IC0xKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIHN3aXRjaCAocGFyYW1ldGVyLT5wYXJhbWV0ZXJUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBD
dXN0b21GaWx0ZXJQYXJhbWV0ZXI6OkFSUkFZOgorICAgICAgICAgICAgYmluZFByb2dyYW1BcnJh
eVBhcmFtZXRlcnModW5pZm9ybUxvY2F0aW9uLCBzdGF0aWNfY2FzdDxDdXN0b21GaWx0ZXJBcnJh
eVBhcmFtZXRlcio+KHBhcmFtZXRlcikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyOjpOVU1CRVI6CisgICAgICAgICAgICBiaW5kUHJvZ3Jh
bU51bWJlclBhcmFtZXRlcnModW5pZm9ybUxvY2F0aW9uLCBzdGF0aWNfY2FzdDxDdXN0b21GaWx0
ZXJOdW1iZXJQYXJhbWV0ZXIqPihwYXJhbWV0ZXIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEN1c3RvbUZpbHRlclBhcmFtZXRlcjo6VFJBTlNGT1JNOgorICAgICAgICAgICAg
YmluZFByb2dyYW1UcmFuc2Zvcm1QYXJhbWV0ZXIodW5pZm9ybUxvY2F0aW9uLCBzdGF0aWNfY2Fz
dDxDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIqPihwYXJhbWV0ZXIpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEN1c3RvbUZpbHRlclJlbmRl
cmVyOjpiaW5kUHJvZ3JhbUFuZEJ1ZmZlcnMoUGxhdGZvcm0zRE9iamVjdCBpbnB1dFRleHR1cmUp
Cit7CisgICAgQVNTRVJUKG1fY29tcGlsZWRQcm9ncmFtLT5pc0luaXRpYWxpemVkKCkpOworCisg
ICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKG1fY29tcGlsZWRQcm9ncmFtLT5wcm9ncmFtKCkpOwor
CisgICAgaWYgKHByb2dyYW1OZWVkc0lucHV0VGV4dHVyZSgpKSB7CisgICAgICAgIC8vIFdlIHNo
b3VsZCBiZSBiaW5kaW5nIHRoZSBET00gZWxlbWVudCB0ZXh0dXJlIHNhbXBsZXIgb25seSBpZiB0
aGUgYXV0aG9yIGlzIHVzaW5nIHRoZSBDU1MgbWl4IGZ1bmN0aW9uLgorICAgICAgICBBU1NFUlQo
bV92YWxpZGF0ZWRQcm9ncmFtLT5wcm9ncmFtSW5mbygpLnByb2dyYW1UeXBlKCkgPT0gUFJPR1JB
TV9UWVBFX0JMRU5EU19FTEVNRU5UX1RFWFRVUkUpOworICAgICAgICBBU1NFUlQobV9jb21waWxl
ZFByb2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpICE9IC0xKTsKKworICAgICAgICBtX2NvbnRleHQt
PmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKyAgICAgICAgbV9j
b250ZXh0LT51bmlmb3JtMWkobV9jb21waWxlZFByb2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpLCAw
KTsKKyAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgaW5wdXRUZXh0dXJlKTsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICAgICAgbV9jb250
ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFS
KTsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29u
dGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJp
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICB9CisKKyAg
ICBpZiAobV9jb21waWxlZFByb2dyYW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpICE9IC0x
KSB7CisgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHByb2plY3Rpb25NYXRyaXg7CisgICAg
ICAgIG9ydGhvZ29uYWxQcm9qZWN0aW9uTWF0cml4KHByb2plY3Rpb25NYXRyaXgsIC0wLjUsIDAu
NSwgLTAuNSwgMC41KTsKKyAgICAgICAgZmxvYXQgZ2xQcm9qZWN0aW9uTWF0cml4WzE2XTsKKyAg
ICAgICAgcHJvamVjdGlvbk1hdHJpeC50b0NvbHVtbk1ham9yRmxvYXRBcnJheShnbFByb2plY3Rp
b25NYXRyaXgpOworICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobV9jb21waWxl
ZFByb2dyYW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgJmdsUHJvamVj
dGlvbk1hdHJpeFswXSk7CisgICAgfQorCisgICAgQVNTRVJUKG1fbWVzaENvbHVtbnMpOworICAg
IEFTU0VSVChtX21lc2hSb3dzKTsKKworICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+bWVzaFNp
emVMb2NhdGlvbigpICE9IC0xKQorICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX2NvbXBp
bGVkUHJvZ3JhbS0+bWVzaFNpemVMb2NhdGlvbigpLCBtX21lc2hDb2x1bW5zLCBtX21lc2hSb3dz
KTsKKworICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+dGlsZVNpemVMb2NhdGlvbigpICE9IC0x
KQorICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX2NvbXBpbGVkUHJvZ3JhbS0+dGlsZVNp
emVMb2NhdGlvbigpLCAxLjAgLyBtX21lc2hDb2x1bW5zLCAxLjAgLyBtX21lc2hSb3dzKTsKKwor
ICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+bWVzaEJveExvY2F0aW9uKCkgIT0gLTEpIHsKKyAg
ICAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBjaGFuZ2Ugd2hlbiBmaWx0ZXIgbWFyZ2lucyB3aWxs
IGJlIGltcGxlbWVudGVkLAorICAgICAgICAvLyBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcxNDAwCisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKG1fY29t
cGlsZWRQcm9ncmFtLT5tZXNoQm94TG9jYXRpb24oKSwgLTAuNSwgLTAuNSwgMS4wLCAxLjApOwor
ICAgIH0KKworICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+c2FtcGxlclNpemVMb2NhdGlvbigp
ICE9IC0xKQorICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX2NvbXBpbGVkUHJvZ3JhbS0+
c2FtcGxlclNpemVMb2NhdGlvbigpLCBtX2NvbnRleHRTaXplLndpZHRoKCksIG1fY29udGV4dFNp
emUuaGVpZ2h0KCkpOworCisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4
dDNEOjpBUlJBWV9CVUZGRVIsIG1fbWVzaC0+dmVydGljZXNCdWZmZXJPYmplY3QoKSk7CisgICAg
bV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JV
RkZFUiwgbV9tZXNoLT5lbGVtZW50c0J1ZmZlck9iamVjdCgpKTsKKworICAgIGJpbmRWZXJ0ZXhB
dHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPnBvc2l0aW9uQXR0cmliTG9jYXRpb24oKSwgUG9z
aXRpb25BdHRyaWJTaXplLCBQb3NpdGlvbkF0dHJpYk9mZnNldCk7CisgICAgYmluZFZlcnRleEF0
dHJpYnV0ZShtX2NvbXBpbGVkUHJvZ3JhbS0+dGV4QXR0cmliTG9jYXRpb24oKSwgVGV4QXR0cmli
U2l6ZSwgVGV4QXR0cmliT2Zmc2V0KTsKKyAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGUgaW50
ZXJuYWwgdGV4IGNvb3JkIGF0dHJpYnV0ZSAiY3NzX2FfdGV4Q29vcmQiLgorICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDM1OAorICAgIGJpbmRWZXJ0ZXhB
dHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPmludGVybmFsVGV4Q29vcmRBdHRyaWJMb2NhdGlv
bigpLCBUZXhBdHRyaWJTaXplLCBUZXhBdHRyaWJPZmZzZXQpOworICAgIGJpbmRWZXJ0ZXhBdHRy
aWJ1dGUobV9jb21waWxlZFByb2dyYW0tPm1lc2hBdHRyaWJMb2NhdGlvbigpLCBNZXNoQXR0cmli
U2l6ZSwgTWVzaEF0dHJpYk9mZnNldCk7CisgICAgaWYgKG1fbWVzaFR5cGUgPT0gQ3VzdG9tRmls
dGVyT3BlcmF0aW9uOjpERVRBQ0hFRCkKKyAgICAgICAgYmluZFZlcnRleEF0dHJpYnV0ZShtX2Nv
bXBpbGVkUHJvZ3JhbS0+dHJpYW5nbGVBdHRyaWJMb2NhdGlvbigpLCBUcmlhbmdsZUF0dHJpYlNp
emUsIFRyaWFuZ2xlQXR0cmliT2Zmc2V0KTsKKworICAgIGJpbmRQcm9ncmFtUGFyYW1ldGVycygp
OworfQorCit2b2lkIEN1c3RvbUZpbHRlclJlbmRlcmVyOjp1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGVz
KCkKK3sKKyAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPnBvc2l0
aW9uQXR0cmliTG9jYXRpb24oKSk7CisgICAgdW5iaW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGls
ZWRQcm9ncmFtLT50ZXhBdHRyaWJMb2NhdGlvbigpKTsKKyAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1
dGUobV9jb21waWxlZFByb2dyYW0tPmludGVybmFsVGV4Q29vcmRBdHRyaWJMb2NhdGlvbigpKTsK
KyAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPm1lc2hBdHRyaWJM
b2NhdGlvbigpKTsKKyAgICBpZiAobV9tZXNoVHlwZSA9PSBDdXN0b21GaWx0ZXJPcGVyYXRpb246
OkRFVEFDSEVEKQorICAgICAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dy
YW0tPnRyaWFuZ2xlQXR0cmliTG9jYXRpb24oKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShDU1NfU0hBREVSUykgJiYgVVNFKDNEX0dSQVBISUNTKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0
b21GaWx0ZXJSZW5kZXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJiMDI3MDhmZjY1NjViNzYz
YjlmMTkxZjhjMTIxNzFhNzUyY2U5YzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmgKQEAgLTAs
MCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBZG9iZSBTeXN0ZW1zIEluY29y
cG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21w
YW55IDEwMCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVIg4oCcQVMgSVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBI
T0xERVIgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IK
KyAqIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm
IEN1c3RvbUZpbHRlclJlbmRlcmVyX2gKKyNkZWZpbmUgQ3VzdG9tRmlsdGVyUmVuZGVyZXJfaAor
CisjaWYgRU5BQkxFKENTU19TSEFERVJTKSAmJiBVU0UoM0RfR1JBUEhJQ1MpCisKKyNpbmNsdWRl
ICJDdXN0b21GaWx0ZXJPcGVyYXRpb24uaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIK
KyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlcjsK
K2NsYXNzIEN1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbTsKK2NsYXNzIEN1c3RvbUZpbHRlck1l
c2g7CitjbGFzcyBDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXI7CitjbGFzcyBDdXN0b21GaWx0
ZXJUcmFuc2Zvcm1QYXJhbWV0ZXI7CitjbGFzcyBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFt
OworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBJbnRTaXplOworCitjbGFzcyBDdXN0
b21GaWx0ZXJSZW5kZXJlciA6IHB1YmxpYyBSZWZDb3VudGVkPEN1c3RvbUZpbHRlclJlbmRlcmVy
PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUmVuZGVyZXI+
IGNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc1JlZlB0cjxDdXN0b21G
aWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiwgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYs
CisgICAgICAgIHVuc2lnbmVkIG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9t
RmlsdGVyT3BlcmF0aW9uOjpNZXNoQm94VHlwZSwgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNo
VHlwZSk7CisgICAgfkN1c3RvbUZpbHRlclJlbmRlcmVyKCk7CisKKyAgICBib29sIHByZW11bHRp
cGxpZWRBbHBoYSgpIGNvbnN0OworICAgIGJvb2wgcHJvZ3JhbU5lZWRzSW5wdXRUZXh0dXJlKCkg
Y29uc3Q7CisKKyAgICBib29sIHByZXBhcmVGb3JEcmF3aW5nKCk7CisKKyAgICB2b2lkIHBhaW50
KFBsYXRmb3JtM0RPYmplY3QsIGNvbnN0IEludFNpemUmKTsKKworcHJpdmF0ZToKKyAgICBDdXN0
b21GaWx0ZXJSZW5kZXJlcihQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc1JlZlB0
cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiwgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1l
dGVyTGlzdCYsCisgICAgICAgIHVuc2lnbmVkIG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1u
cywgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoQm94VHlwZSwgQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uOjpNZXNoVHlwZSk7CisKKyAgICB2b2lkIGluaXRpYWxpemVDb21waWxlZFByb2dyYW1JZk5l
ZWRlZCgpOworICAgIHZvaWQgaW5pdGlhbGl6ZU1lc2hJZk5lZWRlZCgpOworCisgICAgdm9pZCBi
aW5kVmVydGV4QXR0cmlidXRlKGludCBhdHRyaWJ1dGVMb2NhdGlvbiwgdW5zaWduZWQgc2l6ZSwg
dW5zaWduZWQgb2Zmc2V0KTsKKyAgICB2b2lkIHVuYmluZFZlcnRleEF0dHJpYnV0ZShpbnQgYXR0
cmlidXRlTG9jYXRpb24pOworICAgIHZvaWQgYmluZFByb2dyYW1BcnJheVBhcmFtZXRlcnMoaW50
IHVuaWZvcm1Mb2NhdGlvbiwgQ3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXIqKTsKKyAgICB2b2lk
IGJpbmRQcm9ncmFtTnVtYmVyUGFyYW1ldGVycyhpbnQgdW5pZm9ybUxvY2F0aW9uLCBDdXN0b21G
aWx0ZXJOdW1iZXJQYXJhbWV0ZXIqKTsKKyAgICB2b2lkIGJpbmRQcm9ncmFtVHJhbnNmb3JtUGFy
YW1ldGVyKGludCB1bmlmb3JtTG9jYXRpb24sIEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRl
ciopOworICAgIHZvaWQgYmluZFByb2dyYW1QYXJhbWV0ZXJzKCk7CisgICAgdm9pZCBiaW5kUHJv
Z3JhbUFuZEJ1ZmZlcnMoUGxhdGZvcm0zRE9iamVjdCBpbnB1dFRleHR1cmUpOworICAgIHZvaWQg
dW5iaW5kVmVydGV4QXR0cmlidXRlcygpOworCisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBtX2NvbnRleHQ7CisgICAgUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0+IG1f
dmFsaWRhdGVkUHJvZ3JhbTsKKyAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFt
PiBtX2NvbXBpbGVkUHJvZ3JhbTsKKyAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyTWVzaD4gbV9tZXNo
OworICAgIEludFNpemUgbV9jb250ZXh0U2l6ZTsKKworICAgIEN1c3RvbUZpbHRlclBhcmFtZXRl
ckxpc3QgbV9wYXJhbWV0ZXJzOworCisgICAgdW5zaWduZWQgbV9tZXNoUm93czsKKyAgICB1bnNp
Z25lZCBtX21lc2hDb2x1bW5zOworICAgIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaFR5cGUg
bV9tZXNoVHlwZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShDU1NfU0hBREVSUykgJiYgVVNFKDNEX0dSQVBISUNTKQorCisjZW5kaWYgLy8gQ3VzdG9t
RmlsdGVyUmVuZGVyZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmNwcAppbmRleCA3MDdlZGI4NjZmZTEz
YzJjOTdkMDVjYzY2MTk3ZTkwZGYyZjBhYTU2Li45NTYzN2EwZWZlNjAyYmRhNzM5NzM2MTU1NzFj
MTIyODA0ZTE3YjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmNwcApAQCAtMzMsNjEgKzMzLDIyIEBA
CiAjaWYgRU5BQkxFKENTU19TSEFERVJTKSAmJiBVU0UoM0RfR1JBUEhJQ1MpCiAjaW5jbHVkZSAi
RkVDdXN0b21GaWx0ZXIuaCIKIAotI2luY2x1ZGUgIkN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVy
LmgiCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtLmgiCi0jaW5jbHVkZSAi
Q3VzdG9tRmlsdGVyQ29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyR2xvYmFsQ29u
dGV4dC5oIgotI2luY2x1ZGUgIkN1c3RvbUZpbHRlck1lc2guaCIKLSNpbmNsdWRlICJDdXN0b21G
aWx0ZXJOdW1iZXJQYXJhbWV0ZXIuaCIKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJQYXJhbWV0ZXIu
aCIKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJQcm9ncmFtLmgiCi0jaW5jbHVkZSAiQ3VzdG9tRmls
dGVyVHJhbnNmb3JtUGFyYW1ldGVyLmgiCisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUmVuZGVyZXIu
aCIKICNpbmNsdWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmgiCi0jaW5jbHVkZSAi
RHJhd2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnMzRC5oIgogI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCi0jaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCiAjaW5jbHVkZSAi
VGV4dFN0cmVhbS5oIgotI2luY2x1ZGUgIlRpbGluZ0RhdGEuaCIKLSNpbmNsdWRlICJUcmFuc2Zv
cm1hdGlvbk1hdHJpeC5oIgogCiAjaW5jbHVkZSA8d3RmL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGNvbnN0IGludCBrTWF4U2FtcGxlQ291bnQg
PSA0OwotCi1zdGF0aWMgdm9pZCBvcnRob2dvbmFsUHJvamVjdGlvbk1hdHJpeChUcmFuc2Zvcm1h
dGlvbk1hdHJpeCYgbWF0cml4LCBmbG9hdCBsZWZ0LCBmbG9hdCByaWdodCwgZmxvYXQgYm90dG9t
LCBmbG9hdCB0b3ApCi17Ci0gICAgQVNTRVJUKG1hdHJpeC5pc0lkZW50aXR5KCkpOwotICAgIAot
ICAgIGZsb2F0IGRlbHRhWCA9IHJpZ2h0IC0gbGVmdDsKLSAgICBmbG9hdCBkZWx0YVkgPSB0b3Ag
LSBib3R0b207Ci0gICAgaWYgKCFkZWx0YVggfHwgIWRlbHRhWSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIG1hdHJpeC5zZXRNMTEoMi4wZiAvIGRlbHRhWCk7Ci0gICAgbWF0cml4LnNldE00MSgtKHJp
Z2h0ICsgbGVmdCkgLyBkZWx0YVgpOwotICAgIG1hdHJpeC5zZXRNMjIoMi4wZiAvIGRlbHRhWSk7
Ci0gICAgbWF0cml4LnNldE00MigtKHRvcCArIGJvdHRvbSkgLyBkZWx0YVkpOwotCi0gICAgLy8g
VXNlIGJpZyBlbm91Z2ggbmVhci9mYXIgdmFsdWVzLCBzbyB0aGF0IHNpbXBsZSByb3RhdGlvbnMg
b2YgcmF0aGVyIGxhcmdlIG9iamVjdHMgd2lsbCBub3QKLSAgICAvLyBnZXQgY2xpcHBlZC4gMTAw
MDAgc2hvdWxkIGNvdmVyIG1vc3Qgb2YgdGhlIHNjcmVlbiByZXNvbHV0aW9ucy4KLSAgICBjb25z
dCBmbG9hdCBmYXJWYWx1ZSA9IDEwMDAwOwotICAgIGNvbnN0IGZsb2F0IG5lYXJWYWx1ZSA9IC0x
MDAwMDsKLSAgICBtYXRyaXguc2V0TTMzKC0yLjBmIC8gKGZhclZhbHVlIC0gbmVhclZhbHVlKSk7
Ci0gICAgbWF0cml4LnNldE00MygtIChmYXJWYWx1ZSArIG5lYXJWYWx1ZSkgLyAoZmFyVmFsdWUg
LSBuZWFyVmFsdWUpKTsKLSAgICBtYXRyaXguc2V0TTQ0KDEuMGYpOwotfQotCi1GRUN1c3RvbUZp
bHRlcjo6RkVDdXN0b21GaWx0ZXIoRmlsdGVyKiBmaWx0ZXIsIEN1c3RvbUZpbHRlckdsb2JhbENv
bnRleHQqIGN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQsIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVy
VmFsaWRhdGVkUHJvZ3JhbT4gdmFsaWRhdGVkUHJvZ3JhbSwgY29uc3QgQ3VzdG9tRmlsdGVyUGFy
YW1ldGVyTGlzdCYgcGFyYW1ldGVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBtZXNoUm93cywgdW5zaWduZWQgbWVzaENvbHVtbnMsIEN1c3RvbUZpbHRlck9wZXJh
dGlvbjo6TWVzaEJveFR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9t
RmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSBtZXNoVHlwZSkKK0ZFQ3VzdG9tRmlsdGVyOjpGRUN1
c3RvbUZpbHRlcihGaWx0ZXIqIGZpbHRlciwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCwgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiB2YWxpZGF0
ZWRQcm9ncmFtLCBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBwYXJhbWV0ZXJzLAor
ICAgIHVuc2lnbmVkIG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uOjpNZXNoQm94VHlwZSBtZXNoQm94VHlwZSwgQ3VzdG9tRmlsdGVyT3BlcmF0aW9u
OjpNZXNoVHlwZSBtZXNoVHlwZSkKICAgICA6IEZpbHRlckVmZmVjdChmaWx0ZXIpCi0gICAgLCBt
X2dsb2JhbENvbnRleHQoY3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCkKLSAgICAsIG1fdmFsaWRh
dGVkUHJvZ3JhbSh2YWxpZGF0ZWRQcm9ncmFtKQotICAgICwgbV9jb21waWxlZFByb2dyYW0oMCkg
Ly8gRG9uJ3QgY29tcGlsZSB0aGUgcHJvZ3JhbSB1bmxlc3Mgd2UgbmVlZCB0byBwYWludC4KKyAg
ICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9jdXN0b21GaWx0ZXJSZW5kZXJlcihDdXN0
b21GaWx0ZXJSZW5kZXJlcjo6Y3JlYXRlKG1fY29udGV4dCwgdmFsaWRhdGVkUHJvZ3JhbSwgcGFy
YW1ldGVycywgbWVzaFJvd3MsIG1lc2hDb2x1bW5zLCBtZXNoQm94VHlwZSwgbWVzaFR5cGUpKQog
ICAgICwgbV9pbnB1dFRleHR1cmUoMCkKICAgICAsIG1fZnJhbWVCdWZmZXIoMCkKICAgICAsIG1f
ZGVwdGhCdWZmZXIoMCkKQEAgLTk2LDIwICs1NywxMyBAQCBGRUN1c3RvbUZpbHRlcjo6RkVDdXN0
b21GaWx0ZXIoRmlsdGVyKiBmaWx0ZXIsIEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQqIGN1c3Rv
bQogICAgICwgbV9tdWx0aXNhbXBsZUZyYW1lQnVmZmVyKDApCiAgICAgLCBtX211bHRpc2FtcGxl
UmVuZGVyQnVmZmVyKDApCiAgICAgLCBtX211bHRpc2FtcGxlRGVwdGhCdWZmZXIoMCkKLSAgICAs
IG1fcGFyYW1ldGVycyhwYXJhbWV0ZXJzKQotICAgICwgbV9tZXNoUm93cyhtZXNoUm93cykKLSAg
ICAsIG1fbWVzaENvbHVtbnMobWVzaENvbHVtbnMpCi0gICAgLCBtX21lc2hUeXBlKG1lc2hUeXBl
KQogewotICAgIC8vIEFuIEZFQ3VzdG9tRmlsdGVyIHNob3VsZG4ndCBoYXZlIGJlZW4gY3JlYXRl
ZCB1bmxlc3MgdGhlIHByb2dyYW0gcGFzc2VkIHZhbGlkYXRpb24uCi0gICAgQVNTRVJUKG1fdmFs
aWRhdGVkUHJvZ3JhbS0+aXNJbml0aWFsaXplZCgpKTsKIH0KIAotUGFzc1JlZlB0cjxGRUN1c3Rv
bUZpbHRlcj4gRkVDdXN0b21GaWx0ZXI6OmNyZWF0ZShGaWx0ZXIqIGZpbHRlciwgQ3VzdG9tRmls
dGVyR2xvYmFsQ29udGV4dCogY3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCwgUGFzc1JlZlB0cjxD
dXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiB2YWxpZGF0ZWRQcm9ncmFtLCBjb25zdCBDdXN0
b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBwYXJhbWV0ZXJzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29s
dW1ucywgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoQm94VHlwZSBtZXNoQm94VHlwZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWx0ZXJPcGVy
YXRpb246Ok1lc2hUeXBlIG1lc2hUeXBlKQorUGFzc1JlZlB0cjxGRUN1c3RvbUZpbHRlcj4gRkVD
dXN0b21GaWx0ZXI6OmNyZWF0ZShGaWx0ZXIqIGZpbHRlciwgUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gY29udGV4dCwgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFt
PiB2YWxpZGF0ZWRQcm9ncmFtLCBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiBwYXJh
bWV0ZXJzLAorICAgIHVuc2lnbmVkIG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3Vz
dG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoQm94VHlwZSBtZXNoQm94VHlwZSwgQ3VzdG9tRmlsdGVy
T3BlcmF0aW9uOjpNZXNoVHlwZSBtZXNoVHlwZSkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IEZFQ3VzdG9tRmlsdGVyKGZpbHRlciwgY3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCwgdmFsaWRh
dGVkUHJvZ3JhbSwgcGFyYW1ldGVycywgbWVzaFJvd3MsIG1lc2hDb2x1bW5zLCBtZXNoQm94VHlw
ZSwgbWVzaFR5cGUpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZFQ3VzdG9tRmlsdGVyKGZp
bHRlciwgY29udGV4dCwgdmFsaWRhdGVkUHJvZ3JhbSwgcGFyYW1ldGVycywgbWVzaFJvd3MsIG1l
c2hDb2x1bW5zLCBtZXNoQm94VHlwZSwgbWVzaFR5cGUpKTsKIH0KIAogRkVDdXN0b21GaWx0ZXI6
On5GRUN1c3RvbUZpbHRlcigpCkBAIC0xMTksOCArNzMsNyBAQCBGRUN1c3RvbUZpbHRlcjo6fkZF
Q3VzdG9tRmlsdGVyKCkKIAogdm9pZCBGRUN1c3RvbUZpbHRlcjo6ZGVsZXRlUmVuZGVyQnVmZmVy
cygpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQo
bV9jb250ZXh0KTsKICAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogICAgIGlm
IChtX2lucHV0VGV4dHVyZSkgewogICAgICAgICBtX2NvbnRleHQtPmRlbGV0ZVRleHR1cmUobV9p
bnB1dFRleHR1cmUpOwpAQCAtMTg3LDQ1ICsxNDAsMzMgQEAgdm9pZCBGRUN1c3RvbUZpbHRlcjo6
ZHJhd0ZpbHRlck1lc2goUGxhdGZvcm0zRE9iamVjdCBpbnB1dFRleHR1cmUpCiAgICAgYm9vbCBt
dWx0aXNhbXBsZSA9IGNhblVzZU11bHRpc2FtcGxlQnVmZmVycygpOwogICAgIG1fY29udGV4dC0+
YmluZEZyYW1lYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbXVsdGlzYW1w
bGUgPyBtX211bHRpc2FtcGxlRnJhbWVCdWZmZXIgOiBtX2ZyYW1lQnVmZmVyKTsKICAgICBtX2Nv
bnRleHQtPnZpZXdwb3J0KDAsIDAsIG1fY29udGV4dFNpemUud2lkdGgoKSwgbV9jb250ZXh0U2l6
ZS5oZWlnaHQoKSk7Ci0gICAgCisKICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoMCwgMCwgMCwg
MCk7CiAgICAgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQlVGRkVS
X0JJVCB8IEdyYXBoaWNzQ29udGV4dDNEOjpERVBUSF9CVUZGRVJfQklUKTsKLSAgICAKLSAgICBi
aW5kUHJvZ3JhbUFuZEJ1ZmZlcnMoaW5wdXRUZXh0dXJlKTsKLSAgICBtX2NvbnRleHQtPmRyYXdF
bGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCBtX21lc2gtPmluZGljZXNDb3Vu
dCgpLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hPUlQsIDApOwotICAgIHVuYmluZFZl
cnRleEF0dHJpYnV0ZXMoKTsKKworICAgIG1fY3VzdG9tRmlsdGVyUmVuZGVyZXItPnBhaW50KGlu
cHV0VGV4dHVyZSwgbV9jb250ZXh0U2l6ZSk7CiAKICAgICBpZiAobXVsdGlzYW1wbGUpCiAgICAg
ICAgIHJlc29sdmVNdWx0aXNhbXBsZUJ1ZmZlcigpOwogfQogCi1ib29sIEZFQ3VzdG9tRmlsdGVy
OjpwcmVwYXJlRm9yRHJhd2luZyhDdXN0b21GaWx0ZXJEcmF3VHlwZSBmaWx0ZXJEcmF3VHlwZSkK
K2Jvb2wgRkVDdXN0b21GaWx0ZXI6OnByZXBhcmVGb3JEcmF3aW5nKCkKIHsKLSAgICBpZiAoIW1f
Y29udGV4dCAmJiAhaW5pdGlhbGl6ZUNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAKLSAgICAvLyBJZiB0aGUgc2hh
ZGVyIGhhZCBjb21waWxlciBlcnJvcnMgd2UgY2Fubm90IGRyYXcgYW55dGhpbmcuCi0gICAgaWYg
KCFtX2NvbXBpbGVkUHJvZ3JhbS0+aXNJbml0aWFsaXplZCgpKQorICAgIGlmICghbV9jdXN0b21G
aWx0ZXJSZW5kZXJlci0+cHJlcGFyZUZvckRyYXdpbmcoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIAorCiAgICAgLy8gT25seSBhbGxvY2F0ZSBhIHRleHR1cmUgaWYgdGhlIHByb2dyYW0g
bmVlZHMgb25lIGFuZCB0aGUgY2FsbGVyIGRvZXNuJ3QgYWxsb2NhdGUgb25lIGJ5IGl0c2VsZi4K
LSAgICBpZiAoKHByb2dyYW1OZWVkc0lucHV0VGV4dHVyZSgpICYmIChmaWx0ZXJEcmF3VHlwZSA9
PSBORUVEU19JTlBVVF9URVhUVVJFKSAmJiAhZW5zdXJlSW5wdXRUZXh0dXJlKCkpCi0gICAgICAg
IHx8ICFlbnN1cmVGcmFtZUJ1ZmZlcigpKQorICAgIGlmICgobV9jdXN0b21GaWx0ZXJSZW5kZXJl
ci0+cHJvZ3JhbU5lZWRzSW5wdXRUZXh0dXJlKCkgJiYgIWVuc3VyZUlucHV0VGV4dHVyZSgpKSB8
fCAhZW5zdXJlRnJhbWVCdWZmZXIoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAg
IHJldHVybiB0cnVlOwotfQogCi1ib29sIEZFQ3VzdG9tRmlsdGVyOjpwcm9ncmFtTmVlZHNJbnB1
dFRleHR1cmUoKSBjb25zdAotewotICAgIEFTU0VSVChtX2NvbXBpbGVkUHJvZ3JhbS5nZXQoKSk7
Ci0gICAgcmV0dXJuIG1fY29tcGlsZWRQcm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSAhPSAtMTsK
KyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogYm9vbCBGRUN1c3RvbUZpbHRlcjo6YXBwbHlTaGFkZXIo
KQogewotICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5ID0gbV92YWxpZGF0ZWRQ
cm9ncmFtLT5wcm9ncmFtSW5mbygpLnByb2dyYW1UeXBlKCkgPT0gUFJPR1JBTV9UWVBFX0JMRU5E
U19FTEVNRU5UX1RFWFRVUkUgPyBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKSA6IGNy
ZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisgICAgVWludDhDbGFtcGVkQXJyYXkqIGRz
dFBpeGVsQXJyYXkgPSBtX2N1c3RvbUZpbHRlclJlbmRlcmVyLT5wcmVtdWx0aXBsaWVkQWxwaGEo
KSA/IGNyZWF0ZVByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCgpIDogY3JlYXRlVW5tdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKTsKICAgICBpZiAoIWRzdFBpeGVsQXJyYXkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIApAQCAtMjM4LDcgKzE3OSw3IEBAIGJvb2wgRkVDdXN0b21GaWx0ZXI6OmFwcGx5U2hh
ZGVyKCkKICAgICBpZiAoIXJlc2l6ZUNvbnRleHRJZk5lZWRlZChuZXdDb250ZXh0U2l6ZSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wgbmVlZHNJbnB1dFRleHR1cmUgPSBwcm9n
cmFtTmVlZHNJbnB1dFRleHR1cmUoKTsKKyAgICBib29sIG5lZWRzSW5wdXRUZXh0dXJlID0gbV9j
dXN0b21GaWx0ZXJSZW5kZXJlci0+cHJvZ3JhbU5lZWRzSW5wdXRUZXh0dXJlKCk7CiAgICAgaWYg
KG5lZWRzSW5wdXRUZXh0dXJlKSB7CiAgICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4g
c3JjUGl4ZWxBcnJheSA9IGluLT5hc1VubXVsdGlwbGllZEltYWdlKGVmZmVjdERyYXdpbmdSZWN0
KTsKICAgICAgICAgdXBsb2FkSW5wdXRUZXh0dXJlKHNyY1BpeGVsQXJyYXkuZ2V0KCkpOwpAQCAt
MjUxLDI1ICsxOTIsNiBAQCBib29sIEZFQ3VzdG9tRmlsdGVyOjphcHBseVNoYWRlcigpCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRkVDdXN0b21GaWx0ZXI6OmluaXRpYWxpemVDb250ZXh0
KCkKLXsKLSAgICBBU1NFUlQoIW1fY29udGV4dC5nZXQoKSk7Ci0gICAgbV9jb250ZXh0ID0gbV9n
bG9iYWxDb250ZXh0LT5jb250ZXh0KCk7Ci0gICAgaWYgKCFtX2NvbnRleHQpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIG1f
Y29tcGlsZWRQcm9ncmFtID0gbV92YWxpZGF0ZWRQcm9ncmFtLT5jb21waWxlZFByb2dyYW0oKTsK
LQotICAgIC8vIEZJWE1FOiBTaGFyaW5nIHRoZSBtZXNoIHdvdWxkIGp1c3Qgc2F2ZSB0aGUgdGlt
ZSBuZWVkZWQgdG8gdXBsb2FkIGl0IHRvIHRoZSBHUFUsIHNvIEkgYXNzdW1lIHdlIGNvdWxkCi0g
ICAgLy8gYmVuY2htYXJrIHRoYXQgZm9yIHBlcmZvcm1hbmNlLgotICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04ODQyOQotICAgIG1fbWVzaCA9IEN1c3RvbUZp
bHRlck1lc2g6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCksIG1fbWVzaENvbHVtbnMsIG1fbWVzaFJv
d3MsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFJlY3QoMCwg
MCwgMSwgMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbWVzaFR5
cGUpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KIGJvb2wgRkVDdXN0b21GaWx0ZXI6OmVuc3Vy
ZUlucHV0VGV4dHVyZSgpCiB7CiAgICAgaWYgKCFtX2lucHV0VGV4dHVyZSkKQEAgLTMzMiw3ICsy
NTQsNyBAQCB2b2lkIEZFQ3VzdG9tRmlsdGVyOjpyZXNvbHZlTXVsdGlzYW1wbGVCdWZmZXIoKQog
CiAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoRXh0ZW5zaW9uczNEOjpSRUFEX0ZSQU1F
QlVGRkVSLCAwKTsKICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihFeHRlbnNpb25zM0Q6
OkRSQVdfRlJBTUVCVUZGRVIsIDApOwotICAgIAorCiAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtX2ZyYW1lQnVmZmVyKTsKIH0K
IApAQCAtMzQ0LDExICsyNjYsMTIgQEAgYm9vbCBGRUN1c3RvbUZpbHRlcjo6Y2FuVXNlTXVsdGlz
YW1wbGVCdWZmZXJzKCkgY29uc3QKIGJvb2wgRkVDdXN0b21GaWx0ZXI6OnJlc2l6ZU11bHRpc2Ft
cGxlQnVmZmVycyhjb25zdCBJbnRTaXplJiBuZXdDb250ZXh0U2l6ZSkKIHsKICAgICBpZiAoIW1f
dHJpZWRNdWx0aXNhbXBsZUJ1ZmZlciAmJiAhY3JlYXRlTXVsdGlzYW1wbGVCdWZmZXIoKSkKLSAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgaWYg
KCFjYW5Vc2VNdWx0aXNhbXBsZUJ1ZmZlcnMoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisg
ICAgc3RhdGljIGNvbnN0IGludCBrTWF4U2FtcGxlQ291bnQgPSA0OwogICAgIGludCBtYXhTdXBw
b3J0ZWRTYW1wbGVDb3VudCA9IDA7CiAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihFeHRlbnNp
b25zM0Q6Ok1BWF9TQU1QTEVTLCAmbWF4U3VwcG9ydGVkU2FtcGxlQ291bnQpOwogICAgIGludCBz
YW1wbGVDb3VudCA9IHN0ZDo6bWluKGtNYXhTYW1wbGVDb3VudCwgbWF4U3VwcG9ydGVkU2FtcGxl
Q291bnQpOwpAQCAtMzU5LDcgKzI4Miw3IEBAIGJvb2wgRkVDdXN0b21GaWx0ZXI6OnJlc2l6ZU11
bHRpc2FtcGxlQnVmZmVycyhjb25zdCBJbnRTaXplJiBuZXdDb250ZXh0U2l6ZSkKIAogICAgIEV4
dGVuc2lvbnMzRCogZXh0ZW5zaW9ucyA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOwogICAg
IEFTU0VSVChleHRlbnNpb25zKTsKLSAgICAKKwogICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9tdWx0aXNhbXBsZUZyYW1lQnVm
ZmVyKTsKIAogICAgIG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQz
RDo6UkVOREVSQlVGRkVSLCBtX211bHRpc2FtcGxlUmVuZGVyQnVmZmVyKTsKQEAgLTQwOSw3ICsz
MzIsNyBAQCBib29sIEZFQ3VzdG9tRmlsdGVyOjpyZXNpemVDb250ZXh0KGNvbnN0IEludFNpemUm
IG5ld0NvbnRleHRTaXplKQogICAgIG1fY29udGV4dC0+dGV4SW1hZ2UyRERpcmVjdChHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJHQkEsIG5ld0Nv
bnRleHRTaXplLndpZHRoKCksIG5ld0NvbnRleHRTaXplLmhlaWdodCgpLCAwLCBHcmFwaGljc0Nv
bnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIDApOwogI2Vu
ZGlmCiAgICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRChHcmFwaGljc0NvbnRleHQz
RDo6RlJBTUVCVUZGRVIsIEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9BVFRBQ0hNRU5UMCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIG1fZGVzdFRleHR1cmUsIDApOwotIAorCiAgICAg
Ly8gV2UgZG9uJ3QgbmVlZCB0aGUgZGVwdGggYnVmZmVyIGZvciB0aGUgdGV4dHVyZSBmcmFtZWJ1
ZmZlciwgaWYgd2UgYWxyZWFkeQogICAgIC8vIGhhdmUgYSBtdWx0aXNhbXBsZSBidWZmZXIuCiAg
ICAgaWYgKCFtdWx0aXNhbXBsZSkgewpAQCAtNDI4LDE3MSArMzUxLDExIEBAIGJvb2wgRkVDdXN0
b21GaWx0ZXI6OnJlc2l6ZUNvbnRleHQoY29uc3QgSW50U2l6ZSYgbmV3Q29udGV4dFNpemUpCiAg
ICAgfQogCiAgICAgbV9jb250ZXh0LT5iaW5kUmVuZGVyYnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpSRU5ERVJCVUZGRVIsIDApOwotICAgIAorCiAgICAgbV9jb250ZXh0U2l6ZSA9IG5ld0NvbnRl
eHRTaXplOwogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEZFQ3VzdG9tRmlsdGVyOjpiaW5k
VmVydGV4QXR0cmlidXRlKGludCBhdHRyaWJ1dGVMb2NhdGlvbiwgdW5zaWduZWQgc2l6ZSwgdW5z
aWduZWQgb2Zmc2V0KQotewotICAgIGlmIChhdHRyaWJ1dGVMb2NhdGlvbiAhPSAtMSkgewotICAg
ICAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIoYXR0cmlidXRlTG9jYXRpb24sIHNp
emUsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIG1fbWVzaC0+Ynl0ZXNQZXJWZXJ0
ZXgoKSwgb2Zmc2V0KTsKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eShhdHRyaWJ1dGVMb2NhdGlvbik7Ci0gICAgfQotfQotCi12b2lkIEZFQ3VzdG9tRmlsdGVyOjp1
bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUoaW50IGF0dHJpYnV0ZUxvY2F0aW9uKQotewotICAgIGlmIChh
dHRyaWJ1dGVMb2NhdGlvbiAhPSAtMSkKLSAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlVmVydGV4
QXR0cmliQXJyYXkoYXR0cmlidXRlTG9jYXRpb24pOwotfQotCi12b2lkIEZFQ3VzdG9tRmlsdGVy
OjpiaW5kUHJvZ3JhbUFycmF5UGFyYW1ldGVycyhpbnQgdW5pZm9ybUxvY2F0aW9uLCBDdXN0b21G
aWx0ZXJBcnJheVBhcmFtZXRlciogYXJyYXlQYXJhbWV0ZXIpCi17Ci0gICAgdW5zaWduZWQgcGFy
YW1ldGVyU2l6ZSA9IGFycmF5UGFyYW1ldGVyLT5zaXplKCk7Ci0gICAgVmVjdG9yPEdDM0RmbG9h
dD4gZmxvYXRWZWN0b3I7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcGFyYW1ldGVy
U2l6ZTsgKytpKQotICAgICAgICBmbG9hdFZlY3Rvci5hcHBlbmQoYXJyYXlQYXJhbWV0ZXItPnZh
bHVlQXQoaSkpOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KHVuaWZvcm1Mb2NhdGlvbiwg
cGFyYW1ldGVyU2l6ZSwgZmxvYXRWZWN0b3IuZGF0YSgpKTsKLX0KLQotdm9pZCBGRUN1c3RvbUZp
bHRlcjo6YmluZFByb2dyYW1OdW1iZXJQYXJhbWV0ZXJzKGludCB1bmlmb3JtTG9jYXRpb24sIEN1
c3RvbUZpbHRlck51bWJlclBhcmFtZXRlciogbnVtYmVyUGFyYW1ldGVyKQotewotICAgIHN3aXRj
aCAobnVtYmVyUGFyYW1ldGVyLT5zaXplKCkpIHsKLSAgICBjYXNlIDE6Ci0gICAgICAgIG1fY29u
dGV4dC0+dW5pZm9ybTFmKHVuaWZvcm1Mb2NhdGlvbiwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0
KDApKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAyOgotICAgICAgICBtX2NvbnRleHQtPnVu
aWZvcm0yZih1bmlmb3JtTG9jYXRpb24sIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgwKSwgbnVt
YmVyUGFyYW1ldGVyLT52YWx1ZUF0KDEpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAzOgot
ICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0zZih1bmlmb3JtTG9jYXRpb24sIG51bWJlclBhcmFt
ZXRlci0+dmFsdWVBdCgwKSwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDEpLCBudW1iZXJQYXJh
bWV0ZXItPnZhbHVlQXQoMikpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIDQ6Ci0gICAgICAg
IG1fY29udGV4dC0+dW5pZm9ybTRmKHVuaWZvcm1Mb2NhdGlvbiwgbnVtYmVyUGFyYW1ldGVyLT52
YWx1ZUF0KDApLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMSksIG51bWJlclBhcmFtZXRlci0+
dmFsdWVBdCgyKSwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDMpKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQot
Ci12b2lkIEZFQ3VzdG9tRmlsdGVyOjpiaW5kUHJvZ3JhbVRyYW5zZm9ybVBhcmFtZXRlcihpbnQg
dW5pZm9ybUxvY2F0aW9uLCBDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIqIHRyYW5zZm9y
bVBhcmFtZXRlcikKLXsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXg7Ci0gICAgaWYg
KG1fY29udGV4dFNpemUud2lkdGgoKSAmJiBtX2NvbnRleHRTaXplLmhlaWdodCgpKSB7Ci0gICAg
ICAgIC8vIFRoZSB2aWV3cG9ydCBpcyBhIGJveCB3aXRoIHRoZSBzaXplIG9mIDEgdW5pdCwgc28g
d2UgYXJlIHNjYWxsaW5nIHVwIGhlcmUgdG8gbWFrZSBzdXJlIHRoYXQgdHJhbnNsYXRpb25zIGhh
cHBlbiB1c2luZyByZWFsIHBpeGVsCi0gICAgICAgIC8vIHVuaXRzLiBBdCB0aGUgZW5kIHdlIHNj
YWxlIGJhY2sgZG93biBpbiBvcmRlciB0byBtYXAgaXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYm94
LiBOb3RlIHRoYXQgdHJhbnNmb3JtcyBjb21lIGluIHJldmVyc2Ugb3JkZXIsIGJlY2F1c2UgaXQg
aXMgCi0gICAgICAgIC8vIHN1cHBvc2VkIHRvIG11bHRpcGx5IHRvIHRoZSBsZWZ0IG9mIHRoZSBj
b29yZGluYXRlcyBvZiB0aGUgdmVydGljZXMuCi0gICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgb3Jp
Z2luICgwLCAwKSBvZiB0aGUgdmlld3BvcnQgaXMgaW4gdGhlIG1pZGRsZSBvZiB0aGUgY29udGV4
dCwgc28gdGhlcmUncyBubyBuZWVkIHRvIGNoYW5nZSB0aGUgb3JpZ2luIG9mIHRoZSB0cmFuc2Zv
cm0KLSAgICAgICAgLy8gaW4gb3JkZXIgdG8gcm90YXRlIGFyb3VuZCB0aGUgbWlkZGxlIG9mIG1l
c2guCi0gICAgICAgIG1hdHJpeC5zY2FsZTNkKDEuMCAvIG1fY29udGV4dFNpemUud2lkdGgoKSwg
MS4wIC8gbV9jb250ZXh0U2l6ZS5oZWlnaHQoKSwgMSk7Ci0gICAgICAgIHRyYW5zZm9ybVBhcmFt
ZXRlci0+YXBwbHlUcmFuc2Zvcm0obWF0cml4LCBtX2NvbnRleHRTaXplKTsKLSAgICAgICAgbWF0
cml4LnNjYWxlM2QobV9jb250ZXh0U2l6ZS53aWR0aCgpLCBtX2NvbnRleHRTaXplLmhlaWdodCgp
LCAxKTsKLSAgICB9Ci0gICAgZmxvYXQgZ2xNYXRyaXhbMTZdOwotICAgIG1hdHJpeC50b0NvbHVt
bk1ham9yRmxvYXRBcnJheShnbE1hdHJpeCk7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4
NGZ2KHVuaWZvcm1Mb2NhdGlvbiwgMSwgZmFsc2UsICZnbE1hdHJpeFswXSk7Ci19Ci0KLXZvaWQg
RkVDdXN0b21GaWx0ZXI6OmJpbmRQcm9ncmFtUGFyYW1ldGVycygpCi17Ci0gICAgLy8gRklYTUU6
IEZpbmQgYSB3YXkgdG8gcmVzZXQgdW5pZm9ybXMgdGhhdCBhcmUgbm90IHNwZWNpZmllZCBpbiBD
U1MuIFRoaXMgaXMgbmVlZGVkIHRvIGF2b2lkIHVzaW5nIHZhbHVlcwotICAgIC8vIHNldCBieSBv
dGhlciBwcmV2aW91cyByZW5kZXJlZCBmaWx0ZXJzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NjQ0MAotICAgIAotICAgIHNpemVfdCBwYXJhbWV0ZXJz
U2l6ZSA9IG1fcGFyYW1ldGVycy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBw
YXJhbWV0ZXJzU2l6ZTsgKytpKSB7Ci0gICAgICAgIEN1c3RvbUZpbHRlclBhcmFtZXRlciogcGFy
YW1ldGVyID0gbV9wYXJhbWV0ZXJzLmF0KGkpLmdldCgpOwotICAgICAgICBpbnQgdW5pZm9ybUxv
Y2F0aW9uID0gbV9jb21waWxlZFByb2dyYW0tPnVuaWZvcm1Mb2NhdGlvbkJ5TmFtZShwYXJhbWV0
ZXItPm5hbWUoKSk7Ci0gICAgICAgIGlmICh1bmlmb3JtTG9jYXRpb24gPT0gLTEpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgc3dpdGNoIChwYXJhbWV0ZXItPnBhcmFtZXRlclR5cGUo
KSkgewotICAgICAgICBjYXNlIEN1c3RvbUZpbHRlclBhcmFtZXRlcjo6QVJSQVk6Ci0gICAgICAg
ICAgICBiaW5kUHJvZ3JhbUFycmF5UGFyYW1ldGVycyh1bmlmb3JtTG9jYXRpb24sIHN0YXRpY19j
YXN0PEN1c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyKj4ocGFyYW1ldGVyKSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBDdXN0b21GaWx0ZXJQYXJhbWV0ZXI6Ok5VTUJFUjoKLSAg
ICAgICAgICAgIGJpbmRQcm9ncmFtTnVtYmVyUGFyYW1ldGVycyh1bmlmb3JtTG9jYXRpb24sIHN0
YXRpY19jYXN0PEN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlcio+KHBhcmFtZXRlcikpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyOjpUUkFO
U0ZPUk06Ci0gICAgICAgICAgICBiaW5kUHJvZ3JhbVRyYW5zZm9ybVBhcmFtZXRlcih1bmlmb3Jt
TG9jYXRpb24sIHN0YXRpY19jYXN0PEN1c3RvbUZpbHRlclRyYW5zZm9ybVBhcmFtZXRlcio+KHBh
cmFtZXRlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgRkVDdXN0b21GaWx0ZXI6OmJpbmRQcm9ncmFtQW5kQnVmZmVycyhQbGF0Zm9ybTNET2JqZWN0
IGlucHV0VGV4dHVyZSkKLXsKLSAgICBBU1NFUlQobV9jb21waWxlZFByb2dyYW0tPmlzSW5pdGlh
bGl6ZWQoKSk7Ci0KLSAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0obV9jb21waWxlZFByb2dyYW0t
PnByb2dyYW0oKSk7Ci0gICAgCi0gICAgaWYgKHByb2dyYW1OZWVkc0lucHV0VGV4dHVyZSgpKSB7
Ci0gICAgICAgIC8vIFdlIHNob3VsZCBiZSBiaW5kaW5nIHRoZSBET00gZWxlbWVudCB0ZXh0dXJl
IHNhbXBsZXIgb25seSBpZiB0aGUgYXV0aG9yIGlzIHVzaW5nIHRoZSBDU1MgbWl4IGZ1bmN0aW9u
LgotICAgICAgICBBU1NFUlQobV92YWxpZGF0ZWRQcm9ncmFtLT5wcm9ncmFtSW5mbygpLnByb2dy
YW1UeXBlKCkgPT0gUFJPR1JBTV9UWVBFX0JMRU5EU19FTEVNRU5UX1RFWFRVUkUpOwotICAgICAg
ICBBU1NFUlQobV9jb21waWxlZFByb2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpICE9IC0xKTsKLQot
ICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkUwKTsKLSAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMWkobV9jb21waWxlZFByb2dyYW0tPnNh
bXBsZXJMb2NhdGlvbigpLCAwKTsKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgaW5wdXRUZXh0dXJlKTsKLSAgICAgICAgbV9jb250
ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFS
KTsKLSAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGlj
c0NvbnRleHQzRDo6TElORUFSKTsKLSAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9X
UkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICAgICAgbV9jb250
ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19F
REdFKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKG1fY29tcGlsZWRQcm9ncmFtLT5wcm9qZWN0aW9u
TWF0cml4TG9jYXRpb24oKSAhPSAtMSkgewotICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBw
cm9qZWN0aW9uTWF0cml4OyAKLSAgICAgICAgb3J0aG9nb25hbFByb2plY3Rpb25NYXRyaXgocHJv
amVjdGlvbk1hdHJpeCwgLTAuNSwgMC41LCAtMC41LCAwLjUpOwotICAgICAgICBmbG9hdCBnbFBy
b2plY3Rpb25NYXRyaXhbMTZdOwotICAgICAgICBwcm9qZWN0aW9uTWF0cml4LnRvQ29sdW1uTWFq
b3JGbG9hdEFycmF5KGdsUHJvamVjdGlvbk1hdHJpeCk7Ci0gICAgICAgIG1fY29udGV4dC0+dW5p
Zm9ybU1hdHJpeDRmdihtX2NvbXBpbGVkUHJvZ3JhbS0+cHJvamVjdGlvbk1hdHJpeExvY2F0aW9u
KCksIDEsIGZhbHNlLCAmZ2xQcm9qZWN0aW9uTWF0cml4WzBdKTsKLSAgICB9Ci0KLSAgICBBU1NF
UlQobV9tZXNoQ29sdW1ucyk7Ci0gICAgQVNTRVJUKG1fbWVzaFJvd3MpOwotCi0gICAgaWYgKG1f
Y29tcGlsZWRQcm9ncmFtLT5tZXNoU2l6ZUxvY2F0aW9uKCkgIT0gLTEpCi0gICAgICAgIG1fY29u
dGV4dC0+dW5pZm9ybTJmKG1fY29tcGlsZWRQcm9ncmFtLT5tZXNoU2l6ZUxvY2F0aW9uKCksIG1f
bWVzaENvbHVtbnMsIG1fbWVzaFJvd3MpOwotCi0gICAgaWYgKG1fY29tcGlsZWRQcm9ncmFtLT50
aWxlU2l6ZUxvY2F0aW9uKCkgIT0gLTEpCi0gICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKG1f
Y29tcGlsZWRQcm9ncmFtLT50aWxlU2l6ZUxvY2F0aW9uKCksIDEuMCAvIG1fbWVzaENvbHVtbnMs
IDEuMCAvIG1fbWVzaFJvd3MpOwotCi0gICAgaWYgKG1fY29tcGlsZWRQcm9ncmFtLT5tZXNoQm94
TG9jYXRpb24oKSAhPSAtMSkgewotICAgICAgICAvLyBGSVhNRTogVGhpcyB3aWxsIGNoYW5nZSB3
aGVuIGZpbHRlciBtYXJnaW5zIHdpbGwgYmUgaW1wbGVtZW50ZWQsCi0gICAgICAgIC8vIHNlZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzE0MDAKLSAgICAgICAgbV9j
b250ZXh0LT51bmlmb3JtNGYobV9jb21waWxlZFByb2dyYW0tPm1lc2hCb3hMb2NhdGlvbigpLCAt
MC41LCAtMC41LCAxLjAsIDEuMCk7Ci0gICAgfQotCi0gICAgaWYgKG1fY29tcGlsZWRQcm9ncmFt
LT5zYW1wbGVyU2l6ZUxvY2F0aW9uKCkgIT0gLTEpCi0gICAgICAgIG1fY29udGV4dC0+dW5pZm9y
bTJmKG1fY29tcGlsZWRQcm9ncmFtLT5zYW1wbGVyU2l6ZUxvY2F0aW9uKCksIG1fY29udGV4dFNp
emUud2lkdGgoKSwgbV9jb250ZXh0U2l6ZS5oZWlnaHQoKSk7Ci0gICAgCi0gICAgbV9jb250ZXh0
LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fbWVzaC0+dmVy
dGljZXNCdWZmZXJPYmplY3QoKSk7Ci0gICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNz
Q29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUiwgbV9tZXNoLT5lbGVtZW50c0J1ZmZlck9i
amVjdCgpKTsKLQotICAgIGJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPnBv
c2l0aW9uQXR0cmliTG9jYXRpb24oKSwgUG9zaXRpb25BdHRyaWJTaXplLCBQb3NpdGlvbkF0dHJp
Yk9mZnNldCk7Ci0gICAgYmluZFZlcnRleEF0dHJpYnV0ZShtX2NvbXBpbGVkUHJvZ3JhbS0+dGV4
QXR0cmliTG9jYXRpb24oKSwgVGV4QXR0cmliU2l6ZSwgVGV4QXR0cmliT2Zmc2V0KTsKLSAgICAv
LyBGSVhNRTogR2V0IHJpZCBvZiB0aGUgaW50ZXJuYWwgdGV4IGNvb3JkIGF0dHJpYnV0ZSAiY3Nz
X2FfdGV4Q29vcmQiLiAKLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9OTQzNTgKLSAgICBiaW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFtLT5p
bnRlcm5hbFRleENvb3JkQXR0cmliTG9jYXRpb24oKSwgVGV4QXR0cmliU2l6ZSwgVGV4QXR0cmli
T2Zmc2V0KTsKLSAgICBiaW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFtLT5tZXNo
QXR0cmliTG9jYXRpb24oKSwgTWVzaEF0dHJpYlNpemUsIE1lc2hBdHRyaWJPZmZzZXQpOwotICAg
IGlmIChtX21lc2hUeXBlID09IEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6REVUQUNIRUQpCi0gICAg
ICAgIGJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPnRyaWFuZ2xlQXR0cmli
TG9jYXRpb24oKSwgVHJpYW5nbGVBdHRyaWJTaXplLCBUcmlhbmdsZUF0dHJpYk9mZnNldCk7Ci0g
ICAgCi0gICAgYmluZFByb2dyYW1QYXJhbWV0ZXJzKCk7Ci19Ci0KLXZvaWQgRkVDdXN0b21GaWx0
ZXI6OnVuYmluZFZlcnRleEF0dHJpYnV0ZXMoKQotewotICAgIHVuYmluZFZlcnRleEF0dHJpYnV0
ZShtX2NvbXBpbGVkUHJvZ3JhbS0+cG9zaXRpb25BdHRyaWJMb2NhdGlvbigpKTsKLSAgICB1bmJp
bmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPnRleEF0dHJpYkxvY2F0aW9uKCkp
OwotICAgIHVuYmluZFZlcnRleEF0dHJpYnV0ZShtX2NvbXBpbGVkUHJvZ3JhbS0+aW50ZXJuYWxU
ZXhDb29yZEF0dHJpYkxvY2F0aW9uKCkpOwotICAgIHVuYmluZFZlcnRleEF0dHJpYnV0ZShtX2Nv
bXBpbGVkUHJvZ3JhbS0+bWVzaEF0dHJpYkxvY2F0aW9uKCkpOwotICAgIGlmIChtX21lc2hUeXBl
ID09IEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6REVUQUNIRUQpCi0gICAgICAgIHVuYmluZFZlcnRl
eEF0dHJpYnV0ZShtX2NvbXBpbGVkUHJvZ3JhbS0+dHJpYW5nbGVBdHRyaWJMb2NhdGlvbigpKTsK
LX0KLQogdm9pZCBGRUN1c3RvbUZpbHRlcjo6ZHVtcCgpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmgK
aW5kZXggMDlkYTVmMWM3Zjc0NjY4MDllOTNhOGI4ODRmZDJhMWQ1NmI4ZTFiNC4uOTJiMzExOTc4
ODY2OTVlZTM4MDAxZGU3ODE2OTExYjE0YTEwZDgyNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuaApAQCAt
NDQsMjMgKzQ0LDE1IEBAIGNsYXNzIFVpbnQ4Q2xhbXBlZEFycmF5OwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIENhY2hlZFNoYWRlcjsKLWNsYXNzIEN1c3RvbUZpbHRlckFycmF5UGFy
YW1ldGVyOwotY2xhc3MgQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtOwotY2xhc3MgQ3VzdG9t
RmlsdGVyR2xvYmFsQ29udGV4dDsKLWNsYXNzIEN1c3RvbUZpbHRlck1lc2g7Ci1jbGFzcyBDdXN0
b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXI7Ci1jbGFzcyBDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJh
bWV0ZXI7CitjbGFzcyBDdXN0b21GaWx0ZXJSZW5kZXJlcjsKIGNsYXNzIEN1c3RvbUZpbHRlclZh
bGlkYXRlZFByb2dyYW07Ci1jbGFzcyBEcmF3aW5nQnVmZmVyOwogY2xhc3MgR3JhcGhpY3NDb250
ZXh0M0Q7CiBjbGFzcyBJbnRTaXplOwogCiBjbGFzcyBGRUN1c3RvbUZpbHRlciA6IHB1YmxpYyBG
aWx0ZXJFZmZlY3QgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZFQ3VzdG9tRmls
dGVyPiBjcmVhdGUoRmlsdGVyKiwgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCosIFBhc3NSZWZQ
dHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4sIGNvbnN0IEN1c3RvbUZpbHRlclBhcmFt
ZXRlckxpc3QmLAotICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1lc2hSb3dzLCB1bnNpZ25l
ZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoQm94VHlwZSwgCi0gICAg
ICAgICAgICAgICAgICAgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSk7CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8RkVDdXN0b21GaWx0ZXI+IGNyZWF0ZShGaWx0ZXIqLCBQYXNzUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9n
cmFtPiwgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYsCisgICAgICAgIHVuc2lnbmVk
IG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpN
ZXNoQm94VHlwZSwgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CiAgICAgdmlydHVhbCB2b2lkIGR1bXAo
KTsKQEAgLTY4LDIzICs2MCwxNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBUZXh0U3RyZWFtJiBl
eHRlcm5hbFJlcHJlc2VudGF0aW9uKFRleHRTdHJlYW0mLCBpbnQgaW5kZW50aW9uKSBjb25zdDsK
IAogcHJpdmF0ZToKLSAgICBGRUN1c3RvbUZpbHRlcihGaWx0ZXIqLCBDdXN0b21GaWx0ZXJHbG9i
YWxDb250ZXh0KiwgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiwgY29u
c3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYsCi0gICAgICAgICAgICAgICAgICAgdW5zaWdu
ZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1lc2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJPcGVyYXRpb246
Ok1lc2hCb3hUeXBlLCAKLSAgICAgICAgICAgICAgICAgICBDdXN0b21GaWx0ZXJPcGVyYXRpb246
Ok1lc2hUeXBlKTsKKyAgICBGRUN1c3RvbUZpbHRlcihGaWx0ZXIqLCBQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiwgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiwg
Y29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYsCisgICAgICAgIHVuc2lnbmVkIG1lc2hS
b3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoQm94
VHlwZSwgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSk7CiAgICAgfkZFQ3VzdG9tRmls
dGVyKCk7Ci0gICAgCisKICAgICBib29sIGFwcGx5U2hhZGVyKCk7CiAgICAgdm9pZCBjbGVhclNo
YWRlclJlc3VsdCgpOwogICAgIGJvb2wgaW5pdGlhbGl6ZUNvbnRleHQoKTsKLSAgICAKLSAgICBl
bnVtIEN1c3RvbUZpbHRlckRyYXdUeXBlIHsKLSAgICAgICAgTkVFRFNfSU5QVVRfVEVYVFVSRSwK
LSAgICAgICAgTk9fSU5QVVRfVEVYVFVSRQotICAgIH07Ci0gICAgYm9vbCBwcmVwYXJlRm9yRHJh
d2luZyhDdXN0b21GaWx0ZXJEcmF3VHlwZSA9IE5FRURTX0lOUFVUX1RFWFRVUkUpOworCisgICAg
Ym9vbCBwcmVwYXJlRm9yRHJhd2luZygpOwogCiAgICAgdm9pZCBkcmF3RmlsdGVyTWVzaChQbGF0
Zm9ybTNET2JqZWN0IGlucHV0VGV4dHVyZSk7Ci0gICAgYm9vbCBwcm9ncmFtTmVlZHNJbnB1dFRl
eHR1cmUoKSBjb25zdDsKICAgICBib29sIGVuc3VyZUlucHV0VGV4dHVyZSgpOwogICAgIHZvaWQg
dXBsb2FkSW5wdXRUZXh0dXJlKFVpbnQ4Q2xhbXBlZEFycmF5KiBzcmNQaXhlbEFycmF5KTsKICAg
ICBib29sIHJlc2l6ZUNvbnRleHRJZk5lZWRlZChjb25zdCBJbnRTaXplJik7CkBAIC05OSwyMiAr
ODUsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgZW5zdXJlRnJhbWVCdWZmZXIoKTsKICAgICB2b2lk
IGRlbGV0ZVJlbmRlckJ1ZmZlcnMoKTsKIAotICAgIHZvaWQgYmluZFZlcnRleEF0dHJpYnV0ZShp
bnQgYXR0cmlidXRlTG9jYXRpb24sIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIG9mZnNldCk7Ci0g
ICAgdm9pZCB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUoaW50IGF0dHJpYnV0ZUxvY2F0aW9uKTsKLSAg
ICB2b2lkIGJpbmRQcm9ncmFtQXJyYXlQYXJhbWV0ZXJzKGludCB1bmlmb3JtTG9jYXRpb24sIEN1
c3RvbUZpbHRlckFycmF5UGFyYW1ldGVyKik7Ci0gICAgdm9pZCBiaW5kUHJvZ3JhbU51bWJlclBh
cmFtZXRlcnMoaW50IHVuaWZvcm1Mb2NhdGlvbiwgQ3VzdG9tRmlsdGVyTnVtYmVyUGFyYW1ldGVy
Kik7Ci0gICAgdm9pZCBiaW5kUHJvZ3JhbVRyYW5zZm9ybVBhcmFtZXRlcihpbnQgdW5pZm9ybUxv
Y2F0aW9uLCBDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIqKTsKLSAgICB2b2lkIGJpbmRQ
cm9ncmFtUGFyYW1ldGVycygpOwotICAgIHZvaWQgYmluZFByb2dyYW1BbmRCdWZmZXJzKFBsYXRm
b3JtM0RPYmplY3QgaW5wdXRUZXh0dXJlKTsKLSAgICB2b2lkIHVuYmluZFZlcnRleEF0dHJpYnV0
ZXMoKTsKLSAgICAKLSAgICAvLyBObyBuZWVkIHRvIGtlZXAgYSByZWZlcmVuY2UgaGVyZS4gSXQg
aXMgb3duZWQgYnkgdGhlIFJlbmRlclZpZXcuCi0gICAgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4
dCogbV9nbG9iYWxDb250ZXh0OwotICAgIAogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
bV9jb250ZXh0OwotICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiBtX3Zh
bGlkYXRlZFByb2dyYW07Ci0gICAgUmVmUHRyPEN1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbT4g
bV9jb21waWxlZFByb2dyYW07Ci0gICAgUmVmUHRyPEN1c3RvbUZpbHRlck1lc2g+IG1fbWVzaDsK
KyAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyUmVuZGVyZXI+IG1fY3VzdG9tRmlsdGVyUmVuZGVyZXI7
CiAgICAgSW50U2l6ZSBtX2NvbnRleHRTaXplOwogCiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX2lu
cHV0VGV4dHVyZTsKQEAgLTEyNiwxMiArOTgsNiBAQCBwcml2YXRlOgogICAgIFBsYXRmb3JtM0RP
YmplY3QgbV9tdWx0aXNhbXBsZUZyYW1lQnVmZmVyOwogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9t
dWx0aXNhbXBsZVJlbmRlckJ1ZmZlcjsKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbXVsdGlzYW1w
bGVEZXB0aEJ1ZmZlcjsKLQotICAgIEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QgbV9wYXJhbWV0
ZXJzOwotCi0gICAgdW5zaWduZWQgbV9tZXNoUm93czsKLSAgICB1bnNpZ25lZCBtX21lc2hDb2x1
bW5zOwotICAgIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaFR5cGUgbV9tZXNoVHlwZTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCmluZGV4IGZkMDdmNGE4OGRiNWMyMjEwZGI3Mzdh
ZDE3MzVhY2EyMWMxMzI1MzYuLjJkN2Q5ODYyNjQ5NjIyNmE1NzNjN2Y1ZjA2NTk3YmQwZmNjNjIy
ODIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5k
ZXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVmZmVjdFJlbmRl
cmVyLmNwcApAQCAtNDQsOCArNDQsOCBAQAogCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKSAmJiBV
U0UoM0RfR1JBUEhJQ1MpCiAjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dC5oIgot
I2luY2x1ZGUgIkN1c3RvbUZpbHRlclByb2dyYW0uaCIKICNpbmNsdWRlICJDdXN0b21GaWx0ZXJP
cGVyYXRpb24uaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJQcm9ncmFtLmgiCiAjaW5jbHVkZSAi
Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oIgogI2luY2x1ZGUgIkZFQ3VzdG9tRmlsdGVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgpAQCAtOTYsMjAgKzk2LDIyIEBAIHN0YXRpYyBQ
YXNzUmVmUHRyPEZFQ3VzdG9tRmlsdGVyPiBjcmVhdGVDdXN0b21GaWx0ZXJFZmZlY3QoRmlsdGVy
KiBmaWx0ZXIsIERvY3VtCiB7CiAgICAgaWYgKCFpc0NTU0N1c3RvbUZpbHRlckVuYWJsZWQoZG9j
dW1lbnQpKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKKwogICAgIFJlZlB0cjxDdXN0b21GaWx0
ZXJQcm9ncmFtPiBwcm9ncmFtID0gb3BlcmF0aW9uLT5wcm9ncmFtKCk7CiAgICAgaWYgKCFwcm9n
cmFtLT5pc0xvYWRlZCgpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIEN1c3RvbUZpbHRlckds
b2JhbENvbnRleHQqIGdsb2JhbENvbnRleHQgPSBkb2N1bWVudC0+cmVuZGVyVmlldygpLT5jdXN0
b21GaWx0ZXJHbG9iYWxDb250ZXh0KCk7CiAgICAgZ2xvYmFsQ29udGV4dC0+cHJlcGFyZUNvbnRl
eHRJZk5lZWRlZChkb2N1bWVudC0+dmlldygpLT5ob3N0V2luZG93KCkpOworICAgIGlmICghZ2xv
YmFsQ29udGV4dC0+Y29udGV4dCgpKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIFJlZlB0cjxD
dXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtPiB2YWxpZGF0ZWRQcm9ncmFtID0gZ2xvYmFsQ29u
dGV4dC0+Z2V0VmFsaWRhdGVkUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSW5mbygpKTsKICAgICBp
ZiAoIXZhbGlkYXRlZFByb2dyYW0tPmlzSW5pdGlhbGl6ZWQoKSkKICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICByZXR1cm4gRkVDdXN0b21GaWx0ZXI6OmNyZWF0ZShmaWx0ZXIsIGdsb2JhbENvbnRl
eHQsIHZhbGlkYXRlZFByb2dyYW0sIG9wZXJhdGlvbi0+cGFyYW1ldGVycygpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbi0+bWVzaFJvd3MoKSwgb3BlcmF0aW9u
LT5tZXNoQ29sdW1ucygpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJh
dGlvbi0+bWVzaEJveFR5cGUoKSwgb3BlcmF0aW9uLT5tZXNoVHlwZSgpKTsKKyAgICByZXR1cm4g
RkVDdXN0b21GaWx0ZXI6OmNyZWF0ZShmaWx0ZXIsIGdsb2JhbENvbnRleHQtPmNvbnRleHQoKSwg
dmFsaWRhdGVkUHJvZ3JhbS5yZWxlYXNlKCksIG9wZXJhdGlvbi0+cGFyYW1ldGVycygpLAorICAg
ICAgICBvcGVyYXRpb24tPm1lc2hSb3dzKCksIG9wZXJhdGlvbi0+bWVzaENvbHVtbnMoKSwgb3Bl
cmF0aW9uLT5tZXNoQm94VHlwZSgpLCBvcGVyYXRpb24tPm1lc2hUeXBlKCkpOwogfQogI2VuZGlm
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>171422</attachid>
            <date>2012-10-30 05:07:23 -0700</date>
            <delta_ts>2012-10-30 06:10:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-98989-20121030210514.patch</filename>
            <type>text/plain</type>
            <size>57049</size>
            <attacher name="Dongseong Hwang">dongseong.hwang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMyODk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTY1NWUwYjU1NDM5YzA3
NjdmODI2Y2E5MjExYjNmOThjMjc3MzM1Zi4uNmIxNTc4NjM3YWYzNTY5OTZmN2FhYTM3Y2U4MmY4
OGM2OTgxYjJhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDEyLTEwLTMwICBIdWFu
ZyBEb25nc3VuZyAgPGx1eHRlbGxhQGNvbXBhbnkxMDAubmV0PgorCisgICAgICAgIFtDU1MgU2hh
ZGVyc10gQWRkIEN1c3RvbUZpbHRlclJlbmRlcmVyIHRvIHJldXNlIHRoaXMgY2xhc3MgYnkgQWNj
ZWxlcmF0ZWQgQ29tcG9zaXRpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05ODk4OQorCisgICAgICAgIFJldmlld2VkIGJ5IERlYW4gSmFja3Nvbi4K
KworICAgICAgICBFeHRyYWN0IEN1c3RvbUZpbHRlclJlbmRlcmVyIGNsYXNzIGZyb20gdGhlIHJl
bmRlcmluZyBwYXJ0IG9mIEZFQ3VzdG9tRmlsdGVyLgorICAgICAgICBGRUN1c3RvbUZpbHRlciBu
b3cgcGxheXMgYSByb2xlIGluIGV4dGVuZGluZyBGaWx0ZXJFZmZlY3QgYW5kIGRlbGVnYXRlcwor
ICAgICAgICByZW5kZXJpbmcgQ1NTIFNoYWRlcnMgdG8gQ3VzdG9tRmlsdGVyUmVuZGVyZXIuCisK
KyAgICAgICAgQ3VzdG9tRmlsdGVyUmVuZGVyZXIgZG9lcyBub3Qga25vdyBGaWx0ZXIgYW5kIEZp
bHRlckVmZmVjdC4gV2UgY2FuCisgICAgICAgIGNyZWF0ZSBhIEN1c3RvbUZpbHRlclJlbmRlcmVy
IGluc3RhbmNlIHdpdGggb25seSBHcmFwaGljc0NvbnRleHQzRCBhbmQKKyAgICAgICAgQ3VzdG9t
RmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS4gSXQgbWVhbnMgdGhhdCBBY2NlbGVyYXRlZCBDb21wb3Np
dGluZyBjYW4KKyAgICAgICAgY3JlYXRlIHRoZSBDdXN0b21GaWx0ZXJSZW5kZXJlciBpbnN0YW5j
ZSBpZiBBY2NlbGVyYXRlZCBDb21wb3NpdGluZyBoYXMKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0
M0QgYW5kIEN1c3RvbUZpbHRlck9wZXJhdGlvbiwgYW5kIGl0IGlzIGFscmVhZHkgcG9zc2libGUu
CisKKyAgICAgICAgVGhpcyBwYXRjaCBwcmVwYXJlcyB0byBlbmFibGUgQ1NTIFNoYWRlcnMgb24g
QWNjZWxlcmF0ZWQgQ29tcG9zaXRpbmcuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBDb3ZlcmVk
IGJ5IGNzczMvZmlsdGVycy9jdXN0b20KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAg
ICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3By
b2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6b3J0aG9nb25hbFBy
b2plY3Rpb25NYXRyaXgpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUmVuZGVyZXI6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJSZW5kZXJlcjo6Q3VzdG9t
RmlsdGVyUmVuZGVyZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUmVuZGVyZXI6
On5DdXN0b21GaWx0ZXJSZW5kZXJlcik6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJS
ZW5kZXJlcjo6cHJlbXVsdGlwbGllZEFscGhhKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZp
bHRlclJlbmRlcmVyOjpwcm9ncmFtTmVlZHNJbnB1dFRleHR1cmUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q3VzdG9tRmlsdGVyUmVuZGVyZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3Rv
bUZpbHRlclJlbmRlcmVyOjpwcmVwYXJlRm9yRHJhd2luZyk6CisgICAgICAgIChXZWJDb3JlOjpD
dXN0b21GaWx0ZXJSZW5kZXJlcjo6aW5pdGlhbGl6ZUNvbXBpbGVkUHJvZ3JhbUlmTmVlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVyOjppbml0aWFsaXplTWVzaElm
TmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVyOjpiaW5kVmVy
dGV4QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVyOjp1
bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUmVu
ZGVyZXI6OmJpbmRQcm9ncmFtQXJyYXlQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkN1
c3RvbUZpbHRlclJlbmRlcmVyOjpiaW5kUHJvZ3JhbU51bWJlclBhcmFtZXRlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUmVuZGVyZXI6OmJpbmRQcm9ncmFtVHJhbnNmb3JtUGFy
YW1ldGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkN1c3RvbUZpbHRlclJlbmRlcmVyOjpiaW5kUHJv
Z3JhbVBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q3VzdG9tRmlsdGVyUmVuZGVyZXI6
OmJpbmRQcm9ncmFtQW5kQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpDdXN0b21GaWx0ZXJS
ZW5kZXJlcjo6dW5iaW5kVmVydGV4QXR0cmlidXRlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmguCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKEN1c3RvbUZpbHRlclJlbmRlcmVyKToKKyAgICAgICAg
ICBDdXN0b21GaWx0ZXJSZW5kZXJlciByZW5kZXJzIGN1c3RvbSBmaWx0ZXJzIGluIEdQVSB1c2lu
ZyBhCisgICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0QuCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUN1
c3RvbUZpbHRlcjo6RkVDdXN0b21GaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6RkVDdXN0b21G
aWx0ZXI6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6ZGVsZXRl
UmVuZGVyQnVmZmVycyk6CisgICAgICAgIChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6ZHJhd0Zp
bHRlck1lc2gpOgorICAgICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OnByZXBhcmVGb3JE
cmF3aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ3VzdG9tRmlsdGVyOjphcHBseVNoYWRlcik6
CisgICAgICAgIChXZWJDb3JlOjpGRUN1c3RvbUZpbHRlcjo6cmVzb2x2ZU11bHRpc2FtcGxlQnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZFQ3VzdG9tRmlsdGVyOjpyZXNpemVNdWx0aXNhbXBs
ZUJ1ZmZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6RkVDdXN0b21GaWx0ZXI6OnJlc2l6ZUNvbnRl
eHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIu
aDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRkVDdXN0b21GaWx0ZXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVDdXN0b21GaWx0ZXJFZmZlY3QpOgorCiAyMDEyLTEwLTMwICBFdWdlbmUgS2x5dWNo
bmlrb3YgIDxldXN0YXMuYnVnQGdtYWlsLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBU
aW1lbGluZTogcHJvbW90ZSAiY3B1IGFjdGl2aXR5IiBvdXQgb2YgZXhwZXJpbWVudApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAppbmRleCBmOGFlOWJkZTA5YjJhYzU2N2EzZThjNjk3YTNmMmRkMzdkZDZlYjRi
Li45N2NlYzRiZWRmZWFlZGJiNDQxN2IzMGUzNDFhN2JlYTBiYTZhNWU2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dApAQCAtMTkxNCw2ICsxOTE0LDcgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdC5jcHAKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uY3BwCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5jcHAKKyAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmNwcAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRGlzdGFudExpZ2h0U291cmNlLmNwcAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpp
bmRleCBiMGJkZDJlYmFiNzNiYTlmYjI2MTI5MzUxOTJjYjNmNTQ5MjM3MDNiLi5lMTA2MzRhNTMy
MmUzZTMzNGNhMTk3MWQwNjEzOWIwM2NiOWYyY2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0KQEAgLTQzNDIsNiArNDM0Miw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVy
UHJvZ3JhbUluZm8uY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0N1c3RvbUZpbHRlclByb2dyYW1JbmZvLmggXAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmggXAog
CVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyQ29t
cGlsZWRQcm9ncmFtLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9DdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW0uaCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIuaCBc
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQppbmRleCBkMTlkNWM5MDdmZjY4MjgwZjA4YzlhMDNlNTJhNTEwYWFlNTc5OGFl
Li42Yjg1ZTM1MTgzNmYwYzVlZTBkOTBiMDY0YjdiOTFiZDgyNjJhMGNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkK
QEAgLTIwODEsNiArMjA4MSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdC5oIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW0uaCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5oIFwKKyAgICBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmggXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyLmggXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5oIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuaCBcCkBAIC0zNTAwLDYgKzM1MDEs
NyBAQCBlbmFibGU/KEZJTFRFUlMpIHsKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9DdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW0uY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJNZXNoLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyTWVzaEdlbmVyYXRvci5jcHAgXAorICAgICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmNwcCBcCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3Jh
bS5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0Rpc3RhbnRMaWdodFNv
dXJjZS5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQmxlbmQuY3Bw
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQppbmRleCBhNTJhNDMxY2Q4ZjI4OTllOTdiMjY2MzQ5MjM0NzhiNGZh
MmIxMTcwLi5iMzJkNThjZTc3YmRlNmJjNDI3Y2Y3NjBhYmY5NTM0ZWE2ZDQ4MTgxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCkBAIC00OTgzLDYgKzQ5ODMsOCBAQAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oJywKICAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW1JbmZvLmNwcCcsCiAgICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJQcm9ncmFtSW5m
by5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRl
clJlbmRlcmVyLmNwcCcsCisgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9D
dXN0b21GaWx0ZXJSZW5kZXJlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0N1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbS5jcHAnLAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyQ29tcGlsZWRQcm9ncmFtLmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyVmFsaWRh
dGVkUHJvZ3JhbS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagppbmRleCAyODBiZTJlNTI0YWViZDA0Mzk3ODI0MjIzOTVlYzNiMGZhMDFlMzFiLi4z
ZWQzYTJhNzNkMGM0ZDM0MTFjNTU4NzkyZThhNWUyZWM0MjU2ZDY4IDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagpAQCAtMzE5NTMsNiArMzE5NTMsMTQg
QEAKIAkJCQkJCT4KIAkJCQkJPC9GaWxlPgogCQkJCQk8RmlsZQorCQkJCQkJUmVsYXRpdmVQYXRo
PSIuLlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEN1c3RvbUZpbHRlclJlbmRlcmVyLmNwcCIK
KwkJCQkJCT4KKwkJCQkJPC9GaWxlPgorCQkJCQk8RmlsZQorCQkJCQkJUmVsYXRpdmVQYXRoPSIu
LlxwbGF0Zm9ybVxncmFwaGljc1xmaWx0ZXJzXEN1c3RvbUZpbHRlclJlbmRlcmVyLmgiCisJCQkJ
CQk+CisJCQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUKIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxh
dGZvcm1cZ3JhcGhpY3NcZmlsdGVyc1xDdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW0uY3BwIgog
CQkJCQkJPgogCQkJCQk8L0ZpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYTc2MmY4ZTFjMGI0NzgzMDc4MjlhY2MwOWFjMjY4
MjRhZWM1MGI4YS4uMThkYTYzNTUzZGRhMDhkMDUxODBhOGY5MjYwZmUzMjVkMWQxMTc0NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtMTQ5NCw2ICsxNDk0LDggQEAKIAkJNTAzRDBDQUExNEI1QjA4NzAwRjMyRjU3IC8qIEN1c3Rv
bUZpbHRlclByb2dyYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNTAzRDBDQTcxNEI1QjA4NzAwRjMyRjU3IC8qIEN1c3RvbUZpbHRlclByb2dyYW0u
Y3BwICovOyB9OwogCQk1MDNEMENBQjE0QjVCMDg3MDBGMzJGNTcgLyogQ3VzdG9tRmlsdGVyUHJv
Z3JhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTAz
RDBDQTgxNEI1QjA4NzAwRjMyRjU3IC8qIEN1c3RvbUZpbHRlclByb2dyYW0uaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQk1MDNEMENBQzE0QjVCMDg3MDBGMzJGNTcg
LyogQ3VzdG9tRmlsdGVyUHJvZ3JhbUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTAzRDBDQTkxNEI1QjA4NzAwRjMyRjU3IC8qIEN1c3RvbUZp
bHRlclByb2dyYW1DbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk1MDNEMENBQTE0QjVCMDg3MDBGMzJGNTggLyogQ3VzdG9tRmlsdGVyUmVu
ZGVyZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTAzRDBDQTcxNEI1QjA4NzAwRjMyRjU4IC8qIEN1c3RvbUZpbHRlclJlbmRlcmVyLmNwcCAqLzsg
fTsKKwkJNTAzRDBDQUIxNEI1QjA4NzAwRjMyRjU4IC8qIEN1c3RvbUZpbHRlclJlbmRlcmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDNEMENBODE0
QjVCMDg3MDBGMzJGNTggLyogQ3VzdG9tRmlsdGVyUmVuZGVyZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQk1MDNEMENBRTE0QjVCMEJBMDBGMzJGNTcgLyogU3R5
bGVDdXN0b21GaWx0ZXJQcm9ncmFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA1MDNEMENBRDE0QjVCMEJBMDBGMzJGNTcgLyogU3R5bGVDdXN0b21GaWx0
ZXJQcm9ncmFtLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJNTA4
MUUzQzMzQ0U1ODBDMTZFRjhCNDhCIC8qIENhY2hlZFJlc291cmNlUmVxdWVzdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MDgxRTNERjNDRkM4MEMx
NkVGOEI0OEIgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmNwcCAqLzsgfTsKIAkJNTA4MUUzRTAz
Q0ZGODBDMTZFRjhCNDhCIC8qIENhY2hlZFJlc291cmNlUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTA4MUUzRTEzRDAyODBDMTZFRjhCNDhC
IC8qIENhY2hlZFJlc291cmNlUmVxdWVzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC04NzAzLDYgKzg3MDUsOCBAQAogCQk1MDNEMENBNzE0QjVC
MDg3MDBGMzJGNTcgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBDdXN0b21GaWx0ZXJQcm9ncmFtLmNwcDsgcGF0aCA9IGZpbHRl
cnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTUwM0QwQ0E4MTRCNUIwODcwMEYzMkY1NyAvKiBDdXN0b21GaWx0ZXJQcm9ncmFtLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEN1c3RvbUZpbHRlclByb2dyYW0uaDsgcGF0aCA9
IGZpbHRlcnMvQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MDNEMENBOTE0QjVCMDg3MDBGMzJGNTcgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbUNsaWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBDdXN0b21GaWx0ZXJQcm9ncmFt
Q2xpZW50Lmg7IHBhdGggPSBmaWx0ZXJzL0N1c3RvbUZpbHRlclByb2dyYW1DbGllbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNTAzRDBDQTcxNEI1QjA4NzAwRjMyRjU4IC8qIEN1
c3RvbUZpbHRlclJlbmRlcmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEN1c3RvbUZpbHRlclJlbmRlcmVyLmNwcDsgcGF0aCA9IGZpbHRlcnMvQ3VzdG9tRmlsdGVy
UmVuZGVyZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MDNEMENBODE0QjVC
MDg3MDBGMzJGNTggLyogQ3VzdG9tRmlsdGVyUmVuZGVyZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQ3VzdG9tRmlsdGVyUmVuZGVyZXIuaDsgcGF0aCA9IGZpbHRlcnMvQ3Vz
dG9tRmlsdGVyUmVuZGVyZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTAzRDBD
QUQxNEI1QjBCQTAwRjMyRjU3IC8qIFN0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTdHlsZUN1c3RvbUZpbHRlclByb2dyYW0uaDsgcGF0
aCA9IHN0eWxlL1N0eWxlQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk1MDgxRTNERjNDRkM4MEMxNkVGOEI0OEIgLyogQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWRSZXNv
dXJjZVJlcXVlc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MDgxRTNFMTNE
MDI4MEMxNkVGOEI0OEIgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRSZXNvdXJjZVJlcXVlc3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTE4MjcwLDYgKzE4Mjc0LDggQEAKIAkJCQk1MDNEMENBOTE0QjVC
MDg3MDBGMzJGNTcgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbUNsaWVudC5oICovLAogCQkJCTUwRDg4
Q0IzMTVCREZEQUEwMDE4MDlGNCAvKiBDdXN0b21GaWx0ZXJQcm9ncmFtSW5mby5jcHAgKi8sCiAJ
CQkJNTBEODhDQjQxNUJERkRBQTAwMTgwOUY0IC8qIEN1c3RvbUZpbHRlclByb2dyYW1JbmZvLmgg
Ki8sCisJCQkJNTAzRDBDQTcxNEI1QjA4NzAwRjMyRjU4IC8qIEN1c3RvbUZpbHRlclJlbmRlcmVy
LmNwcCAqLywKKwkJCQk1MDNEMENBODE0QjVCMDg3MDBGMzJGNTggLyogQ3VzdG9tRmlsdGVyUmVu
ZGVyZXIuaCAqLywKIAkJCQk1MDlFQzEwODE1RTg0OENBMDBFODI1ODEgLyogQ3VzdG9tRmlsdGVy
VHJhbnNmb3JtUGFyYW1ldGVyLmggKi8sCiAJCQkJQTI5NTMyQ0QxNURENUUxNzAwNDY5RUJDIC8q
IEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uY3BwICovLAogCQkJCUEyOTUzMkNFMTVERDVF
MTcwMDQ2OUVCQyAvKiBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtLmggKi8sCkBAIC0yMjcw
OCw2ICsyMjcxNCw3IEBACiAJCQkJNTAzRDBDQUIxNEI1QjA4NzAwRjMyRjU3IC8qIEN1c3RvbUZp
bHRlclByb2dyYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTUwM0QwQ0FDMTRCNUIwODcwMEYzMkY1
NyAvKiBDdXN0b21GaWx0ZXJQcm9ncmFtQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MEQ4
OENCNjE1QkRGREFBMDAxODA5RjQgLyogQ3VzdG9tRmlsdGVyUHJvZ3JhbUluZm8uaCBpbiBIZWFk
ZXJzICovLAorCQkJCTUwM0QwQ0FCMTRCNUIwODcwMEYzMkY1OCAvKiBDdXN0b21GaWx0ZXJSZW5k
ZXJlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTI5NTMyRDAxNURENUUxNzAwNDY5RUJDIC8qIEN1
c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUE4Q0I0MTNF
MEU4NjMzRkQwMDMyQzRGMCAvKiBEYXNoQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU2
RDBCMEExOTg5Q0EwMDdGQjhDNSAvKiBEYXNoYm9hcmRSZWdpb24uaCBpbiBIZWFkZXJzICovLApA
QCAtMjYyNzUsNiArMjYyODIsNyBAQAogCQkJCTUwQ0MwQTM5MTRDNkY1QjEwMDE3QUI1MSAvKiBD
dXN0b21GaWx0ZXJPcGVyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTAzRDBDQUExNEI1
QjA4NzAwRjMyRjU3IC8qIEN1c3RvbUZpbHRlclByb2dyYW0uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNTBEODhDQjUxNUJERkRBQTAwMTgwOUY0IC8qIEN1c3RvbUZpbHRlclByb2dyYW1JbmZvLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTUwM0QwQ0FBMTRCNUIwODcwMEYzMkY1OCAvKiBDdXN0b21G
aWx0ZXJSZW5kZXJlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMjk1MzJDRjE1REQ1RTE3MDA0
NjlFQkMgLyogQ3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5N0JDNkEyMDE1MDVGMDgxMDAxQjc0QUMgLyogRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTdCQzZBMjMxNTA1RjA4MTAwMUI3NEFDIC8qIERhdGFiYXNlQXV0aG9yaXplci5j
cHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2ZpbHRlcnMvQ3VzdG9tRmlsdGVyUmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJSZW5kZXJlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDVjMzgyNzQ1MDdlN2EzNTE1ZjJjNTJkZTQ5ZTJiZDI0ZTc3ZmNlYQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvQ3VzdG9t
RmlsdGVyUmVuZGVyZXIuY3BwCkBAIC0wLDAgKzEsMzA5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDExIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIENvbXBhbnkgMTAwLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZQorICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiAgICBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZworICogICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzCisgKiAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiDigJxBUyBJU+KA
nSBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBCRQorICogTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLAorICogT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgorICogVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GCisg
KiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShDU1NfU0hBREVSUykgJiYgVVNFKDNEX0dSQVBISUNTKQorI2luY2x1ZGUgIkN1
c3RvbUZpbHRlclJlbmRlcmVyLmgiCisKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJBcnJheVBhcmFt
ZXRlci5oIgorI2luY2x1ZGUgIkN1c3RvbUZpbHRlckNvbnN0YW50cy5oIgorI2luY2x1ZGUgIkN1
c3RvbUZpbHRlck1lc2guaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIu
aCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJQYXJhbWV0ZXIuaCIKKyNpbmNsdWRlICJDdXN0b21G
aWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIuaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJWYWxpZGF0
ZWRQcm9ncmFtLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJU
cmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyB2
b2lkIG9ydGhvZ29uYWxQcm9qZWN0aW9uTWF0cml4KFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRy
aXgsIGZsb2F0IGxlZnQsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGZsb2F0IHRvcCkKK3sK
KyAgICBBU1NFUlQobWF0cml4LmlzSWRlbnRpdHkoKSk7CisKKyAgICBmbG9hdCBkZWx0YVggPSBy
aWdodCAtIGxlZnQ7CisgICAgZmxvYXQgZGVsdGFZID0gdG9wIC0gYm90dG9tOworICAgIGlmICgh
ZGVsdGFYIHx8ICFkZWx0YVkpCisgICAgICAgIHJldHVybjsKKyAgICBtYXRyaXguc2V0TTExKDIu
MGYgLyBkZWx0YVgpOworICAgIG1hdHJpeC5zZXRNNDEoLShyaWdodCArIGxlZnQpIC8gZGVsdGFY
KTsKKyAgICBtYXRyaXguc2V0TTIyKDIuMGYgLyBkZWx0YVkpOworICAgIG1hdHJpeC5zZXRNNDIo
LSh0b3AgKyBib3R0b20pIC8gZGVsdGFZKTsKKworICAgIC8vIFVzZSBiaWcgZW5vdWdoIG5lYXIv
ZmFyIHZhbHVlcywgc28gdGhhdCBzaW1wbGUgcm90YXRpb25zIG9mIHJhdGhlciBsYXJnZSBvYmpl
Y3RzIHdpbGwgbm90CisgICAgLy8gZ2V0IGNsaXBwZWQuIDEwMDAwIHNob3VsZCBjb3ZlciBtb3N0
IG9mIHRoZSBzY3JlZW4gcmVzb2x1dGlvbnMuCisgICAgY29uc3QgZmxvYXQgZmFyVmFsdWUgPSAx
MDAwMDsKKyAgICBjb25zdCBmbG9hdCBuZWFyVmFsdWUgPSAtMTAwMDA7CisgICAgbWF0cml4LnNl
dE0zMygtMi4wZiAvIChmYXJWYWx1ZSAtIG5lYXJWYWx1ZSkpOworICAgIG1hdHJpeC5zZXRNNDMo
LSAoZmFyVmFsdWUgKyBuZWFyVmFsdWUpIC8gKGZhclZhbHVlIC0gbmVhclZhbHVlKSk7CisgICAg
bWF0cml4LnNldE00NCgxLjBmKTsKK30KKworUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJSZW5kZXJl
cj4gQ3VzdG9tRmlsdGVyUmVuZGVyZXI6OmNyZWF0ZShQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBjb250ZXh0LCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0+IHZh
bGlkYXRlZFByb2dyYW0sIGNvbnN0IEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHBhcmFtZXRl
cnMsCisgICAgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1lc2hDb2x1bW5zLCBDdXN0b21G
aWx0ZXJPcGVyYXRpb246Ok1lc2hCb3hUeXBlIG1lc2hCb3hUeXBlLCBDdXN0b21GaWx0ZXJPcGVy
YXRpb246Ok1lc2hUeXBlIG1lc2hUeXBlKQoreworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ3Vz
dG9tRmlsdGVyUmVuZGVyZXIoY29udGV4dCwgdmFsaWRhdGVkUHJvZ3JhbSwgcGFyYW1ldGVycywg
bWVzaFJvd3MsIG1lc2hDb2x1bW5zLCBtZXNoQm94VHlwZSwgbWVzaFR5cGUpKTsKK30KKworQ3Vz
dG9tRmlsdGVyUmVuZGVyZXI6OkN1c3RvbUZpbHRlclJlbmRlcmVyKFBhc3NSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQsIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJv
Z3JhbT4gdmFsaWRhdGVkUHJvZ3JhbSwgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYg
cGFyYW1ldGVycywKKyAgICB1bnNpZ25lZCBtZXNoUm93cywgdW5zaWduZWQgbWVzaENvbHVtbnMs
IEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaEJveFR5cGUsIEN1c3RvbUZpbHRlck9wZXJhdGlv
bjo6TWVzaFR5cGUgbWVzaFR5cGUpCisgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAsIG1f
dmFsaWRhdGVkUHJvZ3JhbSh2YWxpZGF0ZWRQcm9ncmFtKQorICAgICwgbV9jb21waWxlZFByb2dy
YW0oMCkgLy8gRG9uJ3QgY29tcGlsZSB0aGUgcHJvZ3JhbSB1bmxlc3Mgd2UgbmVlZCB0byBwYWlu
dC4KKyAgICAsIG1fcGFyYW1ldGVycyhwYXJhbWV0ZXJzKQorICAgICwgbV9tZXNoUm93cyhtZXNo
Um93cykKKyAgICAsIG1fbWVzaENvbHVtbnMobWVzaENvbHVtbnMpCisgICAgLCBtX21lc2hUeXBl
KG1lc2hUeXBlKQoreworfQorCitDdXN0b21GaWx0ZXJSZW5kZXJlcjo6fkN1c3RvbUZpbHRlclJl
bmRlcmVyKCkKK3sKK30KKworYm9vbCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6cHJlbXVsdGlwbGll
ZEFscGhhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92YWxpZGF0ZWRQcm9ncmFtLT5wcm9ncmFt
SW5mbygpLnByb2dyYW1UeXBlKCkgPT0gUFJPR1JBTV9UWVBFX0JMRU5EU19FTEVNRU5UX1RFWFRV
UkU7Cit9CisKK2Jvb2wgQ3VzdG9tRmlsdGVyUmVuZGVyZXI6OnByb2dyYW1OZWVkc0lucHV0VGV4
dHVyZSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKG1fY29tcGlsZWRQcm9ncmFtLmdldCgpKTsKKyAg
ICByZXR1cm4gbV9jb21waWxlZFByb2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpICE9IC0xOworfQor
Cit2b2lkIEN1c3RvbUZpbHRlclJlbmRlcmVyOjpkcmF3KFBsYXRmb3JtM0RPYmplY3QgaW5wdXRU
ZXh0dXJlLCBjb25zdCBJbnRTaXplJiBzaXplKQoreworICAgIC8vIEZJWE1FOiBXZSB3b3VsZCBu
ZWVkIHNvbWV0aGluZyBsaWtlIEN1c3RvbUZpbHRlclJlbmRlcmVyU3RhdGUgdGhhdCB3aWxsIGNv
bnRhaW4gdGhlIHNpemUgYW5kIG90aGVyIHBhcmFtZXRlcnMgaW4gdGhlIGZ1dHVyZS4gV2Ugc2hv
dWxkIHBhc3MgdGhhdCB0byBiaW5kUHJvZ3JhbUJ1ZmZlcnMgaW5zdGVhZCBvZiBzdG9yaW5nIGl0
LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDAxMDcK
KyAgICBtX2NvbnRleHRTaXplID0gc2l6ZTsKKworICAgIGJpbmRQcm9ncmFtQW5kQnVmZmVycyhp
bnB1dFRleHR1cmUpOworICAgIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRzKEdyYXBoaWNzQ29udGV4
dDNEOjpUUklBTkdMRVMsIG1fbWVzaC0+aW5kaWNlc0NvdW50KCksIEdyYXBoaWNzQ29udGV4dDNE
OjpVTlNJR05FRF9TSE9SVCwgMCk7CisgICAgdW5iaW5kVmVydGV4QXR0cmlidXRlcygpOworfQor
Citib29sIEN1c3RvbUZpbHRlclJlbmRlcmVyOjpwcmVwYXJlRm9yRHJhd2luZygpCit7CisgICAg
bV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpbml0aWFsaXplQ29tcGlsZWRQ
cm9ncmFtSWZOZWVkZWQoKTsKKworICAgIC8vIElmIHRoZSBzaGFkZXIgaGFkIGNvbXBpbGVyIGVy
cm9ycyB3ZSBjYW5ub3QgZHJhdyBhbnl0aGluZy4KKyAgICBpZiAoIW1fY29tcGlsZWRQcm9ncmFt
LT5pc0luaXRpYWxpemVkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGluaXRpYWxp
emVNZXNoSWZOZWVkZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDdXN0b21GaWx0
ZXJSZW5kZXJlcjo6aW5pdGlhbGl6ZUNvbXBpbGVkUHJvZ3JhbUlmTmVlZGVkKCkKK3sKKyAgICBp
ZiAobV9jb21waWxlZFByb2dyYW0uZ2V0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1fY29t
cGlsZWRQcm9ncmFtID0gbV92YWxpZGF0ZWRQcm9ncmFtLT5jb21waWxlZFByb2dyYW0oKTsKK30K
Kwordm9pZCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6aW5pdGlhbGl6ZU1lc2hJZk5lZWRlZCgpCit7
CisgICAgaWYgKG1fbWVzaC5nZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6
IFNoYXJpbmcgdGhlIG1lc2ggd291bGQganVzdCBzYXZlIHRoZSB0aW1lIG5lZWRlZCB0byB1cGxv
YWQgaXQgdG8gdGhlIEdQVSwgc28gSSBhc3N1bWUgd2UgY291bGQKKyAgICAvLyBiZW5jaG1hcmsg
dGhhdCBmb3IgcGVyZm9ybWFuY2UuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTg4NDI5CisgICAgbV9tZXNoID0gQ3VzdG9tRmlsdGVyTWVzaDo6Y3JlYXRl
KG1fY29udGV4dC5nZXQoKSwgbV9tZXNoQ29sdW1ucywgbV9tZXNoUm93cywgRmxvYXRSZWN0KDAs
IDAsIDEsIDEpLCBtX21lc2hUeXBlKTsKK30KKwordm9pZCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6
YmluZFZlcnRleEF0dHJpYnV0ZShpbnQgYXR0cmlidXRlTG9jYXRpb24sIHVuc2lnbmVkIHNpemUs
IHVuc2lnbmVkIG9mZnNldCkKK3sKKyAgICBpZiAoYXR0cmlidXRlTG9jYXRpb24gIT0gLTEpIHsK
KyAgICAgICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGF0dHJpYnV0ZUxvY2F0aW9u
LCBzaXplLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCBtX21lc2gtPmJ5dGVzUGVy
VmVydGV4KCksIG9mZnNldCk7CisgICAgICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmli
QXJyYXkoYXR0cmlidXRlTG9jYXRpb24pOworICAgIH0KK30KKwordm9pZCBDdXN0b21GaWx0ZXJS
ZW5kZXJlcjo6dW5iaW5kVmVydGV4QXR0cmlidXRlKGludCBhdHRyaWJ1dGVMb2NhdGlvbikKK3sK
KyAgICBpZiAoYXR0cmlidXRlTG9jYXRpb24gIT0gLTEpCisgICAgICAgIG1fY29udGV4dC0+ZGlz
YWJsZVZlcnRleEF0dHJpYkFycmF5KGF0dHJpYnV0ZUxvY2F0aW9uKTsKK30KKwordm9pZCBDdXN0
b21GaWx0ZXJSZW5kZXJlcjo6YmluZFByb2dyYW1BcnJheVBhcmFtZXRlcnMoaW50IHVuaWZvcm1M
b2NhdGlvbiwgQ3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXIqIGFycmF5UGFyYW1ldGVyKQorewor
ICAgIHVuc2lnbmVkIHBhcmFtZXRlclNpemUgPSBhcnJheVBhcmFtZXRlci0+c2l6ZSgpOworICAg
IFZlY3RvcjxHQzNEZmxvYXQ+IGZsb2F0VmVjdG9yOworCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHBhcmFtZXRlclNpemU7ICsraSkKKyAgICAgICAgZmxvYXRWZWN0b3IuYXBwZW5kKGFy
cmF5UGFyYW1ldGVyLT52YWx1ZUF0KGkpKTsKKworICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdih1
bmlmb3JtTG9jYXRpb24sIHBhcmFtZXRlclNpemUsIGZsb2F0VmVjdG9yLmRhdGEoKSk7Cit9CisK
K3ZvaWQgQ3VzdG9tRmlsdGVyUmVuZGVyZXI6OmJpbmRQcm9ncmFtTnVtYmVyUGFyYW1ldGVycyhp
bnQgdW5pZm9ybUxvY2F0aW9uLCBDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIqIG51bWJlclBh
cmFtZXRlcikKK3sKKyAgICBzd2l0Y2ggKG51bWJlclBhcmFtZXRlci0+c2l6ZSgpKSB7CisgICAg
Y2FzZSAxOgorICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0xZih1bmlmb3JtTG9jYXRpb24sIG51
bWJlclBhcmFtZXRlci0+dmFsdWVBdCgwKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoK
KyAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmYodW5pZm9ybUxvY2F0aW9uLCBudW1iZXJQYXJh
bWV0ZXItPnZhbHVlQXQoMCksIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgxKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgMzoKKyAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtM2YodW5pZm9y
bUxvY2F0aW9uLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMCksIG51bWJlclBhcmFtZXRlci0+
dmFsdWVBdCgxKSwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDIpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSA0OgorICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm00Zih1bmlmb3JtTG9jYXRp
b24sIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgwKSwgbnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0
KDEpLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMiksIG51bWJlclBhcmFtZXRlci0+dmFsdWVB
dCgzKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KK30KKwordm9pZCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6YmluZFBy
b2dyYW1UcmFuc2Zvcm1QYXJhbWV0ZXIoaW50IHVuaWZvcm1Mb2NhdGlvbiwgQ3VzdG9tRmlsdGVy
VHJhbnNmb3JtUGFyYW1ldGVyKiB0cmFuc2Zvcm1QYXJhbWV0ZXIpCit7CisgICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXggbWF0cml4OworICAgIGlmIChtX2NvbnRleHRTaXplLndpZHRoKCkgJiYgbV9j
b250ZXh0U2l6ZS5oZWlnaHQoKSkgeworICAgICAgICAvLyBUaGUgdmlld3BvcnQgaXMgYSBib3gg
d2l0aCB0aGUgc2l6ZSBvZiAxIHVuaXQsIHNvIHdlIGFyZSBzY2FsaW5nIHVwIGhlcmUgdG8gbWFr
ZSBzdXJlIHRoYXQgdHJhbnNsYXRpb25zIGhhcHBlbiB1c2luZyByZWFsIHBpeGVsCisgICAgICAg
IC8vIHVuaXRzLiBBdCB0aGUgZW5kIHdlIHNjYWxlIGJhY2sgZG93biBpbiBvcmRlciB0byBtYXAg
aXQgYmFjayB0byB0aGUgb3JpZ2luYWwgYm94LiBOb3RlIHRoYXQgdHJhbnNmb3JtcyBjb21lIGlu
IHJldmVyc2Ugb3JkZXIsIGJlY2F1c2UgaXQgaXMKKyAgICAgICAgLy8gc3VwcG9zZWQgdG8gbXVs
dGlwbHkgdG8gdGhlIGxlZnQgb2YgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSB2ZXJ0aWNlcy4KKyAg
ICAgICAgLy8gTm90ZSB0aGF0IHRoZSBvcmlnaW4gKDAsIDApIG9mIHRoZSB2aWV3cG9ydCBpcyBp
biB0aGUgbWlkZGxlIG9mIHRoZSBjb250ZXh0LCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gY2hhbmdl
IHRoZSBvcmlnaW4gb2YgdGhlIHRyYW5zZm9ybQorICAgICAgICAvLyBpbiBvcmRlciB0byByb3Rh
dGUgYXJvdW5kIHRoZSBtaWRkbGUgb2YgbWVzaC4KKyAgICAgICAgbWF0cml4LnNjYWxlM2QoMS4w
IC8gbV9jb250ZXh0U2l6ZS53aWR0aCgpLCAxLjAgLyBtX2NvbnRleHRTaXplLmhlaWdodCgpLCAx
KTsKKyAgICAgICAgdHJhbnNmb3JtUGFyYW1ldGVyLT5hcHBseVRyYW5zZm9ybShtYXRyaXgsIG1f
Y29udGV4dFNpemUpOworICAgICAgICBtYXRyaXguc2NhbGUzZChtX2NvbnRleHRTaXplLndpZHRo
KCksIG1fY29udGV4dFNpemUuaGVpZ2h0KCksIDEpOworICAgIH0KKyAgICBmbG9hdCBnbE1hdHJp
eFsxNl07CisgICAgbWF0cml4LnRvQ29sdW1uTWFqb3JGbG9hdEFycmF5KGdsTWF0cml4KTsKKyAg
ICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYodW5pZm9ybUxvY2F0aW9uLCAxLCBmYWxzZSwg
JmdsTWF0cml4WzBdKTsKK30KKwordm9pZCBDdXN0b21GaWx0ZXJSZW5kZXJlcjo6YmluZFByb2dy
YW1QYXJhbWV0ZXJzKCkKK3sKKyAgICAvLyBGSVhNRTogRmluZCBhIHdheSB0byByZXNldCB1bmlm
b3JtcyB0aGF0IGFyZSBub3Qgc3BlY2lmaWVkIGluIENTUy4gVGhpcyBpcyBuZWVkZWQgdG8gYXZv
aWQgdXNpbmcgdmFsdWVzCisgICAgLy8gc2V0IGJ5IG90aGVyIHByZXZpb3VzIHJlbmRlcmVkIGZp
bHRlcnMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2
NDQwCisKKyAgICBzaXplX3QgcGFyYW1ldGVyc1NpemUgPSBtX3BhcmFtZXRlcnMuc2l6ZSgpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVyc1NpemU7ICsraSkgeworICAgICAg
ICBDdXN0b21GaWx0ZXJQYXJhbWV0ZXIqIHBhcmFtZXRlciA9IG1fcGFyYW1ldGVycy5hdChpKS5n
ZXQoKTsKKyAgICAgICAgaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1fY29tcGlsZWRQcm9ncmFtLT51
bmlmb3JtTG9jYXRpb25CeU5hbWUocGFyYW1ldGVyLT5uYW1lKCkpOworICAgICAgICBpZiAodW5p
Zm9ybUxvY2F0aW9uID09IC0xKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHN3aXRj
aCAocGFyYW1ldGVyLT5wYXJhbWV0ZXJUeXBlKCkpIHsKKyAgICAgICAgY2FzZSBDdXN0b21GaWx0
ZXJQYXJhbWV0ZXI6OkFSUkFZOgorICAgICAgICAgICAgYmluZFByb2dyYW1BcnJheVBhcmFtZXRl
cnModW5pZm9ybUxvY2F0aW9uLCBzdGF0aWNfY2FzdDxDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRl
cio+KHBhcmFtZXRlcikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ3VzdG9t
RmlsdGVyUGFyYW1ldGVyOjpOVU1CRVI6CisgICAgICAgICAgICBiaW5kUHJvZ3JhbU51bWJlclBh
cmFtZXRlcnModW5pZm9ybUxvY2F0aW9uLCBzdGF0aWNfY2FzdDxDdXN0b21GaWx0ZXJOdW1iZXJQ
YXJhbWV0ZXIqPihwYXJhbWV0ZXIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEN1c3RvbUZpbHRlclBhcmFtZXRlcjo6VFJBTlNGT1JNOgorICAgICAgICAgICAgYmluZFByb2dy
YW1UcmFuc2Zvcm1QYXJhbWV0ZXIodW5pZm9ybUxvY2F0aW9uLCBzdGF0aWNfY2FzdDxDdXN0b21G
aWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIqPihwYXJhbWV0ZXIpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEN1c3RvbUZpbHRlclJlbmRlcmVyOjpiaW5k
UHJvZ3JhbUFuZEJ1ZmZlcnMoUGxhdGZvcm0zRE9iamVjdCBpbnB1dFRleHR1cmUpCit7CisgICAg
QVNTRVJUKG1fY29tcGlsZWRQcm9ncmFtLT5pc0luaXRpYWxpemVkKCkpOworCisgICAgbV9jb250
ZXh0LT51c2VQcm9ncmFtKG1fY29tcGlsZWRQcm9ncmFtLT5wcm9ncmFtKCkpOworCisgICAgaWYg
KHByb2dyYW1OZWVkc0lucHV0VGV4dHVyZSgpKSB7CisgICAgICAgIC8vIFdlIHNob3VsZCBiZSBi
aW5kaW5nIHRoZSBET00gZWxlbWVudCB0ZXh0dXJlIHNhbXBsZXIgb25seSBpZiB0aGUgYXV0aG9y
IGlzIHVzaW5nIHRoZSBDU1MgbWl4IGZ1bmN0aW9uLgorICAgICAgICBBU1NFUlQobV92YWxpZGF0
ZWRQcm9ncmFtLT5wcm9ncmFtSW5mbygpLnByb2dyYW1UeXBlKCkgPT0gUFJPR1JBTV9UWVBFX0JM
RU5EU19FTEVNRU5UX1RFWFRVUkUpOworICAgICAgICBBU1NFUlQobV9jb21waWxlZFByb2dyYW0t
PnNhbXBsZXJMb2NhdGlvbigpICE9IC0xKTsKKworICAgICAgICBtX2NvbnRleHQtPmFjdGl2ZVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKKyAgICAgICAgbV9jb250ZXh0LT51
bmlmb3JtMWkobV9jb21waWxlZFByb2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpLCAwKTsKKyAgICAg
ICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
aW5wdXRUZXh0dXJlKTsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklM
VEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKKyAgICAg
ICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpD
TEFNUF9UT19FREdFKTsKKyAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1Qs
IEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKKyAgICB9CisKKyAgICBpZiAobV9j
b21waWxlZFByb2dyYW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpICE9IC0xKSB7CisgICAg
ICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHByb2plY3Rpb25NYXRyaXg7CisgICAgICAgIG9ydGhv
Z29uYWxQcm9qZWN0aW9uTWF0cml4KHByb2plY3Rpb25NYXRyaXgsIC0wLjUsIDAuNSwgLTAuNSwg
MC41KTsKKyAgICAgICAgZmxvYXQgZ2xQcm9qZWN0aW9uTWF0cml4WzE2XTsKKyAgICAgICAgcHJv
amVjdGlvbk1hdHJpeC50b0NvbHVtbk1ham9yRmxvYXRBcnJheShnbFByb2plY3Rpb25NYXRyaXgp
OworICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobV9jb21waWxlZFByb2dyYW0t
PnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxzZSwgJmdsUHJvamVjdGlvbk1hdHJp
eFswXSk7CisgICAgfQorCisgICAgQVNTRVJUKG1fbWVzaENvbHVtbnMpOworICAgIEFTU0VSVCht
X21lc2hSb3dzKTsKKworICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+bWVzaFNpemVMb2NhdGlv
bigpICE9IC0xKQorICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX2NvbXBpbGVkUHJvZ3Jh
bS0+bWVzaFNpemVMb2NhdGlvbigpLCBtX21lc2hDb2x1bW5zLCBtX21lc2hSb3dzKTsKKworICAg
IGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+dGlsZVNpemVMb2NhdGlvbigpICE9IC0xKQorICAgICAg
ICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX2NvbXBpbGVkUHJvZ3JhbS0+dGlsZVNpemVMb2NhdGlv
bigpLCAxLjAgLyBtX21lc2hDb2x1bW5zLCAxLjAgLyBtX21lc2hSb3dzKTsKKworICAgIGlmICht
X2NvbXBpbGVkUHJvZ3JhbS0+bWVzaEJveExvY2F0aW9uKCkgIT0gLTEpIHsKKyAgICAgICAgLy8g
RklYTUU6IFRoaXMgd2lsbCBjaGFuZ2Ugd2hlbiBmaWx0ZXIgbWFyZ2lucyB3aWxsIGJlIGltcGxl
bWVudGVkLAorICAgICAgICAvLyBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTcxNDAwCisgICAgICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKG1fY29tcGlsZWRQcm9n
cmFtLT5tZXNoQm94TG9jYXRpb24oKSwgLTAuNSwgLTAuNSwgMS4wLCAxLjApOworICAgIH0KKwor
ICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+c2FtcGxlclNpemVMb2NhdGlvbigpICE9IC0xKQor
ICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX2NvbXBpbGVkUHJvZ3JhbS0+c2FtcGxlclNp
emVMb2NhdGlvbigpLCBtX2NvbnRleHRTaXplLndpZHRoKCksIG1fY29udGV4dFNpemUuaGVpZ2h0
KCkpOworCisgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJB
WV9CVUZGRVIsIG1fbWVzaC0+dmVydGljZXNCdWZmZXJPYmplY3QoKSk7CisgICAgbV9jb250ZXh0
LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUiwgbV9t
ZXNoLT5lbGVtZW50c0J1ZmZlck9iamVjdCgpKTsKKworICAgIGJpbmRWZXJ0ZXhBdHRyaWJ1dGUo
bV9jb21waWxlZFByb2dyYW0tPnBvc2l0aW9uQXR0cmliTG9jYXRpb24oKSwgUG9zaXRpb25BdHRy
aWJTaXplLCBQb3NpdGlvbkF0dHJpYk9mZnNldCk7CisgICAgYmluZFZlcnRleEF0dHJpYnV0ZSht
X2NvbXBpbGVkUHJvZ3JhbS0+dGV4QXR0cmliTG9jYXRpb24oKSwgVGV4QXR0cmliU2l6ZSwgVGV4
QXR0cmliT2Zmc2V0KTsKKyAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGUgaW50ZXJuYWwgdGV4
IGNvb3JkIGF0dHJpYnV0ZSAiY3NzX2FfdGV4Q29vcmQiLgorICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NDM1OAorICAgIGJpbmRWZXJ0ZXhBdHRyaWJ1dGUo
bV9jb21waWxlZFByb2dyYW0tPmludGVybmFsVGV4Q29vcmRBdHRyaWJMb2NhdGlvbigpLCBUZXhB
dHRyaWJTaXplLCBUZXhBdHRyaWJPZmZzZXQpOworICAgIGJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9j
b21waWxlZFByb2dyYW0tPm1lc2hBdHRyaWJMb2NhdGlvbigpLCBNZXNoQXR0cmliU2l6ZSwgTWVz
aEF0dHJpYk9mZnNldCk7CisgICAgaWYgKG1fbWVzaFR5cGUgPT0gQ3VzdG9tRmlsdGVyT3BlcmF0
aW9uOjpERVRBQ0hFRCkKKyAgICAgICAgYmluZFZlcnRleEF0dHJpYnV0ZShtX2NvbXBpbGVkUHJv
Z3JhbS0+dHJpYW5nbGVBdHRyaWJMb2NhdGlvbigpLCBUcmlhbmdsZUF0dHJpYlNpemUsIFRyaWFu
Z2xlQXR0cmliT2Zmc2V0KTsKKworICAgIGJpbmRQcm9ncmFtUGFyYW1ldGVycygpOworfQorCit2
b2lkIEN1c3RvbUZpbHRlclJlbmRlcmVyOjp1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGVzKCkKK3sKKyAg
ICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPnBvc2l0aW9uQXR0cmli
TG9jYXRpb24oKSk7CisgICAgdW5iaW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFt
LT50ZXhBdHRyaWJMb2NhdGlvbigpKTsKKyAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21w
aWxlZFByb2dyYW0tPmludGVybmFsVGV4Q29vcmRBdHRyaWJMb2NhdGlvbigpKTsKKyAgICB1bmJp
bmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPm1lc2hBdHRyaWJMb2NhdGlvbigp
KTsKKyAgICBpZiAobV9tZXNoVHlwZSA9PSBDdXN0b21GaWx0ZXJPcGVyYXRpb246OkRFVEFDSEVE
KQorICAgICAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPnRyaWFu
Z2xlQXR0cmliTG9jYXRpb24oKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShDU1NfU0hBREVSUykgJiYgVVNFKDNEX0dSQVBISUNTKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0b21GaWx0ZXJS
ZW5kZXJlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9DdXN0
b21GaWx0ZXJSZW5kZXJlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlkZjBiZTVmMzM2MWFlYTQ5ZjJiZTQ3MGFh
ZTY3YWQ5NTIyNWYyZjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0N1c3RvbUZpbHRlclJlbmRlcmVyLmgKQEAgLTAsMCArMSw5OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBDb21wYW55IDEwMCwg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUKKyAqICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQor
ICogICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcKKyAqICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscworICogICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIg4oCc
QVMgSVPigJ0gQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUK
KyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwKKyAqIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAqIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRgorICogVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEN1c3RvbUZp
bHRlclJlbmRlcmVyX2gKKyNkZWZpbmUgQ3VzdG9tRmlsdGVyUmVuZGVyZXJfaAorCisjaWYgRU5B
QkxFKENTU19TSEFERVJTKSAmJiBVU0UoM0RfR1JBUEhJQ1MpCisKKyNpbmNsdWRlICJDdXN0b21G
aWx0ZXJPcGVyYXRpb24uaCIKKyNpbmNsdWRlICJHcmFwaGljc1R5cGVzM0QuaCIKKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlcjsKK2NsYXNzIEN1
c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbTsKK2NsYXNzIEN1c3RvbUZpbHRlck1lc2g7CitjbGFz
cyBDdXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXI7CitjbGFzcyBDdXN0b21GaWx0ZXJUcmFuc2Zv
cm1QYXJhbWV0ZXI7CitjbGFzcyBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9ncmFtOworY2xhc3Mg
R3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBJbnRTaXplOworCitjbGFzcyBDdXN0b21GaWx0ZXJS
ZW5kZXJlciA6IHB1YmxpYyBSZWZDb3VudGVkPEN1c3RvbUZpbHRlclJlbmRlcmVyPiB7CitwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyUmVuZGVyZXI+IGNyZWF0ZShQ
YXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJWYWxp
ZGF0ZWRQcm9ncmFtPiwgY29uc3QgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCYsCisgICAgICAg
IHVuc2lnbmVkIG1lc2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyT3Bl
cmF0aW9uOjpNZXNoQm94VHlwZSwgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSk7Cisg
ICAgfkN1c3RvbUZpbHRlclJlbmRlcmVyKCk7CisKKyAgICBib29sIHByZW11bHRpcGxpZWRBbHBo
YSgpIGNvbnN0OworICAgIGJvb2wgcHJvZ3JhbU5lZWRzSW5wdXRUZXh0dXJlKCkgY29uc3Q7CisK
KyAgICBib29sIHByZXBhcmVGb3JEcmF3aW5nKCk7CisKKyAgICB2b2lkIGRyYXcoUGxhdGZvcm0z
RE9iamVjdCwgY29uc3QgSW50U2l6ZSYpOworCitwcml2YXRlOgorICAgIEN1c3RvbUZpbHRlclJl
bmRlcmVyKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+LCBQYXNzUmVmUHRyPEN1c3RvbUZp
bHRlclZhbGlkYXRlZFByb2dyYW0+LCBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiwK
KyAgICAgICAgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1lc2hDb2x1bW5zLCBDdXN0b21G
aWx0ZXJPcGVyYXRpb246Ok1lc2hCb3hUeXBlLCBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hU
eXBlKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZUNvbXBpbGVkUHJvZ3JhbUlmTmVlZGVkKCk7Cisg
ICAgdm9pZCBpbml0aWFsaXplTWVzaElmTmVlZGVkKCk7CisKKyAgICB2b2lkIGJpbmRWZXJ0ZXhB
dHRyaWJ1dGUoaW50IGF0dHJpYnV0ZUxvY2F0aW9uLCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBv
ZmZzZXQpOworICAgIHZvaWQgdW5iaW5kVmVydGV4QXR0cmlidXRlKGludCBhdHRyaWJ1dGVMb2Nh
dGlvbik7CisgICAgdm9pZCBiaW5kUHJvZ3JhbUFycmF5UGFyYW1ldGVycyhpbnQgdW5pZm9ybUxv
Y2F0aW9uLCBDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlciopOworICAgIHZvaWQgYmluZFByb2dy
YW1OdW1iZXJQYXJhbWV0ZXJzKGludCB1bmlmb3JtTG9jYXRpb24sIEN1c3RvbUZpbHRlck51bWJl
clBhcmFtZXRlciopOworICAgIHZvaWQgYmluZFByb2dyYW1UcmFuc2Zvcm1QYXJhbWV0ZXIoaW50
IHVuaWZvcm1Mb2NhdGlvbiwgQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKik7CisgICAg
dm9pZCBiaW5kUHJvZ3JhbVBhcmFtZXRlcnMoKTsKKyAgICB2b2lkIGJpbmRQcm9ncmFtQW5kQnVm
ZmVycyhQbGF0Zm9ybTNET2JqZWN0IGlucHV0VGV4dHVyZSk7CisgICAgdm9pZCB1bmJpbmRWZXJ0
ZXhBdHRyaWJ1dGVzKCk7CisKKyAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4
dDsKKyAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4gbV92YWxpZGF0ZWRQ
cm9ncmFtOworICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW0+IG1fY29tcGls
ZWRQcm9ncmFtOworICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJNZXNoPiBtX21lc2g7CisgICAgSW50
U2l6ZSBtX2NvbnRleHRTaXplOworCisgICAgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyTGlzdCBtX3Bh
cmFtZXRlcnM7CisKKyAgICB1bnNpZ25lZCBtX21lc2hSb3dzOworICAgIHVuc2lnbmVkIG1fbWVz
aENvbHVtbnM7CisgICAgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSBtX21lc2hUeXBl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKENTU19T
SEFERVJTKSAmJiBVU0UoM0RfR1JBUEhJQ1MpCisKKyNlbmRpZiAvLyBDdXN0b21GaWx0ZXJSZW5k
ZXJlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL0ZFQ3VzdG9tRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuY3BwCmluZGV4IDcwN2VkYjg2NmZlMTNjMmM5N2QwNWNj
NjYxOTdlOTBkZjJmMGFhNTYuLmVjMzg1ZjU5YzE3MjM2ZmVhYzUxY2QyZjhiMmUxODQxYWI0NDEz
NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVDdXN0b21GaWx0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuY3BwCkBAIC0zMyw2MSArMzMsMjIgQEAKICNpZiBFTkFC
TEUoQ1NTX1NIQURFUlMpICYmIFVTRSgzRF9HUkFQSElDUykKICNpbmNsdWRlICJGRUN1c3RvbUZp
bHRlci5oIgogCi0jaW5jbHVkZSAiQ3VzdG9tRmlsdGVyQXJyYXlQYXJhbWV0ZXIuaCIKLSNpbmNs
dWRlICJDdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW0uaCIKLSNpbmNsdWRlICJDdXN0b21GaWx0
ZXJDb25zdGFudHMuaCIKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LmgiCi0j
aW5jbHVkZSAiQ3VzdG9tRmlsdGVyTWVzaC5oIgotI2luY2x1ZGUgIkN1c3RvbUZpbHRlck51bWJl
clBhcmFtZXRlci5oIgotI2luY2x1ZGUgIkN1c3RvbUZpbHRlclBhcmFtZXRlci5oIgotI2luY2x1
ZGUgIkN1c3RvbUZpbHRlclByb2dyYW0uaCIKLSNpbmNsdWRlICJDdXN0b21GaWx0ZXJUcmFuc2Zv
cm1QYXJhbWV0ZXIuaCIKKyNpbmNsdWRlICJDdXN0b21GaWx0ZXJSZW5kZXJlci5oIgogI2luY2x1
ZGUgIkN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0uaCIKLSNpbmNsdWRlICJEcmF3aW5nQnVm
ZmVyLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0M0QuaCIKLSNpbmNsdWRlICJJbWFnZURhdGEuaCIKLSNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgogI2luY2x1ZGUgIlJlbmRlclRyZWVBc1RleHQuaCIKICNpbmNsdWRlICJUZXh0U3RyZWFt
LmgiCi0jaW5jbHVkZSAiVGlsaW5nRGF0YS5oIgotI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCiAKICNpbmNsdWRlIDx3dGYvVWludDhDbGFtcGVkQXJyYXkuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1zdGF0aWMgY29uc3QgaW50IGtNYXhTYW1wbGVDb3VudCA9IDQ7Ci0KLXN0
YXRpYyB2b2lkIG9ydGhvZ29uYWxQcm9qZWN0aW9uTWF0cml4KFRyYW5zZm9ybWF0aW9uTWF0cml4
JiBtYXRyaXgsIGZsb2F0IGxlZnQsIGZsb2F0IHJpZ2h0LCBmbG9hdCBib3R0b20sIGZsb2F0IHRv
cCkKLXsKLSAgICBBU1NFUlQobWF0cml4LmlzSWRlbnRpdHkoKSk7Ci0gICAgCi0gICAgZmxvYXQg
ZGVsdGFYID0gcmlnaHQgLSBsZWZ0OwotICAgIGZsb2F0IGRlbHRhWSA9IHRvcCAtIGJvdHRvbTsK
LSAgICBpZiAoIWRlbHRhWCB8fCAhZGVsdGFZKQotICAgICAgICByZXR1cm47Ci0gICAgbWF0cml4
LnNldE0xMSgyLjBmIC8gZGVsdGFYKTsKLSAgICBtYXRyaXguc2V0TTQxKC0ocmlnaHQgKyBsZWZ0
KSAvIGRlbHRhWCk7Ci0gICAgbWF0cml4LnNldE0yMigyLjBmIC8gZGVsdGFZKTsKLSAgICBtYXRy
aXguc2V0TTQyKC0odG9wICsgYm90dG9tKSAvIGRlbHRhWSk7Ci0KLSAgICAvLyBVc2UgYmlnIGVu
b3VnaCBuZWFyL2ZhciB2YWx1ZXMsIHNvIHRoYXQgc2ltcGxlIHJvdGF0aW9ucyBvZiByYXRoZXIg
bGFyZ2Ugb2JqZWN0cyB3aWxsIG5vdAotICAgIC8vIGdldCBjbGlwcGVkLiAxMDAwMCBzaG91bGQg
Y292ZXIgbW9zdCBvZiB0aGUgc2NyZWVuIHJlc29sdXRpb25zLgotICAgIGNvbnN0IGZsb2F0IGZh
clZhbHVlID0gMTAwMDA7Ci0gICAgY29uc3QgZmxvYXQgbmVhclZhbHVlID0gLTEwMDAwOwotICAg
IG1hdHJpeC5zZXRNMzMoLTIuMGYgLyAoZmFyVmFsdWUgLSBuZWFyVmFsdWUpKTsKLSAgICBtYXRy
aXguc2V0TTQzKC0gKGZhclZhbHVlICsgbmVhclZhbHVlKSAvIChmYXJWYWx1ZSAtIG5lYXJWYWx1
ZSkpOwotICAgIG1hdHJpeC5zZXRNNDQoMS4wZik7Ci19Ci0KLUZFQ3VzdG9tRmlsdGVyOjpGRUN1
c3RvbUZpbHRlcihGaWx0ZXIqIGZpbHRlciwgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCogY3Vz
dG9tRmlsdGVyR2xvYmFsQ29udGV4dCwgUGFzc1JlZlB0cjxDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQ
cm9ncmFtPiB2YWxpZGF0ZWRQcm9ncmFtLCBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0
JiBwYXJhbWV0ZXJzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1l
c2hSb3dzLCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNo
Qm94VHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21GaWx0ZXJPcGVy
YXRpb246Ok1lc2hUeXBlIG1lc2hUeXBlKQorRkVDdXN0b21GaWx0ZXI6OkZFQ3VzdG9tRmlsdGVy
KEZpbHRlciogZmlsdGVyLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0LCBQ
YXNzUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0+IHZhbGlkYXRlZFByb2dyYW0s
IGNvbnN0IEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHBhcmFtZXRlcnMsCisgICAgdW5zaWdu
ZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1lc2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJPcGVyYXRpb246
Ok1lc2hCb3hUeXBlIG1lc2hCb3hUeXBlLCBDdXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hUeXBl
IG1lc2hUeXBlKQogICAgIDogRmlsdGVyRWZmZWN0KGZpbHRlcikKLSAgICAsIG1fZ2xvYmFsQ29u
dGV4dChjdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0KQotICAgICwgbV92YWxpZGF0ZWRQcm9ncmFt
KHZhbGlkYXRlZFByb2dyYW0pCi0gICAgLCBtX2NvbXBpbGVkUHJvZ3JhbSgwKSAvLyBEb24ndCBj
b21waWxlIHRoZSBwcm9ncmFtIHVubGVzcyB3ZSBuZWVkIHRvIHBhaW50LgorICAgICwgbV9jb250
ZXh0KGNvbnRleHQpCisgICAgLCBtX2N1c3RvbUZpbHRlclJlbmRlcmVyKEN1c3RvbUZpbHRlclJl
bmRlcmVyOjpjcmVhdGUobV9jb250ZXh0LCB2YWxpZGF0ZWRQcm9ncmFtLCBwYXJhbWV0ZXJzLCBt
ZXNoUm93cywgbWVzaENvbHVtbnMsIG1lc2hCb3hUeXBlLCBtZXNoVHlwZSkpCiAgICAgLCBtX2lu
cHV0VGV4dHVyZSgwKQogICAgICwgbV9mcmFtZUJ1ZmZlcigwKQogICAgICwgbV9kZXB0aEJ1ZmZl
cigwKQpAQCAtOTYsMjAgKzU3LDEzIEBAIEZFQ3VzdG9tRmlsdGVyOjpGRUN1c3RvbUZpbHRlcihG
aWx0ZXIqIGZpbHRlciwgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCogY3VzdG9tCiAgICAgLCBt
X211bHRpc2FtcGxlRnJhbWVCdWZmZXIoMCkKICAgICAsIG1fbXVsdGlzYW1wbGVSZW5kZXJCdWZm
ZXIoMCkKICAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aEJ1ZmZlcigwKQotICAgICwgbV9wYXJhbWV0
ZXJzKHBhcmFtZXRlcnMpCi0gICAgLCBtX21lc2hSb3dzKG1lc2hSb3dzKQotICAgICwgbV9tZXNo
Q29sdW1ucyhtZXNoQ29sdW1ucykKLSAgICAsIG1fbWVzaFR5cGUobWVzaFR5cGUpCiB7Ci0gICAg
Ly8gQW4gRkVDdXN0b21GaWx0ZXIgc2hvdWxkbid0IGhhdmUgYmVlbiBjcmVhdGVkIHVubGVzcyB0
aGUgcHJvZ3JhbSBwYXNzZWQgdmFsaWRhdGlvbi4KLSAgICBBU1NFUlQobV92YWxpZGF0ZWRQcm9n
cmFtLT5pc0luaXRpYWxpemVkKCkpOwogfQogCi1QYXNzUmVmUHRyPEZFQ3VzdG9tRmlsdGVyPiBG
RUN1c3RvbUZpbHRlcjo6Y3JlYXRlKEZpbHRlciogZmlsdGVyLCBDdXN0b21GaWx0ZXJHbG9iYWxD
b250ZXh0KiBjdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRl
clZhbGlkYXRlZFByb2dyYW0+IHZhbGlkYXRlZFByb2dyYW0sIGNvbnN0IEN1c3RvbUZpbHRlclBh
cmFtZXRlckxpc3QmIHBhcmFtZXRlcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1lc2hDb2x1bW5zLCBDdXN0
b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hCb3hUeXBlIG1lc2hCb3hUeXBlLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVz
aFR5cGUgbWVzaFR5cGUpCitQYXNzUmVmUHRyPEZFQ3VzdG9tRmlsdGVyPiBGRUN1c3RvbUZpbHRl
cjo6Y3JlYXRlKEZpbHRlciogZmlsdGVyLCBQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBj
b250ZXh0LCBQYXNzUmVmUHRyPEN1c3RvbUZpbHRlclZhbGlkYXRlZFByb2dyYW0+IHZhbGlkYXRl
ZFByb2dyYW0sIGNvbnN0IEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmIHBhcmFtZXRlcnMsCisg
ICAgdW5zaWduZWQgbWVzaFJvd3MsIHVuc2lnbmVkIG1lc2hDb2x1bW5zLCBDdXN0b21GaWx0ZXJP
cGVyYXRpb246Ok1lc2hCb3hUeXBlIG1lc2hCb3hUeXBlLCBDdXN0b21GaWx0ZXJPcGVyYXRpb246
Ok1lc2hUeXBlIG1lc2hUeXBlKQogewotICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVDdXN0b21G
aWx0ZXIoZmlsdGVyLCBjdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0LCB2YWxpZGF0ZWRQcm9ncmFt
LCBwYXJhbWV0ZXJzLCBtZXNoUm93cywgbWVzaENvbHVtbnMsIG1lc2hCb3hUeXBlLCBtZXNoVHlw
ZSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgRkVDdXN0b21GaWx0ZXIoZmlsdGVyLCBjb250
ZXh0LCB2YWxpZGF0ZWRQcm9ncmFtLCBwYXJhbWV0ZXJzLCBtZXNoUm93cywgbWVzaENvbHVtbnMs
IG1lc2hCb3hUeXBlLCBtZXNoVHlwZSkpOwogfQogCiBGRUN1c3RvbUZpbHRlcjo6fkZFQ3VzdG9t
RmlsdGVyKCkKQEAgLTExOSw4ICs3Myw3IEBAIEZFQ3VzdG9tRmlsdGVyOjp+RkVDdXN0b21GaWx0
ZXIoKQogCiB2b2lkIEZFQ3VzdG9tRmlsdGVyOjpkZWxldGVSZW5kZXJCdWZmZXJzKCkKIHsKLSAg
ICBpZiAoIW1fY29udGV4dCkKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX2NvbnRleHQp
OwogICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiAgICAgaWYgKG1faW5wdXRU
ZXh0dXJlKSB7CiAgICAgICAgIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVyZShtX2lucHV0VGV4dHVy
ZSk7CkBAIC0xODcsNDUgKzE0MCwzMyBAQCB2b2lkIEZFQ3VzdG9tRmlsdGVyOjpkcmF3RmlsdGVy
TWVzaChQbGF0Zm9ybTNET2JqZWN0IGlucHV0VGV4dHVyZSkKICAgICBib29sIG11bHRpc2FtcGxl
ID0gY2FuVXNlTXVsdGlzYW1wbGVCdWZmZXJzKCk7CiAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVi
dWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBtdWx0aXNhbXBsZSA/IG1fbXVs
dGlzYW1wbGVGcmFtZUJ1ZmZlciA6IG1fZnJhbWVCdWZmZXIpOwogICAgIG1fY29udGV4dC0+dmll
d3BvcnQoMCwgMCwgbV9jb250ZXh0U2l6ZS53aWR0aCgpLCBtX2NvbnRleHRTaXplLmhlaWdodCgp
KTsKLSAgICAKKwogICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcigwLCAwLCAwLCAwKTsKICAgICBt
X2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUIHwgR3Jh
cGhpY3NDb250ZXh0M0Q6OkRFUFRIX0JVRkZFUl9CSVQpOwotICAgIAotICAgIGJpbmRQcm9ncmFt
QW5kQnVmZmVycyhpbnB1dFRleHR1cmUpOwotICAgIG1fY29udGV4dC0+ZHJhd0VsZW1lbnRzKEdy
YXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRVMsIG1fbWVzaC0+aW5kaWNlc0NvdW50KCksIEdyYXBo
aWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCwgMCk7Ci0gICAgdW5iaW5kVmVydGV4QXR0cmli
dXRlcygpOworCisgICAgbV9jdXN0b21GaWx0ZXJSZW5kZXJlci0+ZHJhdyhpbnB1dFRleHR1cmUs
IG1fY29udGV4dFNpemUpOwogCiAgICAgaWYgKG11bHRpc2FtcGxlKQogICAgICAgICByZXNvbHZl
TXVsdGlzYW1wbGVCdWZmZXIoKTsKIH0KIAotYm9vbCBGRUN1c3RvbUZpbHRlcjo6cHJlcGFyZUZv
ckRyYXdpbmcoQ3VzdG9tRmlsdGVyRHJhd1R5cGUgZmlsdGVyRHJhd1R5cGUpCitib29sIEZFQ3Vz
dG9tRmlsdGVyOjpwcmVwYXJlRm9yRHJhd2luZygpCiB7Ci0gICAgaWYgKCFtX2NvbnRleHQgJiYg
IWluaXRpYWxpemVDb250ZXh0KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKICAgICBtX2NvbnRl
eHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwogCi0gICAgLy8gSWYgdGhlIHNoYWRlciBoYWQgY29t
cGlsZXIgZXJyb3JzIHdlIGNhbm5vdCBkcmF3IGFueXRoaW5nLgotICAgIGlmICghbV9jb21waWxl
ZFByb2dyYW0tPmlzSW5pdGlhbGl6ZWQoKSkKKyAgICBpZiAoIW1fY3VzdG9tRmlsdGVyUmVuZGVy
ZXItPnByZXBhcmVGb3JEcmF3aW5nKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKKwog
ICAgIC8vIE9ubHkgYWxsb2NhdGUgYSB0ZXh0dXJlIGlmIHRoZSBwcm9ncmFtIG5lZWRzIG9uZSBh
bmQgdGhlIGNhbGxlciBkb2Vzbid0IGFsbG9jYXRlIG9uZSBieSBpdHNlbGYuCi0gICAgaWYgKChw
cm9ncmFtTmVlZHNJbnB1dFRleHR1cmUoKSAmJiAoZmlsdGVyRHJhd1R5cGUgPT0gTkVFRFNfSU5Q
VVRfVEVYVFVSRSkgJiYgIWVuc3VyZUlucHV0VGV4dHVyZSgpKQotICAgICAgICB8fCAhZW5zdXJl
RnJhbWVCdWZmZXIoKSkKKyAgICBpZiAoKG1fY3VzdG9tRmlsdGVyUmVuZGVyZXItPnByb2dyYW1O
ZWVkc0lucHV0VGV4dHVyZSgpICYmICFlbnN1cmVJbnB1dFRleHR1cmUoKSkgfHwgIWVuc3VyZUZy
YW1lQnVmZmVyKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KIAotYm9vbCBGRUN1c3RvbUZpbHRlcjo6cHJvZ3JhbU5lZWRzSW5wdXRUZXh0dXJlKCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQobV9jb21waWxlZFByb2dyYW0uZ2V0KCkpOwotICAgIHJldHVy
biBtX2NvbXBpbGVkUHJvZ3JhbS0+c2FtcGxlckxvY2F0aW9uKCkgIT0gLTE7CisgICAgcmV0dXJu
IHRydWU7CiB9CiAKIGJvb2wgRkVDdXN0b21GaWx0ZXI6OmFwcGx5U2hhZGVyKCkKIHsKLSAgICBV
aW50OENsYW1wZWRBcnJheSogZHN0UGl4ZWxBcnJheSA9IG1fdmFsaWRhdGVkUHJvZ3JhbS0+cHJv
Z3JhbUluZm8oKS5wcm9ncmFtVHlwZSgpID09IFBST0dSQU1fVFlQRV9CTEVORFNfRUxFTUVOVF9U
RVhUVVJFID8gY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkgOiBjcmVhdGVVbm11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOworICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBkc3RQaXhlbEFycmF5
ID0gbV9jdXN0b21GaWx0ZXJSZW5kZXJlci0+cHJlbXVsdGlwbGllZEFscGhhKCkgPyBjcmVhdGVQ
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKSA6IGNyZWF0ZVVubXVsdGlwbGllZEltYWdlUmVzdWx0
KCk7CiAgICAgaWYgKCFkc3RQaXhlbEFycmF5KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAg
LTIzOCw3ICsxNzksNyBAQCBib29sIEZFQ3VzdG9tRmlsdGVyOjphcHBseVNoYWRlcigpCiAgICAg
aWYgKCFyZXNpemVDb250ZXh0SWZOZWVkZWQobmV3Q29udGV4dFNpemUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICBib29sIG5lZWRzSW5wdXRUZXh0dXJlID0gcHJvZ3JhbU5lZWRzSW5w
dXRUZXh0dXJlKCk7CisgICAgYm9vbCBuZWVkc0lucHV0VGV4dHVyZSA9IG1fY3VzdG9tRmlsdGVy
UmVuZGVyZXItPnByb2dyYW1OZWVkc0lucHV0VGV4dHVyZSgpOwogICAgIGlmIChuZWVkc0lucHV0
VGV4dHVyZSkgewogICAgICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNyY1BpeGVsQXJy
YXkgPSBpbi0+YXNVbm11bHRpcGxpZWRJbWFnZShlZmZlY3REcmF3aW5nUmVjdCk7CiAgICAgICAg
IHVwbG9hZElucHV0VGV4dHVyZShzcmNQaXhlbEFycmF5LmdldCgpKTsKQEAgLTI1MSwyNSArMTky
LDYgQEAgYm9vbCBGRUN1c3RvbUZpbHRlcjo6YXBwbHlTaGFkZXIoKQogICAgIHJldHVybiB0cnVl
OwogfQogCi1ib29sIEZFQ3VzdG9tRmlsdGVyOjppbml0aWFsaXplQ29udGV4dCgpCi17Ci0gICAg
QVNTRVJUKCFtX2NvbnRleHQuZ2V0KCkpOwotICAgIG1fY29udGV4dCA9IG1fZ2xvYmFsQ29udGV4
dC0+Y29udGV4dCgpOwotICAgIGlmICghbV9jb250ZXh0KQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSAgICBtX2NvbXBpbGVkUHJv
Z3JhbSA9IG1fdmFsaWRhdGVkUHJvZ3JhbS0+Y29tcGlsZWRQcm9ncmFtKCk7Ci0KLSAgICAvLyBG
SVhNRTogU2hhcmluZyB0aGUgbWVzaCB3b3VsZCBqdXN0IHNhdmUgdGhlIHRpbWUgbmVlZGVkIHRv
IHVwbG9hZCBpdCB0byB0aGUgR1BVLCBzbyBJIGFzc3VtZSB3ZSBjb3VsZAotICAgIC8vIGJlbmNo
bWFyayB0aGF0IGZvciBwZXJmb3JtYW5jZS4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODg0MjkKLSAgICBtX21lc2ggPSBDdXN0b21GaWx0ZXJNZXNoOjpj
cmVhdGUobV9jb250ZXh0LmdldCgpLCBtX21lc2hDb2x1bW5zLCBtX21lc2hSb3dzLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmxvYXRSZWN0KDAsIDAsIDEsIDEpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX21lc2hUeXBlKTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCiBib29sIEZFQ3VzdG9tRmlsdGVyOjplbnN1cmVJbnB1dFRleHR1
cmUoKQogewogICAgIGlmICghbV9pbnB1dFRleHR1cmUpCkBAIC0zMzIsNyArMjU0LDcgQEAgdm9p
ZCBGRUN1c3RvbUZpbHRlcjo6cmVzb2x2ZU11bHRpc2FtcGxlQnVmZmVyKCkKIAogICAgIG1fY29u
dGV4dC0+YmluZEZyYW1lYnVmZmVyKEV4dGVuc2lvbnMzRDo6UkVBRF9GUkFNRUJVRkZFUiwgMCk7
CiAgICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoRXh0ZW5zaW9uczNEOjpEUkFXX0ZSQU1F
QlVGRkVSLCAwKTsKLSAgICAKKwogICAgIG1fY29udGV4dC0+YmluZEZyYW1lYnVmZmVyKEdyYXBo
aWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgbV9mcmFtZUJ1ZmZlcik7CiB9CiAKQEAgLTM0NCwx
MSArMjY2LDEyIEBAIGJvb2wgRkVDdXN0b21GaWx0ZXI6OmNhblVzZU11bHRpc2FtcGxlQnVmZmVy
cygpIGNvbnN0CiBib29sIEZFQ3VzdG9tRmlsdGVyOjpyZXNpemVNdWx0aXNhbXBsZUJ1ZmZlcnMo
Y29uc3QgSW50U2l6ZSYgbmV3Q29udGV4dFNpemUpCiB7CiAgICAgaWYgKCFtX3RyaWVkTXVsdGlz
YW1wbGVCdWZmZXIgJiYgIWNyZWF0ZU11bHRpc2FtcGxlQnVmZmVyKCkpCi0gICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gCisgICAgICAgIHJldHVybiBmYWxzZTsKKwogICAgIGlmICghY2FuVXNlTXVs
dGlzYW1wbGVCdWZmZXJzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIHN0YXRpYyBj
b25zdCBpbnQga01heFNhbXBsZUNvdW50ID0gNDsKICAgICBpbnQgbWF4U3VwcG9ydGVkU2FtcGxl
Q291bnQgPSAwOwogICAgIG1fY29udGV4dC0+Z2V0SW50ZWdlcnYoRXh0ZW5zaW9uczNEOjpNQVhf
U0FNUExFUywgJm1heFN1cHBvcnRlZFNhbXBsZUNvdW50KTsKICAgICBpbnQgc2FtcGxlQ291bnQg
PSBzdGQ6Om1pbihrTWF4U2FtcGxlQ291bnQsIG1heFN1cHBvcnRlZFNhbXBsZUNvdW50KTsKQEAg
LTM1OSw3ICsyODIsNyBAQCBib29sIEZFQ3VzdG9tRmlsdGVyOjpyZXNpemVNdWx0aXNhbXBsZUJ1
ZmZlcnMoY29uc3QgSW50U2l6ZSYgbmV3Q29udGV4dFNpemUpCiAKICAgICBFeHRlbnNpb25zM0Qq
IGV4dGVuc2lvbnMgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKICAgICBBU1NFUlQoZXh0
ZW5zaW9ucyk7Ci0gICAgCisKICAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGlj
c0NvbnRleHQzRDo6RlJBTUVCVUZGRVIsIG1fbXVsdGlzYW1wbGVGcmFtZUJ1ZmZlcik7CiAKICAg
ICBtX2NvbnRleHQtPmJpbmRSZW5kZXJidWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OlJFTkRFUkJV
RkZFUiwgbV9tdWx0aXNhbXBsZVJlbmRlckJ1ZmZlcik7CkBAIC00MDksNyArMzMyLDcgQEAgYm9v
bCBGRUN1c3RvbUZpbHRlcjo6cmVzaXplQ29udGV4dChjb25zdCBJbnRTaXplJiBuZXdDb250ZXh0
U2l6ZSkKICAgICBtX2NvbnRleHQtPnRleEltYWdlMkREaXJlY3QoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIDAsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBuZXdDb250ZXh0U2l6ZS53
aWR0aCgpLCBuZXdDb250ZXh0U2l6ZS5oZWlnaHQoKSwgMCwgR3JhcGhpY3NDb250ZXh0M0Q6OlJH
QkEsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCAwKTsKICNlbmRpZgogICAgIG1f
Y29udGV4dC0+ZnJhbWVidWZmZXJUZXh0dXJlMkQoR3JhcGhpY3NDb250ZXh0M0Q6OkZSQU1FQlVG
RkVSLCBHcmFwaGljc0NvbnRleHQzRDo6Q09MT1JfQVRUQUNITUVOVDAsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBtX2Rlc3RUZXh0dXJlLCAwKTsKLSAKKwogICAgIC8vIFdlIGRvbid0
IG5lZWQgdGhlIGRlcHRoIGJ1ZmZlciBmb3IgdGhlIHRleHR1cmUgZnJhbWVidWZmZXIsIGlmIHdl
IGFscmVhZHkKICAgICAvLyBoYXZlIGEgbXVsdGlzYW1wbGUgYnVmZmVyLgogICAgIGlmICghbXVs
dGlzYW1wbGUpIHsKQEAgLTQyOCwxNzEgKzM1MSwxMSBAQCBib29sIEZFQ3VzdG9tRmlsdGVyOjpy
ZXNpemVDb250ZXh0KGNvbnN0IEludFNpemUmIG5ld0NvbnRleHRTaXplKQogICAgIH0KIAogICAg
IG1fY29udGV4dC0+YmluZFJlbmRlcmJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6UkVOREVSQlVG
RkVSLCAwKTsKLSAgICAKKwogICAgIG1fY29udGV4dFNpemUgPSBuZXdDb250ZXh0U2l6ZTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBGRUN1c3RvbUZpbHRlcjo6YmluZFZlcnRleEF0dHJp
YnV0ZShpbnQgYXR0cmlidXRlTG9jYXRpb24sIHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIG9mZnNl
dCkKLXsKLSAgICBpZiAoYXR0cmlidXRlTG9jYXRpb24gIT0gLTEpIHsKLSAgICAgICAgbV9jb250
ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKGF0dHJpYnV0ZUxvY2F0aW9uLCBzaXplLCBHcmFwaGlj
c0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCBtX21lc2gtPmJ5dGVzUGVyVmVydGV4KCksIG9mZnNl
dCk7Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoYXR0cmlidXRl
TG9jYXRpb24pOwotICAgIH0KLX0KLQotdm9pZCBGRUN1c3RvbUZpbHRlcjo6dW5iaW5kVmVydGV4
QXR0cmlidXRlKGludCBhdHRyaWJ1dGVMb2NhdGlvbikKLXsKLSAgICBpZiAoYXR0cmlidXRlTG9j
YXRpb24gIT0gLTEpCi0gICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KGF0dHJpYnV0ZUxvY2F0aW9uKTsKLX0KLQotdm9pZCBGRUN1c3RvbUZpbHRlcjo6YmluZFByb2dy
YW1BcnJheVBhcmFtZXRlcnMoaW50IHVuaWZvcm1Mb2NhdGlvbiwgQ3VzdG9tRmlsdGVyQXJyYXlQ
YXJhbWV0ZXIqIGFycmF5UGFyYW1ldGVyKQotewotICAgIHVuc2lnbmVkIHBhcmFtZXRlclNpemUg
PSBhcnJheVBhcmFtZXRlci0+c2l6ZSgpOwotICAgIFZlY3RvcjxHQzNEZmxvYXQ+IGZsb2F0VmVj
dG9yOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHBhcmFtZXRlclNpemU7ICsraSkK
LSAgICAgICAgZmxvYXRWZWN0b3IuYXBwZW5kKGFycmF5UGFyYW1ldGVyLT52YWx1ZUF0KGkpKTsK
LQotICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdih1bmlmb3JtTG9jYXRpb24sIHBhcmFtZXRlclNp
emUsIGZsb2F0VmVjdG9yLmRhdGEoKSk7Ci19Ci0KLXZvaWQgRkVDdXN0b21GaWx0ZXI6OmJpbmRQ
cm9ncmFtTnVtYmVyUGFyYW1ldGVycyhpbnQgdW5pZm9ybUxvY2F0aW9uLCBDdXN0b21GaWx0ZXJO
dW1iZXJQYXJhbWV0ZXIqIG51bWJlclBhcmFtZXRlcikKLXsKLSAgICBzd2l0Y2ggKG51bWJlclBh
cmFtZXRlci0+c2l6ZSgpKSB7Ci0gICAgY2FzZSAxOgotICAgICAgICBtX2NvbnRleHQtPnVuaWZv
cm0xZih1bmlmb3JtTG9jYXRpb24sIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgwKSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgMjoKLSAgICAgICAgbV9jb250ZXh0LT51bmlmb3JtMmYodW5p
Zm9ybUxvY2F0aW9uLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMCksIG51bWJlclBhcmFtZXRl
ci0+dmFsdWVBdCgxKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMzoKLSAgICAgICAgbV9j
b250ZXh0LT51bmlmb3JtM2YodW5pZm9ybUxvY2F0aW9uLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVl
QXQoMCksIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgxKSwgbnVtYmVyUGFyYW1ldGVyLT52YWx1
ZUF0KDIpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSA0OgotICAgICAgICBtX2NvbnRleHQt
PnVuaWZvcm00Zih1bmlmb3JtTG9jYXRpb24sIG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgwKSwg
bnVtYmVyUGFyYW1ldGVyLT52YWx1ZUF0KDEpLCBudW1iZXJQYXJhbWV0ZXItPnZhbHVlQXQoMiks
IG51bWJlclBhcmFtZXRlci0+dmFsdWVBdCgzKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLX0KLQotdm9pZCBGRUN1
c3RvbUZpbHRlcjo6YmluZFByb2dyYW1UcmFuc2Zvcm1QYXJhbWV0ZXIoaW50IHVuaWZvcm1Mb2Nh
dGlvbiwgQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKiB0cmFuc2Zvcm1QYXJhbWV0ZXIp
Ci17Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4OwotICAgIGlmIChtX2NvbnRleHRT
aXplLndpZHRoKCkgJiYgbV9jb250ZXh0U2l6ZS5oZWlnaHQoKSkgewotICAgICAgICAvLyBUaGUg
dmlld3BvcnQgaXMgYSBib3ggd2l0aCB0aGUgc2l6ZSBvZiAxIHVuaXQsIHNvIHdlIGFyZSBzY2Fs
bGluZyB1cCBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IHRyYW5zbGF0aW9ucyBoYXBwZW4gdXNpbmcg
cmVhbCBwaXhlbAotICAgICAgICAvLyB1bml0cy4gQXQgdGhlIGVuZCB3ZSBzY2FsZSBiYWNrIGRv
d24gaW4gb3JkZXIgdG8gbWFwIGl0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIGJveC4gTm90ZSB0aGF0
IHRyYW5zZm9ybXMgY29tZSBpbiByZXZlcnNlIG9yZGVyLCBiZWNhdXNlIGl0IGlzIAotICAgICAg
ICAvLyBzdXBwb3NlZCB0byBtdWx0aXBseSB0byB0aGUgbGVmdCBvZiB0aGUgY29vcmRpbmF0ZXMg
b2YgdGhlIHZlcnRpY2VzLgotICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIG9yaWdpbiAoMCwgMCkg
b2YgdGhlIHZpZXdwb3J0IGlzIGluIHRoZSBtaWRkbGUgb2YgdGhlIGNvbnRleHQsIHNvIHRoZXJl
J3Mgbm8gbmVlZCB0byBjaGFuZ2UgdGhlIG9yaWdpbiBvZiB0aGUgdHJhbnNmb3JtCi0gICAgICAg
IC8vIGluIG9yZGVyIHRvIHJvdGF0ZSBhcm91bmQgdGhlIG1pZGRsZSBvZiBtZXNoLgotICAgICAg
ICBtYXRyaXguc2NhbGUzZCgxLjAgLyBtX2NvbnRleHRTaXplLndpZHRoKCksIDEuMCAvIG1fY29u
dGV4dFNpemUuaGVpZ2h0KCksIDEpOwotICAgICAgICB0cmFuc2Zvcm1QYXJhbWV0ZXItPmFwcGx5
VHJhbnNmb3JtKG1hdHJpeCwgbV9jb250ZXh0U2l6ZSk7Ci0gICAgICAgIG1hdHJpeC5zY2FsZTNk
KG1fY29udGV4dFNpemUud2lkdGgoKSwgbV9jb250ZXh0U2l6ZS5oZWlnaHQoKSwgMSk7Ci0gICAg
fQotICAgIGZsb2F0IGdsTWF0cml4WzE2XTsKLSAgICBtYXRyaXgudG9Db2x1bW5NYWpvckZsb2F0
QXJyYXkoZ2xNYXRyaXgpOwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdih1bmlmb3Jt
TG9jYXRpb24sIDEsIGZhbHNlLCAmZ2xNYXRyaXhbMF0pOwotfQotCi12b2lkIEZFQ3VzdG9tRmls
dGVyOjpiaW5kUHJvZ3JhbVBhcmFtZXRlcnMoKQotewotICAgIC8vIEZJWE1FOiBGaW5kIGEgd2F5
IHRvIHJlc2V0IHVuaWZvcm1zIHRoYXQgYXJlIG5vdCBzcGVjaWZpZWQgaW4gQ1NTLiBUaGlzIGlz
IG5lZWRlZCB0byBhdm9pZCB1c2luZyB2YWx1ZXMKLSAgICAvLyBzZXQgYnkgb3RoZXIgcHJldmlv
dXMgcmVuZGVyZWQgZmlsdGVycy4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NzY0NDAKLSAgICAKLSAgICBzaXplX3QgcGFyYW1ldGVyc1NpemUgPSBtX3Bh
cmFtZXRlcnMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcGFyYW1ldGVyc1Np
emU7ICsraSkgewotICAgICAgICBDdXN0b21GaWx0ZXJQYXJhbWV0ZXIqIHBhcmFtZXRlciA9IG1f
cGFyYW1ldGVycy5hdChpKS5nZXQoKTsKLSAgICAgICAgaW50IHVuaWZvcm1Mb2NhdGlvbiA9IG1f
Y29tcGlsZWRQcm9ncmFtLT51bmlmb3JtTG9jYXRpb25CeU5hbWUocGFyYW1ldGVyLT5uYW1lKCkp
OwotICAgICAgICBpZiAodW5pZm9ybUxvY2F0aW9uID09IC0xKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIHN3aXRjaCAocGFyYW1ldGVyLT5wYXJhbWV0ZXJUeXBlKCkpIHsKLSAgICAg
ICAgY2FzZSBDdXN0b21GaWx0ZXJQYXJhbWV0ZXI6OkFSUkFZOgotICAgICAgICAgICAgYmluZFBy
b2dyYW1BcnJheVBhcmFtZXRlcnModW5pZm9ybUxvY2F0aW9uLCBzdGF0aWNfY2FzdDxDdXN0b21G
aWx0ZXJBcnJheVBhcmFtZXRlcio+KHBhcmFtZXRlcikpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQ3VzdG9tRmlsdGVyUGFyYW1ldGVyOjpOVU1CRVI6Ci0gICAgICAgICAgICBi
aW5kUHJvZ3JhbU51bWJlclBhcmFtZXRlcnModW5pZm9ybUxvY2F0aW9uLCBzdGF0aWNfY2FzdDxD
dXN0b21GaWx0ZXJOdW1iZXJQYXJhbWV0ZXIqPihwYXJhbWV0ZXIpKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIEN1c3RvbUZpbHRlclBhcmFtZXRlcjo6VFJBTlNGT1JNOgotICAg
ICAgICAgICAgYmluZFByb2dyYW1UcmFuc2Zvcm1QYXJhbWV0ZXIodW5pZm9ybUxvY2F0aW9uLCBz
dGF0aWNfY2FzdDxDdXN0b21GaWx0ZXJUcmFuc2Zvcm1QYXJhbWV0ZXIqPihwYXJhbWV0ZXIpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEZFQ3VzdG9t
RmlsdGVyOjpiaW5kUHJvZ3JhbUFuZEJ1ZmZlcnMoUGxhdGZvcm0zRE9iamVjdCBpbnB1dFRleHR1
cmUpCi17Ci0gICAgQVNTRVJUKG1fY29tcGlsZWRQcm9ncmFtLT5pc0luaXRpYWxpemVkKCkpOwot
Ci0gICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKG1fY29tcGlsZWRQcm9ncmFtLT5wcm9ncmFtKCkp
OwotICAgIAotICAgIGlmIChwcm9ncmFtTmVlZHNJbnB1dFRleHR1cmUoKSkgewotICAgICAgICAv
LyBXZSBzaG91bGQgYmUgYmluZGluZyB0aGUgRE9NIGVsZW1lbnQgdGV4dHVyZSBzYW1wbGVyIG9u
bHkgaWYgdGhlIGF1dGhvciBpcyB1c2luZyB0aGUgQ1NTIG1peCBmdW5jdGlvbi4KLSAgICAgICAg
QVNTRVJUKG1fdmFsaWRhdGVkUHJvZ3JhbS0+cHJvZ3JhbUluZm8oKS5wcm9ncmFtVHlwZSgpID09
IFBST0dSQU1fVFlQRV9CTEVORFNfRUxFTUVOVF9URVhUVVJFKTsKLSAgICAgICAgQVNTRVJUKG1f
Y29tcGlsZWRQcm9ncmFtLT5zYW1wbGVyTG9jYXRpb24oKSAhPSAtMSk7Ci0KLSAgICAgICAgbV9j
b250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7Ci0gICAg
ICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKG1fY29tcGlsZWRQcm9ncmFtLT5zYW1wbGVyTG9jYXRp
b24oKSwgMCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfMkQsIGlucHV0VGV4dHVyZSk7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4UGFy
YW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgICAg
IG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
OkxJTkVBUik7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFw
aGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgICAgIG1fY29udGV4dC0+dGV4UGFy
YW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAg
fQotICAgIAotICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+cHJvamVjdGlvbk1hdHJpeExvY2F0
aW9uKCkgIT0gLTEpIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggcHJvamVjdGlvbk1h
dHJpeDsgCi0gICAgICAgIG9ydGhvZ29uYWxQcm9qZWN0aW9uTWF0cml4KHByb2plY3Rpb25NYXRy
aXgsIC0wLjUsIDAuNSwgLTAuNSwgMC41KTsKLSAgICAgICAgZmxvYXQgZ2xQcm9qZWN0aW9uTWF0
cml4WzE2XTsKLSAgICAgICAgcHJvamVjdGlvbk1hdHJpeC50b0NvbHVtbk1ham9yRmxvYXRBcnJh
eShnbFByb2plY3Rpb25NYXRyaXgpOwotICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0
ZnYobV9jb21waWxlZFByb2dyYW0tPnByb2plY3Rpb25NYXRyaXhMb2NhdGlvbigpLCAxLCBmYWxz
ZSwgJmdsUHJvamVjdGlvbk1hdHJpeFswXSk7Ci0gICAgfQotCi0gICAgQVNTRVJUKG1fbWVzaENv
bHVtbnMpOwotICAgIEFTU0VSVChtX21lc2hSb3dzKTsKLQotICAgIGlmIChtX2NvbXBpbGVkUHJv
Z3JhbS0+bWVzaFNpemVMb2NhdGlvbigpICE9IC0xKQotICAgICAgICBtX2NvbnRleHQtPnVuaWZv
cm0yZihtX2NvbXBpbGVkUHJvZ3JhbS0+bWVzaFNpemVMb2NhdGlvbigpLCBtX21lc2hDb2x1bW5z
LCBtX21lc2hSb3dzKTsKLQotICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+dGlsZVNpemVMb2Nh
dGlvbigpICE9IC0xKQotICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX2NvbXBpbGVkUHJv
Z3JhbS0+dGlsZVNpemVMb2NhdGlvbigpLCAxLjAgLyBtX21lc2hDb2x1bW5zLCAxLjAgLyBtX21l
c2hSb3dzKTsKLQotICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+bWVzaEJveExvY2F0aW9uKCkg
IT0gLTEpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBjaGFuZ2Ugd2hlbiBmaWx0ZXIg
bWFyZ2lucyB3aWxsIGJlIGltcGxlbWVudGVkLAotICAgICAgICAvLyBzZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTcxNDAwCi0gICAgICAgIG1fY29udGV4dC0+dW5p
Zm9ybTRmKG1fY29tcGlsZWRQcm9ncmFtLT5tZXNoQm94TG9jYXRpb24oKSwgLTAuNSwgLTAuNSwg
MS4wLCAxLjApOwotICAgIH0KLQotICAgIGlmIChtX2NvbXBpbGVkUHJvZ3JhbS0+c2FtcGxlclNp
emVMb2NhdGlvbigpICE9IC0xKQotICAgICAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX2NvbXBp
bGVkUHJvZ3JhbS0+c2FtcGxlclNpemVMb2NhdGlvbigpLCBtX2NvbnRleHRTaXplLndpZHRoKCks
IG1fY29udGV4dFNpemUuaGVpZ2h0KCkpOwotICAgIAotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZl
cihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX21lc2gtPnZlcnRpY2VzQnVmZmVy
T2JqZWN0KCkpOwotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6
RUxFTUVOVF9BUlJBWV9CVUZGRVIsIG1fbWVzaC0+ZWxlbWVudHNCdWZmZXJPYmplY3QoKSk7Ci0K
LSAgICBiaW5kVmVydGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFtLT5wb3NpdGlvbkF0dHJp
YkxvY2F0aW9uKCksIFBvc2l0aW9uQXR0cmliU2l6ZSwgUG9zaXRpb25BdHRyaWJPZmZzZXQpOwot
ICAgIGJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPnRleEF0dHJpYkxvY2F0
aW9uKCksIFRleEF0dHJpYlNpemUsIFRleEF0dHJpYk9mZnNldCk7Ci0gICAgLy8gRklYTUU6IEdl
dCByaWQgb2YgdGhlIGludGVybmFsIHRleCBjb29yZCBhdHRyaWJ1dGUgImNzc19hX3RleENvb3Jk
Ii4gCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTk0MzU4
Ci0gICAgYmluZFZlcnRleEF0dHJpYnV0ZShtX2NvbXBpbGVkUHJvZ3JhbS0+aW50ZXJuYWxUZXhD
b29yZEF0dHJpYkxvY2F0aW9uKCksIFRleEF0dHJpYlNpemUsIFRleEF0dHJpYk9mZnNldCk7Ci0g
ICAgYmluZFZlcnRleEF0dHJpYnV0ZShtX2NvbXBpbGVkUHJvZ3JhbS0+bWVzaEF0dHJpYkxvY2F0
aW9uKCksIE1lc2hBdHRyaWJTaXplLCBNZXNoQXR0cmliT2Zmc2V0KTsKLSAgICBpZiAobV9tZXNo
VHlwZSA9PSBDdXN0b21GaWx0ZXJPcGVyYXRpb246OkRFVEFDSEVEKQotICAgICAgICBiaW5kVmVy
dGV4QXR0cmlidXRlKG1fY29tcGlsZWRQcm9ncmFtLT50cmlhbmdsZUF0dHJpYkxvY2F0aW9uKCks
IFRyaWFuZ2xlQXR0cmliU2l6ZSwgVHJpYW5nbGVBdHRyaWJPZmZzZXQpOwotICAgIAotICAgIGJp
bmRQcm9ncmFtUGFyYW1ldGVycygpOwotfQotCi12b2lkIEZFQ3VzdG9tRmlsdGVyOjp1bmJpbmRW
ZXJ0ZXhBdHRyaWJ1dGVzKCkKLXsKLSAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxl
ZFByb2dyYW0tPnBvc2l0aW9uQXR0cmliTG9jYXRpb24oKSk7Ci0gICAgdW5iaW5kVmVydGV4QXR0
cmlidXRlKG1fY29tcGlsZWRQcm9ncmFtLT50ZXhBdHRyaWJMb2NhdGlvbigpKTsKLSAgICB1bmJp
bmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dyYW0tPmludGVybmFsVGV4Q29vcmRBdHRy
aWJMb2NhdGlvbigpKTsKLSAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUobV9jb21waWxlZFByb2dy
YW0tPm1lc2hBdHRyaWJMb2NhdGlvbigpKTsKLSAgICBpZiAobV9tZXNoVHlwZSA9PSBDdXN0b21G
aWx0ZXJPcGVyYXRpb246OkRFVEFDSEVEKQotICAgICAgICB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGUo
bV9jb21waWxlZFByb2dyYW0tPnRyaWFuZ2xlQXR0cmliTG9jYXRpb24oKSk7Ci19Ci0KIHZvaWQg
RkVDdXN0b21GaWx0ZXI6OmR1bXAoKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUN1c3RvbUZpbHRlci5oCmluZGV4IDA5ZGE1
ZjFjN2Y3NDY2ODA5ZTkzYThiODg0ZmQyYTFkNTZiOGUxYjQuLjkyYjMxMTk3ODg2Njk1ZWUzODAw
MWRlNzgxNjkxMWIxNGExMGQ4MjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDdXN0b21GaWx0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ3VzdG9tRmlsdGVyLmgKQEAgLTQ0LDIzICs0NCwx
NSBAQCBjbGFzcyBVaW50OENsYW1wZWRBcnJheTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1j
bGFzcyBDYWNoZWRTaGFkZXI7Ci1jbGFzcyBDdXN0b21GaWx0ZXJBcnJheVBhcmFtZXRlcjsKLWNs
YXNzIEN1c3RvbUZpbHRlckNvbXBpbGVkUHJvZ3JhbTsKLWNsYXNzIEN1c3RvbUZpbHRlckdsb2Jh
bENvbnRleHQ7Ci1jbGFzcyBDdXN0b21GaWx0ZXJNZXNoOwotY2xhc3MgQ3VzdG9tRmlsdGVyTnVt
YmVyUGFyYW1ldGVyOwotY2xhc3MgQ3VzdG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyOworY2xh
c3MgQ3VzdG9tRmlsdGVyUmVuZGVyZXI7CiBjbGFzcyBDdXN0b21GaWx0ZXJWYWxpZGF0ZWRQcm9n
cmFtOwotY2xhc3MgRHJhd2luZ0J1ZmZlcjsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogY2xh
c3MgSW50U2l6ZTsKIAogY2xhc3MgRkVDdXN0b21GaWx0ZXIgOiBwdWJsaWMgRmlsdGVyRWZmZWN0
IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGRUN1c3RvbUZpbHRlcj4gY3JlYXRl
KEZpbHRlciosIEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQqLCBQYXNzUmVmUHRyPEN1c3RvbUZp
bHRlclZhbGlkYXRlZFByb2dyYW0+LCBjb25zdCBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0JiwK
LSAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBtZXNoUm93cywgdW5zaWduZWQgbWVzaENvbHVt
bnMsIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaEJveFR5cGUsIAotICAgICAgICAgICAgICAg
ICAgIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaFR5cGUpOworICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEZFQ3VzdG9tRmlsdGVyPiBjcmVhdGUoRmlsdGVyKiwgUGFzc1JlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4sIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4sIGNvbnN0
IEN1c3RvbUZpbHRlclBhcmFtZXRlckxpc3QmLAorICAgICAgICB1bnNpZ25lZCBtZXNoUm93cywg
dW5zaWduZWQgbWVzaENvbHVtbnMsIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaEJveFR5cGUs
IEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaFR5cGUpOwogCiAgICAgdmlydHVhbCB2b2lkIHBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpOwogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CkBAIC02OCwy
MyArNjAsMTcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgVGV4dFN0cmVhbSYgZXh0ZXJuYWxSZXBy
ZXNlbnRhdGlvbihUZXh0U3RyZWFtJiwgaW50IGluZGVudGlvbikgY29uc3Q7CiAKIHByaXZhdGU6
Ci0gICAgRkVDdXN0b21GaWx0ZXIoRmlsdGVyKiwgQ3VzdG9tRmlsdGVyR2xvYmFsQ29udGV4dCos
IFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4sIGNvbnN0IEN1c3RvbUZp
bHRlclBhcmFtZXRlckxpc3QmLAotICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1lc2hSb3dz
LCB1bnNpZ25lZCBtZXNoQ29sdW1ucywgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoQm94VHlw
ZSwgCi0gICAgICAgICAgICAgICAgICAgQ3VzdG9tRmlsdGVyT3BlcmF0aW9uOjpNZXNoVHlwZSk7
CisgICAgRkVDdXN0b21GaWx0ZXIoRmlsdGVyKiwgUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQz
RD4sIFBhc3NSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4sIGNvbnN0IEN1c3Rv
bUZpbHRlclBhcmFtZXRlckxpc3QmLAorICAgICAgICB1bnNpZ25lZCBtZXNoUm93cywgdW5zaWdu
ZWQgbWVzaENvbHVtbnMsIEN1c3RvbUZpbHRlck9wZXJhdGlvbjo6TWVzaEJveFR5cGUsIEN1c3Rv
bUZpbHRlck9wZXJhdGlvbjo6TWVzaFR5cGUpOwogICAgIH5GRUN1c3RvbUZpbHRlcigpOwotICAg
IAorCiAgICAgYm9vbCBhcHBseVNoYWRlcigpOwogICAgIHZvaWQgY2xlYXJTaGFkZXJSZXN1bHQo
KTsKICAgICBib29sIGluaXRpYWxpemVDb250ZXh0KCk7Ci0gICAgCi0gICAgZW51bSBDdXN0b21G
aWx0ZXJEcmF3VHlwZSB7Ci0gICAgICAgIE5FRURTX0lOUFVUX1RFWFRVUkUsCi0gICAgICAgIE5P
X0lOUFVUX1RFWFRVUkUKLSAgICB9OwotICAgIGJvb2wgcHJlcGFyZUZvckRyYXdpbmcoQ3VzdG9t
RmlsdGVyRHJhd1R5cGUgPSBORUVEU19JTlBVVF9URVhUVVJFKTsKKworICAgIGJvb2wgcHJlcGFy
ZUZvckRyYXdpbmcoKTsKIAogICAgIHZvaWQgZHJhd0ZpbHRlck1lc2goUGxhdGZvcm0zRE9iamVj
dCBpbnB1dFRleHR1cmUpOwotICAgIGJvb2wgcHJvZ3JhbU5lZWRzSW5wdXRUZXh0dXJlKCkgY29u
c3Q7CiAgICAgYm9vbCBlbnN1cmVJbnB1dFRleHR1cmUoKTsKICAgICB2b2lkIHVwbG9hZElucHV0
VGV4dHVyZShVaW50OENsYW1wZWRBcnJheSogc3JjUGl4ZWxBcnJheSk7CiAgICAgYm9vbCByZXNp
emVDb250ZXh0SWZOZWVkZWQoY29uc3QgSW50U2l6ZSYpOwpAQCAtOTksMjIgKzg1LDggQEAgcHJp
dmF0ZToKICAgICBib29sIGVuc3VyZUZyYW1lQnVmZmVyKCk7CiAgICAgdm9pZCBkZWxldGVSZW5k
ZXJCdWZmZXJzKCk7CiAKLSAgICB2b2lkIGJpbmRWZXJ0ZXhBdHRyaWJ1dGUoaW50IGF0dHJpYnV0
ZUxvY2F0aW9uLCB1bnNpZ25lZCBzaXplLCB1bnNpZ25lZCBvZmZzZXQpOwotICAgIHZvaWQgdW5i
aW5kVmVydGV4QXR0cmlidXRlKGludCBhdHRyaWJ1dGVMb2NhdGlvbik7Ci0gICAgdm9pZCBiaW5k
UHJvZ3JhbUFycmF5UGFyYW1ldGVycyhpbnQgdW5pZm9ybUxvY2F0aW9uLCBDdXN0b21GaWx0ZXJB
cnJheVBhcmFtZXRlciopOwotICAgIHZvaWQgYmluZFByb2dyYW1OdW1iZXJQYXJhbWV0ZXJzKGlu
dCB1bmlmb3JtTG9jYXRpb24sIEN1c3RvbUZpbHRlck51bWJlclBhcmFtZXRlciopOwotICAgIHZv
aWQgYmluZFByb2dyYW1UcmFuc2Zvcm1QYXJhbWV0ZXIoaW50IHVuaWZvcm1Mb2NhdGlvbiwgQ3Vz
dG9tRmlsdGVyVHJhbnNmb3JtUGFyYW1ldGVyKik7Ci0gICAgdm9pZCBiaW5kUHJvZ3JhbVBhcmFt
ZXRlcnMoKTsKLSAgICB2b2lkIGJpbmRQcm9ncmFtQW5kQnVmZmVycyhQbGF0Zm9ybTNET2JqZWN0
IGlucHV0VGV4dHVyZSk7Ci0gICAgdm9pZCB1bmJpbmRWZXJ0ZXhBdHRyaWJ1dGVzKCk7Ci0gICAg
Ci0gICAgLy8gTm8gbmVlZCB0byBrZWVwIGEgcmVmZXJlbmNlIGhlcmUuIEl0IGlzIG93bmVkIGJ5
IHRoZSBSZW5kZXJWaWV3LgotICAgIEN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQqIG1fZ2xvYmFs
Q29udGV4dDsKLSAgICAKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDsK
LSAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyVmFsaWRhdGVkUHJvZ3JhbT4gbV92YWxpZGF0ZWRQcm9n
cmFtOwotICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJDb21waWxlZFByb2dyYW0+IG1fY29tcGlsZWRQ
cm9ncmFtOwotICAgIFJlZlB0cjxDdXN0b21GaWx0ZXJNZXNoPiBtX21lc2g7CisgICAgUmVmUHRy
PEN1c3RvbUZpbHRlclJlbmRlcmVyPiBtX2N1c3RvbUZpbHRlclJlbmRlcmVyOwogICAgIEludFNp
emUgbV9jb250ZXh0U2l6ZTsKIAogICAgIFBsYXRmb3JtM0RPYmplY3QgbV9pbnB1dFRleHR1cmU7
CkBAIC0xMjYsMTIgKzk4LDYgQEAgcHJpdmF0ZToKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbXVs
dGlzYW1wbGVGcmFtZUJ1ZmZlcjsKICAgICBQbGF0Zm9ybTNET2JqZWN0IG1fbXVsdGlzYW1wbGVS
ZW5kZXJCdWZmZXI7CiAgICAgUGxhdGZvcm0zRE9iamVjdCBtX211bHRpc2FtcGxlRGVwdGhCdWZm
ZXI7Ci0KLSAgICBDdXN0b21GaWx0ZXJQYXJhbWV0ZXJMaXN0IG1fcGFyYW1ldGVyczsKLQotICAg
IHVuc2lnbmVkIG1fbWVzaFJvd3M7Ci0gICAgdW5zaWduZWQgbV9tZXNoQ29sdW1uczsKLSAgICBD
dXN0b21GaWx0ZXJPcGVyYXRpb246Ok1lc2hUeXBlIG1fbWVzaFR5cGU7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmls
dGVyRWZmZWN0UmVuZGVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0ZpbHRlckVm
ZmVjdFJlbmRlcmVyLmNwcAppbmRleCBiNDkyYTZhZDM5YzY2ZTk5ZjJmZWNjMTMyZjRjYzQ1MjVk
MTkwMGRmLi4yMzdkMGY5MzQyMzI3NDQxMjcxNWQ4NzhiODQ0MDIwYWU4MTNjNjEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRmlsdGVyRWZmZWN0UmVuZGVyZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9GaWx0ZXJFZmZlY3RSZW5kZXJlci5jcHAKQEAg
LTQ0LDggKzQ0LDggQEAKIAogI2lmIEVOQUJMRShDU1NfU0hBREVSUykgJiYgVVNFKDNEX0dSQVBI
SUNTKQogI2luY2x1ZGUgIkN1c3RvbUZpbHRlckdsb2JhbENvbnRleHQuaCIKLSNpbmNsdWRlICJD
dXN0b21GaWx0ZXJQcm9ncmFtLmgiCiAjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyT3BlcmF0aW9uLmgi
CisjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJvZ3JhbS5oIgogI2luY2x1ZGUgIkN1c3RvbUZpbHRl
clZhbGlkYXRlZFByb2dyYW0uaCIKICNpbmNsdWRlICJGRUN1c3RvbUZpbHRlci5oIgogI2luY2x1
ZGUgIlJlbmRlclZpZXcuaCIKQEAgLTk3LDIwICs5NywyMiBAQCBzdGF0aWMgUGFzc1JlZlB0cjxG
RUN1c3RvbUZpbHRlcj4gY3JlYXRlQ3VzdG9tRmlsdGVyRWZmZWN0KEZpbHRlciogZmlsdGVyLCBE
b2N1bQogewogICAgIGlmICghaXNDU1NDdXN0b21GaWx0ZXJFbmFibGVkKGRvY3VtZW50KSkKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgCisKICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVyUHJvZ3JhbT4g
cHJvZ3JhbSA9IG9wZXJhdGlvbi0+cHJvZ3JhbSgpOwogICAgIGlmICghcHJvZ3JhbS0+aXNMb2Fk
ZWQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBDdXN0b21GaWx0ZXJHbG9iYWxDb250ZXh0
KiBnbG9iYWxDb250ZXh0ID0gZG9jdW1lbnQtPnJlbmRlclZpZXcoKS0+Y3VzdG9tRmlsdGVyR2xv
YmFsQ29udGV4dCgpOwogICAgIGdsb2JhbENvbnRleHQtPnByZXBhcmVDb250ZXh0SWZOZWVkZWQo
ZG9jdW1lbnQtPnZpZXcoKS0+aG9zdFdpbmRvdygpKTsKKyAgICBpZiAoIWdsb2JhbENvbnRleHQt
PmNvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICBSZWZQdHI8Q3VzdG9tRmlsdGVy
VmFsaWRhdGVkUHJvZ3JhbT4gdmFsaWRhdGVkUHJvZ3JhbSA9IGdsb2JhbENvbnRleHQtPmdldFZh
bGlkYXRlZFByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUluZm8oKSk7CiAgICAgaWYgKCF2YWxpZGF0
ZWRQcm9ncmFtLT5pc0luaXRpYWxpemVkKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgcmV0
dXJuIEZFQ3VzdG9tRmlsdGVyOjpjcmVhdGUoZmlsdGVyLCBnbG9iYWxDb250ZXh0LCB2YWxpZGF0
ZWRQcm9ncmFtLCBvcGVyYXRpb24tPnBhcmFtZXRlcnMoKSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb24tPm1lc2hSb3dzKCksIG9wZXJhdGlvbi0+bWVzaENvbHVt
bnMoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24tPm1lc2hC
b3hUeXBlKCksIG9wZXJhdGlvbi0+bWVzaFR5cGUoKSk7CisgICAgcmV0dXJuIEZFQ3VzdG9tRmls
dGVyOjpjcmVhdGUoZmlsdGVyLCBnbG9iYWxDb250ZXh0LT5jb250ZXh0KCksIHZhbGlkYXRlZFBy
b2dyYW0ucmVsZWFzZSgpLCBvcGVyYXRpb24tPnBhcmFtZXRlcnMoKSwKKyAgICAgICAgb3BlcmF0
aW9uLT5tZXNoUm93cygpLCBvcGVyYXRpb24tPm1lc2hDb2x1bW5zKCksIG9wZXJhdGlvbi0+bWVz
aEJveFR5cGUoKSwgb3BlcmF0aW9uLT5tZXNoVHlwZSgpKTsKIH0KICNlbmRpZgogCg==
</data>
<flag name="review"
          id="185335"
          type_id="1"
          status="+"
          setter="dino"
    />
    <flag name="commit-queue"
          id="185336"
          type_id="3"
          status="-"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>