<?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>64214</bug_id>
          
          <creation_ts>2011-07-08 16:26:10 -0700</creation_ts>
          <short_desc>[chromium] Delete the unused legacy accelerated canvas 2d code</short_desc>
          <delta_ts>2011-07-12 17:20:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="James Robinson">jamesr</reporter>
          <assigned_to name="James Robinson">jamesr</assigned_to>
          <cc>bsalomon</cc>
    
    <cc>jamesr</cc>
    
    <cc>kbr</cc>
    
    <cc>reed</cc>
    
    <cc>senorblanco</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>434372</commentid>
    <comment_count>0</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-08 16:26:10 -0700</bug_when>
    <thetext>[chromium] Delete the unused legacy accelerated canvas 2d code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434375</commentid>
    <comment_count>1</comment_count>
      <attachid>100182</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-08 16:29:57 -0700</bug_when>
    <thetext>Created attachment 100182
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434377</commentid>
    <comment_count>2</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-08 16:32:34 -0700</bug_when>
    <thetext>Note that I&apos;ve removed the LoopBlinn code from all the project files, but I haven&apos;t deleted the files yet since the skia guys still may want to reference it.  I filed https://bugs.webkit.org/show_bug.cgi?id=64216 to cover deleting that code from the repo.

Diffstat for this patch:
 36 files changed, 256 insertions(+), 2930 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434386</commentid>
    <comment_count>3</comment_count>
      <attachid>100184</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-08 16:40:49 -0700</bug_when>
    <thetext>Created attachment 100184
merged up to ToT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434394</commentid>
    <comment_count>4</comment_count>
      <attachid>100182</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-07-08 16:48:44 -0700</bug_when>
    <thetext>Comment on attachment 100182
Patch

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

Looks good for the most part.  I&apos;d like to get an ok from other ports on the GraphicsContext3D changes before I give it an r+.

&gt; Source/WebCore/page/Page.h:269
&gt; +        GraphicsContext3D* sharedGraphicsContext3D();

Should be renamed graphicsContext3D().

Also, since the calls are no longer going through GraphicsContext3D in Chrome, and I doubt they will on any other platform either, I&apos;d prefer that we create and own a GrContext (or another wrapper class unrelated to GraphicsCOntext3D) directly here, via a platform-specific typedef.  That could be done in a later patch, though.

&gt; Source/WebCore/page/Page.h:328
&gt; +        RefPtr&lt;GraphicsContext3D&gt; m_sharedGraphicsContext3D;

s/sharedG/g/

&gt; Source/WebCore/platform/graphics/GraphicsContext.cpp:710
&gt; +void GraphicsContext::setSharedGraphicsContext3D(GraphicsContext3D*, DrawingBuffer*, const IntSize&amp;)

s/Shared//

&gt; Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:1240
&gt; +void GraphicsContext::syncSoftwareCanvas()

Should we rename this function too?  Maybe willDraw() or something?

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.cpp:691
&gt; +void PlatformContextSkia::setSharedGraphicsContext3D(GraphicsContext3D* context, DrawingBuffer* drawingBuffer, const WebCore::IntSize&amp; size)

s/Shared//

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:187
&gt; +    void setSharedGraphicsContext3D(GraphicsContext3D*, DrawingBuffer*, const IntSize&amp;);

s/Shared//</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434396</commentid>
    <comment_count>5</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-08 16:56:39 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 100182 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=100182&amp;action=review
&gt; 
&gt; Looks good for the most part.  I&apos;d like to get an ok from other ports on the GraphicsContext3D changes before I give it an r+.
&gt; 
&gt; &gt; Source/WebCore/page/Page.h:269
&gt; &gt; +        GraphicsContext3D* sharedGraphicsContext3D();
&gt; 
&gt; Should be renamed graphicsContext3D().

Sure

&gt; 
&gt; Also, since the calls are no longer going through GraphicsContext3D in Chrome, and I doubt they will on any other platform either, I&apos;d prefer that we create and own a GrContext (or another wrapper class unrelated to GraphicsCOntext3D) directly here, via a platform-specific typedef.  That could be done in a later patch, though.

Yeah, it&apos;d be nice to clean this up.  One difficulty is that a GrContext doesn&apos;t actually hold a GL context, it needs to live on top of one.  I agree that we should clean this up in a follow-up patch.

&gt; &gt; Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:1240
&gt; &gt; +void GraphicsContext::syncSoftwareCanvas()
&gt; 
&gt; Should we rename this function too?  Maybe willDraw() or something?

That could work.  What this really does it make the GraphicsContext3D associated with the GrContext current, which arguably should be done by the implementation of GraphicsContext, not by the caller.  I&apos;ll see if I can reasonably just get rid of this call completely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434424</commentid>
    <comment_count>6</comment_count>
      <attachid>100195</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-08 18:01:31 -0700</bug_when>
    <thetext>Created attachment 100195
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>434425</commentid>
    <comment_count>7</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-08 18:03:32 -0700</bug_when>
    <thetext>Turns out syncSoftwareCanvas() can go away completely if I set the context to current in ImageBufferSkia&apos;s draw() calls.  The only changes to GraphicsContext in this patch are removing now-unnecessary calls and renaming setSharedGraphicsContext3D()-&gt;setGraphicsContext3D(), so it should be pretty uncontroversial.

I removed the &apos;Shared&apos; from interface names everywhere except for on Page because I think it&apos;s helpful to indicate that the context is supposed to be shared by everyone using that Page.  We can definitely rename it to something better at the same time that we change the type to something better, but for now I&apos;d rather leave it alone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435638</commentid>
    <comment_count>8</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-07-12 07:31:28 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 100182 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=100182&amp;action=review
&gt; &gt; 
&gt; &gt; Looks good for the most part.  I&apos;d like to get an ok from other ports on the GraphicsContext3D changes before I give it an r+.
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/page/Page.h:269
&gt; &gt; &gt; +        GraphicsContext3D* sharedGraphicsContext3D();
&gt; &gt; 
&gt; &gt; Should be renamed graphicsContext3D().
&gt; 
&gt; Sure
&gt; 
&gt; &gt; 
&gt; &gt; Also, since the calls are no longer going through GraphicsContext3D in Chrome, and I doubt they will on any other platform either, I&apos;d prefer that we create and own a GrContext (or another wrapper class unrelated to GraphicsCOntext3D) directly here, via a platform-specific typedef.  That could be done in a later patch, though.
&gt; 
&gt; Yeah, it&apos;d be nice to clean this up.  One difficulty is that a GrContext doesn&apos;t actually hold a GL context, it needs to live on top of one.  I agree that we should clean this up in a follow-up patch.

What we really need is some kind of bare-bones class to represent the context used for the command buffer stubs, since that&apos;s what Ganesh is calling.  I was going to suggest we go back to using GLES2Context, but it seems that it was removed from the WebKit API long ago.

&gt; &gt; &gt; Source/WebCore/platform/graphics/skia/GraphicsContextSkia.cpp:1240
&gt; &gt; &gt; +void GraphicsContext::syncSoftwareCanvas()
&gt; &gt; 
&gt; &gt; Should we rename this function too?  Maybe willDraw() or something?
&gt; 
&gt; That could work.  What this really does it make the GraphicsContext3D associated with the GrContext current, which arguably should be done by the implementation of GraphicsContext, not by the caller.  I&apos;ll see if I can reasonably just get rid of this call completely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435643</commentid>
    <comment_count>9</comment_count>
      <attachid>100195</attachid>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-07-12 07:37:36 -0700</bug_when>
    <thetext>Comment on attachment 100195
Patch

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

Not your fault, but IWBN if SkGpuDevice could handle all the makeCurrent()&apos;s internally instead of GraphicsContextSkia.cpp having to do it.

Looks ok.  r=me

&gt; Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:119
&gt; +    context-&gt;platformContext()-&gt;makeGrContextCurrent();

Are you sure this one is still needed?  useGPU() is always false for Ganesh, so this whole clause should probably go away.

&gt; Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:127
&gt; +    context-&gt;platformContext()-&gt;makeGrContextCurrent();

This wasn&apos;t here before.. was this a bug?  Or is the lower level no longer doing a makeGrContextCurrent?

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:74
&gt;          SkiaGPU

Nit:  could be demoted to a bool, or perhaps even removed (m_gpuContext != NULL could be used, I think).

&gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:183
&gt;      bool canAccelerate() const;

Do we still need this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>435652</commentid>
    <comment_count>10</comment_count>
    <who name="Stephen White">senorblanco</who>
    <bug_when>2011-07-12 07:54:00 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:127
&gt; &gt; +    context-&gt;platformContext()-&gt;makeGrContextCurrent();
&gt; 
&gt; This wasn&apos;t here before.. was this a bug?  Or is the lower level no longer doing a makeGrContextCurrent?

Ignore this.. I see this is related to your comment that &quot;Turns out syncSoftwareCanvas() can go away completely if I set the context to current in ImageBufferSkia&apos;s draw() calls.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436057</commentid>
    <comment_count>11</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-12 16:25:59 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 100195 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=100195&amp;action=review
&gt; 
&gt; Not your fault, but IWBN if SkGpuDevice could handle all the makeCurrent()&apos;s internally instead of GraphicsContextSkia.cpp having to do it.

YES!  The way this was explained to me many moons ago was that SkGpuDevice had no notion of what a GL context was, so it was the responsibility of the caller to set the right context current before making any skia calls that might make GL calls.  I think it&apos;s a big pain in the butt.

&gt; 
&gt; Looks ok.  r=me
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:119
&gt; &gt; +    context-&gt;platformContext()-&gt;makeGrContextCurrent();
&gt; 
&gt; Are you sure this one is still needed?  useGPU() is always false for Ganesh, so this whole clause should probably go away.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/skia/ImageBufferSkia.cpp:127
&gt; &gt; +    context-&gt;platformContext()-&gt;makeGrContextCurrent();
&gt; 
&gt; This wasn&apos;t here before.. was this a bug?  Or is the lower level no longer doing a makeGrContextCurrent?

It was essentially a bug, the syncSoftwareCanvas() call was setting the correct context previously.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:74
&gt; &gt;          SkiaGPU
&gt; 
&gt; Nit:  could be demoted to a bool, or perhaps even removed (m_gpuContext != NULL could be used, I think).

Removed the enum, changed useSkiaGPU() to just null-test m_gpuContext.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/skia/PlatformContextSkia.h:183
&gt; &gt;      bool canAccelerate() const;
&gt; 
&gt; Do we still need this?

Nope, nuking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>436098</commentid>
    <comment_count>12</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-07-12 17:20:20 -0700</bug_when>
    <thetext>Committed r90872: &lt;http://trac.webkit.org/changeset/90872&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100182</attachid>
            <date>2011-07-08 16:29:57 -0700</date>
            <delta_ts>2011-07-08 18:01:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64214-20110708162956.patch</filename>
            <type>text/plain</type>
            <size>176507</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA2MDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBkODVlOGQ3NmFlZDljYjIx
N2IxNWJlNjg4ZWVjYzI1OTY2N2ZiMGFiLi43ZDM2M2Q5OWEyM2IzNDhmODg5MzNlZDJjMjFhZWIx
MDQ1OTRiMzYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAwIEBACisyMDExLTA3LTA4ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBE
ZWxldGUgdGhlIHVudXNlZCBsZWdhY3kgYWNjZWxlcmF0ZWQgY2FudmFzIDJkIGNvZGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MjE0CisKKyAgICAg
ICAgVGhpcyByZW1vdmVzIHRoZSBsZWdhY3kgYWNjZWxlcmF0ZWQgY2FudmFzIDJkIHBhdGggYW5k
IHN1cHBvcnQgbG9naWMgc2luY2Ugd2UgKGNocm9taXVtKSBhcmUgbm8gbG9uZ2VyIHVzaW5nCisg
ICAgICAgIHRoaXMgY29kZXBhdGggYW5kIGl0IHNlZW1zIGNsZWFyIHRoYXQgbm8gb3RoZXIgcG9y
dCBpcyBpbnRlcmVzdGVkLgorCisgICAgICAgIFJlZmFjdG9yaW5nIGFuZCByZW1vdmluZyB1bnVz
ZWQgY29kZSwgc28gbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRHbG9iYWxDb21wb3Np
dGVPcGVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpkaWREcmF3KToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaDoKKyAgICAgICAgKiBsb2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgICogcGFnZS9D
aHJvbWVDbGllbnQuaDoKKyAgICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGFnZTo6c2hhcmVkR3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBhZ2UvUGFnZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNE
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c3luY1NvZnR3YXJlQ2FudmFz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpEcmF3aW5nQnVmZmVyOjpzZXRHckNvbnRleHQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRMaW51eC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9jYy9DQ0xheWVyU29ydGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBvaW50SW5Ucmlhbmds
ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0JpY3ViaWNTaGFkZXIuY3BwOiBS
ZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9CaWN1YmljU2hhZGVyLmg6
IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0NvbnZvbHV0aW9uU2hh
ZGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ29udm9s
dXRpb25TaGFkZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUv
R3JhcGhpY3NDb250ZXh0R1BVLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvR3JhcGhpY3NDb250ZXh0R1BVLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU29saWRGaWxsU2hhZGVy
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU29saWRGaWxs
U2hhZGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleFNo
YWRlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleFNo
YWRlci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhp
Y3NDb250ZXh0U2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNh
dmVQbGF0Zm9ybVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVz
dG9yZVBsYXRmb3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojph
ZGRJbm5lclJvdW5kZWRSZWN0Q2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmNsZWFyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXAp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6Y29uY2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBv
bHlnb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpmaWxsUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJv
dW5kZWRSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3Ip
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6cm90YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhcmVk
R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
eW5jU29mdHdhcmVDYW52YXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1h
Z2VCdWZmZXJTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5SW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZVNpbmdsZUZyYW1lU2tpYTo6ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9OYXRpdmVJbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lh
Ojp+TmF0aXZlSW1hZ2VTa2lhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0
U2tpYTo6UGxhdGZvcm1Db250ZXh0U2tpYSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNv
bnRleHRTa2lhOjp+UGxhdGZvcm1Db250ZXh0U2tpYSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUNvbnRleHRTa2lhOjpzZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjptYWtlR3JDb250ZXh0Q3VycmVudCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmg6CisKIDIw
MTEtMDctMDcgIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IFN3aXRjaCByZW1haW5pbmcgcGFpbnQgZnVuY3Rpb25zIHRvIG5ldyBsYXlvdXQgdHlwZXMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQppbmRleCA5ZGE4MTUxYTM0Nzk4NTRkOTE1NjE0YjExMmI4MGE4ZDM0ODBmNjQw
Li42NjY0ZWU3ZWI2Mjc5ZTIwOWQxZTNmMDI3Y2ExYTJiNjU5ZDZjM2E2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCkBAIC00MjQyLDQzICs0MjQyLDEwIEBACiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcCcsCiAgICAgICAgICAgICAn
cGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvR2x5cGhQYWdlVHJlZU5vZGVGcmVlVHlwZS5jcHAn
LAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRh
RnJlZVR5cGUuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvQmljdWJp
Y1NoYWRlci5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9CaWN1Ymlj
U2hhZGVyLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Db252b2x1dGlv
blNoYWRlci5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Db252b2x1
dGlvblNoYWRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2lu
Z0J1ZmZlci5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5n
QnVmZmVyLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HcmFwaGljc0Nv
bnRleHRHUFUuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR3JhcGhp
Y3NDb250ZXh0R1BVLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29w
Qmxpbm5DbGFzc2lmaWVyLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0xvb3BCbGlubkNsYXNzaWZpZXIuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0xvb3BCbGlubkNvbnN0YW50cy5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IuY3BwJywKLSAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uTG9jYWxUcmlhbmd1bGF0b3IuaCcsCi0gICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubk1hdGhVdGlscy5jcHAnLAotICAg
ICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5NYXRoVXRpbHMuaCcsCi0g
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublBhdGhDYWNoZS5jcHAn
LAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5QYXRoQ2FjaGUu
aCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublBhdGhQcm9j
ZXNzb3IuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5u
UGF0aFByb2Nlc3Nvci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9v
cEJsaW5uU2hhZGVyLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xv
b3BCbGlublNoYWRlci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9v
cEJsaW5uU29saWRGaWxsU2hhZGVyLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0xvb3BCbGlublNvbGlkRmlsbFNoYWRlci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5jcHAnLAotICAgICAgICAgICAg
J3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5UZXh0dXJlQ29vcmRzLmgnLAotICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9QT0RBcmVuYS5oJywKLSAgICAgICAgICAgICdw
bGF0Zm9ybS9ncmFwaGljcy9ncHUvUE9ESW50ZXJ2YWwuaCcsCi0gICAgICAgICAgICAncGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L1BPREludGVydmFsVHJlZS5oJywKLSAgICAgICAgICAgICdwbGF0Zm9y
bS9ncmFwaGljcy9ncHUvUE9EUmVkQmxhY2tUcmVlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9TaGFkZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvU2hhZGVyLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFy
ZWRHcmFwaGljc0NvbnRleHQzRC5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvU29saWRGaWxsU2hhZGVyLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L1NvbGlkRmlsbFNoYWRlci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvVGV4U2hhZGVyLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L1RleFNoYWRlci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUv
VGV4dHVyZS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXh0dXJl
LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UaWxpbmdEYXRhLmNwcCcs
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggNmJjNWMxYzVlNzlmOTgwOGE0ZTg3Njk3YTE2YWE2NGQ3MjMwOWU2NC4uMGMyMzVmMTU5
OGM3ZTBlNjIwY2JjMDVmZTRhMGYxYzczMzFlNDJmOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMTA4NiwxOCArMTA4Niw4IEBA
CiAJCTQ5ODM5MTU5MEYxRTc3NjkwMEMyMzc4MiAvKiBXZWJLaXRDU1NNYXRyaXguaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODM5MTU2MEYxRTc3Njkw
MEMyMzc4MiAvKiBXZWJLaXRDU1NNYXRyaXguaCAqLzsgfTsKIAkJNDk4NzcwREIxMjQyQzUzNTAw
MjIyNkJBIC8qIERyYXdpbmdCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDk4NzcwQzIxMjQyQzUzNTAwMjIyNkJBIC8qIERyYXdpbmdCdWZm
ZXIuY3BwICovOyB9OwogCQk0OTg3NzBEQzEyNDJDNTM1MDAyMjI2QkEgLyogRHJhd2luZ0J1ZmZl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4Nzcw
QzMxMjQyQzUzNTAwMjIyNkJBIC8qIERyYXdpbmdCdWZmZXIuaCAqLzsgfTsKLQkJNDk4NzcwRTQx
MjQyQzUzNTAwMjIyNkJBIC8qIFBPREFyZW5hLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OTg3NzBDQjEyNDJDNTM1MDAyMjI2QkEgLyogUE9EQXJlbmEu
aCAqLzsgfTsKLQkJNDk4NzcwRTUxMjQyQzUzNTAwMjIyNkJBIC8qIFBPREludGVydmFsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTg3NzBDQzEyNDJD
NTM1MDAyMjI2QkEgLyogUE9ESW50ZXJ2YWwuaCAqLzsgfTsKLQkJNDk4NzcwRTYxMjQyQzUzNTAw
MjIyNkJBIC8qIFBPREludGVydmFsVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDk4NzcwQ0QxMjQyQzUzNTAwMjIyNkJBIC8qIFBPREludGVydmFs
VHJlZS5oICovOyB9OwotCQk0OTg3NzBFNzEyNDJDNTM1MDAyMjI2QkEgLyogUE9EUmVkQmxhY2tU
cmVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTg3
NzBDRTEyNDJDNTM1MDAyMjI2QkEgLyogUE9EUmVkQmxhY2tUcmVlLmggKi87IH07CiAJCTQ5ODc3
MEU4MTI0MkM1MzUwMDIyMjZCQSAvKiBTaGFkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4NzcwQ0YxMjQyQzUzNTAwMjIyNkJBIC8qIFNoYWRl
ci5jcHAgKi87IH07CiAJCTQ5ODc3MEU5MTI0MkM1MzUwMDIyMjZCQSAvKiBTaGFkZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODc3MEQwMTI0MkM1
MzUwMDIyMjZCQSAvKiBTaGFkZXIuaCAqLzsgfTsKLQkJNDk4NzcwRUExMjQyQzUzNTAwMjIyNkJB
IC8qIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODc3MEQxMTI0MkM1MzUwMDIyMjZCQSAvKiBTaGFyZWRH
cmFwaGljc0NvbnRleHQzRC5jcHAgKi87IH07Ci0JCTQ5ODc3MEVCMTI0MkM1MzUwMDIyMjZCQSAv
KiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNDk4NzcwRDIxMjQyQzUzNTAwMjIyNkJBIC8qIFNoYXJlZEdyYXBo
aWNzQ29udGV4dDNELmggKi87IH07Ci0JCTQ5ODc3MEVDMTI0MkM1MzUwMDIyMjZCQSAvKiBTb2xp
ZEZpbGxTaGFkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNDk4NzcwRDMxMjQyQzUzNTAwMjIyNkJBIC8qIFNvbGlkRmlsbFNoYWRlci5jcHAgKi87
IH07Ci0JCTQ5ODc3MEVEMTI0MkM1MzUwMDIyMjZCQSAvKiBTb2xpZEZpbGxTaGFkZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODc3MEQ0MTI0MkM1
MzUwMDIyMjZCQSAvKiBTb2xpZEZpbGxTaGFkZXIuaCAqLzsgfTsKLQkJNDk4NzcwRUUxMjQyQzUz
NTAwMjIyNkJBIC8qIFRleFNoYWRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OTg3NzBENTEyNDJDNTM1MDAyMjI2QkEgLyogVGV4U2hhZGVyLmNw
cCAqLzsgfTsKLQkJNDk4NzcwRUYxMjQyQzUzNTAwMjIyNkJBIC8qIFRleFNoYWRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4NzcwRDYxMjQyQzUz
NTAwMjIyNkJBIC8qIFRleFNoYWRlci5oICovOyB9OwogCQk0OTg3NzBGMDEyNDJDNTM1MDAyMjI2
QkEgLyogVGV4dHVyZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OTg3NzBENzEyNDJDNTM1MDAyMjI2QkEgLyogVGV4dHVyZS5jcHAgKi87IH07CiAJ
CTQ5ODc3MEYxMTI0MkM1MzUwMDIyMjZCQSAvKiBUZXh0dXJlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTg3NzBEODEyNDJDNTM1MDAyMjI2QkEgLyog
VGV4dHVyZS5oICovOyB9OwogCQk0OTg3NzBGMjEyNDJDNTM1MDAyMjI2QkEgLyogVGlsaW5nRGF0
YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTg3
NzBEOTEyNDJDNTM1MDAyMjI2QkEgLyogVGlsaW5nRGF0YS5jcHAgKi87IH07CkBAIC0xMTExLDEz
ICsxMTAxLDYgQEAKIAkJNDlBODVCNkMxMzhENTczQTAwRUNCN0IzIC8qIFN0cmVhbUV2ZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUE4NUI2OTEz
OEQ1NzNBMDBFQ0I3QjMgLyogU3RyZWFtRXZlbnQuaCAqLzsgfTsKIAkJNDlBODVCNzcxMzhENThF
RTAwRUNCN0IzIC8qIEpTU3RyZWFtRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlBODVCNzUxMzhENThFRTAwRUNCN0IzIC8qIEpTU3RyZWFt
RXZlbnQuY3BwICovOyB9OwogCQk0OUE4NUI3ODEzOEQ1OEVFMDBFQ0I3QjMgLyogSlNTdHJlYW1F
dmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlB
ODVCNzYxMzhENThFRTAwRUNCN0IzIC8qIEpTU3RyZWFtRXZlbnQuaCAqLzsgfTsKLQkJNDlCNjlF
NUUxMjU0RkVFRDAwN0Q1N0VCIC8qIExvb3BCbGlubkNsYXNzaWZpZXIuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlCNjlFNTUxMjU0RkVFRDAwN0Q1
N0VCIC8qIExvb3BCbGlubkNsYXNzaWZpZXIuY3BwICovOyB9OwotCQk0OUI2OUU1RjEyNTRGRUVE
MDA3RDU3RUIgLyogTG9vcEJsaW5uQ2xhc3NpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlCNjlFNTYxMjU0RkVFRDAwN0Q1N0VCIC8qIExvb3BC
bGlubkNsYXNzaWZpZXIuaCAqLzsgfTsKLQkJNDlCNjlFNjAxMjU0RkVFRDAwN0Q1N0VCIC8qIExv
b3BCbGlubkNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDlCNjlFNTcxMjU0RkVFRDAwN0Q1N0VCIC8qIExvb3BCbGlubkNvbnN0YW50cy5o
ICovOyB9OwotCQk0OUI2OUU2MzEyNTRGRUVEMDA3RDU3RUIgLyogTG9vcEJsaW5uTWF0aFV0aWxz
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QjY5
RTVBMTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxpbm5NYXRoVXRpbHMuY3BwICovOyB9OwotCQk0
OUI2OUU2NDEyNTRGRUVEMDA3RDU3RUIgLyogTG9vcEJsaW5uTWF0aFV0aWxzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUI2OUU1QjEyNTRGRUVEMDA3
RDU3RUIgLyogTG9vcEJsaW5uTWF0aFV0aWxzLmggKi87IH07Ci0JCTQ5QjY5RTY1MTI1NEZFRUQw
MDdENTdFQiAvKiBMb29wQmxpbm5UZXh0dXJlQ29vcmRzLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QjY5RTVDMTI1NEZFRUQwMDdENTdFQiAvKiBM
b29wQmxpbm5UZXh0dXJlQ29vcmRzLmNwcCAqLzsgfTsKLQkJNDlCNjlFNjYxMjU0RkVFRDAwN0Q1
N0VCIC8qIExvb3BCbGlublRleHR1cmVDb29yZHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QjY5RTVEMTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxp
bm5UZXh0dXJlQ29vcmRzLmggKi87IH07CiAJCTQ5QzdCOTkzMTA0MkQyRDMwMDA5RDQ0NyAvKiBK
U1dlYkdMQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5QzdCOTgwMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmNwcCAqLzsg
fTsKIAkJNDlDN0I5OTQxMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTgxMTA0MkQyRDMw
MDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmggKi87IH07CiAJCTQ5QzdCOTk1MTA0MkQyRDMwMDA5
RDQ0NyAvKiBKU0ludDhBcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0OUM3Qjk4MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuY3Bw
ICovOyB9OwpAQCAtNzU4NywxOCArNzU3MCw4IEBACiAJCTQ5ODM5MTU3MEYxRTc3NjkwMEMyMzc4
MiAvKiBXZWJLaXRDU1NNYXRyaXguaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFdlYktpdENT
U01hdHJpeC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5ODc3MEMyMTI0MkM1
MzUwMDIyMjZCQSAvKiBEcmF3aW5nQnVmZmVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERyYXdpbmdCdWZmZXIuY3BwOyBwYXRoID0gZ3B1L0RyYXdpbmdCdWZmZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OTg3NzBDMzEyNDJDNTM1MDAyMjI2
QkEgLyogRHJhd2luZ0J1ZmZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
cmF3aW5nQnVmZmVyLmg7IHBhdGggPSBncHUvRHJhd2luZ0J1ZmZlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk0OTg3NzBDQjEyNDJDNTM1MDAyMjI2QkEgLyogUE9EQXJlbmEuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUE9EQXJlbmEuaDsgcGF0aCA9IGdwdS9Q
T0RBcmVuYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OTg3NzBDQzEyNDJDNTM1
MDAyMjI2QkEgLyogUE9ESW50ZXJ2YWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gUE9ESW50ZXJ2YWwuaDsgcGF0aCA9IGdwdS9QT0RJbnRlcnZhbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk0OTg3NzBDRDEyNDJDNTM1MDAyMjI2QkEgLyogUE9ESW50ZXJ2YWxU
cmVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBPREludGVydmFsVHJlZS5o
OyBwYXRoID0gZ3B1L1BPREludGVydmFsVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0OTg3NzBDRTEyNDJDNTM1MDAyMjI2QkEgLyogUE9EUmVkQmxhY2tUcmVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBPRFJlZEJsYWNrVHJlZS5oOyBwYXRoID0gZ3B1
L1BPRFJlZEJsYWNrVHJlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OTg3NzBD
RjEyNDJDNTM1MDAyMjI2QkEgLyogU2hhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IFNoYWRlci5jcHA7IHBhdGggPSBncHUvU2hhZGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDk4NzcwRDAxMjQyQzUzNTAwMjIyNkJBIC8qIFNoYWRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTaGFkZXIuaDsgcGF0aCA9IGdwdS9T
aGFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDk4NzcwRDExMjQyQzUzNTAw
MjIyNkJBIC8qIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcDsgcGF0aCA9IGdw
dS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQ5ODc3MEQyMTI0MkM1MzUwMDIyMjZCQSAvKiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTaGFyZWRHcmFwaGljc0NvbnRleHQz
RC5oOyBwYXRoID0gZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTQ5ODc3MEQzMTI0MkM1MzUwMDIyMjZCQSAvKiBTb2xpZEZpbGxTaGFk
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU29saWRGaWxsU2hh
ZGVyLmNwcDsgcGF0aCA9IGdwdS9Tb2xpZEZpbGxTaGFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk0OTg3NzBENDEyNDJDNTM1MDAyMjI2QkEgLyogU29saWRGaWxsU2hhZGVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFNvbGlkRmlsbFNoYWRlci5oOyBw
YXRoID0gZ3B1L1NvbGlkRmlsbFNoYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk0OTg3NzBENTEyNDJDNTM1MDAyMjI2QkEgLyogVGV4U2hhZGVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFRleFNoYWRlci5jcHA7IHBhdGggPSBncHUvVGV4U2hh
ZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDk4NzcwRDYxMjQyQzUzNTAw
MjIyNkJBIC8qIFRleFNoYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBU
ZXhTaGFkZXIuaDsgcGF0aCA9IGdwdS9UZXhTaGFkZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDk4NzcwRDcxMjQyQzUzNTAwMjIyNkJBIC8qIFRleHR1cmUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gVGV4dHVyZS5jcHA7IHBhdGggPSBncHUvVGV4
dHVyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5ODc3MEQ4MTI0MkM1MzUw
MDIyMjZCQSAvKiBUZXh0dXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRl
eHR1cmUuaDsgcGF0aCA9IGdwdS9UZXh0dXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQ5ODc3MEQ5MTI0MkM1MzUwMDIyMjZCQSAvKiBUaWxpbmdEYXRhLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFRpbGluZ0RhdGEuY3BwOyBwYXRoID0gZ3B1L1Rp
bGluZ0RhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzYxMywxMyArNzU4
Niw2IEBACiAJCTQ5QTg1QjZBMTM4RDU3M0EwMEVDQjdCMyAvKiBTdHJlYW1FdmVudC5pZGwgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSB0ZXh0OyBwYXRoID0gU3RyZWFtRXZlbnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk0OUE4NUI3NTEzOEQ1OEVFMDBFQ0I3QjMgLyogSlNTdHJlYW1FdmVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N0cmVhbUV2ZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlBODVCNzYxMzhENThFRTAwRUNCN0IzIC8q
IEpTU3RyZWFtRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTdHJl
YW1FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUI2OUU1NTEyNTRGRUVE
MDA3RDU3RUIgLyogTG9vcEJsaW5uQ2xhc3NpZmllci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBMb29wQmxpbm5DbGFzc2lmaWVyLmNwcDsgcGF0aCA9IGdwdS9Mb29w
Qmxpbm5DbGFzc2lmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlCNjlF
NTYxMjU0RkVFRDAwN0Q1N0VCIC8qIExvb3BCbGlubkNsYXNzaWZpZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gTG9vcEJsaW5uQ2xhc3NpZmllci5oOyBwYXRoID0gZ3B1L0xv
b3BCbGlubkNsYXNzaWZpZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlCNjlF
NTcxMjU0RkVFRDAwN0Q1N0VCIC8qIExvb3BCbGlubkNvbnN0YW50cy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBMb29wQmxpbm5Db25zdGFudHMuaDsgcGF0aCA9IGdwdS9Mb29w
Qmxpbm5Db25zdGFudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlCNjlFNUEx
MjU0RkVFRDAwN0Q1N0VCIC8qIExvb3BCbGlubk1hdGhVdGlscy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMb29wQmxpbm5NYXRoVXRpbHMuY3BwOyBwYXRoID0gZ3B1
L0xvb3BCbGlubk1hdGhVdGlscy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5
QjY5RTVCMTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxpbm5NYXRoVXRpbHMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTG9vcEJsaW5uTWF0aFV0aWxzLmg7IHBhdGggPSBncHUv
TG9vcEJsaW5uTWF0aFV0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5QjY5
RTVDMTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxpbm5UZXh0dXJlQ29vcmRzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IExvb3BCbGlublRleHR1cmVDb29yZHMuY3Bw
OyBwYXRoID0gZ3B1L0xvb3BCbGlublRleHR1cmVDb29yZHMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQk0OUI2OUU1RDEyNTRGRUVEMDA3RDU3RUIgLyogTG9vcEJsaW5uVGV4dHVy
ZUNvb3Jkcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMb29wQmxpbm5UZXh0
dXJlQ29vcmRzLmg7IHBhdGggPSBncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3Qjk4MDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJH
TEJ1ZmZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1dlYkdM
QnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5ODExMDQyRDJE
MzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNXZWJHTEJ1ZmZlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUM3
Qjk4MjEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gSlNJbnQ4QXJyYXkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwpAQCAtMTM4NzAsMjUgKzEzODM2LDggQEAKIAkJCQk0OTg3NzExNjEyNDJDRDdGMDAy
MjI2QkEgLyogbWFjICovLAogCQkJCTQ5ODc3MEMyMTI0MkM1MzUwMDIyMjZCQSAvKiBEcmF3aW5n
QnVmZmVyLmNwcCAqLywKIAkJCQk0OTg3NzBDMzEyNDJDNTM1MDAyMjI2QkEgLyogRHJhd2luZ0J1
ZmZlci5oICovLAotCQkJCTQ5QjY5RTU1MTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxpbm5DbGFz
c2lmaWVyLmNwcCAqLywKLQkJCQk0OUI2OUU1NjEyNTRGRUVEMDA3RDU3RUIgLyogTG9vcEJsaW5u
Q2xhc3NpZmllci5oICovLAotCQkJCTQ5QjY5RTU3MTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxp
bm5Db25zdGFudHMuaCAqLywKLQkJCQk0OUI2OUU1QTEyNTRGRUVEMDA3RDU3RUIgLyogTG9vcEJs
aW5uTWF0aFV0aWxzLmNwcCAqLywKLQkJCQk0OUI2OUU1QjEyNTRGRUVEMDA3RDU3RUIgLyogTG9v
cEJsaW5uTWF0aFV0aWxzLmggKi8sCi0JCQkJNDlCNjlFNUMxMjU0RkVFRDAwN0Q1N0VCIC8qIExv
b3BCbGlublRleHR1cmVDb29yZHMuY3BwICovLAotCQkJCTQ5QjY5RTVEMTI1NEZFRUQwMDdENTdF
QiAvKiBMb29wQmxpbm5UZXh0dXJlQ29vcmRzLmggKi8sCi0JCQkJNDk4NzcwQ0IxMjQyQzUzNTAw
MjIyNkJBIC8qIFBPREFyZW5hLmggKi8sCi0JCQkJNDk4NzcwQ0MxMjQyQzUzNTAwMjIyNkJBIC8q
IFBPREludGVydmFsLmggKi8sCi0JCQkJNDk4NzcwQ0QxMjQyQzUzNTAwMjIyNkJBIC8qIFBPRElu
dGVydmFsVHJlZS5oICovLAotCQkJCTQ5ODc3MENFMTI0MkM1MzUwMDIyMjZCQSAvKiBQT0RSZWRC
bGFja1RyZWUuaCAqLywKIAkJCQk0OTg3NzBDRjEyNDJDNTM1MDAyMjI2QkEgLyogU2hhZGVyLmNw
cCAqLywKIAkJCQk0OTg3NzBEMDEyNDJDNTM1MDAyMjI2QkEgLyogU2hhZGVyLmggKi8sCi0JCQkJ
NDk4NzcwRDExMjQyQzUzNTAwMjIyNkJBIC8qIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcCAq
LywKLQkJCQk0OTg3NzBEMjEyNDJDNTM1MDAyMjI2QkEgLyogU2hhcmVkR3JhcGhpY3NDb250ZXh0
M0QuaCAqLywKLQkJCQk0OTg3NzBEMzEyNDJDNTM1MDAyMjI2QkEgLyogU29saWRGaWxsU2hhZGVy
LmNwcCAqLywKLQkJCQk0OTg3NzBENDEyNDJDNTM1MDAyMjI2QkEgLyogU29saWRGaWxsU2hhZGVy
LmggKi8sCi0JCQkJNDk4NzcwRDUxMjQyQzUzNTAwMjIyNkJBIC8qIFRleFNoYWRlci5jcHAgKi8s
Ci0JCQkJNDk4NzcwRDYxMjQyQzUzNTAwMjIyNkJBIC8qIFRleFNoYWRlci5oICovLAogCQkJCTQ5
ODc3MEQ3MTI0MkM1MzUwMDIyMjZCQSAvKiBUZXh0dXJlLmNwcCAqLywKIAkJCQk0OTg3NzBEODEy
NDJDNTM1MDAyMjI2QkEgLyogVGV4dHVyZS5oICovLAogCQkJCTQ5ODc3MEQ5MTI0MkM1MzUwMDIy
MjZCQSAvKiBUaWxpbmdEYXRhLmNwcCAqLywKQEAgLTIyMDY1LDEwICsyMjAxNCw2IEBACiAJCQkJ
NTExRjIzMUEwREMxNjBEQTAwNEYwMDMyIC8qIExvY2FsU3RvcmFnZVRocmVhZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNFMUM0MUIwRDk4Mjk4MDAwM0IwMkYyIC8qIExvY2F0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBODIzOUUwMTA5QjNDRjhBMDBCNjA2NDEgLyogTG9nZ2luZy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJNDlCNjlFNUYxMjU0RkVFRDAwN0Q1N0VCIC8qIExvb3BCbGlubkNsYXNz
aWZpZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5QjY5RTYwMTI1NEZFRUQwMDdENTdFQiAvKiBM
b29wQmxpbm5Db25zdGFudHMuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5QjY5RTY0MTI1NEZFRUQw
MDdENTdFQiAvKiBMb29wQmxpbm5NYXRoVXRpbHMuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5QjY5
RTY2MTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxpbm5UZXh0dXJlQ29vcmRzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRDMxNjAzOTEyQjAyNjc2MDBDMUEzNTkgLyogTG93UGFzczJGaWx0ZXJOb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTZEMzc0MTBBREJBNURFMDBBNDU1NEQgLyogTWFpblJl
c291cmNlTG9hZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQThGNkJDNjBEQjU1Q0RDMDAxREI3
OTQgLyogTWFuaWZlc3RQYXJzZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjIyNDIsMTAgKzIyMTg3
LDYgQEAKIAkJCQkxQURBMTQxMTBFMUFFNUQ5MDAwMjNFRTUgLyogUGx1Z2luTWFpblRocmVhZFNj
aGVkdWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUFBODc5OTAxMUNCRTg0NjAwM0M2NjRGIC8q
IFBsdWdpblN0cmF0ZWd5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwQUZEQUMzRDEwRjU0NDhDMDBF
MUYzRDIgLyogUGx1Z2luVmlld0Jhc2UuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5ODc3MEU0MTI0
MkM1MzUwMDIyMjZCQSAvKiBQT0RBcmVuYS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDk4NzcwRTUx
MjQyQzUzNTAwMjIyNkJBIC8qIFBPREludGVydmFsLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OTg3
NzBFNjEyNDJDNTM1MDAyMjI2QkEgLyogUE9ESW50ZXJ2YWxUcmVlLmggaW4gSGVhZGVycyAqLywK
LQkJCQk0OTg3NzBFNzEyNDJDNTM1MDAyMjI2QkEgLyogUE9EUmVkQmxhY2tUcmVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCMkIxRjcxNzBEMDBDQUE4MDA0QUVBNjQgLyogUG9pbnRlckV2ZW50c0hp
dFJ1bGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDczMEQ5MjEyNDhGMEIzMDBEM0E5QzkgLyog
UG9pbnRMaWdodFNvdXJjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTcwNTk5NzgxMDdEOTc1MjAw
QTUwQTdDIC8qIFBvbGljeUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTIyNTA4LDcgKzIy
NDQ5LDYgQEAKIAkJCQlBODBFNkNFODBBMTk4OUNBMDA3RkI4QzUgLyogU2hhZG93VmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCUIyQUZGQzk0MEQwMEE1REYwMDMwMDc0RCAvKiBTaGFwZUFyYWJp
Yy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE0QTk1NEUwQjRFRENDQjAwMkQ4QzNDIC8qIFNoYXJl
ZEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDk4NzcwRUIxMjQyQzUzNTAwMjIyNkJBIC8q
IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwOUVBMzA5
OUVCNzhDMDA1NkU1ODEgLyogU2hhcmVkVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxRTFC
MUQ0MEZGNTk4NjkwMDU3NkIzQiAvKiBTaGFyZWRXb3JrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTQxRDE2OEU4MTAyMjZFODkwMDlCQzgyNyAvKiBTaGFyZWRXb3JrZXJDb250ZXh0LmggaW4gSGVh
ZGVycyAqLywKQEAgLTIyNTI3LDcgKzIyNDY3LDYgQEAKIAkJCQk1MTBENEEzNzEwMzE2NUVFMDA0
OUVBNTQgLyogU29ja2V0U3RyZWFtSGFuZGxlQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTEw
RDRBMzgxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUNsaWVudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEE0ODQ0OTkwQ0E0NENCMjAwQjdCRDQ4IC8qIFNvZnRMaW5raW5nLmgg
aW4gSGVhZGVycyAqLywKLQkJCQk0OTg3NzBFRDEyNDJDNTM1MDAyMjI2QkEgLyogU29saWRGaWxs
U2hhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk0QjMwNDNDNzBBRTAzNzAzMDBBODI2NDcgLyog
U291bmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0QTgxRjNFMEZDN0RGRjAwMDk1NTMwMCAvKiBT
b3VyY2VBbHBoYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODRBODFGNDIwRkM3RTAyNzAwOTU1MzAw
IC8qIFNvdXJjZUdyYXBoaWMuaCBpbiBIZWFkZXJzICovLApAQCAtMjI4NDgsNyArMjI3ODcsNiBA
QAogCQkJCUE4Q0ZGMDUxMEExNTRGMDkwMDBBNDIzNCAvKiBUYWJsZUxheW91dC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNFM0JFQzMwRDIyMkIxRDAwN0UwNkU0IC8qIFRhZ05vZGVMaXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlGNTVCM0RENjEyNTFGMTJEMDAzRUYyNjkgLyogVGVsZXBob25lSW5w
dXRUeXBlLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OTg3NzBFRjEyNDJDNTM1MDAyMjI2QkEgLyog
VGV4U2hhZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUwQjZBNjA5OURGMDI3MDA5MEQ3ODEg
LyogVGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlFMTcwOTlFNjQ5MjAwNTZFNTgxIC8q
IFRleHRBZmZpbml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJDM0RBMzQwRDAwNkMxRDAwRUY2
RjI2IC8qIFRleHRCb3VuZGFyaWVzLmggaW4gSGVhZGVycyAqLywKQEAgLTI1MDUyLDkgKzI0OTkw
LDYgQEAKIAkJCQlCQ0UxQzQxQzBEOTgyOTgxMDAzQjAyRjIgLyogTG9jYXRpb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTgyMzlFMDAwOUIzQ0Y4QTAwQjYwNjQxIC8qIExvZ2dpbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQwMjY0NUUwQUZEQzE5QjAwNTkxOUUyIC8qIExvZ2dpbmdNYWMu
bW0gaW4gU291cmNlcyAqLywKLQkJCQk0OUI2OUU1RTEyNTRGRUVEMDA3RDU3RUIgLyogTG9vcEJs
aW5uQ2xhc3NpZmllci5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OUI2OUU2MzEyNTRGRUVEMDA3
RDU3RUIgLyogTG9vcEJsaW5uTWF0aFV0aWxzLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5QjY5
RTY1MTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxpbm5UZXh0dXJlQ29vcmRzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUZEMzE2MDM4MTJCMDI2NzYwMEMxQTM1OSAvKiBMb3dQYXNzMkZpbHRlck5v
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTNFMjI3RTEwQUY1ODlBRDAwRDQ4MzI0IC8qIE1h
aW5SZXNvdXJjZUxvYWRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxQThGNkJDNTBEQjU1Q0RD
MDAxREI3OTQgLyogTWFuaWZlc3RQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC0yNTQwMiw3
ICsyNTMzNyw2IEBACiAJCQkJMUE0QTk1NEQwQjRFRENDQjAwMkQ4QzNDIC8qIFNoYXJlZEJ1ZmZl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MTJERDhFMzBEOTFFMkI0MDAwRjg5RUUgLyogU2hh
cmVkQnVmZmVyQ0YuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE0QTk1NTIwQjRFRENGRjAwMkQ4
QzNDIC8qIFNoYXJlZEJ1ZmZlck1hYy5tbSBpbiBTb3VyY2VzICovLAotCQkJCTQ5ODc3MEVBMTI0
MkM1MzUwMDIyMjZCQSAvKiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk5MzMwOUVBMjA5OUVCNzhDMDA1NkU1ODEgLyogU2hhcmVkVGltZXJNYWMubW0gaW4g
U291cmNlcyAqLywKIAkJCQk0MUUxQjFEMzBGRjU5ODY5MDA1NzZCM0IgLyogU2hhcmVkV29ya2Vy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQxRDE2OEU3MTAyMjZFODkwMDlCQzgyNyAvKiBTaGFy
ZWRXb3JrZXJDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU0MjEsNyArMjUzNTUsNiBA
QAogCQkJCTUxMEQ0QTMzMTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1FcnJvckJhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEwRDRBMzYxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tl
dFN0cmVhbUhhbmRsZUJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFBQkFFMUYxMDNDMTkx
MzAwOEM1MjYwIC8qIFNvY2tldFN0cmVhbUhhbmRsZUNGTmV0LmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCTQ5ODc3MEVDMTI0MkM1MzUwMDIyMjZCQSAvKiBTb2xpZEZpbGxTaGFkZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNEIzMDQzQzkwQUUwMzcxRDAwQTgyNjQ3IC8qIFNvdW5kTWFjLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODRBODFGM0QwRkM3REZGMDAwOTU1MzAwIC8qIFNvdXJjZUFscGhh
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg0QTgxRjQxMEZDN0UwMjcwMDk1NTMwMCAvKiBTb3Vy
Y2VHcmFwaGljLmNwcCBpbiBTb3VyY2VzICovLApAQCAtMjU2NTEsNyArMjU1ODQsNiBAQAogCQkJ
CTY1ODJBMTYzMDk5OTlENkQwMEJFRUI2RCAvKiBTeXN0ZW1UaW1lTWFjLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDRTNCRUMyMEQyMjJCMUQwMDdFMDZFNCAvKiBUYWdOb2RlTGlzdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlGNTVCM0RENTEyNTFGMTJEMDAzRUYyNjkgLyogVGVsZXBob25lSW5w
dXRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTQ5ODc3MEVFMTI0MkM1MzUwMDIyMjZCQSAv
KiBUZXhTaGFkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU1MEI2QTUwOTlERjAyNzAwOTBE
NzgxIC8qIFRleHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzcyQzAwQzQxMjk2MTFGMTAwNUM5
NTc1IC8qIFRleHRCb3VuZGFyaWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQUZGQzk3MEQw
MEE1REYwMDMwMDc0RCAvKiBUZXh0Qm91bmRhcmllcy5tbSBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAKaW5kZXggZjQyMzc3OGQ3NDM5ZjY0ZDBkMDQzMzU1NDg2ZjQzZWFiNTRmNjUzYS4uYmNk
NjIwNGViNzgzYjk3OGQxNGJmZTE0N2M5ZWJhMjk3YzZkOWFiMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBA
IC02Niw4ICs2Niw2IEBACiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCiAjaW5jbHVkZSAiRHJh
d2luZ0J1ZmZlci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dDNELmgiCi0jaW5jbHVkZSAiU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpZiBV
U0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNl
bmRpZgpAQCAtMTQ2LDcgKzE0NCw3IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMsIGJvCiAgICAgaWYg
KEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCkpIHsKICAgICAgICAgbV9jb250
ZXh0M0QgPSBwLT5zaGFyZWRHcmFwaGljc0NvbnRleHQzRCgpOwogICAgICAgICBpZiAobV9jb250
ZXh0M0QpIHsKLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlciA9IG1fY29udGV4dDNELT5ncmFw
aGljc0NvbnRleHQzRCgpLT5jcmVhdGVEcmF3aW5nQnVmZmVyKEludFNpemUoY2FudmFzLT53aWR0
aCgpLCBjYW52YXMtPmhlaWdodCgpKSk7CisgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBt
X2NvbnRleHQzRC0+Y3JlYXRlRHJhd2luZ0J1ZmZlcihJbnRTaXplKGNhbnZhcy0+d2lkdGgoKSwg
Y2FudmFzLT5oZWlnaHQoKSkpOwogICAgICAgICAgICAgaWYgKCFtX2RyYXdpbmdCdWZmZXIpIHsK
ICAgICAgICAgICAgICAgICBjLT5zZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRCgwLCAwLCBJbnRT
aXplKCkpOwogICAgICAgICAgICAgICAgIG1fY29udGV4dDNELmNsZWFyKCk7CkBAIC01NzIsMTUg
KzU3MCw2IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRHbG9iYWxDb21wb3Np
dGVPcGVyYXRpb24oY29uc3QgU3RyaW5nJiBvcGVyYXRpCiAgICAgaWYgKCFjKQogICAgICAgICBy
ZXR1cm47CiAgICAgYy0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsKLSNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQotICAgIGlmIChpc0FjY2VsZXJhdGVkKCkgJiYgIW1fY29udGV4
dDNELT5zdXBwb3J0c0NvbXBvc2l0ZU9wKG9wKSkgewotICAgICAgICBjLT5zZXRTaGFyZWRHcmFw
aGljc0NvbnRleHQzRCgwLCAwLCBJbnRTaXplKCkpOwotICAgICAgICBtX2RyYXdpbmdCdWZmZXIu
Y2xlYXIoKTsKLSAgICAgICAgbV9jb250ZXh0M0QuY2xlYXIoKTsKLSAgICAgICAgLy8gTWFyayBh
cyBuZWVkaW5nIGEgc3R5bGUgcmVjYWxjIHNvIG91ciBjb21wb3NpdGluZyBsYXllciBjYW4gYmUg
cmVtb3ZlZC4KLSAgICAgICAgY2FudmFzKCktPnNldE5lZWRzU3R5bGVSZWNhbGMoU3ludGhldGlj
U3R5bGVDaGFuZ2UpOwotICAgIH0KLSNlbmRpZgogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2NhbGUoZmxvYXQgc3gsIGZsb2F0IHN5KQpAQCAtMTY0NCwxMCArMTYzMyw2IEBA
IHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3KGNvbnN0IEZsb2F0UmVjdCYg
ciwgdW5zaWduZWQgb3B0aW9ucykKICAgICAgICAgLy8gd2UnZCBoYXZlIHRvIGtlZXAgdGhlIGNs
aXAgcGF0aCBhcm91bmQuCiAgICAgfQogCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykKLSAgICBpZiAoaXNBY2NlbGVyYXRlZCgpKQotICAgICAgICBkcmF3aW5nQ29udGV4dCgpLT5t
YXJrRGlydHlSZWN0KGVuY2xvc2luZ0ludFJlY3QoZGlydHlSZWN0KSk7Ci0jZW5kaWYKICNpZiBF
TkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCiAgICAgLy8gSWYgd2UgYXJlIGRyYXdpbmcgdG8gaGFyZHdhcmUgYW5kIHdlIGhhdmUgYSBj
b21wb3NpdGVkIGxheWVyLCBqdXN0IGNhbGwgY29udGVudENoYW5nZWQoKS4KICAgICBSZW5kZXJC
b3gqIHJlbmRlckJveCA9IGNhbnZhcygpLT5yZW5kZXJCb3goKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKaW5kZXggMTFm
NTFmZTM2YWFhY2U2YjY2ZDhiZDhkZjQ1NjE5MWNjMTdlMzczOS4uODEyYWI1ZTc1M2E4OGFhYTZh
YzA4ZjQzYTM2ZjM4NDlhMjZkYWE1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgKQEAgLTU2LDcgKzU2LDcgQEAgY2xh
c3MgVGV4dE1ldHJpY3M7CiAKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogY2xh
c3MgRHJhd2luZ0J1ZmZlcjsKLWNsYXNzIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOworY2xhc3Mg
R3JhcGhpY3NDb250ZXh0M0Q7CiAjZW5kaWYKIAogdHlwZWRlZiBpbnQgRXhjZXB0aW9uQ29kZTsK
QEAgLTMwNSw3ICszMDUsNyBAQCBwcml2YXRlOgogCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKICAgICBSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gbV9kcmF3aW5nQnVmZmVyOwotICAg
IFJlZlB0cjxTaGFyZWRHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0M0Q7CisgICAgUmVmUHRy
PEdyYXBoaWNzQ29udGV4dDNEPiBtX2NvbnRleHQzRDsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0VtcHR5Q2xpZW50cy5oCmluZGV4IDNmZjI1OGJmYWYzMzQ0OWZlNDAzYzkyOWE5ZDEy
YTk2OThiNTRjZTMuLjhmMzUyNzY1ZjlhZWE1ODFjNjQ0ZjY1NjMzOWFmNDExNzViMzVlNzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKQEAgLTYyLDcgKzYyLDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNz
IEdyYXBoaWNzQ29udGV4dDNEOwogCiBjbGFzcyBFbXB0eVBvcHVwTWVudSA6IHB1YmxpYyBQb3B1
cE1lbnUgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVD
bGllbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKaW5kZXggYTI3Yzc2
NmU2MDQxYWM0NTkwNzE1ZWNjMWJkNjRhN2IyYTJkMmIyMi4uNGI4YTk0OWY1Y2I0MTM3MTVhNjVj
Mzk2NTUwNWU4Y2E3YTYwM2M0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJv
bWVDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCkBAIC02
MCw3ICs2MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBQYWdlOwogICAgIGNs
YXNzIFBvcHVwTWVudUNsaWVudDsKICAgICBjbGFzcyBTZWN1cml0eU9yaWdpbjsKLSAgICBjbGFz
cyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDsKKyAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsK
ICAgICBjbGFzcyBXaWRnZXQ7CiAKICAgICBzdHJ1Y3QgRnJhbWVMb2FkUmVxdWVzdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuY3BwCmluZGV4IDI0YmQzMjU2ZGQ3YTAyNjJjOTExNTkzMDViNWU5YTI5YWE0ZDJlYWQu
LjMyNDE5YTBiZjViNzUyM2YyZTU4OTczZDZjZDVmZDIwODgyYjAyNjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcApAQCAtNzYsNyArNzYsNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4K
IAogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaW5jbHVkZSAiU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2VuZGlm
CiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCkBAIC03NTIsMTYgKzc1MiwxNyBAQCB2b2lkIFBh
Z2U6OnNldERlYnVnZ2VyKEpTQzo6RGVidWdnZXIqIGRlYnVnZ2VyKQogICAgICAgICBmcmFtZS0+
c2NyaXB0KCktPmF0dGFjaERlYnVnZ2VyKG1fZGVidWdnZXIpOwogfQogCi1TaGFyZWRHcmFwaGlj
c0NvbnRleHQzRCogUGFnZTo6c2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoKQorR3JhcGhpY3NDb250
ZXh0M0QqIFBhZ2U6OnNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKCkKIHsKICNpZiBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQotICAgIGlmICghbV9zaGFyZWRHcmFwaGljc0NvbnRleHQzRCkK
LSNpZiBVU0UoU0tJQSkKLSAgICAgICAgLy8gVGVtcG9yYXJ5IGNvZGUgdG8gcG9zdHBvbmUgbWFz
c2l2ZSB0ZXN0IHJlYmFzZWxpbmluZwotICAgICAgICBtX3NoYXJlZEdyYXBoaWNzQ29udGV4dDNE
ID0gU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShjaHJvbWUoKSwgc2V0dGluZ3MoKS0+
bGVnYWN5QWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoKSA/IDAgOiBTaGFyZWRHcmFwaGljc0Nv
bnRleHQzRDo6VXNlU2tpYUdQVSk7Ci0jZWxzZQotICAgICAgICBtX3NoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEID0gU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShjaHJvbWUoKSwgMCk7Ci0j
ZW5kaWYKKyAgICBpZiAoIW1fc2hhcmVkR3JhcGhpY3NDb250ZXh0M0QpIHsKKyAgICAgICAgR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cjsKKyAgICAgICAgYXR0ci5kZXB0aCA9IGZh
bHNlOworICAgICAgICBhdHRyLnN0ZW5jaWwgPSB0cnVlOworICAgICAgICBhdHRyLmFudGlhbGlh
cyA9IGZhbHNlOworICAgICAgICBhdHRyLmNhblJlY292ZXJGcm9tQ29udGV4dExvc3MgPSBmYWxz
ZTsgLy8gQ2FudmFzIGNvbnRleHRzIGNhbiBub3QgaGFuZGxlIGxvc3QgY29udGV4dHMuCisgICAg
ICAgIG1fc2hhcmVkR3JhcGhpY3NDb250ZXh0M0QgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRl
KGF0dHIsIGNocm9tZSgpKTsKKyAgICB9CiAgICAgcmV0dXJuIG1fc2hhcmVkR3JhcGhpY3NDb250
ZXh0M0QuZ2V0KCk7CiAjZWxzZSAvLyAhRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKICAg
ICByZXR1cm4gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKaW5kZXggYzk0MmM4MDI1OWNhZWVhODk3MDVkYWRmMGY1
YzZkY2Q5OTZkMzA3My4uMWUwM2FhZGRkZmMzN2IxZjFiY2MyYjczMGZmZGI3M2IzZWRmMGU1MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9QYWdlLmgKQEAgLTgxLDcgKzgxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
IGNsYXNzIFZpc2libGVTZWxlY3Rpb247CiAgICAgY2xhc3MgU2Nyb2xsYWJsZUFyZWE7CiAgICAg
Y2xhc3MgU2V0dGluZ3M7Ci0gICAgY2xhc3MgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q7CisgICAg
Y2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAgICAgY2xhc3MgU3BlZWNoSW5wdXQ7CiAgICAgY2xh
c3MgU3BlZWNoSW5wdXRDbGllbnQ7CiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQpAQCAtMjY2LDcg
KzI2Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIHZvaWQgYWxsVmlz
aXRlZFN0YXRlQ2hhbmdlZChQYWdlR3JvdXAqKTsKICAgICAgICAgc3RhdGljIHZvaWQgdmlzaXRl
ZFN0YXRlQ2hhbmdlZChQYWdlR3JvdXAqLCBMaW5rSGFzaCB2aXNpdGVkSGFzaCk7CiAKLSAgICAg
ICAgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIHNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKCk7Cisg
ICAgICAgIEdyYXBoaWNzQ29udGV4dDNEKiBzaGFyZWRHcmFwaGljc0NvbnRleHQzRCgpOwogCiAj
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQogICAgICAgICBTdG9yYWdlTmFtZXNwYWNlKiBzZXNzaW9u
U3RvcmFnZShib29sIG9wdGlvbmFsQ3JlYXRlID0gdHJ1ZSk7CkBAIC0zMjUsNyArMzI1LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBPd25QdHI8RHJhZ0NhcmV0Q29udHJvbGxlcj4g
bV9kcmFnQ2FyZXRDb250cm9sbGVyOwogCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZB
UykKLSAgICAgICAgUmVmUHRyPFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEPiBtX3NoYXJlZEdyYXBo
aWNzQ29udGV4dDNEOworICAgICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fc2hhcmVk
R3JhcGhpY3NDb250ZXh0M0Q7CiAjZW5kaWYKICAgICAgICAgCiAjaWYgRU5BQkxFKERSQUdfU1VQ
UE9SVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQuY3BwCmluZGV4IGYzZjk5ZTQ3NWIyMjhlZDEzMTRmOWFlN2U5MWNjYzA0M2Q1ZTVk
YTYuLjgyNjNmNjA1ZGM2ZDgzNmRlNDBiMGU2MGYwZDM1ZmM3MzExNDZiMjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApA
QCAtNzA3LDE3ICs3MDcsMTMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hv
dWxkU21vb3RoRm9udHMoYm9vbCkKICNlbmRpZgogCiAjaWYgIVVTRShTS0lBKQotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKFNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEKiwgRHJhd2luZ0J1ZmZlciosIGNvbnN0IEludFNpemUmKQordm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiwgRHJh
d2luZ0J1ZmZlciosIGNvbnN0IEludFNpemUmKQogewogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c3luY1NvZnR3YXJlQ2FudmFzKCkKIHsKIH0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6Om1h
cmtEaXJ0eVJlY3QoY29uc3QgSW50UmVjdCYpCi17Ci19CiAjZW5kaWYKIAogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCmluZGV4IDA2
M2Y3NjI2OWMyOTZiYmE3ODU2YjhlNDBiMTc4ZDE3NDdkYzljYTguLjk0MDM1YmJjYzQ1NzM2YmE5
N2JkMDgwZjJkOTQwMTAwZmNhMTQzYWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0xMjUsNyArMTI1LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEludFJlY3Q7CiAgICAgY2xhc3MgUm91bmRlZEludFJl
Y3Q7CiAgICAgY2xhc3MgS1VSTDsKLSAgICBjbGFzcyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDsK
KyAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKICAgICBjbGFzcyBUZXh0UnVuOwogCiAgICAg
ZW51bSBUZXh0RHJhd2luZ01vZGUgewpAQCAtNTA5LDkgKzUwOSw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgcGF0dGVybiBnZXRIYWlrdVN0cm9rZVN0eWxlKCk7CiAjZW5kaWYKIAot
ICAgICAgICB2b2lkIHNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKFNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEKiwgRHJhd2luZ0J1ZmZlciosIGNvbnN0IEludFNpemUmKTsKKyAgICAgICAgdm9pZCBz
ZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRCosIERyYXdpbmdCdWZm
ZXIqLCBjb25zdCBJbnRTaXplJik7CiAgICAgICAgIHZvaWQgc3luY1NvZnR3YXJlQ2FudmFzKCk7
Ci0gICAgICAgIHZvaWQgbWFya0RpcnR5UmVjdChjb25zdCBJbnRSZWN0Jik7IC8vIEhpbnRzIHRo
YXQgYSBwb3J0aW9uIG9mIHRoZSBiYWNraW5nIHN0b3JlIGlzIGRpcnR5LgogCiAgICAgICAgIHN0
YXRpYyB2b2lkIGFkanVzdExpbmVUb1BpeGVsQm91bmRhcmllcyhGbG9hdFBvaW50JiBwMSwgRmxv
YXRQb2ludCYgcDIsIGZsb2F0IHN0cm9rZVdpZHRoLCBTdHJva2VTdHlsZSk7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmlu
ZGV4IDBjYmU3ZTM0MGIxOThiZjRjMjZjZmI4ODY2MmIwN2Q2OTM4MGRmZjIuLjFkMGYyZjgzMTI0
OTM1NmZkZmNiOWRkMTg2ZTJlZDUzNzllOGU4MWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaApAQCAtNzIsNiArNzIsMTAg
QEAgdHlwZWRlZiBDR0xDb250ZXh0T2JqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Q7CiB0eXBl
ZGVmIHZvaWQqIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Q7CiAjZW5kaWYKIAorI2lmIFBMQVRG
T1JNKENIUk9NSVVNKSAmJiBVU0UoU0tJQSkKK2NsYXNzIEdyQ29udGV4dDsKKyNlbmRpZgorCiAv
LyBUaGVzZSBhcmUgY3VycmVudGx5IHRoZSBzYW1lIGFtb25nIGFsbCBpbXBsZW1lbnRhdGlvbnMu
CiBjb25zdCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIE51bGxQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDNEID0gMDsKIGNvbnN0IFBsYXRmb3JtM0RPYmplY3QgTnVsbFBsYXRmb3JtM0RPYmplY3Qg
PSAwOwpAQCAtNDY0LDYgKzQ2OCw5IEBAIHB1YmxpYzoKICNlbGlmIFBMQVRGT1JNKENIUk9NSVVN
KQogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQz
RCgpIGNvbnN0OwogICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Q7
CisjaWYgVVNFKFNLSUEpCisgICAgR3JDb250ZXh0KiBnckNvbnRleHQoKTsKKyNlbmRpZgogI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9y
bUxheWVyKCkgY29uc3Q7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0u
Y3BwCmluZGV4IDVkOTBhZDY4NDJmYmNiOTJkZWZmNzA2YzlkOTZjNjUzNGE0NmU5ZTEuLmU0MTRh
ZDNhYWJkMjExNjc5YWUxMGI1YzllYjQzMTJmY2Y5YWQwZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2lu
Z0J1ZmZlckNocm9taXVtLmNwcApAQCAtMzQsNyArMzQsNiBAQAogCiAjaW5jbHVkZSAiRXh0ZW5z
aW9uczNEQ2hyb21pdW0uaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1
ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCiAKICNpZiBVU0UoU0tJQSkKICNpbmNsdWRl
ICJHckNvbnRleHQuaCIKQEAgLTE2MSw3ICsxNjAsNyBAQCBQbGF0Zm9ybTNET2JqZWN0IERyYXdp
bmdCdWZmZXI6OnBsYXRmb3JtQ29sb3JCdWZmZXIoKSBjb25zdAogdm9pZCBEcmF3aW5nQnVmZmVy
OjpzZXRHckNvbnRleHQoR3JDb250ZXh0KiBjb250ZXh0KQogewogICAgIC8vIFdlIGp1c3QgdGFr
ZSBhIHB0ciB3aXRob3V0IHJlZmVyZW5jaW5nIGl0LCBhcyB3ZSByZXF1aXJlIHRoYXQgd2UgbmV2
ZXIgb3V0bGl2ZQotICAgIC8vIHRoZSBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCBvYmplY3QgdGhh
dCBpcyBnaXZpbmcgdXMgdGhlIGNvbnRleHQuCisgICAgLy8gdGhlIEdyYXBoaWNzQ29udGV4dDNE
IG9iamVjdCB0aGF0IGlzIGdpdmluZyB1cyB0aGUgY29udGV4dC4KICAgICBtX2dyQ29udGV4dCA9
IGNvbnRleHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZvbnRMaW51eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250TGludXguY3BwCmluZGV4IGU3NTgwODY4M2EwMjgzZTdiNDQ4YTQz
MDQwOTVlZDNhNjE3OWIwZTUuLjlkNTY5ZTRjMDg3MDBjNzBkYjZhYzQzM2MwNjcyZWU2MzNiYWUw
NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ZvbnRMaW51eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udExpbnV4LmNwcApAQCAtMTEwLDcgKzExMCw3IEBAIHZvaWQgRm9udDo6ZHJhd0ds
eXBocyhHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwKICAg
ICAgICAgeSArPSBTa0Zsb2F0VG9TY2FsYXIoYWR2W2ldLmhlaWdodCgpKTsKICAgICB9CiAKLSAg
ICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKKyAgICBn
Yy0+cGxhdGZvcm1Db250ZXh0KCktPm1ha2VHckNvbnRleHRDdXJyZW50KCk7CiAKICAgICBTa0Nh
bnZhcyogY2FudmFzID0gZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKICAgICBUZXh0
RHJhd2luZ01vZGVGbGFncyB0ZXh0TW9kZSA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Z2V0VGV4
dERyYXdpbmdNb2RlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwCmluZGV4IDhlNWY5MDkw
NDU1YWZiMGNiZTE5YTM4NmYzZmMzYzZmOGRkMTM5MzIuLmIyYzU1NzQyZjc5ZjhkM2I1NzQxYmVj
N2U1ODhlN2Q4YjFjYTI3ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0ZXIuY3BwCkBAIC0yNiw3
ICsyNiw2IEBACiAKICNpbmNsdWRlICJjYy9DQ0xheWVyU29ydGVyLmgiCiAKLSNpbmNsdWRlICJM
b29wQmxpbm5NYXRoVXRpbHMuaCIKICNpbmNsdWRlICJSZW5kZXJTdXJmYWNlQ2hyb21pdW0uaCIK
ICNpbmNsdWRlICJUcmFuc2Zvcm1hdGlvbk1hdHJpeC5oIgogI2luY2x1ZGUgPGxpbWl0cy5oPgpA
QCAtNDYsNyArNDUsMzUgQEAgc3RhdGljIFdURkxvZ0NoYW5uZWwgTG9nQ0NMYXllclNvcnRlciA9
IHsgMHgwMDAwMDAwMCwgIiIsIFdURkxvZ0NoYW5uZWxPZmYgfTsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi11c2luZyBMb29wQmxpbm5NYXRoVXRpbHM6OnBvaW50SW5UcmlhbmdsZTsKK3N0YXRp
YyBib29sIHBvaW50SW5UcmlhbmdsZShjb25zdCBGbG9hdFBvaW50JiBwb2ludCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBhLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgRmxvYXRQb2ludCYgYykKK3sKKyAgICAvLyBBbGdvcml0aG0gZnJvbSBodHRw
Oi8vd3d3LmJsYWNrcGF3bi5jb20vdGV4dHMvcG9pbnRpbnBvbHkvZGVmYXVsdC5odG1sCisgICAg
ZmxvYXQgeDAgPSBjLngoKSAtIGEueCgpOworICAgIGZsb2F0IHkwID0gYy55KCkgLSBhLnkoKTsK
KyAgICBmbG9hdCB4MSA9IGIueCgpIC0gYS54KCk7CisgICAgZmxvYXQgeTEgPSBiLnkoKSAtIGEu
eSgpOworICAgIGZsb2F0IHgyID0gcG9pbnQueCgpIC0gYS54KCk7CisgICAgZmxvYXQgeTIgPSBw
b2ludC55KCkgLSBhLnkoKTsKKworICAgIGZsb2F0IGRvdDAwID0geDAgKiB4MCArIHkwICogeTA7
CisgICAgZmxvYXQgZG90MDEgPSB4MCAqIHgxICsgeTAgKiB5MTsKKyAgICBmbG9hdCBkb3QwMiA9
IHgwICogeDIgKyB5MCAqIHkyOworICAgIGZsb2F0IGRvdDExID0geDEgKiB4MSArIHkxICogeTE7
CisgICAgZmxvYXQgZG90MTIgPSB4MSAqIHgyICsgeTEgKiB5MjsKKyAgICBmbG9hdCBkZW5vbWlu
YXRvciA9IGRvdDAwICogZG90MTEgLSBkb3QwMSAqIGRvdDAxOworICAgIGlmICghZGVub21pbmF0
b3IpCisgICAgICAgIC8vIFRyaWFuZ2xlIGlzIHplcm8tYXJlYS4gVHJlYXQgcXVlcnkgcG9pbnQg
YXMgbm90IGJlaW5nIGluc2lkZS4KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIENvbXB1
dGUKKyAgICBmbG9hdCBpbnZlcnNlRGVub21pbmF0b3IgPSAxLjBmIC8gZGVub21pbmF0b3I7Cisg
ICAgZmxvYXQgdSA9IChkb3QxMSAqIGRvdDAyIC0gZG90MDEgKiBkb3QxMikgKiBpbnZlcnNlRGVu
b21pbmF0b3I7CisgICAgZmxvYXQgdiA9IChkb3QwMCAqIGRvdDEyIC0gZG90MDEgKiBkb3QwMikg
KiBpbnZlcnNlRGVub21pbmF0b3I7CisKKyAgICByZXR1cm4gKHUgPiAwLjBmKSAmJiAodiA+IDAu
MGYpICYmICh1ICsgdiA8IDEuMGYpOworfQogCiBpbmxpbmUgc3RhdGljIGZsb2F0IHBlcnBQcm9k
dWN0KGNvbnN0IEZsb2F0U2l6ZSYgdSwgY29uc3QgRmxvYXRTaXplJiB2KQogewpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0JpY3ViaWNTaGFkZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0JpY3ViaWNTaGFkZXIuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOWM0MzQyMTc3ODg0NTI3M2NhM2ZhZDQ5
MTA1NzE0ZWQ3NmVlNWJjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9CaWN1YmljU2hhZGVy
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLQotI2luY2x1ZGUgIkJpY3ViaWNT
aGFkZXIuaCIKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotQmljdWJpY1NoYWRlcjo6QmljdWJpY1NoYWRlcihHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgdW5zaWduZWQgcHJvZ3JhbSkKLSAgICA6IFNoYWRlcihjb250ZXh0LCBwcm9n
cmFtKQotICAgICwgbV9tYXRyaXhMb2NhdGlvbihjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24o
cHJvZ3JhbSwgIm1hdHJpeCIpKQotICAgICwgbV90ZXhNYXRyaXhMb2NhdGlvbihjb250ZXh0LT5n
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgInRleE1hdHJpeCIpKQotICAgICwgbV9jb2VmZmlj
aWVudHNMb2NhdGlvbihjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgImNvZWZm
aWNpZW50cyIpKQotICAgICwgbV9pbWFnZUluY3JlbWVudExvY2F0aW9uKGNvbnRleHQtPmdldFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAiaW1hZ2VJbmNyZW1lbnQiKSkKLSAgICAsIG1faW1hZ2VM
b2NhdGlvbihjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgImltYWdlIikpCi0g
ICAgLCBtX2FscGhhTG9jYXRpb24oY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0s
ICJhbHBoYSIpKQotICAgICwgbV9wb3NpdGlvbkxvY2F0aW9uKGNvbnRleHQtPmdldEF0dHJpYkxv
Y2F0aW9uKHByb2dyYW0sICJwb3NpdGlvbiIpKQotewotfQotCi1QYXNzT3duUHRyPEJpY3ViaWNT
aGFkZXI+IEJpY3ViaWNTaGFkZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkK
LXsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlID0KLSAgICAgICAg
InVuaWZvcm0gbWF0MyBtYXRyaXg7XG4iCi0gICAgICAgICJ1bmlmb3JtIG1hdDMgdGV4TWF0cml4
O1xuIgotICAgICAgICAiYXR0cmlidXRlIHZlYzIgcG9zaXRpb247XG4iCi0gICAgICAgICJ2YXJ5
aW5nIHZlYzIgdGV4Q29vcmQ7XG4iCi0gICAgICAgICJ2b2lkIG1haW4oKSB7XG4iCi0gICAgICAg
ICIgICAgdmVjMyBwb3MgPSB2ZWMzKHBvc2l0aW9uLCAxLjApO1xuIgotICAgICAgICAiICAgIHRl
eENvb3JkID0gKHRleE1hdHJpeCAqIHBvcykueHk7XG4iCi0gICAgICAgICIgICAgZ2xfUG9zaXRp
b24gPSB2ZWM0KG1hdHJpeCAqIHBvcywgMS4wKTtcbiIKLSAgICAgICAgIn1cbiI7Ci0gICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyU291cmNlID0KLSAgICAgICAgIiNpZmRlZiBH
TF9FU1xuIgotICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iCi0gICAgICAgICIj
ZW5kaWZcbiIKLSAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIGltYWdlO1xuIgotICAgICAgICAi
dW5pZm9ybSB2ZWMyIGltYWdlSW5jcmVtZW50O1xuIgotICAgICAgICAidW5pZm9ybSBtYXQ0IGNv
ZWZmaWNpZW50cztcbiIKLSAgICAgICAgInVuaWZvcm0gZmxvYXQgYWxwaGE7XG4iCi0gICAgICAg
ICJ2YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7XG4iCi0gICAgICAgICJ2ZWM0IGN1YmljQmxlbmQoZmxv
YXQgdCwgdmVjNCBjMCwgdmVjNCBjMSwgdmVjNCBjMiwgdmVjNCBjMykge1xuIgotICAgICAgICAi
ICAgIHZlYzQgdHMgPSB2ZWM0KDEuMCwgdCwgdCAqIHQsIHQgKiB0ICogdCk7XG4iCi0gICAgICAg
ICIgICAgdmVjNCByZXN1bHQgPSBjb2VmZmljaWVudHMgKiB0cztcbiIKLSAgICAgICAgIiAgICBy
ZXR1cm4gcmVzdWx0LncgKiBjMCArIHJlc3VsdC56ICogYzEgKyByZXN1bHQueSAqIGMyICsgcmVz
dWx0LnggKiBjMztcbiIKLSAgICAgICAgIn1cbiIKLSAgICAgICAgInZvaWQgbWFpbigpIHtcbiIK
LSAgICAgICAgIiAgICB2ZWMyIGltYWdlQ29vcmQgPSB0ZXhDb29yZDtcbiIKLSAgICAgICAgIiAg
ICB2ZWMyIGYgPSBmcmFjdChpbWFnZUNvb3JkIC8gaW1hZ2VJbmNyZW1lbnQpIC0gdmVjMigwLjUs
IDAuNSk7XG4iCi0gICAgICAgICIgICAgdmVjNCB0MDAgPSB0ZXh0dXJlMkQoaW1hZ2UsIGltYWdl
Q29vcmQgKyBpbWFnZUluY3JlbWVudCAqIHZlYzIoLTEsIC0xKSk7XG4iCi0gICAgICAgICIgICAg
dmVjNCB0MTAgPSB0ZXh0dXJlMkQoaW1hZ2UsIGltYWdlQ29vcmQgKyBpbWFnZUluY3JlbWVudCAq
IHZlYzIoIDAsIC0xKSk7XG4iCi0gICAgICAgICIgICAgdmVjNCB0MjAgPSB0ZXh0dXJlMkQoaW1h
Z2UsIGltYWdlQ29vcmQgKyBpbWFnZUluY3JlbWVudCAqIHZlYzIoIDEsIC0xKSk7XG4iCi0gICAg
ICAgICIgICAgdmVjNCB0MzAgPSB0ZXh0dXJlMkQoaW1hZ2UsIGltYWdlQ29vcmQgKyBpbWFnZUlu
Y3JlbWVudCAqIHZlYzIoIDIsIC0xKSk7XG4iCi0gICAgICAgICIgICAgdmVjNCB0MCA9IGN1Ymlj
QmxlbmQoZi54LCB0MDAsIHQxMCwgdDIwLCB0MzApO1xuIgotICAgICAgICAiICAgIHZlYzQgdDAx
ID0gdGV4dHVyZTJEKGltYWdlLCBpbWFnZUNvb3JkICsgaW1hZ2VJbmNyZW1lbnQgKiB2ZWMyKC0x
LCAwKSk7XG4iCi0gICAgICAgICIgICAgdmVjNCB0MTEgPSB0ZXh0dXJlMkQoaW1hZ2UsIGltYWdl
Q29vcmQgKyBpbWFnZUluY3JlbWVudCAqIHZlYzIoIDAsIDApKTtcbiIKLSAgICAgICAgIiAgICB2
ZWM0IHQyMSA9IHRleHR1cmUyRChpbWFnZSwgaW1hZ2VDb29yZCArIGltYWdlSW5jcmVtZW50ICog
dmVjMiggMSwgMCkpO1xuIgotICAgICAgICAiICAgIHZlYzQgdDMxID0gdGV4dHVyZTJEKGltYWdl
LCBpbWFnZUNvb3JkICsgaW1hZ2VJbmNyZW1lbnQgKiB2ZWMyKCAyLCAwKSk7XG4iCi0gICAgICAg
ICIgICAgdmVjNCB0MSA9IGN1YmljQmxlbmQoZi54LCB0MDEsIHQxMSwgdDIxLCB0MzEpO1xuIgot
ICAgICAgICAiICAgIHZlYzQgdDAyID0gdGV4dHVyZTJEKGltYWdlLCBpbWFnZUNvb3JkICsgaW1h
Z2VJbmNyZW1lbnQgKiB2ZWMyKC0xLCAxKSk7XG4iCi0gICAgICAgICIgICAgdmVjNCB0MTIgPSB0
ZXh0dXJlMkQoaW1hZ2UsIGltYWdlQ29vcmQgKyBpbWFnZUluY3JlbWVudCAqIHZlYzIoIDAsIDEp
KTtcbiIKLSAgICAgICAgIiAgICB2ZWM0IHQyMiA9IHRleHR1cmUyRChpbWFnZSwgaW1hZ2VDb29y
ZCArIGltYWdlSW5jcmVtZW50ICogdmVjMiggMSwgMSkpO1xuIgotICAgICAgICAiICAgIHZlYzQg
dDMyID0gdGV4dHVyZTJEKGltYWdlLCBpbWFnZUNvb3JkICsgaW1hZ2VJbmNyZW1lbnQgKiB2ZWMy
KCAyLCAxKSk7XG4iCi0gICAgICAgICIgICAgdmVjNCB0MiA9IGN1YmljQmxlbmQoZi54LCB0MDIs
IHQxMiwgdDIyLCB0MzIpO1xuIgotICAgICAgICAiICAgIHZlYzQgdDAzID0gdGV4dHVyZTJEKGlt
YWdlLCBpbWFnZUNvb3JkICsgaW1hZ2VJbmNyZW1lbnQgKiB2ZWMyKC0xLCAyKSk7XG4iCi0gICAg
ICAgICIgICAgdmVjNCB0MTMgPSB0ZXh0dXJlMkQoaW1hZ2UsIGltYWdlQ29vcmQgKyBpbWFnZUlu
Y3JlbWVudCAqIHZlYzIoIDAsIDIpKTtcbiIKLSAgICAgICAgIiAgICB2ZWM0IHQyMyA9IHRleHR1
cmUyRChpbWFnZSwgaW1hZ2VDb29yZCArIGltYWdlSW5jcmVtZW50ICogdmVjMiggMSwgMikpO1xu
IgotICAgICAgICAiICAgIHZlYzQgdDMzID0gdGV4dHVyZTJEKGltYWdlLCBpbWFnZUNvb3JkICsg
aW1hZ2VJbmNyZW1lbnQgKiB2ZWMyKCAyLCAyKSk7XG4iCi0gICAgICAgICIgICAgdmVjNCB0MyA9
IGN1YmljQmxlbmQoZi54LCB0MDMsIHQxMywgdDIzLCB0MzMpO1xuIgotICAgICAgICAiICAgIGds
X0ZyYWdDb2xvciA9IGN1YmljQmxlbmQoZi55LCB0MCwgdDEsIHQyLCB0Myk7XG4iCi0gICAgICAg
ICJ9XG4iOwotCi0gICAgdW5zaWduZWQgcHJvZ3JhbSA9IGxvYWRQcm9ncmFtKGNvbnRleHQsIHZl
cnRleFNoYWRlclNvdXJjZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwotICAgIGlmICghcHJvZ3Jh
bSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IEJp
Y3ViaWNTaGFkZXIoY29udGV4dCwgcHJvZ3JhbSkpOwotfQotCi12b2lkIEJpY3ViaWNTaGFkZXI6
OnVzZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiB0ZXhUcmFuc2Zvcm0sIGNvbnN0IGZsb2F0IGNvZWZmaWNpZW50c1sxNl0sIGNvbnN0IGZs
b2F0IGltYWdlSW5jcmVtZW50WzJdLCBmbG9hdCBhbHBoYSkKLXsKLSAgICBtX2NvbnRleHQtPnVz
ZVByb2dyYW0obV9wcm9ncmFtKTsKLSAgICBmbG9hdCBtYXRyaXhbOV07Ci0gICAgYWZmaW5lVG8z
eDModHJhbnNmb3JtLCBtYXRyaXgpOwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdiht
X21hdHJpeExvY2F0aW9uLCBmYWxzZSAvKnRyYW5zcG9zZSovLCBtYXRyaXgsIDEgLypjb3VudCov
KTsKLQotICAgIGZsb2F0IHRleE1hdHJpeFs5XTsKLSAgICBhZmZpbmVUbzN4Myh0ZXhUcmFuc2Zv
cm0sIHRleE1hdHJpeCk7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KG1fdGV4TWF0
cml4TG9jYXRpb24sIGZhbHNlIC8qdHJhbnNwb3NlKi8sIHRleE1hdHJpeCwgMSAvKmNvdW50Ki8p
OwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDRmdihtX2NvZWZmaWNpZW50c0xvY2F0aW9u
LCBmYWxzZSAvKnRyYW5zcG9zZSovLCBjb25zdF9jYXN0PGZsb2F0ICo+KGNvZWZmaWNpZW50cyks
IDEgLypjb3VudCovKTsKLQotICAgIG1fY29udGV4dC0+dW5pZm9ybTJmKG1faW1hZ2VJbmNyZW1l
bnRMb2NhdGlvbiwgaW1hZ2VJbmNyZW1lbnRbMF0sIGltYWdlSW5jcmVtZW50WzFdKTsKLQotICAg
IC8vIEZvciBub3csIHdlIGFsd2F5cyB1c2UgdGV4dHVyZSB1bml0IDAuIElmIHRoYXQgZXZlciBj
aGFuZ2VzLCB3ZSBzaG91bGQKLSAgICAvLyBleHBvc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGhlIGNh
bGxlci4KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xaShtX2ltYWdlTG9jYXRpb24sIDApOwotICAg
IG1fY29udGV4dC0+dW5pZm9ybTFmKG1fYWxwaGFMb2NhdGlvbiwgYWxwaGEpOwotCi0gICAgbV9j
b250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKG1fcG9zaXRpb25Mb2NhdGlvbiwgMiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7Ci0KLSAgICBtX2NvbnRleHQtPmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KG1fcG9zaXRpb25Mb2NhdGlvbik7Ci19Ci0KLX0KLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQmljdWJp
Y1NoYWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0JpY3ViaWNT
aGFkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjc1MjJmNDQ1N2QzZmFjN2Zj
YzEwZTFhNGQ4YjhiYTMzNzJmZDY1MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQmljdWJp
Y1NoYWRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQmljdWJpY1No
YWRlcl9oCi0jZGVmaW5lIEJpY3ViaWNTaGFkZXJfaAotCi0jaW5jbHVkZSAiU2hhZGVyLmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQmljdWJpY1NoYWRlciA6IHB1YmxpYyBTaGFk
ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPEJpY3ViaWNTaGFkZXI+IGNyZWF0
ZShHcmFwaGljc0NvbnRleHQzRCopOwotCi0gICAgdm9pZCB1c2UoY29uc3QgQWZmaW5lVHJhbnNm
b3JtJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0ZXhUcmFuc2Zvcm0sIGNvbnN0IGZsb2F0IGNv
ZWZmaWNpZW50c1sxNl0sIGNvbnN0IGZsb2F0IGltYWdlSW5jcmVtZW50WzJdLCBmbG9hdCBhbHBo
YSk7Ci0KLXByaXZhdGU6Ci0gICAgQmljdWJpY1NoYWRlcihHcmFwaGljc0NvbnRleHQzRCosIHVu
c2lnbmVkIHByb2dyYW0pOwotCi0gICAgaW50IG1fbWF0cml4TG9jYXRpb247Ci0gICAgaW50IG1f
dGV4TWF0cml4TG9jYXRpb247Ci0gICAgaW50IG1fY29lZmZpY2llbnRzTG9jYXRpb247Ci0gICAg
aW50IG1faW1hZ2VJbmNyZW1lbnRMb2NhdGlvbjsKLSAgICBpbnQgbV9pbWFnZUxvY2F0aW9uOwot
ICAgIGludCBtX2FscGhhTG9jYXRpb247Ci0gICAgaW50IG1fcG9zaXRpb25Mb2NhdGlvbjsKLX07
Ci0KLX0KLQotI2VuZGlmIC8vIEJpY3ViaWNTaGFkZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0NvbnZvbHV0aW9uU2hhZGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Db252b2x1dGlvblNoYWRlci5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUwODAwMjc0ZmE1OGJjMzhkZWViODVjMTc2OTk5
OTVhNWM5ZTUzNjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0NvbnZvbHV0aW9uU2hhZGVy
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLQotI2luY2x1ZGUgIkNvbnZvbHV0
aW9uU2hhZGVyLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUg
IlN0cmluZ0V4dHJhcy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNvbnZvbHV0aW9uU2hh
ZGVyOjpDb252b2x1dGlvblNoYWRlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWdu
ZWQgcHJvZ3JhbSwgaW50IGtlcm5lbFdpZHRoKQotICAgIDogU2hhZGVyKGNvbnRleHQsIHByb2dy
YW0pCi0gICAgLCBtX2tlcm5lbFdpZHRoKGtlcm5lbFdpZHRoKQotICAgICwgbV9tYXRyaXhMb2Nh
dGlvbihjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgIm1hdHJpeCIpKQotICAg
ICwgbV90ZXhNYXRyaXhMb2NhdGlvbihjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3Jh
bSwgInRleE1hdHJpeCIpKQotICAgICwgbV9rZXJuZWxMb2NhdGlvbihjb250ZXh0LT5nZXRVbmlm
b3JtTG9jYXRpb24ocHJvZ3JhbSwgImtlcm5lbCIpKQotICAgICwgbV9pbWFnZUxvY2F0aW9uKGNv
bnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAiaW1hZ2UiKSkKLSAgICAsIG1faW1h
Z2VJbmNyZW1lbnRMb2NhdGlvbihjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwg
ImltYWdlSW5jcmVtZW50IikpCi0gICAgLCBtX3Bvc2l0aW9uTG9jYXRpb24oY29udGV4dC0+Z2V0
QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgInBvc2l0aW9uIikpCi17Ci19Ci0KLVBhc3NPd25QdHI8
Q29udm9sdXRpb25TaGFkZXI+IENvbnZvbHV0aW9uU2hhZGVyOjpjcmVhdGUoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQsIGludCBrZXJuZWxXaWR0aCkKLXsKLSAgICBzdGF0aWMgY29uc3QgY2hh
ciogdmVydGV4U2hhZGVyUmF3ID0KLSAgICAgICAgIiNkZWZpbmUgS0VSTkVMX1dJRFRIICVkXG4i
Ci0gICAgICAgICJ1bmlmb3JtIG1hdDMgbWF0cml4O1xuIgotICAgICAgICAidW5pZm9ybSBtYXQz
IHRleE1hdHJpeDtcbiIKLSAgICAgICAgInVuaWZvcm0gdmVjMiBpbWFnZUluY3JlbWVudDtcbiIK
LSAgICAgICAgImF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuIgotICAgICAgICAidmFyeWluZyB2
ZWMyIGltYWdlQ29vcmQ7XG4iCi0gICAgICAgICJ2b2lkIG1haW4oKSB7XG4iCi0gICAgICAgICIg
ICAgdmVjMyBwb3MgPSB2ZWMzKHBvc2l0aW9uLCAxLjApO1xuIgotICAgICAgICAiICAgIC8vIE9m
ZnNldCBpbWFnZSBjb29yZHMgYnkgaGFsZiBvZiBrZXJuZWwgd2lkdGgsIGluIGltYWdlIHRleGVs
c1xuIgotICAgICAgICAiICAgIGdsX1Bvc2l0aW9uID0gdmVjNChtYXRyaXggKiBwb3MsIDEuMCk7
XG4iCi0gICAgICAgICIgICAgZmxvYXQgc2NhbGUgPSAoZmxvYXQoS0VSTkVMX1dJRFRIKSAtIDEu
MCkgLyAyLjA7XG4iCi0gICAgICAgICIgICAgaW1hZ2VDb29yZCA9ICh0ZXhNYXRyaXggKiBwb3Mp
Lnh5IC0gdmVjMihzY2FsZSwgc2NhbGUpICogaW1hZ2VJbmNyZW1lbnQ7XG4iCi0gICAgICAgICJ9
XG4iOwotICAgIGNoYXIgdmVydGV4U2hhZGVyU291cmNlWzEwMjRdOwotICAgIHNucHJpbnRmKHZl
cnRleFNoYWRlclNvdXJjZSwgc2l6ZW9mKHZlcnRleFNoYWRlclNvdXJjZSksIHZlcnRleFNoYWRl
clJhdywga2VybmVsV2lkdGgpOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRl
clJhdyA9Ci0gICAgICAgICIjaWZkZWYgR0xfRVNcbiIKLSAgICAgICAgInByZWNpc2lvbiBtZWRp
dW1wIGZsb2F0O1xuIgotICAgICAgICAiI2VuZGlmXG4iCi0gICAgICAgICIjZGVmaW5lIEtFUk5F
TF9XSURUSCAlZFxuIgotICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgaW1hZ2U7XG4iCi0gICAg
ICAgICJ1bmlmb3JtIGZsb2F0IGtlcm5lbFtLRVJORUxfV0lEVEhdO1xuIgotICAgICAgICAidW5p
Zm9ybSB2ZWMyIGltYWdlSW5jcmVtZW50O1xuIgotICAgICAgICAidmFyeWluZyB2ZWMyIGltYWdl
Q29vcmQ7XG4iCi0gICAgICAgICJ2b2lkIG1haW4oKSB7XG4iCi0gICAgICAgICIgICAgdmVjMiBj
b29yZCA9IGltYWdlQ29vcmQ7XG4iCi0gICAgICAgICIgICAgdmVjNCBzdW0gPSB2ZWM0KDAsIDAs
IDAsIDApO1xuIgotICAgICAgICAiICAgIGZvciAoaW50IGkgPSAwOyBpIDwgS0VSTkVMX1dJRFRI
OyBpKyspIHtcbiIKLSAgICAgICAgIiAgICAgIHN1bSArPSB0ZXh0dXJlMkQoaW1hZ2UsIGNvb3Jk
KSAqIGtlcm5lbFtpXTtcbiIKLSAgICAgICAgIiAgICAgIGNvb3JkICs9IGltYWdlSW5jcmVtZW50
O1xuIgotICAgICAgICAiICAgIH1cbiIKLSAgICAgICAgIiAgICBnbF9GcmFnQ29sb3IgPSBzdW07
XG4iCi0gICAgICAgICJ9XG4iOwotICAgIGNoYXIgZnJhZ21lbnRTaGFkZXJTb3VyY2VbMTAyNF07
Ci0gICAgc25wcmludGYoZnJhZ21lbnRTaGFkZXJTb3VyY2UsIHNpemVvZihmcmFnbWVudFNoYWRl
clNvdXJjZSksIGZyYWdtZW50U2hhZGVyUmF3LCBrZXJuZWxXaWR0aCk7Ci0KLSAgICB1bnNpZ25l
ZCBwcm9ncmFtID0gbG9hZFByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlLCBmcmFn
bWVudFNoYWRlclNvdXJjZSk7Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IENvbnZvbHV0aW9uU2hhZGVyKGNvbnRleHQs
IHByb2dyYW0sIGtlcm5lbFdpZHRoKSk7Ci19Ci0KLXZvaWQgQ29udm9sdXRpb25TaGFkZXI6OnVz
ZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0ZXhUcmFuc2Zvcm0sIGNvbnN0IGZsb2F0KiBrZXJuZWwsIGludCBrZXJuZWxXaWR0aCwgZmxv
YXQgaW1hZ2VJbmNyZW1lbnRbMl0pCi17Ci0gICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKG1fcHJv
Z3JhbSk7Ci0gICAgZmxvYXQgbWF0cml4WzldOwotICAgIGFmZmluZVRvM3gzKHRyYW5zZm9ybSwg
bWF0cml4KTsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobV9tYXRyaXhMb2NhdGlv
biwgZmFsc2UgLyp0cmFuc3Bvc2UqLywgbWF0cml4LCAxIC8qY291bnQqLyk7Ci0KLSAgICBmbG9h
dCB0ZXhNYXRyaXhbOV07Ci0gICAgYWZmaW5lVG8zeDModGV4VHJhbnNmb3JtLCB0ZXhNYXRyaXgp
OwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihtX3RleE1hdHJpeExvY2F0aW9uLCBm
YWxzZSAvKnRyYW5zcG9zZSovLCB0ZXhNYXRyaXgsIDEgLypjb3VudCovKTsKLQotICAgIG1fY29u
dGV4dC0+dW5pZm9ybTJmKG1faW1hZ2VJbmNyZW1lbnRMb2NhdGlvbiwgaW1hZ2VJbmNyZW1lbnRb
MF0sIGltYWdlSW5jcmVtZW50WzFdKTsKLQotICAgIC8vIEZvciBub3csIHdlIGFsd2F5cyB1c2Ug
dGV4dHVyZSB1bml0IDAuIElmIHRoYXQgZXZlciBjaGFuZ2VzLCB3ZSBzaG91bGQKLSAgICAvLyBl
eHBvc2UgdGhpcyBwYXJhbWV0ZXIgdG8gdGhlIGNhbGxlci4KLSAgICBtX2NvbnRleHQtPnVuaWZv
cm0xaShtX2ltYWdlTG9jYXRpb24sIDApOwotICAgIGlmIChrZXJuZWxXaWR0aCA+IG1fa2VybmVs
V2lkdGgpCi0gICAgICAgIGtlcm5lbFdpZHRoID0gbV9rZXJuZWxXaWR0aDsKLSAgICBtX2NvbnRl
eHQtPnVuaWZvcm0xZnYobV9rZXJuZWxMb2NhdGlvbiwgY29uc3RfY2FzdDxmbG9hdCo+KGtlcm5l
bCksIGtlcm5lbFdpZHRoKTsKLQotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlciht
X3Bvc2l0aW9uTG9jYXRpb24sIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAs
IDApOwotCi0gICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3Bvc2l0aW9u
TG9jYXRpb24pOwotfQotCi19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0NvbnZvbHV0aW9uU2hhZGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ29udm9sdXRpb25TaGFkZXIuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNTMzZTBmNWUyYTI5MTBjNzc2YzFkYTgyYmE0ODE0ODhkYWI0ZThk
Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ29udm9sdXRpb25TaGFkZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENvbnZvbHV0aW9uU2hhZGVyX2gKLSNkZWZp
bmUgQ29udm9sdXRpb25TaGFkZXJfaAotCi0jaW5jbHVkZSAiU2hhZGVyLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgQ29udm9sdXRpb25TaGFkZXIgOiBwdWJsaWMgU2hhZGVyIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxDb252b2x1dGlvblNoYWRlcj4gY3JlYXRl
KEdyYXBoaWNzQ29udGV4dDNEKiwgaW50IGtlcm5lbFdpZHRoKTsKLQotICAgIHZvaWQgdXNlKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGV4VHJhbnNmb3Jt
LCBjb25zdCBmbG9hdCoga2VybmVsLCBpbnQga2VybmVsV2lkdGgsIGZsb2F0IGltYWdlSW5jcmVt
ZW50WzJdKTsKLQotcHJpdmF0ZToKLSAgICBDb252b2x1dGlvblNoYWRlcihHcmFwaGljc0NvbnRl
eHQzRCosIHVuc2lnbmVkIHByb2dyYW0sIGludCBrZXJuZWxXaWR0aCk7Ci0KLSAgICBpbnQgbV9r
ZXJuZWxXaWR0aDsKLSAgICBpbnQgbV9tYXRyaXhMb2NhdGlvbjsKLSAgICBpbnQgbV90ZXhNYXRy
aXhMb2NhdGlvbjsKLSAgICBpbnQgbV9rZXJuZWxMb2NhdGlvbjsKLSAgICBpbnQgbV9pbWFnZUxv
Y2F0aW9uOwotICAgIGludCBtX2ltYWdlSW5jcmVtZW50TG9jYXRpb247Ci0gICAgaW50IG1fcG9z
aXRpb25Mb2NhdGlvbjsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIENvbnZvbHV0aW9uU2hhZGVyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HcmFwaGlj
c0NvbnRleHRHUFUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dy
YXBoaWNzQ29udGV4dEdQVS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkM2U5
YWEwZTM5OWUwYjlkNjJkMzlkMmUxZGRhMDNiMGM5NGQ1OTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0dyYXBoaWNzQ29udGV4dEdQVS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5MzEgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHUFUu
aCIKLQotI2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlICJGbG9hdFNpemUuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgot
I2luY2x1ZGUgImludGVybmFsX2dsdS5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNpbmNsdWRl
ICJMb29wQmxpbm5NYXRoVXRpbHMuaCIKLSNpbmNsdWRlICJMb29wQmxpbm5QYXRoUHJvY2Vzc29y
LmgiCi0jaW5jbHVkZSAiTG9vcEJsaW5uU29saWRGaWxsU2hhZGVyLmgiCi0jaW5jbHVkZSAiUGF0
aC5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCi0jaW5jbHVkZSAiU2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0QuaCIKLSNpZiBVU0UoU0tJQSkKLSNpbmNsdWRlICJTa1BhdGguaCIKLSNlbmRp
ZgotI2luY2x1ZGUgIlRleHR1cmUuaCIKLQotI2RlZmluZSBfVVNFX01BVEhfREVGSU5FUwotI2lu
Y2x1ZGUgPG1hdGguaD4KLQotI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBOdW1iZXIg
b2YgbGluZSBzZWdtZW50cyB1c2VkIHRvIGFwcHJveGltYXRlIGJlemllciBjdXJ2ZXMuCi1jb25z
dCBpbnQgcGF0aFRlc3NlbGF0aW9uID0gMzA7Ci10eXBlZGVmIHZvaWQgKEdMQVBJRU5UUlkgKlRF
U1NDQikoKTsKLXR5cGVkZWYgV1RGOjpWZWN0b3I8ZmxvYXQ+IEZsb2F0VmVjdG9yOwotdHlwZWRl
ZiBXVEY6OlZlY3RvcjxGbG9hdFBvaW50PiBGbG9hdFBvaW50VmVjdG9yOwotCi1zdHJ1Y3QgUGF0
aEFuZFRyYW5zZm9ybSB7Ci0gICAgUGF0aEFuZFRyYW5zZm9ybShjb25zdCBQYXRoJiBwLCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHQpCi0gICAgICAgIDogcGF0aChwKQotICAgICAgICAsIHRyYW5z
Zm9ybSh0KQotICAgIHsKLSAgICB9Ci0gICAgUGF0aCBwYXRoOwotICAgIEFmZmluZVRyYW5zZm9y
bSB0cmFuc2Zvcm07Ci19OwotCi1zdHJ1Y3QgR3JhcGhpY3NDb250ZXh0R1BVOjpTdGF0ZSB7Ci0g
ICAgU3RhdGUoKQotICAgICAgICA6IG1fZmlsbENvbG9yKDAsIDAsIDAsIDI1NSkKLSAgICAgICAg
LCBtX3NoYWRvd0NvbG9yKDAsIDAsIDAsIDApCi0gICAgICAgICwgbV9hbHBoYSgxLjBmKQotICAg
ICAgICAsIG1fY29tcG9zaXRlT3AoQ29tcG9zaXRlU291cmNlT3ZlcikKLSAgICAgICAgLCBtX251
bUNsaXBwaW5nUGF0aHMoMCkKLSAgICAgICAgLCBtX3NoYWRvd09mZnNldCgwLCAwKQotICAgICAg
ICAsIG1fc2hhZG93Qmx1cigwKQotICAgICAgICAsIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMo
ZmFsc2UpCi0gICAgewotICAgIH0KLSAgICBTdGF0ZShjb25zdCBTdGF0ZSYgb3RoZXIpCi0gICAg
ICAgIDogbV9maWxsQ29sb3Iob3RoZXIubV9maWxsQ29sb3IpCi0gICAgICAgICwgbV9zaGFkb3dD
b2xvcihvdGhlci5tX3NoYWRvd0NvbG9yKQotICAgICAgICAsIG1fYWxwaGEob3RoZXIubV9hbHBo
YSkKLSAgICAgICAgLCBtX2NvbXBvc2l0ZU9wKG90aGVyLm1fY29tcG9zaXRlT3ApCi0gICAgICAg
ICwgbV9jdG0ob3RoZXIubV9jdG0pCi0gICAgICAgICwgbV9jbGlwcGluZ1BhdGhzKCkgLy8gRG9u
J3QgY29weTsgY2xpcHBpbmcgcGF0aHMgYXJlIHRyYWNrZWQgcGVyLXN0YXRlLgotICAgICAgICAs
IG1fbnVtQ2xpcHBpbmdQYXRocyhvdGhlci5tX251bUNsaXBwaW5nUGF0aHMpCi0gICAgICAgICwg
bV9zaGFkb3dPZmZzZXQob3RoZXIubV9zaGFkb3dPZmZzZXQpCi0gICAgICAgICwgbV9zaGFkb3dC
bHVyKG90aGVyLm1fc2hhZG93Qmx1cikKLSAgICAgICAgLCBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zv
cm1zKG90aGVyLm1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpCi0gICAgewotICAgIH0KLSAgICBD
b2xvciBtX2ZpbGxDb2xvcjsKLSAgICBDb2xvciBtX3NoYWRvd0NvbG9yOwotICAgIGZsb2F0IG1f
YWxwaGE7Ci0gICAgQ29tcG9zaXRlT3BlcmF0b3IgbV9jb21wb3NpdGVPcDsKLSAgICBBZmZpbmVU
cmFuc2Zvcm0gbV9jdG07Ci0gICAgV1RGOjpWZWN0b3I8UGF0aEFuZFRyYW5zZm9ybT4gbV9jbGlw
cGluZ1BhdGhzOwotICAgIGludCBtX251bUNsaXBwaW5nUGF0aHM7Ci0gICAgRmxvYXRTaXplIG1f
c2hhZG93T2Zmc2V0OwotICAgIGZsb2F0IG1fc2hhZG93Qmx1cjsKLSAgICBib29sIG1fc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXM7Ci0KLSAgICAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGFwcGx5aW5n
IHRoZSBzdGF0ZSdzIGFscGhhIHZhbHVlIHRvIHRoZSBnaXZlbiBpbnB1dAotICAgIC8vIGNvbG9y
IHRvIHByb2R1Y2UgYSBuZXcgb3V0cHV0IGNvbG9yLiBUaGUgbG9naWMgaXMgdGhlIHNhbWUgYXMK
LSAgICAvLyBQbGF0Zm9ybUNvbnRleHRTa2lhOjpTdGF0ZTo6YXBwbHlBbHBoYSgpLCBidXQgdGhl
IHR5cGUgaXMgZGlmZmVyZW50LgotICAgIENvbG9yIGFwcGx5QWxwaGEoY29uc3QgQ29sb3ImIGMp
Ci0gICAgewotICAgICAgICBpbnQgcyA9IHJvdW5kZihtX2FscGhhICogMjU2KTsKLSAgICAgICAg
aWYgKHMgPj0gMjU2KQotICAgICAgICAgICAgcmV0dXJuIGM7Ci0gICAgICAgIGlmIChzIDwgMCkK
LSAgICAgICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAgICAgIGludCBhID0gKGMuYWxwaGEo
KSAqIHMpID4+IDg7Ci0gICAgICAgIHJldHVybiBDb2xvcihjLnJlZCgpLCBjLmdyZWVuKCksIGMu
Ymx1ZSgpLCBhKTsKLSAgICB9Ci0gICAgYm9vbCBzaGFkb3dBY3RpdmUoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fc2hhZG93Q29sb3IuYWxwaGEoKSA+IDAgJiYgKG1fc2hhZG93Qmx1
ciB8fCBtX3NoYWRvd09mZnNldC53aWR0aCgpIHx8IG1fc2hhZG93T2Zmc2V0LmhlaWdodCgpKTsK
LSAgICB9Ci0gICAgYm9vbCBjbGlwcGluZ0VuYWJsZWQoKSB7IHJldHVybiBtX251bUNsaXBwaW5n
UGF0aHMgPiAwOyB9Ci19OwotCi1zdGF0aWMgaW5saW5lIEZsb2F0UG9pbnQgb3BlcmF0b3IqKGNv
bnN0IEZsb2F0UG9pbnQmIGYsIGZsb2F0IHNjYWxlKQotewotICAgIHJldHVybiBGbG9hdFBvaW50
KGYueCgpICogc2NhbGUsIGYueSgpICogc2NhbGUpOwotfQotCi1zdGF0aWMgaW5saW5lIEZsb2F0
UG9pbnQgb3BlcmF0b3IqKGZsb2F0IHNjYWxlLCBjb25zdCBGbG9hdFBvaW50JiBmKQotewotICAg
IHJldHVybiBGbG9hdFBvaW50KGYueCgpICogc2NhbGUsIGYueSgpICogc2NhbGUpOwotfQotCi1z
dGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBvcGVyYXRvciooY29uc3QgRmxvYXRTaXplJiBmLCBmbG9h
dCBzY2FsZSkKLXsKLSAgICByZXR1cm4gRmxvYXRTaXplKGYud2lkdGgoKSAqIHNjYWxlLCBmLmhl
aWdodCgpICogc2NhbGUpOwotfQotCi1zdGF0aWMgaW5saW5lIEZsb2F0U2l6ZSBvcGVyYXRvcioo
ZmxvYXQgc2NhbGUsIGNvbnN0IEZsb2F0U2l6ZSYgZikKLXsKLSAgICByZXR1cm4gRmxvYXRTaXpl
KGYud2lkdGgoKSAqIHNjYWxlLCBmLmhlaWdodCgpICogc2NhbGUpOwotfQotCi1jbGFzcyBRdWFk
cmF0aWMgewotICBwdWJsaWM6Ci0gICAgUXVhZHJhdGljKEZsb2F0UG9pbnQgYSwgRmxvYXRQb2lu
dCBiLCBGbG9hdFBvaW50IGMpIDoKLSAgICAgICAgbV9hKGEpLCBtX2IoYiksIG1fYyhjKQotICAg
IHsKLSAgICB9Ci0gICAgc3RhdGljIFF1YWRyYXRpYyBmcm9tQmV6aWVyKEZsb2F0UG9pbnQgcDAs
IEZsb2F0UG9pbnQgcDEsIEZsb2F0UG9pbnQgcDIpCi0gICAgewotICAgICAgICBGbG9hdFNpemUg
cDFzKHAxLngoKSwgcDEueSgpKTsKLSAgICAgICAgRmxvYXRTaXplIHAycyhwMi54KCksIHAyLnko
KSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgYiA9IC0yLjBmICogcDAgKyAyLjBmICogcDFzOwotICAg
ICAgICBGbG9hdFBvaW50IGMgPSAgICAgICAgIHAwIC0gMi4wZiAqIHAxcyArIHAyczsKLSAgICAg
ICAgcmV0dXJuIFF1YWRyYXRpYyhwMCwgYiwgYyk7Ci0gICAgfQotICAgIGlubGluZSBGbG9hdFBv
aW50IGV2YWx1YXRlKGZsb2F0IHQpCi0gICAgewotICAgICAgICByZXR1cm4gbV9hICsgdCAqICht
X2IgKyB0ICogbV9jKTsKLSAgICB9Ci0gICAgRmxvYXRQb2ludCBtX2EsIG1fYiwgbV9jLCBtX2Q7
Ci19OwotCi1jbGFzcyBDdWJpYyB7Ci0gIHB1YmxpYzoKLSAgICBDdWJpYyhGbG9hdFBvaW50IGEs
IEZsb2F0UG9pbnQgYiwgRmxvYXRQb2ludCBjLCBGbG9hdFBvaW50IGQpIDoKLSAgICAgICAgbV9h
KGEpLCBtX2IoYiksIG1fYyhjKSwgbV9kKGQpIAotICAgIHsKLSAgICB9Ci0gICAgc3RhdGljIEN1
YmljIGZyb21CZXppZXIoRmxvYXRQb2ludCBwMCwgRmxvYXRQb2ludCBwMSwgRmxvYXRQb2ludCBw
MiwgRmxvYXRQb2ludCBwMykKLSAgICB7Ci0gICAgICAgIEZsb2F0U2l6ZSBwMXMocDEueCgpLCBw
MS55KCkpOwotICAgICAgICBGbG9hdFNpemUgcDJzKHAyLngoKSwgcDIueSgpKTsKLSAgICAgICAg
RmxvYXRTaXplIHAzcyhwMy54KCksIHAzLnkoKSk7Ci0gICAgICAgIEZsb2F0UG9pbnQgYiA9IC0z
LjBmICogcDAgKyAzLjBmICogcDFzOwotICAgICAgICBGbG9hdFBvaW50IGMgPSAgMy4wZiAqIHAw
IC0gNi4wZiAqIHAxcyArIDMuMGYgKiBwMnM7Ci0gICAgICAgIEZsb2F0UG9pbnQgZCA9IC0xLjBm
ICogcDAgKyAzLjBmICogcDFzIC0gMy4wZiAqIHAycyArIHAzczsKLSAgICAgICAgcmV0dXJuIEN1
YmljKHAwLCBiLCBjLCBkKTsKLSAgICB9Ci0gICAgaW5saW5lIEZsb2F0UG9pbnQgZXZhbHVhdGUo
ZmxvYXQgdCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2EgKyB0ICogKG1fYiArIHQgKiAobV9j
ICsgdCAqIG1fZCkpOwotICAgIH0KLSAgICBGbG9hdFBvaW50IG1fYSwgbV9iLCBtX2MsIG1fZDsK
LX07Ci0KLUdyYXBoaWNzQ29udGV4dEdQVTo6R3JhcGhpY3NDb250ZXh0R1BVKFNoYXJlZEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBjb25z
dCBJbnRTaXplJiBzaXplKQotICAgIDogbV9zaXplKHNpemUpCi0gICAgLCBtX2NvbnRleHQoY29u
dGV4dCkKLSAgICAsIG1fZHJhd2luZ0J1ZmZlcihkcmF3aW5nQnVmZmVyKQotICAgICwgbV9zdGF0
ZSgwKQotICAgICwgbV9wYXRoSW5kZXhCdWZmZXIoMCkKLSAgICAsIG1fcGF0aFZlcnRleEJ1ZmZl
cigwKQotewotICAgIG1fZmxpcE1hdHJpeC50cmFuc2xhdGUoLTEuMGYsIDEuMGYpOwotICAgIG1f
ZmxpcE1hdHJpeC5zY2FsZSgyLjBmIC8gc2l6ZS53aWR0aCgpLCAtMi4wZiAvIHNpemUuaGVpZ2h0
KCkpOwotCi0gICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChTdGF0ZSgpKTsKLSAgICBtX3N0YXRlID0g
Jm1fc3RhdGVTdGFjay5sYXN0KCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dEdQVTo6fkdyYXBoaWNz
Q29udGV4dEdQVSgpCi17Ci0gICAgaWYgKG1fcGF0aEluZGV4QnVmZmVyKQotICAgICAgICBtX2Nv
bnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZUJ1ZmZlcihtX3BhdGhJbmRleEJ1ZmZl
cik7Ci0gICAgaWYgKG1fcGF0aFZlcnRleEJ1ZmZlcikKLSAgICAgICAgbV9jb250ZXh0LT5ncmFw
aGljc0NvbnRleHQzRCgpLT5kZWxldGVCdWZmZXIobV9wYXRoVmVydGV4QnVmZmVyKTsKLX0KLQot
dm9pZCBHcmFwaGljc0NvbnRleHRHUFU6OmJpbmRGcmFtZWJ1ZmZlcigpCi17Ci0gICAgbV9kcmF3
aW5nQnVmZmVyLT5iaW5kKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R1BVOjpjbGVhclJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIGJpbmRGcmFtZWJ1ZmZlcigpOwotICAg
IGlmIChtX3N0YXRlLT5tX2N0bS5pc0lkZW50aXR5KCkgJiYgIW1fc3RhdGUtPmNsaXBwaW5nRW5h
YmxlZCgpKSB7Ci0gICAgICAgIHNjaXNzb3JDbGVhcihyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2F2ZSgpOwot
ICAgICAgICBzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ2xlYXIpOwotICAgICAgICBm
aWxsUmVjdChyZWN0LCBDb2xvcihSR0JBMzIoMCkpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLSAg
ICAgICAgcmVzdG9yZSgpOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHUFU6OmFw
cGx5U3RhdGUoKQotewotICAgIGJpbmRGcmFtZWJ1ZmZlcigpOwotICAgIG1fY29udGV4dC0+YXBw
bHlDb21wb3NpdGVPcGVyYXRvcihtX3N0YXRlLT5tX2NvbXBvc2l0ZU9wKTsKLSAgICBhcHBseUNs
aXBwaW5nKG1fc3RhdGUtPmNsaXBwaW5nRW5hYmxlZCgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHUFU6OnNjaXNzb3JDbGVhcihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxv
YXQgaGVpZ2h0KQotewotICAgIGludCBpbnRYID0gc3RhdGljX2Nhc3Q8aW50Pih4ICsgMC41Zik7
Ci0gICAgaW50IGludFkgPSBzdGF0aWNfY2FzdDxpbnQ+KHkgKyAwLjVmKTsKLSAgICBpbnQgaW50
V2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KHggKyB3aWR0aCArIDAuNWYpIC0gaW50WDsKLSAgICBp
bnQgaW50SGVpZ2h0ID0gc3RhdGljX2Nhc3Q8aW50Pih5ICsgaGVpZ2h0ICsgMC41ZikgLSBpbnRZ
OwotICAgIG1fY29udGV4dC0+c2Npc3NvcihpbnRYLCBtX3NpemUuaGVpZ2h0KCkgLSBpbnRIZWln
aHQgLSBpbnRZLCBpbnRXaWR0aCwgaW50SGVpZ2h0KTsKLSAgICBtX2NvbnRleHQtPmVuYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyQ29s
b3IoQ29sb3IoUkdCQTMyKDApKSk7Ci0gICAgbV9jb250ZXh0LT5jbGVhcihHcmFwaGljc0NvbnRl
eHQzRDo6Q09MT1JfQlVGRkVSX0JJVCk7Ci0gICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNz
Q29udGV4dDNEOjpTQ0lTU09SX1RFU1QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6
ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBpZiAobV9zdGF0ZS0+c2hhZG93QWN0
aXZlKCkpIHsKLSAgICAgICAgYmVnaW5TaGFkb3dEcmF3KCk7Ci0gICAgICAgIGZpbGxQYXRoSW50
ZXJuYWwocGF0aCwgbV9zdGF0ZS0+bV9zaGFkb3dDb2xvcik7Ci0gICAgICAgIGVuZFNoYWRvd0Ry
YXcocGF0aC5ib3VuZGluZ1JlY3QoKSk7Ci0gICAgfQotCi0gICAgYXBwbHlTdGF0ZSgpOwotICAg
IGZpbGxQYXRoSW50ZXJuYWwocGF0aCwgbV9zdGF0ZS0+YXBwbHlBbHBoYShtX3N0YXRlLT5tX2Zp
bGxDb2xvcikpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6ZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSkKLXsKLSAgICBpZiAobV9zdGF0ZS0+c2hhZG93QWN0aXZlKCkpIHsKLSAgICAgICAgYmVnaW5T
aGFkb3dEcmF3KCk7Ci0gICAgICAgIGZpbGxSZWN0SW50ZXJuYWwocmVjdCwgbV9zdGF0ZS0+bV9z
aGFkb3dDb2xvcik7Ci0gICAgICAgIGVuZFNoYWRvd0RyYXcocmVjdCk7Ci0gICAgfQotCi0gICAg
YXBwbHlTdGF0ZSgpOwotICAgIGZpbGxSZWN0SW50ZXJuYWwocmVjdCwgY29sb3IpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQot
ewotICAgIGZpbGxSZWN0KHJlY3QsIG1fc3RhdGUtPmFwcGx5QWxwaGEobV9zdGF0ZS0+bV9maWxs
Q29sb3IpLCBDb2xvclNwYWNlRGV2aWNlUkdCKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
UFU6OmZpbGxSZWN0SW50ZXJuYWwoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IpCi17Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeChtX2ZsaXBNYXRyaXgpOwotICAg
IG1hdHJpeCAqPSBtX3N0YXRlLT5tX2N0bTsKLSAgICBtYXRyaXgudHJhbnNsYXRlKHJlY3QueCgp
LCByZWN0LnkoKSk7Ci0gICAgbWF0cml4LnNjYWxlKHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQo
KSk7Ci0KLSAgICBtX2NvbnRleHQtPnVzZVF1YWRWZXJ0aWNlcygpOwotICAgIG1fY29udGV4dC0+
dXNlRmlsbFNvbGlkUHJvZ3JhbShtYXRyaXgsIGNvbG9yKTsKLSAgICBtX2NvbnRleHQtPmRyYXdB
cnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX1NUUklQLCAwLCA0KTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHUFU6OnNldEZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSkKLXsKLSAgICBtX3N0YXRlLT5tX2ZpbGxDb2xvciA9IGNvbG9y
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6c2V0QWxwaGEoZmxvYXQgYWxwaGEpCi17
Ci0gICAgbV9zdGF0ZS0+bV9hbHBoYSA9IGFscGhhOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdQVTo6c2V0U2hhZG93Q29sb3IoY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNwYWNlKQotewot
ICAgIG1fc3RhdGUtPm1fc2hhZG93Q29sb3IgPSBjb2xvcjsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHUFU6OnNldFNoYWRvd09mZnNldChjb25zdCBGbG9hdFNpemUmIG9mZnNldCkKLXsKLSAg
ICBtX3N0YXRlLT5tX3NoYWRvd09mZnNldCA9IG9mZnNldDsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHUFU6OnNldFNoYWRvd0JsdXIoZmxvYXQgc2hhZG93Qmx1cikKLXsKLSAgICBtX3N0YXRl
LT5tX3NoYWRvd0JsdXIgPSBzaGFkb3dCbHVyOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQ
VTo6c2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMoYm9vbCBzaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cykKLXsKLSAgICBtX3N0YXRlLT5tX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zID0gc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXM7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R1BVOjp0cmFuc2xhdGUo
ZmxvYXQgeCwgZmxvYXQgeSkKLXsKLSAgICBtX3N0YXRlLT5tX2N0bS50cmFuc2xhdGUoeCwgeSk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R1BVOjpyb3RhdGUoZmxvYXQgYW5nbGVJblJhZGlh
bnMpCi17Ci0gICAgbV9zdGF0ZS0+bV9jdG0ucm90YXRlKGFuZ2xlSW5SYWRpYW5zICogKDE4MC4w
ZiAvIE1fUEkpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHUFU6OnNjYWxlKGNvbnN0IEZs
b2F0U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX3N0YXRlLT5tX2N0bS5zY2FsZShzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6Y29uY2F0Q1RN
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lKQotewotICAgIG1fc3RhdGUtPm1fY3RtICo9
IGFmZmluZTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHUFU6OnNldENUTShjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIGFmZmluZSkKLXsKLSAgICBtX3N0YXRlLT5tX2N0bSA9IGFmZmluZTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHUFU6OmNsaXBQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17
Ci0gICAgYmluZEZyYW1lYnVmZmVyKCk7Ci0gICAgY2hlY2tHTEVycm9yKCJiaW5kRnJhbWVidWZm
ZXIiKTsKLSAgICBiZWdpblN0ZW5jaWxEcmF3KEdyYXBoaWNzQ29udGV4dDNEOjpJTkNSKTsKLSAg
ICAvLyBSZWQgaXMgdXNlZCBzbyB3ZSBjYW4gc2VlIGl0IGlmIGl0IGVuZHMgdXAgaW4gdGhlIGNv
bG9yIGJ1ZmZlci4KLSAgICBDb2xvciByZWQoMjU1LCAwLCAwLCAyNTUpOwotICAgIGZpbGxQYXRo
SW50ZXJuYWwocGF0aCwgcmVkKTsKLSAgICBtX3N0YXRlLT5tX2NsaXBwaW5nUGF0aHMuYXBwZW5k
KFBhdGhBbmRUcmFuc2Zvcm0ocGF0aCwgbV9zdGF0ZS0+bV9jdG0pKTsKLSAgICBtX3N0YXRlLT5t
X251bUNsaXBwaW5nUGF0aHMrKzsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHUFU6OmNsaXBP
dXQoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBBU1NFUlQoISJjbGlwT3V0IGlzIHVuc3VwcG9y
dGVkIGluIEdyYXBoaWNzQ29udGV4dEdQVS5cbiIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdQVTo6c2F2ZSgpCi17Ci0gICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChTdGF0ZShtX3N0YXRlU3Rh
Y2subGFzdCgpKSk7Ci0gICAgbV9zdGF0ZSA9ICZtX3N0YXRlU3RhY2subGFzdCgpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6cmVzdG9yZSgpCi17Ci0gICAgQVNTRVJUKCFtX3N0YXRl
U3RhY2suaXNFbXB0eSgpKTsKLSAgICBjb25zdCBWZWN0b3I8UGF0aEFuZFRyYW5zZm9ybT4mIGNs
aXBwaW5nUGF0aHMgPSBtX3N0YXRlLT5tX2NsaXBwaW5nUGF0aHM7Ci0gICAgaWYgKCFjbGlwcGlu
Z1BhdGhzLmlzRW1wdHkoKSkgewotICAgICAgICBiZWdpblN0ZW5jaWxEcmF3KEdyYXBoaWNzQ29u
dGV4dDNEOjpERUNSKTsKLSAgICAgICAgV1RGOjpWZWN0b3I8UGF0aEFuZFRyYW5zZm9ybT46OmNv
bnN0X2l0ZXJhdG9yIHBhdGhJdGVyOwotICAgICAgICBmb3IgKHBhdGhJdGVyID0gY2xpcHBpbmdQ
YXRocy5iZWdpbigpOyBwYXRoSXRlciA8IGNsaXBwaW5nUGF0aHMuZW5kKCk7ICsrcGF0aEl0ZXIp
IHsKLSAgICAgICAgICAgIG1fc3RhdGUtPm1fY3RtID0gcGF0aEl0ZXItPnRyYW5zZm9ybTsKLSAg
ICAgICAgICAgIC8vIFJlZCBpcyB1c2VkIHNvIHdlIGNhbiBzZWUgaXQgaWYgaXQgZW5kcyB1cCBp
biB0aGUgY29sb3IgYnVmZmVyLgotICAgICAgICAgICAgQ29sb3IgcmVkKDI1NSwgMCwgMCwgMjU1
KTsKLSAgICAgICAgICAgIGZpbGxQYXRoSW50ZXJuYWwocGF0aEl0ZXItPnBhdGgsIHJlZCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgbV9zdGF0ZVN0YWNrLnJlbW92ZUxhc3QoKTsKLSAgICBtX3N0
YXRlID0gJm1fc3RhdGVTdGFjay5sYXN0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R1BV
OjpkcmF3VGV4dHVyZWRSZWN0KHVuc2lnbmVkIHRleHR1cmUsIGNvbnN0IEludFNpemUmIHRleHR1
cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCkK
LXsKLSAgICBiaW5kRnJhbWVidWZmZXIoKTsKLSAgICBtX2NvbnRleHQtPmFwcGx5Q29tcG9zaXRl
T3BlcmF0b3IoY29tcG9zaXRlT3ApOwotICAgIGFwcGx5Q2xpcHBpbmcoZmFsc2UpOwotCi0gICAg
bV9jb250ZXh0LT5zZXRBY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7
Ci0KLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCB0ZXh0dXJlKTsKLQotICAgIGRyYXdUZXh0dXJlZFF1YWQodGV4dHVyZVNpemUsIHNyY1Jl
Y3QsIGRzdFJlY3QsIG1fc3RhdGUtPm1fY3RtLCBtX3N0YXRlLT5tX2FscGhhKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHUFU6OmRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSogdGV4dHVyZSwg
Y29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9y
U3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCi17Ci0gICAg
ZHJhd1RleHR1cmVkUmVjdCh0ZXh0dXJlLCBzcmNSZWN0LCBkc3RSZWN0LCBtX3N0YXRlLT5tX2N0
bSwgbV9zdGF0ZS0+bV9hbHBoYSwgY29sb3JTcGFjZSwgY29tcG9zaXRlT3AsIG1fc3RhdGUtPmNs
aXBwaW5nRW5hYmxlZCgpKTsKLX0KLQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6ZHJhd1Rl
eHR1cmVkUmVjdChUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0s
IGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNv
bXBvc2l0ZU9wLCBib29sIGNsaXApCi17Ci0gICAgYmluZEZyYW1lYnVmZmVyKCk7Ci0gICAgbV9j
b250ZXh0LT5hcHBseUNvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wKTsKLSAgICBhcHBseUNs
aXBwaW5nKGNsaXApOwotICAgIGNvbnN0IFRpbGluZ0RhdGEmIHRpbGVzID0gdGV4dHVyZS0+dGls
ZXMoKTsKLSAgICBJbnRSZWN0IHRpbGVJZHhSZWN0ID0gdGlsZXMub3ZlcmxhcHBlZFRpbGVJbmRp
Y2VzKHNyY1JlY3QpOwotCi0gICAgbV9jb250ZXh0LT5zZXRBY3RpdmVUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFMCk7Ci0KLSAgICBmb3IgKGludCB5ID0gdGlsZUlkeFJlY3QueSgp
OyB5IDw9IHRpbGVJZHhSZWN0Lm1heFkoKTsgeSsrKSB7Ci0gICAgICAgIGZvciAoaW50IHggPSB0
aWxlSWR4UmVjdC54KCk7IHggPD0gdGlsZUlkeFJlY3QubWF4WCgpOyB4KyspCi0gICAgICAgICAg
ICBkcmF3VGV4dHVyZWRSZWN0VGlsZSh0ZXh0dXJlLCB0aWxlcy50aWxlSW5kZXgoeCwgeSksIHNy
Y1JlY3QsIGRzdFJlY3QsIHRyYW5zZm9ybSwgYWxwaGEpOwotICAgIH0KLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHUFU6OmRyYXdUZXh0dXJlZFJlY3RUaWxlKFRleHR1cmUqIHRleHR1cmUsIGlu
dCB0aWxlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGZsb2F0IGFscGhhKQotewotICAg
IGlmIChkc3RSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY29uc3QgVGls
aW5nRGF0YSYgdGlsZXMgPSB0ZXh0dXJlLT50aWxlcygpOwotCi0gICAgdGV4dHVyZS0+YmluZFRp
bGUodGlsZSk7Ci0KLSAgICBGbG9hdFJlY3Qgc3JjUmVjdENsaXBwZWRJblRpbGVTcGFjZTsKLSAg
ICBGbG9hdFJlY3QgZHN0UmVjdEludGVyc2VjdGVkOwotICAgIHRpbGVzLmludGVyc2VjdERyYXdR
dWFkKHNyY1JlY3QsIGRzdFJlY3QsIHRpbGUsICZzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlLCAm
ZHN0UmVjdEludGVyc2VjdGVkKTsKLQotICAgIEludFJlY3QgdGlsZUJvdW5kc1dpdGhCb3JkZXIg
PSB0aWxlcy50aWxlQm91bmRzV2l0aEJvcmRlcih0aWxlKTsKLQotICAgIGRyYXdUZXh0dXJlZFF1
YWQodGlsZUJvdW5kc1dpdGhCb3JkZXIuc2l6ZSgpLCBzcmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNl
LCBkc3RSZWN0SW50ZXJzZWN0ZWQsIHRyYW5zZm9ybSwgYWxwaGEpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdQVTo6Y29udm9sdmVSZWN0KHVuc2lnbmVkIHRleHR1cmUsIGNvbnN0IEludFNp
emUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVj
dCYgZHN0UmVjdCwgZmxvYXQgaW1hZ2VJbmNyZW1lbnRbMl0sIGNvbnN0IGZsb2F0KiBrZXJuZWws
IGludCBrZXJuZWxXaWR0aCkKLXsKLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFXzJELCB0ZXh0dXJlKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFt
ZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIG1f
Y29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBf
VE9fRURHRSk7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFw
aGljc0NvbnRleHQzRDo6TkVBUkVTVCk7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9N
QUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVCk7Ci0KLSAgICBBZmZpbmVUcmFu
c2Zvcm0gbWF0cml4KG1fZmxpcE1hdHJpeCk7Ci0gICAgbWF0cml4LnRyYW5zbGF0ZShkc3RSZWN0
LngoKSwgZHN0UmVjdC55KCkpOwotICAgIG1hdHJpeC5zY2FsZShkc3RSZWN0LndpZHRoKCksIGRz
dFJlY3QuaGVpZ2h0KCkpOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRleE1hdHJpeDsKLSAgICB0
ZXhNYXRyaXguc2NhbGUoMS4wZiAvIHRleHR1cmVTaXplLndpZHRoKCksIDEuMGYgLyB0ZXh0dXJl
U2l6ZS5oZWlnaHQoKSk7Ci0gICAgdGV4TWF0cml4LnRyYW5zbGF0ZShzcmNSZWN0LngoKSwgc3Jj
UmVjdC55KCkpOwotICAgIHRleE1hdHJpeC5zY2FsZShzcmNSZWN0LndpZHRoKCksIHNyY1JlY3Qu
aGVpZ2h0KCkpOwotCi0gICAgbV9jb250ZXh0LT51c2VRdWFkVmVydGljZXMoKTsKLSAgICBtX2Nv
bnRleHQtPnVzZUNvbnZvbHV0aW9uUHJvZ3JhbShtYXRyaXgsIHRleE1hdHJpeCwga2VybmVsLCBr
ZXJuZWxXaWR0aCwgaW1hZ2VJbmNyZW1lbnQpOwotICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhH
cmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfU1RSSVAsIDAsIDQpOwotICAgIGNoZWNrR0xFcnJv
cigiZ2xEcmF3QXJyYXlzIik7Ci19Ci0KLXN0YXRpYyBmbG9hdCBnYXVzcyhmbG9hdCB4LCBmbG9h
dCBzaWdtYSkKLXsKLSAgICByZXR1cm4gZXhwKC0gKHggKiB4KSAvICgyLjBmICogc2lnbWEgKiBz
aWdtYSkpOwotfQotCi1zdGF0aWMgdm9pZCBidWlsZEtlcm5lbChmbG9hdCBzaWdtYSwgZmxvYXQq
IGtlcm5lbCwgaW50IGtlcm5lbFdpZHRoKQotewotICAgIGZsb2F0IGhhbGZXaWR0aCA9IChrZXJu
ZWxXaWR0aCAtIDEuMGYpIC8gMi4wZjsKLSAgICBmbG9hdCBzdW0gPSAwLjBmOwotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwga2VybmVsV2lkdGg7ICsraSkgewotICAgICAgICBrZXJuZWxbaV0gPSBn
YXVzcyhpIC0gaGFsZldpZHRoLCBzaWdtYSk7Ci0gICAgICAgIHN1bSArPSBrZXJuZWxbaV07Ci0g
ICAgfQotICAgIC8vIE5vcm1hbGl6ZSB0aGUga2VybmVsCi0gICAgZmxvYXQgc2NhbGUgPSAxLjBm
IC8gc3VtOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwga2VybmVsV2lkdGg7ICsraSkKLSAgICAg
ICAga2VybmVsW2ldICo9IHNjYWxlOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6ZHJh
d1RleHR1cmVkUXVhZChjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtLCBmbG9hdCBhbHBoYSkKLXsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4
KG1fZmxpcE1hdHJpeCk7Ci0gICAgbWF0cml4ICo9IHRyYW5zZm9ybTsKLSAgICBtYXRyaXgudHJh
bnNsYXRlKGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7Ci0gICAgbWF0cml4LnNjYWxlKGRzdFJl
Y3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdGV4
TWF0cml4OwotICAgIHRleE1hdHJpeC5zY2FsZSgxLjBmIC8gdGV4dHVyZVNpemUud2lkdGgoKSwg
MS4wZiAvIHRleHR1cmVTaXplLmhlaWdodCgpKTsKLSAgICB0ZXhNYXRyaXgudHJhbnNsYXRlKHNy
Y1JlY3QueCgpLCBzcmNSZWN0LnkoKSk7Ci0gICAgdGV4TWF0cml4LnNjYWxlKHNyY1JlY3Qud2lk
dGgoKSwgc3JjUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBtX2NvbnRleHQtPnVzZVF1YWRWZXJ0aWNl
cygpOwotICAgIG1fY29udGV4dC0+dXNlVGV4dHVyZVByb2dyYW0obWF0cml4LCB0ZXhNYXRyaXgs
IGFscGhhKTsKLSAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRS
SUFOR0xFX1NUUklQLCAwLCA0KTsKLSAgICBjaGVja0dMRXJyb3IoImdsRHJhd0FycmF5cyIpOwot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6ZHJhd1RleHR1cmVkUXVhZE1pdGNoZWxsKGNv
bnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGZs
b2F0IGFscGhhKQotewotICAgIHN0YXRpYyBjb25zdCBmbG9hdCBtaXRjaGVsbENvZWZmaWNpZW50
c1sxNl0gPSB7Ci0gICAgICAgICAwLjBmIC8gMTguMGYsICAgMS4wZiAvIDE4LjBmLCAgMTYuMGYg
LyAxOC4wZiwgICAxLjBmIC8gMTguMGYsCi0gICAgICAgICAwLjBmIC8gMTguMGYsICAgOS4wZiAv
IDE4LjBmLCAgIDAuMGYgLyAxOC4wZiwgIC05LjBmIC8gMTguMGYsCi0gICAgICAgIC02LjBmIC8g
MTguMGYsICAyNy4wZiAvIDE4LjBmLCAtMzYuMGYgLyAxOC4wZiwgIDE1LjBmIC8gMTguMGYsCi0g
ICAgICAgICA3LjBmIC8gMTguMGYsIC0yMS4wZiAvIDE4LjBmLCAgMjEuMGYgLyAxOC4wZiwgIC03
LjBmIC8gMTguMGYsCi0gICAgfTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXgobV9mbGlw
TWF0cml4KTsKLSAgICBtYXRyaXggKj0gdHJhbnNmb3JtOwotICAgIG1hdHJpeC50cmFuc2xhdGUo
ZHN0UmVjdC54KCksIGRzdFJlY3QueSgpKTsKLSAgICBtYXRyaXguc2NhbGUoZHN0UmVjdC53aWR0
aCgpLCBkc3RSZWN0LmhlaWdodCgpKTsKLQotICAgIGZsb2F0IGltYWdlSW5jcmVtZW50WzJdID0g
eyAxLjBmIC8gdGV4dHVyZVNpemUud2lkdGgoKSwgMS4wZiAvIHRleHR1cmVTaXplLmhlaWdodCgp
IH07Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gdGV4TWF0cml4OwotICAgIHRleE1hdHJpeC5zY2Fs
ZShpbWFnZUluY3JlbWVudFswXSwgaW1hZ2VJbmNyZW1lbnRbMV0pOwotICAgIHRleE1hdHJpeC50
cmFuc2xhdGUoc3JjUmVjdC54KCksIHNyY1JlY3QueSgpKTsKLSAgICB0ZXhNYXRyaXguc2NhbGUo
c3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpKTsKLQotICAgIG1fY29udGV4dC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpOwotICAg
IG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6
Ok5FQVJFU1QpOwotCi0gICAgbV9jb250ZXh0LT51c2VRdWFkVmVydGljZXMoKTsKLSAgICBtX2Nv
bnRleHQtPnVzZUJpY3ViaWNQcm9ncmFtKG1hdHJpeCwgdGV4TWF0cml4LCBtaXRjaGVsbENvZWZm
aWNpZW50cywgaW1hZ2VJbmNyZW1lbnQsIGFscGhhKTsKLSAgICBtX2NvbnRleHQtPmRyYXdBcnJh
eXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX1NUUklQLCAwLCA0KTsKLSAgICBjaGVja0dM
RXJyb3IoImdsRHJhd0FycmF5cyIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9wZXJhdG9yIG9wKQotewotICAgIG1fc3RhdGUt
Pm1fY29tcG9zaXRlT3AgPSBvcDsKLX0KLQotVGV4dHVyZSogR3JhcGhpY3NDb250ZXh0R1BVOjpj
cmVhdGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRyIHB0ciwgVGV4dHVyZTo6Rm9ybWF0IGZvcm1hdCwg
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIHJldHVybiBtX2NvbnRleHQtPmNyZWF0ZVRl
eHR1cmUocHRyLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotfQotCi1UZXh0dXJlKiBHcmFwaGlj
c0NvbnRleHRHUFU6OmdldFRleHR1cmUoTmF0aXZlSW1hZ2VQdHIgcHRyKQotewotICAgIHJldHVy
biBtX2NvbnRleHQtPmdldFRleHR1cmUocHRyKTsKLX0KLQotI2lmIFVTRShTS0lBKQotLy8gVGhp
cyBpcyBhY3R1YWxseSBjcm9zcy1wbGF0Zm9ybSBjb2RlLCBidXQgc2luY2UgaXRzIG9ubHkgY2Fs
bGVyIGlzIGluc2lkZSBhCi0vLyBVU0UoU0tJQSksIGl0IHdpbGwgY2F1c2UgYSB3YXJuaW5nLWFz
LWVycm9yIG9uIENocm9tZS9NYWMuCi1zdGF0aWMgdm9pZCBpbnRlcnBvbGF0ZVF1YWRyYXRpYyhG
bG9hdFBvaW50VmVjdG9yKiB2ZXJ0aWNlcywgY29uc3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZs
b2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50JiBwMikKLXsKLSAgICBmbG9hdCB0SW5jcmVt
ZW50ID0gMS4wZiAvIHBhdGhUZXNzZWxhdGlvbiwgdCA9IHRJbmNyZW1lbnQ7Ci0gICAgUXVhZHJh
dGljIGMgPSBRdWFkcmF0aWM6OmZyb21CZXppZXIocDAsIHAxLCBwMik7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBwYXRoVGVzc2VsYXRpb247ICsraSwgdCArPSB0SW5jcmVtZW50KQotICAgICAg
ICB2ZXJ0aWNlcy0+YXBwZW5kKGMuZXZhbHVhdGUodCkpOwotfQotCi1zdGF0aWMgdm9pZCBpbnRl
cnBvbGF0ZUN1YmljKEZsb2F0UG9pbnRWZWN0b3IqIHZlcnRpY2VzLCBjb25zdCBGbG9hdFBvaW50
JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9pbnQmIHAyLCBjb25zdCBG
bG9hdFBvaW50JiBwMykKLXsKLSAgICBmbG9hdCB0SW5jcmVtZW50ID0gMS4wZiAvIHBhdGhUZXNz
ZWxhdGlvbiwgdCA9IHRJbmNyZW1lbnQ7Ci0gICAgQ3ViaWMgYyA9IEN1YmljOjpmcm9tQmV6aWVy
KHAwLCBwMSwgcDIsIHAzKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhdGhUZXNzZWxhdGlv
bjsgKytpLCB0ICs9IHRJbmNyZW1lbnQpCi0gICAgICAgIHZlcnRpY2VzLT5hcHBlbmQoYy5ldmFs
dWF0ZSh0KSk7Ci19Ci0jZW5kaWYKLQotc3RydWN0IFBvbHlnb25EYXRhIHsKLSAgICBQb2x5Z29u
RGF0YShGbG9hdFBvaW50VmVjdG9yKiB2ZXJ0aWNlcywgV1RGOjpWZWN0b3I8c2hvcnQ+KiBpbmRp
Y2VzKQotICAgICAgOiBtX3ZlcnRpY2VzKHZlcnRpY2VzKQotICAgICAgLCBtX2luZGljZXMoaW5k
aWNlcykKLSAgICB7Ci0gICAgfQotICAgIEZsb2F0UG9pbnRWZWN0b3IqIG1fdmVydGljZXM7Ci0g
ICAgV1RGOjpWZWN0b3I8c2hvcnQ+KiBtX2luZGljZXM7Ci19OwotCi1zdGF0aWMgdm9pZCBiZWdp
bkRhdGEoR0xlbnVtIHR5cGUsIHZvaWQqIGRhdGEpCi17Ci0gICAgQVNTRVJUKHR5cGUgPT0gR0xf
VFJJQU5HTEVTKTsKLX0KLQotc3RhdGljIHZvaWQgZWRnZUZsYWdEYXRhKEdMYm9vbGVhbiBmbGFn
LCB2b2lkKiBkYXRhKQotewotfQotCi1zdGF0aWMgdm9pZCB2ZXJ0ZXhEYXRhKHZvaWQqIHZlcnRl
eERhdGEsIHZvaWQqIGRhdGEpCi17Ci0gICAgc3RhdGljX2Nhc3Q8UG9seWdvbkRhdGEqPihkYXRh
KS0+bV9pbmRpY2VzLT5hcHBlbmQocmVpbnRlcnByZXRfY2FzdDxsb25nPih2ZXJ0ZXhEYXRhKSk7
Ci19Ci0KLXN0YXRpYyB2b2lkIGVuZERhdGEodm9pZCogZGF0YSkKLXsKLX0KLQotc3RhdGljIHZv
aWQgY29tYmluZURhdGEoR0xkb3VibGUgY29vcmRzWzNdLCB2b2lkKiB2ZXJ0ZXhEYXRhWzRdLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xmbG9hdCB3ZWlnaHRbNF0sIHZvaWQg
KipvdXREYXRhLCB2b2lkKiBkYXRhKQotewotICAgIFBvbHlnb25EYXRhKiBwb2x5Z29uRGF0YSA9
IHN0YXRpY19jYXN0PFBvbHlnb25EYXRhKj4oZGF0YSk7Ci0gICAgaW50IGluZGV4ID0gcG9seWdv
bkRhdGEtPm1fdmVydGljZXMtPnNpemUoKTsKLSAgICBwb2x5Z29uRGF0YS0+bV92ZXJ0aWNlcy0+
YXBwZW5kKEZsb2F0UG9pbnQoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvb3Jkc1swXSksIHN0YXRpY19j
YXN0PGZsb2F0Pihjb29yZHNbMV0pKSk7Ci0gICAgKm91dERhdGEgPSByZWludGVycHJldF9jYXN0
PHZvaWQqPihpbmRleCk7Ci19Ci0KLXR5cGVkZWYgdm9pZCAoKlRFU1NDQikoKTsKLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHUFU6OnRlc3NlbGF0ZUFuZEZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgs
IGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBpZiAoIW1fcGF0aFZlcnRleEJ1ZmZlcikKLSAg
ICAgICAgbV9wYXRoVmVydGV4QnVmZmVyID0gbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgp
LT5jcmVhdGVCdWZmZXIoKTsKLSAgICBpZiAoIW1fcGF0aEluZGV4QnVmZmVyKQotICAgICAgICBt
X3BhdGhJbmRleEJ1ZmZlciA9IG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRl
QnVmZmVyKCk7Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4KG1fZmxpcE1hdHJpeCk7Ci0g
ICAgbWF0cml4ICo9IG1fc3RhdGUtPm1fY3RtOwotCi0gICAgRmxvYXRQb2ludFZlY3RvciBpblZl
cnRpY2VzOwotICAgIFdURjo6VmVjdG9yPHNpemVfdD4gY29udG91cnM7Ci0jaWYgVVNFKFNLSUEp
Ci0gICAgY29uc3QgU2tQYXRoKiBza1BhdGggPSBwYXRoLnBsYXRmb3JtUGF0aCgpOwotICAgIFNr
UG9pbnQgcHRzWzRdOwotICAgIFNrUGF0aDo6SXRlciBpdGVyKCpza1BhdGgsIHRydWUpOwotICAg
IFNrUGF0aDo6VmVyYiB2ZXJiOwotICAgIHdoaWxlICgodmVyYiA9IGl0ZXIubmV4dChwdHMpKSAh
PSBTa1BhdGg6OmtEb25lX1ZlcmIpIHsKLSAgICAgICAgc3dpdGNoICh2ZXJiKSB7Ci0gICAgICAg
IGNhc2UgU2tQYXRoOjprTW92ZV9WZXJiOgotICAgICAgICAgICAgaW5WZXJ0aWNlcy5hcHBlbmQo
cHRzWzBdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNrUGF0aDo6a0xpbmVf
VmVyYjoKLSAgICAgICAgICAgIGluVmVydGljZXMuYXBwZW5kKHB0c1sxXSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBTa1BhdGg6OmtRdWFkX1ZlcmI6Ci0gICAgICAgICAgICBp
bnRlcnBvbGF0ZVF1YWRyYXRpYygmaW5WZXJ0aWNlcywgcHRzWzBdLCBwdHNbMV0sIHB0c1syXSk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTa1BhdGg6OmtDdWJpY19WZXJiOgot
ICAgICAgICAgICAgaW50ZXJwb2xhdGVDdWJpYygmaW5WZXJ0aWNlcywgcHRzWzBdLCBwdHNbMV0s
IHB0c1syXSwgcHRzWzNdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNrUGF0
aDo6a0Nsb3NlX1ZlcmI6Ci0gICAgICAgICAgICBjb250b3Vycy5hcHBlbmQoaW5WZXJ0aWNlcy5z
aXplKCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2tQYXRoOjprRG9uZV9W
ZXJiOgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0jZWxzZQotICAgIEFT
U0VSVCghIlBhdGggZXh0cmFjdGlvbiBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybS4i
KTsKLSNlbmRpZgotCi0gICAgaWYgKGNvbnRvdXJzLnNpemUoKSA9PSAxICYmIExvb3BCbGlubk1h
dGhVdGlsczo6aXNDb252ZXgoaW5WZXJ0aWNlcy5iZWdpbigpLCBpblZlcnRpY2VzLnNpemUoKSkp
IHsKLSAgICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5iaW5kQnVmZmVyKEdy
YXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fcGF0aFZlcnRleEJ1ZmZlcik7Ci0gICAg
ICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+YnVmZmVyRGF0YShHcmFwaGljc0Nv
bnRleHQzRDo6QVJSQVlfQlVGRkVSLCBpblZlcnRpY2VzLnNpemUoKSAqIDIgKiBzaXplb2YoZmxv
YXQpLCBpblZlcnRpY2VzLmRhdGEoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVBTV9EUkFXKTsK
LSAgICAgICAgbV9jb250ZXh0LT51c2VGaWxsU29saWRQcm9ncmFtKG1hdHJpeCwgY29sb3IpOwot
ICAgICAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmRyYXdBcnJheXMoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgaW5WZXJ0aWNlcy5zaXplKCkpOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgT3duQXJyYXlQdHI8ZG91YmxlPiBpblZlcnRpY2VzRG91
YmxlID0gYWRvcHRBcnJheVB0cihuZXcgZG91YmxlW2luVmVydGljZXMuc2l6ZSgpICogM10pOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5WZXJ0aWNlcy5zaXplKCk7ICsraSkgewotICAg
ICAgICBpblZlcnRpY2VzRG91YmxlW2kgKiAzICAgIF0gPSBpblZlcnRpY2VzW2ldLngoKTsKLSAg
ICAgICAgaW5WZXJ0aWNlc0RvdWJsZVtpICogMyArIDFdID0gaW5WZXJ0aWNlc1tpXS55KCk7Ci0g
ICAgICAgIGluVmVydGljZXNEb3VibGVbaSAqIDMgKyAyXSA9IDEuMDsKLSAgICB9Ci0KLSAgICBH
TFV0ZXNzZWxhdG9yKiB0ZXNzID0gaW50ZXJuYWxfZ2x1TmV3VGVzcygpOwotICAgIGludGVybmFs
X2dsdVRlc3NQcm9wZXJ0eSh0ZXNzLCBHTFVfVEVTU19XSU5ESU5HX1JVTEUsIEdMVV9URVNTX1dJ
TkRJTkdfTk9OWkVSTyk7Ci0gICAgaW50ZXJuYWxfZ2x1VGVzc0NhbGxiYWNrKHRlc3MsIEdMVV9U
RVNTX0JFR0lOX0RBVEEsIChURVNTQ0IpICZiZWdpbkRhdGEpOwotICAgIGludGVybmFsX2dsdVRl
c3NDYWxsYmFjayh0ZXNzLCBHTFVfVEVTU19WRVJURVhfREFUQSwgKFRFU1NDQikgJnZlcnRleERh
dGEpOwotICAgIGludGVybmFsX2dsdVRlc3NDYWxsYmFjayh0ZXNzLCBHTFVfVEVTU19FTkRfREFU
QSwgKFRFU1NDQikgJmVuZERhdGEpOwotICAgIGludGVybmFsX2dsdVRlc3NDYWxsYmFjayh0ZXNz
LCBHTFVfVEVTU19FREdFX0ZMQUdfREFUQSwgKFRFU1NDQikgJmVkZ2VGbGFnRGF0YSk7Ci0gICAg
aW50ZXJuYWxfZ2x1VGVzc0NhbGxiYWNrKHRlc3MsIEdMVV9URVNTX0NPTUJJTkVfREFUQSwgKFRF
U1NDQikgJmNvbWJpbmVEYXRhKTsKLSAgICBXVEY6OlZlY3RvcjxzaG9ydD4gaW5kaWNlczsKLSAg
ICBGbG9hdFBvaW50VmVjdG9yIHZlcnRpY2VzOwotICAgIHZlcnRpY2VzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkoaW5WZXJ0aWNlcy5zaXplKCkpOwotICAgIFBvbHlnb25EYXRhIGRhdGEoJnZlcnRp
Y2VzLCAmaW5kaWNlcyk7Ci0gICAgaW50ZXJuYWxfZ2x1VGVzc0JlZ2luUG9seWdvbih0ZXNzLCAm
ZGF0YSk7Ci0gICAgV1RGOjpWZWN0b3I8c2l6ZV90Pjo6Y29uc3RfaXRlcmF0b3IgY29udG91cjsK
LSAgICBzaXplX3QgaSA9IDA7Ci0gICAgZm9yIChjb250b3VyID0gY29udG91cnMuYmVnaW4oKTsg
Y29udG91ciAhPSBjb250b3Vycy5lbmQoKTsgKytjb250b3VyKSB7Ci0gICAgICAgIGludGVybmFs
X2dsdVRlc3NCZWdpbkNvbnRvdXIodGVzcyk7Ci0gICAgICAgIGZvciAoOyBpIDwgKmNvbnRvdXI7
ICsraSkgewotICAgICAgICAgICAgZG91YmxlKiBpblZlcnRleCA9ICZpblZlcnRpY2VzRG91Ymxl
W2kgKiAzXTsKLSAgICAgICAgICAgIHZlcnRpY2VzLmFwcGVuZChGbG9hdFBvaW50KGluVmVydGV4
WzBdLCBpblZlcnRleFsxXSkpOwotICAgICAgICAgICAgaW50ZXJuYWxfZ2x1VGVzc1ZlcnRleCh0
ZXNzLCBpblZlcnRleCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oaSkpOwotICAgICAgICB9Ci0g
ICAgICAgIGludGVybmFsX2dsdVRlc3NFbmRDb250b3VyKHRlc3MpOwotICAgIH0KLSAgICBpbnRl
cm5hbF9nbHVUZXNzRW5kUG9seWdvbih0ZXNzKTsKLSAgICBpbnRlcm5hbF9nbHVEZWxldGVUZXNz
KHRlc3MpOwotCi0gICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5iaW5kQnVmZmVy
KEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fcGF0aFZlcnRleEJ1ZmZlcik7Ci0g
ICAgY2hlY2tHTEVycm9yKCJjcmVhdGVWZXJ0ZXhCdWZmZXJGcm9tUGF0aCwgYmluZEJ1ZmZlciBB
UlJBWV9CVUZGRVIiKTsKLSAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmJ1ZmZl
ckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgdmVydGljZXMuc2l6ZSgpICog
MiAqIHNpemVvZihmbG9hdCksIHZlcnRpY2VzLmRhdGEoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlNU
UkVBTV9EUkFXKTsKLSAgICBjaGVja0dMRXJyb3IoImNyZWF0ZVZlcnRleEJ1ZmZlckZyb21QYXRo
LCBidWZmZXJEYXRhIEFSUkFZX0JVRkZFUiIpOwotCi0gICAgbV9jb250ZXh0LT5ncmFwaGljc0Nv
bnRleHQzRCgpLT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JV
RkZFUiwgbV9wYXRoSW5kZXhCdWZmZXIpOwotICAgIGNoZWNrR0xFcnJvcigiY3JlYXRlVmVydGV4
QnVmZmVyRnJvbVBhdGgsIGJpbmRCdWZmZXIgRUxFTUVOVF9BUlJBWV9CVUZGRVIiKTsKLSAgICBt
X2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0
M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBpbmRpY2VzLnNpemUoKSAqIHNpemVvZihzaG9ydCks
IGluZGljZXMuZGF0YSgpLCBHcmFwaGljc0NvbnRleHQzRDo6U1RSRUFNX0RSQVcpOwotICAgIGNo
ZWNrR0xFcnJvcigiY3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgsIGJ1ZmZlckRhdGEgRUxFTUVO
VF9BUlJBWV9CVUZGRVIiKTsKLQotICAgIG1fY29udGV4dC0+dXNlRmlsbFNvbGlkUHJvZ3JhbSht
YXRyaXgsIGNvbG9yKTsKLSAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmRyYXdF
bGVtZW50cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCBpbmRpY2VzLnNpemUoKSwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX1NIT1JULCAwKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHUFU6OmZpbGxQYXRoSW50ZXJuYWwoY29uc3QgUGF0aCYgcGF0aCwgY29uc3QgQ29sb3Im
IGNvbG9yKQotewotICAgIGlmIChTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dXNlTG9vcEJsaW5u
Rm9yUGF0aFJlbmRlcmluZygpKSB7Ci0gICAgICAgIG1fcGF0aENhY2hlLmNsZWFyKCk7Ci0gICAg
ICAgIExvb3BCbGlublBhdGhQcm9jZXNzb3IgcHJvY2Vzc29yOwotICAgICAgICBwcm9jZXNzb3Iu
cHJvY2VzcyhwYXRoLCBtX3BhdGhDYWNoZSk7Ci0gICAgICAgIGlmICghbV9wYXRoVmVydGV4QnVm
ZmVyKQotICAgICAgICAgICAgbV9wYXRoVmVydGV4QnVmZmVyID0gbV9jb250ZXh0LT5jcmVhdGVC
dWZmZXIoKTsKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpBUlJBWV9CVUZGRVIsIG1fcGF0aFZlcnRleEJ1ZmZlcik7Ci0gICAgICAgIGludCBieXRlU2l6
ZU9mVmVydGljZXMgPSAyICogbV9wYXRoQ2FjaGUubnVtYmVyT2ZWZXJ0aWNlcygpICogc2l6ZW9m
KGZsb2F0KTsKLSAgICAgICAgaW50IGJ5dGVTaXplT2ZUZXhDb29yZHMgPSAzICogbV9wYXRoQ2Fj
aGUubnVtYmVyT2ZWZXJ0aWNlcygpICogc2l6ZW9mKGZsb2F0KTsKLSAgICAgICAgaW50IGJ5dGVT
aXplT2ZJbnRlcmlvclZlcnRpY2VzID0gMiAqIG1fcGF0aENhY2hlLm51bWJlck9mSW50ZXJpb3JW
ZXJ0aWNlcygpICogc2l6ZW9mKGZsb2F0KTsKLSAgICAgICAgbV9jb250ZXh0LT5idWZmZXJEYXRh
KEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBieXRlU2l6ZU9mVmVydGljZXMgKyBieXRlU2l6ZU9mVGV4Q29vcmRzICsgYnl0ZVNp
emVPZkludGVyaW9yVmVydGljZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFw
aGljc0NvbnRleHQzRDo6U1RBVElDX0RSQVcpOwotICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlclN1
YkRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgMCwgYnl0ZVNpemVPZlZlcnRp
Y2VzLCBtX3BhdGhDYWNoZS52ZXJ0aWNlcygpKTsKLSAgICAgICAgbV9jb250ZXh0LT5idWZmZXJT
dWJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGJ5dGVTaXplT2ZWZXJ0aWNl
cywgYnl0ZVNpemVPZlRleENvb3JkcywgbV9wYXRoQ2FjaGUudGV4Y29vcmRzKCkpOwotICAgICAg
ICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZF
UiwgYnl0ZVNpemVPZlZlcnRpY2VzICsgYnl0ZVNpemVPZlRleENvb3JkcywgYnl0ZVNpemVPZklu
dGVyaW9yVmVydGljZXMsIG1fcGF0aENhY2hlLmludGVyaW9yVmVydGljZXMoKSk7Ci0KLSAgICAg
ICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeChtX2ZsaXBNYXRyaXgpOwotICAgICAgICBtYXRyaXgg
Kj0gbV9zdGF0ZS0+bV9jdG07Ci0KLSAgICAgICAgLy8gRHJhdyB0aGUgZXh0ZXJpb3IKLSAgICAg
ICAgbV9jb250ZXh0LT51c2VMb29wQmxpbm5FeHRlcmlvclByb2dyYW0oMCwgYnl0ZVNpemVPZlZl
cnRpY2VzLCBtYXRyaXgsIGNvbG9yKTsKLSAgICAgICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKEdy
YXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRVMsIDAsIG1fcGF0aENhY2hlLm51bWJlck9mVmVydGlj
ZXMoKSk7Ci0KLSAgICAgICAgLy8gRHJhdyB0aGUgaW50ZXJpb3IKLSAgICAgICAgbV9jb250ZXh0
LT51c2VMb29wQmxpbm5JbnRlcmlvclByb2dyYW0oYnl0ZVNpemVPZlZlcnRpY2VzICsgYnl0ZVNp
emVPZlRleENvb3JkcywgbWF0cml4LCBjb2xvcik7Ci0gICAgICAgIG1fY29udGV4dC0+ZHJhd0Fy
cmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCAwLCBtX3BhdGhDYWNoZS5udW1iZXJP
ZkludGVyaW9yVmVydGljZXMoKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgdGVzc2VsYXRlQW5k
RmlsbFBhdGgocGF0aCwgY29sb3IpOwotICAgIH0KLX0KLQotRmxvYXRSZWN0IEdyYXBoaWNzQ29u
dGV4dEdQVTo6ZmxpcFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQotewotICAgIEZsb2F0UmVj
dCBmbGlwcGVkUmVjdChyZWN0KTsKLSAgICBmbGlwcGVkUmVjdC5zZXRZKG1fc2l6ZS5oZWlnaHQo
KSAtIHJlY3QueSgpKTsKLSAgICBmbGlwcGVkUmVjdC5zZXRIZWlnaHQoLXJlY3QuaGVpZ2h0KCkp
OwotICAgIHJldHVybiBmbGlwcGVkUmVjdDsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHUFU6
OmNsZWFyQm9yZGVycyhjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGludCB3aWR0aCkKLXsKLSAgICBz
Y2lzc29yQ2xlYXIocmVjdC54KCksIHJlY3QueSgpIC0gd2lkdGgsIHJlY3Qud2lkdGgoKSArIHdp
ZHRoLCB3aWR0aCk7Ci0gICAgc2Npc3NvckNsZWFyKHJlY3QubWF4WCgpLCByZWN0LnkoKSwgd2lk
dGgsIHJlY3QuaGVpZ2h0KCkgKyB3aWR0aCk7Ci0gICAgc2Npc3NvckNsZWFyKHJlY3QueCgpIC0g
d2lkdGgsIHJlY3QubWF4WSgpLCByZWN0LndpZHRoKCkgKyB3aWR0aCwgd2lkdGgpOwotICAgIHNj
aXNzb3JDbGVhcihyZWN0LngoKSAtIHdpZHRoLCByZWN0LnkoKSAtIHdpZHRoLCB3aWR0aCwgcmVj
dC5oZWlnaHQoKSArIHdpZHRoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHUFU6OmJlZ2lu
U2hhZG93RHJhdygpCi17Ci0gICAgZmxvYXQgb2Zmc2V0WCA9IG1fc3RhdGUtPm1fc2hhZG93T2Zm
c2V0LndpZHRoKCk7Ci0gICAgZmxvYXQgb2Zmc2V0WSA9IG1fc3RhdGUtPm1fc2hhZG93T2Zmc2V0
LmhlaWdodCgpOwotICAgIHNhdmUoKTsKLSAgICBpZiAobV9zdGF0ZS0+bV9zaGFkb3dzSWdub3Jl
VHJhbnNmb3JtcykgewotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3Q1RNOwotICAgICAgICBu
ZXdDVE0udHJhbnNsYXRlKG9mZnNldFgsIC1vZmZzZXRZKTsKLSAgICAgICAgbmV3Q1RNICo9IG1f
c3RhdGUtPm1fY3RtOwotICAgICAgICBtX3N0YXRlLT5tX2N0bSA9IG5ld0NUTTsKLSAgICB9IGVs
c2UKLSAgICAgICAgbV9zdGF0ZS0+bV9jdG0udHJhbnNsYXRlKG9mZnNldFgsIG9mZnNldFkpOwot
Ci0gICAgaWYgKG1fc3RhdGUtPm1fc2hhZG93Qmx1ciA+IDApIHsKLSAgICAgICAgLy8gRHJhdyBo
YXJkIHNoYWRvdyB0byBvZmZzY3JlZW4gYnVmZmVyIDAuCi0gICAgICAgIERyYXdpbmdCdWZmZXIq
IGRzdEJ1ZmZlciA9IG1fY29udGV4dC0+Z2V0T2Zmc2NyZWVuQnVmZmVyKDAsIG1fc2l6ZSk7Ci0g
ICAgICAgIGRzdEJ1ZmZlci0+YmluZCgpOwotICAgICAgICBtX2NvbnRleHQtPmFwcGx5Q29tcG9z
aXRlT3BlcmF0b3IoQ29tcG9zaXRlQ29weSk7Ci0gICAgICAgIGFwcGx5Q2xpcHBpbmcoZmFsc2Up
OwotICAgICAgICBtX2NvbnRleHQtPmNsZWFyQ29sb3IoQ29sb3IoUkdCQTMyKDApKSk7Ci0gICAg
ICAgIG1fY29udGV4dC0+Y2xlYXIoR3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGFwcGx5U3RhdGUoKTsKLSAgICB9Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R1BVOjplbmRTaGFkb3dEcmF3KGNvbnN0IEZsb2F0UmVjdCYgYm91bmRp
bmdCb3gpCi17Ci0gICAgaWYgKG1fc3RhdGUtPm1fc2hhZG93Qmx1ciA+IDApIHsKLSAgICAgICAg
Ly8gQnVmZmVyIDAgY29udGFpbnMgdGhlIHByaW1pdGl2ZSBkcmF3biB3aXRoIGEgaGFyZCBzaGFk
b3cuCi0gICAgICAgIERyYXdpbmdCdWZmZXIqIHNyY0J1ZmZlciA9IG1fY29udGV4dC0+Z2V0T2Zm
c2NyZWVuQnVmZmVyKDAsIG1fc2l6ZSk7Ci0gICAgICAgIERyYXdpbmdCdWZmZXIqIGRzdEJ1ZmZl
ciA9IG1fY29udGV4dC0+Z2V0T2Zmc2NyZWVuQnVmZmVyKDEsIG1fc2l6ZSk7Ci0KLSAgICAgICAg
ZmxvYXQgc2lnbWEgPSBtX3N0YXRlLT5tX3NoYWRvd0JsdXIgKiAwLjMzMzMzM2Y7Ci0gICAgICAg
IEZsb2F0UmVjdCBzaGFkb3dCb3VuZGluZ0JveChtX3N0YXRlLT5tX2N0bS5tYXBSZWN0KGJvdW5k
aW5nQm94KSk7Ci0gICAgICAgIEZsb2F0UmVjdCByZWN0KEZsb2F0UG9pbnQoMCwgMCksIG1fc2l6
ZSk7Ci0gICAgICAgIEZsb2F0UmVjdCBzcmNSZWN0KHNoYWRvd0JvdW5kaW5nQm94KTsKLQotICAg
ICAgICBpbnQgc2NhbGVGYWN0b3IgPSAxOwotICAgICAgICB3aGlsZSAoc2lnbWEgPiBjTWF4U2ln
bWEpIHsKLSAgICAgICAgICAgIHNyY1JlY3Quc2NhbGUoMC41Zik7Ci0gICAgICAgICAgICBzY2Fs
ZUZhY3RvciAqPSAyOwotICAgICAgICAgICAgc2lnbWEgKj0gMC41ZjsKLSAgICAgICAgfQotICAg
ICAgICBzcmNSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChzcmNSZWN0KTsKLSAgICAgICAgc3JjUmVj
dC5zY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgc2NhbGVG
YWN0b3I7IGkgKj0gMikgewotICAgICAgICAgICAgZHN0QnVmZmVyLT5iaW5kKCk7Ci0gICAgICAg
ICAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBzcmNCdWZmZXItPmNvbG9yQnVmZmVyKCkpOwotICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhQ
YXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAg
ICAgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9ULCBHcmFwaGljc0NvbnRl
eHQzRDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRl
cmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgICAgICAgICAg
bV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6
TElORUFSKTsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBkc3RSZWN0KHNyY1JlY3QpOwotICAgICAg
ICAgICAgZHN0UmVjdC5zY2FsZSgwLjVmKTsKLSAgICAgICAgICAgIC8vIENsZWFyIG91dCAxIHBp
eGVsIGJvcmRlciBmb3IgbGluZWFyIGZpbHRlcmluZy4KLSAgICAgICAgICAgIGNsZWFyQm9yZGVy
cyhkc3RSZWN0LCAxKTsKLSAgICAgICAgICAgIGRyYXdUZXh0dXJlZFF1YWQoc3JjQnVmZmVyLT5z
aXplKCksIGZsaXBSZWN0KHNyY1JlY3QpLCBkc3RSZWN0LCBBZmZpbmVUcmFuc2Zvcm0oKSwgMS4w
KTsKLSAgICAgICAgICAgIHNyY1JlY3QgPSBkc3RSZWN0OwotICAgICAgICAgICAgc3RkOjpzd2Fw
KHNyY0J1ZmZlciwgZHN0QnVmZmVyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBoYWxmV2lk
dGggPSBzdGF0aWNfY2FzdDxpbnQ+KHNpZ21hICogMy4wZik7Ci0gICAgICAgIGludCBrZXJuZWxX
aWR0aCA9IGhhbGZXaWR0aCAqIDIgKyAxOwotICAgICAgICBPd25BcnJheVB0cjxmbG9hdD4ga2Vy
bmVsID0gYWRvcHRBcnJheVB0cihuZXcgZmxvYXRba2VybmVsV2lkdGhdKTsKLSAgICAgICAgYnVp
bGRLZXJuZWwoc2lnbWEsIGtlcm5lbC5nZXQoKSwga2VybmVsV2lkdGgpOwotCi0gICAgICAgIGlm
IChzY2FsZUZhY3RvciA+IDEpIHsKLSAgICAgICAgICAgIHNjaXNzb3JDbGVhcihzcmNSZWN0Lm1h
eFgoKSwgc3JjUmVjdC55KCksIGtlcm5lbFdpZHRoLCBzcmNSZWN0LmhlaWdodCgpKTsKLSAgICAg
ICAgICAgIHNjaXNzb3JDbGVhcihzcmNSZWN0LngoKSAtIGtlcm5lbFdpZHRoLCBzcmNSZWN0Lnko
KSwga2VybmVsV2lkdGgsIHNyY1JlY3QuaGVpZ2h0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAg
Ly8gQmx1ciBpbiBYIG9mZnNjcmVlbi4KLSAgICAgICAgZHN0QnVmZmVyLT5iaW5kKCk7Ci0gICAg
ICAgIHNyY1JlY3QuaW5mbGF0ZVgoaGFsZldpZHRoKTsKLSAgICAgICAgc3JjUmVjdC5pbnRlcnNl
Y3QocmVjdCk7Ci0gICAgICAgIGZsb2F0IGltYWdlSW5jcmVtZW50WFsyXSA9IHsxLjBmIC8gc3Jj
QnVmZmVyLT5zaXplKCkud2lkdGgoKSwgMC4wZn07Ci0gICAgICAgIGNvbnZvbHZlUmVjdChzcmNC
dWZmZXItPmNvbG9yQnVmZmVyKCksIHNyY0J1ZmZlci0+c2l6ZSgpLCBmbGlwUmVjdChzcmNSZWN0
KSwgc3JjUmVjdCwgaW1hZ2VJbmNyZW1lbnRYLCBrZXJuZWwuZ2V0KCksIGtlcm5lbFdpZHRoKTsK
LQotICAgICAgICBpZiAoc2NhbGVGYWN0b3IgPiAxKSB7Ci0gICAgICAgICAgICBzY2lzc29yQ2xl
YXIoc3JjUmVjdC54KCksIHNyY1JlY3QubWF4WSgpLCBzcmNSZWN0LndpZHRoKCksIGtlcm5lbFdp
ZHRoKTsKLSAgICAgICAgICAgIHNjaXNzb3JDbGVhcihzcmNSZWN0LngoKSwgc3JjUmVjdC55KCkg
LSBrZXJuZWxXaWR0aCwgc3JjUmVjdC53aWR0aCgpLCBrZXJuZWxXaWR0aCk7Ci0gICAgICAgIH0K
LSAgICAgICAgc3JjUmVjdC5pbmZsYXRlWShoYWxmV2lkdGgpOwotICAgICAgICBzcmNSZWN0Lmlu
dGVyc2VjdChyZWN0KTsKLSAgICAgICAgc3RkOjpzd2FwKHNyY0J1ZmZlciwgZHN0QnVmZmVyKTsK
LQotICAgICAgICBmbG9hdCBpbWFnZUluY3JlbWVudFlbMl0gPSB7MC4wZiwgMS4wZiAvIHNyY0J1
ZmZlci0+c2l6ZSgpLmhlaWdodCgpfTsKLSAgICAgICAgaWYgKHNjYWxlRmFjdG9yID4gMSkgewot
ICAgICAgICAgICAgLy8gQmx1ciBpbiBZIG9mZnNjcmVlbi4KLSAgICAgICAgICAgIGRzdEJ1ZmZl
ci0+YmluZCgpOwotICAgICAgICAgICAgY29udm9sdmVSZWN0KHNyY0J1ZmZlci0+Y29sb3JCdWZm
ZXIoKSwgc3JjQnVmZmVyLT5zaXplKCksIGZsaXBSZWN0KHNyY1JlY3QpLCBzcmNSZWN0LCBpbWFn
ZUluY3JlbWVudFksIGtlcm5lbC5nZXQoKSwga2VybmVsV2lkdGgpOwotICAgICAgICAgICAgLy8g
Q2xlYXIgb3V0IDIgcGl4ZWwgYm9yZGVyIGZvciBiaWN1YmljIGZpbHRlcmluZy4KLSAgICAgICAg
ICAgIGNsZWFyQm9yZGVycyhzcmNSZWN0LCAyKTsKLSAgICAgICAgICAgIHN0ZDo6c3dhcChzcmNC
dWZmZXIsIGRzdEJ1ZmZlcik7Ci0KLSAgICAgICAgICAgIC8vIFVwc2FtcGxlIHNyY0J1ZmZlciAt
PiBtYWluIGZyYW1lYnVmZmVyIHVzaW5nIGJpY3ViaWMgZmlsdGVyaW5nLgotICAgICAgICAgICAg
YXBwbHlTdGF0ZSgpOwotICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgc3JjQnVmZmVyLT5jb2xvckJ1ZmZlcigpKTsKLSAgICAg
ICAgICAgIEZsb2F0UmVjdCBkc3RSZWN0ID0gc3JjUmVjdDsKLSAgICAgICAgICAgIGRzdFJlY3Qu
c2NhbGUoc2NhbGVGYWN0b3IpOwotICAgICAgICAgICAgZHJhd1RleHR1cmVkUXVhZE1pdGNoZWxs
KHNyY0J1ZmZlci0+c2l6ZSgpLCBmbGlwUmVjdChzcmNSZWN0KSwgZHN0UmVjdCwgQWZmaW5lVHJh
bnNmb3JtKCksIDEuMCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBCbHVyIGlu
IFkgZGlyZWN0bHkgdG8gZnJhbWVidWZmZXIuCi0gICAgICAgICAgICBhcHBseVN0YXRlKCk7Ci0g
ICAgICAgICAgICBjb252b2x2ZVJlY3Qoc3JjQnVmZmVyLT5jb2xvckJ1ZmZlcigpLCBzcmNCdWZm
ZXItPnNpemUoKSwgZmxpcFJlY3Qoc3JjUmVjdCksIHNyY1JlY3QsIGltYWdlSW5jcmVtZW50WSwg
a2VybmVsLmdldCgpLCBrZXJuZWxXaWR0aCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmVzdG9y
ZSgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6YmVnaW5TdGVuY2lsRHJhdyh1bnNp
Z25lZCBvcCkKLXsKLSAgICAvLyBUdXJuIG9uIHN0ZW5jaWwgdGVzdC4KLSAgICBtX2NvbnRleHQt
PmVuYWJsZVN0ZW5jaWwodHJ1ZSk7Ci0gICAgY2hlY2tHTEVycm9yKCJlbmFibGUgU1RFTkNJTF9U
RVNUIik7Ci0KLSAgICAvLyBTdGVuY2lsIHRlc3QgbmV2ZXIgcGFzc2VzLCBzbyBjb2xvcmJ1ZmZl
ciBpcyBub3QgZHJhd24uCi0gICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5zdGVu
Y2lsRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6TkVWRVIsIDEsIDEpOwotICAgIGNoZWNrR0xFcnJv
cigic3RlbmNpbEZ1bmMiKTsKLQotICAgIC8vIEFsbCB3cml0ZXMgaW5jcmVtZW1lbnQgdGhlIHN0
ZW5jaWwgYnVmZmVyLgotICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+c3RlbmNp
bE9wKG9wLCBvcCwgb3ApOwotICAgIGNoZWNrR0xFcnJvcigic3RlbmNpbE9wIik7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R1BVOjphcHBseUNsaXBwaW5nKGJvb2wgZW5hYmxlKQotewotICAg
IG1fY29udGV4dC0+ZW5hYmxlU3RlbmNpbChlbmFibGUpOwotICAgIGlmIChlbmFibGUpIHsKLSAg
ICAgICAgLy8gRW5hYmxlIGRyYXdpbmcgb25seSB3aGVyZSBzdGVuY2lsIGlzIG5vbi16ZXJvLgot
ICAgICAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPnN0ZW5jaWxGdW5jKEdyYXBo
aWNzQ29udGV4dDNEOjpFUVVBTCwgbV9zdGF0ZS0+bV9udW1DbGlwcGluZ1BhdGhzLCAtMSk7Ci0g
ICAgICAgIGNoZWNrR0xFcnJvcigic3RlbmNpbEZ1bmMiKTsKLSAgICAgICAgLy8gS2VlcCBhbGwg
c3RlbmNpbCB2YWx1ZXMgdGhlIHNhbWUuCi0gICAgICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250
ZXh0M0QoKS0+c3RlbmNpbE9wKEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6
S0VFUCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
R3JhcGhpY3NDb250ZXh0M0Q6OktFRVApOwotICAgICAgICBjaGVja0dMRXJyb3IoInN0ZW5jaWxP
cCIpOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHUFU6OmNoZWNrR0xFcnJvcihj
b25zdCBjaGFyKiBoZWFkZXIpCi17Ci0jaWZuZGVmIE5ERUJVRwotICAgIHVuc2lnbmVkIGVycjsK
LSAgICB3aGlsZSAoKGVyciA9IG1fY29udGV4dC0+Z2V0RXJyb3IoKSkgIT0gR3JhcGhpY3NDb250
ZXh0M0Q6Ok5PX0VSUk9SKSB7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGVycm9yU3RyID0gIioqKiBV
TktOT1dOIEVSUk9SICoqKiI7Ci0gICAgICAgIHN3aXRjaCAoZXJyKSB7Ci0gICAgICAgIGNhc2Ug
R3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5VTToKLSAgICAgICAgICAgIGVycm9yU3RyID0g
IkdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU0iOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFMVUU6Ci0gICAgICAgICAg
ICBlcnJvclN0ciA9ICJHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSI7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9PUEVS
QVRJT046Ci0gICAgICAgICAgICBlcnJvclN0ciA9ICJHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJ
RF9PUEVSQVRJT04iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3ND
b250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9OOgotICAgICAgICAgICAgZXJy
b3JTdHIgPSAiR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRlJBTUVCVUZGRVJfT1BFUkFUSU9O
IjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpP
VVRfT0ZfTUVNT1JZOgotICAgICAgICAgICAgZXJyb3JTdHIgPSAiR3JhcGhpY3NDb250ZXh0M0Q6
Ok9VVF9PRl9NRU1PUlkiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
aWYgKGhlYWRlcikKLSAgICAgICAgICAgIExPR19FUlJPUigiJXM6ICAlcyIsIGhlYWRlciwgZXJy
b3JTdHIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBMT0dfRVJST1IoIiVzIiwgZXJyb3JT
dHIpOwotICAgIH0KLSNlbmRpZgotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvR3JhcGhpY3NDb250ZXh0R1BVLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR3JhcGhpY3NDb250ZXh0R1BVLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDk0MjMyNTU4MjZjNzM3MmZjYTRjNGYwMDI4OTlhMmYyZjY4Mzk2
NTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dyYXBoaWNzQ29udGV4dEdQVS5oCisrKyAv
ZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBHcmFwaGljc0NvbnRleHRHUFVfaAot
I2RlZmluZSBHcmFwaGljc0NvbnRleHRHUFVfaAotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3Jt
LmgiCi0jaW5jbHVkZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJDb2xvclNwYWNlLmgiCi0jaW5jbHVk
ZSAiR3JhcGhpY3NUeXBlcy5oIgotI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCi0jaW5jbHVkZSAi
TG9vcEJsaW5uUGF0aENhY2hlLmgiCi0jaW5jbHVkZSAiVGV4dHVyZS5oIgotCi0jaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ29sb3I7Ci1jbGFz
cyBEcmF3aW5nQnVmZmVyOwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgR3JhcGhpY3NDb250ZXh0
M0Q7Ci1jbGFzcyBQYXRoOwotY2xhc3MgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q7Ci0KLWNsYXNz
IEdyYXBoaWNzQ29udGV4dEdQVSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoR3JhcGhpY3ND
b250ZXh0R1BVKTsKLXB1YmxpYzoKLSAgICBHcmFwaGljc0NvbnRleHRHUFUoU2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0QqLCBEcmF3aW5nQnVmZmVyKiwgY29uc3QgSW50U2l6ZSYpOwotICAgIH5HcmFw
aGljc0NvbnRleHRHUFUoKTsKLQotICAgIHZvaWQgZmlsbFBhdGgoY29uc3QgUGF0aCYpOwotICAg
IHZvaWQgZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImLCBDb2xvclNwYWNl
KTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgY2xlYXJS
ZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IENvbG9y
JiwgQ29sb3JTcGFjZSk7Ci0gICAgdm9pZCBzZXRBbHBoYShmbG9hdCBhbHBoYSk7Ci0gICAgdm9p
ZCBzZXRTaGFkb3dDb2xvcihjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOwotICAgIHZvaWQgc2V0
U2hhZG93T2Zmc2V0KGNvbnN0IEZsb2F0U2l6ZSYpOwotICAgIHZvaWQgc2V0U2hhZG93Qmx1cihm
bG9hdCk7Ci0gICAgdm9pZCBzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyhib29sKTsKLSAgICB2
b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvcik7Ci0gICAgdm9pZCB0
cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSk7Ci0gICAgdm9pZCByb3RhdGUoZmxvYXQgYW5nbGVJ
blJhZGlhbnMpOwotICAgIHZvaWQgc2NhbGUoY29uc3QgRmxvYXRTaXplJik7Ci0gICAgdm9pZCBj
b25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgdm9pZCBzZXRDVE0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJik7Ci0gICAgdm9pZCBjbGlwUGF0aChjb25zdCBQYXRoJik7Ci0gICAg
dm9pZCBjbGlwT3V0KGNvbnN0IFBhdGgmKTsKLQotICAgIHZvaWQgc2F2ZSgpOwotICAgIHZvaWQg
cmVzdG9yZSgpOwotCi0gICAgLy8gbm9uLXN0YW5kYXJkIGZ1bmN0aW9ucwotICAgIC8vIFRoZXNl
IGFyZSBub3Qgc3RhbmRhcmQgR3JhcGhpY3NDb250ZXh0IGZ1bmN0aW9ucywgYW5kIHNob3VsZCBi
ZSBwdXNoZWQKLSAgICAvLyBkb3duIGludG8gYSBQbGF0Zm9ybUNvbnRleHRHTEVTMiBhdCBzb21l
IHBvaW50LgotCi0gICAgLy8gVGhpcyB2ZXJzaW9uIGlzIGNhbGxlZCBieSB0aGUgY2FudmFzLT5j
YW52YXMgZHJhd3MuCi0gICAgdm9pZCBkcmF3VGV4dHVyZWRSZWN0KHVuc2lnbmVkIHRleHR1cmUs
IGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IpOwot
ICAgIC8vIFRoaXMgdmVyc2lvbiBpcyBjYWxsZWQgYnkgQml0bWFwSW1hZ2U6OmRyYXcoKS4KLSAg
ICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSosIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRv
cik7Ci0gICAgLy8gVGhpcyB2ZXJzaW9uIGlzIGNhbGxlZCBieSB0aGUgYWJvdmUsIGFuZCBieSB0
aGUgc29mdHdhcmUtPmhhcmR3YXJlIHVwbG9hZHMuCi0gICAgdm9pZCBkcmF3VGV4dHVyZWRSZWN0
KFRleHR1cmUqLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UsIENv
bXBvc2l0ZU9wZXJhdG9yLCBib29sIGNsaXApOwotICAgIFRleHR1cmUqIGNyZWF0ZVRleHR1cmUo
TmF0aXZlSW1hZ2VQdHIsIFRleHR1cmU6OkZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsK
LSAgICBUZXh0dXJlKiBnZXRUZXh0dXJlKE5hdGl2ZUltYWdlUHRyKTsKLQotICAgIFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0OyB9Ci0K
LSAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZlcigpOwotCi0gICAgRHJhd2luZ0J1ZmZlciogZHJhd2lu
Z0J1ZmZlcigpIGNvbnN0IHsgcmV0dXJuIG1fZHJhd2luZ0J1ZmZlcjsgfQotCi1wcml2YXRlOgot
ICAgIHZvaWQgYXBwbHlTdGF0ZSgpOwotICAgIHZvaWQgc2Npc3NvckNsZWFyKGZsb2F0IHgsIGZs
b2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpOwotICAgIHZvaWQgZHJhd1RleHR1cmVk
UmVjdFRpbGUoVGV4dHVyZSogdGV4dHVyZSwgaW50IHRpbGUsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBm
bG9hdCBhbHBoYSk7Ci0gICAgdm9pZCBkcmF3VGV4dHVyZWRRdWFkKGNvbnN0IEludFNpemUmIHRl
eHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0
UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEpOwotICAgIHZvaWQgZHJh
d1RleHR1cmVkUXVhZE1pdGNoZWxsKGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEpOwotICAgIHZvaWQgY29udm9sdmVSZWN0KHVuc2lnbmVk
IHRleHR1cmUsIGNvbnN0IEludFNpemUmIHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHNy
Y1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgZmxvYXQgaW1hZ2VJbmNyZW1lbnRbMl0s
IGNvbnN0IGZsb2F0KiBrZXJuZWwsIGludCBrZXJuZWxXaWR0aCk7Ci0KLSAgICB2b2lkIHRlc3Nl
bGF0ZUFuZEZpbGxQYXRoKGNvbnN0IFBhdGgmLCBjb25zdCBDb2xvciYpOwotICAgIHZvaWQgZmls
bFBhdGhJbnRlcm5hbChjb25zdCBQYXRoJiwgY29uc3QgQ29sb3ImKTsKLSAgICB2b2lkIGZpbGxS
ZWN0SW50ZXJuYWwoY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgQ29sb3ImKTsKLSAgICBGbG9hdFJl
Y3QgZmxpcFJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBjbGVhckJvcmRlcnMoY29u
c3QgRmxvYXRSZWN0JiwgaW50IHdpZHRoKTsKLSAgICB2b2lkIGJlZ2luU2hhZG93RHJhdygpOwot
ICAgIHZvaWQgZW5kU2hhZG93RHJhdyhjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KTsKLSAg
ICB2b2lkIGJlZ2luU3RlbmNpbERyYXcodW5zaWduZWQgb3ApOwotICAgIHZvaWQgYXBwbHlDbGlw
cGluZyhib29sIGVuYWJsZSk7Ci0gICAgdm9pZCBjaGVja0dMRXJyb3IoY29uc3QgY2hhciogaGVh
ZGVyKTsKLQotICAgIEludFNpemUgbV9zaXplOwotCi0gICAgU2hhcmVkR3JhcGhpY3NDb250ZXh0
M0QqIG1fY29udGV4dDsKLSAgICBEcmF3aW5nQnVmZmVyKiBtX2RyYXdpbmdCdWZmZXI7Ci0KLSAg
ICBzdHJ1Y3QgU3RhdGU7Ci0gICAgdHlwZWRlZiBXVEY6OlZlY3RvcjxTdGF0ZT4gU3RhdGVWZWN0
b3I7Ci0gICAgU3RhdGVWZWN0b3IgbV9zdGF0ZVN0YWNrOwotICAgIFN0YXRlKiBtX3N0YXRlOwot
ICAgIEFmZmluZVRyYW5zZm9ybSBtX2ZsaXBNYXRyaXg7Ci0KLSAgICAvLyBNZW1iZXJzIGZvciBH
UFUtYWNjZWxlcmF0ZWQgcGF0aCByZW5kZXJpbmcuCi0gICAgTG9vcEJsaW5uUGF0aENhY2hlIG1f
cGF0aENhY2hlOwotICAgIHVuc2lnbmVkIG1fcGF0aEluZGV4QnVmZmVyOwotICAgIHVuc2lnbmVk
IG1fcGF0aFZlcnRleEJ1ZmZlcjsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIEdyYXBoaWNzQ29udGV4
dEdQVV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggYTk0ODc4YjhmZDI2ZmQ4MDUxNDU5Nzg1NmE1YTE2ZDYxMDg4YjMzZC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNDk5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5B
QkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRC5oIgotCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCi0jaW5jbHVkZSAiQmljdWJp
Y1NoYWRlci5oIgotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiQ29udm9sdXRpb25TaGFk
ZXIuaCIKLSNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNE
LmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiSW50U2l6ZS5oIgotI2luY2x1
ZGUgIkxvb3BCbGlublNvbGlkRmlsbFNoYWRlci5oIgotI2luY2x1ZGUgIlNvbGlkRmlsbFNoYWRl
ci5oIgotI2luY2x1ZGUgIlRleFNoYWRlci5oIgotCi0jaWYgVVNFKFNLSUEpCi0jaW5jbHVkZSAi
R3JDb250ZXh0LmgiCi0jZW5kaWYKLQotLy8gTGltaXQgdGhlIG51bWJlciBvZiB0ZXh0dXJlcyB3
ZSBob2xkIGluIHRoZSBiaXRtYXAtPnRleHR1cmUgY2FjaGUuCi1zdGF0aWMgY29uc3QgaW50IG1h
eFRleHR1cmVDYWNoZUNvdW50ID0gNTEyOwotLy8gTGltaXQgdGhlIGJ5dGVzIGFsbG9jYXRlZCB0
b3dhcmQgdGV4dHVyZXMgaW4gdGhlIGJpdG1hcC0+dGV4dHVyZSBjYWNoZS4KLXN0YXRpYyBjb25z
dCBzaXplX3QgbWF4VGV4dHVyZUNhY2hlQnl0ZXMgPSA1MCAqIDEwMjQgKiAxMDI0OwotCi0jaW5j
bHVkZSA8d3RmL093bkFycmF5UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgot
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LS8vIHN0YXRpYwotUGFzc1JlZlB0cjxTaGFyZWRHcmFwaGljc0NvbnRleHQzRD4gU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShIb3N0V2luZG93KiBob3N0V2luZG93LCBDcmVhdGlvbkZs
YWdzIGZsYWdzKQotewotICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHI7Ci0g
ICAgYXR0ci5kZXB0aCA9IGZhbHNlOwotICAgIGF0dHIuc3RlbmNpbCA9IHRydWU7Ci0gICAgYXR0
ci5hbnRpYWxpYXMgPSB1c2VMb29wQmxpbm5Gb3JQYXRoUmVuZGVyaW5nKCk7Ci0gICAgYXR0ci5j
YW5SZWNvdmVyRnJvbUNvbnRleHRMb3NzID0gZmFsc2U7IC8vIENhbnZhcyBjb250ZXh0cyBjYW4g
bm90IGhhbmRsZSBsb3N0IGNvbnRleHRzLgotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4g
Y29udGV4dCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoYXR0ciwgaG9zdFdpbmRvdyk7Ci0g
ICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoZmxhZ3MgJiBVc2VT
a2lhR1BVKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEKGNvbnRleHQucmVsZWFzZSgpLCBQYXNzT3duUHRyPFNvbGlkRmlsbFNoYWRlcj4oKSwgUGFz
c093blB0cjxUZXhTaGFkZXI+KCksIFBhc3NPd25QdHI8QmljdWJpY1NoYWRlcj4oKSwgUGFzc093
bkFycmF5UHRyPE93blB0cjxDb252b2x1dGlvblNoYWRlcj4gPigpLCBmbGFncykpOwotICAgIE93
blB0cjxTb2xpZEZpbGxTaGFkZXI+IHNvbGlkRmlsbFNoYWRlciA9IFNvbGlkRmlsbFNoYWRlcjo6
Y3JlYXRlKGNvbnRleHQuZ2V0KCkpOwotICAgIGlmICghc29saWRGaWxsU2hhZGVyKQotICAgICAg
ICByZXR1cm4gMDsKLSAgICBPd25QdHI8VGV4U2hhZGVyPiB0ZXhTaGFkZXIgPSBUZXhTaGFkZXI6
OmNyZWF0ZShjb250ZXh0LmdldCgpKTsKLSAgICBpZiAoIXRleFNoYWRlcikKLSAgICAgICAgcmV0
dXJuIDA7Ci0gICAgT3duUHRyPEJpY3ViaWNTaGFkZXI+IGJpY3ViaWNTaGFkZXIgPSBCaWN1Ymlj
U2hhZGVyOjpjcmVhdGUoY29udGV4dC5nZXQoKSk7Ci0gICAgaWYgKCFiaWN1YmljU2hhZGVyKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBPd25BcnJheVB0cjxPd25QdHI8Q29udm9sdXRpb25TaGFk
ZXI+ID4gY29udm9sdXRpb25TaGFkZXJzID0gYWRvcHRBcnJheVB0cihuZXcgT3duUHRyPENvbnZv
bHV0aW9uU2hhZGVyPltjTWF4S2VybmVsV2lkdGhdKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IGNNYXhLZXJuZWxXaWR0aDsgKytpKSB7Ci0gICAgICAgIGNvbnZvbHV0aW9uU2hhZGVyc1tpXSA9
IENvbnZvbHV0aW9uU2hhZGVyOjpjcmVhdGUoY29udGV4dC5nZXQoKSwgaSArIDEpOwotICAgICAg
ICBpZiAoIWNvbnZvbHV0aW9uU2hhZGVyc1tpXSkKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
IH0KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKGNvbnRl
eHQucmVsZWFzZSgpLCBzb2xpZEZpbGxTaGFkZXIucmVsZWFzZSgpLCB0ZXhTaGFkZXIucmVsZWFz
ZSgpLCBiaWN1YmljU2hhZGVyLnJlbGVhc2UoKSwgY29udm9sdXRpb25TaGFkZXJzLnJlbGVhc2Uo
KSwgZmxhZ3MpKTsKLX0KLQotCi1TaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6U2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0QoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCwgUGFzc093
blB0cjxTb2xpZEZpbGxTaGFkZXI+IHNvbGlkRmlsbFNoYWRlciwgUGFzc093blB0cjxUZXhTaGFk
ZXI+IHRleFNoYWRlciwgUGFzc093blB0cjxCaWN1YmljU2hhZGVyPiBiaWN1YmljU2hhZGVyLCBQ
YXNzT3duQXJyYXlQdHI8T3duUHRyPENvbnZvbHV0aW9uU2hhZGVyPiA+IGNvbnZvbHV0aW9uU2hh
ZGVycywgQ3JlYXRpb25GbGFncyBmbGFncykKLSAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAg
ICwgbV9iZ3JhU3VwcG9ydGVkKGZhbHNlKQotICAgICwgbV9xdWFkVmVydGljZXMoMCkKLSAgICAs
IG1fc29saWRGaWxsU2hhZGVyKHNvbGlkRmlsbFNoYWRlcikKLSAgICAsIG1fdGV4U2hhZGVyKHRl
eFNoYWRlcikKLSAgICAsIG1fYmljdWJpY1NoYWRlcihiaWN1YmljU2hhZGVyKQotICAgICwgbV9j
b252b2x1dGlvblNoYWRlcnMoY29udm9sdXRpb25TaGFkZXJzKQotICAgICwgbV9vZXNTdGFuZGFy
ZERlcml2YXRpdmVzU3VwcG9ydGVkKGZhbHNlKQotICAgICwgbV9mbGFncyhmbGFncykKLSNpZiBV
U0UoU0tJQSkKLSAgICAsIG1fZ3JDb250ZXh0KDApCi0jZW5kaWYKLXsKLSAgICBhbGxDb250ZXh0
cygpLT5hZGQodGhpcyk7Ci0gICAgRXh0ZW5zaW9uczNEKiBleHRlbnNpb25zID0gbV9jb250ZXh0
LT5nZXRFeHRlbnNpb25zKCk7Ci0gICAgbV9iZ3JhU3VwcG9ydGVkID0gZXh0ZW5zaW9ucy0+c3Vw
cG9ydHMoIkdMX0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIpICYmIGV4dGVuc2lvbnMtPnN1
cHBvcnRzKCJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSIpOwotICAgIGlmIChtX2JncmFTdXBwb3J0
ZWQpIHsKLSAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3RleHR1cmVf
Zm9ybWF0X0JHUkE4ODg4Iik7Ci0gICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdM
X0VYVF9yZWFkX2Zvcm1hdF9iZ3JhIik7Ci0gICAgfQotICAgIG1fb2VzU3RhbmRhcmREZXJpdmF0
aXZlc1N1cHBvcnRlZCA9IGV4dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9PRVNfc3RhbmRhcmRfZGVy
aXZhdGl2ZXMiKTsKLSAgICBpZiAobV9vZXNTdGFuZGFyZERlcml2YXRpdmVzU3VwcG9ydGVkKQot
ICAgICAgICBleHRlbnNpb25zLT5lbnN1cmVFbmFibGVkKCJHTF9PRVNfc3RhbmRhcmRfZGVyaXZh
dGl2ZXMiKTsKLX0KLQotU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6On5TaGFyZWRHcmFwaGljc0Nv
bnRleHQzRCgpCi17Ci0gICAgbV9jb250ZXh0LT5kZWxldGVCdWZmZXIobV9xdWFkVmVydGljZXMp
OwotICAgIGFsbENvbnRleHRzKCktPnJlbW92ZSh0aGlzKTsKLSNpZiBVU0UoU0tJQSkKLSAgICBp
ZiAobV9nckNvbnRleHQpIHsKLSAgICAgICAgbV9nckNvbnRleHQtPmNvbnRleHREZXN0cm95ZWQo
KTsKLSAgICAgICAgR3JTYWZlVW5yZWYobV9nckNvbnRleHQpOwotICAgIH0KLSNlbmRpZgotfQot
Ci12b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQoKQotewot
ICAgIG1fY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci19Ci0KLXZvaWQgU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3
aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKLXsKLSAgICBtX2NvbnRleHQtPnNjaXNzb3IoeCwgeSwg
d2lkdGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJs
ZShHQzNEZW51bSBjYXBhY2l0eSkKLXsKLSAgICBtX2NvbnRleHQtPmVuYWJsZShjYXBhY2l0eSk7
Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUoR0MzRGVudW0gY2Fw
YWNpdHkpCi17Ci0gICAgbV9jb250ZXh0LT5kaXNhYmxlKGNhcGFjaXR5KTsKLX0KLQotdm9pZCBT
aGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17
Ci0gICAgZmxvYXQgcmdiYVs0XTsKLSAgICBjb2xvci5nZXRSR0JBKHJnYmFbMF0sIHJnYmFbMV0s
IHJnYmFbMl0sIHJnYmFbM10pOwotICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihyZ2JhWzBdLCBy
Z2JhWzFdLCByZ2JhWzJdLCByZ2JhWzNdKTsKLX0KLQotdm9pZCBTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCi17Ci0gICAgbV9jb250ZXh0LT5jbGVhciht
YXNrKTsKLX0KLQotdm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyhHQzNE
ZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQpCi17Ci0gICAgbV9jb250
ZXh0LT5kcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3VudCk7Ci19Ci0KLUdDM0RlbnVtIFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcigpCi17Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+
Z2V0RXJyb3IoKTsKLX0KLQotdm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50ZWdl
cnYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQotewotICAgIG1fY29udGV4dC0+Z2V0
SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKLX0KLQotdm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQz
RDo6Zmx1c2goKQotewotICAgIG1fY29udGV4dC0+Zmx1c2goKTsKLX0KLQotUGxhdGZvcm0zRE9i
amVjdCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKCkKLXsKLSAgICByZXR1
cm4gbV9jb250ZXh0LT5jcmVhdGVCdWZmZXIoKTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlRnJhbWVidWZmZXIoKQotewotICAgIHJldHVybiBt
X2NvbnRleHQtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgU2hh
cmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIHJldHVybiBtX2Nv
bnRleHQtPmNyZWF0ZVRleHR1cmUoKTsKLX0KLQotdm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQz
RDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKLXsKLSAg
ICBtX2NvbnRleHQtPmRlbGV0ZUZyYW1lYnVmZmVyKGZyYW1lYnVmZmVyKTsKLX0KLQotdm9pZCBT
aGFyZWRHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRl
eHR1cmUpCi17Ci0gICAgbV9jb250ZXh0LT5kZWxldGVUZXh0dXJlKHRleHR1cmUpOwotfQotCi12
b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgUGxhdGZv
cm0zRE9iamVjdCB0ZXh0dXJlLCBHQzNEaW50IGxldmVsKQotewotICAgIG1fY29udGV4dC0+ZnJh
bWVidWZmZXJUZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUs
IGxldmVsKTsKLX0KLQotdm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVy
aShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQotewotICAg
IG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBuYW1lLCBwYXJhbSk7Ci19Ci0KLWJv
b2wgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBH
QzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51
bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17Ci0gICAgaWYgKCFwaXhlbHMpCi0gICAgICAg
IHJldHVybiBtX2NvbnRleHQtPnRleEltYWdlMkRSZXNvdXJjZVNhZmUodGFyZ2V0LCBsZXZlbCwg
aW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0eXBlKTsKLSAg
ICByZXR1cm4gbV9jb250ZXh0LT50ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLX0KLQot
dm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNE
c2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0g
dHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQotewotICAgIG1fY29udGV4dC0+dGV4U3ViSW1hZ2Uy
RCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQs
IHR5cGUsIHBpeGVscyk7Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQ
aXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhl
aWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKQotewotICAg
IG1fY29udGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUs
IGRhdGEpOwotfQotCi1ib29sIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpzdXBwb3J0c0JHUkEo
KQotewotICAgIHJldHVybiBtX2JncmFTdXBwb3J0ZWQ7Ci19Ci0KLWJvb2wgU2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0Q6OnN1cHBvcnRzQ29tcG9zaXRlT3AoQ29tcG9zaXRlT3BlcmF0b3Igb3ApIGNv
bnN0Ci17ICAgCi0jaWYgVVNFKFNLSUEpCi0gICAgcmV0dXJuIG1fZmxhZ3MgJiBVc2VTa2lhR1BV
IHx8IG9wID09IENvbXBvc2l0ZVNvdXJjZU92ZXI7Ci0jZWxzZQotICAgIHJldHVybiBvcCA9PSBD
b21wb3NpdGVTb3VyY2VPdmVyOwotI2VuZGlmCi19Ci0KLVRleHR1cmUqIFNoYXJlZEdyYXBoaWNz
Q29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRyIHB0ciwgVGV4dHVyZTo6Rm9y
bWF0IGZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIFJlZlB0cjxUZXh0dXJl
PiB0ZXh0dXJlID0gbV90ZXh0dXJlcy5nZXQocHRyKTsKLSAgICBpZiAodGV4dHVyZSkKLSAgICAg
ICAgcmV0dXJuIHRleHR1cmUuZ2V0KCk7Ci0KLSAgICB0ZXh0dXJlID0gVGV4dHVyZTo6Y3JlYXRl
KG1fY29udGV4dC5nZXQoKSwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBUZXh0dXJlKiB0
ID0gdGV4dHVyZS5nZXQoKTsKLSAgICBtX3RleHR1cmVzLnNldChwdHIsIHRleHR1cmUpOwotICAg
IHJldHVybiB0OwotfQotCi1UZXh0dXJlKiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4
dHVyZShOYXRpdmVJbWFnZVB0ciBwdHIpCi17Ci0gICAgUmVmUHRyPFRleHR1cmU+IHRleHR1cmUg
PSBtX3RleHR1cmVzLmdldChwdHIpOwotICAgIHJldHVybiB0ZXh0dXJlID8gdGV4dHVyZS5nZXQo
KSA6IDA7Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnJlbW92ZVRleHR1cmVG
b3IoTmF0aXZlSW1hZ2VQdHIgcHRyKQotewotICAgIFRleHR1cmVIYXNoTWFwOjppdGVyYXRvciBp
dCA9IG1fdGV4dHVyZXMuZmluZChwdHIpOwotICAgIGlmIChpdCAhPSBtX3RleHR1cmVzLmVuZCgp
KQotICAgICAgICBtX3RleHR1cmVzLnJlbW92ZShpdCk7Ci19Ci0KLS8vIHN0YXRpYwotdm9pZCBT
aGFyZWRHcmFwaGljc0NvbnRleHQzRDo6cmVtb3ZlVGV4dHVyZXNGb3IoTmF0aXZlSW1hZ2VQdHIg
cHRyKQotewotICAgIGZvciAoSGFzaFNldDxTaGFyZWRHcmFwaGljc0NvbnRleHQzRCo+OjppdGVy
YXRvciBpdCA9IGFsbENvbnRleHRzKCktPmJlZ2luKCk7IGl0ICE9IGFsbENvbnRleHRzKCktPmVu
ZCgpOyArK2l0KQotICAgICAgICAoKml0KS0+cmVtb3ZlVGV4dHVyZUZvcihwdHIpOwotfQotCi0v
LyBzdGF0aWMKLUhhc2hTZXQ8U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqPiogU2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0Q6OmFsbENvbnRleHRzKCkKLXsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEhh
c2hTZXQ8U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqPiwgYWxsQ29udGV4dHNTZXQsICgpKTsKLSAg
ICByZXR1cm4gJmFsbENvbnRleHRzU2V0OwotfQotCi0KLVBhc3NSZWZQdHI8VGV4dHVyZT4gU2hh
cmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoVGV4dHVyZTo6Rm9ybWF0IGZvcm1h
dCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotICAgIHJldHVybiBUZXh0dXJlOjpjcmVhdGUo
bV9jb250ZXh0LmdldCgpLCBmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEOjphcHBseUNvbXBvc2l0ZU9wZXJhdG9yKENvbXBvc2l0ZU9wZXJh
dG9yIG9wKQotewotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIENvbXBvc2l0ZUNsZWFyOgot
ICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAg
ICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhp
Y3NDb250ZXh0M0Q6OlpFUk8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZUNv
cHk6Ci0gICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZU92ZXI6Ci0gICAgICAg
IG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1f
Y29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4
dDNEOjpPTkVfTUlOVVNfU1JDX0FMUEhBKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21w
b3NpdGVTb3VyY2VJbjoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0
M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0
M0Q6OkRTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZU91dDoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMo
R3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19EU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNE
OjpaRVJPKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVTb3VyY2VBdG9wOgot
ICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAg
ICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6RFNUX0FMUEhBLCBH
cmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25PdmVyOgotICAgICAgICBtX2NvbnRleHQtPmVu
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRleHQtPmJsZW5k
RnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0RTVF9BTFBIQSwgR3JhcGhpY3NDb250
ZXh0M0Q6Ok9ORSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRp
b25JbjoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5E
KTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8s
IEdyYXBoaWNzQ29udGV4dDNEOjpTUkNfQUxQSEEpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IENvbXBvc2l0ZURlc3RpbmF0aW9uT3V0OgotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFw
aGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFw
aGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQ
SEEpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uQXRvcDoK
LSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAg
ICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19E
U1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpTUkNfQUxQSEEpOwotICAgICAgICBicmVhazsK
LSAgICBjYXNlIENvbXBvc2l0ZVhPUjoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhp
Y3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19EU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVf
TUlOVVNfU1JDX0FMUEhBKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVQbHVz
RGFya2VyOgotICAgICAgICAvLyB1bnN1cHBvcnRlZAotICAgICAgICBtX2NvbnRleHQtPmRpc2Fi
bGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
b21wb3NpdGVQbHVzTGlnaHRlcjoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3ND
b250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIH0KLX0KLQotdm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlU3RlbmNpbChi
b29sIGVuYWJsZSkKLXsKLSAgICBpZiAoZW5hYmxlKQotICAgICAgICBtX2NvbnRleHQtPmVuYWJs
ZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKTsKLSAgICBlbHNlCi0gICAgICAgIG1f
Y29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6U1RFTkNJTF9URVNUKTsKLX0KLQot
dm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dXNlUXVhZFZlcnRpY2VzKCkKLXsKLSAgICBp
ZiAoIW1fcXVhZFZlcnRpY2VzKSB7Ci0gICAgICAgIGZsb2F0IHZlcnRpY2VzW10gPSB7IDAuMGYs
IDAuMGYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMGYsIDAuMGYsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAuMGYsIDEuMGYsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDEuMGYsIDEuMGYgfTsKLSAgICAgICAgbV9xdWFkVmVydGljZXMgPSBtX2NvbnRleHQt
PmNyZWF0ZUJ1ZmZlcigpOwotICAgICAgICBtX2NvbnRleHQtPmJpbmRCdWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV9xdWFkVmVydGljZXMpOwotICAgICAgICBtX2NvbnRl
eHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgc2l6ZW9mKHZl
cnRpY2VzKSwgdmVydGljZXMsIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNE
OjpBUlJBWV9CVUZGRVIsIG1fcXVhZFZlcnRpY2VzKTsKLSAgICB9Ci19Ci0KLXZvaWQgU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0Q6OnNldEFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4dHVyZVVuaXQp
Ci17Ci0gICAgbV9jb250ZXh0LT5hY3RpdmVUZXh0dXJlKHRleHR1cmVVbml0KTsKLX0KLQotdm9p
ZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBs
YXRmb3JtM0RPYmplY3QgYnVmZmVyKQotewotICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcih0YXJn
ZXQsIGJ1ZmZlcik7Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRUZXh0
dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQotewotICAgIG1f
Y29udGV4dC0+YmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKLX0KLQotdm9pZCBTaGFyZWRH
cmFwaGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0
ciBzaXplLCBHQzNEZW51bSB1c2FnZSkKLXsKLSAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEodGFy
Z2V0LCBzaXplLCB1c2FnZSk7Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmJ1
ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCog
ZGF0YSwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKHRhcmdl
dCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOwotfQotCi12b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNE
OjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0Rz
aXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhKQotewotICAgIG1fY29udGV4dC0+YnVmZmVy
U3ViRGF0YSh0YXJnZXQsIG9mZnNldCwgc2l6ZSwgZGF0YSk7Ci19Ci0KLXZvaWQgU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0Q6OnVzZUZpbGxTb2xpZFByb2dyYW0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0sIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBtX3NvbGlkRmlsbFNoYWRl
ci0+dXNlKHRyYW5zZm9ybSwgY29sb3IpOwotfQotCi12b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEOjp1c2VUZXh0dXJlUHJvZ3JhbShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0ZXhUcmFuc2Zvcm0sIGZsb2F0IGFscGhhKQotewotICAg
IG1fdGV4U2hhZGVyLT51c2UodHJhbnNmb3JtLCB0ZXhUcmFuc2Zvcm0sIDAsIGFscGhhKTsKLX0K
LQotdm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dXNlQmljdWJpY1Byb2dyYW0oY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGV4VHJh
bnNmb3JtLCBjb25zdCBmbG9hdCBjb2VmZmljaWVudHNbMTZdLCBjb25zdCBmbG9hdCBpbWFnZUlu
Y3JlbWVudFsyXSwgZmxvYXQgYWxwaGEpCi17Ci0gICAgbV9iaWN1YmljU2hhZGVyLT51c2UodHJh
bnNmb3JtLCB0ZXhUcmFuc2Zvcm0sIGNvZWZmaWNpZW50cywgaW1hZ2VJbmNyZW1lbnQsIGFscGhh
KTsKLX0KLQotdm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dXNlQ29udm9sdXRpb25Qcm9n
cmFtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRleFRyYW5zZm9ybSwgY29uc3QgZmxvYXQqIGtlcm5lbCwgaW50IGtlcm5lbFdpZHRoLCBm
bG9hdCBpbWFnZUluY3JlbWVudFsyXSkKLXsKLSAgICBBU1NFUlQoa2VybmVsV2lkdGggPj0gMSAm
JiBrZXJuZWxXaWR0aCA8PSBjTWF4S2VybmVsV2lkdGgpOwotICAgIG1fY29udm9sdXRpb25TaGFk
ZXJzW2tlcm5lbFdpZHRoIC0gMV0tPnVzZSh0cmFuc2Zvcm0sIHRleFRyYW5zZm9ybSwga2VybmVs
LCBrZXJuZWxXaWR0aCwgaW1hZ2VJbmNyZW1lbnQpOwotfQotCi12b2lkIFNoYXJlZEdyYXBoaWNz
Q29udGV4dDNEOjpiaW5kRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikK
LXsKLSAgICBtX2NvbnRleHQtPmJpbmRGcmFtZWJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RlJB
TUVCVUZGRVIsIGZyYW1lYnVmZmVyKTsKLX0KLQotdm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQz
RDo6c2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBtX2NvbnRleHQtPnZp
ZXdwb3J0KDAsIDAsIHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLWJvb2wgU2hh
cmVkR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdAotewot
ICAgIHJldHVybiBtX2NvbnRleHQtPnBhaW50c0ludG9DYW52YXNCdWZmZXIoKTsKLX0KLQotYm9v
bCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dXNlTG9vcEJsaW5uRm9yUGF0aFJlbmRlcmluZygp
Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNE
Ojp1c2VMb29wQmxpbm5JbnRlcmlvclByb2dyYW0odW5zaWduZWQgdmVydGV4T2Zmc2V0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAg
IGlmICghbV9sb29wQmxpbm5JbnRlcmlvclNoYWRlcikgewotICAgICAgICBtX2xvb3BCbGlubklu
dGVyaW9yU2hhZGVyID0gTG9vcEJsaW5uU29saWRGaWxsU2hhZGVyOjpjcmVhdGUobV9jb250ZXh0
LmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgTG9vcEJsaW5uU2hhZGVyOjpJbnRlcmlvciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNoYWRlcjo6Tm90QW50aWFsaWFzZWQpOwotICAgIH0KLSAgICBBU1NFUlQobV9sb29wQmxp
bm5JbnRlcmlvclNoYWRlcik7Ci0gICAgbV9sb29wQmxpbm5JbnRlcmlvclNoYWRlci0+dXNlKHZl
cnRleE9mZnNldCwgMCwgdHJhbnNmb3JtLCBjb2xvcik7Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0Q6OnVzZUxvb3BCbGlubkV4dGVyaW9yUHJvZ3JhbSh1bnNpZ25lZCB2ZXJ0ZXhP
ZmZzZXQsIHVuc2lnbmVkIGtsbU9mZnNldCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0sIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBpZiAoIW1fbG9vcEJsaW5uRXh0ZXJpb3JT
aGFkZXIpIHsKLSAgICAgICAgbV9sb29wQmxpbm5FeHRlcmlvclNoYWRlciA9IExvb3BCbGlublNv
bGlkRmlsbFNoYWRlcjo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvb3BC
bGlublNoYWRlcjo6RXh0ZXJpb3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX29lc1N0YW5kYXJkRGVyaXZhdGl2
ZXNTdXBwb3J0ZWQgPyBTaGFkZXI6OkFudGlhbGlhc2VkIDogU2hhZGVyOjpOb3RBbnRpYWxpYXNl
ZCk7Ci0gICAgfQotICAgIEFTU0VSVChtX2xvb3BCbGlubkV4dGVyaW9yU2hhZGVyKTsKLSAgICBt
X2xvb3BCbGlubkV4dGVyaW9yU2hhZGVyLT51c2UodmVydGV4T2Zmc2V0LCBrbG1PZmZzZXQsIHRy
YW5zZm9ybSwgY29sb3IpOwotfQotCi1EcmF3aW5nQnVmZmVyKiBTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0T2Zmc2NyZWVuQnVmZmVyKHVuc2lnbmVkIGluZGV4LCBjb25zdCBJbnRTaXplJiBz
aXplKQotewotICAgIGlmIChpbmRleCA+PSBtX29mZnNjcmVlbkJ1ZmZlcnMuc2l6ZSgpKQotICAg
ICAgICBtX29mZnNjcmVlbkJ1ZmZlcnMucmVzaXplKGluZGV4ICsgMSk7Ci0KLSAgICBpZiAoIW1f
b2Zmc2NyZWVuQnVmZmVyc1tpbmRleF0pCi0gICAgICAgIG1fb2Zmc2NyZWVuQnVmZmVyc1tpbmRl
eF0gPSBtX2NvbnRleHQtPmNyZWF0ZURyYXdpbmdCdWZmZXIoc2l6ZSk7Ci0KLSAgICBpZiAoc2l6
ZS53aWR0aCgpICE9IG1fb2Zmc2NyZWVuQnVmZmVyc1tpbmRleF0tPnNpemUoKS53aWR0aCgpCi0g
ICAgICAgIHx8IHNpemUuaGVpZ2h0KCkgIT0gbV9vZmZzY3JlZW5CdWZmZXJzW2luZGV4XS0+c2l6
ZSgpLmhlaWdodCgpKQotICAgICAgICBtX29mZnNjcmVlbkJ1ZmZlcnNbaW5kZXhdLT5yZXNldChz
aXplKTsKLSAgICByZXR1cm4gbV9vZmZzY3JlZW5CdWZmZXJzW2luZGV4XS5nZXQoKTsKLX0KLQot
I2lmIFVTRShTS0lBKQotR3JDb250ZXh0KiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z3JDb250
ZXh0KCkKLXsKLSAgICBpZiAoIShtX2ZsYWdzICYgVXNlU2tpYUdQVSkpCi0gICAgICAgIHJldHVy
biAwOwotICAgIGlmICghbV9nckNvbnRleHQpIHsKLSAgICAgICAgbV9nckNvbnRleHQgPSBHckNv
bnRleHQ6OkNyZWF0ZUdMU2hhZGVyQ29udGV4dCgpOwotICAgICAgICBpZiAobV9nckNvbnRleHQp
Ci0gICAgICAgICAgICBtX2dyQ29udGV4dC0+c2V0VGV4dHVyZUNhY2hlTGltaXRzKG1heFRleHR1
cmVDYWNoZUNvdW50LCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyk7Ci0gICAgfQotICAgIHJldHVybiBt
X2dyQ29udGV4dDsKLX0KLSNlbmRpZgotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJl
ZEdyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMmVlMjgyMTJmZmU2M2IyNjBiNDEyYTBjNmQwMTkzZjJmMGI5YzA4Yi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaAorKysgL2Rldi9udWxsCkBA
IC0xLDE5MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQot
ICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQot
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
LSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZm5kZWYgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0RfaAotI2RlZmlu
ZSBTaGFyZWRHcmFwaGljc0NvbnRleHQzRF9oCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQz
RC5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJJbWFnZVNvdXJjZS5o
IgotI2luY2x1ZGUgIlRleHR1cmUuaCIKLQotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KLSNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+Ci0KLSNpZiBVU0UoU0tJQSkKLWNsYXNzIEdyQ29udGV4dDsKLSNlbmRp
ZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEFmZmluZVRyYW5zZm9ybTsKLWNsYXNz
IEJpY3ViaWNTaGFkZXI7Ci1jbGFzcyBDb2xvcjsKLWNsYXNzIENvbnZvbHV0aW9uU2hhZGVyOwot
Y2xhc3MgRHJhd2luZ0J1ZmZlcjsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEhvc3RXaW5kb3c7
Ci1jbGFzcyBJbnRTaXplOwotY2xhc3MgTG9vcEJsaW5uU29saWRGaWxsU2hhZGVyOwotY2xhc3Mg
U29saWRGaWxsU2hhZGVyOwotY2xhc3MgVGV4U2hhZGVyOwotCi10eXBlZGVmIEhhc2hNYXA8TmF0
aXZlSW1hZ2VQdHIsIFJlZlB0cjxUZXh0dXJlPiA+IFRleHR1cmVIYXNoTWFwOwotCi1jbGFzcyBT
aGFyZWRHcmFwaGljc0NvbnRleHQzRCA6IHB1YmxpYyBSZWZDb3VudGVkPFNoYXJlZEdyYXBoaWNz
Q29udGV4dDNEPiB7Ci1wdWJsaWM6Ci0KLSAgICBlbnVtIENyZWF0aW9uRmxhZ0JpdHMgewotICAg
ICAgICBVc2VTa2lhR1BVID0gMQotICAgIH07Ci0gICAgdHlwZWRlZiB1bnNpZ25lZCBDcmVhdGlv
bkZsYWdzOwotCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q+
IGNyZWF0ZShIb3N0V2luZG93KiwgQ3JlYXRpb25GbGFncyk7Ci0gICAgflNoYXJlZEdyYXBoaWNz
Q29udGV4dDNEKCk7Ci0KLSAgICAvLyBGdW5jdGlvbnMgdGhhdCBkZWxlZ2F0ZSBkaXJlY3RseSB0
byBHcmFwaGljc0NvbnRleHQzRCwgd2l0aCBjYWNoaW5nCi0gICAgdm9pZCBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKLSAgICB2b2lkIGJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNE
T2JqZWN0KTsKLSAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1l
YnVmZmVyKTsKLSAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlw
dHIsIEdDM0RlbnVtIHVzYWdlKTsKLSAgICB2b2lkIGJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEc2l6ZWlwdHIsIGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKTsKLSAgICB2
b2lkIGJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0Mz
RHNpemVpcHRyLCBjb25zdCB2b2lkKiBkYXRhKTsKLSAgICB2b2lkIHNldFZpZXdwb3J0KGNvbnN0
IEludFNpemUmKTsKLSAgICB2b2lkIHNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCk7Ci0gICAgdm9pZCBlbmFibGUoR0MzRGVudW0g
Y2FwYWNpdHkpOwotICAgIHZvaWQgZGlzYWJsZShHQzNEZW51bSBjYXBhY2l0eSk7Ci0gICAgdm9p
ZCBjbGVhckNvbG9yKGNvbnN0IENvbG9yJik7Ci0gICAgdm9pZCBjbGVhcihHQzNEYml0ZmllbGQg
bWFzayk7Ci0gICAgdm9pZCBkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3Qs
IEdDM0RzaXplaSBjb3VudCk7Ci0gICAgR0MzRGVudW0gZ2V0RXJyb3IoKTsKLSAgICB2b2lkIGdl
dEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSk7Ci0gICAgdm9pZCBmbHVz
aCgpOwotCi0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVCdWZmZXIoKTsKLSAgICBQbGF0Zm9y
bTNET2JqZWN0IGNyZWF0ZUZyYW1lYnVmZmVyKCk7Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVh
dGVUZXh0dXJlKCk7Ci0KLSAgICB2b2lkIGRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmpl
Y3QgZnJhbWVidWZmZXIpOwotICAgIHZvaWQgZGVsZXRlVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0
IHRleHR1cmUpOwotCi0gICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgUGxhdGZvcm0zRE9i
amVjdCwgR0MzRGludCBsZXZlbCk7Ci0gICAgdm9pZCB0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQgcGFyYW0pOwotICAgIGJvb2wgdGV4SW1hZ2Uy
RChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNE
ZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7Ci0gICAgdm9p
ZCB0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4
b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpOwot
Ci0gICAgdm9pZCByZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9p
ZCogZGF0YSk7Ci0KLSAgICBib29sIHBhaW50c0ludG9DYW52YXNCdWZmZXIoKSBjb25zdDsKLQot
ICAgIC8vIFNoYXJlZCBsb2dpYyBmb3IgY2FudmFzIDJkCi0gICAgdm9pZCBhcHBseUNvbXBvc2l0
ZU9wZXJhdG9yKENvbXBvc2l0ZU9wZXJhdG9yKTsKLSAgICB2b2lkIGVuYWJsZVN0ZW5jaWwoYm9v
bCBlbmFibGUpOwotICAgIHZvaWQgdXNlUXVhZFZlcnRpY2VzKCk7Ci0KLSAgICB2b2lkIHVzZUZp
bGxTb2xpZFByb2dyYW0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgQ29sb3ImKTsKLSAg
ICB2b2lkIHVzZVRleHR1cmVQcm9ncmFtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYsIGZsb2F0IGFscGhhKTsKLSAgICB2b2lkIHVzZUJpY3ViaWNQcm9ncmFt
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IGZs
b2F0IGNvZWZmaWNpZW50c1sxNl0sIGNvbnN0IGZsb2F0IGltYWdlSW5jcmVtZW50WzJdLCBmbG9h
dCBhbHBoYSk7Ci0gICAgdm9pZCB1c2VDb252b2x1dGlvblByb2dyYW0oY29uc3QgQWZmaW5lVHJh
bnNmb3JtJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0ZXhUcmFuc2Zvcm0sIGNvbnN0IGZsb2F0
KiBrZXJuZWwsIGludCBrZXJuZWxXaWR0aCwgZmxvYXQgaW1hZ2VJbmNyZW1lbnRbMl0pOwotCi0g
ICAgdm9pZCBzZXRBY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmVVbml0KTsKLSAgICB2b2lk
IGJpbmRUZXh0dXJlKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKTsK
LQotICAgIGJvb2wgc3VwcG9ydHNCR1JBKCk7Ci0gICAgYm9vbCBzdXBwb3J0c0NvbXBvc2l0ZU9w
KENvbXBvc2l0ZU9wZXJhdG9yKSBjb25zdDsKLQotICAgIC8vIENyZWF0ZXMgYSB0ZXh0dXJlIGFz
c29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gaW1hZ2UuICBJcyBvd25lZCBieSB0aGlzIGNvbnRleHQn
cwotICAgIC8vIFRleHR1cmVIYXNoTWFwLgotICAgIFRleHR1cmUqIGNyZWF0ZVRleHR1cmUoTmF0
aXZlSW1hZ2VQdHIsIFRleHR1cmU6OkZvcm1hdCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLSAg
ICBUZXh0dXJlKiBnZXRUZXh0dXJlKE5hdGl2ZUltYWdlUHRyKTsKLQotICAgIC8vIE11bHRpcGxl
IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEIGNhbiBleGlzdCBpbiBhIHNpbmdsZSBwcm9jZXNzIChv
bmUgcGVyIGNvbXBvc2l0aW5nIGNvbnRleHQpIGFuZCB0aGUgc2FtZQotICAgIC8vIE5hdGl2ZUlt
YWdlUHRyIG1heSBiZSB1cGxvYWRlZCBhcyBhIHRleHR1cmUgaW50byBhbGwgb2YgdGhlbS4gIFRo
aXMgZnVuY3Rpb24gcmVtb3ZlcyB1cGxvYWRlZCB0ZXh0dXJlcwotICAgIC8vIGZvciBhIGdpdmVu
IE5hdGl2ZUltYWdlUHRyIGluIGFsbCBjb250ZXh0cy4KLSAgICBzdGF0aWMgdm9pZCByZW1vdmVU
ZXh0dXJlc0ZvcihOYXRpdmVJbWFnZVB0cik7Ci0KLSAgICAvLyBDcmVhdGVzIGEgdGV4dHVyZSB0
aGF0IGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IGltYWdlLiAgVGhlIGNhbGxlciB0YWtlcyBv
d25lcnNoaXAgb2YKLSAgICAvLyB0aGUgdGV4dHVyZS4KLSAgICBQYXNzUmVmUHRyPFRleHR1cmU+
IGNyZWF0ZVRleHR1cmUoVGV4dHVyZTo6Rm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwot
Ci0gICAgR3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1
cm4gbV9jb250ZXh0LmdldCgpOyB9Ci0KLSAgICAvLyBNZW1iZXJzIGZvciBHUFUtYWNjZWxlcmF0
ZWQgcGF0aCByZW5kZXJpbmcuCi0gICAgc3RhdGljIGJvb2wgdXNlTG9vcEJsaW5uRm9yUGF0aFJl
bmRlcmluZygpOwotICAgIHZvaWQgdXNlTG9vcEJsaW5uSW50ZXJpb3JQcm9ncmFtKHVuc2lnbmVk
IHZlcnRleE9mZnNldCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgQ29sb3ImKTsKLSAg
ICB2b2lkIHVzZUxvb3BCbGlubkV4dGVyaW9yUHJvZ3JhbSh1bnNpZ25lZCB2ZXJ0ZXhPZmZzZXQs
IHVuc2lnbmVkIGtsbU9mZnNldCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgQ29sb3Im
KTsKLSAgICBEcmF3aW5nQnVmZmVyKiBnZXRPZmZzY3JlZW5CdWZmZXIodW5zaWduZWQgaW5kZXgs
IGNvbnN0IEludFNpemUmKTsKLQotI2lmIFVTRShTS0lBKQotICAgIEdyQ29udGV4dCogZ3JDb250
ZXh0KCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBTaGFyZWRHcmFwaGljc0NvbnRleHQzRChQ
YXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiwgUGFzc093blB0cjxTb2xpZEZpbGxTaGFkZXI+
LCBQYXNzT3duUHRyPFRleFNoYWRlcj4sIFBhc3NPd25QdHI8QmljdWJpY1NoYWRlcj4sIFBhc3NP
d25BcnJheVB0cjxPd25QdHI8Q29udm9sdXRpb25TaGFkZXI+ID4sIENyZWF0aW9uRmxhZ3MpOwot
Ci0gICAgLy8gVXNlZCB0byBpbXBsZW1lbnQgcmVtb3ZlVGV4dHVyZXNGb3IoKSwgc2VlIHRoZSBj
b21tZW50IGFib3ZlLgotICAgIHN0YXRpYyBIYXNoU2V0PFNoYXJlZEdyYXBoaWNzQ29udGV4dDNE
Kj4qIGFsbENvbnRleHRzKCk7Ci0gICAgdm9pZCByZW1vdmVUZXh0dXJlRm9yKE5hdGl2ZUltYWdl
UHRyKTsKLQotICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0OwotICAgIGJv
b2wgbV9iZ3JhU3VwcG9ydGVkOwotCi0gICAgdW5zaWduZWQgbV9xdWFkVmVydGljZXM7Ci0KLSAg
ICBPd25QdHI8U29saWRGaWxsU2hhZGVyPiBtX3NvbGlkRmlsbFNoYWRlcjsKLSAgICBPd25QdHI8
VGV4U2hhZGVyPiBtX3RleFNoYWRlcjsKLSAgICBPd25QdHI8QmljdWJpY1NoYWRlcj4gbV9iaWN1
YmljU2hhZGVyOwotICAgIE93bkFycmF5UHRyPE93blB0cjxDb252b2x1dGlvblNoYWRlcj4gPiBt
X2NvbnZvbHV0aW9uU2hhZGVyczsKLQotICAgIFRleHR1cmVIYXNoTWFwIG1fdGV4dHVyZXM7Ci0K
LSAgICAvLyBNZW1iZXJzIGZvciBHUFUtYWNjZWxlcmF0ZWQgcGF0aCByZW5kZXJpbmcuCi0gICAg
Ly8gRklYTUU6IHN1cHBvcnQgbW9yZSBraW5kcyBvZiBmaWxsIHR5cGVzIGZvciBwYXRocy4KLSAg
ICBPd25QdHI8TG9vcEJsaW5uU29saWRGaWxsU2hhZGVyPiBtX2xvb3BCbGlubkludGVyaW9yU2hh
ZGVyOwotICAgIE93blB0cjxMb29wQmxpbm5Tb2xpZEZpbGxTaGFkZXI+IG1fbG9vcEJsaW5uRXh0
ZXJpb3JTaGFkZXI7Ci0gICAgYm9vbCBtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXNTdXBwb3J0ZWQ7
Ci0KLSAgICBXVEY6OlZlY3RvcjxSZWZQdHI8RHJhd2luZ0J1ZmZlcj4gPiBtX29mZnNjcmVlbkJ1
ZmZlcnM7Ci0KLSAgICB1bnNpZ25lZCBtX2ZsYWdzOwotI2lmIFVTRShTS0lBKQotICAgIEdyQ29u
dGV4dCogbV9nckNvbnRleHQ7Ci0jZW5kaWYKLX07Ci0KLWNvbnN0IGZsb2F0IGNNYXhTaWdtYSA9
IDQuMGY7Ci1jb25zdCBpbnQgY01heEtlcm5lbFdpZHRoID0gMjU7Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKLQotI2VuZGlmIC8vIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Tb2xpZEZpbGxTaGFkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NvbGlkRmlsbFNoYWRl
ci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkZDU4OTYwYzRhZjJiNWE1Y2Y3
MGRhOWFiOTViZDU3NWQ2OGViM2IuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NvbGlkRmls
bFNoYWRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3OSArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0KLSNpbmNsdWRlICJT
b2xpZEZpbGxTaGFkZXIuaCIKLQotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Tb2xpZEZpbGxTaGFkZXI6
OlNvbGlkRmlsbFNoYWRlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQgcHJv
Z3JhbSkKLSAgICA6IFNoYWRlcihjb250ZXh0LCBwcm9ncmFtKQotewotICAgIG1fbWF0cml4TG9j
YXRpb24gPSBjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgIm1hdHJpeCIpOwot
ICAgIG1fY29sb3JMb2NhdGlvbiA9IGNvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFt
LCAiY29sb3IiKTsKLSAgICBtX3Bvc2l0aW9uTG9jYXRpb24gPSBjb250ZXh0LT5nZXRBdHRyaWJM
b2NhdGlvbihwcm9ncmFtLCAicG9zaXRpb24iKTsKLX0KLQotUGFzc093blB0cjxTb2xpZEZpbGxT
aGFkZXI+IFNvbGlkRmlsbFNoYWRlcjo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
KQotewotICAgIHVuc2lnbmVkIHByb2dyYW0gPSBsb2FkUHJvZ3JhbShjb250ZXh0LAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZVZlcnRleChTaGFkZXI6OlR3b0Rp
bWVuc2lvbmFsLCBTaGFkZXI6OlNvbGlkRmlsbCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGdlbmVyYXRlRnJhZ21lbnQoU2hhZGVyOjpUd29EaW1lbnNpb25hbCwgU2hhZGVy
OjpTb2xpZEZpbGwsIFNoYWRlcjo6Tm90QW50aWFsaWFzZWQpKTsKLSAgICBpZiAoIXByb2dyYW0p
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBhZG9wdFB0cihuZXcgU29saWRG
aWxsU2hhZGVyKGNvbnRleHQsIHByb2dyYW0pKTsKLX0KLQotdm9pZCBTb2xpZEZpbGxTaGFkZXI6
OnVzZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgQ29sb3ImIGNvbG9y
KQotewotICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShtX3Byb2dyYW0pOwotCi0gICAgZmxvYXQg
cmdiYVs0XTsKLSAgICBjb2xvci5nZXRSR0JBKHJnYmFbMF0sIHJnYmFbMV0sIHJnYmFbMl0sIHJn
YmFbM10pOwotICAgIG1fY29udGV4dC0+dW5pZm9ybTRmKG1fY29sb3JMb2NhdGlvbiwgcmdiYVsw
XSAqIHJnYmFbM10sIHJnYmFbMV0gKiByZ2JhWzNdLCByZ2JhWzJdICogcmdiYVszXSwgcmdiYVsz
XSk7Ci0KLSAgICBmbG9hdCBtYXRyaXhbOV07Ci0gICAgYWZmaW5lVG8zeDModHJhbnNmb3JtLCBt
YXRyaXgpOwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJpeDNmdihtX21hdHJpeExvY2F0aW9u
LCBmYWxzZSAvKnRyYW5zcG9zZSovLCBtYXRyaXgsIDEgLypjb3VudCovKTsKLQotICAgIG1fY29u
dGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihtX3Bvc2l0aW9uTG9jYXRpb24sIDIsIEdyYXBoaWNz
Q29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOwotCi0gICAgbV9jb250ZXh0LT5lbmFibGVW
ZXJ0ZXhBdHRyaWJBcnJheShtX3Bvc2l0aW9uTG9jYXRpb24pOwotfQotCi19Ci0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NvbGlkRmls
bFNoYWRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NvbGlkRmls
bFNoYWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDcxZTczOTI1ZmVhNGEx
MTYxMTUwYWE3YjkyOTg5MzQ0YWYyNDVjLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Tb2xp
ZEZpbGxTaGFkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTb2xp
ZEZpbGxTaGFkZXJfaAotI2RlZmluZSBTb2xpZEZpbGxTaGFkZXJfaAotCi0jaW5jbHVkZSAiU2hh
ZGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgU29saWRGaWxsU2hhZGVyIDog
cHVibGljIFNoYWRlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8U29saWRGaWxs
U2hhZGVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpOwotICAgIHZvaWQgdXNl
KGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBDb2xvciYgY29sb3IpOwot
Ci1wcml2YXRlOgotICAgIFNvbGlkRmlsbFNoYWRlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4
dCwgdW5zaWduZWQgcHJvZ3JhbSk7Ci0KLSAgICBpbnQgbV9tYXRyaXhMb2NhdGlvbjsKLSAgICBp
bnQgbV9jb2xvckxvY2F0aW9uOwotICAgIGludCBtX3Bvc2l0aW9uTG9jYXRpb247Ci19OwotCi19
Ci0KLSNlbmRpZiAvLyBTb2xpZEZpbGxTaGFkZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleFNoYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4U2hhZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggZjNkNmFlMjcwYjQ2OTEwODBhYzI3NTQ4ZjRmNzdiNzE0MTY3MWU2Ni4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4U2hhZGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDgz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKLQotI2luY2x1ZGUgIlRleFNoYWRlci5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1UZXhTaGFkZXI6OlRleFNoYWRl
cihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQgcHJvZ3JhbSkKLSAgICA6IFNo
YWRlcihjb250ZXh0LCBwcm9ncmFtKQotewotICAgIG1fbWF0cml4TG9jYXRpb24gPSBjb250ZXh0
LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgIm1hdHJpeCIpOwotICAgIG1fdGV4TWF0cml4
TG9jYXRpb24gPSBjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgInRleE1hdHJp
eCIpOwotICAgIG1fYWxwaGFMb2NhdGlvbiA9IGNvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihw
cm9ncmFtLCAiZ2xvYmFsQWxwaGEiKTsKLSAgICBtX3Bvc2l0aW9uTG9jYXRpb24gPSBjb250ZXh0
LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAicG9zaXRpb24iKTsKLSAgICBtX3NhbXBsZXJM
b2NhdGlvbiA9IGNvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAic2FtcGxlciIp
OwotfQotCi1QYXNzT3duUHRyPFRleFNoYWRlcj4gVGV4U2hhZGVyOjpjcmVhdGUoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQpCi17Ci0gICAgdW5zaWduZWQgcHJvZ3JhbSA9IGxvYWRQcm9ncmFt
KGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlVmVy
dGV4KFNoYWRlcjo6VHdvRGltZW5zaW9uYWwsIFNoYWRlcjo6VGV4dHVyZUZpbGwpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZyYWdtZW50KFNoYWRlcjo6VHdv
RGltZW5zaW9uYWwsIFNoYWRlcjo6VGV4dHVyZUZpbGwsIFNoYWRlcjo6Tm90QW50aWFsaWFzZWQp
KTsKLSAgICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVy
biBhZG9wdFB0cihuZXcgVGV4U2hhZGVyKGNvbnRleHQsIHByb2dyYW0pKTsKLX0KLQotdm9pZCBU
ZXhTaGFkZXI6OnVzZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgQWZm
aW5lVHJhbnNmb3JtJiB0ZXhUcmFuc2Zvcm0sIGludCBzYW1wbGVyLCBmbG9hdCBhbHBoYSkKLXsK
LSAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0obV9wcm9ncmFtKTsKLSAgICBmbG9hdCBtYXRyaXhb
OV07Ci0gICAgYWZmaW5lVG8zeDModHJhbnNmb3JtLCBtYXRyaXgpOwotICAgIG1fY29udGV4dC0+
dW5pZm9ybU1hdHJpeDNmdihtX21hdHJpeExvY2F0aW9uLCBmYWxzZSAvKnRyYW5zcG9zZSovLCBt
YXRyaXgsIDEgLypjb3VudCovKTsKLQotICAgIGZsb2F0IHRleE1hdHJpeFs5XTsKLSAgICBhZmZp
bmVUbzN4Myh0ZXhUcmFuc2Zvcm0sIHRleE1hdHJpeCk7Ci0gICAgbV9jb250ZXh0LT51bmlmb3Jt
TWF0cml4M2Z2KG1fdGV4TWF0cml4TG9jYXRpb24sIGZhbHNlIC8qdHJhbnNwb3NlKi8sIHRleE1h
dHJpeCwgMSAvKmNvdW50Ki8pOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWkobV9zYW1wbGVy
TG9jYXRpb24sIHNhbXBsZXIpOwotICAgIG1fY29udGV4dC0+dW5pZm9ybTFmKG1fYWxwaGFMb2Nh
dGlvbiwgYWxwaGEpOwotCi0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKG1fcG9z
aXRpb25Mb2NhdGlvbiwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7
Ci0KLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fcG9zaXRpb25Mb2Nh
dGlvbik7Ci0KLX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9UZXhTaGFkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9UZXhTaGFkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NTM1OTk3ZDU1ZTk2MDYxNmZmMTU2ZWNlZDAxYmU1ZDVkZTljYTA3Zi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvVGV4U2hhZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0g
KiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQot
ICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
Zm5kZWYgVGV4U2hhZGVyX2gKLSNkZWZpbmUgVGV4U2hhZGVyX2gKLQotI2luY2x1ZGUgIlNoYWRl
ci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFRleFNoYWRlciA6IHB1YmxpYyBT
aGFkZXIgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFRleFNoYWRlcj4gY3JlYXRl
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsKLSAgICB2b2lkIHVzZShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0ZXhUcmFuc2Zvcm0s
IGludCBzYW1wbGVyLCBmbG9hdCBhbHBoYSk7Ci0KLXByaXZhdGU6Ci0gICAgVGV4U2hhZGVyKEdy
YXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCB1bnNpZ25lZCBwcm9ncmFtKTsKLQotICAgIGludCBt
X21hdHJpeExvY2F0aW9uOwotICAgIGludCBtX3RleE1hdHJpeExvY2F0aW9uOwotICAgIGludCBt
X3NhbXBsZXJMb2NhdGlvbjsKLSAgICBpbnQgbV9hbHBoYUxvY2F0aW9uOwotICAgIGludCBtX3Bv
c2l0aW9uTG9jYXRpb247Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBUZXhTaGFkZXJfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRl
eHRTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhp
Y3NDb250ZXh0U2tpYS5jcHAKaW5kZXggYjZiNTQzODc3OWFhZmVkODgwYWQwYjRmN2Q4YjliNDJk
YmUyM2NlMi4uZjc4ODc5NjE0MzJjOTMxYzk2ZTQyMDRjMzM1MmIzMWU0YzhmNzQ1YyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRl
eHRTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dy
YXBoaWNzQ29udGV4dFNraWEuY3BwCkBAIC0zNSw3ICszNSw2IEBACiAjaW5jbHVkZSAiQ29sb3Iu
aCIKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJHcmFkaWVudC5oIgotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dEdQVS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dFBsYXRm
b3JtUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgpAQCAtMjQ4LDkgKzI0Nyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzYXZlUGxhdGZv
cm1TdGF0ZSgpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSkKLSAgICAgICAgcGxhdGZvcm1D
b250ZXh0KCktPmdwdUNhbnZhcygpLT5zYXZlKCk7Ci0KICAgICAvLyBTYXZlIG91ciBwcml2YXRl
IFN0YXRlLgogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zYXZlKCk7CiB9CkBAIC0yNjAsOSArMjU2
LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocGxhdGZv
cm1Db250ZXh0KCktPnVzZUdQVSgpKQotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2Fu
dmFzKCktPnJlc3RvcmUoKTsKLQogICAgIC8vIFJlc3RvcmUgb3VyIHByaXZhdGUgU3RhdGUuCiAg
ICAgcGxhdGZvcm1Db250ZXh0KCktPnJlc3RvcmUoKTsKIH0KQEAgLTMwMSw3ICsyOTQsNyBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVj
dCYgcmVjdCwgaW50IHRoaWNrbmVzcwogICAgIGlmICghaXNSZWN0U2tpYVNhZmUoZ2V0Q1RNKCks
IHIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZv
clNvZnR3YXJlRHJhdygpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3Vy
cmVudCgpOwogICAgIFNrUGF0aCBwYXRoOwogICAgIHBhdGguYWRkT3ZhbChyLCBTa1BhdGg6OmtD
V19EaXJlY3Rpb24pOwogICAgIC8vIG9ubHkgcGVyZm9ybSB0aGUgaW5zZXQgaWYgd2Ugd29uJ3Qg
aW52ZXJ0IHIKQEAgLTMyNywxNiArMzIwLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsZWFy
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSAm
JiAhcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhc0NsaXBBcHBsaWVkKCkpIHsKLSAgICAgICAgcGxh
dGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JIYXJkd2FyZURyYXcoKTsKLSAgICAgICAgcGxhdGZv
cm1Db250ZXh0KCktPmdwdUNhbnZhcygpLT5jbGVhclJlY3QocmVjdCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBGb3JjZSBhIHJlYWRiYWNrIGhlcmUgKGlmIHdlJ3JlIHVzaW5n
IHRoZSBHUFUpLCBzaW5jZSBjbGVhclJlY3QoKSBpcwotICAgIC8vIGluY29tcGF0aWJsZSB3aXRo
IG1peGVkLW1vZGUgcmVuZGVyaW5nLgotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zeW5jU29mdHdh
cmVDYW52YXMoKTsKLQogICAgIFNrUmVjdCByID0gcmVjdDsKICAgICBpZiAoIWlzUmVjdFNraWFT
YWZlKGdldENUTSgpLCByKSkKICAgICAgICAgQ2xpcFJlY3RUb0NhbnZhcygqcGxhdGZvcm1Db250
ZXh0KCktPmNhbnZhcygpLCByLCAmcik7CkBAIC0zNTYsNyArMzM5LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmNsaXAoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIGlmICghaXNSZWN0U2tp
YVNhZmUoZ2V0Q1RNKCksIHIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5t
YWtlR3JDb250ZXh0Q3VycmVudCgpOwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+
Y2xpcFJlY3Qocik7CiB9CiAKQEAgLTM2OSw3ICszNTIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6Y2xpcChjb25zdCBQYXRoJiBwYXRoKQogICAgIGlmICghaXNQYXRoU2tpYVNhZmUoZ2V0Q1RN
KCksIHApKQogICAgICAgICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFy
ZUZvclNvZnR3YXJlRHJhdygpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0
Q3VycmVudCgpOwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jbGlwUGF0aEFudGlBbGlhc2VkKHAp
OwogfQogCkBAIC0zNzgsOSArMzYxLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNhbnZhc0Ns
aXAoY29uc3QgUGF0aCYgcGF0aCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgpKQotICAgICAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCktPmNsaXBQYXRoKHBhdGgpOwotCiAgICAg
Y29uc3QgU2tQYXRoJiBwID0gKnBhdGgucGxhdGZvcm1QYXRoKCk7CiAgICAgaWYgKCFpc1BhdGhT
a2lhU2FmZShnZXRDVE0oKSwgcCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQwNSw5ICszODUsNiBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91dChjb25zdCBQYXRoJiBwKQogICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwbGF0Zm9ybUNv
bnRleHQoKS0+dXNlR1BVKCkpCi0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMo
KS0+Y2xpcE91dChwKTsKLQogICAgIGNvbnN0IFNrUGF0aCYgcGF0aCA9ICpwLnBsYXRmb3JtUGF0
aCgpOwogICAgIGlmICghaXNQYXRoU2tpYVNhZmUoZ2V0Q1RNKCksIHBhdGgpKQogICAgICAgICBy
ZXR1cm47CkBAIC00MjAsOSArMzk3LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBQYXRo
KGNvbnN0IFBhdGgmIHBhdGhUb0NsaXAsIFdpbmRSdWxlIGNsaXBSdWxlKQogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwbGF0Zm9ybUNvbnRl
eHQoKS0+dXNlR1BVKCkpCi0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMoKS0+
Y2xpcFBhdGgocGF0aFRvQ2xpcCk7Ci0KICAgICBTa1BhdGggcGF0aCA9ICpwYXRoVG9DbGlwLnBs
YXRmb3JtUGF0aCgpOwogICAgIGlmICghaXNQYXRoU2tpYVNhZmUoZ2V0Q1RNKCksIHBhdGgpKQog
ICAgICAgICByZXR1cm47CkBAIC00MzYsOSArNDEwLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZSkKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0
KCktPnVzZUdQVSgpKQotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCktPmNv
bmNhdENUTShhZmZpbmUpOwotCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5jb25j
YXQoYWZmaW5lKTsKIH0KIApAQCAtNDQ3LDkgKzQxOCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhZmZpbmUpCiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCgp
LT51c2VHUFUoKSkKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmdwdUNhbnZhcygpLT5zZXRD
VE0oYWZmaW5lKTsKLQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+c2V0TWF0cml4
KGFmZmluZSk7CiB9CiAKQEAgLTQ3NSw3ICs0NDMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZHJhd0NvbnZleFBvbHlnb24oc2l6ZV90IG51bVBvaW50cywKICAgICBpZiAobnVtUG9pbnRzIDw9
IDEpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9y
U29mdHdhcmVEcmF3KCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPm1ha2VHckNvbnRleHRDdXJy
ZW50KCk7CiAKICAgICBTa1BhdGggcGF0aDsKICAgICBzZXRQYXRoRnJvbUNvbnZleFBvaW50cygm
cGF0aCwgbnVtUG9pbnRzLCBwb2ludHMpOwpAQCAtNTE3LDcgKzQ4NSw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBJbnRSZWN0JiBlbGlwc2VSZWN0KQogICAgIGlm
ICghaXNSZWN0U2tpYVNhZmUoZ2V0Q1RNKCksIHJlY3QpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOworICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgpOwogICAgIFNrUGFpbnQgcGFpbnQ7
CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JGaWxsaW5nKCZwYWludCk7CiAg
ICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5kcmF3T3ZhbChyZWN0LCBwYWludCk7CkBA
IC01NzQsNyArNTQyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcoY29u
c3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHdpZHRoLCBpbnQKICAgICBpZiAoIXJlY3RD
b3VudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVG
b3JTb2Z0d2FyZURyYXcoKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bWFrZUdyQ29udGV4dEN1
cnJlbnQoKTsKICAgICBTa1JlZ2lvbiBmb2N1c1JpbmdSZWdpb247CiAgICAgY29uc3QgU2tTY2Fs
YXIgZm9jdXNSaW5nT3V0c2V0ID0gZ2V0Rm9jdXNSaW5nT3V0c2V0KHdpZHRoKTsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVjdENvdW50OyBpKyspIHsKQEAgLTYwOSw3ICs1NzcsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50UG9pbnQmIHBvaW50MSwg
Y29uc3QgSW50UG9pbnQmIHBvaW50MikKICAgICBpZiAoIWlzUG9pbnRTa2lhU2FmZShnZXRDVE0o
KSwgcG9pbnQxKSB8fCAhaXNQb2ludFNraWFTYWZlKGdldENUTSgpLCBwb2ludDIpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJh
dygpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgpOwogCiAg
ICAgRmxvYXRQb2ludCBwMSA9IHBvaW50MTsKICAgICBGbG9hdFBvaW50IHAyID0gcG9pbnQyOwpA
QCAtNjU1LDcgKzYyMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvclRleHRD
aGVja2luZyhjb25zdCBGbG9hdFBvaW50JiBwdCwgZmxvYXQgd2lkdGgsCiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1Db250ZXh0KCkt
PnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bWFrZUdy
Q29udGV4dEN1cnJlbnQoKTsKIAogICAgIC8vIENyZWF0ZSB0aGUgcGF0dGVybiB3ZSdsbCB1c2Ug
dG8gZHJhdyB0aGUgdW5kZXJsaW5lLgogICAgIHN0YXRpYyBTa0JpdG1hcCogbWlzc3BlbGxCaXRt
YXAgPSAwOwpAQCAtNzM3LDcgKzcwNSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGlu
ZUZvclRleHQoY29uc3QgRmxvYXRQb2ludCYgcHQsCiAgICAgaWYgKHdpZHRoIDw9IDApCiAgICAg
ICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVE
cmF3KCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPm1ha2VHckNvbnRleHRDdXJyZW50KCk7CiAK
ICAgICBpbnQgdGhpY2tuZXNzID0gU2tNYXgzMihzdGF0aWNfY2FzdDxpbnQ+KHN0cm9rZVRoaWNr
bmVzcygpKSwgMSk7CiAgICAgU2tSZWN0IHI7CkBAIC03NTksNyArNzI3LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1Db250ZXh0KCkt
PnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bWFrZUdy
Q29udGV4dEN1cnJlbnQoKTsKIAogICAgIFNrUmVjdCByID0gcmVjdDsKICAgICBpZiAoIWlzUmVj
dFNraWFTYWZlKGdldENUTSgpLCByKSkgewpAQCAtNzc1LDE4ICs3NDMsMTEgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGhUb0ZpbGwpCiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRklYTUU6IGFkZCBz
dXBwb3J0IHRvIEdyYXBoaWNzQ29udGV4dEdQVSBmb3IgbW9yZSB0aGFuIGp1c3Qgc29saWQgZmls
bHMuCi0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSAmJiBwbGF0Zm9ybUNvbnRl
eHQoKS0+Y2FuQWNjZWxlcmF0ZSgpKSB7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVw
YXJlRm9ySGFyZHdhcmVEcmF3KCk7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52
YXMoKS0+ZmlsbFBhdGgocGF0aFRvRmlsbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAg
ICBTa1BhdGggcGF0aCA9ICpwYXRoVG9GaWxsLnBsYXRmb3JtUGF0aCgpOwogICAgIGlmICghaXNQ
YXRoU2tpYVNhZmUoZ2V0Q1RNKCksIHBhdGgpKQogICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZv
cm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKKyAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+bWFrZUdyQ29udGV4dEN1cnJlbnQoKTsKIAogICAgIGNvbnN0IEdyYXBoaWNzQ29udGV4
dFN0YXRlJiBzdGF0ZSA9IG1fc3RhdGU7CiAgICAgcGF0aC5zZXRGaWxsVHlwZShzdGF0ZS5maWxs
UnVsZSA9PSBSVUxFX0VWRU5PREQgPwpAQCAtODA5LDE1ICs3NzAsOSBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgICAgICBDbGlwUmVj
dFRvQ2FudmFzKCpwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHIsICZyKTsKICAgICB9CiAK
LSAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgpICYmIHBsYXRmb3JtQ29udGV4dCgp
LT5jYW5BY2NlbGVyYXRlKCkpIHsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVG
b3JIYXJkd2FyZURyYXcoKTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmdwdUNhbnZhcygp
LT5maWxsUmVjdChyZWN0KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQogICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5zYXZlKCk7CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNv
ZnR3YXJlRHJhdygpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVu
dCgpOwogCiAgICAgU2tQYWludCBwYWludDsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQ
YWludEZvckZpbGxpbmcoJnBhaW50KTsKQEAgLTgzMSwxMyArNzg2LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNv
bG9yLCBDb2xvclMKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgpICYmIHBsYXRmb3JtQ29udGV4
dCgpLT5jYW5BY2NlbGVyYXRlKCkpIHsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBh
cmVGb3JIYXJkd2FyZURyYXcoKTsKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmdwdUNhbnZh
cygpLT5maWxsUmVjdChyZWN0LCBjb2xvciwgY29sb3JTcGFjZSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygp
OworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgpOwogCiAgICAg
U2tSZWN0IHIgPSByZWN0OwogICAgIGlmICghaXNSZWN0U2tpYVNhZmUoZ2V0Q1RNKCksIHIpKSB7
CkBAIC04NzEsNyArODIwLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVj
dChjb25zdCBJbnRSZWN0JiByZWN0LAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVE
cmF3KCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPm1ha2VHckNvbnRleHRDdXJyZW50KCk7CiAK
ICAgICBTa1JlY3QgciA9IHJlY3Q7CiAgICAgaWYgKCFpc1JlY3RTa2lhU2FmZShnZXRDVE0oKSwg
cikpCkBAIC05MjIsOSArODcxLDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNjYWxlKGNvbnN0
IEZsb2F0U2l6ZSYgc2l6ZSkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgpKQotICAgICAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCktPnNjYWxlKHNpemUpOwotCiAgICAgcGxhdGZv
cm1Db250ZXh0KCktPmNhbnZhcygpLT5zY2FsZShXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHNpemUu
d2lkdGgoKSksCiAgICAgICAgIFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIoc2l6ZS5oZWlnaHQoKSkp
OwogfQpAQCAtOTM0LDkgKzg4MCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYShm
bG9hdCBhbHBoYSkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgpKQotICAgICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+Z3B1Q2FudmFzKCktPnNldEFscGhhKGFscGhhKTsKLQogICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5zZXRBbHBoYShhbHBoYSk7CiB9CiAKQEAgLTk0NSw5ICs4ODgsNiBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1Db21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRl
T3BlcmF0b3Igb3ApCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSkKLSAgICAgICAgcGxhdGZv
cm1Db250ZXh0KCktPmdwdUNhbnZhcygpLT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOwotCiAg
ICAgcGxhdGZvcm1Db250ZXh0KCktPnNldFhmZXJtb2RlTW9kZShXZWJDb3JlQ29tcG9zaXRlVG9T
a2lhQ29tcG9zaXRlKG9wKSk7CiB9CiAKQEAgLTEwNDAsOSArOTgwLDYgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldFBsYXRmb3JtRmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JT
cGFjZSBjb2xvclMKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgpKQotICAgICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+Z3B1Q2FudmFzKCktPnNldEZpbGxDb2xvcihjb2xvciwgY29sb3JTcGFjZSk7
Ci0KICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0RmlsbENvbG9yKGNvbG9yLnJnYigpKTsKIH0K
IApAQCAtMTA3MCwxNCArMTAwNyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9y
bVNoYWRvdyhjb25zdCBGbG9hdFNpemUmIHNpemUsCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUo
KSkgewotICAgICAgICBHcmFwaGljc0NvbnRleHRHUFUqIGNhbnZhcyA9IHBsYXRmb3JtQ29udGV4
dCgpLT5ncHVDYW52YXMoKTsKLSAgICAgICAgY2FudmFzLT5zZXRTaGFkb3dPZmZzZXQoc2l6ZSk7
Ci0gICAgICAgIGNhbnZhcy0+c2V0U2hhZG93Qmx1cihibHVyRmxvYXQpOwotICAgICAgICBjYW52
YXMtPnNldFNoYWRvd0NvbG9yKGNvbG9yLCBjb2xvclNwYWNlKTsKLSAgICAgICAgY2FudmFzLT5z
ZXRTaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhtX3N0YXRlLnNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1z
KTsKLSAgICB9Ci0KICAgICAvLyBEZXRlY3Qgd2hlbiB0aGVyZSdzIG5vIGVmZmVjdGl2ZSBzaGFk
b3cgYW5kIGNsZWFyIHRoZSBsb29wZXIuCiAgICAgaWYgKCFzaXplLndpZHRoKCkgJiYgIXNpemUu
aGVpZ2h0KCkgJiYgIWJsdXJGbG9hdCkgewogICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0
RHJhd0xvb3BlcigwKTsKQEAgLTEyMTIsNyArMTE0MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzdHJva2VBcmMoY29uc3QgSW50UmVjdCYgciwgaW50IHN0YXJ0QW5nbGUsIGludCBhbmdsZVNw
YW4pCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
cGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKKyAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+bWFrZUdyQ29udGV4dEN1cnJlbnQoKTsKIAogICAgIFNrUGFpbnQgcGFpbnQ7
CiAgICAgU2tSZWN0IG92YWwgPSByOwpAQCAtMTI0NSw3ICsxMTc0LDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZVBhdGgoY29uc3QgUGF0aCYgcGF0aFRvU3Ryb2tlKQogICAgIGlmICgh
aXNQYXRoU2tpYVNhZmUoZ2V0Q1RNKCksIHBhdGgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOworICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgpOwogCiAgICAgU2tQYWludCBwYWludDsK
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvclN0cm9raW5nKCZwYWludCwgMCwg
MCk7CkBAIC0xMjYwLDcgKzExODksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUmVj
dChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0aCkKICAgICBpZiAoIWlzUmVj
dFNraWFTYWZlKGdldENUTSgpLCByZWN0KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZv
cm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKKyAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+bWFrZUdyQ29udGV4dEN1cnJlbnQoKTsKIAogICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAg
cGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygmcGFpbnQsIDAsIDApOwpA
QCAtMTI5MCw5ICsxMjE5LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShmbG9hdCBh
bmdsZUluUmFkaWFucykKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgpKQotICAgICAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCktPnJvdGF0ZShhbmdsZUluUmFkaWFucyk7Ci0KICAg
ICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPnJvdGF0ZShXZWJDb3JlRmxvYXRUb1NrU2Nh
bGFyKAogICAgICAgICBhbmdsZUluUmFkaWFucyAqICgxODAuMGYgLyAzLjE0MTU5MjY1ZikpKTsK
IH0KQEAgLTEzMDIsMjYgKzEyMjgsMTggQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0
ZShmbG9hdCB3LCBmbG9hdCBoKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpCi0gICAgICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMoKS0+dHJhbnNsYXRlKHcsIGgpOwotCiAgICAg
cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT50cmFuc2xhdGUoV2ViQ29yZUZsb2F0VG9Ta1Nj
YWxhcih3KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJD
b3JlRmxvYXRUb1NrU2NhbGFyKGgpKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN5bmNT
b2Z0d2FyZUNhbnZhcygpCi17Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPnN5bmNTb2Z0d2FyZUNh
bnZhcygpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhcmVkR3JhcGhpY3NDb250
ZXh0M0QoU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIqIGZy
YW1lYnVmZmVyLCBjb25zdCBJbnRTaXplJiBzaXplKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBEcmF3
aW5nQnVmZmVyKiBmcmFtZWJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKIHsKICAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+c2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoY29udGV4dCwgZnJhbWVi
dWZmZXIsIHNpemUpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6bWFya0RpcnR5UmVjdChj
b25zdCBJbnRSZWN0JiByZWN0KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OnN5bmNTb2Z0d2FyZUNh
bnZhcygpCiB7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPm1hcmtEaXJ0eVJlY3QocmVjdCk7Cisg
ICAgcGxhdGZvcm1Db250ZXh0KCktPm1ha2VHckNvbnRleHRDdXJyZW50KCk7CiB9CiAKICNpZiBQ
TEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCmluZGV4IGI5
YTgyNTlkMjE2ZmM3YjkzOTJiODg0ZTk3Nzg2ODk3YWNlZDY2MjYuLmMxOTc4YTFiZDhlZGVmOTM3
NDVkZDIyOGQ5N2Q3ODE4NzBiZjY1N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKQEAgLTM4LDcgKzM4
LDYgQEAKICNpbmNsdWRlICJCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYS5oIgogI2luY2x1ZGUg
IkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRl
ICJHcmFwaGljc0NvbnRleHRHUFUuaCIKICNpbmNsdWRlICJJbWFnZURhdGEuaCIKICNpbmNsdWRl
ICJKUEVHSW1hZ2VFbmNvZGVyLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgpAQCAt
MTA1LDcgKzEwNCw3IEBAIGJvb2wgSW1hZ2VCdWZmZXI6OmRyYXdzVXNpbmdDb3B5KCkgY29uc3QK
IAogUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXI6OmNvcHlJbWFnZSgpIGNvbnN0CiB7Ci0g
ICAgbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+c3luY1NvZnR3YXJlQ2FudmFzKCk7Cisg
ICAgbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+bWFrZUdyQ29udGV4dEN1cnJlbnQoKTsK
ICAgICByZXR1cm4gQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0ZSgqbV9kYXRhLm1f
cGxhdGZvcm1Db250ZXh0LmJpdG1hcCgpLCB0cnVlKTsKIH0KIApAQCAtMTE3LDIyICsxMTYsNiBA
QCB2b2lkIEltYWdlQnVmZmVyOjpjbGlwKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RmxvYXRSZWN0JiByZWN0KSBjb25zdAogdm9pZCBJbWFnZUJ1ZmZlcjo6ZHJhdyhHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBjb25zdCBGbG9hdFJl
Y3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBib29sIHVzZUxvd1F1YWxpdHlTY2FsZSkKIHsK
LSAgICBpZiAobV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LnVzZUdQVSgpICYmIGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSkgewotICAgICAgICBpZiAoY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCktPmNhbkFjY2VsZXJhdGUoKSkgewotICAgICAgICAgICAgbV9kYXRhLm1fcGxh
dGZvcm1Db250ZXh0LnByZXBhcmVGb3JIYXJkd2FyZURyYXcoKTsKLSAgICAgICAgICAgIERyYXdp
bmdCdWZmZXIqIHNvdXJjZURyYXdpbmdCdWZmZXIgPSBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQu
Z3B1Q2FudmFzKCktPmRyYXdpbmdCdWZmZXIoKTsKLSAgICAgICAgICAgIHVuc2lnbmVkIHNvdXJj
ZVRleHR1cmUgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc291cmNlRHJhd2luZ0J1ZmZlci0+cGxh
dGZvcm1Db2xvckJ1ZmZlcigpKTsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBkZXN0UmVjdE5vcm1h
bGl6ZWQobm9ybWFsaXplUmVjdChkZXN0UmVjdCkpOwotICAgICAgICAgICAgRmxvYXRSZWN0IHNy
Y1JlY3RGbGlwcGVkKG5vcm1hbGl6ZVJlY3Qoc3JjUmVjdCkpOwotICAgICAgICAgICAgc3JjUmVj
dEZsaXBwZWQuc2V0WShtX3NpemUuaGVpZ2h0KCkgLSBzcmNSZWN0LnkoKSk7Ci0gICAgICAgICAg
ICBzcmNSZWN0RmxpcHBlZC5zZXRIZWlnaHQoLXNyY1JlY3QuaGVpZ2h0KCkpOwotICAgICAgICAg
ICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JIYXJkd2FyZURyYXcoKTsK
LSAgICAgICAgICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMoKS0+ZHJh
d1RleHR1cmVkUmVjdChzb3VyY2VUZXh0dXJlLCBtX3NpemUsIHNyY1JlY3RGbGlwcGVkLCBkZXN0
UmVjdE5vcm1hbGl6ZWQsIHN0eWxlQ29sb3JTcGFjZSwgb3ApOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC5zeW5jU29mdHdh
cmVDYW52YXMoKTsKLSAgICB9Ci0KICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gQml0bWFwSW1h
Z2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0ZSgqbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LmJpdG1h
cCgpLCBjb250ZXh0ID09IG1fY29udGV4dCk7CiAgICAgY29udGV4dC0+ZHJhd0ltYWdlKGltYWdl
LmdldCgpLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBvcCwgdXNlTG93UXVh
bGl0eVNjYWxlKTsKIH0KQEAgLTI1NiwxMyArMjM5LDEzIEBAIFBhc3NSZWZQdHI8Qnl0ZUFycmF5
PiBnZXRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCwgU2tEZXZpY2UmIHNyY0RldmljZSwK
IAogUGFzc1JlZlB0cjxCeXRlQXJyYXk+IEltYWdlQnVmZmVyOjpnZXRVbm11bHRpcGxpZWRJbWFn
ZURhdGEoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKLSAgICBjb250ZXh0KCktPnBsYXRm
b3JtQ29udGV4dCgpLT5zeW5jU29mdHdhcmVDYW52YXMoKTsKKyAgICBtX2NvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgpOwogICAgIHJldHVybiBnZXRJbWFn
ZURhdGE8VW5tdWx0aXBsaWVkPihyZWN0LCAqY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y2FudmFzKCktPmdldERldmljZSgpLCBtX3NpemUpOwogfQogCiBQYXNzUmVmUHRyPEJ5dGVBcnJh
eT4gSW1hZ2VCdWZmZXI6OmdldFByZW11bHRpcGxpZWRJbWFnZURhdGEoY29uc3QgSW50UmVjdCYg
cmVjdCkgY29uc3QKIHsKLSAgICBjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5zeW5jU29m
dHdhcmVDYW52YXMoKTsKKyAgICBtX2NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JD
b250ZXh0Q3VycmVudCgpOwogICAgIHJldHVybiBnZXRJbWFnZURhdGE8UHJlbXVsdGlwbGllZD4o
cmVjdCwgKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXREZXZpY2Uo
KSwgbV9zaXplKTsKIH0KIApAQCAtMzM4LDEzICszMjEsMTMgQEAgdm9pZCBwdXRJbWFnZURhdGEo
Qnl0ZUFycmF5KiYgc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRS
ZWN0JgogCiB2b2lkIEltYWdlQnVmZmVyOjpwdXRVbm11bHRpcGxpZWRJbWFnZURhdGEoQnl0ZUFy
cmF5KiBzb3VyY2UsIGNvbnN0IEludFNpemUmIHNvdXJjZVNpemUsIGNvbnN0IEludFJlY3QmIHNv
dXJjZVJlY3QsIGNvbnN0IEludFBvaW50JiBkZXN0UG9pbnQpCiB7Ci0gICAgY29udGV4dCgpLT5w
bGF0Zm9ybUNvbnRleHQoKS0+c3luY1NvZnR3YXJlQ2FudmFzKCk7CisgICAgbV9jb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+bWFrZUdyQ29udGV4dEN1cnJlbnQoKTsKICAgICBwdXRJbWFnZURh
dGE8VW5tdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QsIGRlc3RQb2lu
dCwgY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldERldmljZSgpLCBt
X3NpemUpOwogfQogCiB2b2lkIEltYWdlQnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRh
KEJ5dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRS
ZWN0JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewotICAgIGNvbnRl
eHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPnN5bmNTb2Z0d2FyZUNhbnZhcygpOworICAgIG1fY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPm1ha2VHckNvbnRleHRDdXJyZW50KCk7CiAgICAgcHV0
SW1hZ2VEYXRhPFByZW11bHRpcGxpZWQ+KHNvdXJjZSwgc291cmNlU2l6ZSwgc291cmNlUmVjdCwg
ZGVzdFBvaW50LCBjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0RGV2
aWNlKCksIG1fc2l6ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAppbmRleCBhZGYyOTE5N2IwOGIzZTJhZmZhZjljYzU2
OWU3NzE2NDc4ZTQxMzEyLi41Mzg4OGM5YjNjM2RmMjcwODI4MmUxZGY5NjVjODE5ZDA1MzE1ZmM5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
U2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFn
ZVNraWEuY3BwCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgi
CiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0j
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R1BVLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEu
aCIKQEAgLTQyMywyMiArNDIyLDYgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LAogICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wYWludFNr
UGFpbnQoZGVzdFJlY3QsIHBhaW50KTsKIH0KIAotc3RhdGljIHZvaWQgZHJhd0JpdG1hcEdMRVMy
KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgTmF0aXZlSW1hZ2VTa2lhKiBiaXRtYXAsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNlIHN0
eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3ApCi17Ci0gICAgY3R4
dC0+cGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JIYXJkd2FyZURyYXcoKTsKLSAgICBHcmFw
aGljc0NvbnRleHRHUFUqIGdwdUNhbnZhcyA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5ncHVD
YW52YXMoKTsKLSAgICBUZXh0dXJlKiB0ZXh0dXJlID0gZ3B1Q2FudmFzLT5nZXRUZXh0dXJlKGJp
dG1hcCk7Ci0gICAgaWYgKCF0ZXh0dXJlKSB7Ci0gICAgICAgIEFTU0VSVChiaXRtYXAtPmNvbmZp
ZygpID09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZpZyk7Ci0gICAgICAgIEFTU0VSVChiaXRt
YXAtPnJvd0J5dGVzKCkgPT0gYml0bWFwLT53aWR0aCgpICogNCk7Ci0gICAgICAgIHRleHR1cmUg
PSBncHVDYW52YXMtPmNyZWF0ZVRleHR1cmUoYml0bWFwLCBUZXh0dXJlOjpCR1JBOCwgYml0bWFw
LT53aWR0aCgpLCBiaXRtYXAtPmhlaWdodCgpKTsKLSAgICAgICAgU2tBdXRvTG9ja1BpeGVscyBs
b2NrKCpiaXRtYXApOwotICAgICAgICBBU1NFUlQoYml0bWFwLT5nZXRQaXhlbHMoKSk7Ci0gICAg
ICAgIHRleHR1cmUtPmxvYWQoYml0bWFwLT5nZXRQaXhlbHMoKSk7Ci0gICAgfQotICAgIGdwdUNh
bnZhcy0+ZHJhd1RleHR1cmVkUmVjdCh0ZXh0dXJlLCBzcmNSZWN0LCBkc3RSZWN0LCBzdHlsZUNv
bG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKLX0KLQogLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09CiAvLyBCaXRtYXBJbWFnZSBDbGFzcwogLy8gPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC00OTksMTIgKzQ4
Miw3IEBAIHZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25z
dCBGbG9hdFJlY3QmIGRzdFJlY3QsCiAgICAgaWYgKG5vcm1TcmNSZWN0LmlzRW1wdHkoKSB8fCBu
b3JtRHN0UmVjdC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsgIC8vIE5vdGhpbmcgdG8gZHJh
dy4KIAotICAgIGlmIChjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkgJiYgY3R4dC0+
cGxhdGZvcm1Db250ZXh0KCktPmNhbkFjY2VsZXJhdGUoKSkgewotICAgICAgICBkcmF3Qml0bWFw
R0xFUzIoY3R4dCwgYm0sIG5vcm1TcmNSZWN0LCBub3JtRHN0UmVjdCwgY29sb3JTcGFjZSwgY29t
cG9zaXRlT3ApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgY3R4dC0+cGxhdGZvcm1D
b250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKKyAgICBjdHh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+bWFrZUdyQ29udGV4dEN1cnJlbnQoKTsKIAogICAgIHBhaW50U2tCaXRtYXAoY3R4
dC0+cGxhdGZvcm1Db250ZXh0KCksCiAgICAgICAgICAgICAgICAgICAqYm0sCkBAIC01MjcsMTIg
KzUwNSw3IEBAIHZvaWQgQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWE6OmRyYXcoR3JhcGhpY3ND
b250ZXh0KiBjdHh0LAogICAgIGlmIChub3JtU3JjUmVjdC5pc0VtcHR5KCkgfHwgbm9ybURzdFJl
Y3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47ICAvLyBOb3RoaW5nIHRvIGRyYXcuCiAKLSAg
ICBpZiAoY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgpICYmIGN0eHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5jYW5BY2NlbGVyYXRlKCkpIHsKLSAgICAgICAgZHJhd0JpdG1hcEdMRVMyKGN0
eHQsICZtX25hdGl2ZUltYWdlLCBzcmNSZWN0LCBkc3RSZWN0LCBzdHlsZUNvbG9yU3BhY2UsIGNv
bXBvc2l0ZU9wKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGN0eHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CisgICAgY3R4dC0+cGxhdGZvcm1D
b250ZXh0KCktPm1ha2VHckNvbnRleHRDdXJyZW50KCk7CiAKICAgICBwYWludFNrQml0bWFwKGN0
eHQtPnBsYXRmb3JtQ29udGV4dCgpLAogICAgICAgICAgICAgICAgICAgbV9uYXRpdmVJbWFnZSwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZl
SW1hZ2VTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0
aXZlSW1hZ2VTa2lhLmNwcAppbmRleCA4MTBjYjM4ZDI0MjJiNTYwMjZkNjdmNjI2MzIxMTliYzhi
NDllNjE3Li5mMGY0YWEyMTU3MGMwNWRlN2Q0NDUxMzFhZjE4YTMyNWU5NDliMzBkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUltYWdlU2tp
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJ
bWFnZVNraWEuY3BwCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSAic2tpYS9leHQvaW1hZ2Vf
b3BlcmF0aW9ucy5oIgogCiAjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCi0jaW5jbHVkZSAi
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5o
IgogI2luY2x1ZGUgIlNraWFVdGlscy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Niw3
ICs1Niw2IEBAIE5hdGl2ZUltYWdlU2tpYTo6TmF0aXZlSW1hZ2VTa2lhKGNvbnN0IFNrQml0bWFw
JiBvdGhlcikKIAogTmF0aXZlSW1hZ2VTa2lhOjp+TmF0aXZlSW1hZ2VTa2lhKCkKIHsKLSAgICBT
aGFyZWRHcmFwaGljc0NvbnRleHQzRDo6cmVtb3ZlVGV4dHVyZXNGb3IodGhpcyk7CiB9CiAKIGlu
dCBOYXRpdmVJbWFnZVNraWE6OmRlY29kZWRTaXplKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNr
aWEuY3BwCmluZGV4IDE1MTUwMjdhZDZjOWQyMTkxZjllMTY2MTc4MzJjOTlkY2RiOTEyNWQuLjk5
MWI4N2Q1YjBkZDZmNGQ2M2EzNzkyNjNjMWZlMjg2ZDAzZjFmYjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRl
eHRTa2lhLmNwcApAQCAtNTcsMTEgKzU3LDYgQEAKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9D
QU5WQVMpCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R1BVLmgiCi0jaW5jbHVkZSAiU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0QuaCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGV4
dGVybiBib29sIGlzUGF0aFNraWFTYWZlKGNvbnN0IFNrTWF0cml4JiB0cmFuc2Zvcm0sIGNvbnN0
IFNrUGF0aCYgcGF0aCk7CkBAIC0yMTQsNyArMjA5LDcgQEAgUGxhdGZvcm1Db250ZXh0U2tpYTo6
UGxhdGZvcm1Db250ZXh0U2tpYShTa0NhbnZhcyogY2FudmFzKQogICAgICwgbV9wcmludGluZyhm
YWxzZSkKICAgICAsIG1fZHJhd2luZ1RvSW1hZ2VCdWZmZXIoZmFsc2UpCiAgICAgLCBtX2FjY2Vs
ZXJhdGlvbk1vZGUoTm9BY2NlbGVyYXRpb24pCi0gICAgLCBtX2JhY2tpbmdTdG9yZVN0YXRlKE5v
bmUpCisgICAgLCBtX2dwdUNvbnRleHQoMCkKIHsKICAgICBtX3N0YXRlU3RhY2suYXBwZW5kKFN0
YXRlKCkpOwogICAgIG1fc3RhdGUgPSAmbV9zdGF0ZVN0YWNrLmxhc3QoKTsKQEAgLTIyMiwxNyAr
MjE3LDYgQEAgUGxhdGZvcm1Db250ZXh0U2tpYTo6UGxhdGZvcm1Db250ZXh0U2tpYShTa0NhbnZh
cyogY2FudmFzKQogCiBQbGF0Zm9ybUNvbnRleHRTa2lhOjp+UGxhdGZvcm1Db250ZXh0U2tpYSgp
CiB7Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICBpZiAobV9ncHVDYW52
YXMpIHsKLSAgICAgICAgLy8gbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byB0aGlzIHBs
YXRmb3JtIGNvbnRleHQgaGFzIGJlZW4gZmx1c2hlZAotICAgICAgICBpZiAodXNlU2tpYUdQVSgp
KSB7Ci0gICAgICAgICAgICBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCA9IG1fZ3B1
Q2FudmFzLT5jb250ZXh0KCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmdyQ29udGV4dCgpLT5mbHVzaCgwKTsKLSAgICAg
ICAgfQotICAgICAgICBtX2dwdUNhbnZhcy0+ZHJhd2luZ0J1ZmZlcigpLT5zZXRXaWxsUHVibGlz
aENhbGxiYWNrKG51bGxwdHIpOwotICAgIH0KLSNlbmRpZgogfQogCiB2b2lkIFBsYXRmb3JtQ29u
dGV4dFNraWE6OnNldENhbnZhcyhTa0NhbnZhcyogY2FudmFzKQpAQCAtNzA0LDQzICs2ODgsMTkg
QEAgYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpjYW52YXNDbGlwQXBwbGllZCgpIGNvbnN0CiAg
ICAgcmV0dXJuIG1fc3RhdGUtPm1fY2FudmFzQ2xpcEFwcGxpZWQ7CiB9CiAKLWNsYXNzIFdpbGxQ
dWJsaXNoQ2FsbGJhY2tJbXBsIDogcHVibGljIERyYXdpbmdCdWZmZXI6OldpbGxQdWJsaXNoQ2Fs
bGJhY2sgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3duUHRyPFdpbGxQdWJsaXNoQ2FsbGJh
Y2s+IGNyZWF0ZShQbGF0Zm9ybUNvbnRleHRTa2lhKiBwY3MpCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRQdHIobmV3IFdpbGxQdWJsaXNoQ2FsbGJhY2tJbXBsKHBjcykpOwotICAgIH0KLQot
ICAgIHZpcnR1YWwgdm9pZCB3aWxsUHVibGlzaCgpCi0gICAgewotICAgICAgICBtX3Bjcy0+cHJl
cGFyZUZvckhhcmR3YXJlRHJhdygpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBX
aWxsUHVibGlzaENhbGxiYWNrSW1wbChQbGF0Zm9ybUNvbnRleHRTa2lhKiBwY3MpCi0gICAgICAg
IDogbV9wY3MocGNzKQotICAgIHsKLSAgICB9Ci0KLSAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKiBt
X3BjczsKLX07Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0U2hhcmVkR3JhcGhpY3ND
b250ZXh0M0QoU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIERyYXdpbmdCdWZmZXIq
IGRyYXdpbmdCdWZmZXIsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHNpemUpCit2b2lkIFBsYXRm
b3JtQ29udGV4dFNraWE6OnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyLCBjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBzaXplKQogewogICAgIG1fYWNjZWxlcmF0aW9uTW9kZSA9IE5vQWNjZWxlcmF0
aW9uOworICAgIG1fZ3B1Q29udGV4dCA9IGNvbnRleHQ7CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykKICAgICBpZiAoY29udGV4dCAmJiBkcmF3aW5nQnVmZmVyKSB7Ci0gICAgICAg
IG1fZ3B1Q2FudmFzID0gYWRvcHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dEdQVShjb250ZXh0LCBk
cmF3aW5nQnVmZmVyLCBzaXplKSk7Ci0gICAgICAgIG1fdXBsb2FkVGV4dHVyZS5jbGVhcigpOwot
ICAgICAgICBkcmF3aW5nQnVmZmVyLT5zZXRXaWxsUHVibGlzaENhbGxiYWNrKFdpbGxQdWJsaXNo
Q2FsbGJhY2tJbXBsOjpjcmVhdGUodGhpcykpOwotCiAgICAgICAgIC8vIHVzZSBza2lhIGdwdSBy
ZW5kZXJpbmcgaWYgYXZhaWxhYmxlCiAgICAgICAgIEdyQ29udGV4dCogZ3IgPSBjb250ZXh0LT5n
ckNvbnRleHQoKTsKICAgICAgICAgaWYgKGdyKSB7CiAgICAgICAgICAgICBtX2FjY2VsZXJhdGlv
bk1vZGUgPSBTa2lhR1BVOwogCiAgICAgICAgICAgICBjb250ZXh0LT5tYWtlQ29udGV4dEN1cnJl
bnQoKTsKLSAgICAgICAgICAgIG1fZ3B1Q2FudmFzLT5iaW5kRnJhbWVidWZmZXIoKTsKKyAgICAg
ICAgICAgIGRyYXdpbmdCdWZmZXItPmJpbmQoKTsKIAogICAgICAgICAgICAgZ3ItPnJlc2V0Q29u
dGV4dCgpOwogICAgICAgICAgICAgZHJhd2luZ0J1ZmZlci0+c2V0R3JDb250ZXh0KGdyKTsKQEAg
LTc1MCwxNjAgKzcxMCwxNSBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBjbwogICAgICAgICAgICAg
U2tBdXRvVFVucmVmPEdyVGV4dHVyZT4gZHJhd0J1ZlRleChzdGF0aWNfY2FzdDxHclRleHR1cmUq
Pihnci0+Y3JlYXRlUGxhdGZvcm1TdXJmYWNlKGRyYXdCdWZEZXNjKSkpOwogICAgICAgICAgICAg
bV9jYW52YXMtPnNldERldmljZShuZXcgU2tHcHVEZXZpY2UoZ3IsIGRyYXdCdWZUZXguZ2V0KCkp
KS0+dW5yZWYoKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2FjY2VsZXJhdGlvbk1v
ZGUgPSBHUFU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3luY1NvZnR3YXJlQ2FudmFzKCk7Ci0g
ICAgICAgIG1fdXBsb2FkVGV4dHVyZS5jbGVhcigpOwotICAgICAgICBtX2dwdUNhbnZhcy5jbGVh
cigpOworICAgICAgICAgICAgbV9ncHVDb250ZXh0ID0gMDsKICAgICB9CiAjZW5kaWYKIH0KIAot
dm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpwcmVwYXJlRm9yU29mdHdhcmVEcmF3KCkgY29uc3QK
K3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6bWFrZUdyQ29udGV4dEN1cnJlbnQoKQogewotICAg
IGlmIChtX2FjY2VsZXJhdGlvbk1vZGUgPT0gU2tpYUdQVSkgewotI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCi0gICAgICAgIGlmIChtX2dwdUNhbnZhcykKLSAgICAgICAgICAgIG1f
Z3B1Q2FudmFzLT5jb250ZXh0KCktPm1ha2VDb250ZXh0Q3VycmVudCgpOwotI2VuZGlmCi0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9iYWNraW5nU3RvcmVTdGF0ZSA9PSBIYXJk
d2FyZSkgewotICAgICAgICAvLyBEZXBlbmRpbmcgb24gdGhlIGJsZW5kIG1vZGUgd2UgbmVlZCB0
byBkbyBvbmUgb2YgYSBmZXcgdGhpbmdzOgotCi0gICAgICAgIC8vICogRm9yIGFzc29jaWF0aXZl
IGJsZW5kIG1vZGVzLCB3ZSBjYW4gZHJhdyBpbnRvIGFuIGluaXRpYWxseSBlbXB0eQotICAgICAg
ICAvLyBjYW52YXMgYW5kIHRoZW4gY29tcG9zaXRlIHRoZSByZXN1bHRzIG9uIHRvcCBvZiB0aGUg
aGFyZHdhcmUgZHJhd24KLSAgICAgICAgLy8gcmVzdWx0cyBiZWZvcmUgdGhlIG5leHQgaGFyZHdh
cmUgZHJhdyBvciBzd2FwQnVmZmVycygpLgotCi0gICAgICAgIC8vICogRm9yIG5vbi1hc3NvY2lh
dGl2ZSBibGVuZCBtb2RlcyB3ZSBoYXZlIHRvIGRvIGEgcmVhZGJhY2sgYW5kIHRoZW4KLSAgICAg
ICAgLy8gc29mdHdhcmUgZHJhdy4gIFdoZW4gd2UgcmUtdXBsb2FkIGluIHRoaXMgbW9kZSB3ZSBo
YXZlIHRvIGJsb3cKLSAgICAgICAgLy8gYXdheSB3aGF0ZXZlciBpcyBpbiB0aGUgaGFyZHdhcmUg
YmFja2luZyBzdG9yZSAoZG8gYSBjb3B5IGluc3RlYWQKLSAgICAgICAgLy8gb2YgYSBjb21wb3Np
dGluZyBvcGVyYXRpb24pLgotCi0gICAgICAgIGlmIChtX3N0YXRlLT5tX3hmZXJNb2RlID09IFNr
WGZlcm1vZGU6OmtTcmNPdmVyX01vZGUpIHsKLSAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBo
YXZlIHJlbmRlcmluZyByZXN1bHRzIGluIGJvdGggdGhlIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBi
YWNraW5nIHN0b3Jlcy4KLSAgICAgICAgICAgIG1fYmFja2luZ1N0b3JlU3RhdGUgPSBNaXhlZDsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlYWRiYWNrSGFyZHdhcmVUb1NvZnR3YXJl
KCk7Ci0gICAgICAgICAgICAvLyBXaGVuIHdlIHN3aXRjaCBiYWNrIHRvIGhhcmR3YXJlIGNvcHkg
dGhlIHJlc3VsdHMsIGRvbid0IGNvbXBvc2l0ZS4KLSAgICAgICAgICAgIG1fYmFja2luZ1N0b3Jl
U3RhdGUgPSBTb2Z0d2FyZTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAobV9iYWNraW5nU3Rv
cmVTdGF0ZSA9PSBNaXhlZCkgewotICAgICAgICBpZiAobV9zdGF0ZS0+bV94ZmVyTW9kZSAhPSBT
a1hmZXJtb2RlOjprU3JjT3Zlcl9Nb2RlKSB7Ci0gICAgICAgICAgICAvLyBIYXZlIHRvIGNvbXBv
c2l0ZSBvdXIgY3VycmVudGx5IHNvZnR3YXJlIGRyYXduIGRhdGEuLi4KLSAgICAgICAgICAgIHVw
bG9hZFNvZnR3YXJlVG9IYXJkd2FyZShDb21wb3NpdGVTb3VyY2VPdmVyKTsKLSAgICAgICAgICAg
IC8vIHRoZW4gZG8gYSByZWFkYmFjayBzbyB3ZSBjYW4gaGFyZHdhcmUgZHJhdyBzdHVmZi4KLSAg
ICAgICAgICAgIHJlYWRiYWNrSGFyZHdhcmVUb1NvZnR3YXJlKCk7Ci0gICAgICAgICAgICBtX2Jh
Y2tpbmdTdG9yZVN0YXRlID0gU29mdHdhcmU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1f
YmFja2luZ1N0b3JlU3RhdGUgPT0gTm9uZSkgewotICAgICAgICBtX2JhY2tpbmdTdG9yZVN0YXRl
ID0gU29mdHdhcmU7Ci0gICAgfQotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnByZXBh
cmVGb3JIYXJkd2FyZURyYXcoKSBjb25zdAotewotICAgIGlmICghKG1fYWNjZWxlcmF0aW9uTW9k
ZSA9PSBHUFUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9iYWNraW5nU3RvcmVTdGF0
ZSA9PSBTb2Z0d2FyZSkgewotICAgICAgICAvLyBMYXN0IGRyYXduIGluIHNvZnR3YXJlOyB1cGxv
YWQgZXZlcnl0aGluZyB3ZSd2ZSBkcmF3bi4KLSAgICAgICAgdXBsb2FkU29mdHdhcmVUb0hhcmR3
YXJlKENvbXBvc2l0ZUNvcHkpOwotICAgIH0gZWxzZSBpZiAobV9iYWNraW5nU3RvcmVTdGF0ZSA9
PSBNaXhlZCkgewotICAgICAgICAvLyBTdHVmZiBpbiBzb2Z0d2FyZS9oYXJkd2FyZSwgY29tcG9z
aXRlIHRoZSBzb2Z0d2FyZSBzdHVmZiBvbiB0b3Agb2YKLSAgICAgICAgLy8gdGhlIGhhcmR3YXJl
IHN0dWZmLgotICAgICAgICB1cGxvYWRTb2Z0d2FyZVRvSGFyZHdhcmUoQ29tcG9zaXRlU291cmNl
T3Zlcik7Ci0gICAgfQotICAgIG1fYmFja2luZ1N0b3JlU3RhdGUgPSBIYXJkd2FyZTsKLX0KLQot
dm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzeW5jU29mdHdhcmVDYW52YXMoKSBjb25zdAotewot
ICAgIGlmIChtX2FjY2VsZXJhdGlvbk1vZGUgPT0gU2tpYUdQVSkgewotI2lmIEVOQUJMRShBQ0NF
TEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgICAgIGlmIChtX2dwdUNhbnZhcykKLSAgICAgICAgICAg
IG1fZ3B1Q2FudmFzLT5jb250ZXh0KCktPm1ha2VDb250ZXh0Q3VycmVudCgpOwotI2VuZGlmCi0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAobV9iYWNraW5nU3RvcmVTdGF0ZSA9PSBI
YXJkd2FyZSkKLSAgICAgICAgcmVhZGJhY2tIYXJkd2FyZVRvU29mdHdhcmUoKTsKLSAgICBlbHNl
IGlmIChtX2JhY2tpbmdTdG9yZVN0YXRlID09IE1peGVkKSB7Ci0gICAgICAgIC8vIEhhdmUgdG8g
Y29tcG9zaXRlIG91ciBjdXJyZW50bHkgc29mdHdhcmUgZHJhd24gZGF0YS4uCi0gICAgICAgIHVw
bG9hZFNvZnR3YXJlVG9IYXJkd2FyZShDb21wb3NpdGVTb3VyY2VPdmVyKTsKLSAgICAgICAgLy8g
dGhlbiBkbyBhIHJlYWRiYWNrLgotICAgICAgICByZWFkYmFja0hhcmR3YXJlVG9Tb2Z0d2FyZSgp
OwotICAgICAgICBtX2JhY2tpbmdTdG9yZVN0YXRlID0gU29mdHdhcmU7Ci0gICAgfQotICAgIG1f
YmFja2luZ1N0b3JlU3RhdGUgPSBTb2Z0d2FyZTsKLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHRT
a2lhOjptYXJrRGlydHlSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgaWYgKG1fYWNj
ZWxlcmF0aW9uTW9kZSAhPSBHUFUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN3aXRjaCAobV9i
YWNraW5nU3RvcmVTdGF0ZSkgewotICAgIGNhc2UgU29mdHdhcmU6Ci0gICAgY2FzZSBNaXhlZDoK
LSAgICAgICAgbV9zb2Z0d2FyZURpcnR5UmVjdC51bml0ZShyZWN0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgSGFyZHdhcmU6Ci0gICAgICAgIHJldHVybjsKLSAgICBkZWZhdWx0OgotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250
ZXh0U2tpYTo6dXBsb2FkU29mdHdhcmVUb0hhcmR3YXJlKENvbXBvc2l0ZU9wZXJhdG9yIG9wKSBj
b25zdAotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgY29uc3QgU2tC
aXRtYXAmIGJpdG1hcCA9IG1fY2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNl
KTsKLSAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soYml0bWFwKTsKLSAgICBTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCA9IG1fZ3B1Q2FudmFzLT5jb250ZXh0KCk7Ci0gICAgaWYgKCFt
X3VwbG9hZFRleHR1cmUgfHwgbV91cGxvYWRUZXh0dXJlLT50aWxlcygpLnRvdGFsU2l6ZVgoKSA8
IGJpdG1hcC53aWR0aCgpIHx8IG1fdXBsb2FkVGV4dHVyZS0+dGlsZXMoKS50b3RhbFNpemVZKCkg
PCBiaXRtYXAuaGVpZ2h0KCkpCi0gICAgICAgIG1fdXBsb2FkVGV4dHVyZSA9IGNvbnRleHQtPmNy
ZWF0ZVRleHR1cmUoVGV4dHVyZTo6QkdSQTgsIGJpdG1hcC53aWR0aCgpLCBiaXRtYXAuaGVpZ2h0
KCkpOwotCi0gICAgbV91cGxvYWRUZXh0dXJlLT51cGRhdGVTdWJSZWN0KGJpdG1hcC5nZXRQaXhl
bHMoKSwgbV9zb2Z0d2FyZURpcnR5UmVjdCk7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIGlkZW50aXR5
OwotICAgIGdwdUNhbnZhcygpLT5kcmF3VGV4dHVyZWRSZWN0KG1fdXBsb2FkVGV4dHVyZS5nZXQo
KSwgbV9zb2Z0d2FyZURpcnR5UmVjdCwgbV9zb2Z0d2FyZURpcnR5UmVjdCwgaWRlbnRpdHksIDEu
MCwgQ29sb3JTcGFjZURldmljZVJHQiwgb3AsIGZhbHNlKTsKLSAgICAvLyBDbGVhciBvdXQgdGhl
IHJlZ2lvbiBvZiB0aGUgc29mdHdhcmUgY2FudmFzIHdlIGp1c3QgdXBsb2FkZWQuCi0gICAgbV9j
YW52YXMtPnNhdmUoKTsKLSAgICBtX2NhbnZhcy0+cmVzZXRNYXRyaXgoKTsKLSAgICBTa1JlY3Qg
Ym91bmRzID0gbV9zb2Z0d2FyZURpcnR5UmVjdDsKLSAgICBtX2NhbnZhcy0+Y2xpcFJlY3QoYm91
bmRzLCBTa1JlZ2lvbjo6a1JlcGxhY2VfT3ApOwotICAgIG1fY2FudmFzLT5kcmF3QVJHQigwLCAw
LCAwLCAwLCBTa1hmZXJtb2RlOjprQ2xlYXJfTW9kZSk7Ci0gICAgbV9jYW52YXMtPnJlc3RvcmUo
KTsKLSAgICBtX3NvZnR3YXJlRGlydHlSZWN0LnNldFdpZHRoKDApOyAvLyBDbGVhciBkaXJ0eSBy
ZWN0LgotI2VuZGlmCi19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6cmVhZGJhY2tIYXJk
d2FyZVRvU29mdHdhcmUoKSBjb25zdAotewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5W
QVMpCi0gICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IG1fY2FudmFzLT5nZXREZXZpY2UoKS0+
YWNjZXNzQml0bWFwKHRydWUpOwotICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9jayhiaXRtYXApOwot
ICAgIGludCB3aWR0aCA9IGJpdG1hcC53aWR0aCgpLCBoZWlnaHQgPSBiaXRtYXAuaGVpZ2h0KCk7
Ci0gICAgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2dwdUNhbnZhcy0+Y29u
dGV4dCgpOwotICAgIG1fZ3B1Q2FudmFzLT5iaW5kRnJhbWVidWZmZXIoKTsKLSAgICAvLyBGbGlw
cyB0aGUgaW1hZ2UgdmVydGljYWxseS4KLSAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsg
Kyt5KSB7Ci0gICAgICAgIHVpbnQzMl90KiBwaXhlbHMgPSBiaXRtYXAuZ2V0QWRkcjMyKDAsIHkp
OwotICAgICAgICBpZiAoY29udGV4dC0+c3VwcG9ydHNCR1JBKCkpCi0gICAgICAgICAgICBjb250
ZXh0LT5yZWFkUGl4ZWxzKDAsIGhlaWdodCAtIDEgLSB5LCB3aWR0aCwgMSwgRXh0ZW5zaW9uczNE
OjpCR1JBX0VYVCwgR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUsIHBpeGVscyk7Ci0g
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgY29udGV4dC0+cmVhZFBpeGVscygwLCBoZWlnaHQg
LSAxIC0geSwgd2lkdGgsIDEsIEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBLCBHcmFwaGljc0NvbnRl
eHQzRDo6VU5TSUdORURfQllURSwgcGl4ZWxzKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgd2lkdGg7ICsraSkgewotICAgICAgICAgICAgICAgIHVpbnQzMl90IHBpeGVsID0gcGl4
ZWxzW2ldOwotICAgICAgICAgICAgICAgIC8vIFN3aXp6bGVzIGZyb20gUkdCQSAtPiBCR1JBLgot
ICAgICAgICAgICAgICAgIHBpeGVsc1tpXSA9IChwaXhlbCAmIDB4RkYwMEZGMDApIHwgKChwaXhl
bCAmIDB4MDBGRjAwMDApID4+IDE2KSB8ICgocGl4ZWwgJiAweDAwMDAwMEZGKSA8PCAxNik7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbV9zb2Z0d2FyZURpcnR5UmVjdC51
bml0ZShJbnRSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpKTsgLy8gTWFyayBldmVyeXRoaW5nIGFz
IGRpcnR5LgotI2VuZGlmCisgICAgaWYgKG1fZ3B1Q29udGV4dCkKKyAgICAgICAgbV9ncHVDb250
ZXh0LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9y
bUNvbnRleHRTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuaAppbmRleCBjYTQ1MTlhOWMxNWFmNzQzM2ZkMzBlNjhkODY0MGE4
ZDEzNjk0YzViLi40ZmVhN2VkZmNjNDE5Zjk0ODU2NmQ0MTMwZTE0ODVmZTJlZTJlNjcwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29u
dGV4dFNraWEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuaApAQCAtNDcsNyArNDcsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBlbnVtIENvbXBvc2l0ZU9wZXJhdG9yOwogY2xhc3MgRHJhd2luZ0J1ZmZlcjsKIGNsYXNzIEdy
YXBoaWNzQ29udGV4dDNEOwotY2xhc3MgR3JhcGhpY3NDb250ZXh0R1BVOwogY2xhc3MgVGV4dHVy
ZTsKIAogLy8gVGhpcyBjbGFzcyBob2xkcyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgc3RhdGUgZm9y
IEdyYXBoaWNzQ29udGV4dC4gV2UgcHV0CkBAIC03Miw3ICs3MSw2IEBAIGNsYXNzIFBsYXRmb3Jt
Q29udGV4dFNraWEgewogcHVibGljOgogICAgIGVudW0gQWNjZWxlcmF0aW9uTW9kZSB7CiAgICAg
ICAgIE5vQWNjZWxlcmF0aW9uLAotICAgICAgICBHUFUsCiAgICAgICAgIFNraWFHUFUKICAgICB9
OwogCkBAIC0xODUsMjEgKzE4Myw5IEBAIHB1YmxpYzoKICAgICBib29sIGNhbkFjY2VsZXJhdGUo
KSBjb25zdDsKICAgICBib29sIGNhbnZhc0NsaXBBcHBsaWVkKCkgY29uc3Q7CiAgICAgQWNjZWxl
cmF0aW9uTW9kZSBhY2NlbGVyYXRpb25Nb2RlKCkgY29uc3QgeyByZXR1cm4gbV9hY2NlbGVyYXRp
b25Nb2RlOyB9Ci0gICAgYm9vbCB1c2VHUFUoKSBjb25zdCB7IHJldHVybiBtX2FjY2VsZXJhdGlv
bk1vZGUgPT0gR1BVOyB9CiAgICAgYm9vbCB1c2VTa2lhR1BVKCkgY29uc3QgeyByZXR1cm4gbV9h
Y2NlbGVyYXRpb25Nb2RlID09IFNraWFHUFU7IH0KLSAgICB2b2lkIHNldFNoYXJlZEdyYXBoaWNz
Q29udGV4dDNEKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiwgRHJhd2luZ0J1ZmZlciosIGNvbnN0
IEludFNpemUmKTsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIEdyYXBo
aWNzQ29udGV4dEdQVSogZ3B1Q2FudmFzKCkgY29uc3QgeyByZXR1cm4gbV9ncHVDYW52YXMuZ2V0
KCk7IH0KLSNlbHNlCi0gICAgR3JhcGhpY3NDb250ZXh0R1BVKiBncHVDYW52YXMoKSBjb25zdCB7
IHJldHVybiAwOyB9Ci0jZW5kaWYKLSAgICAvLyBDYWxsIHRoZXNlIGJlZm9yZSBtYWtpbmcgYSBj
YWxsIHRoYXQgbWFuaXB1bGF0ZXMgdGhlIHVuZGVybHlpbmcKLSAgICAvLyBTa0NhbnZhcyBvciBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHRHUFUKLSAgICB2b2lkIHByZXBhcmVGb3JTb2Z0d2FyZURy
YXcoKSBjb25zdDsKLSAgICB2b2lkIHByZXBhcmVGb3JIYXJkd2FyZURyYXcoKSBjb25zdDsKLSAg
ICAvLyBDYWxsIHRvIGZvcmNlIHRoZSBTa0NhbnZhcyB0byBjb250YWluIGFsbCByZW5kZXJpbmcg
cmVzdWx0cy4KLSAgICB2b2lkIHN5bmNTb2Z0d2FyZUNhbnZhcygpIGNvbnN0OwotICAgIHZvaWQg
bWFya0RpcnR5UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KTsKKyAgICB2b2lkIHNldFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEKiwgRHJhd2luZ0J1ZmZlciosIGNvbnN0
IEludFNpemUmKTsKKyAgICB2b2lkIG1ha2VHckNvbnRleHRDdXJyZW50KCk7CiAKIHByaXZhdGU6
CiAgICAgLy8gVXNlZCB3aGVuIHJlc3RvcmluZyBhbmQgdGhlIHN0YXRlIGhhcyBhbiBpbWFnZSBj
bGlwLiBPbmx5IHNob3dzIHRoZSBwaXhlbHMgaW4KQEAgLTIwNyw5ICsxOTMsNiBAQCBwcml2YXRl
OgogICAgIHZvaWQgYXBwbHlDbGlwRnJvbUltYWdlKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IFNr
Qml0bWFwJik7CiAgICAgdm9pZCBhcHBseUFudGlBbGlhc2VkQ2xpcFBhdGhzKFdURjo6VmVjdG9y
PFNrUGF0aD4mIHBhdGhzKTsKIAotICAgIHZvaWQgdXBsb2FkU29mdHdhcmVUb0hhcmR3YXJlKENv
bXBvc2l0ZU9wZXJhdG9yKSBjb25zdDsKLSAgICB2b2lkIHJlYWRiYWNrSGFyZHdhcmVUb1NvZnR3
YXJlKCkgY29uc3Q7Ci0KICAgICAvLyBEZWZpbmVzIGRyYXdpbmcgc3R5bGUuCiAgICAgc3RydWN0
IFN0YXRlOwogCkBAIC0yMzAsMTIgKzIxMyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3ByaW50
aW5nOwogICAgIGJvb2wgbV9kcmF3aW5nVG9JbWFnZUJ1ZmZlcjsKICAgICBBY2NlbGVyYXRpb25N
b2RlIG1fYWNjZWxlcmF0aW9uTW9kZTsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KQotICAgIE93blB0cjxHcmFwaGljc0NvbnRleHRHUFU+IG1fZ3B1Q2FudmFzOwotICAgIG11dGFi
bGUgUmVmUHRyPFRleHR1cmU+IG1fdXBsb2FkVGV4dHVyZTsKLSNlbmRpZgotICAgIG11dGFibGUg
ZW51bSB7IE5vbmUsIFNvZnR3YXJlLCBNaXhlZCwgSGFyZHdhcmUgfSBtX2JhY2tpbmdTdG9yZVN0
YXRlOwotICAgIG11dGFibGUgSW50UmVjdCBtX3NvZnR3YXJlRGlydHlSZWN0OworICAgIEdyYXBo
aWNzQ29udGV4dDNEKiBtX2dwdUNvbnRleHQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCmluZGV4IDllZmI0NjNlYmQxMzM2OTFkOTY3ZTQ0NDA1NGY3NTIwMDJkYjVjYTguLjRhOTAz
NjRiOTcwZDAzMzZkZjhmYTI3MTgzODk2MmM1MDVlYmI3MjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDctMDggIEphbWVzIFJvYmluc29uICA8amFt
ZXNyQGNocm9taXVtLm9yZz4KKworICAgICAgICBbY2hyb21pdW1dIERlbGV0ZSB0aGUgdW51c2Vk
IGxlZ2FjeSBhY2NlbGVyYXRlZCBjYW52YXMgMmQgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQyMTQKKworICAgICAgICBBZGRzIGEgd2F5IHRv
IHN0YXNoIGEgR3JDb250ZXh0KiBvbiBhIEdyYXBoaWNzQ29udGV4dDNELiBQcmV2aW91c2x5LCB0
aGlzIHdhcyBoYW5kbGVkIGJ5CisgICAgICAgIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNELCBidXQg
d2UgZG9uJ3QgbmVlZCB0aGF0IGNsYXNzIGFueSBtb3JlLiAgVGhpcyBpcyB1c2VkIG9ubHkgZm9y
IHRoZSBzaGFyZWQKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Qgc3Rhc2hlZCBvbiB0aGUgUGFn
ZSBhbmQgc2hhcmVkIGJ5IGFsbCBhY2NlbGVyYXRlZCBjYW52YXNlcyB3aXRoaW4gdGhlIFBhZ2Us
IGZvciBXZWJHTCBhbmQKKyAgICAgICAgY29tcG9zaXRvciBjb250ZXh0cyB0aGUgR3JDb250ZXh0
IGlzIG5ldmVyIHNldC4KKworICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OkdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6fkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z3JDb250ZXh0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnckNvbnRleHQpOgorICAgICAgICAqIHNyYy9HcmFwaGlj
c0NvbnRleHQzREludGVybmFsLmg6CisKIDIwMTEtMDctMDcgIFZzZXZvbG9kIFZsYXNvdiAgPHZz
ZXZpa0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogQWRkIHN1cHBvcnQg
Zm9yIGNsZWFyaW5nIGNhY2hlIGFuZCBjb29raWVzIGZyb20gbmV0d29yayBwYW5lbC4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNEQ2hyb21p
dW0uY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJv
bWl1bS5jcHAKaW5kZXggZjEyY2ZhZmQ1OTMzZmI0ZTdjNWUwMmI3ODgwY2RjNzA5MGU3ZjJmMS4u
NDFhNDI4MDBlZDJiMzQ5YzBmZTlkOGFmNTQ0ZDI3OTljOWRkMmZlMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5j
cHAKQEAgLTYxLDYgKzYxLDEwIEBACiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHSW1hZ2UuaD4K
ICNlbmRpZgogCisjaWYgVVNFKFNLSUEpCisjaW5jbHVkZSAiR3JDb250ZXh0LmgiCisjZW5kaWYK
KwogLy8gVGhlcmUgYXJlIHR3byBsZXZlbHMgb2YgZGVsZWdhdGlvbiBpbiB0aGlzIGZpbGU6CiAv
LwogLy8gICAxLiBHcmFwaGljc0NvbnRleHQzRCBkZWxlZ2F0ZXMgdG8gR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbC4gVGhpcyBpcyBkb25lCkBAIC04NCw2ICs4OCw3IEBAIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKQogICAgICwgbV9pbml0aWFs
aXplZEF2YWlsYWJsZUV4dGVuc2lvbnMoZmFsc2UpCiAgICAgLCBtX2xheWVyQ29tcG9zaXRlZChm
YWxzZSkKICNpZiBVU0UoU0tJQSkKKyAgICAsIG1fZ3JDb250ZXh0KDApCiAjZWxpZiBVU0UoQ0cp
CiAgICAgLCBtX3JlbmRlck91dHB1dCgwKQogI2Vsc2UKQEAgLTk4LDYgKzEwMywxMiBAQCBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjp+R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpCiAgICAg
aWYgKG1fcmVuZGVyT3V0cHV0KQogICAgICAgICBkZWxldGVbXSBtX3JlbmRlck91dHB1dDsKICNl
bmRpZgorI2lmIFVTRShTS0lBKQorICAgIGlmIChtX2dyQ29udGV4dCkgeworICAgICAgICBtX2dy
Q29udGV4dC0+Y29udGV4dERlc3Ryb3llZCgpOworICAgICAgICBHclNhZmVVbnJlZihtX2dyQ29u
dGV4dCk7CisgICAgfQorI2VuZGlmCiB9CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6aW5pdGlhbGl6ZShHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdp
bmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKQEAgLTE0
Niw2ICsxNTcsMjMgQEAgUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpwbGF0Zm9ybVRleHR1cmUoKSBjb25zdAogICAgIHJldHVybiBtX2ltcGwtPmdldFBsYXRmb3Jt
VGV4dHVyZUlkKCk7CiB9CiAKKyNpZiBVU0UoU0tJQSkKK0dyQ29udGV4dCogR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6Z3JDb250ZXh0KCkKK3sKKyAgICAvLyBMaW1pdCB0aGUgbnVtYmVyIG9m
IHRleHR1cmVzIHdlIGhvbGQgaW4gdGhlIGJpdG1hcC0+dGV4dHVyZSBjYWNoZS4KKyAgICBzdGF0
aWMgY29uc3QgaW50IG1heFRleHR1cmVDYWNoZUNvdW50ID0gNTEyOworICAgIC8vIExpbWl0IHRo
ZSBieXRlcyBhbGxvY2F0ZWQgdG93YXJkIHRleHR1cmVzIGluIHRoZSBiaXRtYXAtPnRleHR1cmUg
Y2FjaGUuCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyA9IDUw
ICogMTAyNCAqIDEwMjQ7CisKKyAgICBpZiAoIW1fZ3JDb250ZXh0KSB7CisgICAgICAgIG1fZ3JD
b250ZXh0ID0gR3JDb250ZXh0OjpDcmVhdGVHTFNoYWRlckNvbnRleHQoKTsKKyAgICAgICAgaWYg
KG1fZ3JDb250ZXh0KQorICAgICAgICAgICAgbV9nckNvbnRleHQtPnNldFRleHR1cmVDYWNoZUxp
bWl0cyhtYXhUZXh0dXJlQ2FjaGVDb3VudCwgbWF4VGV4dHVyZUNhY2hlQnl0ZXMpOworICAgIH0K
KyAgICByZXR1cm4gbV9nckNvbnRleHQ7Cit9CisjZW5kaWYKKwogdm9pZCBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpwcmVwYXJlVGV4dHVyZSgpCiB7CiAgICAgbV9pbXBsLT5wcmVwYXJlVGV4
dHVyZSgpOwpAQCAtOTYyLDYgKzk5MCwxMyBAQCBQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29u
dGV4dDNEOjpwbGF0Zm9ybVRleHR1cmUoKSBjb25zdAogICAgIHJldHVybiBtX2ludGVybmFsLT5w
bGF0Zm9ybVRleHR1cmUoKTsKIH0KIAorI2lmIFVTRShTS0lBKQorR3JDb250ZXh0KiBHcmFwaGlj
c0NvbnRleHQzRDo6Z3JDb250ZXh0KCkKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+Z3JDb250
ZXh0KCk7Cit9CisjZW5kaWYKKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cHJlcGFyZVRleHR1
cmUoKQogewogICAgIHJldHVybiBtX2ludGVybmFsLT5wcmVwYXJlVGV4dHVyZSgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bC5oCmluZGV4IDgxNGRmNGZiYWM2ZDkyYjQxMDJhMGFiNDA1NmE5MWY5ZWRjMDQxNzYuLmNmNmFi
MDNmOTYwMDE5NzA4MTQ5MzE5ZmU4MjBiMTNkY2Y1Njg4ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmgKQEAgLTM0
LDYgKzM0LDEwIEBACiAjaW5jbHVkZSAiU2tCaXRtYXAuaCIKICNlbmRpZgogCisjaWYgVVNFKFNL
SUEpCitjbGFzcyBHckNvbnRleHQ7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFz
cyBXZWJHcmFwaGljc0NvbnRleHQzRDsKIGNsYXNzIFdlYlZpZXdJbXBsOwpAQCAtNjIsNiArNjYs
OSBAQCBwdWJsaWM6CiAKICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0QoKSBjb25zdDsKICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4
dHVyZSgpIGNvbnN0OworI2lmIFVTRShTS0lBKQorICAgIEdyQ29udGV4dCogZ3JDb250ZXh0KCk7
CisjZW5kaWYKIAogICAgIGJvb2wgbWFrZUNvbnRleHRDdXJyZW50KCk7CiAKQEAgLTMwNSw2ICsz
MTIsOCBAQCBwcml2YXRlOgogICAgIC8vIGZyYW1lIGJ1ZmZlciBpbnRvLiBUaGlzIHNlZW1zIHRv
IGhhcHBlbiB3aGVuIENTUyBzdHlsZXMgYXJlCiAgICAgLy8gdXNlZCB0byByZXNpemUgdGhlIENh
bnZhcy4KICAgICBTa0JpdG1hcCBtX3Jlc2l6aW5nQml0bWFwOworCisgICAgR3JDb250ZXh0KiBt
X2dyQ29udGV4dDsKICNlbmRpZgogCiAjaWYgVVNFKENHKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100184</attachid>
            <date>2011-07-08 16:40:49 -0700</date>
            <delta_ts>2011-07-08 18:01:28 -0700</delta_ts>
            <desc>merged up to ToT</desc>
            <filename>bug-64214-20110708164048.patch</filename>
            <type>text/plain</type>
            <size>176494</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA2NzEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3ZWM2MmFmODdlYzQ5Y2Rk
OGM3ZmJkYjcyYzUzNDc1MjY1M2UwMGQzLi5kNDA2NTlhNDY4NmIwNjQ1Nzk0MTU0NTlhNDBlNmNk
ZTAzNzk4MjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAyIEBACisyMDExLTA3LTA4ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBE
ZWxldGUgdGhlIHVudXNlZCBsZWdhY3kgYWNjZWxlcmF0ZWQgY2FudmFzIDJkIGNvZGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MjE0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyByZW1vdmVzIHRo
ZSBsZWdhY3kgYWNjZWxlcmF0ZWQgY2FudmFzIDJkIHBhdGggYW5kIHN1cHBvcnQgbG9naWMgc2lu
Y2Ugd2UgKGNocm9taXVtKSBhcmUgbm8gbG9uZ2VyIHVzaW5nCisgICAgICAgIHRoaXMgY29kZXBh
dGggYW5kIGl0IHNlZW1zIGNsZWFyIHRoYXQgbm8gb3RoZXIgcG9ydCBpcyBpbnRlcmVzdGVkLgor
CisgICAgICAgIFJlZmFjdG9yaW5nIGFuZCByZW1vdmluZyB1bnVzZWQgY29kZSwgc28gbm8gbmV3
IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3KToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaDoKKyAgICAgICAgKiBs
b2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAg
ICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c3luY1NvZnR3YXJlQ2FudmFzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3
aW5nQnVmZmVyOjpzZXRHckNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZvbnRMaW51eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBvaW50SW5UcmlhbmdsZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0JpY3ViaWNTaGFkZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9CaWN1YmljU2hhZGVyLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0NvbnZvbHV0aW9uU2hhZGVyLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ29udm9sdXRpb25TaGFkZXIuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR3JhcGhpY3NDb250ZXh0R1BV
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR3JhcGhpY3ND
b250ZXh0R1BVLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1No
YXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU29saWRGaWxsU2hhZGVyLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU29saWRGaWxsU2hhZGVyLmg6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleFNoYWRlci5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleFNoYWRlci5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0
Q2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXApOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RN
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxs
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cm90YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzeW5jU29mdHdhcmVDYW52YXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5SW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6
ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjp+TmF0aXZlSW1hZ2VTa2lh
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6UGxhdGZvcm1Db250
ZXh0U2tpYSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjp+UGxhdGZv
cm1Db250ZXh0U2tpYSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpz
ZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNv
bnRleHRTa2lhOjptYWtlR3JDb250ZXh0Q3VycmVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmg6CisKIDIwMTEtMDctMDggIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByOTA2NjIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMWQ0NjEwMWEwZjg0OGI5YzkxMTVhNTBiZjUw
NmExMzliZTExYTA2ZC4uODkwNjRiMWE2MTc5M2U5NDI0ZWMxMDAxYTZjMjBkOTc0YTMxZDk1OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDI0NCw0MyArNDI0NCwxMCBAQAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0dseXBoUGFnZVRyZWVOb2Rl
RnJlZVR5cGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9T
aW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0JpY3ViaWNTaGFkZXIuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvQmljdWJpY1NoYWRlci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9n
cHUvQ29udm9sdXRpb25TaGFkZXIuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvQ29udm9sdXRpb25TaGFkZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvRHJhd2luZ0J1ZmZlci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9n
cHUvR3JhcGhpY3NDb250ZXh0R1BVLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0dyYXBoaWNzQ29udGV4dEdQVS5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvTG9vcEJsaW5uQ2xhc3NpZmllci5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5DbGFzc2lmaWVyLmgnLAotICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5Db25zdGFudHMuaCcsCi0gICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yLmNwcCcsCi0gICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9y
LmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5NYXRoVXRp
bHMuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uTWF0
aFV0aWxzLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5Q
YXRoQ2FjaGUuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJs
aW5uUGF0aENhY2hlLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29w
Qmxpbm5QYXRoUHJvY2Vzc29yLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0xvb3BCbGlublBhdGhQcm9jZXNzb3IuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0xvb3BCbGlublNoYWRlci5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9Mb29wQmxpbm5TaGFkZXIuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0xvb3BCbGlublNvbGlkRmlsbFNoYWRlci5jcHAnLAotICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5Tb2xpZEZpbGxTaGFkZXIuaCcsCi0gICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublRleHR1cmVDb29yZHMuY3BwJywK
LSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jk
cy5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvUE9EQXJlbmEuaCcsCi0g
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1BPREludGVydmFsLmgnLAotICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9QT0RJbnRlcnZhbFRyZWUuaCcsCi0gICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1BPRFJlZEJsYWNrVHJlZS5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhZGVyLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYWRlci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwJywKLSAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCcsCi0gICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NvbGlkRmlsbFNoYWRlci5jcHAnLAotICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Tb2xpZEZpbGxTaGFkZXIuaCcsCi0gICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleFNoYWRlci5jcHAnLAotICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9UZXhTaGFkZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvVGV4dHVyZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGls
aW5nRGF0YS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDFlNmExYzA0OTVlYTJjMjg5ODc5YzIxNWFlYTA1MzIxMzNlMjky
ZDAuLmE4YTFlMzU1NzBjMjBmMzcxYzUxZjA0MGEwM2VhYjZhMzEzMzFmMDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwODgs
MTggKzEwODgsOCBAQAogCQk0OTgzOTE1OTBGMUU3NzY5MDBDMjM3ODIgLyogV2ViS2l0Q1NTTWF0
cml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTgz
OTE1NjBGMUU3NzY5MDBDMjM3ODIgLyogV2ViS2l0Q1NTTWF0cml4LmggKi87IH07CiAJCTQ5ODc3
MERCMTI0MkM1MzUwMDIyMjZCQSAvKiBEcmF3aW5nQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODc3MEMyMTI0MkM1MzUwMDIyMjZCQSAv
KiBEcmF3aW5nQnVmZmVyLmNwcCAqLzsgfTsKIAkJNDk4NzcwREMxMjQyQzUzNTAwMjIyNkJBIC8q
IERyYXdpbmdCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5ODc3MEMzMTI0MkM1MzUwMDIyMjZCQSAvKiBEcmF3aW5nQnVmZmVyLmggKi87IH07
Ci0JCTQ5ODc3MEU0MTI0MkM1MzUwMDIyMjZCQSAvKiBQT0RBcmVuYS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4NzcwQ0IxMjQyQzUzNTAwMjIyNkJB
IC8qIFBPREFyZW5hLmggKi87IH07Ci0JCTQ5ODc3MEU1MTI0MkM1MzUwMDIyMjZCQSAvKiBQT0RJ
bnRlcnZhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDk4NzcwQ0MxMjQyQzUzNTAwMjIyNkJBIC8qIFBPREludGVydmFsLmggKi87IH07Ci0JCTQ5ODc3
MEU2MTI0MkM1MzUwMDIyMjZCQSAvKiBQT0RJbnRlcnZhbFRyZWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODc3MENEMTI0MkM1MzUwMDIyMjZCQSAv
KiBQT0RJbnRlcnZhbFRyZWUuaCAqLzsgfTsKLQkJNDk4NzcwRTcxMjQyQzUzNTAwMjIyNkJBIC8q
IFBPRFJlZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDk4NzcwQ0UxMjQyQzUzNTAwMjIyNkJBIC8qIFBPRFJlZEJsYWNrVHJlZS5oICov
OyB9OwogCQk0OTg3NzBFODEyNDJDNTM1MDAyMjI2QkEgLyogU2hhZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODc3MENGMTI0MkM1MzUwMDIy
MjZCQSAvKiBTaGFkZXIuY3BwICovOyB9OwogCQk0OTg3NzBFOTEyNDJDNTM1MDAyMjI2QkEgLyog
U2hhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
OTg3NzBEMDEyNDJDNTM1MDAyMjI2QkEgLyogU2hhZGVyLmggKi87IH07Ci0JCTQ5ODc3MEVBMTI0
MkM1MzUwMDIyMjZCQSAvKiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTg3NzBEMTEyNDJDNTM1MDAyMjI2
QkEgLyogU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwICovOyB9OwotCQk0OTg3NzBFQjEyNDJD
NTM1MDAyMjI2QkEgLyogU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODc3MEQyMTI0MkM1MzUwMDIyMjZCQSAv
KiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oICovOyB9OwotCQk0OTg3NzBFQzEyNDJDNTM1MDAy
MjI2QkEgLyogU29saWRGaWxsU2hhZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODc3MEQzMTI0MkM1MzUwMDIyMjZCQSAvKiBTb2xpZEZpbGxT
aGFkZXIuY3BwICovOyB9OwotCQk0OTg3NzBFRDEyNDJDNTM1MDAyMjI2QkEgLyogU29saWRGaWxs
U2hhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
OTg3NzBENDEyNDJDNTM1MDAyMjI2QkEgLyogU29saWRGaWxsU2hhZGVyLmggKi87IH07Ci0JCTQ5
ODc3MEVFMTI0MkM1MzUwMDIyMjZCQSAvKiBUZXhTaGFkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4NzcwRDUxMjQyQzUzNTAwMjIyNkJBIC8q
IFRleFNoYWRlci5jcHAgKi87IH07Ci0JCTQ5ODc3MEVGMTI0MkM1MzUwMDIyMjZCQSAvKiBUZXhT
aGFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
ODc3MEQ2MTI0MkM1MzUwMDIyMjZCQSAvKiBUZXhTaGFkZXIuaCAqLzsgfTsKIAkJNDk4NzcwRjAx
MjQyQzUzNTAwMjIyNkJBIC8qIFRleHR1cmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4NzcwRDcxMjQyQzUzNTAwMjIyNkJBIC8qIFRleHR1cmUu
Y3BwICovOyB9OwogCQk0OTg3NzBGMTEyNDJDNTM1MDAyMjI2QkEgLyogVGV4dHVyZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4NzcwRDgxMjQyQzUz
NTAwMjIyNkJBIC8qIFRleHR1cmUuaCAqLzsgfTsKIAkJNDk4NzcwRjIxMjQyQzUzNTAwMjIyNkJB
IC8qIFRpbGluZ0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDk4NzcwRDkxMjQyQzUzNTAwMjIyNkJBIC8qIFRpbGluZ0RhdGEuY3BwICovOyB9
OwpAQCAtMTExMywxMyArMTEwMyw2IEBACiAJCTQ5QTg1QjZDMTM4RDU3M0EwMEVDQjdCMyAvKiBT
dHJlYW1FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlBODVCNjkxMzhENTczQTAwRUNCN0IzIC8qIFN0cmVhbUV2ZW50LmggKi87IH07CiAJCTQ5
QTg1Qjc3MTM4RDU4RUUwMEVDQjdCMyAvKiBKU1N0cmVhbUV2ZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QTg1Qjc1MTM4RDU4RUUwMEVDQjdC
MyAvKiBKU1N0cmVhbUV2ZW50LmNwcCAqLzsgfTsKIAkJNDlBODVCNzgxMzhENThFRTAwRUNCN0Iz
IC8qIEpTU3RyZWFtRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5QTg1Qjc2MTM4RDU4RUUwMEVDQjdCMyAvKiBKU1N0cmVhbUV2ZW50LmggKi87
IH07Ci0JCTQ5QjY5RTVFMTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxpbm5DbGFzc2lmaWVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QjY5RTU1
MTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxpbm5DbGFzc2lmaWVyLmNwcCAqLzsgfTsKLQkJNDlC
NjlFNUYxMjU0RkVFRDAwN0Q1N0VCIC8qIExvb3BCbGlubkNsYXNzaWZpZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QjY5RTU2MTI1NEZFRUQwMDdE
NTdFQiAvKiBMb29wQmxpbm5DbGFzc2lmaWVyLmggKi87IH07Ci0JCTQ5QjY5RTYwMTI1NEZFRUQw
MDdENTdFQiAvKiBMb29wQmxpbm5Db25zdGFudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QjY5RTU3MTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxp
bm5Db25zdGFudHMuaCAqLzsgfTsKLQkJNDlCNjlFNjMxMjU0RkVFRDAwN0Q1N0VCIC8qIExvb3BC
bGlubk1hdGhVdGlscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUI2OUU1QTEyNTRGRUVEMDA3RDU3RUIgLyogTG9vcEJsaW5uTWF0aFV0aWxzLmNw
cCAqLzsgfTsKLQkJNDlCNjlFNjQxMjU0RkVFRDAwN0Q1N0VCIC8qIExvb3BCbGlubk1hdGhVdGls
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlCNjlF
NUIxMjU0RkVFRDAwN0Q1N0VCIC8qIExvb3BCbGlubk1hdGhVdGlscy5oICovOyB9OwotCQk0OUI2
OUU2NTEyNTRGRUVEMDA3RDU3RUIgLyogTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUI2OUU1QzEyNTRGRUVE
MDA3RDU3RUIgLyogTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5jcHAgKi87IH07Ci0JCTQ5QjY5RTY2
MTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxpbm5UZXh0dXJlQ29vcmRzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUI2OUU1RDEyNTRGRUVEMDA3RDU3
RUIgLyogTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5oICovOyB9OwogCQk0OUM3Qjk5MzEwNDJEMkQz
MDAwOUQ0NDcgLyogSlNXZWJHTEJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4MDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEJ1
ZmZlci5jcHAgKi87IH07CiAJCTQ5QzdCOTk0MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVm
ZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3
Qjk4MTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEJ1ZmZlci5oICovOyB9OwogCQk0OUM3Qjk5
NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODIxMDQyRDJEMzAwMDlENDQ3IC8qIEpT
SW50OEFycmF5LmNwcCAqLzsgfTsKQEAgLTc1OTMsMTggKzc1NzYsOCBAQAogCQk0OTgzOTE1NzBG
MUU3NzY5MDBDMjM3ODIgLyogV2ViS2l0Q1NTTWF0cml4LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBXZWJLaXRDU1NNYXRyaXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
OTg3NzBDMjEyNDJDNTM1MDAyMjI2QkEgLyogRHJhd2luZ0J1ZmZlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEcmF3aW5nQnVmZmVyLmNwcDsgcGF0aCA9IGdwdS9E
cmF3aW5nQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDk4NzcwQzMx
MjQyQzUzNTAwMjIyNkJBIC8qIERyYXdpbmdCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gRHJhd2luZ0J1ZmZlci5oOyBwYXRoID0gZ3B1L0RyYXdpbmdCdWZmZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDk4NzcwQ0IxMjQyQzUzNTAwMjIyNkJBIC8q
IFBPREFyZW5hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBPREFyZW5hLmg7
IHBhdGggPSBncHUvUE9EQXJlbmEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDk4
NzcwQ0MxMjQyQzUzNTAwMjIyNkJBIC8qIFBPREludGVydmFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFBPREludGVydmFsLmg7IHBhdGggPSBncHUvUE9ESW50ZXJ2YWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDk4NzcwQ0QxMjQyQzUzNTAwMjIyNkJBIC8q
IFBPREludGVydmFsVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQT0RJ
bnRlcnZhbFRyZWUuaDsgcGF0aCA9IGdwdS9QT0RJbnRlcnZhbFRyZWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNDk4NzcwQ0UxMjQyQzUzNTAwMjIyNkJBIC8qIFBPRFJlZEJsYWNr
VHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQT0RSZWRCbGFja1RyZWUu
aDsgcGF0aCA9IGdwdS9QT0RSZWRCbGFja1RyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDk4NzcwQ0YxMjQyQzUzNTAwMjIyNkJBIC8qIFNoYWRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTaGFkZXIuY3BwOyBwYXRoID0gZ3B1L1NoYWRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5ODc3MEQwMTI0MkM1MzUwMDIyMjZC
QSAvKiBTaGFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2hhZGVyLmg7
IHBhdGggPSBncHUvU2hhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5ODc3
MEQxMTI0MkM1MzUwMDIyMjZCQSAvKiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5j
cHA7IHBhdGggPSBncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk0OTg3NzBEMjEyNDJDNTM1MDAyMjI2QkEgLyogU2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QuaDsgcGF0aCA9IGdwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OTg3NzBEMzEyNDJDNTM1MDAyMjI2QkEgLyog
U29saWRGaWxsU2hhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFNvbGlkRmlsbFNoYWRlci5jcHA7IHBhdGggPSBncHUvU29saWRGaWxsU2hhZGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDk4NzcwRDQxMjQyQzUzNTAwMjIyNkJBIC8qIFNv
bGlkRmlsbFNoYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTb2xpZEZp
bGxTaGFkZXIuaDsgcGF0aCA9IGdwdS9Tb2xpZEZpbGxTaGFkZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNDk4NzcwRDUxMjQyQzUzNTAwMjIyNkJBIC8qIFRleFNoYWRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBUZXhTaGFkZXIuY3BwOyBwYXRo
ID0gZ3B1L1RleFNoYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5ODc3
MEQ2MTI0MkM1MzUwMDIyMjZCQSAvKiBUZXhTaGFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gVGV4U2hhZGVyLmg7IHBhdGggPSBncHUvVGV4U2hhZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5ODc3MEQ3MTI0MkM1MzUwMDIyMjZCQSAvKiBUZXh0dXJl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFRleHR1cmUuY3BwOyBw
YXRoID0gZ3B1L1RleHR1cmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OTg3
NzBEODEyNDJDNTM1MDAyMjI2QkEgLyogVGV4dHVyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBUZXh0dXJlLmg7IHBhdGggPSBncHUvVGV4dHVyZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0OTg3NzBEOTEyNDJDNTM1MDAyMjI2QkEgLyogVGlsaW5nRGF0YS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBUaWxpbmdEYXRhLmNwcDsg
cGF0aCA9IGdwdS9UaWxpbmdEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTc2MTksMTMgKzc1OTIsNiBAQAogCQk0OUE4NUI2QTEzOEQ1NzNBMDBFQ0I3QjMgLyogU3RyZWFt
RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFN0cmVhbUV2ZW50LmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlBODVCNzUxMzhENThFRTAwRUNCN0IzIC8qIEpTU3Ry
ZWFtRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTdHJl
YW1FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QTg1Qjc2MTM4RDU4
RUUwMEVDQjdCMyAvKiBKU1N0cmVhbUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTU3RyZWFtRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlC
NjlFNTUxMjU0RkVFRDAwN0Q1N0VCIC8qIExvb3BCbGlubkNsYXNzaWZpZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTG9vcEJsaW5uQ2xhc3NpZmllci5jcHA7IHBh
dGggPSBncHUvTG9vcEJsaW5uQ2xhc3NpZmllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTQ5QjY5RTU2MTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxpbm5DbGFzc2lmaWVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExvb3BCbGlubkNsYXNzaWZpZXIuaDsg
cGF0aCA9IGdwdS9Mb29wQmxpbm5DbGFzc2lmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTQ5QjY5RTU3MTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxpbm5Db25zdGFudHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTG9vcEJsaW5uQ29uc3RhbnRzLmg7IHBh
dGggPSBncHUvTG9vcEJsaW5uQ29uc3RhbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQ5QjY5RTVBMTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxpbm5NYXRoVXRpbHMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTG9vcEJsaW5uTWF0aFV0aWxzLmNw
cDsgcGF0aCA9IGdwdS9Mb29wQmxpbm5NYXRoVXRpbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0OUI2OUU1QjEyNTRGRUVEMDA3RDU3RUIgLyogTG9vcEJsaW5uTWF0aFV0aWxz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExvb3BCbGlubk1hdGhVdGlscy5o
OyBwYXRoID0gZ3B1L0xvb3BCbGlubk1hdGhVdGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk0OUI2OUU1QzEyNTRGRUVEMDA3RDU3RUIgLyogTG9vcEJsaW5uVGV4dHVyZUNvb3Jk
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMb29wQmxpbm5UZXh0
dXJlQ29vcmRzLmNwcDsgcGF0aCA9IGdwdS9Mb29wQmxpbm5UZXh0dXJlQ29vcmRzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlCNjlFNUQxMjU0RkVFRDAwN0Q1N0VCIC8qIExv
b3BCbGlublRleHR1cmVDb29yZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
TG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5oOyBwYXRoID0gZ3B1L0xvb3BCbGlublRleHR1cmVDb29y
ZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5ODAxMDQyRDJEMzAwMDlE
NDQ3IC8qIEpTV2ViR0xCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNXZWJHTEJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5
QzdCOTgxMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDlDN0I5ODIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW50OEFycmF5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzODgyLDI1ICsxMzg0OCw4IEBACiAJCQkJNDk4Nzcx
MTYxMjQyQ0Q3RjAwMjIyNkJBIC8qIG1hYyAqLywKIAkJCQk0OTg3NzBDMjEyNDJDNTM1MDAyMjI2
QkEgLyogRHJhd2luZ0J1ZmZlci5jcHAgKi8sCiAJCQkJNDk4NzcwQzMxMjQyQzUzNTAwMjIyNkJB
IC8qIERyYXdpbmdCdWZmZXIuaCAqLywKLQkJCQk0OUI2OUU1NTEyNTRGRUVEMDA3RDU3RUIgLyog
TG9vcEJsaW5uQ2xhc3NpZmllci5jcHAgKi8sCi0JCQkJNDlCNjlFNTYxMjU0RkVFRDAwN0Q1N0VC
IC8qIExvb3BCbGlubkNsYXNzaWZpZXIuaCAqLywKLQkJCQk0OUI2OUU1NzEyNTRGRUVEMDA3RDU3
RUIgLyogTG9vcEJsaW5uQ29uc3RhbnRzLmggKi8sCi0JCQkJNDlCNjlFNUExMjU0RkVFRDAwN0Q1
N0VCIC8qIExvb3BCbGlubk1hdGhVdGlscy5jcHAgKi8sCi0JCQkJNDlCNjlFNUIxMjU0RkVFRDAw
N0Q1N0VCIC8qIExvb3BCbGlubk1hdGhVdGlscy5oICovLAotCQkJCTQ5QjY5RTVDMTI1NEZFRUQw
MDdENTdFQiAvKiBMb29wQmxpbm5UZXh0dXJlQ29vcmRzLmNwcCAqLywKLQkJCQk0OUI2OUU1RDEy
NTRGRUVEMDA3RDU3RUIgLyogTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5oICovLAotCQkJCTQ5ODc3
MENCMTI0MkM1MzUwMDIyMjZCQSAvKiBQT0RBcmVuYS5oICovLAotCQkJCTQ5ODc3MENDMTI0MkM1
MzUwMDIyMjZCQSAvKiBQT0RJbnRlcnZhbC5oICovLAotCQkJCTQ5ODc3MENEMTI0MkM1MzUwMDIy
MjZCQSAvKiBQT0RJbnRlcnZhbFRyZWUuaCAqLywKLQkJCQk0OTg3NzBDRTEyNDJDNTM1MDAyMjI2
QkEgLyogUE9EUmVkQmxhY2tUcmVlLmggKi8sCiAJCQkJNDk4NzcwQ0YxMjQyQzUzNTAwMjIyNkJB
IC8qIFNoYWRlci5jcHAgKi8sCiAJCQkJNDk4NzcwRDAxMjQyQzUzNTAwMjIyNkJBIC8qIFNoYWRl
ci5oICovLAotCQkJCTQ5ODc3MEQxMTI0MkM1MzUwMDIyMjZCQSAvKiBTaGFyZWRHcmFwaGljc0Nv
bnRleHQzRC5jcHAgKi8sCi0JCQkJNDk4NzcwRDIxMjQyQzUzNTAwMjIyNkJBIC8qIFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNELmggKi8sCi0JCQkJNDk4NzcwRDMxMjQyQzUzNTAwMjIyNkJBIC8qIFNv
bGlkRmlsbFNoYWRlci5jcHAgKi8sCi0JCQkJNDk4NzcwRDQxMjQyQzUzNTAwMjIyNkJBIC8qIFNv
bGlkRmlsbFNoYWRlci5oICovLAotCQkJCTQ5ODc3MEQ1MTI0MkM1MzUwMDIyMjZCQSAvKiBUZXhT
aGFkZXIuY3BwICovLAotCQkJCTQ5ODc3MEQ2MTI0MkM1MzUwMDIyMjZCQSAvKiBUZXhTaGFkZXIu
aCAqLywKIAkJCQk0OTg3NzBENzEyNDJDNTM1MDAyMjI2QkEgLyogVGV4dHVyZS5jcHAgKi8sCiAJ
CQkJNDk4NzcwRDgxMjQyQzUzNTAwMjIyNkJBIC8qIFRleHR1cmUuaCAqLywKIAkJCQk0OTg3NzBE
OTEyNDJDNTM1MDAyMjI2QkEgLyogVGlsaW5nRGF0YS5jcHAgKi8sCkBAIC0yMjA3NywxMCArMjIw
MjYsNiBAQAogCQkJCTUxMUYyMzFBMERDMTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0b3JhZ2VUaHJl
YWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTFDNDFCMEQ5ODI5ODAwMDNCMDJGMiAvKiBMb2Nh
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgyMzlFMDEwOUIzQ0Y4QTAwQjYwNjQxIC8qIExv
Z2dpbmcuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5QjY5RTVGMTI1NEZFRUQwMDdENTdFQiAvKiBM
b29wQmxpbm5DbGFzc2lmaWVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUI2OUU2MDEyNTRGRUVE
MDA3RDU3RUIgLyogTG9vcEJsaW5uQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUI2
OUU2NDEyNTRGRUVEMDA3RDU3RUIgLyogTG9vcEJsaW5uTWF0aFV0aWxzLmggaW4gSGVhZGVycyAq
LywKLQkJCQk0OUI2OUU2NjEyNTRGRUVEMDA3RDU3RUIgLyogTG9vcEJsaW5uVGV4dHVyZUNvb3Jk
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwMzkxMkIwMjY3NjAwQzFBMzU5IC8qIExvd1Bh
c3MyRmlsdGVyTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU2RDM3NDEwQURCQTVERTAwQTQ1
NTREIC8qIE1haW5SZXNvdXJjZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE4RjZCQzYw
REI1NUNEQzAwMURCNzk0IC8qIE1hbmlmZXN0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTIy
MjU1LDEwICsyMjIwMCw2IEBACiAJCQkJMUFEQTE0MTEwRTFBRTVEOTAwMDIzRUU1IC8qIFBsdWdp
bk1haW5UaHJlYWRTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQTg3OTkwMTFDQkU4
NDYwMDNDNjY0RiAvKiBQbHVnaW5TdHJhdGVneS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEFGREFD
M0QxMEY1NDQ4QzAwRTFGM0QyIC8qIFBsdWdpblZpZXdCYXNlLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk0OTg3NzBFNDEyNDJDNTM1MDAyMjI2QkEgLyogUE9EQXJlbmEuaCBpbiBIZWFkZXJzICovLAot
CQkJCTQ5ODc3MEU1MTI0MkM1MzUwMDIyMjZCQSAvKiBQT0RJbnRlcnZhbC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNDk4NzcwRTYxMjQyQzUzNTAwMjIyNkJBIC8qIFBPREludGVydmFsVHJlZS5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNDk4NzcwRTcxMjQyQzUzNTAwMjIyNkJBIC8qIFBPRFJlZEJsYWNr
VHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJCMUY3MTcwRDAwQ0FBODAwNEFFQTY0IC8qIFBv
aW50ZXJFdmVudHNIaXRSdWxlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ3MzBEOTIxMjQ4RjBC
MzAwRDNBOUM5IC8qIFBvaW50TGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MDU5
OTc4MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yMjUyMSw3ICsyMjQ2Miw2IEBACiAJCQkJQTgwRTZDRTgwQTE5ODlDQTAwN0ZCOEM1IC8qIFNo
YWRvd1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkFGRkM5NDBEMDBBNURGMDAzMDA3NEQg
LyogU2hhcGVBcmFiaWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNEE5NTRFMEI0RURDQ0IwMDJE
OEMzQyAvKiBTaGFyZWRCdWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5ODc3MEVCMTI0MkM1
MzUwMDIyMjZCQSAvKiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTMzMDlFQTMwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0MUUxQjFENDBGRjU5ODY5MDA1NzZCM0IgLyogU2hhcmVkV29ya2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MUQxNjhFODEwMjI2RTg5MDA5QkM4MjcgLyogU2hhcmVkV29ya2VyQ29u
dGV4dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjU0MCw3ICsyMjQ4MCw2IEBACiAJCQkJNTEwRDRB
MzcxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxMEQ0QTM4MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVD
bGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBBNDg0NDk5MENBNDRDQjIwMEI3QkQ0OCAvKiBT
b2Z0TGlua2luZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDk4NzcwRUQxMjQyQzUzNTAwMjIyNkJB
IC8qIFNvbGlkRmlsbFNoYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEIzMDQzQzcwQUUwMzcw
MzAwQTgyNjQ3IC8qIFNvdW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NEE4MUYzRTBGQzdERkYw
MDA5NTUzMDAgLyogU291cmNlQWxwaGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0QTgxRjQyMEZD
N0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmggaW4gSGVhZGVycyAqLywKQEAgLTIyODYx
LDcgKzIyODAwLDYgQEAKIAkJCQlBOENGRjA1MTBBMTU0RjA5MDAwQTQyMzQgLyogVGFibGVMYXlv
dXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTNCRUMzMEQyMjJCMUQwMDdFMDZFNCAvKiBUYWdO
b2RlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNERDYxMjUxRjEyRDAwM0VGMjY5IC8q
IFRlbGVwaG9uZUlucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDk4NzcwRUYxMjQyQzUz
NTAwMjIyNkJBIC8qIFRleFNoYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU1MEI2QTYwOTlE
RjAyNzAwOTBENzgxIC8qIFRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTE3MDk5RTY0
OTIwMDU2RTU4MSAvKiBUZXh0QWZmaW5pdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTM0
MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Qm91bmRhcmllcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NTA2Niw5ICsyNTAwNCw2IEBACiAJCQkJQkNFMUM0MUMwRDk4Mjk4MTAwM0IwMkYyIC8qIExvY2F0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MjM5RTAwMDlCM0NGOEEwMEI2MDY0MSAvKiBM
b2dnaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MDI2NDVFMEFGREMxOUIwMDU5MTlFMiAv
KiBMb2dnaW5nTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlCNjlFNUUxMjU0RkVFRDAwN0Q1
N0VCIC8qIExvb3BCbGlubkNsYXNzaWZpZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlCNjlF
NjMxMjU0RkVFRDAwN0Q1N0VCIC8qIExvb3BCbGlubk1hdGhVdGlscy5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk0OUI2OUU2NTEyNTRGRUVEMDA3RDU3RUIgLyogTG9vcEJsaW5uVGV4dHVyZUNvb3Jk
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDMxNjAzODEyQjAyNjc2MDBDMUEzNTkgLyogTG93
UGFzczJGaWx0ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRTIyN0UxMEFGNTg5QUQw
MEQ0ODMyNCAvKiBNYWluUmVzb3VyY2VMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4
RjZCQzUwREI1NUNEQzAwMURCNzk0IC8qIE1hbmlmZXN0UGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMjU0MTcsNyArMjUzNTIsNiBAQAogCQkJCTFBNEE5NTREMEI0RURDQ0IwMDJEOEMzQyAv
KiBTaGFyZWRCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyREQ4RTMwRDkxRTJCNDAw
MEY4OUVFIC8qIFNoYXJlZEJ1ZmZlckNGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNEE5NTUy
MEI0RURDRkYwMDJEOEMzQyAvKiBTaGFyZWRCdWZmZXJNYWMubW0gaW4gU291cmNlcyAqLywKLQkJ
CQk0OTg3NzBFQTEyNDJDNTM1MDAyMjI2QkEgLyogU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFQTIwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRp
bWVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFFMUIxRDMwRkY1OTg2OTAwNTc2QjNCIC8q
IFNoYXJlZFdvcmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUQxNjhFNzEwMjI2RTg5MDA5
QkM4MjcgLyogU2hhcmVkV29ya2VyQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1NDM2
LDcgKzI1MzcwLDYgQEAKIAkJCQk1MTBENEEzMzEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3Ry
ZWFtRXJyb3JCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMEQ0QTM2MTAzMTY1RUUwMDQ5
RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
QUJBRTFGMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQk0OTg3NzBFQzEyNDJDNTM1MDAyMjI2QkEgLyogU29saWRGaWxsU2hh
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRCMzA0M0M5MEFFMDM3MUQwMEE4MjY0NyAvKiBT
b3VuZE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg0QTgxRjNEMEZDN0RGRjAwMDk1NTMwMCAv
KiBTb3VyY2VBbHBoYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NEE4MUY0MTBGQzdFMDI3MDA5
NTUzMDAgLyogU291cmNlR3JhcGhpYy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1NjY2LDcgKzI1
NTk5LDYgQEAKIAkJCQk2NTgyQTE2MzA5OTk5RDZEMDBCRUVCNkQgLyogU3lzdGVtVGltZU1hYy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0UzQkVDMjBEMjIyQjFEMDA3RTA2RTQgLyogVGFnTm9k
ZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNERDUxMjUxRjEyRDAwM0VGMjY5IC8q
IFRlbGVwaG9uZUlucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OTg3NzBFRTEyNDJD
NTM1MDAyMjI2QkEgLyogVGV4U2hhZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NTBCNkE1
MDk5REYwMjcwMDkwRDc4MSAvKiBUZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3MkMwMEM0
MTI5NjExRjEwMDVDOTU3NSAvKiBUZXh0Qm91bmRhcmllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCMkFGRkM5NzBEMDBBNURGMDAzMDA3NEQgLyogVGV4dEJvdW5kYXJpZXMubW0gaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4IGY0MjM3NzhkNzQzOWY2NGQwZDA0MzM1NTQ4NmY0M2Vh
YjU0ZjY1M2EuLmJjZDYyMDRlYjc4M2I5NzhkMTRiZmUxNDdjOWViYTI5N2M2ZDlhYjIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcApAQCAtNjYsOCArNjYsNiBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgog
I2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4
dDNELmgiCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCiAjZW5kaWYKQEAgLTE0Niw3ICsxNDQsNyBAQCBDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRChIVE1MQ2FudmFzRWxlbWVudCogY2FudmFz
LCBibwogICAgIGlmIChHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpKSB7CiAg
ICAgICAgIG1fY29udGV4dDNEID0gcC0+c2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoKTsKICAgICAg
ICAgaWYgKG1fY29udGV4dDNEKSB7Ci0gICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXIgPSBtX2Nv
bnRleHQzRC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+Y3JlYXRlRHJhd2luZ0J1ZmZlcihJbnRTaXpl
KGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSkpOworICAgICAgICAgICAgbV9kcmF3
aW5nQnVmZmVyID0gbV9jb250ZXh0M0QtPmNyZWF0ZURyYXdpbmdCdWZmZXIoSW50U2l6ZShjYW52
YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCkpKTsKICAgICAgICAgICAgIGlmICghbV9kcmF3
aW5nQnVmZmVyKSB7CiAgICAgICAgICAgICAgICAgYy0+c2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0
M0QoMCwgMCwgSW50U2l6ZSgpKTsKICAgICAgICAgICAgICAgICBtX2NvbnRleHQzRC5jbGVhcigp
OwpAQCAtNTcyLDE1ICs1NzAsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKGNvbnN0IFN0cmluZyYgb3BlcmF0aQogICAgIGlmICgh
YykKICAgICAgICAgcmV0dXJuOwogICAgIGMtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7Ci0j
aWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICBpZiAoaXNBY2NlbGVyYXRlZCgp
ICYmICFtX2NvbnRleHQzRC0+c3VwcG9ydHNDb21wb3NpdGVPcChvcCkpIHsKLSAgICAgICAgYy0+
c2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoMCwgMCwgSW50U2l6ZSgpKTsKLSAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLmNsZWFyKCk7Ci0gICAgICAgIG1fY29udGV4dDNELmNsZWFyKCk7Ci0gICAg
ICAgIC8vIE1hcmsgYXMgbmVlZGluZyBhIHN0eWxlIHJlY2FsYyBzbyBvdXIgY29tcG9zaXRpbmcg
bGF5ZXIgY2FuIGJlIHJlbW92ZWQuCi0gICAgICAgIGNhbnZhcygpLT5zZXROZWVkc1N0eWxlUmVj
YWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKLSAgICB9Ci0jZW5kaWYKIH0KIAogdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkKQEAgLTE2NDQs
MTAgKzE2MzMsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZGlkRHJhdyhjb25z
dCBGbG9hdFJlY3QmIHIsIHVuc2lnbmVkIG9wdGlvbnMpCiAgICAgICAgIC8vIHdlJ2QgaGF2ZSB0
byBrZWVwIHRoZSBjbGlwIHBhdGggYXJvdW5kLgogICAgIH0KIAotI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCi0gICAgaWYgKGlzQWNjZWxlcmF0ZWQoKSkKLSAgICAgICAgZHJhd2lu
Z0NvbnRleHQoKS0+bWFya0RpcnR5UmVjdChlbmNsb3NpbmdJbnRSZWN0KGRpcnR5UmVjdCkpOwot
I2VuZGlmCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogICAgIC8vIElmIHdlIGFyZSBkcmF3aW5nIHRvIGhhcmR3YXJlIGFu
ZCB3ZSBoYXZlIGEgY29tcG9zaXRlZCBsYXllciwganVzdCBjYWxsIGNvbnRlbnRDaGFuZ2VkKCku
CiAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5oCmluZGV4IDExZjUxZmUzNmFhYWNlNmI2NmQ4YmQ4ZGY0NTYxOTFjYzE3ZTM3MzkuLjgxMmFi
NWU3NTNhODhhYWE2YWMwOGY0M2EzNmYzODQ5YTI2ZGFhNWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCkBAIC01Niw3
ICs1Niw3IEBAIGNsYXNzIFRleHRNZXRyaWNzOwogCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKIGNsYXNzIERyYXdpbmdCdWZmZXI7Ci1jbGFzcyBTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogI2VuZGlmCiAKIHR5cGVkZWYgaW50IEV4
Y2VwdGlvbkNvZGU7CkBAIC0zMDUsNyArMzA1LDcgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgUmVmUHRyPERyYXdpbmdCdWZmZXI+IG1fZHJhd2lu
Z0J1ZmZlcjsKLSAgICBSZWZQdHI8U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDNE
OworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0M0Q7CiAjZW5kaWYKIH07
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaCBiL1Nv
dXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaAppbmRleCAzZmYyNThiZmFmMzM0NDlm
ZTQwM2M5MjlhOWQxMmE5Njk4YjU0Y2UzLi44ZjM1Mjc2NWY5YWVhNTgxYzY0NGY2NTYzMzlhZjQx
MTc1YjM1ZTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvbG9hZGVyL0VtcHR5Q2xpZW50cy5oCkBAIC02Miw3ICs2
Miw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0Q7CitjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKIAogY2xhc3MgRW1wdHlQb3B1cE1lbnUg
OiBwdWJsaWMgUG9wdXBNZW51IHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5o
CmluZGV4IGEyN2M3NjZlNjA0MWFjNDU5MDcxNWVjYzFiZDY0YTdiMmEyZDJiMjIuLjRiOGE5NDlm
NWNiNDEzNzE1YTY1YzM5NjU1MDVlOGNhN2E2MDNjNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVD
bGllbnQuaApAQCAtNjAsNyArNjAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3Mg
UGFnZTsKICAgICBjbGFzcyBQb3B1cE1lbnVDbGllbnQ7CiAgICAgY2xhc3MgU2VjdXJpdHlPcmln
aW47Ci0gICAgY2xhc3MgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q7CisgICAgY2xhc3MgR3JhcGhp
Y3NDb250ZXh0M0Q7CiAgICAgY2xhc3MgV2lkZ2V0OwogCiAgICAgc3RydWN0IEZyYW1lTG9hZFJl
cXVlc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCAyNGJkMzI1NmRkN2EwMjYyYzkxMTU5MzA1YjVl
OWEyOWFhNGQyZWFkLi4zMjQxOWEwYmY1Yjc1MjNmMmU1ODk3M2Q2Y2Q1ZmQyMDg4MmIwMjYwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTc2LDcgKzc2LDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdIYXNoLmg+CiAKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1
ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKICNlbmRpZgogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQpAQCAtNzUyLDE2ICs3NTIs
MTcgQEAgdm9pZCBQYWdlOjpzZXREZWJ1Z2dlcihKU0M6OkRlYnVnZ2VyKiBkZWJ1Z2dlcikKICAg
ICAgICAgZnJhbWUtPnNjcmlwdCgpLT5hdHRhY2hEZWJ1Z2dlcihtX2RlYnVnZ2VyKTsKIH0KIAot
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIFBhZ2U6OnNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKCkK
K0dyYXBoaWNzQ29udGV4dDNEKiBQYWdlOjpzaGFyZWRHcmFwaGljc0NvbnRleHQzRCgpCiB7CiAj
aWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICBpZiAoIW1fc2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0QpCi0jaWYgVVNFKFNLSUEpCi0gICAgICAgIC8vIFRlbXBvcmFyeSBjb2RlIHRv
IHBvc3Rwb25lIG1hc3NpdmUgdGVzdCByZWJhc2VsaW5pbmcKLSAgICAgICAgbV9zaGFyZWRHcmFw
aGljc0NvbnRleHQzRCA9IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoY2hyb21lKCks
IHNldHRpbmdzKCktPmxlZ2FjeUFjY2VsZXJhdGVkMmRDYW52YXNFbmFibGVkKCkgPyAwIDogU2hh
cmVkR3JhcGhpY3NDb250ZXh0M0Q6OlVzZVNraWFHUFUpOwotI2Vsc2UKLSAgICAgICAgbV9zaGFy
ZWRHcmFwaGljc0NvbnRleHQzRCA9IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoY2hy
b21lKCksIDApOwotI2VuZGlmCisgICAgaWYgKCFtX3NoYXJlZEdyYXBoaWNzQ29udGV4dDNEKSB7
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHI7CisgICAgICAgIGF0
dHIuZGVwdGggPSBmYWxzZTsKKyAgICAgICAgYXR0ci5zdGVuY2lsID0gdHJ1ZTsKKyAgICAgICAg
YXR0ci5hbnRpYWxpYXMgPSBmYWxzZTsKKyAgICAgICAgYXR0ci5jYW5SZWNvdmVyRnJvbUNvbnRl
eHRMb3NzID0gZmFsc2U7IC8vIENhbnZhcyBjb250ZXh0cyBjYW4gbm90IGhhbmRsZSBsb3N0IGNv
bnRleHRzLgorICAgICAgICBtX3NoYXJlZEdyYXBoaWNzQ29udGV4dDNEID0gR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZShhdHRyLCBjaHJvbWUoKSk7CisgICAgfQogICAgIHJldHVybiBtX3NoYXJl
ZEdyYXBoaWNzQ29udGV4dDNELmdldCgpOwogI2Vsc2UgLy8gIUVOQUJMRShBQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L1BhZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCmluZGV4IGM5NDJjODAyNTljYWVl
YTg5NzA1ZGFkZjBmNWM2ZGNkOTk2ZDMwNzMuLjFlMDNhYWRkZGZjMzdiMWYxYmNjMmI3MzBmZmRi
NzNiM2VkZjBlNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCkBAIC04MSw3ICs4MSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICBjbGFzcyBWaXNpYmxlU2VsZWN0aW9uOwogICAgIGNsYXNzIFNjcm9sbGFi
bGVBcmVhOwogICAgIGNsYXNzIFNldHRpbmdzOwotICAgIGNsYXNzIFNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEOworICAgIGNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwogICAgIGNsYXNzIFNwZWVjaElu
cHV0OwogICAgIGNsYXNzIFNwZWVjaElucHV0Q2xpZW50OwogI2lmIEVOQUJMRShET01fU1RPUkFH
RSkKQEAgLTI2Niw3ICsyNjYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRp
YyB2b2lkIGFsbFZpc2l0ZWRTdGF0ZUNoYW5nZWQoUGFnZUdyb3VwKik7CiAgICAgICAgIHN0YXRp
YyB2b2lkIHZpc2l0ZWRTdGF0ZUNoYW5nZWQoUGFnZUdyb3VwKiwgTGlua0hhc2ggdmlzaXRlZEhh
c2gpOwogCi0gICAgICAgIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBzaGFyZWRHcmFwaGljc0Nv
bnRleHQzRCgpOworICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogc2hhcmVkR3JhcGhpY3NDb250
ZXh0M0QoKTsKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKICAgICAgICAgU3RvcmFnZU5hbWVz
cGFjZSogc2Vzc2lvblN0b3JhZ2UoYm9vbCBvcHRpb25hbENyZWF0ZSA9IHRydWUpOwpAQCAtMzI1
LDcgKzMyNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgT3duUHRyPERyYWdDYXJl
dENvbnRyb2xsZXI+IG1fZHJhZ0NhcmV0Q29udHJvbGxlcjsKIAogI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCi0gICAgICAgIFJlZlB0cjxTaGFyZWRHcmFwaGljc0NvbnRleHQzRD4g
bV9zaGFyZWRHcmFwaGljc0NvbnRleHQzRDsKKyAgICAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBtX3NoYXJlZEdyYXBoaWNzQ29udGV4dDNEOwogI2VuZGlmCiAgICAgICAgIAogI2lmIEVO
QUJMRShEUkFHX1NVUFBPUlQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCBmM2Y5OWU0NzViMjI4ZWQxMzE0ZjlhZTdl
OTFjY2MwNDNkNWU1ZGE2Li44MjYzZjYwNWRjNmQ4MzZkZTQwYjBlNjBmMGQzNWZjNzMxMTQ2YjIw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5jcHAKQEAgLTcwNywxNyArNzA3LDEzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRQbGF0Zm9ybVNob3VsZFNtb290aEZvbnRzKGJvb2wpCiAjZW5kaWYKIAogI2lmICFVU0UoU0tJ
QSkKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRChTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRCosIERyYXdpbmdCdWZmZXIqLCBjb25zdCBJbnRTaXplJikKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0Nv
bnRleHQzRCosIERyYXdpbmdCdWZmZXIqLCBjb25zdCBJbnRTaXplJikKIHsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnN5bmNTb2Z0d2FyZUNhbnZhcygpCiB7CiB9Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjptYXJrRGlydHlSZWN0KGNvbnN0IEludFJlY3QmKQotewotfQogI2VuZGlmCiAK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuaAppbmRleCA2ZTNiNmFiMDRiOGE2OTU0Yzg0NTVmNjNiNjFkZmI3OGM0MDQ5MmUxLi4yZDk5
ODRjYmRlMzQyNDk4MjhiMmM1NGI2ZDUwMWEyZjM3ZmMxOTk0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaApAQCAtMTI4LDcgKzEy
OCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBJbnRSZWN0OwogICAgIGNsYXNz
IFJvdW5kZWRJbnRSZWN0OwogICAgIGNsYXNzIEtVUkw7Ci0gICAgY2xhc3MgU2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0Q7CisgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAgICAgY2xhc3MgVGV4
dFJ1bjsKIAogICAgIGVudW0gVGV4dERyYXdpbmdNb2RlIHsKQEAgLTUxMiw5ICs1MTIsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHBhdHRlcm4gZ2V0SGFpa3VTdHJva2VTdHlsZSgp
OwogI2VuZGlmCiAKLSAgICAgICAgdm9pZCBzZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRChTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRCosIERyYXdpbmdCdWZmZXIqLCBjb25zdCBJbnRTaXplJik7Cisg
ICAgICAgIHZvaWQgc2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Qq
LCBEcmF3aW5nQnVmZmVyKiwgY29uc3QgSW50U2l6ZSYpOwogICAgICAgICB2b2lkIHN5bmNTb2Z0
d2FyZUNhbnZhcygpOwotICAgICAgICB2b2lkIG1hcmtEaXJ0eVJlY3QoY29uc3QgSW50UmVjdCYp
OyAvLyBIaW50cyB0aGF0IGEgcG9ydGlvbiBvZiB0aGUgYmFja2luZyBzdG9yZSBpcyBkaXJ0eS4K
IAogICAgICAgICBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMoRmxvYXRQ
b2ludCYgcDEsIEZsb2F0UG9pbnQmIHAyLCBmbG9hdCBzdHJva2VXaWR0aCwgU3Ryb2tlU3R5bGUp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaAppbmRleCAwY2JlN2UzNDBiMTk4YmY0YzI2Y2ZiODg2NjJiMDdkNjkzODBkZmYy
Li4xZDBmMmY4MzEyNDkzNTZmZGZjYjlkZDE4NmUyZWQ1Mzc5ZThlODFhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKQEAg
LTcyLDYgKzcyLDEwIEBAIHR5cGVkZWYgQ0dMQ29udGV4dE9iaiBQbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDNEOwogdHlwZWRlZiB2b2lkKiBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEOwogI2VuZGlm
CiAKKyNpZiBQTEFURk9STShDSFJPTUlVTSkgJiYgVVNFKFNLSUEpCitjbGFzcyBHckNvbnRleHQ7
CisjZW5kaWYKKwogLy8gVGhlc2UgYXJlIGN1cnJlbnRseSB0aGUgc2FtZSBhbW9uZyBhbGwgaW1w
bGVtZW50YXRpb25zLgogY29uc3QgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBOdWxsUGxhdGZv
cm1HcmFwaGljc0NvbnRleHQzRCA9IDA7CiBjb25zdCBQbGF0Zm9ybTNET2JqZWN0IE51bGxQbGF0
Zm9ybTNET2JqZWN0ID0gMDsKQEAgLTQ2NCw2ICs0NjgsOSBAQCBwdWJsaWM6CiAjZWxpZiBQTEFU
Rk9STShDSFJPTUlVTSkKICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0QoKSBjb25zdDsKICAgICBQbGF0Zm9ybTNET2JqZWN0IHBsYXRmb3JtVGV4
dHVyZSgpIGNvbnN0OworI2lmIFVTRShTS0lBKQorICAgIEdyQ29udGV4dCogZ3JDb250ZXh0KCk7
CisjZW5kaWYKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgUGxhdGZvcm1M
YXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2luZ0J1
ZmZlckNocm9taXVtLmNwcAppbmRleCA1ZDkwYWQ2ODQyZmJjYjkyZGVmZjcwNmM5ZDk2YzY1MzRh
NDZlOWUxLi5lNDE0YWQzYWFiZDIxMTY3OWFlMTBiNWM5ZWI0MzEyZmNmOWFkMGY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVm
ZmVyQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAKQEAgLTM0LDcgKzM0LDYgQEAKIAogI2lu
Y2x1ZGUgIkV4dGVuc2lvbnMzRENocm9taXVtLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKLSNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIgogCiAjaWYgVVNFKFNL
SUEpCiAjaW5jbHVkZSAiR3JDb250ZXh0LmgiCkBAIC0xNjEsNyArMTYwLDcgQEAgUGxhdGZvcm0z
RE9iamVjdCBEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUNvbG9yQnVmZmVyKCkgY29uc3QKIHZvaWQg
RHJhd2luZ0J1ZmZlcjo6c2V0R3JDb250ZXh0KEdyQ29udGV4dCogY29udGV4dCkKIHsKICAgICAv
LyBXZSBqdXN0IHRha2UgYSBwdHIgd2l0aG91dCByZWZlcmVuY2luZyBpdCwgYXMgd2UgcmVxdWly
ZSB0aGF0IHdlIG5ldmVyIG91dGxpdmUKLSAgICAvLyB0aGUgU2hhcmVkR3JhcGhpY3NDb250ZXh0
M0Qgb2JqZWN0IHRoYXQgaXMgZ2l2aW5nIHVzIHRoZSBjb250ZXh0LgorICAgIC8vIHRoZSBHcmFw
aGljc0NvbnRleHQzRCBvYmplY3QgdGhhdCBpcyBnaXZpbmcgdXMgdGhlIGNvbnRleHQuCiAgICAg
bV9nckNvbnRleHQgPSBjb250ZXh0OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250TGludXguY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udExpbnV4LmNwcAppbmRleCBlNzU4MDg2ODNh
MDI4M2U3YjQ0OGE0MzA0MDk1ZWQzYTYxNzliMGU1Li45ZDU2OWU0YzA4NzAwYzcwZGI2YWM0MzNj
MDY3MmVlNjMzYmFlMDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250TGludXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRMaW51eC5jcHAKQEAgLTExMCw3ICsxMTAsNyBAQCB2b2lk
IEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgU2ltcGxlRm9udERh
dGEqIGZvbnQsCiAgICAgICAgIHkgKz0gU2tGbG9hdFRvU2NhbGFyKGFkdltpXS5oZWlnaHQoKSk7
CiAgICAgfQogCi0gICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVE
cmF3KCk7CisgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgp
OwogCiAgICAgU2tDYW52YXMqIGNhbnZhcyA9IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCk7CiAgICAgVGV4dERyYXdpbmdNb2RlRmxhZ3MgdGV4dE1vZGUgPSBnYy0+cGxhdGZvcm1Db250
ZXh0KCktPmdldFRleHREcmF3aW5nTW9kZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNvcnRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmNwcApp
bmRleCA4ZTVmOTA5MDQ1NWFmYjBjYmUxOWEzODZmM2ZjM2M2ZjhkZDEzOTMyLi5iMmM1NTc0MmY3
OWY4ZDNiNTc0MWJlYzdlNTg4ZTdkOGIxY2EyN2QzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVy
LmNwcApAQCAtMjYsNyArMjYsNiBAQAogCiAjaW5jbHVkZSAiY2MvQ0NMYXllclNvcnRlci5oIgog
Ci0jaW5jbHVkZSAiTG9vcEJsaW5uTWF0aFV0aWxzLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3VyZmFj
ZUNocm9taXVtLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtYXRpb25NYXRyaXguaCIKICNpbmNsdWRl
IDxsaW1pdHMuaD4KQEAgLTQ2LDcgKzQ1LDM1IEBAIHN0YXRpYyBXVEZMb2dDaGFubmVsIExvZ0ND
TGF5ZXJTb3J0ZXIgPSB7IDB4MDAwMDAwMDAsICIiLCBXVEZMb2dDaGFubmVsT2ZmIH07CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgTG9vcEJsaW5uTWF0aFV0aWxzOjpwb2ludEluVHJp
YW5nbGU7CitzdGF0aWMgYm9vbCBwb2ludEluVHJpYW5nbGUoY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgYSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIGMpCit7CisgICAgLy8gQWxnb3Jp
dGhtIGZyb20gaHR0cDovL3d3dy5ibGFja3Bhd24uY29tL3RleHRzL3BvaW50aW5wb2x5L2RlZmF1
bHQuaHRtbAorICAgIGZsb2F0IHgwID0gYy54KCkgLSBhLngoKTsKKyAgICBmbG9hdCB5MCA9IGMu
eSgpIC0gYS55KCk7CisgICAgZmxvYXQgeDEgPSBiLngoKSAtIGEueCgpOworICAgIGZsb2F0IHkx
ID0gYi55KCkgLSBhLnkoKTsKKyAgICBmbG9hdCB4MiA9IHBvaW50LngoKSAtIGEueCgpOworICAg
IGZsb2F0IHkyID0gcG9pbnQueSgpIC0gYS55KCk7CisKKyAgICBmbG9hdCBkb3QwMCA9IHgwICog
eDAgKyB5MCAqIHkwOworICAgIGZsb2F0IGRvdDAxID0geDAgKiB4MSArIHkwICogeTE7CisgICAg
ZmxvYXQgZG90MDIgPSB4MCAqIHgyICsgeTAgKiB5MjsKKyAgICBmbG9hdCBkb3QxMSA9IHgxICog
eDEgKyB5MSAqIHkxOworICAgIGZsb2F0IGRvdDEyID0geDEgKiB4MiArIHkxICogeTI7CisgICAg
ZmxvYXQgZGVub21pbmF0b3IgPSBkb3QwMCAqIGRvdDExIC0gZG90MDEgKiBkb3QwMTsKKyAgICBp
ZiAoIWRlbm9taW5hdG9yKQorICAgICAgICAvLyBUcmlhbmdsZSBpcyB6ZXJvLWFyZWEuIFRyZWF0
IHF1ZXJ5IHBvaW50IGFzIG5vdCBiZWluZyBpbnNpZGUuCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAvLyBDb21wdXRlCisgICAgZmxvYXQgaW52ZXJzZURlbm9taW5hdG9yID0gMS4wZiAvIGRl
bm9taW5hdG9yOworICAgIGZsb2F0IHUgPSAoZG90MTEgKiBkb3QwMiAtIGRvdDAxICogZG90MTIp
ICogaW52ZXJzZURlbm9taW5hdG9yOworICAgIGZsb2F0IHYgPSAoZG90MDAgKiBkb3QxMiAtIGRv
dDAxICogZG90MDIpICogaW52ZXJzZURlbm9taW5hdG9yOworCisgICAgcmV0dXJuICh1ID4gMC4w
ZikgJiYgKHYgPiAwLjBmKSAmJiAodSArIHYgPCAxLjBmKTsKK30KIAogaW5saW5lIHN0YXRpYyBm
bG9hdCBwZXJwUHJvZHVjdChjb25zdCBGbG9hdFNpemUmIHUsIGNvbnN0IEZsb2F0U2l6ZSYgdikK
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9CaWN1
YmljU2hhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9CaWN1
YmljU2hhZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjljNDM0MjE3Nzg4
NDUyNzNjYTNmYWQ0OTEwNTcxNGVkNzZlZTViYy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
QmljdWJpY1NoYWRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0KLSNpbmNs
dWRlICJCaWN1YmljU2hhZGVyLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUJpY3ViaWNTaGFkZXI6OkJpY3ViaWNTaGFkZXIoR3Jh
cGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHByb2dyYW0pCi0gICAgOiBTaGFkZXIo
Y29udGV4dCwgcHJvZ3JhbSkKLSAgICAsIG1fbWF0cml4TG9jYXRpb24oY29udGV4dC0+Z2V0VW5p
Zm9ybUxvY2F0aW9uKHByb2dyYW0sICJtYXRyaXgiKSkKLSAgICAsIG1fdGV4TWF0cml4TG9jYXRp
b24oY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJ0ZXhNYXRyaXgiKSkKLSAg
ICAsIG1fY29lZmZpY2llbnRzTG9jYXRpb24oY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW0sICJjb2VmZmljaWVudHMiKSkKLSAgICAsIG1faW1hZ2VJbmNyZW1lbnRMb2NhdGlvbihj
b250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgImltYWdlSW5jcmVtZW50IikpCi0g
ICAgLCBtX2ltYWdlTG9jYXRpb24oY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0s
ICJpbWFnZSIpKQotICAgICwgbV9hbHBoYUxvY2F0aW9uKGNvbnRleHQtPmdldFVuaWZvcm1Mb2Nh
dGlvbihwcm9ncmFtLCAiYWxwaGEiKSkKLSAgICAsIG1fcG9zaXRpb25Mb2NhdGlvbihjb250ZXh0
LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAicG9zaXRpb24iKSkKLXsKLX0KLQotUGFzc093
blB0cjxCaWN1YmljU2hhZGVyPiBCaWN1YmljU2hhZGVyOjpjcmVhdGUoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQpCi17Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJj
ZSA9Ci0gICAgICAgICJ1bmlmb3JtIG1hdDMgbWF0cml4O1xuIgotICAgICAgICAidW5pZm9ybSBt
YXQzIHRleE1hdHJpeDtcbiIKLSAgICAgICAgImF0dHJpYnV0ZSB2ZWMyIHBvc2l0aW9uO1xuIgot
ICAgICAgICAidmFyeWluZyB2ZWMyIHRleENvb3JkO1xuIgotICAgICAgICAidm9pZCBtYWluKCkg
e1xuIgotICAgICAgICAiICAgIHZlYzMgcG9zID0gdmVjMyhwb3NpdGlvbiwgMS4wKTtcbiIKLSAg
ICAgICAgIiAgICB0ZXhDb29yZCA9ICh0ZXhNYXRyaXggKiBwb3MpLnh5O1xuIgotICAgICAgICAi
ICAgIGdsX1Bvc2l0aW9uID0gdmVjNChtYXRyaXggKiBwb3MsIDEuMCk7XG4iCi0gICAgICAgICJ9
XG4iOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRlclNvdXJjZSA9Ci0gICAg
ICAgICIjaWZkZWYgR0xfRVNcbiIKLSAgICAgICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xu
IgotICAgICAgICAiI2VuZGlmXG4iCi0gICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCBpbWFnZTtc
biIKLSAgICAgICAgInVuaWZvcm0gdmVjMiBpbWFnZUluY3JlbWVudDtcbiIKLSAgICAgICAgInVu
aWZvcm0gbWF0NCBjb2VmZmljaWVudHM7XG4iCi0gICAgICAgICJ1bmlmb3JtIGZsb2F0IGFscGhh
O1xuIgotICAgICAgICAidmFyeWluZyB2ZWMyIHRleENvb3JkO1xuIgotICAgICAgICAidmVjNCBj
dWJpY0JsZW5kKGZsb2F0IHQsIHZlYzQgYzAsIHZlYzQgYzEsIHZlYzQgYzIsIHZlYzQgYzMpIHtc
biIKLSAgICAgICAgIiAgICB2ZWM0IHRzID0gdmVjNCgxLjAsIHQsIHQgKiB0LCB0ICogdCAqIHQp
O1xuIgotICAgICAgICAiICAgIHZlYzQgcmVzdWx0ID0gY29lZmZpY2llbnRzICogdHM7XG4iCi0g
ICAgICAgICIgICAgcmV0dXJuIHJlc3VsdC53ICogYzAgKyByZXN1bHQueiAqIGMxICsgcmVzdWx0
LnkgKiBjMiArIHJlc3VsdC54ICogYzM7XG4iCi0gICAgICAgICJ9XG4iCi0gICAgICAgICJ2b2lk
IG1haW4oKSB7XG4iCi0gICAgICAgICIgICAgdmVjMiBpbWFnZUNvb3JkID0gdGV4Q29vcmQ7XG4i
Ci0gICAgICAgICIgICAgdmVjMiBmID0gZnJhY3QoaW1hZ2VDb29yZCAvIGltYWdlSW5jcmVtZW50
KSAtIHZlYzIoMC41LCAwLjUpO1xuIgotICAgICAgICAiICAgIHZlYzQgdDAwID0gdGV4dHVyZTJE
KGltYWdlLCBpbWFnZUNvb3JkICsgaW1hZ2VJbmNyZW1lbnQgKiB2ZWMyKC0xLCAtMSkpO1xuIgot
ICAgICAgICAiICAgIHZlYzQgdDEwID0gdGV4dHVyZTJEKGltYWdlLCBpbWFnZUNvb3JkICsgaW1h
Z2VJbmNyZW1lbnQgKiB2ZWMyKCAwLCAtMSkpO1xuIgotICAgICAgICAiICAgIHZlYzQgdDIwID0g
dGV4dHVyZTJEKGltYWdlLCBpbWFnZUNvb3JkICsgaW1hZ2VJbmNyZW1lbnQgKiB2ZWMyKCAxLCAt
MSkpO1xuIgotICAgICAgICAiICAgIHZlYzQgdDMwID0gdGV4dHVyZTJEKGltYWdlLCBpbWFnZUNv
b3JkICsgaW1hZ2VJbmNyZW1lbnQgKiB2ZWMyKCAyLCAtMSkpO1xuIgotICAgICAgICAiICAgIHZl
YzQgdDAgPSBjdWJpY0JsZW5kKGYueCwgdDAwLCB0MTAsIHQyMCwgdDMwKTtcbiIKLSAgICAgICAg
IiAgICB2ZWM0IHQwMSA9IHRleHR1cmUyRChpbWFnZSwgaW1hZ2VDb29yZCArIGltYWdlSW5jcmVt
ZW50ICogdmVjMigtMSwgMCkpO1xuIgotICAgICAgICAiICAgIHZlYzQgdDExID0gdGV4dHVyZTJE
KGltYWdlLCBpbWFnZUNvb3JkICsgaW1hZ2VJbmNyZW1lbnQgKiB2ZWMyKCAwLCAwKSk7XG4iCi0g
ICAgICAgICIgICAgdmVjNCB0MjEgPSB0ZXh0dXJlMkQoaW1hZ2UsIGltYWdlQ29vcmQgKyBpbWFn
ZUluY3JlbWVudCAqIHZlYzIoIDEsIDApKTtcbiIKLSAgICAgICAgIiAgICB2ZWM0IHQzMSA9IHRl
eHR1cmUyRChpbWFnZSwgaW1hZ2VDb29yZCArIGltYWdlSW5jcmVtZW50ICogdmVjMiggMiwgMCkp
O1xuIgotICAgICAgICAiICAgIHZlYzQgdDEgPSBjdWJpY0JsZW5kKGYueCwgdDAxLCB0MTEsIHQy
MSwgdDMxKTtcbiIKLSAgICAgICAgIiAgICB2ZWM0IHQwMiA9IHRleHR1cmUyRChpbWFnZSwgaW1h
Z2VDb29yZCArIGltYWdlSW5jcmVtZW50ICogdmVjMigtMSwgMSkpO1xuIgotICAgICAgICAiICAg
IHZlYzQgdDEyID0gdGV4dHVyZTJEKGltYWdlLCBpbWFnZUNvb3JkICsgaW1hZ2VJbmNyZW1lbnQg
KiB2ZWMyKCAwLCAxKSk7XG4iCi0gICAgICAgICIgICAgdmVjNCB0MjIgPSB0ZXh0dXJlMkQoaW1h
Z2UsIGltYWdlQ29vcmQgKyBpbWFnZUluY3JlbWVudCAqIHZlYzIoIDEsIDEpKTtcbiIKLSAgICAg
ICAgIiAgICB2ZWM0IHQzMiA9IHRleHR1cmUyRChpbWFnZSwgaW1hZ2VDb29yZCArIGltYWdlSW5j
cmVtZW50ICogdmVjMiggMiwgMSkpO1xuIgotICAgICAgICAiICAgIHZlYzQgdDIgPSBjdWJpY0Js
ZW5kKGYueCwgdDAyLCB0MTIsIHQyMiwgdDMyKTtcbiIKLSAgICAgICAgIiAgICB2ZWM0IHQwMyA9
IHRleHR1cmUyRChpbWFnZSwgaW1hZ2VDb29yZCArIGltYWdlSW5jcmVtZW50ICogdmVjMigtMSwg
MikpO1xuIgotICAgICAgICAiICAgIHZlYzQgdDEzID0gdGV4dHVyZTJEKGltYWdlLCBpbWFnZUNv
b3JkICsgaW1hZ2VJbmNyZW1lbnQgKiB2ZWMyKCAwLCAyKSk7XG4iCi0gICAgICAgICIgICAgdmVj
NCB0MjMgPSB0ZXh0dXJlMkQoaW1hZ2UsIGltYWdlQ29vcmQgKyBpbWFnZUluY3JlbWVudCAqIHZl
YzIoIDEsIDIpKTtcbiIKLSAgICAgICAgIiAgICB2ZWM0IHQzMyA9IHRleHR1cmUyRChpbWFnZSwg
aW1hZ2VDb29yZCArIGltYWdlSW5jcmVtZW50ICogdmVjMiggMiwgMikpO1xuIgotICAgICAgICAi
ICAgIHZlYzQgdDMgPSBjdWJpY0JsZW5kKGYueCwgdDAzLCB0MTMsIHQyMywgdDMzKTtcbiIKLSAg
ICAgICAgIiAgICBnbF9GcmFnQ29sb3IgPSBjdWJpY0JsZW5kKGYueSwgdDAsIHQxLCB0MiwgdDMp
O1xuIgotICAgICAgICAifVxuIjsKLQotICAgIHVuc2lnbmVkIHByb2dyYW0gPSBsb2FkUHJvZ3Jh
bShjb250ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGZyYWdtZW50U2hhZGVyU291cmNlKTsKLSAg
ICBpZiAoIXByb2dyYW0pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgcmV0dXJuIGFk
b3B0UHRyKG5ldyBCaWN1YmljU2hhZGVyKGNvbnRleHQsIHByb2dyYW0pKTsKLX0KLQotdm9pZCBC
aWN1YmljU2hhZGVyOjp1c2UoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdGV4VHJhbnNmb3JtLCBjb25zdCBmbG9hdCBjb2VmZmljaWVudHNb
MTZdLCBjb25zdCBmbG9hdCBpbWFnZUluY3JlbWVudFsyXSwgZmxvYXQgYWxwaGEpCi17Ci0gICAg
bV9jb250ZXh0LT51c2VQcm9ncmFtKG1fcHJvZ3JhbSk7Ci0gICAgZmxvYXQgbWF0cml4WzldOwot
ICAgIGFmZmluZVRvM3gzKHRyYW5zZm9ybSwgbWF0cml4KTsKLSAgICBtX2NvbnRleHQtPnVuaWZv
cm1NYXRyaXgzZnYobV9tYXRyaXhMb2NhdGlvbiwgZmFsc2UgLyp0cmFuc3Bvc2UqLywgbWF0cml4
LCAxIC8qY291bnQqLyk7Ci0KLSAgICBmbG9hdCB0ZXhNYXRyaXhbOV07Ci0gICAgYWZmaW5lVG8z
eDModGV4VHJhbnNmb3JtLCB0ZXhNYXRyaXgpOwotICAgIG1fY29udGV4dC0+dW5pZm9ybU1hdHJp
eDNmdihtX3RleE1hdHJpeExvY2F0aW9uLCBmYWxzZSAvKnRyYW5zcG9zZSovLCB0ZXhNYXRyaXgs
IDEgLypjb3VudCovKTsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXg0ZnYobV9jb2VmZmlj
aWVudHNMb2NhdGlvbiwgZmFsc2UgLyp0cmFuc3Bvc2UqLywgY29uc3RfY2FzdDxmbG9hdCAqPihj
b2VmZmljaWVudHMpLCAxIC8qY291bnQqLyk7Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0yZiht
X2ltYWdlSW5jcmVtZW50TG9jYXRpb24sIGltYWdlSW5jcmVtZW50WzBdLCBpbWFnZUluY3JlbWVu
dFsxXSk7Ci0KLSAgICAvLyBGb3Igbm93LCB3ZSBhbHdheXMgdXNlIHRleHR1cmUgdW5pdCAwLiBJ
ZiB0aGF0IGV2ZXIgY2hhbmdlcywgd2Ugc2hvdWxkCi0gICAgLy8gZXhwb3NlIHRoaXMgcGFyYW1l
dGVyIHRvIHRoZSBjYWxsZXIuCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMWkobV9pbWFnZUxvY2F0
aW9uLCAwKTsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0xZihtX2FscGhhTG9jYXRpb24sIGFscGhh
KTsKLQotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmliUG9pbnRlcihtX3Bvc2l0aW9uTG9jYXRp
b24sIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAsIDApOwotCi0gICAgbV9j
b250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3Bvc2l0aW9uTG9jYXRpb24pOwotfQot
Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0JpY3ViaWNTaGFkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9CaWN1YmljU2hhZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY3NTIy
ZjQ0NTdkM2ZhYzdmY2MxMGUxYTRkOGI4YmEzMzcyZmQ2NTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0JpY3ViaWNTaGFkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZu
ZGVmIEJpY3ViaWNTaGFkZXJfaAotI2RlZmluZSBCaWN1YmljU2hhZGVyX2gKLQotI2luY2x1ZGUg
IlNoYWRlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIEJpY3ViaWNTaGFkZXIg
OiBwdWJsaWMgU2hhZGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxCaWN1Ymlj
U2hhZGVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqKTsKLQotICAgIHZvaWQgdXNlKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGV4VHJhbnNmb3JtLCBj
b25zdCBmbG9hdCBjb2VmZmljaWVudHNbMTZdLCBjb25zdCBmbG9hdCBpbWFnZUluY3JlbWVudFsy
XSwgZmxvYXQgYWxwaGEpOwotCi1wcml2YXRlOgotICAgIEJpY3ViaWNTaGFkZXIoR3JhcGhpY3ND
b250ZXh0M0QqLCB1bnNpZ25lZCBwcm9ncmFtKTsKLQotICAgIGludCBtX21hdHJpeExvY2F0aW9u
OwotICAgIGludCBtX3RleE1hdHJpeExvY2F0aW9uOwotICAgIGludCBtX2NvZWZmaWNpZW50c0xv
Y2F0aW9uOwotICAgIGludCBtX2ltYWdlSW5jcmVtZW50TG9jYXRpb247Ci0gICAgaW50IG1faW1h
Z2VMb2NhdGlvbjsKLSAgICBpbnQgbV9hbHBoYUxvY2F0aW9uOwotICAgIGludCBtX3Bvc2l0aW9u
TG9jYXRpb247Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBCaWN1YmljU2hhZGVyX2gKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Db252b2x1dGlvblNoYWRl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ29udm9sdXRpb25T
aGFkZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDgwMDI3NGZhNThiYzM4
ZGVlYjg1YzE3Njk5OTk1YTVjOWU1MzY0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Db252
b2x1dGlvblNoYWRlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0
cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0KLSNpbmNs
dWRlICJDb252b2x1dGlvblNoYWRlci5oIgotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0Qu
aCIKLSNpbmNsdWRlICJTdHJpbmdFeHRyYXMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1D
b252b2x1dGlvblNoYWRlcjo6Q29udm9sdXRpb25TaGFkZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQsIHVuc2lnbmVkIHByb2dyYW0sIGludCBrZXJuZWxXaWR0aCkKLSAgICA6IFNoYWRlcihj
b250ZXh0LCBwcm9ncmFtKQotICAgICwgbV9rZXJuZWxXaWR0aChrZXJuZWxXaWR0aCkKLSAgICAs
IG1fbWF0cml4TG9jYXRpb24oY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJt
YXRyaXgiKSkKLSAgICAsIG1fdGV4TWF0cml4TG9jYXRpb24oY29udGV4dC0+Z2V0VW5pZm9ybUxv
Y2F0aW9uKHByb2dyYW0sICJ0ZXhNYXRyaXgiKSkKLSAgICAsIG1fa2VybmVsTG9jYXRpb24oY29u
dGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJrZXJuZWwiKSkKLSAgICAsIG1faW1h
Z2VMb2NhdGlvbihjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgImltYWdlIikp
Ci0gICAgLCBtX2ltYWdlSW5jcmVtZW50TG9jYXRpb24oY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0
aW9uKHByb2dyYW0sICJpbWFnZUluY3JlbWVudCIpKQotICAgICwgbV9wb3NpdGlvbkxvY2F0aW9u
KGNvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sICJwb3NpdGlvbiIpKQotewotfQot
Ci1QYXNzT3duUHRyPENvbnZvbHV0aW9uU2hhZGVyPiBDb252b2x1dGlvblNoYWRlcjo6Y3JlYXRl
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBpbnQga2VybmVsV2lkdGgpCi17Ci0gICAgc3Rh
dGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclJhdyA9Ci0gICAgICAgICIjZGVmaW5lIEtFUk5F
TF9XSURUSCAlZFxuIgotICAgICAgICAidW5pZm9ybSBtYXQzIG1hdHJpeDtcbiIKLSAgICAgICAg
InVuaWZvcm0gbWF0MyB0ZXhNYXRyaXg7XG4iCi0gICAgICAgICJ1bmlmb3JtIHZlYzIgaW1hZ2VJ
bmNyZW1lbnQ7XG4iCi0gICAgICAgICJhdHRyaWJ1dGUgdmVjMiBwb3NpdGlvbjtcbiIKLSAgICAg
ICAgInZhcnlpbmcgdmVjMiBpbWFnZUNvb3JkO1xuIgotICAgICAgICAidm9pZCBtYWluKCkge1xu
IgotICAgICAgICAiICAgIHZlYzMgcG9zID0gdmVjMyhwb3NpdGlvbiwgMS4wKTtcbiIKLSAgICAg
ICAgIiAgICAvLyBPZmZzZXQgaW1hZ2UgY29vcmRzIGJ5IGhhbGYgb2Yga2VybmVsIHdpZHRoLCBp
biBpbWFnZSB0ZXhlbHNcbiIKLSAgICAgICAgIiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQobWF0cml4
ICogcG9zLCAxLjApO1xuIgotICAgICAgICAiICAgIGZsb2F0IHNjYWxlID0gKGZsb2F0KEtFUk5F
TF9XSURUSCkgLSAxLjApIC8gMi4wO1xuIgotICAgICAgICAiICAgIGltYWdlQ29vcmQgPSAodGV4
TWF0cml4ICogcG9zKS54eSAtIHZlYzIoc2NhbGUsIHNjYWxlKSAqIGltYWdlSW5jcmVtZW50O1xu
IgotICAgICAgICAifVxuIjsKLSAgICBjaGFyIHZlcnRleFNoYWRlclNvdXJjZVsxMDI0XTsKLSAg
ICBzbnByaW50Zih2ZXJ0ZXhTaGFkZXJTb3VyY2UsIHNpemVvZih2ZXJ0ZXhTaGFkZXJTb3VyY2Up
LCB2ZXJ0ZXhTaGFkZXJSYXcsIGtlcm5lbFdpZHRoKTsKLSAgICBzdGF0aWMgY29uc3QgY2hhciog
ZnJhZ21lbnRTaGFkZXJSYXcgPQotICAgICAgICAiI2lmZGVmIEdMX0VTXG4iCi0gICAgICAgICJw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDtcbiIKLSAgICAgICAgIiNlbmRpZlxuIgotICAgICAgICAi
I2RlZmluZSBLRVJORUxfV0lEVEggJWRcbiIKLSAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIGlt
YWdlO1xuIgotICAgICAgICAidW5pZm9ybSBmbG9hdCBrZXJuZWxbS0VSTkVMX1dJRFRIXTtcbiIK
LSAgICAgICAgInVuaWZvcm0gdmVjMiBpbWFnZUluY3JlbWVudDtcbiIKLSAgICAgICAgInZhcnlp
bmcgdmVjMiBpbWFnZUNvb3JkO1xuIgotICAgICAgICAidm9pZCBtYWluKCkge1xuIgotICAgICAg
ICAiICAgIHZlYzIgY29vcmQgPSBpbWFnZUNvb3JkO1xuIgotICAgICAgICAiICAgIHZlYzQgc3Vt
ID0gdmVjNCgwLCAwLCAwLCAwKTtcbiIKLSAgICAgICAgIiAgICBmb3IgKGludCBpID0gMDsgaSA8
IEtFUk5FTF9XSURUSDsgaSsrKSB7XG4iCi0gICAgICAgICIgICAgICBzdW0gKz0gdGV4dHVyZTJE
KGltYWdlLCBjb29yZCkgKiBrZXJuZWxbaV07XG4iCi0gICAgICAgICIgICAgICBjb29yZCArPSBp
bWFnZUluY3JlbWVudDtcbiIKLSAgICAgICAgIiAgICB9XG4iCi0gICAgICAgICIgICAgZ2xfRnJh
Z0NvbG9yID0gc3VtO1xuIgotICAgICAgICAifVxuIjsKLSAgICBjaGFyIGZyYWdtZW50U2hhZGVy
U291cmNlWzEwMjRdOwotICAgIHNucHJpbnRmKGZyYWdtZW50U2hhZGVyU291cmNlLCBzaXplb2Yo
ZnJhZ21lbnRTaGFkZXJTb3VyY2UpLCBmcmFnbWVudFNoYWRlclJhdywga2VybmVsV2lkdGgpOwot
Ci0gICAgdW5zaWduZWQgcHJvZ3JhbSA9IGxvYWRQcm9ncmFtKGNvbnRleHQsIHZlcnRleFNoYWRl
clNvdXJjZSwgZnJhZ21lbnRTaGFkZXJTb3VyY2UpOwotICAgIGlmICghcHJvZ3JhbSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBDb252b2x1dGlvblNo
YWRlcihjb250ZXh0LCBwcm9ncmFtLCBrZXJuZWxXaWR0aCkpOwotfQotCi12b2lkIENvbnZvbHV0
aW9uU2hhZGVyOjp1c2UoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdGV4VHJhbnNmb3JtLCBjb25zdCBmbG9hdCoga2VybmVsLCBpbnQga2Vy
bmVsV2lkdGgsIGZsb2F0IGltYWdlSW5jcmVtZW50WzJdKQotewotICAgIG1fY29udGV4dC0+dXNl
UHJvZ3JhbShtX3Byb2dyYW0pOwotICAgIGZsb2F0IG1hdHJpeFs5XTsKLSAgICBhZmZpbmVUbzN4
Myh0cmFuc2Zvcm0sIG1hdHJpeCk7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KG1f
bWF0cml4TG9jYXRpb24sIGZhbHNlIC8qdHJhbnNwb3NlKi8sIG1hdHJpeCwgMSAvKmNvdW50Ki8p
OwotCi0gICAgZmxvYXQgdGV4TWF0cml4WzldOwotICAgIGFmZmluZVRvM3gzKHRleFRyYW5zZm9y
bSwgdGV4TWF0cml4KTsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobV90ZXhNYXRy
aXhMb2NhdGlvbiwgZmFsc2UgLyp0cmFuc3Bvc2UqLywgdGV4TWF0cml4LCAxIC8qY291bnQqLyk7
Ci0KLSAgICBtX2NvbnRleHQtPnVuaWZvcm0yZihtX2ltYWdlSW5jcmVtZW50TG9jYXRpb24sIGlt
YWdlSW5jcmVtZW50WzBdLCBpbWFnZUluY3JlbWVudFsxXSk7Ci0KLSAgICAvLyBGb3Igbm93LCB3
ZSBhbHdheXMgdXNlIHRleHR1cmUgdW5pdCAwLiBJZiB0aGF0IGV2ZXIgY2hhbmdlcywgd2Ugc2hv
dWxkCi0gICAgLy8gZXhwb3NlIHRoaXMgcGFyYW1ldGVyIHRvIHRoZSBjYWxsZXIuCi0gICAgbV9j
b250ZXh0LT51bmlmb3JtMWkobV9pbWFnZUxvY2F0aW9uLCAwKTsKLSAgICBpZiAoa2VybmVsV2lk
dGggPiBtX2tlcm5lbFdpZHRoKQotICAgICAgICBrZXJuZWxXaWR0aCA9IG1fa2VybmVsV2lkdGg7
Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtMWZ2KG1fa2VybmVsTG9jYXRpb24sIGNvbnN0X2Nhc3Q8
ZmxvYXQqPihrZXJuZWwpLCBrZXJuZWxXaWR0aCk7Ci0KLSAgICBtX2NvbnRleHQtPnZlcnRleEF0
dHJpYlBvaW50ZXIobV9wb3NpdGlvbkxvY2F0aW9uLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVQsIGZhbHNlLCAwLCAwKTsKLQotICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJy
YXkobV9wb3NpdGlvbkxvY2F0aW9uKTsKLX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Db252b2x1dGlvblNoYWRlci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0NvbnZvbHV0aW9uU2hhZGVyLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzM2UwZjVlMmEyOTEwYzc3NmMxZGE4MmJh
NDgxNDg4ZGFiNGU4ZDYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0NvbnZvbHV0aW9uU2hh
ZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBDb252b2x1dGlvblNo
YWRlcl9oCi0jZGVmaW5lIENvbnZvbHV0aW9uU2hhZGVyX2gKLQotI2luY2x1ZGUgIlNoYWRlci5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENvbnZvbHV0aW9uU2hhZGVyIDogcHVi
bGljIFNoYWRlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8Q29udm9sdXRpb25T
aGFkZXI+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCosIGludCBrZXJuZWxXaWR0aCk7Ci0KLSAg
ICB2b2lkIHVzZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRleFRyYW5zZm9ybSwgY29uc3QgZmxvYXQqIGtlcm5lbCwgaW50IGtlcm5lbFdpZHRoLCBmbG9h
dCBpbWFnZUluY3JlbWVudFsyXSk7Ci0KLXByaXZhdGU6Ci0gICAgQ29udm9sdXRpb25TaGFkZXIo
R3JhcGhpY3NDb250ZXh0M0QqLCB1bnNpZ25lZCBwcm9ncmFtLCBpbnQga2VybmVsV2lkdGgpOwot
Ci0gICAgaW50IG1fa2VybmVsV2lkdGg7Ci0gICAgaW50IG1fbWF0cml4TG9jYXRpb247Ci0gICAg
aW50IG1fdGV4TWF0cml4TG9jYXRpb247Ci0gICAgaW50IG1fa2VybmVsTG9jYXRpb247Ci0gICAg
aW50IG1faW1hZ2VMb2NhdGlvbjsKLSAgICBpbnQgbV9pbWFnZUluY3JlbWVudExvY2F0aW9uOwot
ICAgIGludCBtX3Bvc2l0aW9uTG9jYXRpb247Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBDb252b2x1
dGlvblNoYWRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvR3JhcGhpY3NDb250ZXh0R1BVLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9HcmFwaGljc0NvbnRleHRHUFUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA5ZDNlOWFhMGUzOTllMGI5ZDYyZDM5ZDJlMWRkYTAzYjBjOTRkNTkzLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9HcmFwaGljc0NvbnRleHRHUFUuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsOTMxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
Ci0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
Ci0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0R1BVLmgiCi0KLSNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCi0jaW5jbHVkZSAi
RmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiRmxvYXRTaXplLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0M0QuaCIKLSNpbmNsdWRlICJpbnRlcm5hbF9nbHUuaCIKLSNpbmNsdWRlICJJbnRSZWN0
LmgiCi0jaW5jbHVkZSAiTG9vcEJsaW5uTWF0aFV0aWxzLmgiCi0jaW5jbHVkZSAiTG9vcEJsaW5u
UGF0aFByb2Nlc3Nvci5oIgotI2luY2x1ZGUgIkxvb3BCbGlublNvbGlkRmlsbFNoYWRlci5oIgot
I2luY2x1ZGUgIlBhdGguaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUg
IlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCi0jaWYgVVNFKFNLSUEpCi0jaW5jbHVkZSAiU2tQ
YXRoLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJUZXh0dXJlLmgiCi0KLSNkZWZpbmUgX1VTRV9NQVRI
X0RFRklORVMKLSNpbmNsdWRlIDxtYXRoLmg+Ci0KLSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIu
aD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotLy8gTnVtYmVyIG9mIGxpbmUgc2VnbWVudHMgdXNlZCB0byBhcHByb3hpbWF0ZSBiZXppZXIg
Y3VydmVzLgotY29uc3QgaW50IHBhdGhUZXNzZWxhdGlvbiA9IDMwOwotdHlwZWRlZiB2b2lkIChH
TEFQSUVOVFJZICpURVNTQ0IpKCk7Ci10eXBlZGVmIFdURjo6VmVjdG9yPGZsb2F0PiBGbG9hdFZl
Y3RvcjsKLXR5cGVkZWYgV1RGOjpWZWN0b3I8RmxvYXRQb2ludD4gRmxvYXRQb2ludFZlY3RvcjsK
LQotc3RydWN0IFBhdGhBbmRUcmFuc2Zvcm0gewotICAgIFBhdGhBbmRUcmFuc2Zvcm0oY29uc3Qg
UGF0aCYgcCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0KQotICAgICAgICA6IHBhdGgocCkKLSAg
ICAgICAgLCB0cmFuc2Zvcm0odCkKLSAgICB7Ci0gICAgfQotICAgIFBhdGggcGF0aDsKLSAgICBB
ZmZpbmVUcmFuc2Zvcm0gdHJhbnNmb3JtOwotfTsKLQotc3RydWN0IEdyYXBoaWNzQ29udGV4dEdQ
VTo6U3RhdGUgewotICAgIFN0YXRlKCkKLSAgICAgICAgOiBtX2ZpbGxDb2xvcigwLCAwLCAwLCAy
NTUpCi0gICAgICAgICwgbV9zaGFkb3dDb2xvcigwLCAwLCAwLCAwKQotICAgICAgICAsIG1fYWxw
aGEoMS4wZikKLSAgICAgICAgLCBtX2NvbXBvc2l0ZU9wKENvbXBvc2l0ZVNvdXJjZU92ZXIpCi0g
ICAgICAgICwgbV9udW1DbGlwcGluZ1BhdGhzKDApCi0gICAgICAgICwgbV9zaGFkb3dPZmZzZXQo
MCwgMCkKLSAgICAgICAgLCBtX3NoYWRvd0JsdXIoMCkKLSAgICAgICAgLCBtX3NoYWRvd3NJZ25v
cmVUcmFuc2Zvcm1zKGZhbHNlKQotICAgIHsKLSAgICB9Ci0gICAgU3RhdGUoY29uc3QgU3RhdGUm
IG90aGVyKQotICAgICAgICA6IG1fZmlsbENvbG9yKG90aGVyLm1fZmlsbENvbG9yKQotICAgICAg
ICAsIG1fc2hhZG93Q29sb3Iob3RoZXIubV9zaGFkb3dDb2xvcikKLSAgICAgICAgLCBtX2FscGhh
KG90aGVyLm1fYWxwaGEpCi0gICAgICAgICwgbV9jb21wb3NpdGVPcChvdGhlci5tX2NvbXBvc2l0
ZU9wKQotICAgICAgICAsIG1fY3RtKG90aGVyLm1fY3RtKQotICAgICAgICAsIG1fY2xpcHBpbmdQ
YXRocygpIC8vIERvbid0IGNvcHk7IGNsaXBwaW5nIHBhdGhzIGFyZSB0cmFja2VkIHBlci1zdGF0
ZS4KLSAgICAgICAgLCBtX251bUNsaXBwaW5nUGF0aHMob3RoZXIubV9udW1DbGlwcGluZ1BhdGhz
KQotICAgICAgICAsIG1fc2hhZG93T2Zmc2V0KG90aGVyLm1fc2hhZG93T2Zmc2V0KQotICAgICAg
ICAsIG1fc2hhZG93Qmx1cihvdGhlci5tX3NoYWRvd0JsdXIpCi0gICAgICAgICwgbV9zaGFkb3dz
SWdub3JlVHJhbnNmb3JtcyhvdGhlci5tX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQotICAgIHsK
LSAgICB9Ci0gICAgQ29sb3IgbV9maWxsQ29sb3I7Ci0gICAgQ29sb3IgbV9zaGFkb3dDb2xvcjsK
LSAgICBmbG9hdCBtX2FscGhhOwotICAgIENvbXBvc2l0ZU9wZXJhdG9yIG1fY29tcG9zaXRlT3A7
Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fY3RtOwotICAgIFdURjo6VmVjdG9yPFBhdGhBbmRUcmFu
c2Zvcm0+IG1fY2xpcHBpbmdQYXRoczsKLSAgICBpbnQgbV9udW1DbGlwcGluZ1BhdGhzOwotICAg
IEZsb2F0U2l6ZSBtX3NoYWRvd09mZnNldDsKLSAgICBmbG9hdCBtX3NoYWRvd0JsdXI7Ci0gICAg
Ym9vbCBtX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwotCi0gICAgLy8gSGVscGVyIGZ1bmN0aW9u
IGZvciBhcHBseWluZyB0aGUgc3RhdGUncyBhbHBoYSB2YWx1ZSB0byB0aGUgZ2l2ZW4gaW5wdXQK
LSAgICAvLyBjb2xvciB0byBwcm9kdWNlIGEgbmV3IG91dHB1dCBjb2xvci4gVGhlIGxvZ2ljIGlz
IHRoZSBzYW1lIGFzCi0gICAgLy8gUGxhdGZvcm1Db250ZXh0U2tpYTo6U3RhdGU6OmFwcGx5QWxw
aGEoKSwgYnV0IHRoZSB0eXBlIGlzIGRpZmZlcmVudC4KLSAgICBDb2xvciBhcHBseUFscGhhKGNv
bnN0IENvbG9yJiBjKQotICAgIHsKLSAgICAgICAgaW50IHMgPSByb3VuZGYobV9hbHBoYSAqIDI1
Nik7Ci0gICAgICAgIGlmIChzID49IDI1NikKLSAgICAgICAgICAgIHJldHVybiBjOwotICAgICAg
ICBpZiAocyA8IDApCi0gICAgICAgICAgICByZXR1cm4gQ29sb3IoKTsKLQotICAgICAgICBpbnQg
YSA9IChjLmFscGhhKCkgKiBzKSA+PiA4OwotICAgICAgICByZXR1cm4gQ29sb3IoYy5yZWQoKSwg
Yy5ncmVlbigpLCBjLmJsdWUoKSwgYSk7Ci0gICAgfQotICAgIGJvb2wgc2hhZG93QWN0aXZlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3NoYWRvd0NvbG9yLmFscGhhKCkgPiAwICYm
IChtX3NoYWRvd0JsdXIgfHwgbV9zaGFkb3dPZmZzZXQud2lkdGgoKSB8fCBtX3NoYWRvd09mZnNl
dC5oZWlnaHQoKSk7Ci0gICAgfQotICAgIGJvb2wgY2xpcHBpbmdFbmFibGVkKCkgeyByZXR1cm4g
bV9udW1DbGlwcGluZ1BhdGhzID4gMDsgfQotfTsKLQotc3RhdGljIGlubGluZSBGbG9hdFBvaW50
IG9wZXJhdG9yKihjb25zdCBGbG9hdFBvaW50JiBmLCBmbG9hdCBzY2FsZSkKLXsKLSAgICByZXR1
cm4gRmxvYXRQb2ludChmLngoKSAqIHNjYWxlLCBmLnkoKSAqIHNjYWxlKTsKLX0KLQotc3RhdGlj
IGlubGluZSBGbG9hdFBvaW50IG9wZXJhdG9yKihmbG9hdCBzY2FsZSwgY29uc3QgRmxvYXRQb2lu
dCYgZikKLXsKLSAgICByZXR1cm4gRmxvYXRQb2ludChmLngoKSAqIHNjYWxlLCBmLnkoKSAqIHNj
YWxlKTsKLX0KLQotc3RhdGljIGlubGluZSBGbG9hdFNpemUgb3BlcmF0b3IqKGNvbnN0IEZsb2F0
U2l6ZSYgZiwgZmxvYXQgc2NhbGUpCi17Ci0gICAgcmV0dXJuIEZsb2F0U2l6ZShmLndpZHRoKCkg
KiBzY2FsZSwgZi5oZWlnaHQoKSAqIHNjYWxlKTsKLX0KLQotc3RhdGljIGlubGluZSBGbG9hdFNp
emUgb3BlcmF0b3IqKGZsb2F0IHNjYWxlLCBjb25zdCBGbG9hdFNpemUmIGYpCi17Ci0gICAgcmV0
dXJuIEZsb2F0U2l6ZShmLndpZHRoKCkgKiBzY2FsZSwgZi5oZWlnaHQoKSAqIHNjYWxlKTsKLX0K
LQotY2xhc3MgUXVhZHJhdGljIHsKLSAgcHVibGljOgotICAgIFF1YWRyYXRpYyhGbG9hdFBvaW50
IGEsIEZsb2F0UG9pbnQgYiwgRmxvYXRQb2ludCBjKSA6Ci0gICAgICAgIG1fYShhKSwgbV9iKGIp
LCBtX2MoYykKLSAgICB7Ci0gICAgfQotICAgIHN0YXRpYyBRdWFkcmF0aWMgZnJvbUJlemllcihG
bG9hdFBvaW50IHAwLCBGbG9hdFBvaW50IHAxLCBGbG9hdFBvaW50IHAyKQotICAgIHsKLSAgICAg
ICAgRmxvYXRTaXplIHAxcyhwMS54KCksIHAxLnkoKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBwMnMo
cDIueCgpLCBwMi55KCkpOwotICAgICAgICBGbG9hdFBvaW50IGIgPSAtMi4wZiAqIHAwICsgMi4w
ZiAqIHAxczsKLSAgICAgICAgRmxvYXRQb2ludCBjID0gICAgICAgICBwMCAtIDIuMGYgKiBwMXMg
KyBwMnM7Ci0gICAgICAgIHJldHVybiBRdWFkcmF0aWMocDAsIGIsIGMpOwotICAgIH0KLSAgICBp
bmxpbmUgRmxvYXRQb2ludCBldmFsdWF0ZShmbG9hdCB0KQotICAgIHsKLSAgICAgICAgcmV0dXJu
IG1fYSArIHQgKiAobV9iICsgdCAqIG1fYyk7Ci0gICAgfQotICAgIEZsb2F0UG9pbnQgbV9hLCBt
X2IsIG1fYywgbV9kOwotfTsKLQotY2xhc3MgQ3ViaWMgewotICBwdWJsaWM6Ci0gICAgQ3ViaWMo
RmxvYXRQb2ludCBhLCBGbG9hdFBvaW50IGIsIEZsb2F0UG9pbnQgYywgRmxvYXRQb2ludCBkKSA6
Ci0gICAgICAgIG1fYShhKSwgbV9iKGIpLCBtX2MoYyksIG1fZChkKSAKLSAgICB7Ci0gICAgfQot
ICAgIHN0YXRpYyBDdWJpYyBmcm9tQmV6aWVyKEZsb2F0UG9pbnQgcDAsIEZsb2F0UG9pbnQgcDEs
IEZsb2F0UG9pbnQgcDIsIEZsb2F0UG9pbnQgcDMpCi0gICAgewotICAgICAgICBGbG9hdFNpemUg
cDFzKHAxLngoKSwgcDEueSgpKTsKLSAgICAgICAgRmxvYXRTaXplIHAycyhwMi54KCksIHAyLnko
KSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBwM3MocDMueCgpLCBwMy55KCkpOwotICAgICAgICBGbG9h
dFBvaW50IGIgPSAtMy4wZiAqIHAwICsgMy4wZiAqIHAxczsKLSAgICAgICAgRmxvYXRQb2ludCBj
ID0gIDMuMGYgKiBwMCAtIDYuMGYgKiBwMXMgKyAzLjBmICogcDJzOwotICAgICAgICBGbG9hdFBv
aW50IGQgPSAtMS4wZiAqIHAwICsgMy4wZiAqIHAxcyAtIDMuMGYgKiBwMnMgKyBwM3M7Ci0gICAg
ICAgIHJldHVybiBDdWJpYyhwMCwgYiwgYywgZCk7Ci0gICAgfQotICAgIGlubGluZSBGbG9hdFBv
aW50IGV2YWx1YXRlKGZsb2F0IHQpCi0gICAgewotICAgICAgICByZXR1cm4gbV9hICsgdCAqICht
X2IgKyB0ICogKG1fYyArIHQgKiBtX2QpKTsKLSAgICB9Ci0gICAgRmxvYXRQb2ludCBtX2EsIG1f
YiwgbV9jLCBtX2Q7Ci19OwotCi1HcmFwaGljc0NvbnRleHRHUFU6OkdyYXBoaWNzQ29udGV4dEdQ
VShTaGFyZWRHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2lu
Z0J1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKLSAgICA6IG1fc2l6ZShzaXplKQotICAgICwg
bV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2RyYXdpbmdCdWZmZXIoZHJhd2luZ0J1ZmZlcikK
LSAgICAsIG1fc3RhdGUoMCkKLSAgICAsIG1fcGF0aEluZGV4QnVmZmVyKDApCi0gICAgLCBtX3Bh
dGhWZXJ0ZXhCdWZmZXIoMCkKLXsKLSAgICBtX2ZsaXBNYXRyaXgudHJhbnNsYXRlKC0xLjBmLCAx
LjBmKTsKLSAgICBtX2ZsaXBNYXRyaXguc2NhbGUoMi4wZiAvIHNpemUud2lkdGgoKSwgLTIuMGYg
LyBzaXplLmhlaWdodCgpKTsKLQotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoU3RhdGUoKSk7Ci0g
ICAgbV9zdGF0ZSA9ICZtX3N0YXRlU3RhY2subGFzdCgpOwotfQotCi1HcmFwaGljc0NvbnRleHRH
UFU6On5HcmFwaGljc0NvbnRleHRHUFUoKQotewotICAgIGlmIChtX3BhdGhJbmRleEJ1ZmZlcikK
LSAgICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5kZWxldGVCdWZmZXIobV9w
YXRoSW5kZXhCdWZmZXIpOwotICAgIGlmIChtX3BhdGhWZXJ0ZXhCdWZmZXIpCi0gICAgICAgIG1f
Y29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZGVsZXRlQnVmZmVyKG1fcGF0aFZlcnRleEJ1
ZmZlcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R1BVOjpiaW5kRnJhbWVidWZmZXIoKQot
ewotICAgIG1fZHJhd2luZ0J1ZmZlci0+YmluZCgpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dEdQVTo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsKLSAgICBiaW5kRnJhbWVi
dWZmZXIoKTsKLSAgICBpZiAobV9zdGF0ZS0+bV9jdG0uaXNJZGVudGl0eSgpICYmICFtX3N0YXRl
LT5jbGlwcGluZ0VuYWJsZWQoKSkgewotICAgICAgICBzY2lzc29yQ2xlYXIocmVjdC54KCksIHJl
Y3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIHNhdmUoKTsKLSAgICAgICAgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNsZWFy
KTsKLSAgICAgICAgZmlsbFJlY3QocmVjdCwgQ29sb3IoUkdCQTMyKDApKSwgQ29sb3JTcGFjZURl
dmljZVJHQik7Ci0gICAgICAgIHJlc3RvcmUoKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0R1BVOjphcHBseVN0YXRlKCkKLXsKLSAgICBiaW5kRnJhbWVidWZmZXIoKTsKLSAgICBt
X2NvbnRleHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0b3IobV9zdGF0ZS0+bV9jb21wb3NpdGVPcCk7
Ci0gICAgYXBwbHlDbGlwcGluZyhtX3N0YXRlLT5jbGlwcGluZ0VuYWJsZWQoKSk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R1BVOjpzY2lzc29yQ2xlYXIoZmxvYXQgeCwgZmxvYXQgeSwgZmxv
YXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKLXsKLSAgICBpbnQgaW50WCA9IHN0YXRpY19jYXN0PGlu
dD4oeCArIDAuNWYpOwotICAgIGludCBpbnRZID0gc3RhdGljX2Nhc3Q8aW50Pih5ICsgMC41Zik7
Ci0gICAgaW50IGludFdpZHRoID0gc3RhdGljX2Nhc3Q8aW50Pih4ICsgd2lkdGggKyAwLjVmKSAt
IGludFg7Ci0gICAgaW50IGludEhlaWdodCA9IHN0YXRpY19jYXN0PGludD4oeSArIGhlaWdodCAr
IDAuNWYpIC0gaW50WTsKLSAgICBtX2NvbnRleHQtPnNjaXNzb3IoaW50WCwgbV9zaXplLmhlaWdo
dCgpIC0gaW50SGVpZ2h0IC0gaW50WSwgaW50V2lkdGgsIGludEhlaWdodCk7Ci0gICAgbV9jb250
ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7Ci0gICAgbV9jb250
ZXh0LT5jbGVhckNvbG9yKENvbG9yKFJHQkEzMigwKSkpOwotICAgIG1fY29udGV4dC0+Y2xlYXIo
R3JhcGhpY3NDb250ZXh0M0Q6OkNPTE9SX0JVRkZFUl9CSVQpOwotICAgIG1fY29udGV4dC0+ZGlz
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6U0NJU1NPUl9URVNUKTsKLX0KLQotdm9pZCBHcmFwaGlj
c0NvbnRleHRHUFU6OmZpbGxQYXRoKGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgaWYgKG1fc3Rh
dGUtPnNoYWRvd0FjdGl2ZSgpKSB7Ci0gICAgICAgIGJlZ2luU2hhZG93RHJhdygpOwotICAgICAg
ICBmaWxsUGF0aEludGVybmFsKHBhdGgsIG1fc3RhdGUtPm1fc2hhZG93Q29sb3IpOwotICAgICAg
ICBlbmRTaGFkb3dEcmF3KHBhdGguYm91bmRpbmdSZWN0KCkpOwotICAgIH0KLQotICAgIGFwcGx5
U3RhdGUoKTsKLSAgICBmaWxsUGF0aEludGVybmFsKHBhdGgsIG1fc3RhdGUtPmFwcGx5QWxwaGEo
bV9zdGF0ZS0+bV9maWxsQ29sb3IpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHUFU6OmZp
bGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBDb2xvclNw
YWNlIGNvbG9yU3BhY2UpCi17Ci0gICAgaWYgKG1fc3RhdGUtPnNoYWRvd0FjdGl2ZSgpKSB7Ci0g
ICAgICAgIGJlZ2luU2hhZG93RHJhdygpOwotICAgICAgICBmaWxsUmVjdEludGVybmFsKHJlY3Qs
IG1fc3RhdGUtPm1fc2hhZG93Q29sb3IpOwotICAgICAgICBlbmRTaGFkb3dEcmF3KHJlY3QpOwot
ICAgIH0KLQotICAgIGFwcGx5U3RhdGUoKTsKLSAgICBmaWxsUmVjdEludGVybmFsKHJlY3QsIGNv
bG9yKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHUFU6OmZpbGxSZWN0KGNvbnN0IEZsb2F0
UmVjdCYgcmVjdCkKLXsKLSAgICBmaWxsUmVjdChyZWN0LCBtX3N0YXRlLT5hcHBseUFscGhhKG1f
c3RhdGUtPm1fZmlsbENvbG9yKSwgQ29sb3JTcGFjZURldmljZVJHQik7Ci19Ci0KLXZvaWQgR3Jh
cGhpY3NDb250ZXh0R1BVOjpmaWxsUmVjdEludGVybmFsKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwg
Y29uc3QgQ29sb3ImIGNvbG9yKQotewotICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXgobV9mbGlw
TWF0cml4KTsKLSAgICBtYXRyaXggKj0gbV9zdGF0ZS0+bV9jdG07Ci0gICAgbWF0cml4LnRyYW5z
bGF0ZShyZWN0LngoKSwgcmVjdC55KCkpOwotICAgIG1hdHJpeC5zY2FsZShyZWN0LndpZHRoKCks
IHJlY3QuaGVpZ2h0KCkpOwotCi0gICAgbV9jb250ZXh0LT51c2VRdWFkVmVydGljZXMoKTsKLSAg
ICBtX2NvbnRleHQtPnVzZUZpbGxTb2xpZFByb2dyYW0obWF0cml4LCBjb2xvcik7Ci0gICAgbV9j
b250ZXh0LT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9TVFJJUCwgMCwg
NCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R1BVOjpzZXRGaWxsQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCi17Ci0gICAgbV9zdGF0ZS0+bV9maWxs
Q29sb3IgPSBjb2xvcjsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHUFU6OnNldEFscGhhKGZs
b2F0IGFscGhhKQotewotICAgIG1fc3RhdGUtPm1fYWxwaGEgPSBhbHBoYTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHUFU6OnNldFNoYWRvd0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29s
b3JTcGFjZSkKLXsKLSAgICBtX3N0YXRlLT5tX3NoYWRvd0NvbG9yID0gY29sb3I7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R1BVOjpzZXRTaGFkb3dPZmZzZXQoY29uc3QgRmxvYXRTaXplJiBv
ZmZzZXQpCi17Ci0gICAgbV9zdGF0ZS0+bV9zaGFkb3dPZmZzZXQgPSBvZmZzZXQ7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R1BVOjpzZXRTaGFkb3dCbHVyKGZsb2F0IHNoYWRvd0JsdXIpCi17
Ci0gICAgbV9zdGF0ZS0+bV9zaGFkb3dCbHVyID0gc2hhZG93Qmx1cjsKLX0KLQotdm9pZCBHcmFw
aGljc0NvbnRleHRHUFU6OnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKGJvb2wgc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMpCi17Ci0gICAgbV9zdGF0ZS0+bV9zaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyA9IHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQ
VTo6dHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpCi17Ci0gICAgbV9zdGF0ZS0+bV9jdG0udHJh
bnNsYXRlKHgsIHkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6cm90YXRlKGZsb2F0
IGFuZ2xlSW5SYWRpYW5zKQotewotICAgIG1fc3RhdGUtPm1fY3RtLnJvdGF0ZShhbmdsZUluUmFk
aWFucyAqICgxODAuMGYgLyBNX1BJKSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R1BVOjpz
Y2FsZShjb25zdCBGbG9hdFNpemUmIHNpemUpCi17Ci0gICAgbV9zdGF0ZS0+bV9jdG0uc2NhbGUo
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
UFU6OmNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZSkKLXsKLSAgICBtX3N0
YXRlLT5tX2N0bSAqPSBhZmZpbmU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R1BVOjpzZXRD
VE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhZmZpbmUpCi17Ci0gICAgbV9zdGF0ZS0+bV9jdG0g
PSBhZmZpbmU7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R1BVOjpjbGlwUGF0aChjb25zdCBQ
YXRoJiBwYXRoKQotewotICAgIGJpbmRGcmFtZWJ1ZmZlcigpOwotICAgIGNoZWNrR0xFcnJvcigi
YmluZEZyYW1lYnVmZmVyIik7Ci0gICAgYmVnaW5TdGVuY2lsRHJhdyhHcmFwaGljc0NvbnRleHQz
RDo6SU5DUik7Ci0gICAgLy8gUmVkIGlzIHVzZWQgc28gd2UgY2FuIHNlZSBpdCBpZiBpdCBlbmRz
IHVwIGluIHRoZSBjb2xvciBidWZmZXIuCi0gICAgQ29sb3IgcmVkKDI1NSwgMCwgMCwgMjU1KTsK
LSAgICBmaWxsUGF0aEludGVybmFsKHBhdGgsIHJlZCk7Ci0gICAgbV9zdGF0ZS0+bV9jbGlwcGlu
Z1BhdGhzLmFwcGVuZChQYXRoQW5kVHJhbnNmb3JtKHBhdGgsIG1fc3RhdGUtPm1fY3RtKSk7Ci0g
ICAgbV9zdGF0ZS0+bV9udW1DbGlwcGluZ1BhdGhzKys7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R1BVOjpjbGlwT3V0KGNvbnN0IFBhdGgmIHBhdGgpCi17Ci0gICAgQVNTRVJUKCEiY2xpcE91
dCBpcyB1bnN1cHBvcnRlZCBpbiBHcmFwaGljc0NvbnRleHRHUFUuXG4iKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHUFU6OnNhdmUoKQotewotICAgIG1fc3RhdGVTdGFjay5hcHBlbmQoU3Rh
dGUobV9zdGF0ZVN0YWNrLmxhc3QoKSkpOwotICAgIG1fc3RhdGUgPSAmbV9zdGF0ZVN0YWNrLmxh
c3QoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHUFU6OnJlc3RvcmUoKQotewotICAgIEFT
U0VSVCghbV9zdGF0ZVN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgY29uc3QgVmVjdG9yPFBhdGhBbmRU
cmFuc2Zvcm0+JiBjbGlwcGluZ1BhdGhzID0gbV9zdGF0ZS0+bV9jbGlwcGluZ1BhdGhzOwotICAg
IGlmICghY2xpcHBpbmdQYXRocy5pc0VtcHR5KCkpIHsKLSAgICAgICAgYmVnaW5TdGVuY2lsRHJh
dyhHcmFwaGljc0NvbnRleHQzRDo6REVDUik7Ci0gICAgICAgIFdURjo6VmVjdG9yPFBhdGhBbmRU
cmFuc2Zvcm0+Ojpjb25zdF9pdGVyYXRvciBwYXRoSXRlcjsKLSAgICAgICAgZm9yIChwYXRoSXRl
ciA9IGNsaXBwaW5nUGF0aHMuYmVnaW4oKTsgcGF0aEl0ZXIgPCBjbGlwcGluZ1BhdGhzLmVuZCgp
OyArK3BhdGhJdGVyKSB7Ci0gICAgICAgICAgICBtX3N0YXRlLT5tX2N0bSA9IHBhdGhJdGVyLT50
cmFuc2Zvcm07Ci0gICAgICAgICAgICAvLyBSZWQgaXMgdXNlZCBzbyB3ZSBjYW4gc2VlIGl0IGlm
IGl0IGVuZHMgdXAgaW4gdGhlIGNvbG9yIGJ1ZmZlci4KLSAgICAgICAgICAgIENvbG9yIHJlZCgy
NTUsIDAsIDAsIDI1NSk7Ci0gICAgICAgICAgICBmaWxsUGF0aEludGVybmFsKHBhdGhJdGVyLT5w
YXRoLCByZWQpOwotICAgICAgICB9Ci0gICAgfQotICAgIG1fc3RhdGVTdGFjay5yZW1vdmVMYXN0
KCk7Ci0gICAgbV9zdGF0ZSA9ICZtX3N0YXRlU3RhY2subGFzdCgpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdQVTo6ZHJhd1RleHR1cmVkUmVjdCh1bnNpZ25lZCB0ZXh0dXJlLCBjb25zdCBJ
bnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UgY29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3ApCi17Ci0gICAgYmluZEZyYW1lYnVmZmVyKCk7Ci0gICAgbV9jb250ZXh0LT5h
cHBseUNvbXBvc2l0ZU9wZXJhdG9yKGNvbXBvc2l0ZU9wKTsKLSAgICBhcHBseUNsaXBwaW5nKGZh
bHNlKTsKLQotICAgIG1fY29udGV4dC0+c2V0QWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRTApOwotCi0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZSk7Ci0KLSAgICBkcmF3VGV4dHVyZWRRdWFkKHRleHR1
cmVTaXplLCBzcmNSZWN0LCBkc3RSZWN0LCBtX3N0YXRlLT5tX2N0bSwgbV9zdGF0ZS0+bV9hbHBo
YSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R1BVOjpkcmF3VGV4dHVyZWRSZWN0KFRleHR1
cmUqIHRleHR1cmUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0
ZU9wKQotewotICAgIGRyYXdUZXh0dXJlZFJlY3QodGV4dHVyZSwgc3JjUmVjdCwgZHN0UmVjdCwg
bV9zdGF0ZS0+bV9jdG0sIG1fc3RhdGUtPm1fYWxwaGEsIGNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9w
LCBtX3N0YXRlLT5jbGlwcGluZ0VuYWJsZWQoKSk7Ci19Ci0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHRHUFU6OmRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSogdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9y
bSYgdHJhbnNmb3JtLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3Np
dGVPcGVyYXRvciBjb21wb3NpdGVPcCwgYm9vbCBjbGlwKQotewotICAgIGJpbmRGcmFtZWJ1ZmZl
cigpOwotICAgIG1fY29udGV4dC0+YXBwbHlDb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVPcCk7
Ci0gICAgYXBwbHlDbGlwcGluZyhjbGlwKTsKLSAgICBjb25zdCBUaWxpbmdEYXRhJiB0aWxlcyA9
IHRleHR1cmUtPnRpbGVzKCk7Ci0gICAgSW50UmVjdCB0aWxlSWR4UmVjdCA9IHRpbGVzLm92ZXJs
YXBwZWRUaWxlSW5kaWNlcyhzcmNSZWN0KTsKLQotICAgIG1fY29udGV4dC0+c2V0QWN0aXZlVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApOwotCi0gICAgZm9yIChpbnQgeSA9IHRp
bGVJZHhSZWN0LnkoKTsgeSA8PSB0aWxlSWR4UmVjdC5tYXhZKCk7IHkrKykgewotICAgICAgICBm
b3IgKGludCB4ID0gdGlsZUlkeFJlY3QueCgpOyB4IDw9IHRpbGVJZHhSZWN0Lm1heFgoKTsgeCsr
KQotICAgICAgICAgICAgZHJhd1RleHR1cmVkUmVjdFRpbGUodGV4dHVyZSwgdGlsZXMudGlsZUlu
ZGV4KHgsIHkpLCBzcmNSZWN0LCBkc3RSZWN0LCB0cmFuc2Zvcm0sIGFscGhhKTsKLSAgICB9Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R1BVOjpkcmF3VGV4dHVyZWRSZWN0VGlsZShUZXh0dXJl
KiB0ZXh0dXJlLCBpbnQgdGlsZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9h
dFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBmbG9hdCBh
bHBoYSkKLXsKLSAgICBpZiAoZHN0UmVjdC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGNvbnN0IFRpbGluZ0RhdGEmIHRpbGVzID0gdGV4dHVyZS0+dGlsZXMoKTsKLQotICAgIHRl
eHR1cmUtPmJpbmRUaWxlKHRpbGUpOwotCi0gICAgRmxvYXRSZWN0IHNyY1JlY3RDbGlwcGVkSW5U
aWxlU3BhY2U7Ci0gICAgRmxvYXRSZWN0IGRzdFJlY3RJbnRlcnNlY3RlZDsKLSAgICB0aWxlcy5p
bnRlcnNlY3REcmF3UXVhZChzcmNSZWN0LCBkc3RSZWN0LCB0aWxlLCAmc3JjUmVjdENsaXBwZWRJ
blRpbGVTcGFjZSwgJmRzdFJlY3RJbnRlcnNlY3RlZCk7Ci0KLSAgICBJbnRSZWN0IHRpbGVCb3Vu
ZHNXaXRoQm9yZGVyID0gdGlsZXMudGlsZUJvdW5kc1dpdGhCb3JkZXIodGlsZSk7Ci0KLSAgICBk
cmF3VGV4dHVyZWRRdWFkKHRpbGVCb3VuZHNXaXRoQm9yZGVyLnNpemUoKSwgc3JjUmVjdENsaXBw
ZWRJblRpbGVTcGFjZSwgZHN0UmVjdEludGVyc2VjdGVkLCB0cmFuc2Zvcm0sIGFscGhhKTsKLX0K
LQotdm9pZCBHcmFwaGljc0NvbnRleHRHUFU6OmNvbnZvbHZlUmVjdCh1bnNpZ25lZCB0ZXh0dXJl
LCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBj
b25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGZsb2F0IGltYWdlSW5jcmVtZW50WzJdLCBjb25zdCBm
bG9hdCoga2VybmVsLCBpbnQga2VybmVsV2lkdGgpCi17Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgdGV4dHVyZSk7Ci0gICAgbV9jb250
ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGlj
c0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19F
REdFKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250
ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlO
X0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpOwotICAgIG1fY29udGV4dC0+dGV4
UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0
M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhpY3NDb250ZXh0M0Q6Ok5FQVJFU1QpOwotCi0g
ICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeChtX2ZsaXBNYXRyaXgpOwotICAgIG1hdHJpeC50cmFu
c2xhdGUoZHN0UmVjdC54KCksIGRzdFJlY3QueSgpKTsKLSAgICBtYXRyaXguc2NhbGUoZHN0UmVj
dC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpKTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSB0ZXhN
YXRyaXg7Ci0gICAgdGV4TWF0cml4LnNjYWxlKDEuMGYgLyB0ZXh0dXJlU2l6ZS53aWR0aCgpLCAx
LjBmIC8gdGV4dHVyZVNpemUuaGVpZ2h0KCkpOwotICAgIHRleE1hdHJpeC50cmFuc2xhdGUoc3Jj
UmVjdC54KCksIHNyY1JlY3QueSgpKTsKLSAgICB0ZXhNYXRyaXguc2NhbGUoc3JjUmVjdC53aWR0
aCgpLCBzcmNSZWN0LmhlaWdodCgpKTsKLQotICAgIG1fY29udGV4dC0+dXNlUXVhZFZlcnRpY2Vz
KCk7Ci0gICAgbV9jb250ZXh0LT51c2VDb252b2x1dGlvblByb2dyYW0obWF0cml4LCB0ZXhNYXRy
aXgsIGtlcm5lbCwga2VybmVsV2lkdGgsIGltYWdlSW5jcmVtZW50KTsKLSAgICBtX2NvbnRleHQt
PmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX1NUUklQLCAwLCA0KTsKLSAg
ICBjaGVja0dMRXJyb3IoImdsRHJhd0FycmF5cyIpOwotfQotCi1zdGF0aWMgZmxvYXQgZ2F1c3Mo
ZmxvYXQgeCwgZmxvYXQgc2lnbWEpCi17Ci0gICAgcmV0dXJuIGV4cCgtICh4ICogeCkgLyAoMi4w
ZiAqIHNpZ21hICogc2lnbWEpKTsKLX0KLQotc3RhdGljIHZvaWQgYnVpbGRLZXJuZWwoZmxvYXQg
c2lnbWEsIGZsb2F0KiBrZXJuZWwsIGludCBrZXJuZWxXaWR0aCkKLXsKLSAgICBmbG9hdCBoYWxm
V2lkdGggPSAoa2VybmVsV2lkdGggLSAxLjBmKSAvIDIuMGY7Ci0gICAgZmxvYXQgc3VtID0gMC4w
ZjsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGtlcm5lbFdpZHRoOyArK2kpIHsKLSAgICAgICAg
a2VybmVsW2ldID0gZ2F1c3MoaSAtIGhhbGZXaWR0aCwgc2lnbWEpOwotICAgICAgICBzdW0gKz0g
a2VybmVsW2ldOwotICAgIH0KLSAgICAvLyBOb3JtYWxpemUgdGhlIGtlcm5lbAotICAgIGZsb2F0
IHNjYWxlID0gMS4wZiAvIHN1bTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGtlcm5lbFdpZHRo
OyArK2kpCi0gICAgICAgIGtlcm5lbFtpXSAqPSBzY2FsZTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHUFU6OmRyYXdUZXh0dXJlZFF1YWQoY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgZmxvYXQgYWxwaGEpCi17Ci0gICAgQWZmaW5lVHJh
bnNmb3JtIG1hdHJpeChtX2ZsaXBNYXRyaXgpOwotICAgIG1hdHJpeCAqPSB0cmFuc2Zvcm07Ci0g
ICAgbWF0cml4LnRyYW5zbGF0ZShkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOwotICAgIG1hdHJp
eC5zY2FsZShkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkpOwotCi0gICAgQWZmaW5l
VHJhbnNmb3JtIHRleE1hdHJpeDsKLSAgICB0ZXhNYXRyaXguc2NhbGUoMS4wZiAvIHRleHR1cmVT
aXplLndpZHRoKCksIDEuMGYgLyB0ZXh0dXJlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgdGV4TWF0cml4
LnRyYW5zbGF0ZShzcmNSZWN0LngoKSwgc3JjUmVjdC55KCkpOwotICAgIHRleE1hdHJpeC5zY2Fs
ZShzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCkpOwotCi0gICAgbV9jb250ZXh0LT51
c2VRdWFkVmVydGljZXMoKTsKLSAgICBtX2NvbnRleHQtPnVzZVRleHR1cmVQcm9ncmFtKG1hdHJp
eCwgdGV4TWF0cml4LCBhbHBoYSk7Ci0gICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKEdyYXBoaWNz
Q29udGV4dDNEOjpUUklBTkdMRV9TVFJJUCwgMCwgNCk7Ci0gICAgY2hlY2tHTEVycm9yKCJnbERy
YXdBcnJheXMiKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHUFU6OmRyYXdUZXh0dXJlZFF1
YWRNaXRjaGVsbChjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtLCBmbG9hdCBhbHBoYSkKLXsKLSAgICBzdGF0aWMgY29uc3QgZmxvYXQgbWl0Y2hl
bGxDb2VmZmljaWVudHNbMTZdID0gewotICAgICAgICAgMC4wZiAvIDE4LjBmLCAgIDEuMGYgLyAx
OC4wZiwgIDE2LjBmIC8gMTguMGYsICAgMS4wZiAvIDE4LjBmLAotICAgICAgICAgMC4wZiAvIDE4
LjBmLCAgIDkuMGYgLyAxOC4wZiwgICAwLjBmIC8gMTguMGYsICAtOS4wZiAvIDE4LjBmLAotICAg
ICAgICAtNi4wZiAvIDE4LjBmLCAgMjcuMGYgLyAxOC4wZiwgLTM2LjBmIC8gMTguMGYsICAxNS4w
ZiAvIDE4LjBmLAotICAgICAgICAgNy4wZiAvIDE4LjBmLCAtMjEuMGYgLyAxOC4wZiwgIDIxLjBm
IC8gMTguMGYsICAtNy4wZiAvIDE4LjBmLAotICAgIH07Ci0KLSAgICBBZmZpbmVUcmFuc2Zvcm0g
bWF0cml4KG1fZmxpcE1hdHJpeCk7Ci0gICAgbWF0cml4ICo9IHRyYW5zZm9ybTsKLSAgICBtYXRy
aXgudHJhbnNsYXRlKGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7Ci0gICAgbWF0cml4LnNjYWxl
KGRzdFJlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBmbG9hdCBpbWFnZUlu
Y3JlbWVudFsyXSA9IHsgMS4wZiAvIHRleHR1cmVTaXplLndpZHRoKCksIDEuMGYgLyB0ZXh0dXJl
U2l6ZS5oZWlnaHQoKSB9OwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIHRleE1hdHJpeDsKLSAgICB0
ZXhNYXRyaXguc2NhbGUoaW1hZ2VJbmNyZW1lbnRbMF0sIGltYWdlSW5jcmVtZW50WzFdKTsKLSAg
ICB0ZXhNYXRyaXgudHJhbnNsYXRlKHNyY1JlY3QueCgpLCBzcmNSZWN0LnkoKSk7Ci0gICAgdGV4
TWF0cml4LnNjYWxlKHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBt
X2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpO
RUFSRVNUKTsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBo
aWNzQ29udGV4dDNEOjpORUFSRVNUKTsKLQotICAgIG1fY29udGV4dC0+dXNlUXVhZFZlcnRpY2Vz
KCk7Ci0gICAgbV9jb250ZXh0LT51c2VCaWN1YmljUHJvZ3JhbShtYXRyaXgsIHRleE1hdHJpeCwg
bWl0Y2hlbGxDb2VmZmljaWVudHMsIGltYWdlSW5jcmVtZW50LCBhbHBoYSk7Ci0gICAgbV9jb250
ZXh0LT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9TVFJJUCwgMCwgNCk7
Ci0gICAgY2hlY2tHTEVycm9yKCJnbERyYXdBcnJheXMiKTsKLX0KLQotdm9pZCBHcmFwaGljc0Nv
bnRleHRHUFU6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCkKLXsK
LSAgICBtX3N0YXRlLT5tX2NvbXBvc2l0ZU9wID0gb3A7Ci19Ci0KLVRleHR1cmUqIEdyYXBoaWNz
Q29udGV4dEdQVTo6Y3JlYXRlVGV4dHVyZShOYXRpdmVJbWFnZVB0ciBwdHIsIFRleHR1cmU6OkZv
cm1hdCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICByZXR1cm4gbV9jb250
ZXh0LT5jcmVhdGVUZXh0dXJlKHB0ciwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotVGV4
dHVyZSogR3JhcGhpY3NDb250ZXh0R1BVOjpnZXRUZXh0dXJlKE5hdGl2ZUltYWdlUHRyIHB0cikK
LXsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRUZXh0dXJlKHB0cik7Ci19Ci0KLSNpZiBVU0Uo
U0tJQSkKLS8vIFRoaXMgaXMgYWN0dWFsbHkgY3Jvc3MtcGxhdGZvcm0gY29kZSwgYnV0IHNpbmNl
IGl0cyBvbmx5IGNhbGxlciBpcyBpbnNpZGUgYQotLy8gVVNFKFNLSUEpLCBpdCB3aWxsIGNhdXNl
IGEgd2FybmluZy1hcy1lcnJvciBvbiBDaHJvbWUvTWFjLgotc3RhdGljIHZvaWQgaW50ZXJwb2xh
dGVRdWFkcmF0aWMoRmxvYXRQb2ludFZlY3RvciogdmVydGljZXMsIGNvbnN0IEZsb2F0UG9pbnQm
IHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwgY29uc3QgRmxvYXRQb2ludCYgcDIpCi17Ci0gICAg
ZmxvYXQgdEluY3JlbWVudCA9IDEuMGYgLyBwYXRoVGVzc2VsYXRpb24sIHQgPSB0SW5jcmVtZW50
OwotICAgIFF1YWRyYXRpYyBjID0gUXVhZHJhdGljOjpmcm9tQmV6aWVyKHAwLCBwMSwgcDIpOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGF0aFRlc3NlbGF0aW9uOyArK2ksIHQgKz0gdEluY3Jl
bWVudCkKLSAgICAgICAgdmVydGljZXMtPmFwcGVuZChjLmV2YWx1YXRlKHQpKTsKLX0KLQotc3Rh
dGljIHZvaWQgaW50ZXJwb2xhdGVDdWJpYyhGbG9hdFBvaW50VmVjdG9yKiB2ZXJ0aWNlcywgY29u
c3QgRmxvYXRQb2ludCYgcDAsIGNvbnN0IEZsb2F0UG9pbnQmIHAxLCBjb25zdCBGbG9hdFBvaW50
JiBwMiwgY29uc3QgRmxvYXRQb2ludCYgcDMpCi17Ci0gICAgZmxvYXQgdEluY3JlbWVudCA9IDEu
MGYgLyBwYXRoVGVzc2VsYXRpb24sIHQgPSB0SW5jcmVtZW50OwotICAgIEN1YmljIGMgPSBDdWJp
Yzo6ZnJvbUJlemllcihwMCwgcDEsIHAyLCBwMyk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBw
YXRoVGVzc2VsYXRpb247ICsraSwgdCArPSB0SW5jcmVtZW50KQotICAgICAgICB2ZXJ0aWNlcy0+
YXBwZW5kKGMuZXZhbHVhdGUodCkpOwotfQotI2VuZGlmCi0KLXN0cnVjdCBQb2x5Z29uRGF0YSB7
Ci0gICAgUG9seWdvbkRhdGEoRmxvYXRQb2ludFZlY3RvciogdmVydGljZXMsIFdURjo6VmVjdG9y
PHNob3J0PiogaW5kaWNlcykKLSAgICAgIDogbV92ZXJ0aWNlcyh2ZXJ0aWNlcykKLSAgICAgICwg
bV9pbmRpY2VzKGluZGljZXMpCi0gICAgewotICAgIH0KLSAgICBGbG9hdFBvaW50VmVjdG9yKiBt
X3ZlcnRpY2VzOwotICAgIFdURjo6VmVjdG9yPHNob3J0PiogbV9pbmRpY2VzOwotfTsKLQotc3Rh
dGljIHZvaWQgYmVnaW5EYXRhKEdMZW51bSB0eXBlLCB2b2lkKiBkYXRhKQotewotICAgIEFTU0VS
VCh0eXBlID09IEdMX1RSSUFOR0xFUyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVkZ2VGbGFnRGF0YShH
TGJvb2xlYW4gZmxhZywgdm9pZCogZGF0YSkKLXsKLX0KLQotc3RhdGljIHZvaWQgdmVydGV4RGF0
YSh2b2lkKiB2ZXJ0ZXhEYXRhLCB2b2lkKiBkYXRhKQotewotICAgIHN0YXRpY19jYXN0PFBvbHln
b25EYXRhKj4oZGF0YSktPm1faW5kaWNlcy0+YXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8bG9uZz4o
dmVydGV4RGF0YSkpOwotfQotCi1zdGF0aWMgdm9pZCBlbmREYXRhKHZvaWQqIGRhdGEpCi17Ci19
Ci0KLXN0YXRpYyB2b2lkIGNvbWJpbmVEYXRhKEdMZG91YmxlIGNvb3Jkc1szXSwgdm9pZCogdmVy
dGV4RGF0YVs0XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMZmxvYXQgd2Vp
Z2h0WzRdLCB2b2lkICoqb3V0RGF0YSwgdm9pZCogZGF0YSkKLXsKLSAgICBQb2x5Z29uRGF0YSog
cG9seWdvbkRhdGEgPSBzdGF0aWNfY2FzdDxQb2x5Z29uRGF0YSo+KGRhdGEpOwotICAgIGludCBp
bmRleCA9IHBvbHlnb25EYXRhLT5tX3ZlcnRpY2VzLT5zaXplKCk7Ci0gICAgcG9seWdvbkRhdGEt
Pm1fdmVydGljZXMtPmFwcGVuZChGbG9hdFBvaW50KHN0YXRpY19jYXN0PGZsb2F0Pihjb29yZHNb
MF0pLCBzdGF0aWNfY2FzdDxmbG9hdD4oY29vcmRzWzFdKSkpOwotICAgICpvdXREYXRhID0gcmVp
bnRlcnByZXRfY2FzdDx2b2lkKj4oaW5kZXgpOwotfQotCi10eXBlZGVmIHZvaWQgKCpURVNTQ0Ip
KCk7Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R1BVOjp0ZXNzZWxhdGVBbmRGaWxsUGF0aChjb25z
dCBQYXRoJiBwYXRoLCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKCFtX3BhdGhWZXJ0
ZXhCdWZmZXIpCi0gICAgICAgIG1fcGF0aFZlcnRleEJ1ZmZlciA9IG1fY29udGV4dC0+Z3JhcGhp
Y3NDb250ZXh0M0QoKS0+Y3JlYXRlQnVmZmVyKCk7Ci0gICAgaWYgKCFtX3BhdGhJbmRleEJ1ZmZl
cikKLSAgICAgICAgbV9wYXRoSW5kZXhCdWZmZXIgPSBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4
dDNEKCktPmNyZWF0ZUJ1ZmZlcigpOwotCi0gICAgQWZmaW5lVHJhbnNmb3JtIG1hdHJpeChtX2Zs
aXBNYXRyaXgpOwotICAgIG1hdHJpeCAqPSBtX3N0YXRlLT5tX2N0bTsKLQotICAgIEZsb2F0UG9p
bnRWZWN0b3IgaW5WZXJ0aWNlczsKLSAgICBXVEY6OlZlY3RvcjxzaXplX3Q+IGNvbnRvdXJzOwot
I2lmIFVTRShTS0lBKQotICAgIGNvbnN0IFNrUGF0aCogc2tQYXRoID0gcGF0aC5wbGF0Zm9ybVBh
dGgoKTsKLSAgICBTa1BvaW50IHB0c1s0XTsKLSAgICBTa1BhdGg6Okl0ZXIgaXRlcigqc2tQYXRo
LCB0cnVlKTsKLSAgICBTa1BhdGg6OlZlcmIgdmVyYjsKLSAgICB3aGlsZSAoKHZlcmIgPSBpdGVy
Lm5leHQocHRzKSkgIT0gU2tQYXRoOjprRG9uZV9WZXJiKSB7Ci0gICAgICAgIHN3aXRjaCAodmVy
YikgewotICAgICAgICBjYXNlIFNrUGF0aDo6a01vdmVfVmVyYjoKLSAgICAgICAgICAgIGluVmVy
dGljZXMuYXBwZW5kKHB0c1swXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBT
a1BhdGg6OmtMaW5lX1ZlcmI6Ci0gICAgICAgICAgICBpblZlcnRpY2VzLmFwcGVuZChwdHNbMV0p
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2tQYXRoOjprUXVhZF9WZXJiOgot
ICAgICAgICAgICAgaW50ZXJwb2xhdGVRdWFkcmF0aWMoJmluVmVydGljZXMsIHB0c1swXSwgcHRz
WzFdLCBwdHNbMl0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2tQYXRoOjpr
Q3ViaWNfVmVyYjoKLSAgICAgICAgICAgIGludGVycG9sYXRlQ3ViaWMoJmluVmVydGljZXMsIHB0
c1swXSwgcHRzWzFdLCBwdHNbMl0sIHB0c1szXSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBTa1BhdGg6OmtDbG9zZV9WZXJiOgotICAgICAgICAgICAgY29udG91cnMuYXBwZW5k
KGluVmVydGljZXMuc2l6ZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNr
UGF0aDo6a0RvbmVfVmVyYjoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
I2Vsc2UKLSAgICBBU1NFUlQoISJQYXRoIGV4dHJhY3Rpb24gbm90IGltcGxlbWVudGVkIG9uIHRo
aXMgcGxhdGZvcm0uIik7Ci0jZW5kaWYKLQotICAgIGlmIChjb250b3Vycy5zaXplKCkgPT0gMSAm
JiBMb29wQmxpbm5NYXRoVXRpbHM6OmlzQ29udmV4KGluVmVydGljZXMuYmVnaW4oKSwgaW5WZXJ0
aWNlcy5zaXplKCkpKSB7Ci0gICAgICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+
YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3BhdGhWZXJ0ZXhC
dWZmZXIpOwotICAgICAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmJ1ZmZlckRh
dGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgaW5WZXJ0aWNlcy5zaXplKCkgKiAy
ICogc2l6ZW9mKGZsb2F0KSwgaW5WZXJ0aWNlcy5kYXRhKCksIEdyYXBoaWNzQ29udGV4dDNEOjpT
VFJFQU1fRFJBVyk7Ci0gICAgICAgIG1fY29udGV4dC0+dXNlRmlsbFNvbGlkUHJvZ3JhbShtYXRy
aXgsIGNvbG9yKTsKLSAgICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5kcmF3
QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9GQU4sIDAsIGluVmVydGljZXMuc2l6
ZSgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIE93bkFycmF5UHRyPGRvdWJsZT4g
aW5WZXJ0aWNlc0RvdWJsZSA9IGFkb3B0QXJyYXlQdHIobmV3IGRvdWJsZVtpblZlcnRpY2VzLnNp
emUoKSAqIDNdKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluVmVydGljZXMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgaW5WZXJ0aWNlc0RvdWJsZVtpICogMyAgICBdID0gaW5WZXJ0aWNl
c1tpXS54KCk7Ci0gICAgICAgIGluVmVydGljZXNEb3VibGVbaSAqIDMgKyAxXSA9IGluVmVydGlj
ZXNbaV0ueSgpOwotICAgICAgICBpblZlcnRpY2VzRG91YmxlW2kgKiAzICsgMl0gPSAxLjA7Ci0g
ICAgfQotCi0gICAgR0xVdGVzc2VsYXRvciogdGVzcyA9IGludGVybmFsX2dsdU5ld1Rlc3MoKTsK
LSAgICBpbnRlcm5hbF9nbHVUZXNzUHJvcGVydHkodGVzcywgR0xVX1RFU1NfV0lORElOR19SVUxF
LCBHTFVfVEVTU19XSU5ESU5HX05PTlpFUk8pOwotICAgIGludGVybmFsX2dsdVRlc3NDYWxsYmFj
ayh0ZXNzLCBHTFVfVEVTU19CRUdJTl9EQVRBLCAoVEVTU0NCKSAmYmVnaW5EYXRhKTsKLSAgICBp
bnRlcm5hbF9nbHVUZXNzQ2FsbGJhY2sodGVzcywgR0xVX1RFU1NfVkVSVEVYX0RBVEEsIChURVNT
Q0IpICZ2ZXJ0ZXhEYXRhKTsKLSAgICBpbnRlcm5hbF9nbHVUZXNzQ2FsbGJhY2sodGVzcywgR0xV
X1RFU1NfRU5EX0RBVEEsIChURVNTQ0IpICZlbmREYXRhKTsKLSAgICBpbnRlcm5hbF9nbHVUZXNz
Q2FsbGJhY2sodGVzcywgR0xVX1RFU1NfRURHRV9GTEFHX0RBVEEsIChURVNTQ0IpICZlZGdlRmxh
Z0RhdGEpOwotICAgIGludGVybmFsX2dsdVRlc3NDYWxsYmFjayh0ZXNzLCBHTFVfVEVTU19DT01C
SU5FX0RBVEEsIChURVNTQ0IpICZjb21iaW5lRGF0YSk7Ci0gICAgV1RGOjpWZWN0b3I8c2hvcnQ+
IGluZGljZXM7Ci0gICAgRmxvYXRQb2ludFZlY3RvciB2ZXJ0aWNlczsKLSAgICB2ZXJ0aWNlcy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KGluVmVydGljZXMuc2l6ZSgpKTsKLSAgICBQb2x5Z29uRGF0
YSBkYXRhKCZ2ZXJ0aWNlcywgJmluZGljZXMpOwotICAgIGludGVybmFsX2dsdVRlc3NCZWdpblBv
bHlnb24odGVzcywgJmRhdGEpOwotICAgIFdURjo6VmVjdG9yPHNpemVfdD46OmNvbnN0X2l0ZXJh
dG9yIGNvbnRvdXI7Ci0gICAgc2l6ZV90IGkgPSAwOwotICAgIGZvciAoY29udG91ciA9IGNvbnRv
dXJzLmJlZ2luKCk7IGNvbnRvdXIgIT0gY29udG91cnMuZW5kKCk7ICsrY29udG91cikgewotICAg
ICAgICBpbnRlcm5hbF9nbHVUZXNzQmVnaW5Db250b3VyKHRlc3MpOwotICAgICAgICBmb3IgKDsg
aSA8ICpjb250b3VyOyArK2kpIHsKLSAgICAgICAgICAgIGRvdWJsZSogaW5WZXJ0ZXggPSAmaW5W
ZXJ0aWNlc0RvdWJsZVtpICogM107Ci0gICAgICAgICAgICB2ZXJ0aWNlcy5hcHBlbmQoRmxvYXRQ
b2ludChpblZlcnRleFswXSwgaW5WZXJ0ZXhbMV0pKTsKLSAgICAgICAgICAgIGludGVybmFsX2ds
dVRlc3NWZXJ0ZXgodGVzcywgaW5WZXJ0ZXgsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGkpKTsK
LSAgICAgICAgfQotICAgICAgICBpbnRlcm5hbF9nbHVUZXNzRW5kQ29udG91cih0ZXNzKTsKLSAg
ICB9Ci0gICAgaW50ZXJuYWxfZ2x1VGVzc0VuZFBvbHlnb24odGVzcyk7Ci0gICAgaW50ZXJuYWxf
Z2x1RGVsZXRlVGVzcyh0ZXNzKTsKLQotICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0Qo
KS0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3BhdGhWZXJ0
ZXhCdWZmZXIpOwotICAgIGNoZWNrR0xFcnJvcigiY3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgs
IGJpbmRCdWZmZXIgQVJSQVlfQlVGRkVSIik7Ci0gICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRl
eHQzRCgpLT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIHZlcnRp
Y2VzLnNpemUoKSAqIDIgKiBzaXplb2YoZmxvYXQpLCB2ZXJ0aWNlcy5kYXRhKCksIEdyYXBoaWNz
Q29udGV4dDNEOjpTVFJFQU1fRFJBVyk7Ci0gICAgY2hlY2tHTEVycm9yKCJjcmVhdGVWZXJ0ZXhC
dWZmZXJGcm9tUGF0aCwgYnVmZmVyRGF0YSBBUlJBWV9CVUZGRVIiKTsKLQotICAgIG1fY29udGV4
dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6RUxF
TUVOVF9BUlJBWV9CVUZGRVIsIG1fcGF0aEluZGV4QnVmZmVyKTsKLSAgICBjaGVja0dMRXJyb3Io
ImNyZWF0ZVZlcnRleEJ1ZmZlckZyb21QYXRoLCBiaW5kQnVmZmVyIEVMRU1FTlRfQVJSQVlfQlVG
RkVSIik7Ci0gICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5idWZmZXJEYXRhKEdy
YXBoaWNzQ29udGV4dDNEOjpFTEVNRU5UX0FSUkFZX0JVRkZFUiwgaW5kaWNlcy5zaXplKCkgKiBz
aXplb2Yoc2hvcnQpLCBpbmRpY2VzLmRhdGEoKSwgR3JhcGhpY3NDb250ZXh0M0Q6OlNUUkVBTV9E
UkFXKTsKLSAgICBjaGVja0dMRXJyb3IoImNyZWF0ZVZlcnRleEJ1ZmZlckZyb21QYXRoLCBidWZm
ZXJEYXRhIEVMRU1FTlRfQVJSQVlfQlVGRkVSIik7Ci0KLSAgICBtX2NvbnRleHQtPnVzZUZpbGxT
b2xpZFByb2dyYW0obWF0cml4LCBjb2xvcik7Ci0gICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRl
eHQzRCgpLT5kcmF3RWxlbWVudHMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgaW5kaWNl
cy5zaXplKCksIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9TSE9SVCwgMCk7Ci19Ci0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R1BVOjpmaWxsUGF0aEludGVybmFsKGNvbnN0IFBhdGgmIHBhdGgs
IGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBpZiAoU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6
OnVzZUxvb3BCbGlubkZvclBhdGhSZW5kZXJpbmcoKSkgewotICAgICAgICBtX3BhdGhDYWNoZS5j
bGVhcigpOwotICAgICAgICBMb29wQmxpbm5QYXRoUHJvY2Vzc29yIHByb2Nlc3NvcjsKLSAgICAg
ICAgcHJvY2Vzc29yLnByb2Nlc3MocGF0aCwgbV9wYXRoQ2FjaGUpOwotICAgICAgICBpZiAoIW1f
cGF0aFZlcnRleEJ1ZmZlcikKLSAgICAgICAgICAgIG1fcGF0aFZlcnRleEJ1ZmZlciA9IG1fY29u
dGV4dC0+Y3JlYXRlQnVmZmVyKCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3BhdGhWZXJ0ZXhCdWZmZXIpOwotICAgICAg
ICBpbnQgYnl0ZVNpemVPZlZlcnRpY2VzID0gMiAqIG1fcGF0aENhY2hlLm51bWJlck9mVmVydGlj
ZXMoKSAqIHNpemVvZihmbG9hdCk7Ci0gICAgICAgIGludCBieXRlU2l6ZU9mVGV4Q29vcmRzID0g
MyAqIG1fcGF0aENhY2hlLm51bWJlck9mVmVydGljZXMoKSAqIHNpemVvZihmbG9hdCk7Ci0gICAg
ICAgIGludCBieXRlU2l6ZU9mSW50ZXJpb3JWZXJ0aWNlcyA9IDIgKiBtX3BhdGhDYWNoZS5udW1i
ZXJPZkludGVyaW9yVmVydGljZXMoKSAqIHNpemVvZihmbG9hdCk7Ci0gICAgICAgIG1fY29udGV4
dC0+YnVmZmVyRGF0YShHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnl0ZVNpemVPZlZlcnRpY2VzICsgYnl0ZVNpemVPZlRleENv
b3JkcyArIGJ5dGVTaXplT2ZJbnRlcmlvclZlcnRpY2VzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgR3JhcGhpY3NDb250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKLSAgICAgICAgbV9jb250
ZXh0LT5idWZmZXJTdWJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIDAsIGJ5
dGVTaXplT2ZWZXJ0aWNlcywgbV9wYXRoQ2FjaGUudmVydGljZXMoKSk7Ci0gICAgICAgIG1fY29u
dGV4dC0+YnVmZmVyU3ViRGF0YShHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBieXRl
U2l6ZU9mVmVydGljZXMsIGJ5dGVTaXplT2ZUZXhDb29yZHMsIG1fcGF0aENhY2hlLnRleGNvb3Jk
cygpKTsKLSAgICAgICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKEdyYXBoaWNzQ29udGV4dDNE
OjpBUlJBWV9CVUZGRVIsIGJ5dGVTaXplT2ZWZXJ0aWNlcyArIGJ5dGVTaXplT2ZUZXhDb29yZHMs
IGJ5dGVTaXplT2ZJbnRlcmlvclZlcnRpY2VzLCBtX3BhdGhDYWNoZS5pbnRlcmlvclZlcnRpY2Vz
KCkpOwotCi0gICAgICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXgobV9mbGlwTWF0cml4KTsKLSAg
ICAgICAgbWF0cml4ICo9IG1fc3RhdGUtPm1fY3RtOwotCi0gICAgICAgIC8vIERyYXcgdGhlIGV4
dGVyaW9yCi0gICAgICAgIG1fY29udGV4dC0+dXNlTG9vcEJsaW5uRXh0ZXJpb3JQcm9ncmFtKDAs
IGJ5dGVTaXplT2ZWZXJ0aWNlcywgbWF0cml4LCBjb2xvcik7Ci0gICAgICAgIG1fY29udGV4dC0+
ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVTLCAwLCBtX3BhdGhDYWNoZS5u
dW1iZXJPZlZlcnRpY2VzKCkpOwotCi0gICAgICAgIC8vIERyYXcgdGhlIGludGVyaW9yCi0gICAg
ICAgIG1fY29udGV4dC0+dXNlTG9vcEJsaW5uSW50ZXJpb3JQcm9ncmFtKGJ5dGVTaXplT2ZWZXJ0
aWNlcyArIGJ5dGVTaXplT2ZUZXhDb29yZHMsIG1hdHJpeCwgY29sb3IpOwotICAgICAgICBtX2Nv
bnRleHQtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywgMCwgbV9wYXRo
Q2FjaGUubnVtYmVyT2ZJbnRlcmlvclZlcnRpY2VzKCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IHRlc3NlbGF0ZUFuZEZpbGxQYXRoKHBhdGgsIGNvbG9yKTsKLSAgICB9Ci19Ci0KLUZsb2F0UmVj
dCBHcmFwaGljc0NvbnRleHRHUFU6OmZsaXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKLXsK
LSAgICBGbG9hdFJlY3QgZmxpcHBlZFJlY3QocmVjdCk7Ci0gICAgZmxpcHBlZFJlY3Quc2V0WSht
X3NpemUuaGVpZ2h0KCkgLSByZWN0LnkoKSk7Ci0gICAgZmxpcHBlZFJlY3Quc2V0SGVpZ2h0KC1y
ZWN0LmhlaWdodCgpKTsKLSAgICByZXR1cm4gZmxpcHBlZFJlY3Q7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R1BVOjpjbGVhckJvcmRlcnMoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBpbnQgd2lk
dGgpCi17Ci0gICAgc2Npc3NvckNsZWFyKHJlY3QueCgpLCByZWN0LnkoKSAtIHdpZHRoLCByZWN0
LndpZHRoKCkgKyB3aWR0aCwgd2lkdGgpOwotICAgIHNjaXNzb3JDbGVhcihyZWN0Lm1heFgoKSwg
cmVjdC55KCksIHdpZHRoLCByZWN0LmhlaWdodCgpICsgd2lkdGgpOwotICAgIHNjaXNzb3JDbGVh
cihyZWN0LngoKSAtIHdpZHRoLCByZWN0Lm1heFkoKSwgcmVjdC53aWR0aCgpICsgd2lkdGgsIHdp
ZHRoKTsKLSAgICBzY2lzc29yQ2xlYXIocmVjdC54KCkgLSB3aWR0aCwgcmVjdC55KCkgLSB3aWR0
aCwgd2lkdGgsIHJlY3QuaGVpZ2h0KCkgKyB3aWR0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R1BVOjpiZWdpblNoYWRvd0RyYXcoKQotewotICAgIGZsb2F0IG9mZnNldFggPSBtX3N0YXRl
LT5tX3NoYWRvd09mZnNldC53aWR0aCgpOwotICAgIGZsb2F0IG9mZnNldFkgPSBtX3N0YXRlLT5t
X3NoYWRvd09mZnNldC5oZWlnaHQoKTsKLSAgICBzYXZlKCk7Ci0gICAgaWYgKG1fc3RhdGUtPm1f
c2hhZG93c0lnbm9yZVRyYW5zZm9ybXMpIHsKLSAgICAgICAgQWZmaW5lVHJhbnNmb3JtIG5ld0NU
TTsKLSAgICAgICAgbmV3Q1RNLnRyYW5zbGF0ZShvZmZzZXRYLCAtb2Zmc2V0WSk7Ci0gICAgICAg
IG5ld0NUTSAqPSBtX3N0YXRlLT5tX2N0bTsKLSAgICAgICAgbV9zdGF0ZS0+bV9jdG0gPSBuZXdD
VE07Ci0gICAgfSBlbHNlCi0gICAgICAgIG1fc3RhdGUtPm1fY3RtLnRyYW5zbGF0ZShvZmZzZXRY
LCBvZmZzZXRZKTsKLQotICAgIGlmIChtX3N0YXRlLT5tX3NoYWRvd0JsdXIgPiAwKSB7Ci0gICAg
ICAgIC8vIERyYXcgaGFyZCBzaGFkb3cgdG8gb2Zmc2NyZWVuIGJ1ZmZlciAwLgotICAgICAgICBE
cmF3aW5nQnVmZmVyKiBkc3RCdWZmZXIgPSBtX2NvbnRleHQtPmdldE9mZnNjcmVlbkJ1ZmZlcigw
LCBtX3NpemUpOwotICAgICAgICBkc3RCdWZmZXItPmJpbmQoKTsKLSAgICAgICAgbV9jb250ZXh0
LT5hcHBseUNvbXBvc2l0ZU9wZXJhdG9yKENvbXBvc2l0ZUNvcHkpOwotICAgICAgICBhcHBseUNs
aXBwaW5nKGZhbHNlKTsKLSAgICAgICAgbV9jb250ZXh0LT5jbGVhckNvbG9yKENvbG9yKFJHQkEz
MigwKSkpOwotICAgICAgICBtX2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xP
Ul9CVUZGRVJfQklUKTsKLSAgICB9IGVsc2UgewotICAgICAgICBhcHBseVN0YXRlKCk7Ci0gICAg
fQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6ZW5kU2hhZG93RHJhdyhjb25zdCBGbG9h
dFJlY3QmIGJvdW5kaW5nQm94KQotewotICAgIGlmIChtX3N0YXRlLT5tX3NoYWRvd0JsdXIgPiAw
KSB7Ci0gICAgICAgIC8vIEJ1ZmZlciAwIGNvbnRhaW5zIHRoZSBwcmltaXRpdmUgZHJhd24gd2l0
aCBhIGhhcmQgc2hhZG93LgotICAgICAgICBEcmF3aW5nQnVmZmVyKiBzcmNCdWZmZXIgPSBtX2Nv
bnRleHQtPmdldE9mZnNjcmVlbkJ1ZmZlcigwLCBtX3NpemUpOwotICAgICAgICBEcmF3aW5nQnVm
ZmVyKiBkc3RCdWZmZXIgPSBtX2NvbnRleHQtPmdldE9mZnNjcmVlbkJ1ZmZlcigxLCBtX3NpemUp
OwotCi0gICAgICAgIGZsb2F0IHNpZ21hID0gbV9zdGF0ZS0+bV9zaGFkb3dCbHVyICogMC4zMzMz
MzNmOwotICAgICAgICBGbG9hdFJlY3Qgc2hhZG93Qm91bmRpbmdCb3gobV9zdGF0ZS0+bV9jdG0u
bWFwUmVjdChib3VuZGluZ0JveCkpOwotICAgICAgICBGbG9hdFJlY3QgcmVjdChGbG9hdFBvaW50
KDAsIDApLCBtX3NpemUpOwotICAgICAgICBGbG9hdFJlY3Qgc3JjUmVjdChzaGFkb3dCb3VuZGlu
Z0JveCk7Ci0KLSAgICAgICAgaW50IHNjYWxlRmFjdG9yID0gMTsKLSAgICAgICAgd2hpbGUgKHNp
Z21hID4gY01heFNpZ21hKSB7Ci0gICAgICAgICAgICBzcmNSZWN0LnNjYWxlKDAuNWYpOwotICAg
ICAgICAgICAgc2NhbGVGYWN0b3IgKj0gMjsKLSAgICAgICAgICAgIHNpZ21hICo9IDAuNWY7Ci0g
ICAgICAgIH0KLSAgICAgICAgc3JjUmVjdCA9IGVuY2xvc2luZ0ludFJlY3Qoc3JjUmVjdCk7Ci0g
ICAgICAgIHNyY1JlY3Quc2NhbGUoc2NhbGVGYWN0b3IpOwotICAgICAgICBmb3IgKGludCBpID0g
MTsgaSA8IHNjYWxlRmFjdG9yOyBpICo9IDIpIHsKLSAgICAgICAgICAgIGRzdEJ1ZmZlci0+Ymlu
ZCgpOwotICAgICAgICAgICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgc3JjQnVmZmVyLT5jb2xvckJ1ZmZlcigpKTsKLSAgICAgICAgICAgIG1f
Y29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRleHQzRDo6Q0xBTVBf
VE9fRURHRSk7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3ND
b250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwg
R3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgICAgICAgICAgbV9jb250ZXh0
LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0Nv
bnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsK
LSAgICAgICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUFHX0ZJTFRFUiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkxJTkVBUik7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgZHN0UmVjdChzcmNS
ZWN0KTsKLSAgICAgICAgICAgIGRzdFJlY3Quc2NhbGUoMC41Zik7Ci0gICAgICAgICAgICAvLyBD
bGVhciBvdXQgMSBwaXhlbCBib3JkZXIgZm9yIGxpbmVhciBmaWx0ZXJpbmcuCi0gICAgICAgICAg
ICBjbGVhckJvcmRlcnMoZHN0UmVjdCwgMSk7Ci0gICAgICAgICAgICBkcmF3VGV4dHVyZWRRdWFk
KHNyY0J1ZmZlci0+c2l6ZSgpLCBmbGlwUmVjdChzcmNSZWN0KSwgZHN0UmVjdCwgQWZmaW5lVHJh
bnNmb3JtKCksIDEuMCk7Ci0gICAgICAgICAgICBzcmNSZWN0ID0gZHN0UmVjdDsKLSAgICAgICAg
ICAgIHN0ZDo6c3dhcChzcmNCdWZmZXIsIGRzdEJ1ZmZlcik7Ci0gICAgICAgIH0KLQotICAgICAg
ICBpbnQgaGFsZldpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihzaWdtYSAqIDMuMGYpOwotICAgICAg
ICBpbnQga2VybmVsV2lkdGggPSBoYWxmV2lkdGggKiAyICsgMTsKLSAgICAgICAgT3duQXJyYXlQ
dHI8ZmxvYXQ+IGtlcm5lbCA9IGFkb3B0QXJyYXlQdHIobmV3IGZsb2F0W2tlcm5lbFdpZHRoXSk7
Ci0gICAgICAgIGJ1aWxkS2VybmVsKHNpZ21hLCBrZXJuZWwuZ2V0KCksIGtlcm5lbFdpZHRoKTsK
LQotICAgICAgICBpZiAoc2NhbGVGYWN0b3IgPiAxKSB7Ci0gICAgICAgICAgICBzY2lzc29yQ2xl
YXIoc3JjUmVjdC5tYXhYKCksIHNyY1JlY3QueSgpLCBrZXJuZWxXaWR0aCwgc3JjUmVjdC5oZWln
aHQoKSk7Ci0gICAgICAgICAgICBzY2lzc29yQ2xlYXIoc3JjUmVjdC54KCkgLSBrZXJuZWxXaWR0
aCwgc3JjUmVjdC55KCksIGtlcm5lbFdpZHRoLCBzcmNSZWN0LmhlaWdodCgpKTsKLSAgICAgICAg
fQotCi0gICAgICAgIC8vIEJsdXIgaW4gWCBvZmZzY3JlZW4uCi0gICAgICAgIGRzdEJ1ZmZlci0+
YmluZCgpOwotICAgICAgICBzcmNSZWN0LmluZmxhdGVYKGhhbGZXaWR0aCk7Ci0gICAgICAgIHNy
Y1JlY3QuaW50ZXJzZWN0KHJlY3QpOwotICAgICAgICBmbG9hdCBpbWFnZUluY3JlbWVudFhbMl0g
PSB7MS4wZiAvIHNyY0J1ZmZlci0+c2l6ZSgpLndpZHRoKCksIDAuMGZ9OwotICAgICAgICBjb252
b2x2ZVJlY3Qoc3JjQnVmZmVyLT5jb2xvckJ1ZmZlcigpLCBzcmNCdWZmZXItPnNpemUoKSwgZmxp
cFJlY3Qoc3JjUmVjdCksIHNyY1JlY3QsIGltYWdlSW5jcmVtZW50WCwga2VybmVsLmdldCgpLCBr
ZXJuZWxXaWR0aCk7Ci0KLSAgICAgICAgaWYgKHNjYWxlRmFjdG9yID4gMSkgewotICAgICAgICAg
ICAgc2Npc3NvckNsZWFyKHNyY1JlY3QueCgpLCBzcmNSZWN0Lm1heFkoKSwgc3JjUmVjdC53aWR0
aCgpLCBrZXJuZWxXaWR0aCk7Ci0gICAgICAgICAgICBzY2lzc29yQ2xlYXIoc3JjUmVjdC54KCks
IHNyY1JlY3QueSgpIC0ga2VybmVsV2lkdGgsIHNyY1JlY3Qud2lkdGgoKSwga2VybmVsV2lkdGgp
OwotICAgICAgICB9Ci0gICAgICAgIHNyY1JlY3QuaW5mbGF0ZVkoaGFsZldpZHRoKTsKLSAgICAg
ICAgc3JjUmVjdC5pbnRlcnNlY3QocmVjdCk7Ci0gICAgICAgIHN0ZDo6c3dhcChzcmNCdWZmZXIs
IGRzdEJ1ZmZlcik7Ci0KLSAgICAgICAgZmxvYXQgaW1hZ2VJbmNyZW1lbnRZWzJdID0gezAuMGYs
IDEuMGYgLyBzcmNCdWZmZXItPnNpemUoKS5oZWlnaHQoKX07Ci0gICAgICAgIGlmIChzY2FsZUZh
Y3RvciA+IDEpIHsKLSAgICAgICAgICAgIC8vIEJsdXIgaW4gWSBvZmZzY3JlZW4uCi0gICAgICAg
ICAgICBkc3RCdWZmZXItPmJpbmQoKTsKLSAgICAgICAgICAgIGNvbnZvbHZlUmVjdChzcmNCdWZm
ZXItPmNvbG9yQnVmZmVyKCksIHNyY0J1ZmZlci0+c2l6ZSgpLCBmbGlwUmVjdChzcmNSZWN0KSwg
c3JjUmVjdCwgaW1hZ2VJbmNyZW1lbnRZLCBrZXJuZWwuZ2V0KCksIGtlcm5lbFdpZHRoKTsKLSAg
ICAgICAgICAgIC8vIENsZWFyIG91dCAyIHBpeGVsIGJvcmRlciBmb3IgYmljdWJpYyBmaWx0ZXJp
bmcuCi0gICAgICAgICAgICBjbGVhckJvcmRlcnMoc3JjUmVjdCwgMik7Ci0gICAgICAgICAgICBz
dGQ6OnN3YXAoc3JjQnVmZmVyLCBkc3RCdWZmZXIpOwotCi0gICAgICAgICAgICAvLyBVcHNhbXBs
ZSBzcmNCdWZmZXIgLT4gbWFpbiBmcmFtZWJ1ZmZlciB1c2luZyBiaWN1YmljIGZpbHRlcmluZy4K
LSAgICAgICAgICAgIGFwcGx5U3RhdGUoKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHNyY0J1ZmZlci0+Y29sb3JCdWZm
ZXIoKSk7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgZHN0UmVjdCA9IHNyY1JlY3Q7Ci0gICAgICAg
ICAgICBkc3RSZWN0LnNjYWxlKHNjYWxlRmFjdG9yKTsKLSAgICAgICAgICAgIGRyYXdUZXh0dXJl
ZFF1YWRNaXRjaGVsbChzcmNCdWZmZXItPnNpemUoKSwgZmxpcFJlY3Qoc3JjUmVjdCksIGRzdFJl
Y3QsIEFmZmluZVRyYW5zZm9ybSgpLCAxLjApOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgLy8gQmx1ciBpbiBZIGRpcmVjdGx5IHRvIGZyYW1lYnVmZmVyLgotICAgICAgICAgICAgYXBw
bHlTdGF0ZSgpOwotICAgICAgICAgICAgY29udm9sdmVSZWN0KHNyY0J1ZmZlci0+Y29sb3JCdWZm
ZXIoKSwgc3JjQnVmZmVyLT5zaXplKCksIGZsaXBSZWN0KHNyY1JlY3QpLCBzcmNSZWN0LCBpbWFn
ZUluY3JlbWVudFksIGtlcm5lbC5nZXQoKSwga2VybmVsV2lkdGgpOwotICAgICAgICB9Ci0gICAg
fQotICAgIHJlc3RvcmUoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHUFU6OmJlZ2luU3Rl
bmNpbERyYXcodW5zaWduZWQgb3ApCi17Ci0gICAgLy8gVHVybiBvbiBzdGVuY2lsIHRlc3QuCi0g
ICAgbV9jb250ZXh0LT5lbmFibGVTdGVuY2lsKHRydWUpOwotICAgIGNoZWNrR0xFcnJvcigiZW5h
YmxlIFNURU5DSUxfVEVTVCIpOwotCi0gICAgLy8gU3RlbmNpbCB0ZXN0IG5ldmVyIHBhc3Nlcywg
c28gY29sb3JidWZmZXIgaXMgbm90IGRyYXduLgotICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250
ZXh0M0QoKS0+c3RlbmNpbEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok5FVkVSLCAxLCAxKTsKLSAg
ICBjaGVja0dMRXJyb3IoInN0ZW5jaWxGdW5jIik7Ci0KLSAgICAvLyBBbGwgd3JpdGVzIGluY3Jl
bWVtZW50IHRoZSBzdGVuY2lsIGJ1ZmZlci4KLSAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4
dDNEKCktPnN0ZW5jaWxPcChvcCwgb3AsIG9wKTsKLSAgICBjaGVja0dMRXJyb3IoInN0ZW5jaWxP
cCIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6YXBwbHlDbGlwcGluZyhib29sIGVu
YWJsZSkKLXsKLSAgICBtX2NvbnRleHQtPmVuYWJsZVN0ZW5jaWwoZW5hYmxlKTsKLSAgICBpZiAo
ZW5hYmxlKSB7Ci0gICAgICAgIC8vIEVuYWJsZSBkcmF3aW5nIG9ubHkgd2hlcmUgc3RlbmNpbCBp
cyBub24temVyby4KLSAgICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5zdGVu
Y2lsRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6RVFVQUwsIG1fc3RhdGUtPm1fbnVtQ2xpcHBpbmdQ
YXRocywgLTEpOwotICAgICAgICBjaGVja0dMRXJyb3IoInN0ZW5jaWxGdW5jIik7Ci0gICAgICAg
IC8vIEtlZXAgYWxsIHN0ZW5jaWwgdmFsdWVzIHRoZSBzYW1lLgotICAgICAgICBtX2NvbnRleHQt
PmdyYXBoaWNzQ29udGV4dDNEKCktPnN0ZW5jaWxPcChHcmFwaGljc0NvbnRleHQzRDo6S0VFUCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0M0Q6OktFRVAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQKTsKLSAgICAgICAgY2hlY2tHTEVy
cm9yKCJzdGVuY2lsT3AiKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R1BVOjpj
aGVja0dMRXJyb3IoY29uc3QgY2hhciogaGVhZGVyKQotewotI2lmbmRlZiBOREVCVUcKLSAgICB1
bnNpZ25lZCBlcnI7Ci0gICAgd2hpbGUgKChlcnIgPSBtX2NvbnRleHQtPmdldEVycm9yKCkpICE9
IEdyYXBoaWNzQ29udGV4dDNEOjpOT19FUlJPUikgewotICAgICAgICBjb25zdCBjaGFyKiBlcnJv
clN0ciA9ICIqKiogVU5LTk9XTiBFUlJPUiAqKioiOwotICAgICAgICBzd2l0Y2ggKGVycikgewot
ICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0VOVU06Ci0gICAgICAgICAg
ICBlcnJvclN0ciA9ICJHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9FTlVNIjsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVF
OgotICAgICAgICAgICAgZXJyb3JTdHIgPSAiR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6
OklOVkFMSURfT1BFUkFUSU9OOgotICAgICAgICAgICAgZXJyb3JTdHIgPSAiR3JhcGhpY3NDb250
ZXh0M0Q6OklOVkFMSURfT1BFUkFUSU9OIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTjoKLSAg
ICAgICAgICAgIGVycm9yU3RyID0gIkdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX0ZSQU1FQlVG
RkVSX09QRVJBVElPTiI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGlj
c0NvbnRleHQzRDo6T1VUX09GX01FTU9SWToKLSAgICAgICAgICAgIGVycm9yU3RyID0gIkdyYXBo
aWNzQ29udGV4dDNEOjpPVVRfT0ZfTUVNT1JZIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChoZWFkZXIpCi0gICAgICAgICAgICBMT0dfRVJST1IoIiVzOiAgJXMi
LCBoZWFkZXIsIGVycm9yU3RyKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgTE9HX0VSUk9S
KCIlcyIsIGVycm9yU3RyKTsKLSAgICB9Ci0jZW5kaWYKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dyYXBoaWNzQ29udGV4dEdQVS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dyYXBoaWNzQ29udGV4dEdQVS5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NDIzMjU1ODI2YzczNzJmY2E0YzRmMDAy
ODk5YTJmMmY2ODM5NjU4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HcmFwaGljc0NvbnRl
eHRHUFUuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgR3JhcGhpY3ND
b250ZXh0R1BVX2gKLSNkZWZpbmUgR3JhcGhpY3NDb250ZXh0R1BVX2gKLQotI2luY2x1ZGUgIkFm
ZmluZVRyYW5zZm9ybS5oIgotI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiQ29sb3JTcGFj
ZS5oIgotI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKLSNpbmNsdWRlICJJbWFnZVNvdXJjZS5o
IgotI2luY2x1ZGUgIkxvb3BCbGlublBhdGhDYWNoZS5oIgotI2luY2x1ZGUgIlRleHR1cmUuaCIK
LQotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IENvbG9yOwotY2xhc3MgRHJhd2luZ0J1ZmZlcjsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIEdy
YXBoaWNzQ29udGV4dDNEOwotY2xhc3MgUGF0aDsKLWNsYXNzIFNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEOwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHRHUFUgewotICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEdyYXBoaWNzQ29udGV4dEdQVSk7Ci1wdWJsaWM6Ci0gICAgR3JhcGhpY3NDb250ZXh0R1BV
KFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiwgRHJhd2luZ0J1ZmZlciosIGNvbnN0IEludFNpemUm
KTsKLSAgICB+R3JhcGhpY3NDb250ZXh0R1BVKCk7Ci0KLSAgICB2b2lkIGZpbGxQYXRoKGNvbnN0
IFBhdGgmKTsKLSAgICB2b2lkIGZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9y
JiwgQ29sb3JTcGFjZSk7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAg
ICB2b2lkIGNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmKTsKLSAgICB2b2lkIHNldEZpbGxDb2xv
cihjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOwotICAgIHZvaWQgc2V0QWxwaGEoZmxvYXQgYWxw
aGEpOwotICAgIHZvaWQgc2V0U2hhZG93Q29sb3IoY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsK
LSAgICB2b2lkIHNldFNoYWRvd09mZnNldChjb25zdCBGbG9hdFNpemUmKTsKLSAgICB2b2lkIHNl
dFNoYWRvd0JsdXIoZmxvYXQpOwotICAgIHZvaWQgc2V0U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMo
Ym9vbCk7Ci0gICAgdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3Ip
OwotICAgIHZvaWQgdHJhbnNsYXRlKGZsb2F0IHgsIGZsb2F0IHkpOwotICAgIHZvaWQgcm90YXRl
KGZsb2F0IGFuZ2xlSW5SYWRpYW5zKTsKLSAgICB2b2lkIHNjYWxlKGNvbnN0IEZsb2F0U2l6ZSYp
OwotICAgIHZvaWQgY29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAgIHZvaWQg
c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYpOwotICAgIHZvaWQgY2xpcFBhdGgoY29uc3Qg
UGF0aCYpOwotICAgIHZvaWQgY2xpcE91dChjb25zdCBQYXRoJik7Ci0KLSAgICB2b2lkIHNhdmUo
KTsKLSAgICB2b2lkIHJlc3RvcmUoKTsKLQotICAgIC8vIG5vbi1zdGFuZGFyZCBmdW5jdGlvbnMK
LSAgICAvLyBUaGVzZSBhcmUgbm90IHN0YW5kYXJkIEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbnMs
IGFuZCBzaG91bGQgYmUgcHVzaGVkCi0gICAgLy8gZG93biBpbnRvIGEgUGxhdGZvcm1Db250ZXh0
R0xFUzIgYXQgc29tZSBwb2ludC4KLQotICAgIC8vIFRoaXMgdmVyc2lvbiBpcyBjYWxsZWQgYnkg
dGhlIGNhbnZhcy0+Y2FudmFzIGRyYXdzLgotICAgIHZvaWQgZHJhd1RleHR1cmVkUmVjdCh1bnNp
Z25lZCB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0
JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIENvbG9yU3BhY2UsIENvbXBvc2l0
ZU9wZXJhdG9yKTsKLSAgICAvLyBUaGlzIHZlcnNpb24gaXMgY2FsbGVkIGJ5IEJpdG1hcEltYWdl
OjpkcmF3KCkuCi0gICAgdm9pZCBkcmF3VGV4dHVyZWRSZWN0KFRleHR1cmUqLCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgQ29sb3JTcGFjZSwgQ29t
cG9zaXRlT3BlcmF0b3IpOwotICAgIC8vIFRoaXMgdmVyc2lvbiBpcyBjYWxsZWQgYnkgdGhlIGFi
b3ZlLCBhbmQgYnkgdGhlIHNvZnR3YXJlLT5oYXJkd2FyZSB1cGxvYWRzLgotICAgIHZvaWQgZHJh
d1RleHR1cmVkUmVjdChUZXh0dXJlKiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGZsb2F0IGFscGhhLCBD
b2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciwgYm9vbCBjbGlwKTsKLSAgICBUZXh0dXJlKiBj
cmVhdGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRyLCBUZXh0dXJlOjpGb3JtYXQsIGludCB3aWR0aCwg
aW50IGhlaWdodCk7Ci0gICAgVGV4dHVyZSogZ2V0VGV4dHVyZShOYXRpdmVJbWFnZVB0cik7Ci0K
LSAgICBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGV4dDsgfQotCi0gICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoKTsKLQotICAgIERyYXdpbmdC
dWZmZXIqIGRyYXdpbmdCdWZmZXIoKSBjb25zdCB7IHJldHVybiBtX2RyYXdpbmdCdWZmZXI7IH0K
LQotcHJpdmF0ZToKLSAgICB2b2lkIGFwcGx5U3RhdGUoKTsKLSAgICB2b2lkIHNjaXNzb3JDbGVh
cihmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0KTsKLSAgICB2b2lk
IGRyYXdUZXh0dXJlZFJlY3RUaWxlKFRleHR1cmUqIHRleHR1cmUsIGludCB0aWxlLCBjb25zdCBG
bG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgQWZmaW5l
VHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEpOwotICAgIHZvaWQgZHJhd1RleHR1cmVkUXVhZChjb25z
dCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBG
bG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGZsb2F0IGFscGhhKTsK
LSAgICB2b2lkIGRyYXdUZXh0dXJlZFF1YWRNaXRjaGVsbChjb25zdCBJbnRTaXplJiB0ZXh0dXJl
U2l6ZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3Qs
IGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGZsb2F0IGFscGhhKTsKLSAgICB2b2lkIGNvbnZvbHZl
UmVjdCh1bnNpZ25lZCB0ZXh0dXJlLCBjb25zdCBJbnRTaXplJiB0ZXh0dXJlU2l6ZSwgY29uc3Qg
RmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGZsb2F0IGltYWdl
SW5jcmVtZW50WzJdLCBjb25zdCBmbG9hdCoga2VybmVsLCBpbnQga2VybmVsV2lkdGgpOwotCi0g
ICAgdm9pZCB0ZXNzZWxhdGVBbmRGaWxsUGF0aChjb25zdCBQYXRoJiwgY29uc3QgQ29sb3ImKTsK
LSAgICB2b2lkIGZpbGxQYXRoSW50ZXJuYWwoY29uc3QgUGF0aCYsIGNvbnN0IENvbG9yJik7Ci0g
ICAgdm9pZCBmaWxsUmVjdEludGVybmFsKGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IENvbG9yJik7
Ci0gICAgRmxvYXRSZWN0IGZsaXBSZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwotICAgIHZvaWQgY2xl
YXJCb3JkZXJzKGNvbnN0IEZsb2F0UmVjdCYsIGludCB3aWR0aCk7Ci0gICAgdm9pZCBiZWdpblNo
YWRvd0RyYXcoKTsKLSAgICB2b2lkIGVuZFNoYWRvd0RyYXcoY29uc3QgRmxvYXRSZWN0JiBib3Vu
ZGluZ0JveCk7Ci0gICAgdm9pZCBiZWdpblN0ZW5jaWxEcmF3KHVuc2lnbmVkIG9wKTsKLSAgICB2
b2lkIGFwcGx5Q2xpcHBpbmcoYm9vbCBlbmFibGUpOwotICAgIHZvaWQgY2hlY2tHTEVycm9yKGNv
bnN0IGNoYXIqIGhlYWRlcik7Ci0KLSAgICBJbnRTaXplIG1fc2l6ZTsKLQotICAgIFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEKiBtX2NvbnRleHQ7Ci0gICAgRHJhd2luZ0J1ZmZlciogbV9kcmF3aW5n
QnVmZmVyOwotCi0gICAgc3RydWN0IFN0YXRlOwotICAgIHR5cGVkZWYgV1RGOjpWZWN0b3I8U3Rh
dGU+IFN0YXRlVmVjdG9yOwotICAgIFN0YXRlVmVjdG9yIG1fc3RhdGVTdGFjazsKLSAgICBTdGF0
ZSogbV9zdGF0ZTsKLSAgICBBZmZpbmVUcmFuc2Zvcm0gbV9mbGlwTWF0cml4OwotCi0gICAgLy8g
TWVtYmVycyBmb3IgR1BVLWFjY2VsZXJhdGVkIHBhdGggcmVuZGVyaW5nLgotICAgIExvb3BCbGlu
blBhdGhDYWNoZSBtX3BhdGhDYWNoZTsKLSAgICB1bnNpZ25lZCBtX3BhdGhJbmRleEJ1ZmZlcjsK
LSAgICB1bnNpZ25lZCBtX3BhdGhWZXJ0ZXhCdWZmZXI7Ci19OwotCi19Ci0KLSNlbmRpZiAvLyBH
cmFwaGljc0NvbnRleHRHUFVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE5NDg3OGI4ZmQyNmZkODA1MTQ1OTc4NTZhNWExNmQ2
MTA4OGIzM2QuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4
dDNELmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDQ5OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLQotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0jaW5jbHVkZSAiU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0QuaCIKLQotI2luY2x1ZGUgIkFmZmluZVRyYW5zZm9ybS5oIgotI2lu
Y2x1ZGUgIkJpY3ViaWNTaGFkZXIuaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2luY2x1ZGUgIkNv
bnZvbHV0aW9uU2hhZGVyLmgiCi0jaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgotI2luY2x1ZGUg
IkV4dGVuc2lvbnMzRC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkludFNp
emUuaCIKLSNpbmNsdWRlICJMb29wQmxpbm5Tb2xpZEZpbGxTaGFkZXIuaCIKLSNpbmNsdWRlICJT
b2xpZEZpbGxTaGFkZXIuaCIKLSNpbmNsdWRlICJUZXhTaGFkZXIuaCIKLQotI2lmIFVTRShTS0lB
KQotI2luY2x1ZGUgIkdyQ29udGV4dC5oIgotI2VuZGlmCi0KLS8vIExpbWl0IHRoZSBudW1iZXIg
b2YgdGV4dHVyZXMgd2UgaG9sZCBpbiB0aGUgYml0bWFwLT50ZXh0dXJlIGNhY2hlLgotc3RhdGlj
IGNvbnN0IGludCBtYXhUZXh0dXJlQ2FjaGVDb3VudCA9IDUxMjsKLS8vIExpbWl0IHRoZSBieXRl
cyBhbGxvY2F0ZWQgdG93YXJkIHRleHR1cmVzIGluIHRoZSBiaXRtYXAtPnRleHR1cmUgY2FjaGUu
Ci1zdGF0aWMgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVDYWNoZUJ5dGVzID0gNTAgKiAxMDI0ICog
MTAyNDsKLQotI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi0vLyBzdGF0aWMKLVBhc3NSZWZQdHI8U2hhcmVkR3JhcGhpY3NDb250ZXh0
M0Q+IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoSG9zdFdpbmRvdyogaG9zdFdpbmRv
dywgQ3JlYXRpb25GbGFncyBmbGFncykKLXsKLSAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBhdHRyOwotICAgIGF0dHIuZGVwdGggPSBmYWxzZTsKLSAgICBhdHRyLnN0ZW5jaWwgPSB0
cnVlOwotICAgIGF0dHIuYW50aWFsaWFzID0gdXNlTG9vcEJsaW5uRm9yUGF0aFJlbmRlcmluZygp
OwotICAgIGF0dHIuY2FuUmVjb3ZlckZyb21Db250ZXh0TG9zcyA9IGZhbHNlOyAvLyBDYW52YXMg
Y29udGV4dHMgY2FuIG5vdCBoYW5kbGUgbG9zdCBjb250ZXh0cy4KLSAgICBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQgPSBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKGF0dHIsIGhv
c3RXaW5kb3cpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYg
KGZsYWdzICYgVXNlU2tpYUdQVSkKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRH
cmFwaGljc0NvbnRleHQzRChjb250ZXh0LnJlbGVhc2UoKSwgUGFzc093blB0cjxTb2xpZEZpbGxT
aGFkZXI+KCksIFBhc3NPd25QdHI8VGV4U2hhZGVyPigpLCBQYXNzT3duUHRyPEJpY3ViaWNTaGFk
ZXI+KCksIFBhc3NPd25BcnJheVB0cjxPd25QdHI8Q29udm9sdXRpb25TaGFkZXI+ID4oKSwgZmxh
Z3MpKTsKLSAgICBPd25QdHI8U29saWRGaWxsU2hhZGVyPiBzb2xpZEZpbGxTaGFkZXIgPSBTb2xp
ZEZpbGxTaGFkZXI6OmNyZWF0ZShjb250ZXh0LmdldCgpKTsKLSAgICBpZiAoIXNvbGlkRmlsbFNo
YWRlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgT3duUHRyPFRleFNoYWRlcj4gdGV4U2hhZGVy
ID0gVGV4U2hhZGVyOjpjcmVhdGUoY29udGV4dC5nZXQoKSk7Ci0gICAgaWYgKCF0ZXhTaGFkZXIp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIE93blB0cjxCaWN1YmljU2hhZGVyPiBiaWN1YmljU2hh
ZGVyID0gQmljdWJpY1NoYWRlcjo6Y3JlYXRlKGNvbnRleHQuZ2V0KCkpOwotICAgIGlmICghYmlj
dWJpY1NoYWRlcikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgT3duQXJyYXlQdHI8T3duUHRyPENv
bnZvbHV0aW9uU2hhZGVyPiA+IGNvbnZvbHV0aW9uU2hhZGVycyA9IGFkb3B0QXJyYXlQdHIobmV3
IE93blB0cjxDb252b2x1dGlvblNoYWRlcj5bY01heEtlcm5lbFdpZHRoXSk7Ci0gICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBjTWF4S2VybmVsV2lkdGg7ICsraSkgewotICAgICAgICBjb252b2x1dGlv
blNoYWRlcnNbaV0gPSBDb252b2x1dGlvblNoYWRlcjo6Y3JlYXRlKGNvbnRleHQuZ2V0KCksIGkg
KyAxKTsKLSAgICAgICAgaWYgKCFjb252b2x1dGlvblNoYWRlcnNbaV0pCi0gICAgICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRHcmFwaGljc0Nv
bnRleHQzRChjb250ZXh0LnJlbGVhc2UoKSwgc29saWRGaWxsU2hhZGVyLnJlbGVhc2UoKSwgdGV4
U2hhZGVyLnJlbGVhc2UoKSwgYmljdWJpY1NoYWRlci5yZWxlYXNlKCksIGNvbnZvbHV0aW9uU2hh
ZGVycy5yZWxlYXNlKCksIGZsYWdzKSk7Ci19Ci0KLQotU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6
OlNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IGNv
bnRleHQsIFBhc3NPd25QdHI8U29saWRGaWxsU2hhZGVyPiBzb2xpZEZpbGxTaGFkZXIsIFBhc3NP
d25QdHI8VGV4U2hhZGVyPiB0ZXhTaGFkZXIsIFBhc3NPd25QdHI8QmljdWJpY1NoYWRlcj4gYmlj
dWJpY1NoYWRlciwgUGFzc093bkFycmF5UHRyPE93blB0cjxDb252b2x1dGlvblNoYWRlcj4gPiBj
b252b2x1dGlvblNoYWRlcnMsIENyZWF0aW9uRmxhZ3MgZmxhZ3MpCi0gICAgOiBtX2NvbnRleHQo
Y29udGV4dCkKLSAgICAsIG1fYmdyYVN1cHBvcnRlZChmYWxzZSkKLSAgICAsIG1fcXVhZFZlcnRp
Y2VzKDApCi0gICAgLCBtX3NvbGlkRmlsbFNoYWRlcihzb2xpZEZpbGxTaGFkZXIpCi0gICAgLCBt
X3RleFNoYWRlcih0ZXhTaGFkZXIpCi0gICAgLCBtX2JpY3ViaWNTaGFkZXIoYmljdWJpY1NoYWRl
cikKLSAgICAsIG1fY29udm9sdXRpb25TaGFkZXJzKGNvbnZvbHV0aW9uU2hhZGVycykKLSAgICAs
IG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlc1N1cHBvcnRlZChmYWxzZSkKLSAgICAsIG1fZmxhZ3Mo
ZmxhZ3MpCi0jaWYgVVNFKFNLSUEpCi0gICAgLCBtX2dyQ29udGV4dCgwKQotI2VuZGlmCi17Ci0g
ICAgYWxsQ29udGV4dHMoKS0+YWRkKHRoaXMpOwotICAgIEV4dGVuc2lvbnMzRCogZXh0ZW5zaW9u
cyA9IG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpOwotICAgIG1fYmdyYVN1cHBvcnRlZCA9IGV4
dGVuc2lvbnMtPnN1cHBvcnRzKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiKSAmJiBl
eHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEiKTsKLSAgICBpZiAo
bV9iZ3JhU3VwcG9ydGVkKSB7Ci0gICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVuYWJsZWQoIkdM
X0VYVF90ZXh0dXJlX2Zvcm1hdF9CR1JBODg4OCIpOwotICAgICAgICBleHRlbnNpb25zLT5lbnN1
cmVFbmFibGVkKCJHTF9FWFRfcmVhZF9mb3JtYXRfYmdyYSIpOwotICAgIH0KLSAgICBtX29lc1N0
YW5kYXJkRGVyaXZhdGl2ZXNTdXBwb3J0ZWQgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfT0VT
X3N0YW5kYXJkX2Rlcml2YXRpdmVzIik7Ci0gICAgaWYgKG1fb2VzU3RhbmRhcmREZXJpdmF0aXZl
c1N1cHBvcnRlZCkKLSAgICAgICAgZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfT0VTX3N0
YW5kYXJkX2Rlcml2YXRpdmVzIik7Ci19Ci0KLVNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjp+U2hh
cmVkR3JhcGhpY3NDb250ZXh0M0QoKQotewotICAgIG1fY29udGV4dC0+ZGVsZXRlQnVmZmVyKG1f
cXVhZFZlcnRpY2VzKTsKLSAgICBhbGxDb250ZXh0cygpLT5yZW1vdmUodGhpcyk7Ci0jaWYgVVNF
KFNLSUEpCi0gICAgaWYgKG1fZ3JDb250ZXh0KSB7Ci0gICAgICAgIG1fZ3JDb250ZXh0LT5jb250
ZXh0RGVzdHJveWVkKCk7Ci0gICAgICAgIEdyU2FmZVVucmVmKG1fZ3JDb250ZXh0KTsKLSAgICB9
Ci0jZW5kaWYKLX0KLQotdm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRD
dXJyZW50KCkKLXsKLSAgICBtX2NvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpOwotfQotCi12
b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5
LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCi17Ci0gICAgbV9jb250ZXh0LT5z
Y2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOwotfQotCi12b2lkIFNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEOjplbmFibGUoR0MzRGVudW0gY2FwYWNpdHkpCi17Ci0gICAgbV9jb250ZXh0LT5lbmFi
bGUoY2FwYWNpdHkpOwotfQotCi12b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxl
KEdDM0RlbnVtIGNhcGFjaXR5KQotewotICAgIG1fY29udGV4dC0+ZGlzYWJsZShjYXBhY2l0eSk7
Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoY29uc3QgQ29s
b3ImIGNvbG9yKQotewotICAgIGZsb2F0IHJnYmFbNF07Ci0gICAgY29sb3IuZ2V0UkdCQShyZ2Jh
WzBdLCByZ2JhWzFdLCByZ2JhWzJdLCByZ2JhWzNdKTsKLSAgICBtX2NvbnRleHQtPmNsZWFyQ29s
b3IocmdiYVswXSwgcmdiYVsxXSwgcmdiYVsyXSwgcmdiYVszXSk7Ci19Ci0KLXZvaWQgU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKQotewotICAgIG1fY29u
dGV4dC0+Y2xlYXIobWFzayk7Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmRy
YXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50KQot
ewotICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOwotfQotCi1H
QzNEZW51bSBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IoKQotewotICAgIHJldHVy
biBtX2NvbnRleHQtPmdldEVycm9yKCk7Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0
M0Q6OmdldEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKLXsKLSAgICBt
X2NvbnRleHQtPmdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7Ci19Ci0KLXZvaWQgU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0Q6OmZsdXNoKCkKLXsKLSAgICBtX2NvbnRleHQtPmZsdXNoKCk7Ci19Ci0K
LVBsYXRmb3JtM0RPYmplY3QgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigp
Ci17Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+Y3JlYXRlQnVmZmVyKCk7Ci19Ci0KLVBsYXRmb3Jt
M0RPYmplY3QgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKLXsK
LSAgICByZXR1cm4gbV9jb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpOwotfQotCi1QbGF0Zm9y
bTNET2JqZWN0IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKCkKLXsKLSAg
ICByZXR1cm4gbV9jb250ZXh0LT5jcmVhdGVUZXh0dXJlKCk7Ci19Ci0KLXZvaWQgU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVi
dWZmZXIpCi17Ci0gICAgbV9jb250ZXh0LT5kZWxldGVGcmFtZWJ1ZmZlcihmcmFtZWJ1ZmZlcik7
Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUoUGxhdGZv
cm0zRE9iamVjdCB0ZXh0dXJlKQotewotICAgIG1fY29udGV4dC0+ZGVsZXRlVGV4dHVyZSh0ZXh0
dXJlKTsKLX0KLQotdm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0
dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0
YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGludCBsZXZlbCkKLXsKLSAgICBt
X2NvbnRleHQtPmZyYW1lYnVmZmVyVGV4dHVyZTJEKHRhcmdldCwgYXR0YWNobWVudCwgdGV4dGFy
Z2V0LCB0ZXh0dXJlLCBsZXZlbCk7Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6
OnRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCBw
YXJhbSkKLXsKLSAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkodGFyZ2V0LCBwbmFtZSwgcGFy
YW0pOwotfQotCi1ib29sIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0Rz
aXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQotewotICAgIGlmICghcGl4
ZWxzKQotICAgICAgICByZXR1cm4gbV9jb250ZXh0LT50ZXhJbWFnZTJEUmVzb3VyY2VTYWZlKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIsIGZvcm1h
dCwgdHlwZSk7Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVs
LCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBp
eGVscyk7Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQg
eW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKLXsKLSAgICBtX2NvbnRleHQt
PnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhl
aWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotfQotCi12b2lkIFNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCog
ZGF0YSkKLXsKLSAgICBtX2NvbnRleHQtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwg
Zm9ybWF0LCB0eXBlLCBkYXRhKTsKLX0KLQotYm9vbCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6
c3VwcG9ydHNCR1JBKCkKLXsKLSAgICByZXR1cm4gbV9iZ3JhU3VwcG9ydGVkOwotfQotCi1ib29s
IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpzdXBwb3J0c0NvbXBvc2l0ZU9wKENvbXBvc2l0ZU9w
ZXJhdG9yIG9wKSBjb25zdAoteyAgIAotI2lmIFVTRShTS0lBKQotICAgIHJldHVybiBtX2ZsYWdz
ICYgVXNlU2tpYUdQVSB8fCBvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyOwotI2Vsc2UKLSAgICBy
ZXR1cm4gb3AgPT0gQ29tcG9zaXRlU291cmNlT3ZlcjsKLSNlbmRpZgotfQotCi1UZXh0dXJlKiBT
aGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZShOYXRpdmVJbWFnZVB0ciBwdHIs
IFRleHR1cmU6OkZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBS
ZWZQdHI8VGV4dHVyZT4gdGV4dHVyZSA9IG1fdGV4dHVyZXMuZ2V0KHB0cik7Ci0gICAgaWYgKHRl
eHR1cmUpCi0gICAgICAgIHJldHVybiB0ZXh0dXJlLmdldCgpOwotCi0gICAgdGV4dHVyZSA9IFRl
eHR1cmU6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCksIGZvcm1hdCwgd2lkdGgsIGhlaWdodCk7Ci0g
ICAgVGV4dHVyZSogdCA9IHRleHR1cmUuZ2V0KCk7Ci0gICAgbV90ZXh0dXJlcy5zZXQocHRyLCB0
ZXh0dXJlKTsKLSAgICByZXR1cm4gdDsKLX0KLQotVGV4dHVyZSogU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0Q6OmdldFRleHR1cmUoTmF0aXZlSW1hZ2VQdHIgcHRyKQotewotICAgIFJlZlB0cjxUZXh0
dXJlPiB0ZXh0dXJlID0gbV90ZXh0dXJlcy5nZXQocHRyKTsKLSAgICByZXR1cm4gdGV4dHVyZSA/
IHRleHR1cmUuZ2V0KCkgOiAwOwotfQotCi12b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpy
ZW1vdmVUZXh0dXJlRm9yKE5hdGl2ZUltYWdlUHRyIHB0cikKLXsKLSAgICBUZXh0dXJlSGFzaE1h
cDo6aXRlcmF0b3IgaXQgPSBtX3RleHR1cmVzLmZpbmQocHRyKTsKLSAgICBpZiAoaXQgIT0gbV90
ZXh0dXJlcy5lbmQoKSkKLSAgICAgICAgbV90ZXh0dXJlcy5yZW1vdmUoaXQpOwotfQotCi0vLyBz
dGF0aWMKLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnJlbW92ZVRleHR1cmVzRm9yKE5h
dGl2ZUltYWdlUHRyIHB0cikKLXsKLSAgICBmb3IgKEhhc2hTZXQ8U2hhcmVkR3JhcGhpY3NDb250
ZXh0M0QqPjo6aXRlcmF0b3IgaXQgPSBhbGxDb250ZXh0cygpLT5iZWdpbigpOyBpdCAhPSBhbGxD
b250ZXh0cygpLT5lbmQoKTsgKytpdCkKLSAgICAgICAgKCppdCktPnJlbW92ZVRleHR1cmVGb3Io
cHRyKTsKLX0KLQotLy8gc3RhdGljCi1IYXNoU2V0PFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKj4q
IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjphbGxDb250ZXh0cygpCi17Ci0gICAgREVGSU5FX1NU
QVRJQ19MT0NBTChIYXNoU2V0PFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKj4sIGFsbENvbnRleHRz
U2V0LCAoKSk7Ci0gICAgcmV0dXJuICZhbGxDb250ZXh0c1NldDsKLX0KLQotCi1QYXNzUmVmUHRy
PFRleHR1cmU+IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVUZXh0dXJlKFRleHR1cmU6
OkZvcm1hdCBmb3JtYXQsIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICByZXR1cm4gVGV4
dHVyZTo6Y3JlYXRlKG1fY29udGV4dC5nZXQoKSwgZm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKLX0K
LQotdm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6YXBwbHlDb21wb3NpdGVPcGVyYXRvcihD
b21wb3NpdGVPcGVyYXRvciBvcCkKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBDb21w
b3NpdGVDbGVhcjoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6
OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDb21wb3NpdGVDb3B5OgotICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250
ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVTb3VyY2VP
dmVyOgotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQp
OwotICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBH
cmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ29tcG9zaXRlU291cmNlSW46Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdy
YXBoaWNzQ29udGV4dDNEOjpEU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVTb3VyY2VPdXQ6Ci0gICAgICAgIG1fY29u
dGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4
dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfRFNUX0FMUEhBLCBHcmFw
aGljc0NvbnRleHQzRDo6WkVSTyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29tcG9zaXRl
U291cmNlQXRvcDoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6
OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6
OkRTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZURlc3RpbmF0aW9uT3ZlcjoKLSAgICAgICAg
bV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9j
b250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19EU1RfQUxQSEEs
IEdyYXBoaWNzQ29udGV4dDNEOjpPTkUpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBv
c2l0ZURlc3RpbmF0aW9uSW46Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29u
dGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6U1JDX0FMUEhBKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbk91dDoKLSAgICAgICAgbV9jb250ZXh0
LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5i
bGVuZEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8sIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVf
TUlOVVNfU1JDX0FMUEhBKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVEZXN0
aW5hdGlvbkF0b3A6Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNE
OjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNE
OjpPTkVfTUlOVVNfRFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6U1JDX0FMUEhBKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVYT1I6Ci0gICAgICAgIG1fY29udGV4dC0+
ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+Ymxl
bmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNfRFNUX0FMUEhBLCBHcmFwaGljc0Nv
bnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q29tcG9zaXRlUGx1c0RhcmtlcjoKLSAgICAgICAgLy8gdW5zdXBwb3J0ZWQKLSAgICAgICAgbV9j
b250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIGJyZWFr
OwotICAgIGNhc2UgQ29tcG9zaXRlUGx1c0xpZ2h0ZXI6Ci0gICAgICAgIG1fY29udGV4dC0+ZW5h
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRG
dW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkUsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkUpOwotICAg
ICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmVu
YWJsZVN0ZW5jaWwoYm9vbCBlbmFibGUpCi17Ci0gICAgaWYgKGVuYWJsZSkKLSAgICAgICAgbV9j
b250ZXh0LT5lbmFibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxfVEVTVCk7Ci0gICAgZWxz
ZQotICAgICAgICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNURU5DSUxf
VEVTVCk7Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnVzZVF1YWRWZXJ0aWNl
cygpCi17Ci0gICAgaWYgKCFtX3F1YWRWZXJ0aWNlcykgewotICAgICAgICBmbG9hdCB2ZXJ0aWNl
c1tdID0geyAwLjBmLCAwLjBmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjBmLCAw
LjBmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjBmLCAxLjBmLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxLjBmLCAxLjBmIH07Ci0gICAgICAgIG1fcXVhZFZlcnRpY2Vz
ID0gbV9jb250ZXh0LT5jcmVhdGVCdWZmZXIoKTsKLSAgICAgICAgbV9jb250ZXh0LT5iaW5kQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIG1fcXVhZFZlcnRpY2VzKTsKLSAg
ICAgICAgbV9jb250ZXh0LT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZG
RVIsIHNpemVvZih2ZXJ0aWNlcyksIHZlcnRpY2VzLCBHcmFwaGljc0NvbnRleHQzRDo6U1RBVElD
X0RSQVcpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1fY29udGV4dC0+YmluZEJ1ZmZlcihHcmFw
aGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3F1YWRWZXJ0aWNlcyk7Ci0gICAgfQotfQot
Ci12b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpzZXRBY3RpdmVUZXh0dXJlKEdDM0RlbnVt
IHRleHR1cmVVbml0KQotewotICAgIG1fY29udGV4dC0+YWN0aXZlVGV4dHVyZSh0ZXh0dXJlVW5p
dCk7Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRCdWZmZXIoR0MzRGVu
dW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKLXsKLSAgICBtX2NvbnRleHQtPmJp
bmRCdWZmZXIodGFyZ2V0LCBidWZmZXIpOwotfQotCi12b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEOjpiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVy
ZSkKLXsKLSAgICBtX2NvbnRleHQtPmJpbmRUZXh0dXJlKHRhcmdldCwgdGV4dHVyZSk7Ci19Ci0K
LXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgR0MzRGVudW0gdXNhZ2UpCi17Ci0gICAgbV9jb250ZXh0LT5i
dWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgdXNhZ2UpOwotfQotCi12b2lkIFNoYXJlZEdyYXBoaWNz
Q29udGV4dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUs
IGNvbnN0IHZvaWQqIGRhdGEsIEdDM0RlbnVtIHVzYWdlKQotewotICAgIG1fY29udGV4dC0+YnVm
ZmVyRGF0YSh0YXJnZXQsIHNpemUsIGRhdGEsIHVzYWdlKTsKLX0KLQotdm9pZCBTaGFyZWRHcmFw
aGljc0NvbnRleHQzRDo6YnVmZmVyU3ViRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIg
b2Zmc2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgY29uc3Qgdm9pZCogZGF0YSkKLXsKLSAgICBtX2Nv
bnRleHQtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOwotfQotCi12
b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjp1c2VGaWxsU29saWRQcm9ncmFtKGNvbnN0IEFm
ZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgbV9z
b2xpZEZpbGxTaGFkZXItPnVzZSh0cmFuc2Zvcm0sIGNvbG9yKTsKLX0KLQotdm9pZCBTaGFyZWRH
cmFwaGljc0NvbnRleHQzRDo6dXNlVGV4dHVyZVByb2dyYW0oY29uc3QgQWZmaW5lVHJhbnNmb3Jt
JiB0cmFuc2Zvcm0sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGV4VHJhbnNmb3JtLCBmbG9hdCBh
bHBoYSkKLXsKLSAgICBtX3RleFNoYWRlci0+dXNlKHRyYW5zZm9ybSwgdGV4VHJhbnNmb3JtLCAw
LCBhbHBoYSk7Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnVzZUJpY3ViaWNQ
cm9ncmFtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHRleFRyYW5zZm9ybSwgY29uc3QgZmxvYXQgY29lZmZpY2llbnRzWzE2XSwgY29uc3Qg
ZmxvYXQgaW1hZ2VJbmNyZW1lbnRbMl0sIGZsb2F0IGFscGhhKQotewotICAgIG1fYmljdWJpY1No
YWRlci0+dXNlKHRyYW5zZm9ybSwgdGV4VHJhbnNmb3JtLCBjb2VmZmljaWVudHMsIGltYWdlSW5j
cmVtZW50LCBhbHBoYSk7Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnVzZUNv
bnZvbHV0aW9uUHJvZ3JhbShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0ZXhUcmFuc2Zvcm0sIGNvbnN0IGZsb2F0KiBrZXJuZWwsIGludCBr
ZXJuZWxXaWR0aCwgZmxvYXQgaW1hZ2VJbmNyZW1lbnRbMl0pCi17Ci0gICAgQVNTRVJUKGtlcm5l
bFdpZHRoID49IDEgJiYga2VybmVsV2lkdGggPD0gY01heEtlcm5lbFdpZHRoKTsKLSAgICBtX2Nv
bnZvbHV0aW9uU2hhZGVyc1trZXJuZWxXaWR0aCAtIDFdLT51c2UodHJhbnNmb3JtLCB0ZXhUcmFu
c2Zvcm0sIGtlcm5lbCwga2VybmVsV2lkdGgsIGltYWdlSW5jcmVtZW50KTsKLX0KLQotdm9pZCBT
aGFyZWRHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3Qg
ZnJhbWVidWZmZXIpCi17Ci0gICAgbV9jb250ZXh0LT5iaW5kRnJhbWVidWZmZXIoR3JhcGhpY3ND
b250ZXh0M0Q6OkZSQU1FQlVGRkVSLCBmcmFtZWJ1ZmZlcik7Ci19Ci0KLXZvaWQgU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0Q6OnNldFZpZXdwb3J0KGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAg
bV9jb250ZXh0LT52aWV3cG9ydCgwLCAwLCBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwot
fQotCi1ib29sIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpwYWludHNJbnRvQ2FudmFzQnVmZmVy
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5wYWludHNJbnRvQ2FudmFzQnVmZmVy
KCk7Ci19Ci0KLWJvb2wgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnVzZUxvb3BCbGlubkZvclBh
dGhSZW5kZXJpbmcoKQotewotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBTaGFyZWRHcmFw
aGljc0NvbnRleHQzRDo6dXNlTG9vcEJsaW5uSW50ZXJpb3JQcm9ncmFtKHVuc2lnbmVkIHZlcnRl
eE9mZnNldCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IENvbG9yJiBj
b2xvcikKLXsKLSAgICBpZiAoIW1fbG9vcEJsaW5uSW50ZXJpb3JTaGFkZXIpIHsKLSAgICAgICAg
bV9sb29wQmxpbm5JbnRlcmlvclNoYWRlciA9IExvb3BCbGlublNvbGlkRmlsbFNoYWRlcjo6Y3Jl
YXRlKG1fY29udGV4dC5nZXQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvb3BCbGlublNoYWRlcjo6SW50ZXJp
b3IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTaGFkZXI6Ok5vdEFudGlhbGlhc2VkKTsKLSAgICB9Ci0gICAgQVNT
RVJUKG1fbG9vcEJsaW5uSW50ZXJpb3JTaGFkZXIpOwotICAgIG1fbG9vcEJsaW5uSW50ZXJpb3JT
aGFkZXItPnVzZSh2ZXJ0ZXhPZmZzZXQsIDAsIHRyYW5zZm9ybSwgY29sb3IpOwotfQotCi12b2lk
IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjp1c2VMb29wQmxpbm5FeHRlcmlvclByb2dyYW0odW5z
aWduZWQgdmVydGV4T2Zmc2V0LCB1bnNpZ25lZCBrbG1PZmZzZXQsIGNvbnN0IEFmZmluZVRyYW5z
Zm9ybSYgdHJhbnNmb3JtLCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKCFtX2xvb3BC
bGlubkV4dGVyaW9yU2hhZGVyKSB7Ci0gICAgICAgIG1fbG9vcEJsaW5uRXh0ZXJpb3JTaGFkZXIg
PSBMb29wQmxpbm5Tb2xpZEZpbGxTaGFkZXI6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBMb29wQmxpbm5TaGFkZXI6OkV4dGVyaW9yLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vZXNTdGFu
ZGFyZERlcml2YXRpdmVzU3VwcG9ydGVkID8gU2hhZGVyOjpBbnRpYWxpYXNlZCA6IFNoYWRlcjo6
Tm90QW50aWFsaWFzZWQpOwotICAgIH0KLSAgICBBU1NFUlQobV9sb29wQmxpbm5FeHRlcmlvclNo
YWRlcik7Ci0gICAgbV9sb29wQmxpbm5FeHRlcmlvclNoYWRlci0+dXNlKHZlcnRleE9mZnNldCwg
a2xtT2Zmc2V0LCB0cmFuc2Zvcm0sIGNvbG9yKTsKLX0KLQotRHJhd2luZ0J1ZmZlciogU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0Q6OmdldE9mZnNjcmVlbkJ1ZmZlcih1bnNpZ25lZCBpbmRleCwgY29u
c3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAoaW5kZXggPj0gbV9vZmZzY3JlZW5CdWZmZXJz
LnNpemUoKSkKLSAgICAgICAgbV9vZmZzY3JlZW5CdWZmZXJzLnJlc2l6ZShpbmRleCArIDEpOwot
Ci0gICAgaWYgKCFtX29mZnNjcmVlbkJ1ZmZlcnNbaW5kZXhdKQotICAgICAgICBtX29mZnNjcmVl
bkJ1ZmZlcnNbaW5kZXhdID0gbV9jb250ZXh0LT5jcmVhdGVEcmF3aW5nQnVmZmVyKHNpemUpOwot
Ci0gICAgaWYgKHNpemUud2lkdGgoKSAhPSBtX29mZnNjcmVlbkJ1ZmZlcnNbaW5kZXhdLT5zaXpl
KCkud2lkdGgoKQotICAgICAgICB8fCBzaXplLmhlaWdodCgpICE9IG1fb2Zmc2NyZWVuQnVmZmVy
c1tpbmRleF0tPnNpemUoKS5oZWlnaHQoKSkKLSAgICAgICAgbV9vZmZzY3JlZW5CdWZmZXJzW2lu
ZGV4XS0+cmVzZXQoc2l6ZSk7Ci0gICAgcmV0dXJuIG1fb2Zmc2NyZWVuQnVmZmVyc1tpbmRleF0u
Z2V0KCk7Ci19Ci0KLSNpZiBVU0UoU0tJQSkKLUdyQ29udGV4dCogU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0Q6OmdyQ29udGV4dCgpCi17Ci0gICAgaWYgKCEobV9mbGFncyAmIFVzZVNraWFHUFUpKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBpZiAoIW1fZ3JDb250ZXh0KSB7Ci0gICAgICAgIG1fZ3JD
b250ZXh0ID0gR3JDb250ZXh0OjpDcmVhdGVHTFNoYWRlckNvbnRleHQoKTsKLSAgICAgICAgaWYg
KG1fZ3JDb250ZXh0KQotICAgICAgICAgICAgbV9nckNvbnRleHQtPnNldFRleHR1cmVDYWNoZUxp
bWl0cyhtYXhUZXh0dXJlQ2FjaGVDb3VudCwgbWF4VGV4dHVyZUNhY2hlQnl0ZXMpOwotICAgIH0K
LSAgICByZXR1cm4gbV9nckNvbnRleHQ7Ci19Ci0jZW5kaWYKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDJlZTI4MjEyZmZlNjNiMjYwYjQxMmEwYzZkMDE5M2YyZjBiOWMwOGIu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgKKysr
IC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCwg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAg
ICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICog
TmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEX2gKLSNkZWZpbmUgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0RfaAotCi0jaW5jbHVkZSAiR3Jh
cGhpY3NDb250ZXh0M0QuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5jbHVkZSAi
SW1hZ2VTb3VyY2UuaCIKLSNpbmNsdWRlICJUZXh0dXJlLmgiCi0KLSNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL093bkFycmF5
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotCi0jaWYgVVNFKFNLSUEpCi1jbGFzcyBHckNv
bnRleHQ7Ci0jZW5kaWYKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBBZmZpbmVUcmFu
c2Zvcm07Ci1jbGFzcyBCaWN1YmljU2hhZGVyOwotY2xhc3MgQ29sb3I7Ci1jbGFzcyBDb252b2x1
dGlvblNoYWRlcjsKLWNsYXNzIERyYXdpbmdCdWZmZXI7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFz
cyBIb3N0V2luZG93OwotY2xhc3MgSW50U2l6ZTsKLWNsYXNzIExvb3BCbGlublNvbGlkRmlsbFNo
YWRlcjsKLWNsYXNzIFNvbGlkRmlsbFNoYWRlcjsKLWNsYXNzIFRleFNoYWRlcjsKLQotdHlwZWRl
ZiBIYXNoTWFwPE5hdGl2ZUltYWdlUHRyLCBSZWZQdHI8VGV4dHVyZT4gPiBUZXh0dXJlSGFzaE1h
cDsKLQotY2xhc3MgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QgOiBwdWJsaWMgUmVmQ291bnRlZDxT
aGFyZWRHcmFwaGljc0NvbnRleHQzRD4gewotcHVibGljOgotCi0gICAgZW51bSBDcmVhdGlvbkZs
YWdCaXRzIHsKLSAgICAgICAgVXNlU2tpYUdQVSA9IDEKLSAgICB9OwotICAgIHR5cGVkZWYgdW5z
aWduZWQgQ3JlYXRpb25GbGFnczsKLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNoYXJlZEdyYXBo
aWNzQ29udGV4dDNEPiBjcmVhdGUoSG9zdFdpbmRvdyosIENyZWF0aW9uRmxhZ3MpOwotICAgIH5T
aGFyZWRHcmFwaGljc0NvbnRleHQzRCgpOwotCi0gICAgLy8gRnVuY3Rpb25zIHRoYXQgZGVsZWdh
dGUgZGlyZWN0bHkgdG8gR3JhcGhpY3NDb250ZXh0M0QsIHdpdGggY2FjaGluZwotICAgIHZvaWQg
bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgdm9pZCBiaW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdl
dCwgUGxhdGZvcm0zRE9iamVjdCk7Ci0gICAgdm9pZCBiaW5kRnJhbWVidWZmZXIoUGxhdGZvcm0z
RE9iamVjdCBmcmFtZWJ1ZmZlcik7Ci0gICAgdm9pZCBidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRHNpemVpcHRyLCBHQzNEZW51bSB1c2FnZSk7Ci0gICAgdm9pZCBidWZmZXJEYXRhKEdD
M0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyLCBjb25zdCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1
c2FnZSk7Ci0gICAgdm9pZCBidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0
ciBvZmZzZXQsIEdDM0RzaXplaXB0ciwgY29uc3Qgdm9pZCogZGF0YSk7Ci0gICAgdm9pZCBzZXRW
aWV3cG9ydChjb25zdCBJbnRTaXplJik7Ci0gICAgdm9pZCBzY2lzc29yKEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpOwotICAgIHZvaWQgZW5h
YmxlKEdDM0RlbnVtIGNhcGFjaXR5KTsKLSAgICB2b2lkIGRpc2FibGUoR0MzRGVudW0gY2FwYWNp
dHkpOwotICAgIHZvaWQgY2xlYXJDb2xvcihjb25zdCBDb2xvciYpOwotICAgIHZvaWQgY2xlYXIo
R0MzRGJpdGZpZWxkIG1hc2spOwotICAgIHZvaWQgZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBH
QzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQpOwotICAgIEdDM0RlbnVtIGdldEVycm9yKCk7
Ci0gICAgdm9pZCBnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOwot
ICAgIHZvaWQgZmx1c2goKTsKLQotICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlQnVmZmVyKCk7
Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVGcmFtZWJ1ZmZlcigpOwotICAgIFBsYXRmb3Jt
M0RPYmplY3QgY3JlYXRlVGV4dHVyZSgpOwotCi0gICAgdm9pZCBkZWxldGVGcmFtZWJ1ZmZlcihQ
bGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKTsKLSAgICB2b2lkIGRlbGV0ZVRleHR1cmUoUGxh
dGZvcm0zRE9iamVjdCB0ZXh0dXJlKTsKLQotICAgIHZvaWQgZnJhbWVidWZmZXJUZXh0dXJlMkQo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQs
IFBsYXRmb3JtM0RPYmplY3QsIEdDM0RpbnQgbGV2ZWwpOwotICAgIHZvaWQgdGV4UGFyYW1ldGVy
aShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKTsKLSAgICBi
b29sIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50
IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhl
bHMpOwotICAgIHZvaWQgdGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdD
M0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9p
ZCogcGl4ZWxzKTsKLQotICAgIHZvaWQgcmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIHZvaWQqIGRhdGEpOwotCi0gICAgYm9vbCBwYWludHNJbnRvQ2FudmFzQnVmZmVy
KCkgY29uc3Q7Ci0KLSAgICAvLyBTaGFyZWQgbG9naWMgZm9yIGNhbnZhcyAyZAotICAgIHZvaWQg
YXBwbHlDb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVPcGVyYXRvcik7Ci0gICAgdm9pZCBlbmFi
bGVTdGVuY2lsKGJvb2wgZW5hYmxlKTsKLSAgICB2b2lkIHVzZVF1YWRWZXJ0aWNlcygpOwotCi0g
ICAgdm9pZCB1c2VGaWxsU29saWRQcm9ncmFtKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0
IENvbG9yJik7Ci0gICAgdm9pZCB1c2VUZXh0dXJlUHJvZ3JhbShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSk7Ci0gICAgdm9pZCB1c2VC
aWN1YmljUHJvZ3JhbShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mLCBjb25zdCBmbG9hdCBjb2VmZmljaWVudHNbMTZdLCBjb25zdCBmbG9hdCBpbWFnZUluY3Jl
bWVudFsyXSwgZmxvYXQgYWxwaGEpOwotICAgIHZvaWQgdXNlQ29udm9sdXRpb25Qcm9ncmFtKGNv
bnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGV4VHJhbnNmb3Jt
LCBjb25zdCBmbG9hdCoga2VybmVsLCBpbnQga2VybmVsV2lkdGgsIGZsb2F0IGltYWdlSW5jcmVt
ZW50WzJdKTsKLQotICAgIHZvaWQgc2V0QWN0aXZlVGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlVW5p
dCk7Ci0gICAgdm9pZCBiaW5kVGV4dHVyZShHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmpl
Y3QgdGV4dHVyZSk7Ci0KLSAgICBib29sIHN1cHBvcnRzQkdSQSgpOwotICAgIGJvb2wgc3VwcG9y
dHNDb21wb3NpdGVPcChDb21wb3NpdGVPcGVyYXRvcikgY29uc3Q7Ci0KLSAgICAvLyBDcmVhdGVz
IGEgdGV4dHVyZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIGltYWdlLiAgSXMgb3duZWQgYnkg
dGhpcyBjb250ZXh0J3MKLSAgICAvLyBUZXh0dXJlSGFzaE1hcC4KLSAgICBUZXh0dXJlKiBjcmVh
dGVUZXh0dXJlKE5hdGl2ZUltYWdlUHRyLCBUZXh0dXJlOjpGb3JtYXQsIGludCB3aWR0aCwgaW50
IGhlaWdodCk7Ci0gICAgVGV4dHVyZSogZ2V0VGV4dHVyZShOYXRpdmVJbWFnZVB0cik7Ci0KLSAg
ICAvLyBNdWx0aXBsZSBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCBjYW4gZXhpc3QgaW4gYSBzaW5n
bGUgcHJvY2VzcyAob25lIHBlciBjb21wb3NpdGluZyBjb250ZXh0KSBhbmQgdGhlIHNhbWUKLSAg
ICAvLyBOYXRpdmVJbWFnZVB0ciBtYXkgYmUgdXBsb2FkZWQgYXMgYSB0ZXh0dXJlIGludG8gYWxs
IG9mIHRoZW0uICBUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgdXBsb2FkZWQgdGV4dHVyZXMKLSAgICAv
LyBmb3IgYSBnaXZlbiBOYXRpdmVJbWFnZVB0ciBpbiBhbGwgY29udGV4dHMuCi0gICAgc3RhdGlj
IHZvaWQgcmVtb3ZlVGV4dHVyZXNGb3IoTmF0aXZlSW1hZ2VQdHIpOwotCi0gICAgLy8gQ3JlYXRl
cyBhIHRleHR1cmUgdGhhdCBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBpbWFnZS4gIFRoZSBj
YWxsZXIgdGFrZXMgb3duZXJzaGlwIG9mCi0gICAgLy8gdGhlIHRleHR1cmUuCi0gICAgUGFzc1Jl
ZlB0cjxUZXh0dXJlPiBjcmVhdGVUZXh0dXJlKFRleHR1cmU6OkZvcm1hdCwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KTsKLQotICAgIEdyYXBoaWNzQ29udGV4dDNEKiBncmFwaGljc0NvbnRleHQzRCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQotCi0gICAgLy8gTWVtYmVycyBmb3Ig
R1BVLWFjY2VsZXJhdGVkIHBhdGggcmVuZGVyaW5nLgotICAgIHN0YXRpYyBib29sIHVzZUxvb3BC
bGlubkZvclBhdGhSZW5kZXJpbmcoKTsKLSAgICB2b2lkIHVzZUxvb3BCbGlubkludGVyaW9yUHJv
Z3JhbSh1bnNpZ25lZCB2ZXJ0ZXhPZmZzZXQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGNvbnN0
IENvbG9yJik7Ci0gICAgdm9pZCB1c2VMb29wQmxpbm5FeHRlcmlvclByb2dyYW0odW5zaWduZWQg
dmVydGV4T2Zmc2V0LCB1bnNpZ25lZCBrbG1PZmZzZXQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYs
IGNvbnN0IENvbG9yJik7Ci0gICAgRHJhd2luZ0J1ZmZlciogZ2V0T2Zmc2NyZWVuQnVmZmVyKHVu
c2lnbmVkIGluZGV4LCBjb25zdCBJbnRTaXplJik7Ci0KLSNpZiBVU0UoU0tJQSkKLSAgICBHckNv
bnRleHQqIGdyQ29udGV4dCgpOwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgU2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0QoUGFzc1JlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4sIFBhc3NPd25QdHI8U29s
aWRGaWxsU2hhZGVyPiwgUGFzc093blB0cjxUZXhTaGFkZXI+LCBQYXNzT3duUHRyPEJpY3ViaWNT
aGFkZXI+LCBQYXNzT3duQXJyYXlQdHI8T3duUHRyPENvbnZvbHV0aW9uU2hhZGVyPiA+LCBDcmVh
dGlvbkZsYWdzKTsKLQotICAgIC8vIFVzZWQgdG8gaW1wbGVtZW50IHJlbW92ZVRleHR1cmVzRm9y
KCksIHNlZSB0aGUgY29tbWVudCBhYm92ZS4KLSAgICBzdGF0aWMgSGFzaFNldDxTaGFyZWRHcmFw
aGljc0NvbnRleHQzRCo+KiBhbGxDb250ZXh0cygpOwotICAgIHZvaWQgcmVtb3ZlVGV4dHVyZUZv
cihOYXRpdmVJbWFnZVB0cik7Ci0KLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29u
dGV4dDsKLSAgICBib29sIG1fYmdyYVN1cHBvcnRlZDsKLQotICAgIHVuc2lnbmVkIG1fcXVhZFZl
cnRpY2VzOwotCi0gICAgT3duUHRyPFNvbGlkRmlsbFNoYWRlcj4gbV9zb2xpZEZpbGxTaGFkZXI7
Ci0gICAgT3duUHRyPFRleFNoYWRlcj4gbV90ZXhTaGFkZXI7Ci0gICAgT3duUHRyPEJpY3ViaWNT
aGFkZXI+IG1fYmljdWJpY1NoYWRlcjsKLSAgICBPd25BcnJheVB0cjxPd25QdHI8Q29udm9sdXRp
b25TaGFkZXI+ID4gbV9jb252b2x1dGlvblNoYWRlcnM7Ci0KLSAgICBUZXh0dXJlSGFzaE1hcCBt
X3RleHR1cmVzOwotCi0gICAgLy8gTWVtYmVycyBmb3IgR1BVLWFjY2VsZXJhdGVkIHBhdGggcmVu
ZGVyaW5nLgotICAgIC8vIEZJWE1FOiBzdXBwb3J0IG1vcmUga2luZHMgb2YgZmlsbCB0eXBlcyBm
b3IgcGF0aHMuCi0gICAgT3duUHRyPExvb3BCbGlublNvbGlkRmlsbFNoYWRlcj4gbV9sb29wQmxp
bm5JbnRlcmlvclNoYWRlcjsKLSAgICBPd25QdHI8TG9vcEJsaW5uU29saWRGaWxsU2hhZGVyPiBt
X2xvb3BCbGlubkV4dGVyaW9yU2hhZGVyOwotICAgIGJvb2wgbV9vZXNTdGFuZGFyZERlcml2YXRp
dmVzU3VwcG9ydGVkOwotCi0gICAgV1RGOjpWZWN0b3I8UmVmUHRyPERyYXdpbmdCdWZmZXI+ID4g
bV9vZmZzY3JlZW5CdWZmZXJzOwotCi0gICAgdW5zaWduZWQgbV9mbGFnczsKLSNpZiBVU0UoU0tJ
QSkKLSAgICBHckNvbnRleHQqIG1fZ3JDb250ZXh0OwotI2VuZGlmCi19OwotCi1jb25zdCBmbG9h
dCBjTWF4U2lnbWEgPSA0LjBmOwotY29uc3QgaW50IGNNYXhLZXJuZWxXaWR0aCA9IDI1OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBTaGFyZWRHcmFwaGljc0NvbnRleHQz
RF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU29s
aWRGaWxsU2hhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9T
b2xpZEZpbGxTaGFkZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiZGQ1ODk2
MGM0YWYyYjVhNWNmNzBkYTlhYjk1YmQ1NzVkNjhlYjNiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9Tb2xpZEZpbGxTaGFkZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNzkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQot
Ci0jaW5jbHVkZSAiU29saWRGaWxsU2hhZGVyLmgiCi0KLSNpbmNsdWRlICJDb2xvci5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotU29s
aWRGaWxsU2hhZGVyOjpTb2xpZEZpbGxTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQs
IHVuc2lnbmVkIHByb2dyYW0pCi0gICAgOiBTaGFkZXIoY29udGV4dCwgcHJvZ3JhbSkKLXsKLSAg
ICBtX21hdHJpeExvY2F0aW9uID0gY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0s
ICJtYXRyaXgiKTsKLSAgICBtX2NvbG9yTG9jYXRpb24gPSBjb250ZXh0LT5nZXRVbmlmb3JtTG9j
YXRpb24ocHJvZ3JhbSwgImNvbG9yIik7Ci0gICAgbV9wb3NpdGlvbkxvY2F0aW9uID0gY29udGV4
dC0+Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgInBvc2l0aW9uIik7Ci19Ci0KLVBhc3NPd25Q
dHI8U29saWRGaWxsU2hhZGVyPiBTb2xpZEZpbGxTaGFkZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCkKLXsKLSAgICB1bnNpZ25lZCBwcm9ncmFtID0gbG9hZFByb2dyYW0oY29u
dGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVWZXJ0ZXgo
U2hhZGVyOjpUd29EaW1lbnNpb25hbCwgU2hhZGVyOjpTb2xpZEZpbGwpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZUZyYWdtZW50KFNoYWRlcjo6VHdvRGltZW5z
aW9uYWwsIFNoYWRlcjo6U29saWRGaWxsLCBTaGFkZXI6Ok5vdEFudGlhbGlhc2VkKSk7Ci0gICAg
aWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gYWRvcHRQ
dHIobmV3IFNvbGlkRmlsbFNoYWRlcihjb250ZXh0LCBwcm9ncmFtKSk7Ci19Ci0KLXZvaWQgU29s
aWRGaWxsU2hhZGVyOjp1c2UoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0
IENvbG9yJiBjb2xvcikKLXsKLSAgICBtX2NvbnRleHQtPnVzZVByb2dyYW0obV9wcm9ncmFtKTsK
LQotICAgIGZsb2F0IHJnYmFbNF07Ci0gICAgY29sb3IuZ2V0UkdCQShyZ2JhWzBdLCByZ2JhWzFd
LCByZ2JhWzJdLCByZ2JhWzNdKTsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm00ZihtX2NvbG9yTG9j
YXRpb24sIHJnYmFbMF0gKiByZ2JhWzNdLCByZ2JhWzFdICogcmdiYVszXSwgcmdiYVsyXSAqIHJn
YmFbM10sIHJnYmFbM10pOwotCi0gICAgZmxvYXQgbWF0cml4WzldOwotICAgIGFmZmluZVRvM3gz
KHRyYW5zZm9ybSwgbWF0cml4KTsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobV9t
YXRyaXhMb2NhdGlvbiwgZmFsc2UgLyp0cmFuc3Bvc2UqLywgbWF0cml4LCAxIC8qY291bnQqLyk7
Ci0KLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIobV9wb3NpdGlvbkxvY2F0aW9u
LCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKLQotICAgIG1fY29u
dGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV9wb3NpdGlvbkxvY2F0aW9uKTsKLX0KLQot
fQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9Tb2xpZEZpbGxTaGFkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9Tb2xpZEZpbGxTaGFkZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA3
MWU3MzkyNWZlYTRhMTE2MTE1MGFhN2I5Mjk4OTM0NGFmMjQ1Yy4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvU29saWRGaWxsU2hhZGVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZm5kZWYgU29saWRGaWxsU2hhZGVyX2gKLSNkZWZpbmUgU29saWRGaWxsU2hhZGVyX2gKLQot
I2luY2x1ZGUgIlNoYWRlci5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFNvbGlk
RmlsbFNoYWRlciA6IHB1YmxpYyBTaGFkZXIgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPFNvbGlkRmlsbFNoYWRlcj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KTsK
LSAgICB2b2lkIHVzZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgQ29s
b3ImIGNvbG9yKTsKLQotcHJpdmF0ZToKLSAgICBTb2xpZEZpbGxTaGFkZXIoR3JhcGhpY3NDb250
ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHByb2dyYW0pOwotCi0gICAgaW50IG1fbWF0cml4TG9j
YXRpb247Ci0gICAgaW50IG1fY29sb3JMb2NhdGlvbjsKLSAgICBpbnQgbV9wb3NpdGlvbkxvY2F0
aW9uOwotfTsKLQotfQotCi0jZW5kaWYgLy8gU29saWRGaWxsU2hhZGVyX2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXhTaGFkZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleFNoYWRlci5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzZDZhZTI3MGI0NjkxMDgwYWMyNzU0OGY0Zjc3YjcxNDE2
NzFlNjYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleFNoYWRlci5jcHAKKysrIC9kZXYv
bnVsbApAQCAtMSw4MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBj
b3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVy
IHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
Ci0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShB
Q0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0KLSNpbmNsdWRlICJUZXhTaGFkZXIuaCIKLQotI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotVGV4U2hh
ZGVyOjpUZXhTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVuc2lnbmVkIHByb2dy
YW0pCi0gICAgOiBTaGFkZXIoY29udGV4dCwgcHJvZ3JhbSkKLXsKLSAgICBtX21hdHJpeExvY2F0
aW9uID0gY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJtYXRyaXgiKTsKLSAg
ICBtX3RleE1hdHJpeExvY2F0aW9uID0gY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dy
YW0sICJ0ZXhNYXRyaXgiKTsKLSAgICBtX2FscGhhTG9jYXRpb24gPSBjb250ZXh0LT5nZXRVbmlm
b3JtTG9jYXRpb24ocHJvZ3JhbSwgImdsb2JhbEFscGhhIik7Ci0gICAgbV9wb3NpdGlvbkxvY2F0
aW9uID0gY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgInBvc2l0aW9uIik7Ci0g
ICAgbV9zYW1wbGVyTG9jYXRpb24gPSBjb250ZXh0LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3Jh
bSwgInNhbXBsZXIiKTsKLX0KLQotUGFzc093blB0cjxUZXhTaGFkZXI+IFRleFNoYWRlcjo6Y3Jl
YXRlKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotewotICAgIHVuc2lnbmVkIHByb2dyYW0g
PSBsb2FkUHJvZ3JhbShjb250ZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBnZW5lcmF0ZVZlcnRleChTaGFkZXI6OlR3b0RpbWVuc2lvbmFsLCBTaGFkZXI6OlRleHR1cmVG
aWxsKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVGcmFnbWVu
dChTaGFkZXI6OlR3b0RpbWVuc2lvbmFsLCBTaGFkZXI6OlRleHR1cmVGaWxsLCBTaGFkZXI6Ok5v
dEFudGlhbGlhc2VkKSk7Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICByZXR1cm4gYWRvcHRQdHIobmV3IFRleFNoYWRlcihjb250ZXh0LCBwcm9ncmFtKSk7
Ci19Ci0KLXZvaWQgVGV4U2hhZGVyOjp1c2UoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zv
cm0sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGV4VHJhbnNmb3JtLCBpbnQgc2FtcGxlciwgZmxv
YXQgYWxwaGEpCi17Ci0gICAgbV9jb250ZXh0LT51c2VQcm9ncmFtKG1fcHJvZ3JhbSk7Ci0gICAg
ZmxvYXQgbWF0cml4WzldOwotICAgIGFmZmluZVRvM3gzKHRyYW5zZm9ybSwgbWF0cml4KTsKLSAg
ICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobV9tYXRyaXhMb2NhdGlvbiwgZmFsc2UgLyp0
cmFuc3Bvc2UqLywgbWF0cml4LCAxIC8qY291bnQqLyk7Ci0KLSAgICBmbG9hdCB0ZXhNYXRyaXhb
OV07Ci0gICAgYWZmaW5lVG8zeDModGV4VHJhbnNmb3JtLCB0ZXhNYXRyaXgpOwotICAgIG1fY29u
dGV4dC0+dW5pZm9ybU1hdHJpeDNmdihtX3RleE1hdHJpeExvY2F0aW9uLCBmYWxzZSAvKnRyYW5z
cG9zZSovLCB0ZXhNYXRyaXgsIDEgLypjb3VudCovKTsKLQotICAgIG1fY29udGV4dC0+dW5pZm9y
bTFpKG1fc2FtcGxlckxvY2F0aW9uLCBzYW1wbGVyKTsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm0x
ZihtX2FscGhhTG9jYXRpb24sIGFscGhhKTsKLQotICAgIG1fY29udGV4dC0+dmVydGV4QXR0cmli
UG9pbnRlcihtX3Bvc2l0aW9uTG9jYXRpb24sIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwg
ZmFsc2UsIDAsIDApOwotCi0gICAgbV9jb250ZXh0LT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSht
X3Bvc2l0aW9uTG9jYXRpb24pOwotCi19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4U2hhZGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4U2hhZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDUzNTk5N2Q1NWU5NjA2MTZmZjE1NmVjZWQwMWJlNWQ1ZGU5Y2EwN2YuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleFNoYWRlci5oCisrKyAvZGV2L251bGwKQEAgLTEs
NTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaWZuZGVmIFRleFNoYWRlcl9oCi0jZGVmaW5lIFRleFNoYWRlcl9oCi0KLSNp
bmNsdWRlICJTaGFkZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBUZXhTaGFk
ZXIgOiBwdWJsaWMgU2hhZGVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxUZXhT
aGFkZXI+IGNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCk7Ci0gICAgdm9pZCB1c2Uo
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dGV4VHJhbnNmb3JtLCBpbnQgc2FtcGxlciwgZmxvYXQgYWxwaGEpOwotCi1wcml2YXRlOgotICAg
IFRleFNoYWRlcihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgdW5zaWduZWQgcHJvZ3JhbSk7
Ci0KLSAgICBpbnQgbV9tYXRyaXhMb2NhdGlvbjsKLSAgICBpbnQgbV90ZXhNYXRyaXhMb2NhdGlv
bjsKLSAgICBpbnQgbV9zYW1wbGVyTG9jYXRpb247Ci0gICAgaW50IG1fYWxwaGFMb2NhdGlvbjsK
LSAgICBpbnQgbV9wb3NpdGlvbkxvY2F0aW9uOwotfTsKLQotfQotCi0jZW5kaWYgLy8gVGV4U2hh
ZGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NDb250ZXh0U2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCmluZGV4IDVlZTViMjdlZDg4NzVjYTQ4MTJh
ZmQwYjIzMGRjZTdjZjk4ODA3MGUuLmJjMmVlZGIxOTQ5ZGZhMWU3MmI4MTU0YTEyZTdhYjBjYzEy
ZWFhOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
R3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcApAQCAtMzUsNyArMzUsNiBAQAogI2lu
Y2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhZGll
bnQuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRHUFUuaCIKICNpbmNsdWRlICJJbWFnZUJ1
ZmZlci5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEu
aCIKQEAgLTI0Nyw5ICsyNDYsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3Jt
U3RhdGUoKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpCi0gICAgICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5ncHVDYW52YXMoKS0+c2F2ZSgpOwotCiAgICAgLy8gU2F2ZSBvdXIgcHJpdmF0ZSBT
dGF0ZS4KICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2F2ZSgpOwogfQpAQCAtMjU5LDkgKzI1NSw2
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSgpCiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHBsYXRmb3Jt
Q29udGV4dCgpLT51c2VHUFUoKSkKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmdwdUNhbnZh
cygpLT5yZXN0b3JlKCk7Ci0KICAgICAvLyBSZXN0b3JlIG91ciBwcml2YXRlIFN0YXRlLgogICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5yZXN0b3JlKCk7CiB9CkBAIC0zMDAsNyArMjkzLDcgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmFkZElubmVyUm91bmRlZFJlY3RDbGlwKGNvbnN0IEludFJlY3Qm
IHJlY3QsIGludCB0aGlja25lc3MKICAgICBpZiAoIWlzUmVjdFNraWFTYWZlKGdldENUTSgpLCBy
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JT
b2Z0d2FyZURyYXcoKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bWFrZUdyQ29udGV4dEN1cnJl
bnQoKTsKICAgICBTa1BhdGggcGF0aDsKICAgICBwYXRoLmFkZE92YWwociwgU2tQYXRoOjprQ1df
RGlyZWN0aW9uKTsKICAgICAvLyBvbmx5IHBlcmZvcm0gdGhlIGluc2V0IGlmIHdlIHdvbid0IGlu
dmVydCByCkBAIC0zMjYsMTYgKzMxOSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclJl
Y3QoY29uc3QgRmxvYXRSZWN0JiByZWN0KQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkgJiYg
IXBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXNDbGlwQXBwbGllZCgpKSB7Ci0gICAgICAgIHBsYXRm
b3JtQ29udGV4dCgpLT5wcmVwYXJlRm9ySGFyZHdhcmVEcmF3KCk7Ci0gICAgICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5ncHVDYW52YXMoKS0+Y2xlYXJSZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47
Ci0gICAgfQotCi0gICAgLy8gRm9yY2UgYSByZWFkYmFjayBoZXJlIChpZiB3ZSdyZSB1c2luZyB0
aGUgR1BVKSwgc2luY2UgY2xlYXJSZWN0KCkgaXMKLSAgICAvLyBpbmNvbXBhdGlibGUgd2l0aCBt
aXhlZC1tb2RlIHJlbmRlcmluZy4KLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c3luY1NvZnR3YXJl
Q2FudmFzKCk7Ci0KICAgICBTa1JlY3QgciA9IHJlY3Q7CiAgICAgaWYgKCFpc1JlY3RTa2lhU2Fm
ZShnZXRDVE0oKSwgcikpCiAgICAgICAgIENsaXBSZWN0VG9DYW52YXMoKnBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKSwgciwgJnIpOwpAQCAtMzU1LDcgKzMzOCw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpjbGlwKGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBpZiAoIWlzUmVjdFNraWFT
YWZlKGdldENUTSgpLCByKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1Db250ZXh0
KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bWFr
ZUdyQ29udGV4dEN1cnJlbnQoKTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmNs
aXBSZWN0KHIpOwogfQogCkBAIC0zNjgsNyArMzUxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmNsaXAoY29uc3QgUGF0aCYgcGF0aCkKICAgICBpZiAoIWlzUGF0aFNraWFTYWZlKGdldENUTSgp
LCBwKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVG
b3JTb2Z0d2FyZURyYXcoKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bWFrZUdyQ29udGV4dEN1
cnJlbnQoKTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2xpcFBhdGhBbnRpQWxpYXNlZChwKTsK
IH0KIApAQCAtMzc3LDkgKzM2MCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlw
KGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSkKLSAgICAgICAg
cGxhdGZvcm1Db250ZXh0KCktPmdwdUNhbnZhcygpLT5jbGlwUGF0aChwYXRoKTsKLQogICAgIGNv
bnN0IFNrUGF0aCYgcCA9ICpwYXRoLnBsYXRmb3JtUGF0aCgpOwogICAgIGlmICghaXNQYXRoU2tp
YVNhZmUoZ2V0Q1RNKCksIHApKQogICAgICAgICByZXR1cm47CkBAIC00MDQsOSArMzg0LDYgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmNsaXBPdXQoY29uc3QgUGF0aCYgcCkKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocGxhdGZvcm1Db250
ZXh0KCktPnVzZUdQVSgpKQotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCkt
PmNsaXBPdXQocCk7Ci0KICAgICBjb25zdCBTa1BhdGgmIHBhdGggPSAqcC5wbGF0Zm9ybVBhdGgo
KTsKICAgICBpZiAoIWlzUGF0aFNraWFTYWZlKGdldENUTSgpLCBwYXRoKSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNDE5LDkgKzM5Niw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwUGF0aChj
b25zdCBQYXRoJiBwYXRoVG9DbGlwLCBXaW5kUnVsZSBjbGlwUnVsZSkKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0
KCktPnVzZUdQVSgpKQotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCktPmNs
aXBQYXRoKHBhdGhUb0NsaXApOwotCiAgICAgU2tQYXRoIHBhdGggPSAqcGF0aFRvQ2xpcC5wbGF0
Zm9ybVBhdGgoKTsKICAgICBpZiAoIWlzUGF0aFNraWFTYWZlKGdldENUTSgpLCBwYXRoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtNDM1LDkgKzQwOSw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpj
b25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhZmZpbmUpCiAgICAgaWYgKHBhaW50aW5n
RGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCgp
LT51c2VHUFUoKSkKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmdwdUNhbnZhcygpLT5jb25j
YXRDVE0oYWZmaW5lKTsKLQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Y29uY2F0
KGFmZmluZSk7CiB9CiAKQEAgLTQ0Niw5ICs0MTcsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lKQogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+
dXNlR1BVKCkpCi0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMoKS0+c2V0Q1RN
KGFmZmluZSk7Ci0KICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPnNldE1hdHJpeChh
ZmZpbmUpOwogfQogCkBAIC00NzQsNyArNDQyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdDb252ZXhQb2x5Z29uKHNpemVfdCBudW1Qb2ludHMsCiAgICAgaWYgKG51bVBvaW50cyA8PSAx
KQogICAgICAgICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNv
ZnR3YXJlRHJhdygpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVu
dCgpOwogCiAgICAgU2tQYXRoIHBhdGg7CiAgICAgc2V0UGF0aEZyb21Db252ZXhQb2ludHMoJnBh
dGgsIG51bVBvaW50cywgcG9pbnRzKTsKQEAgLTUxNiw3ICs0ODQsNyBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgSW50UmVjdCYgZWxpcHNlUmVjdCkKICAgICBpZiAo
IWlzUmVjdFNraWFTYWZlKGdldENUTSgpLCByZWN0KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
cGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKKyAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+bWFrZUdyQ29udGV4dEN1cnJlbnQoKTsKICAgICBTa1BhaW50IHBhaW50Owog
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwogICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+ZHJhd092YWwocmVjdCwgcGFpbnQpOwpAQCAt
NTczLDcgKzU0MSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0
IFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB3aWR0aCwgaW50CiAgICAgaWYgKCFyZWN0Q291
bnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9y
U29mdHdhcmVEcmF3KCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPm1ha2VHckNvbnRleHRDdXJy
ZW50KCk7CiAgICAgU2tSZWdpb24gZm9jdXNSaW5nUmVnaW9uOwogICAgIGNvbnN0IFNrU2NhbGFy
IGZvY3VzUmluZ091dHNldCA9IGdldEZvY3VzUmluZ091dHNldCh3aWR0aCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHJlY3RDb3VudDsgaSsrKSB7CkBAIC02MDgsNyArNTc2LDcgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludFBvaW50JiBwb2ludDEsIGNv
bnN0IEludFBvaW50JiBwb2ludDIpCiAgICAgaWYgKCFpc1BvaW50U2tpYVNhZmUoZ2V0Q1RNKCks
IHBvaW50MSkgfHwgIWlzUG9pbnRTa2lhU2FmZShnZXRDVE0oKSwgcG9pbnQyKSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXco
KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bWFrZUdyQ29udGV4dEN1cnJlbnQoKTsKIAogICAg
IEZsb2F0UG9pbnQgcDEgPSBwb2ludDE7CiAgICAgRmxvYXRQb2ludCBwMiA9IHBvaW50MjsKQEAg
LTY1NCw3ICs2MjIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0Q2hl
Y2tpbmcoY29uc3QgRmxvYXRQb2ludCYgcHQsIGZsb2F0IHdpZHRoLAogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5w
cmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPm1ha2VHckNv
bnRleHRDdXJyZW50KCk7CiAKICAgICAvLyBDcmVhdGUgdGhlIHBhdHRlcm4gd2UnbGwgdXNlIHRv
IGRyYXcgdGhlIHVuZGVybGluZS4KICAgICBzdGF0aWMgU2tCaXRtYXAqIG1pc3NwZWxsQml0bWFw
ID0gMDsKQEAgLTczNiw3ICs3MDQsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVG
b3JUZXh0KGNvbnN0IEZsb2F0UG9pbnQmIHB0LAogICAgIGlmICh3aWR0aCA8PSAwKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJh
dygpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgpOwogCiAg
ICAgaW50IHRoaWNrbmVzcyA9IFNrTWF4MzIoc3RhdGljX2Nhc3Q8aW50PihzdHJva2VUaGlja25l
c3MoKSksIDEpOwogICAgIFNrUmVjdCByOwpAQCAtNzU4LDcgKzcyNiw3IEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpkcmF3UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5w
cmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPm1ha2VHckNv
bnRleHRDdXJyZW50KCk7CiAKICAgICBTa1JlY3QgciA9IHJlY3Q7CiAgICAgaWYgKCFpc1JlY3RT
a2lhU2FmZShnZXRDVE0oKSwgcikpIHsKQEAgLTc3NCwxOCArNzQyLDExIEBAIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoVG9GaWxsKQogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBhZGQgc3Vw
cG9ydCB0byBHcmFwaGljc0NvbnRleHRHUFUgZm9yIG1vcmUgdGhhbiBqdXN0IHNvbGlkIGZpbGxz
LgotICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkgJiYgcGxhdGZvcm1Db250ZXh0
KCktPmNhbkFjY2VsZXJhdGUoKSkgewotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFy
ZUZvckhhcmR3YXJlRHJhdygpOwotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFz
KCktPmZpbGxQYXRoKHBhdGhUb0ZpbGwpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAg
U2tQYXRoIHBhdGggPSAqcGF0aFRvRmlsbC5wbGF0Zm9ybVBhdGgoKTsKICAgICBpZiAoIWlzUGF0
aFNraWFTYWZlKGdldENUTSgpLCBwYXRoKSkKICAgICAgIHJldHVybjsKIAotICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CisgICAgcGxhdGZvcm1Db250ZXh0
KCktPm1ha2VHckNvbnRleHRDdXJyZW50KCk7CiAKICAgICBjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwogICAgIHBhdGguc2V0RmlsbFR5cGUoc3RhdGUuZmlsbFJ1
bGUgPT0gUlVMRV9FVkVOT0REID8KQEAgLTgwOCwxNSArNzY5LDkgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICAgICAgQ2xpcFJlY3RU
b0NhbnZhcygqcGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCByLCAmcik7CiAgICAgfQogCi0g
ICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSAmJiBwbGF0Zm9ybUNvbnRleHQoKS0+
Y2FuQWNjZWxlcmF0ZSgpKSB7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9y
SGFyZHdhcmVEcmF3KCk7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMoKS0+
ZmlsbFJlY3QocmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KICAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+c2F2ZSgpOwogCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0
d2FyZURyYXcoKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bWFrZUdyQ29udGV4dEN1cnJlbnQo
KTsKIAogICAgIFNrUGFpbnQgcGFpbnQ7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFp
bnRGb3JGaWxsaW5nKCZwYWludCk7CkBAIC04MzAsMTMgKzc4NSw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xv
ciwgQ29sb3JTCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSAmJiBwbGF0Zm9ybUNvbnRleHQo
KS0+Y2FuQWNjZWxlcmF0ZSgpKSB7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJl
Rm9ySGFyZHdhcmVEcmF3KCk7Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMo
KS0+ZmlsbFJlY3QocmVjdCwgY29sb3IsIGNvbG9yU3BhY2UpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsK
KyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bWFrZUdyQ29udGV4dEN1cnJlbnQoKTsKIAogICAgIFNr
UmVjdCByID0gcmVjdDsKICAgICBpZiAoIWlzUmVjdFNraWFTYWZlKGdldENUTSgpLCByKSkgewpA
QCAtODcwLDcgKzgxOSw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUm91bmRlZFJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCwKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJh
dygpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgpOwogCiAg
ICAgU2tSZWN0IHIgPSByZWN0OwogICAgIGlmICghaXNSZWN0U2tpYVNhZmUoZ2V0Q1RNKCksIHIp
KQpAQCAtOTIxLDkgKzg3MCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzY2FsZShjb25zdCBG
bG9hdFNpemUmIHNpemUpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSkKLSAgICAgICAgcGxh
dGZvcm1Db250ZXh0KCktPmdwdUNhbnZhcygpLT5zY2FsZShzaXplKTsKLQogICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5jYW52YXMoKS0+c2NhbGUoV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihzaXplLndp
ZHRoKCkpLAogICAgICAgICBXZWJDb3JlRmxvYXRUb1NrU2NhbGFyKHNpemUuaGVpZ2h0KCkpKTsK
IH0KQEAgLTkzMyw5ICs4NzksNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0QWxwaGEoZmxv
YXQgYWxwaGEpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSkKLSAgICAgICAgcGxhdGZvcm1D
b250ZXh0KCktPmdwdUNhbnZhcygpLT5zZXRBbHBoYShhbHBoYSk7Ci0KICAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+c2V0QWxwaGEoYWxwaGEpOwogfQogCkBAIC05NDQsOSArODg3LDYgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZU9w
ZXJhdG9yIG9wKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpCi0gICAgICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5ncHVDYW52YXMoKS0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsKLQogICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5zZXRYZmVybW9kZU1vZGUoV2ViQ29yZUNvbXBvc2l0ZVRvU2tp
YUNvbXBvc2l0ZShvcCkpOwogfQogCkBAIC0xMDM5LDkgKzk3OSw2IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sb3IsIENvbG9yU3Bh
Y2UgY29sb3JTCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSkKLSAgICAgICAgcGxhdGZvcm1D
b250ZXh0KCktPmdwdUNhbnZhcygpLT5zZXRGaWxsQ29sb3IoY29sb3IsIGNvbG9yU3BhY2UpOwot
CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldEZpbGxDb2xvcihjb2xvci5yZ2IoKSk7CiB9CiAK
QEAgLTEwNjksMTQgKzEwMDYsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1T
aGFkb3coY29uc3QgRmxvYXRTaXplJiBzaXplLAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkp
IHsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0R1BVKiBjYW52YXMgPSBwbGF0Zm9ybUNvbnRleHQo
KS0+Z3B1Q2FudmFzKCk7Ci0gICAgICAgIGNhbnZhcy0+c2V0U2hhZG93T2Zmc2V0KHNpemUpOwot
ICAgICAgICBjYW52YXMtPnNldFNoYWRvd0JsdXIoYmx1ckZsb2F0KTsKLSAgICAgICAgY2FudmFz
LT5zZXRTaGFkb3dDb2xvcihjb2xvciwgY29sb3JTcGFjZSk7Ci0gICAgICAgIGNhbnZhcy0+c2V0
U2hhZG93c0lnbm9yZVRyYW5zZm9ybXMobV9zdGF0ZS5zaGFkb3dzSWdub3JlVHJhbnNmb3Jtcyk7
Ci0gICAgfQotCiAgICAgLy8gRGV0ZWN0IHdoZW4gdGhlcmUncyBubyBlZmZlY3RpdmUgc2hhZG93
IGFuZCBjbGVhciB0aGUgbG9vcGVyLgogICAgIGlmICghc2l6ZS53aWR0aCgpICYmICFzaXplLmhl
aWdodCgpICYmICFibHVyRmxvYXQpIHsKICAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldERy
YXdMb29wZXIoMCk7CkBAIC0xMjExLDcgKzExNDAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
c3Ryb2tlQXJjKGNvbnN0IEludFJlY3QmIHIsIGludCBzdGFydEFuZ2xlLCBpbnQgYW5nbGVTcGFu
KQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CisgICAgcGxhdGZvcm1D
b250ZXh0KCktPm1ha2VHckNvbnRleHRDdXJyZW50KCk7CiAKICAgICBTa1BhaW50IHBhaW50Owog
ICAgIFNrUmVjdCBvdmFsID0gcjsKQEAgLTEyNDQsNyArMTE3Myw3IEBAIHZvaWQgR3JhcGhpY3ND
b250ZXh0OjpzdHJva2VQYXRoKGNvbnN0IFBhdGgmIHBhdGhUb1N0cm9rZSkKICAgICBpZiAoIWlz
UGF0aFNraWFTYWZlKGdldENUTSgpLCBwYXRoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxh
dGZvcm1Db250ZXh0KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKKyAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+bWFrZUdyQ29udGV4dEN1cnJlbnQoKTsKIAogICAgIFNrUGFpbnQgcGFpbnQ7CiAg
ICAgcGxhdGZvcm1Db250ZXh0KCktPnNldHVwUGFpbnRGb3JTdHJva2luZygmcGFpbnQsIDAsIDAp
OwpAQCAtMTI1OSw3ICsxMTg4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnN0cm9rZVJlY3Qo
Y29uc3QgRmxvYXRSZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgpCiAgICAgaWYgKCFpc1JlY3RT
a2lhU2FmZShnZXRDVE0oKSwgcmVjdCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CisgICAgcGxhdGZvcm1Db250ZXh0
KCktPm1ha2VHckNvbnRleHRDdXJyZW50KCk7CiAKICAgICBTa1BhaW50IHBhaW50OwogICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yU3Ryb2tpbmcoJnBhaW50LCAwLCAwKTsKQEAg
LTEyODksOSArMTIxOCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpyb3RhdGUoZmxvYXQgYW5n
bGVJblJhZGlhbnMpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSkKLSAgICAgICAgcGxhdGZv
cm1Db250ZXh0KCktPmdwdUNhbnZhcygpLT5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOwotCiAgICAg
cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5yb3RhdGUoV2ViQ29yZUZsb2F0VG9Ta1NjYWxh
cigKICAgICAgICAgYW5nbGVJblJhZGlhbnMgKiAoMTgwLjBmIC8gMy4xNDE1OTI2NWYpKSk7CiB9
CkBAIC0xMzAxLDI2ICsxMjI3LDE4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUo
ZmxvYXQgdywgZmxvYXQgaCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgpKQotICAgICAgICBw
bGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCktPnRyYW5zbGF0ZSh3LCBoKTsKLQogICAgIHBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+dHJhbnNsYXRlKFdlYkNvcmVGbG9hdFRvU2tTY2Fs
YXIodyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViQ29y
ZUZsb2F0VG9Ta1NjYWxhcihoKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzeW5jU29m
dHdhcmVDYW52YXMoKQotewotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zeW5jU29mdHdhcmVDYW52
YXMoKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBmcmFt
ZWJ1ZmZlciwgY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRT
aGFyZWRHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRHJhd2lu
Z0J1ZmZlciogZnJhbWVidWZmZXIsIGNvbnN0IEludFNpemUmIHNpemUpCiB7CiAgICAgcGxhdGZv
cm1Db250ZXh0KCktPnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQsIGZyYW1lYnVm
ZmVyLCBzaXplKTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6Om1hcmtEaXJ0eVJlY3QoY29u
c3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzeW5jU29mdHdhcmVDYW52
YXMoKQogewotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tYXJrRGlydHlSZWN0KHJlY3QpOworICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgpOwogfQogCiAjaWYgUExB
VEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAppbmRleCAzYmY3
NTU4ZjczZjk5NjE1YTc0NGU5ZDc1ZGQxZmI3NzVmMDAzNWZmLi5lYjVjYTU4YjM2MmZiYTE4YjRl
NDBjMmI3ODdmZGY4M2YwOTI2NzY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCkBAIC0zOCw3ICszOCw2
IEBACiAjaW5jbHVkZSAiQml0bWFwSW1hZ2VTaW5nbGVGcmFtZVNraWEuaCIKICNpbmNsdWRlICJE
cmF3aW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCi0jaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0R1BVLmgiCiAjaW5jbHVkZSAiSW1hZ2VEYXRhLmgiCiAjaW5jbHVkZSAi
SlBFR0ltYWdlRW5jb2Rlci5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVnaXN0cnkuaCIKQEAgLTEw
NSw3ICsxMDQsNyBAQCBib29sIEltYWdlQnVmZmVyOjpkcmF3c1VzaW5nQ29weSgpIGNvbnN0CiAK
IFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlQnVmZmVyOjpjb3B5SW1hZ2UoKSBjb25zdAogewotICAg
IG1fY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnN5bmNTb2Z0d2FyZUNhbnZhcygpOworICAg
IG1fY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPm1ha2VHckNvbnRleHRDdXJyZW50KCk7CiAg
ICAgcmV0dXJuIEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpjcmVhdGUoKm1fZGF0YS5tX3Bs
YXRmb3JtQ29udGV4dC5iaXRtYXAoKSwgdHJ1ZSk7CiB9CiAKQEAgLTExNywyMiArMTE2LDYgQEAg
dm9pZCBJbWFnZUJ1ZmZlcjo6Y2xpcChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCkgY29uc3QKIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uc3QgRmxvYXRSZWN0
JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LAogICAgICAgICAgICAgICAgICAg
ICAgICBDb21wb3NpdGVPcGVyYXRvciBvcCwgYm9vbCB1c2VMb3dRdWFsaXR5U2NhbGUpCiB7Ci0g
ICAgaWYgKG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC51c2VHUFUoKSAmJiBjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpIHsKLSAgICAgICAgaWYgKGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5jYW5BY2NlbGVyYXRlKCkpIHsKLSAgICAgICAgICAgIG1fZGF0YS5tX3BsYXRm
b3JtQ29udGV4dC5wcmVwYXJlRm9ySGFyZHdhcmVEcmF3KCk7Ci0gICAgICAgICAgICBEcmF3aW5n
QnVmZmVyKiBzb3VyY2VEcmF3aW5nQnVmZmVyID0gbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0Lmdw
dUNhbnZhcygpLT5kcmF3aW5nQnVmZmVyKCk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBzb3VyY2VU
ZXh0dXJlID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNvdXJjZURyYXdpbmdCdWZmZXItPnBsYXRm
b3JtQ29sb3JCdWZmZXIoKSk7Ci0gICAgICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3ROb3JtYWxp
emVkKG5vcm1hbGl6ZVJlY3QoZGVzdFJlY3QpKTsKLSAgICAgICAgICAgIEZsb2F0UmVjdCBzcmNS
ZWN0RmxpcHBlZChub3JtYWxpemVSZWN0KHNyY1JlY3QpKTsKLSAgICAgICAgICAgIHNyY1JlY3RG
bGlwcGVkLnNldFkobV9zaXplLmhlaWdodCgpIC0gc3JjUmVjdC55KCkpOwotICAgICAgICAgICAg
c3JjUmVjdEZsaXBwZWQuc2V0SGVpZ2h0KC1zcmNSZWN0LmhlaWdodCgpKTsKLSAgICAgICAgICAg
IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9ySGFyZHdhcmVEcmF3KCk7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCktPmRyYXdU
ZXh0dXJlZFJlY3Qoc291cmNlVGV4dHVyZSwgbV9zaXplLCBzcmNSZWN0RmxpcHBlZCwgZGVzdFJl
Y3ROb3JtYWxpemVkLCBzdHlsZUNvbG9yU3BhY2UsIG9wKTsKLSAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgfQotICAgICAgICBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuc3luY1NvZnR3YXJl
Q2FudmFzKCk7Ci0gICAgfQotCiAgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IEJpdG1hcEltYWdl
U2luZ2xlRnJhbWVTa2lhOjpjcmVhdGUoKm1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC5iaXRtYXAo
KSwgY29udGV4dCA9PSBtX2NvbnRleHQpOwogICAgIGNvbnRleHQtPmRyYXdJbWFnZShpbWFnZS5n
ZXQoKSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgb3AsIHVzZUxvd1F1YWxp
dHlTY2FsZSk7CiB9CkBAIC0yNTYsMTMgKzIzOSwxMyBAQCBQYXNzUmVmUHRyPEJ5dGVBcnJheT4g
Z2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIFNrRGV2aWNlJiBzcmNEZXZpY2UsCiAK
IFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVkSW1hZ2VE
YXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7Ci0gICAgY29udGV4dCgpLT5wbGF0Zm9y
bUNvbnRleHQoKS0+c3luY1NvZnR3YXJlQ2FudmFzKCk7CisgICAgbV9jb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+bWFrZUdyQ29udGV4dEN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2V0SW1hZ2VE
YXRhPFVubXVsdGlwbGllZD4ocmVjdCwgKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNh
bnZhcygpLT5nZXREZXZpY2UoKSwgbV9zaXplKTsKIH0KIAogUGFzc1JlZlB0cjxCeXRlQXJyYXk+
IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJl
Y3QpIGNvbnN0CiB7Ci0gICAgY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+c3luY1NvZnR3
YXJlQ2FudmFzKCk7CisgICAgbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+bWFrZUdyQ29u
dGV4dEN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPFByZW11bHRpcGxpZWQ+KHJl
Y3QsICpjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0RGV2aWNlKCks
IG1fc2l6ZSk7CiB9CiAKQEAgLTMzNywxMyArMzIwLDEzIEBAIHZvaWQgcHV0SW1hZ2VEYXRhKEJ5
dGVBcnJheSomIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVj
dCYKIAogdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEJ5dGVBcnJh
eSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0JiBzb3Vy
Y2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewotICAgIGNvbnRleHQoKS0+cGxh
dGZvcm1Db250ZXh0KCktPnN5bmNTb2Z0d2FyZUNhbnZhcygpOworICAgIG1fY29udGV4dC0+cGxh
dGZvcm1Db250ZXh0KCktPm1ha2VHckNvbnRleHRDdXJyZW50KCk7CiAgICAgcHV0SW1hZ2VEYXRh
PFVubXVsdGlwbGllZD4oc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0UG9pbnQs
IGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXREZXZpY2UoKSwgbV9z
aXplKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdlRGF0YShC
eXRlQXJyYXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3QgSW50UmVj
dCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKLSAgICBjb250ZXh0
KCktPnBsYXRmb3JtQ29udGV4dCgpLT5zeW5jU29mdHdhcmVDYW52YXMoKTsKKyAgICBtX2NvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgpOwogICAgIHB1dElt
YWdlRGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVNpemUsIHNvdXJjZVJlY3QsIGRl
c3RQb2ludCwgY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldERldmlj
ZSgpLCBtX3NpemUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL0ltYWdlU2tpYS5jcHAKaW5kZXggYWRmMjkxOTdiMDhiM2UyYWZmYWY5Y2M1Njll
NzcxNjQ3OGU0MTMxMi4uNTM4ODhjOWIzYzNkZjI3MDgyODJlMWRmOTY1YzgxOWQwNTMxNWZjOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNr
aWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VT
a2lhLmNwcApAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgog
I2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdQVS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNs
dWRlICJOYXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgi
CkBAIC00MjMsMjIgKzQyMiw2IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwKICAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cGFpbnRTa1Bh
aW50KGRlc3RSZWN0LCBwYWludCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRyYXdCaXRtYXBHTEVTMihH
cmFwaGljc0NvbnRleHQqIGN0eHQsIE5hdGl2ZUltYWdlU2tpYSogYml0bWFwLCBjb25zdCBGbG9h
dFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQotewotICAgIGN0eHQt
PnBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9ySGFyZHdhcmVEcmF3KCk7Ci0gICAgR3JhcGhp
Y3NDb250ZXh0R1BVKiBncHVDYW52YXMgPSBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2Fu
dmFzKCk7Ci0gICAgVGV4dHVyZSogdGV4dHVyZSA9IGdwdUNhbnZhcy0+Z2V0VGV4dHVyZShiaXRt
YXApOwotICAgIGlmICghdGV4dHVyZSkgewotICAgICAgICBBU1NFUlQoYml0bWFwLT5jb25maWco
KSA9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpOwotICAgICAgICBBU1NFUlQoYml0bWFw
LT5yb3dCeXRlcygpID09IGJpdG1hcC0+d2lkdGgoKSAqIDQpOwotICAgICAgICB0ZXh0dXJlID0g
Z3B1Q2FudmFzLT5jcmVhdGVUZXh0dXJlKGJpdG1hcCwgVGV4dHVyZTo6QkdSQTgsIGJpdG1hcC0+
d2lkdGgoKSwgYml0bWFwLT5oZWlnaHQoKSk7Ci0gICAgICAgIFNrQXV0b0xvY2tQaXhlbHMgbG9j
aygqYml0bWFwKTsKLSAgICAgICAgQVNTRVJUKGJpdG1hcC0+Z2V0UGl4ZWxzKCkpOwotICAgICAg
ICB0ZXh0dXJlLT5sb2FkKGJpdG1hcC0+Z2V0UGl4ZWxzKCkpOwotICAgIH0KLSAgICBncHVDYW52
YXMtPmRyYXdUZXh0dXJlZFJlY3QodGV4dHVyZSwgc3JjUmVjdCwgZHN0UmVjdCwgc3R5bGVDb2xv
clNwYWNlLCBjb21wb3NpdGVPcCk7Ci19Ci0KIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQogLy8gQml0bWFwSW1hZ2UgQ2xhc3MKIC8vID09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNDk5LDEyICs0ODIs
NyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3Qg
RmxvYXRSZWN0JiBkc3RSZWN0LAogICAgIGlmIChub3JtU3JjUmVjdC5pc0VtcHR5KCkgfHwgbm9y
bURzdFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47ICAvLyBOb3RoaW5nIHRvIGRyYXcu
CiAKLSAgICBpZiAoY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgpICYmIGN0eHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5jYW5BY2NlbGVyYXRlKCkpIHsKLSAgICAgICAgZHJhd0JpdG1hcEdM
RVMyKGN0eHQsIGJtLCBub3JtU3JjUmVjdCwgbm9ybURzdFJlY3QsIGNvbG9yU3BhY2UsIGNvbXBv
c2l0ZU9wKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGN0eHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CisgICAgY3R4dC0+cGxhdGZvcm1Db250
ZXh0KCktPm1ha2VHckNvbnRleHRDdXJyZW50KCk7CiAKICAgICBwYWludFNrQml0bWFwKGN0eHQt
PnBsYXRmb3JtQ29udGV4dCgpLAogICAgICAgICAgICAgICAgICAgKmJtLApAQCAtNTI3LDEyICs1
MDUsNyBAQCB2b2lkIEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpkcmF3KEdyYXBoaWNzQ29u
dGV4dCogY3R4dCwKICAgICBpZiAobm9ybVNyY1JlY3QuaXNFbXB0eSgpIHx8IG5vcm1Ec3RSZWN0
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOyAgLy8gTm90aGluZyB0byBkcmF3LgogCi0gICAg
aWYgKGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSAmJiBjdHh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+Y2FuQWNjZWxlcmF0ZSgpKSB7Ci0gICAgICAgIGRyYXdCaXRtYXBHTEVTMihjdHh0
LCAmbV9uYXRpdmVJbWFnZSwgc3JjUmVjdCwgZHN0UmVjdCwgc3R5bGVDb2xvclNwYWNlLCBjb21w
b3NpdGVPcCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjdHh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOworICAgIGN0eHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgpOwogCiAgICAgcGFpbnRTa0JpdG1hcChjdHh0
LT5wbGF0Zm9ybUNvbnRleHQoKSwKICAgICAgICAgICAgICAgICAgIG1fbmF0aXZlSW1hZ2UsCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2ZUlt
YWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05hdGl2
ZUltYWdlU2tpYS5jcHAKaW5kZXggODEwY2IzOGQyNDIyYjU2MDI2ZDY3ZjYyNjMyMTE5YmM4YjQ5
ZTYxNy4uZjBmNGFhMjE1NzBjMDVkZTdkNDQ1MTMxYWYxOGEzMjVlOTQ5YjMwZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0aXZlSW1h
Z2VTa2lhLmNwcApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgInNraWEvZXh0L2ltYWdlX29w
ZXJhdGlvbnMuaCIKIAogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgotI2luY2x1ZGUgIlNo
YXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
ICNpbmNsdWRlICJTa2lhVXRpbHMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTYsNyAr
NTYsNiBAQCBOYXRpdmVJbWFnZVNraWE6Ok5hdGl2ZUltYWdlU2tpYShjb25zdCBTa0JpdG1hcCYg
b3RoZXIpCiAKIE5hdGl2ZUltYWdlU2tpYTo6fk5hdGl2ZUltYWdlU2tpYSgpCiB7Ci0gICAgU2hh
cmVkR3JhcGhpY3NDb250ZXh0M0Q6OnJlbW92ZVRleHR1cmVzRm9yKHRoaXMpOwogfQogCiBpbnQg
TmF0aXZlSW1hZ2VTa2lhOjpkZWNvZGVkU2l6ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lh
LmNwcAppbmRleCAxNTE1MDI3YWQ2YzlkMjE5MWY5ZTE2NjE3ODMyYzk5ZGNkYjkxMjVkLi45OTFi
ODdkNWIwZGQ2ZjRkNjNhMzc5MjYzYzFmZTI4NmQwM2YxZmIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0
U2tpYS5jcHAKQEAgLTU3LDExICs1Nyw2IEBACiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FO
VkFTKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdQVS5oIgotI2luY2x1ZGUgIlNoYXJlZEdy
YXBoaWNzQ29udGV4dDNELmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBleHRl
cm4gYm9vbCBpc1BhdGhTa2lhU2FmZShjb25zdCBTa01hdHJpeCYgdHJhbnNmb3JtLCBjb25zdCBT
a1BhdGgmIHBhdGgpOwpAQCAtMjE0LDcgKzIwOSw3IEBAIFBsYXRmb3JtQ29udGV4dFNraWE6OlBs
YXRmb3JtQ29udGV4dFNraWEoU2tDYW52YXMqIGNhbnZhcykKICAgICAsIG1fcHJpbnRpbmcoZmFs
c2UpCiAgICAgLCBtX2RyYXdpbmdUb0ltYWdlQnVmZmVyKGZhbHNlKQogICAgICwgbV9hY2NlbGVy
YXRpb25Nb2RlKE5vQWNjZWxlcmF0aW9uKQotICAgICwgbV9iYWNraW5nU3RvcmVTdGF0ZShOb25l
KQorICAgICwgbV9ncHVDb250ZXh0KDApCiB7CiAgICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChTdGF0
ZSgpKTsKICAgICBtX3N0YXRlID0gJm1fc3RhdGVTdGFjay5sYXN0KCk7CkBAIC0yMjIsMTcgKzIx
Nyw2IEBAIFBsYXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEoU2tDYW52YXMq
IGNhbnZhcykKIAogUGxhdGZvcm1Db250ZXh0U2tpYTo6flBsYXRmb3JtQ29udGV4dFNraWEoKQog
ewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgaWYgKG1fZ3B1Q2FudmFz
KSB7Ci0gICAgICAgIC8vIG1ha2Ugc3VyZSBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gdGhpcyBwbGF0
Zm9ybSBjb250ZXh0IGhhcyBiZWVuIGZsdXNoZWQKLSAgICAgICAgaWYgKHVzZVNraWFHUFUoKSkg
ewotICAgICAgICAgICAgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBtX2dwdUNh
bnZhcy0+Y29udGV4dCgpOwotICAgICAgICAgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5nckNvbnRleHQoKS0+Zmx1c2goMCk7Ci0gICAgICAg
IH0KLSAgICAgICAgbV9ncHVDYW52YXMtPmRyYXdpbmdCdWZmZXIoKS0+c2V0V2lsbFB1Ymxpc2hD
YWxsYmFjayhudWxscHRyKTsKLSAgICB9Ci0jZW5kaWYKIH0KIAogdm9pZCBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjpzZXRDYW52YXMoU2tDYW52YXMqIGNhbnZhcykKQEAgLTcwNCw0MyArNjg4LDE5IEBA
IGJvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6Y2FudmFzQ2xpcEFwcGxpZWQoKSBjb25zdAogICAg
IHJldHVybiBtX3N0YXRlLT5tX2NhbnZhc0NsaXBBcHBsaWVkOwogfQogCi1jbGFzcyBXaWxsUHVi
bGlzaENhbGxiYWNrSW1wbCA6IHB1YmxpYyBEcmF3aW5nQnVmZmVyOjpXaWxsUHVibGlzaENhbGxi
YWNrIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxXaWxsUHVibGlzaENhbGxiYWNr
PiBjcmVhdGUoUGxhdGZvcm1Db250ZXh0U2tpYSogcGNzKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGFkb3B0UHRyKG5ldyBXaWxsUHVibGlzaENhbGxiYWNrSW1wbChwY3MpKTsKLSAgICB9Ci0KLSAg
ICB2aXJ0dWFsIHZvaWQgd2lsbFB1Ymxpc2goKQotICAgIHsKLSAgICAgICAgbV9wY3MtPnByZXBh
cmVGb3JIYXJkd2FyZURyYXcoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgV2ls
bFB1Ymxpc2hDYWxsYmFja0ltcGwoUGxhdGZvcm1Db250ZXh0U2tpYSogcGNzKQotICAgICAgICA6
IG1fcGNzKHBjcykKLSAgICB7Ci0gICAgfQotCi0gICAgUGxhdGZvcm1Db250ZXh0U2tpYSogbV9w
Y3M7Ci19OwotCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldFNoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBEcmF3aW5nQnVmZmVyKiBk
cmF3aW5nQnVmZmVyLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQordm9pZCBQbGF0Zm9y
bUNvbnRleHRTa2lhOjpzZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlciwgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2l6ZSkKIHsKICAgICBtX2FjY2VsZXJhdGlvbk1vZGUgPSBOb0FjY2VsZXJhdGlv
bjsKKyAgICBtX2dwdUNvbnRleHQgPSBjb250ZXh0OwogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpCiAgICAgaWYgKGNvbnRleHQgJiYgZHJhd2luZ0J1ZmZlcikgewotICAgICAgICBt
X2dwdUNhbnZhcyA9IGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHRHUFUoY29udGV4dCwgZHJh
d2luZ0J1ZmZlciwgc2l6ZSkpOwotICAgICAgICBtX3VwbG9hZFRleHR1cmUuY2xlYXIoKTsKLSAg
ICAgICAgZHJhd2luZ0J1ZmZlci0+c2V0V2lsbFB1Ymxpc2hDYWxsYmFjayhXaWxsUHVibGlzaENh
bGxiYWNrSW1wbDo6Y3JlYXRlKHRoaXMpKTsKLQogICAgICAgICAvLyB1c2Ugc2tpYSBncHUgcmVu
ZGVyaW5nIGlmIGF2YWlsYWJsZQogICAgICAgICBHckNvbnRleHQqIGdyID0gY29udGV4dC0+Z3JD
b250ZXh0KCk7CiAgICAgICAgIGlmIChncikgewogICAgICAgICAgICAgbV9hY2NlbGVyYXRpb25N
b2RlID0gU2tpYUdQVTsKIAogICAgICAgICAgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgICAgICAgICBtX2dwdUNhbnZhcy0+YmluZEZyYW1lYnVmZmVyKCk7CisgICAgICAg
ICAgICBkcmF3aW5nQnVmZmVyLT5iaW5kKCk7CiAKICAgICAgICAgICAgIGdyLT5yZXNldENvbnRl
eHQoKTsKICAgICAgICAgICAgIGRyYXdpbmdCdWZmZXItPnNldEdyQ29udGV4dChncik7CkBAIC03
NTAsMTYwICs3MTAsMTUgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRTaGFyZWRHcmFw
aGljc0NvbnRleHQzRChTaGFyZWRHcmFwaGljc0NvbnRleHQzRCogY28KICAgICAgICAgICAgIFNr
QXV0b1RVbnJlZjxHclRleHR1cmU+IGRyYXdCdWZUZXgoc3RhdGljX2Nhc3Q8R3JUZXh0dXJlKj4o
Z3ItPmNyZWF0ZVBsYXRmb3JtU3VyZmFjZShkcmF3QnVmRGVzYykpKTsKICAgICAgICAgICAgIG1f
Y2FudmFzLT5zZXREZXZpY2UobmV3IFNrR3B1RGV2aWNlKGdyLCBkcmF3QnVmVGV4LmdldCgpKSkt
PnVucmVmKCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9hY2NlbGVyYXRpb25Nb2Rl
ID0gR1BVOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN5bmNTb2Z0d2FyZUNhbnZhcygpOwotICAg
ICAgICBtX3VwbG9hZFRleHR1cmUuY2xlYXIoKTsKLSAgICAgICAgbV9ncHVDYW52YXMuY2xlYXIo
KTsKKyAgICAgICAgICAgIG1fZ3B1Q29udGV4dCA9IDA7CiAgICAgfQogI2VuZGlmCiB9CiAKLXZv
aWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpIGNvbnN0Cit2
b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6Om1ha2VHckNvbnRleHRDdXJyZW50KCkKIHsKLSAgICBp
ZiAobV9hY2NlbGVyYXRpb25Nb2RlID09IFNraWFHUFUpIHsKLSNpZiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQotICAgICAgICBpZiAobV9ncHVDYW52YXMpCi0gICAgICAgICAgICBtX2dw
dUNhbnZhcy0+Y29udGV4dCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbmRpZgotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fYmFja2luZ1N0b3JlU3RhdGUgPT0gSGFyZHdh
cmUpIHsKLSAgICAgICAgLy8gRGVwZW5kaW5nIG9uIHRoZSBibGVuZCBtb2RlIHdlIG5lZWQgdG8g
ZG8gb25lIG9mIGEgZmV3IHRoaW5nczoKLQotICAgICAgICAvLyAqIEZvciBhc3NvY2lhdGl2ZSBi
bGVuZCBtb2Rlcywgd2UgY2FuIGRyYXcgaW50byBhbiBpbml0aWFsbHkgZW1wdHkKLSAgICAgICAg
Ly8gY2FudmFzIGFuZCB0aGVuIGNvbXBvc2l0ZSB0aGUgcmVzdWx0cyBvbiB0b3Agb2YgdGhlIGhh
cmR3YXJlIGRyYXduCi0gICAgICAgIC8vIHJlc3VsdHMgYmVmb3JlIHRoZSBuZXh0IGhhcmR3YXJl
IGRyYXcgb3Igc3dhcEJ1ZmZlcnMoKS4KLQotICAgICAgICAvLyAqIEZvciBub24tYXNzb2NpYXRp
dmUgYmxlbmQgbW9kZXMgd2UgaGF2ZSB0byBkbyBhIHJlYWRiYWNrIGFuZCB0aGVuCi0gICAgICAg
IC8vIHNvZnR3YXJlIGRyYXcuICBXaGVuIHdlIHJlLXVwbG9hZCBpbiB0aGlzIG1vZGUgd2UgaGF2
ZSB0byBibG93Ci0gICAgICAgIC8vIGF3YXkgd2hhdGV2ZXIgaXMgaW4gdGhlIGhhcmR3YXJlIGJh
Y2tpbmcgc3RvcmUgKGRvIGEgY29weSBpbnN0ZWFkCi0gICAgICAgIC8vIG9mIGEgY29tcG9zaXRp
bmcgb3BlcmF0aW9uKS4KLQotICAgICAgICBpZiAobV9zdGF0ZS0+bV94ZmVyTW9kZSA9PSBTa1hm
ZXJtb2RlOjprU3JjT3Zlcl9Nb2RlKSB7Ci0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaGF2
ZSByZW5kZXJpbmcgcmVzdWx0cyBpbiBib3RoIHRoZSBoYXJkd2FyZSBhbmQgc29mdHdhcmUgYmFj
a2luZyBzdG9yZXMuCi0gICAgICAgICAgICBtX2JhY2tpbmdTdG9yZVN0YXRlID0gTWl4ZWQ7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZWFkYmFja0hhcmR3YXJlVG9Tb2Z0d2FyZSgp
OwotICAgICAgICAgICAgLy8gV2hlbiB3ZSBzd2l0Y2ggYmFjayB0byBoYXJkd2FyZSBjb3B5IHRo
ZSByZXN1bHRzLCBkb24ndCBjb21wb3NpdGUuCi0gICAgICAgICAgICBtX2JhY2tpbmdTdG9yZVN0
YXRlID0gU29mdHdhcmU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fYmFja2luZ1N0b3Jl
U3RhdGUgPT0gTWl4ZWQpIHsKLSAgICAgICAgaWYgKG1fc3RhdGUtPm1feGZlck1vZGUgIT0gU2tY
ZmVybW9kZTo6a1NyY092ZXJfTW9kZSkgewotICAgICAgICAgICAgLy8gSGF2ZSB0byBjb21wb3Np
dGUgb3VyIGN1cnJlbnRseSBzb2Z0d2FyZSBkcmF3biBkYXRhLi4uCi0gICAgICAgICAgICB1cGxv
YWRTb2Z0d2FyZVRvSGFyZHdhcmUoQ29tcG9zaXRlU291cmNlT3Zlcik7Ci0gICAgICAgICAgICAv
LyB0aGVuIGRvIGEgcmVhZGJhY2sgc28gd2UgY2FuIGhhcmR3YXJlIGRyYXcgc3R1ZmYuCi0gICAg
ICAgICAgICByZWFkYmFja0hhcmR3YXJlVG9Tb2Z0d2FyZSgpOwotICAgICAgICAgICAgbV9iYWNr
aW5nU3RvcmVTdGF0ZSA9IFNvZnR3YXJlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX2Jh
Y2tpbmdTdG9yZVN0YXRlID09IE5vbmUpIHsKLSAgICAgICAgbV9iYWNraW5nU3RvcmVTdGF0ZSA9
IFNvZnR3YXJlOwotICAgIH0KLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpwcmVwYXJl
Rm9ySGFyZHdhcmVEcmF3KCkgY29uc3QKLXsKLSAgICBpZiAoIShtX2FjY2VsZXJhdGlvbk1vZGUg
PT0gR1BVKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fYmFja2luZ1N0b3JlU3RhdGUg
PT0gU29mdHdhcmUpIHsKLSAgICAgICAgLy8gTGFzdCBkcmF3biBpbiBzb2Z0d2FyZTsgdXBsb2Fk
IGV2ZXJ5dGhpbmcgd2UndmUgZHJhd24uCi0gICAgICAgIHVwbG9hZFNvZnR3YXJlVG9IYXJkd2Fy
ZShDb21wb3NpdGVDb3B5KTsKLSAgICB9IGVsc2UgaWYgKG1fYmFja2luZ1N0b3JlU3RhdGUgPT0g
TWl4ZWQpIHsKLSAgICAgICAgLy8gU3R1ZmYgaW4gc29mdHdhcmUvaGFyZHdhcmUsIGNvbXBvc2l0
ZSB0aGUgc29mdHdhcmUgc3R1ZmYgb24gdG9wIG9mCi0gICAgICAgIC8vIHRoZSBoYXJkd2FyZSBz
dHVmZi4KLSAgICAgICAgdXBsb2FkU29mdHdhcmVUb0hhcmR3YXJlKENvbXBvc2l0ZVNvdXJjZU92
ZXIpOwotICAgIH0KLSAgICBtX2JhY2tpbmdTdG9yZVN0YXRlID0gSGFyZHdhcmU7Ci19Ci0KLXZv
aWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c3luY1NvZnR3YXJlQ2FudmFzKCkgY29uc3QKLXsKLSAg
ICBpZiAobV9hY2NlbGVyYXRpb25Nb2RlID09IFNraWFHUFUpIHsKLSNpZiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKQotICAgICAgICBpZiAobV9ncHVDYW52YXMpCi0gICAgICAgICAgICBt
X2dwdUNhbnZhcy0+Y29udGV4dCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbmRpZgotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fYmFja2luZ1N0b3JlU3RhdGUgPT0gSGFy
ZHdhcmUpCi0gICAgICAgIHJlYWRiYWNrSGFyZHdhcmVUb1NvZnR3YXJlKCk7Ci0gICAgZWxzZSBp
ZiAobV9iYWNraW5nU3RvcmVTdGF0ZSA9PSBNaXhlZCkgewotICAgICAgICAvLyBIYXZlIHRvIGNv
bXBvc2l0ZSBvdXIgY3VycmVudGx5IHNvZnR3YXJlIGRyYXduIGRhdGEuLgotICAgICAgICB1cGxv
YWRTb2Z0d2FyZVRvSGFyZHdhcmUoQ29tcG9zaXRlU291cmNlT3Zlcik7Ci0gICAgICAgIC8vIHRo
ZW4gZG8gYSByZWFkYmFjay4KLSAgICAgICAgcmVhZGJhY2tIYXJkd2FyZVRvU29mdHdhcmUoKTsK
LSAgICAgICAgbV9iYWNraW5nU3RvcmVTdGF0ZSA9IFNvZnR3YXJlOwotICAgIH0KLSAgICBtX2Jh
Y2tpbmdTdG9yZVN0YXRlID0gU29mdHdhcmU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0U2tp
YTo6bWFya0RpcnR5UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChtX2FjY2Vs
ZXJhdGlvbk1vZGUgIT0gR1BVKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKG1fYmFj
a2luZ1N0b3JlU3RhdGUpIHsKLSAgICBjYXNlIFNvZnR3YXJlOgotICAgIGNhc2UgTWl4ZWQ6Ci0g
ICAgICAgIG1fc29mdHdhcmVEaXJ0eVJlY3QudW5pdGUocmVjdCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEhhcmR3YXJlOgotICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4
dFNraWE6OnVwbG9hZFNvZnR3YXJlVG9IYXJkd2FyZShDb21wb3NpdGVPcGVyYXRvciBvcCkgY29u
c3QKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIGNvbnN0IFNrQml0
bWFwJiBiaXRtYXAgPSBtX2NhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7
Ci0gICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKGJpdG1hcCk7Ci0gICAgU2hhcmVkR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQgPSBtX2dwdUNhbnZhcy0+Y29udGV4dCgpOwotICAgIGlmICghbV91
cGxvYWRUZXh0dXJlIHx8IG1fdXBsb2FkVGV4dHVyZS0+dGlsZXMoKS50b3RhbFNpemVYKCkgPCBi
aXRtYXAud2lkdGgoKSB8fCBtX3VwbG9hZFRleHR1cmUtPnRpbGVzKCkudG90YWxTaXplWSgpIDwg
Yml0bWFwLmhlaWdodCgpKQotICAgICAgICBtX3VwbG9hZFRleHR1cmUgPSBjb250ZXh0LT5jcmVh
dGVUZXh0dXJlKFRleHR1cmU6OkJHUkE4LCBiaXRtYXAud2lkdGgoKSwgYml0bWFwLmhlaWdodCgp
KTsKLQotICAgIG1fdXBsb2FkVGV4dHVyZS0+dXBkYXRlU3ViUmVjdChiaXRtYXAuZ2V0UGl4ZWxz
KCksIG1fc29mdHdhcmVEaXJ0eVJlY3QpOwotICAgIEFmZmluZVRyYW5zZm9ybSBpZGVudGl0eTsK
LSAgICBncHVDYW52YXMoKS0+ZHJhd1RleHR1cmVkUmVjdChtX3VwbG9hZFRleHR1cmUuZ2V0KCks
IG1fc29mdHdhcmVEaXJ0eVJlY3QsIG1fc29mdHdhcmVEaXJ0eVJlY3QsIGlkZW50aXR5LCAxLjAs
IENvbG9yU3BhY2VEZXZpY2VSR0IsIG9wLCBmYWxzZSk7Ci0gICAgLy8gQ2xlYXIgb3V0IHRoZSBy
ZWdpb24gb2YgdGhlIHNvZnR3YXJlIGNhbnZhcyB3ZSBqdXN0IHVwbG9hZGVkLgotICAgIG1fY2Fu
dmFzLT5zYXZlKCk7Ci0gICAgbV9jYW52YXMtPnJlc2V0TWF0cml4KCk7Ci0gICAgU2tSZWN0IGJv
dW5kcyA9IG1fc29mdHdhcmVEaXJ0eVJlY3Q7Ci0gICAgbV9jYW52YXMtPmNsaXBSZWN0KGJvdW5k
cywgU2tSZWdpb246OmtSZXBsYWNlX09wKTsKLSAgICBtX2NhbnZhcy0+ZHJhd0FSR0IoMCwgMCwg
MCwgMCwgU2tYZmVybW9kZTo6a0NsZWFyX01vZGUpOwotICAgIG1fY2FudmFzLT5yZXN0b3JlKCk7
Ci0gICAgbV9zb2Z0d2FyZURpcnR5UmVjdC5zZXRXaWR0aCgwKTsgLy8gQ2xlYXIgZGlydHkgcmVj
dC4KLSNlbmRpZgotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnJlYWRiYWNrSGFyZHdh
cmVUb1NvZnR3YXJlKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KQotICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX2NhbnZhcy0+Z2V0RGV2aWNlKCktPmFj
Y2Vzc0JpdG1hcCh0cnVlKTsKLSAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soYml0bWFwKTsKLSAg
ICBpbnQgd2lkdGggPSBiaXRtYXAud2lkdGgoKSwgaGVpZ2h0ID0gYml0bWFwLmhlaWdodCgpOwot
ICAgIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9ncHVDYW52YXMtPmNvbnRl
eHQoKTsKLSAgICBtX2dwdUNhbnZhcy0+YmluZEZyYW1lYnVmZmVyKCk7Ci0gICAgLy8gRmxpcHMg
dGhlIGltYWdlIHZlcnRpY2FsbHkuCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7ICsr
eSkgewotICAgICAgICB1aW50MzJfdCogcGl4ZWxzID0gYml0bWFwLmdldEFkZHIzMigwLCB5KTsK
LSAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzQkdSQSgpKQotICAgICAgICAgICAgY29udGV4
dC0+cmVhZFBpeGVscygwLCBoZWlnaHQgLSAxIC0geSwgd2lkdGgsIDEsIEV4dGVuc2lvbnMzRDo6
QkdSQV9FWFQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBwaXhlbHMpOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlYWRQaXhlbHMoMCwgaGVpZ2h0IC0g
MSAtIHksIHdpZHRoLCAxLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsIHBpeGVscyk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHdpZHRoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB1aW50MzJfdCBwaXhlbCA9IHBpeGVs
c1tpXTsKLSAgICAgICAgICAgICAgICAvLyBTd2l6emxlcyBmcm9tIFJHQkEgLT4gQkdSQS4KLSAg
ICAgICAgICAgICAgICBwaXhlbHNbaV0gPSAocGl4ZWwgJiAweEZGMDBGRjAwKSB8ICgocGl4ZWwg
JiAweDAwRkYwMDAwKSA+PiAxNikgfCAoKHBpeGVsICYgMHgwMDAwMDBGRikgPDwgMTYpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIG1fc29mdHdhcmVEaXJ0eVJlY3QudW5p
dGUoSW50UmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KSk7IC8vIE1hcmsgZXZlcnl0aGluZyBhcyBk
aXJ0eS4KLSNlbmRpZgorICAgIGlmIChtX2dwdUNvbnRleHQpCisgICAgICAgIG1fZ3B1Q29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0
Zm9ybUNvbnRleHRTa2lhLmgKaW5kZXggY2E0NTE5YTljMTVhZjc0MzNmZDMwZTY4ZDg2NDBhOGQx
MzY5NGM1Yi4uNGZlYTdlZGZjYzQxOWY5NDg1NjZkNDEzMGUxNDg1ZmUyZWUyZTY3MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRl
eHRTa2lhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0
Zm9ybUNvbnRleHRTa2lhLmgKQEAgLTQ3LDcgKzQ3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ZW51bSBDb21wb3NpdGVPcGVyYXRvcjsKIGNsYXNzIERyYXdpbmdCdWZmZXI7CiBjbGFzcyBHcmFw
aGljc0NvbnRleHQzRDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdQVTsKIGNsYXNzIFRleHR1cmU7
CiAKIC8vIFRoaXMgY2xhc3MgaG9sZHMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHN0YXRlIGZvciBH
cmFwaGljc0NvbnRleHQuIFdlIHB1dApAQCAtNzIsNyArNzEsNiBAQCBjbGFzcyBQbGF0Zm9ybUNv
bnRleHRTa2lhIHsKIHB1YmxpYzoKICAgICBlbnVtIEFjY2VsZXJhdGlvbk1vZGUgewogICAgICAg
ICBOb0FjY2VsZXJhdGlvbiwKLSAgICAgICAgR1BVLAogICAgICAgICBTa2lhR1BVCiAgICAgfTsK
IApAQCAtMTg1LDIxICsxODMsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5BY2NlbGVyYXRlKCkg
Y29uc3Q7CiAgICAgYm9vbCBjYW52YXNDbGlwQXBwbGllZCgpIGNvbnN0OwogICAgIEFjY2VsZXJh
dGlvbk1vZGUgYWNjZWxlcmF0aW9uTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0aW9u
TW9kZTsgfQotICAgIGJvb2wgdXNlR1BVKCkgY29uc3QgeyByZXR1cm4gbV9hY2NlbGVyYXRpb25N
b2RlID09IEdQVTsgfQogICAgIGJvb2wgdXNlU2tpYUdQVSgpIGNvbnN0IHsgcmV0dXJuIG1fYWNj
ZWxlcmF0aW9uTW9kZSA9PSBTa2lhR1BVOyB9Ci0gICAgdm9pZCBzZXRTaGFyZWRHcmFwaGljc0Nv
bnRleHQzRChTaGFyZWRHcmFwaGljc0NvbnRleHQzRCosIERyYXdpbmdCdWZmZXIqLCBjb25zdCBJ
bnRTaXplJik7Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICBHcmFwaGlj
c0NvbnRleHRHUFUqIGdwdUNhbnZhcygpIGNvbnN0IHsgcmV0dXJuIG1fZ3B1Q2FudmFzLmdldCgp
OyB9Ci0jZWxzZQotICAgIEdyYXBoaWNzQ29udGV4dEdQVSogZ3B1Q2FudmFzKCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQotI2VuZGlmCi0gICAgLy8gQ2FsbCB0aGVzZSBiZWZvcmUgbWFraW5nIGEgY2Fs
bCB0aGF0IG1hbmlwdWxhdGVzIHRoZSB1bmRlcmx5aW5nCi0gICAgLy8gU2tDYW52YXMgb3IgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R1BVCi0gICAgdm9pZCBwcmVwYXJlRm9yU29mdHdhcmVEcmF3
KCkgY29uc3Q7Ci0gICAgdm9pZCBwcmVwYXJlRm9ySGFyZHdhcmVEcmF3KCkgY29uc3Q7Ci0gICAg
Ly8gQ2FsbCB0byBmb3JjZSB0aGUgU2tDYW52YXMgdG8gY29udGFpbiBhbGwgcmVuZGVyaW5nIHJl
c3VsdHMuCi0gICAgdm9pZCBzeW5jU29mdHdhcmVDYW52YXMoKSBjb25zdDsKLSAgICB2b2lkIG1h
cmtEaXJ0eVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCk7CisgICAgdm9pZCBzZXRTaGFyZWRHcmFw
aGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRCosIERyYXdpbmdCdWZmZXIqLCBjb25zdCBJ
bnRTaXplJik7CisgICAgdm9pZCBtYWtlR3JDb250ZXh0Q3VycmVudCgpOwogCiBwcml2YXRlOgog
ICAgIC8vIFVzZWQgd2hlbiByZXN0b3JpbmcgYW5kIHRoZSBzdGF0ZSBoYXMgYW4gaW1hZ2UgY2xp
cC4gT25seSBzaG93cyB0aGUgcGl4ZWxzIGluCkBAIC0yMDcsOSArMTkzLDYgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIGFwcGx5Q2xpcEZyb21JbWFnZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBTa0Jp
dG1hcCYpOwogICAgIHZvaWQgYXBwbHlBbnRpQWxpYXNlZENsaXBQYXRocyhXVEY6OlZlY3RvcjxT
a1BhdGg+JiBwYXRocyk7CiAKLSAgICB2b2lkIHVwbG9hZFNvZnR3YXJlVG9IYXJkd2FyZShDb21w
b3NpdGVPcGVyYXRvcikgY29uc3Q7Ci0gICAgdm9pZCByZWFkYmFja0hhcmR3YXJlVG9Tb2Z0d2Fy
ZSgpIGNvbnN0OwotCiAgICAgLy8gRGVmaW5lcyBkcmF3aW5nIHN0eWxlLgogICAgIHN0cnVjdCBT
dGF0ZTsKIApAQCAtMjMwLDEyICsyMTMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wcmludGlu
ZzsKICAgICBib29sIG1fZHJhd2luZ1RvSW1hZ2VCdWZmZXI7CiAgICAgQWNjZWxlcmF0aW9uTW9k
ZSBtX2FjY2VsZXJhdGlvbk1vZGU7Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykK
LSAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0R1BVPiBtX2dwdUNhbnZhczsKLSAgICBtdXRhYmxl
IFJlZlB0cjxUZXh0dXJlPiBtX3VwbG9hZFRleHR1cmU7Ci0jZW5kaWYKLSAgICBtdXRhYmxlIGVu
dW0geyBOb25lLCBTb2Z0d2FyZSwgTWl4ZWQsIEhhcmR3YXJlIH0gbV9iYWNraW5nU3RvcmVTdGF0
ZTsKLSAgICBtdXRhYmxlIEludFJlY3QgbV9zb2Z0d2FyZURpcnR5UmVjdDsKKyAgICBHcmFwaGlj
c0NvbnRleHQzRCogbV9ncHVDb250ZXh0OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwppbmRleCA5MDgxMDNhNGQ4M2Y2MDI1NjhlNjU3MGRjNDY5ZmIyOTE4YWNlZjFkLi4xNTRmM2U5
M2EwMjg4NmI4NDY3NzE4ODkzMmI3YWEwZWFkOGUzNWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDIyIEBACisyMDExLTA3LTA4ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVz
ckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBEZWxldGUgdGhlIHVudXNlZCBs
ZWdhY3kgYWNjZWxlcmF0ZWQgY2FudmFzIDJkIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MjE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkcyBhIHdheSB0byBzdGFzaCBhIEdyQ29udGV4dCog
b24gYSBHcmFwaGljc0NvbnRleHQzRC4gUHJldmlvdXNseSwgdGhpcyB3YXMgaGFuZGxlZCBieQor
ICAgICAgICBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCwgYnV0IHdlIGRvbid0IG5lZWQgdGhhdCBj
bGFzcyBhbnkgbW9yZS4gIFRoaXMgaXMgdXNlZCBvbmx5IGZvciB0aGUgc2hhcmVkCisgICAgICAg
IEdyYXBoaWNzQ29udGV4dDNEIHN0YXNoZWQgb24gdGhlIFBhZ2UgYW5kIHNoYXJlZCBieSBhbGwg
YWNjZWxlcmF0ZWQgY2FudmFzZXMgd2l0aGluIHRoZSBQYWdlLCBmb3IgV2ViR0wgYW5kCisgICAg
ICAgIGNvbXBvc2l0b3IgY29udGV4dHMgdGhlIEdyQ29udGV4dCBpcyBuZXZlciBzZXQuCisKKyAg
ICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVybmFs
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6On5HcmFwaGlj
c0NvbnRleHQzREludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OmdyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Z3JDb250ZXh0KToKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5o
OgorCiAyMDExLTA3LTA4ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgQ2hlY2sgYWN0aXZlRG9jdW1lbnRMb2FkZXIoKSBpbgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAppbmRl
eCBmMTJjZmFmZDU5MzNmYjRlN2M1ZTAyYjc4ODBjZGM3MDkwZTdmMmYxLi40MWE0MjgwMGVkMmIz
NDljMGZlOWQ4YWY1NDRkMjc5OWM5ZGQyZmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcApAQCAtNjEsNiAr
NjEsMTAgQEAKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dJbWFnZS5oPgogI2VuZGlmCiAKKyNp
ZiBVU0UoU0tJQSkKKyNpbmNsdWRlICJHckNvbnRleHQuaCIKKyNlbmRpZgorCiAvLyBUaGVyZSBh
cmUgdHdvIGxldmVscyBvZiBkZWxlZ2F0aW9uIGluIHRoaXMgZmlsZToKIC8vCiAvLyAgIDEuIEdy
YXBoaWNzQ29udGV4dDNEIGRlbGVnYXRlcyB0byBHcmFwaGljc0NvbnRleHQzREludGVybmFsLiBU
aGlzIGlzIGRvbmUKQEAgLTg0LDYgKzg4LDcgQEAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpCiAgICAgLCBtX2luaXRpYWxpemVkQXZhaWxhYmxl
RXh0ZW5zaW9ucyhmYWxzZSkKICAgICAsIG1fbGF5ZXJDb21wb3NpdGVkKGZhbHNlKQogI2lmIFVT
RShTS0lBKQorICAgICwgbV9nckNvbnRleHQoMCkKICNlbGlmIFVTRShDRykKICAgICAsIG1fcmVu
ZGVyT3V0cHV0KDApCiAjZWxzZQpAQCAtOTgsNiArMTAzLDEyIEBAIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6On5HcmFwaGljc0NvbnRleHQzREludGVybmFsKCkKICAgICBpZiAobV9yZW5kZXJP
dXRwdXQpCiAgICAgICAgIGRlbGV0ZVtdIG1fcmVuZGVyT3V0cHV0OwogI2VuZGlmCisjaWYgVVNF
KFNLSUEpCisgICAgaWYgKG1fZ3JDb250ZXh0KSB7CisgICAgICAgIG1fZ3JDb250ZXh0LT5jb250
ZXh0RGVzdHJveWVkKCk7CisgICAgICAgIEdyU2FmZVVucmVmKG1fZ3JDb250ZXh0KTsKKyAgICB9
CisjZW5kaWYKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppbml0aWFsaXpl
KEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2lu
ZG93LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQpAQCAtMTQ2LDYgKzE1NywyMyBA
QCBQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBsYXRmb3JtVGV4
dHVyZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW1wbC0+Z2V0UGxhdGZvcm1UZXh0dXJlSWQoKTsK
IH0KIAorI2lmIFVTRShTS0lBKQorR3JDb250ZXh0KiBHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpnckNvbnRleHQoKQoreworICAgIC8vIExpbWl0IHRoZSBudW1iZXIgb2YgdGV4dHVyZXMgd2Ug
aG9sZCBpbiB0aGUgYml0bWFwLT50ZXh0dXJlIGNhY2hlLgorICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4VGV4dHVyZUNhY2hlQ291bnQgPSA1MTI7CisgICAgLy8gTGltaXQgdGhlIGJ5dGVzIGFsbG9j
YXRlZCB0b3dhcmQgdGV4dHVyZXMgaW4gdGhlIGJpdG1hcC0+dGV4dHVyZSBjYWNoZS4KKyAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90IG1heFRleHR1cmVDYWNoZUJ5dGVzID0gNTAgKiAxMDI0ICogMTAy
NDsKKworICAgIGlmICghbV9nckNvbnRleHQpIHsKKyAgICAgICAgbV9nckNvbnRleHQgPSBHckNv
bnRleHQ6OkNyZWF0ZUdMU2hhZGVyQ29udGV4dCgpOworICAgICAgICBpZiAobV9nckNvbnRleHQp
CisgICAgICAgICAgICBtX2dyQ29udGV4dC0+c2V0VGV4dHVyZUNhY2hlTGltaXRzKG1heFRleHR1
cmVDYWNoZUNvdW50LCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyk7CisgICAgfQorICAgIHJldHVybiBt
X2dyQ29udGV4dDsKK30KKyNlbmRpZgorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OnByZXBhcmVUZXh0dXJlKCkKIHsKICAgICBtX2ltcGwtPnByZXBhcmVUZXh0dXJlKCk7CkBAIC05
NjIsNiArOTkwLDEzIEBAIFBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRm
b3JtVGV4dHVyZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW50ZXJuYWwtPnBsYXRmb3JtVGV4dHVy
ZSgpOwogfQogCisjaWYgVVNFKFNLSUEpCitHckNvbnRleHQqIEdyYXBoaWNzQ29udGV4dDNEOjpn
ckNvbnRleHQoKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5nckNvbnRleHQoKTsKK30KKyNl
bmRpZgorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCiB7CiAgICAg
cmV0dXJuIG1faW50ZXJuYWwtPnByZXBhcmVUZXh0dXJlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmggYi9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmgKaW5kZXggODE0
ZGY0ZmJhYzZkOTJiNDEwMmEwYWI0MDU2YTkxZjllZGMwNDE3Ni4uY2Y2YWIwM2Y5NjAwMTk3MDgx
NDkzMTlmZTgyMGIxM2RjZjU2ODhkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaApAQCAtMzQsNiArMzQsMTAgQEAK
ICNpbmNsdWRlICJTa0JpdG1hcC5oIgogI2VuZGlmCiAKKyNpZiBVU0UoU0tJQSkKK2NsYXNzIEdy
Q29udGV4dDsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYkdyYXBoaWNz
Q29udGV4dDNEOwogY2xhc3MgV2ViVmlld0ltcGw7CkBAIC02Miw2ICs2Niw5IEBAIHB1YmxpYzoK
IAogICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQz
RCgpIGNvbnN0OwogICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Q7
CisjaWYgVVNFKFNLSUEpCisgICAgR3JDb250ZXh0KiBnckNvbnRleHQoKTsKKyNlbmRpZgogCiAg
ICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIApAQCAtMzA1LDYgKzMxMiw4IEBAIHByaXZh
dGU6CiAgICAgLy8gZnJhbWUgYnVmZmVyIGludG8uIFRoaXMgc2VlbXMgdG8gaGFwcGVuIHdoZW4g
Q1NTIHN0eWxlcyBhcmUKICAgICAvLyB1c2VkIHRvIHJlc2l6ZSB0aGUgQ2FudmFzLgogICAgIFNr
Qml0bWFwIG1fcmVzaXppbmdCaXRtYXA7CisKKyAgICBHckNvbnRleHQqIG1fZ3JDb250ZXh0Owog
I2VuZGlmCiAKICNpZiBVU0UoQ0cpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100195</attachid>
            <date>2011-07-08 18:01:31 -0700</date>
            <delta_ts>2011-07-12 07:37:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-64214-20110708180130.patch</filename>
            <type>text/plain</type>
            <size>179338</size>
            <attacher name="James Robinson">jamesr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA2NzEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3ZWM2MmFmODdlYzQ5Y2Rk
OGM3ZmJkYjcyYzUzNDc1MjY1M2UwMGQzLi5kNDA2NTlhNDY4NmIwNjQ1Nzk0MTU0NTlhNDBlNmNk
ZTAzNzk4MjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTAyIEBACisyMDExLTA3LTA4ICBKYW1l
cyBSb2JpbnNvbiAgPGphbWVzckBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBE
ZWxldGUgdGhlIHVudXNlZCBsZWdhY3kgYWNjZWxlcmF0ZWQgY2FudmFzIDJkIGNvZGUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY0MjE0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyByZW1vdmVzIHRo
ZSBsZWdhY3kgYWNjZWxlcmF0ZWQgY2FudmFzIDJkIHBhdGggYW5kIHN1cHBvcnQgbG9naWMgc2lu
Y2Ugd2UgKGNocm9taXVtKSBhcmUgbm8gbG9uZ2VyIHVzaW5nCisgICAgICAgIHRoaXMgY29kZXBh
dGggYW5kIGl0IHNlZW1zIGNsZWFyIHRoYXQgbm8gb3RoZXIgcG9ydCBpcyBpbnRlcmVzdGVkLgor
CisgICAgICAgIFJlZmFjdG9yaW5nIGFuZCByZW1vdmluZyB1bnVzZWQgY29kZSwgc28gbm8gbmV3
IHRlc3RzLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIFdlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRHbG9iYWxDb21wb3NpdGVPcGVyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkaWREcmF3KToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaDoKKyAgICAgICAgKiBs
b2FkZXIvRW1wdHlDbGllbnRzLmg6CisgICAgICAgICogcGFnZS9DaHJvbWVDbGllbnQuaDoKKyAg
ICAgICAgKiBwYWdlL1BhZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QpOgorICAgICAgICAqIHBhZ2UvUGFnZS5oOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c3luY1NvZnR3YXJlQ2FudmFzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmF3
aW5nQnVmZmVyOjpzZXRHckNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZvbnRMaW51eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhz
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0xheWVyU29ydGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBvaW50SW5UcmlhbmdsZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0JpY3ViaWNTaGFkZXIuY3BwOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9CaWN1YmljU2hhZGVyLmg6IFJlbW92ZWQuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0NvbnZvbHV0aW9uU2hhZGVyLmNwcDogUmVtb3ZlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ29udm9sdXRpb25TaGFkZXIuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR3JhcGhpY3NDb250ZXh0R1BV
LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR3JhcGhpY3ND
b250ZXh0R1BVLmg6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1No
YXJlZEdyYXBoaWNzQ29udGV4dDNELmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU29saWRGaWxsU2hhZGVyLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU29saWRGaWxsU2hhZGVyLmg6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleFNoYWRlci5jcHA6IFJlbW92ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleFNoYWRlci5oOiBSZW1vdmVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0
Q2xpcCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsZWFyUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmNsaXApOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpjYW52YXNDbGlwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6Y2xpcE91dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmNsaXBQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RN
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q1RNKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24pOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpkcmF3TGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OmRyYXdMaW5lRm9yVGV4dENoZWNraW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmVGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd1JlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpmaWxs
UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJvdW5kZWRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2NhbGUpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtQ29tcG9zaXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVNoYWRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQ6OnN0cm9rZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpzdHJva2VSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6cm90YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Qp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzeW5jU29mdHdhcmVDYW52YXMp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpjb3B5SW1hZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6SW1hZ2VCdWZmZXI6OmRyYXcpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6
OmdldFVubXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
cjo6Z2V0UHJlbXVsdGlwbGllZEltYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1
ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdl
QnVmZmVyOjpwdXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFn
ZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6
ZHJhdyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFnZVNraWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6TmF0aXZlSW1hZ2VTa2lhOjp+TmF0aXZlSW1hZ2VTa2lh
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6UGxhdGZvcm1Db250
ZXh0U2tpYSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjp+UGxhdGZv
cm1Db250ZXh0U2tpYSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpz
ZXRTaGFyZWRHcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNv
bnRleHRTa2lhOjptYWtlR3JDb250ZXh0Q3VycmVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmg6CisKIDIwMTEtMDctMDggIEFkYW0gQmFy
dGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91
dCByOTA2NjIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggMWQ0NjEwMWEwZjg0OGI5YzkxMTVhNTBiZjUw
NmExMzliZTExYTA2ZC4uODkwNjRiMWE2MTc5M2U5NDI0ZWMxMDAxYTZjMjBkOTc0YTMxZDk1OSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUuZ3lwaQpAQCAtNDI0NCw0MyArNDI0NCwxMCBAQAogICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFGcmVlVHlwZS5jcHAnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0dseXBoUGFnZVRyZWVOb2Rl
RnJlZVR5cGUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9T
aW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0JpY3ViaWNTaGFkZXIuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvQmljdWJpY1NoYWRlci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9n
cHUvQ29udm9sdXRpb25TaGFkZXIuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvQ29udm9sdXRpb25TaGFkZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0RyYXdpbmdCdWZmZXIuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvRHJhd2luZ0J1ZmZlci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9n
cHUvR3JhcGhpY3NDb250ZXh0R1BVLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0dyYXBoaWNzQ29udGV4dEdQVS5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvTG9vcEJsaW5uQ2xhc3NpZmllci5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5DbGFzc2lmaWVyLmgnLAotICAgICAgICAgICAgJ3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5Db25zdGFudHMuaCcsCi0gICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9yLmNwcCcsCi0gICAg
ICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlubkxvY2FsVHJpYW5ndWxhdG9y
LmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5NYXRoVXRp
bHMuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uTWF0
aFV0aWxzLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5Q
YXRoQ2FjaGUuY3BwJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJs
aW5uUGF0aENhY2hlLmgnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29w
Qmxpbm5QYXRoUHJvY2Vzc29yLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0xvb3BCbGlublBhdGhQcm9jZXNzb3IuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0xvb3BCbGlublNoYWRlci5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9Mb29wQmxpbm5TaGFkZXIuaCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0xvb3BCbGlublNvbGlkRmlsbFNoYWRlci5jcHAnLAotICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9Mb29wQmxpbm5Tb2xpZEZpbGxTaGFkZXIuaCcsCi0gICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0xvb3BCbGlublRleHR1cmVDb29yZHMuY3BwJywK
LSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvTG9vcEJsaW5uVGV4dHVyZUNvb3Jk
cy5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvUE9EQXJlbmEuaCcsCi0g
ICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1BPREludGVydmFsLmgnLAotICAgICAg
ICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9QT0RJbnRlcnZhbFRyZWUuaCcsCi0gICAgICAg
ICAgICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1BPRFJlZEJsYWNrVHJlZS5oJywKICAgICAgICAg
ICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhZGVyLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L1NoYWRlci5oJywKLSAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwJywKLSAgICAgICAgICAgICdwbGF0
Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCcsCi0gICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NvbGlkRmlsbFNoYWRlci5jcHAnLAotICAgICAgICAg
ICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Tb2xpZEZpbGxTaGFkZXIuaCcsCi0gICAgICAgICAg
ICAncGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleFNoYWRlci5jcHAnLAotICAgICAgICAgICAgJ3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9UZXhTaGFkZXIuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L1RleHR1cmUuY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvVGV4dHVyZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGls
aW5nRGF0YS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCmluZGV4IDFlNmExYzA0OTVlYTJjMjg5ODc5YzIxNWFlYTA1MzIxMzNlMjky
ZDAuLmE4YTFlMzU1NzBjMjBmMzcxYzUxZjA0MGEwM2VhYjZhMzEzMzFmMDAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEwODgs
MTggKzEwODgsOCBAQAogCQk0OTgzOTE1OTBGMUU3NzY5MDBDMjM3ODIgLyogV2ViS2l0Q1NTTWF0
cml4LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTgz
OTE1NjBGMUU3NzY5MDBDMjM3ODIgLyogV2ViS2l0Q1NTTWF0cml4LmggKi87IH07CiAJCTQ5ODc3
MERCMTI0MkM1MzUwMDIyMjZCQSAvKiBEcmF3aW5nQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODc3MEMyMTI0MkM1MzUwMDIyMjZCQSAv
KiBEcmF3aW5nQnVmZmVyLmNwcCAqLzsgfTsKIAkJNDk4NzcwREMxMjQyQzUzNTAwMjIyNkJBIC8q
IERyYXdpbmdCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ5ODc3MEMzMTI0MkM1MzUwMDIyMjZCQSAvKiBEcmF3aW5nQnVmZmVyLmggKi87IH07
Ci0JCTQ5ODc3MEU0MTI0MkM1MzUwMDIyMjZCQSAvKiBQT0RBcmVuYS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4NzcwQ0IxMjQyQzUzNTAwMjIyNkJB
IC8qIFBPREFyZW5hLmggKi87IH07Ci0JCTQ5ODc3MEU1MTI0MkM1MzUwMDIyMjZCQSAvKiBQT0RJ
bnRlcnZhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NDk4NzcwQ0MxMjQyQzUzNTAwMjIyNkJBIC8qIFBPREludGVydmFsLmggKi87IH07Ci0JCTQ5ODc3
MEU2MTI0MkM1MzUwMDIyMjZCQSAvKiBQT0RJbnRlcnZhbFRyZWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODc3MENEMTI0MkM1MzUwMDIyMjZCQSAv
KiBQT0RJbnRlcnZhbFRyZWUuaCAqLzsgfTsKLQkJNDk4NzcwRTcxMjQyQzUzNTAwMjIyNkJBIC8q
IFBPRFJlZEJsYWNrVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDk4NzcwQ0UxMjQyQzUzNTAwMjIyNkJBIC8qIFBPRFJlZEJsYWNrVHJlZS5oICov
OyB9OwogCQk0OTg3NzBFODEyNDJDNTM1MDAyMjI2QkEgLyogU2hhZGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODc3MENGMTI0MkM1MzUwMDIy
MjZCQSAvKiBTaGFkZXIuY3BwICovOyB9OwogCQk0OTg3NzBFOTEyNDJDNTM1MDAyMjI2QkEgLyog
U2hhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
OTg3NzBEMDEyNDJDNTM1MDAyMjI2QkEgLyogU2hhZGVyLmggKi87IH07Ci0JCTQ5ODc3MEVBMTI0
MkM1MzUwMDIyMjZCQSAvKiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTg3NzBEMTEyNDJDNTM1MDAyMjI2
QkEgLyogU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwICovOyB9OwotCQk0OTg3NzBFQjEyNDJD
NTM1MDAyMjI2QkEgLyogU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODc3MEQyMTI0MkM1MzUwMDIyMjZCQSAv
KiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oICovOyB9OwotCQk0OTg3NzBFQzEyNDJDNTM1MDAy
MjI2QkEgLyogU29saWRGaWxsU2hhZGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5ODc3MEQzMTI0MkM1MzUwMDIyMjZCQSAvKiBTb2xpZEZpbGxT
aGFkZXIuY3BwICovOyB9OwotCQk0OTg3NzBFRDEyNDJDNTM1MDAyMjI2QkEgLyogU29saWRGaWxs
U2hhZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
OTg3NzBENDEyNDJDNTM1MDAyMjI2QkEgLyogU29saWRGaWxsU2hhZGVyLmggKi87IH07Ci0JCTQ5
ODc3MEVFMTI0MkM1MzUwMDIyMjZCQSAvKiBUZXhTaGFkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4NzcwRDUxMjQyQzUzNTAwMjIyNkJBIC8q
IFRleFNoYWRlci5jcHAgKi87IH07Ci0JCTQ5ODc3MEVGMTI0MkM1MzUwMDIyMjZCQSAvKiBUZXhT
aGFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
ODc3MEQ2MTI0MkM1MzUwMDIyMjZCQSAvKiBUZXhTaGFkZXIuaCAqLzsgfTsKIAkJNDk4NzcwRjAx
MjQyQzUzNTAwMjIyNkJBIC8qIFRleHR1cmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4NzcwRDcxMjQyQzUzNTAwMjIyNkJBIC8qIFRleHR1cmUu
Y3BwICovOyB9OwogCQk0OTg3NzBGMTEyNDJDNTM1MDAyMjI2QkEgLyogVGV4dHVyZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk4NzcwRDgxMjQyQzUz
NTAwMjIyNkJBIC8qIFRleHR1cmUuaCAqLzsgfTsKIAkJNDk4NzcwRjIxMjQyQzUzNTAwMjIyNkJB
IC8qIFRpbGluZ0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNDk4NzcwRDkxMjQyQzUzNTAwMjIyNkJBIC8qIFRpbGluZ0RhdGEuY3BwICovOyB9
OwpAQCAtMTExMywxMyArMTEwMyw2IEBACiAJCTQ5QTg1QjZDMTM4RDU3M0EwMEVDQjdCMyAvKiBT
dHJlYW1FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlBODVCNjkxMzhENTczQTAwRUNCN0IzIC8qIFN0cmVhbUV2ZW50LmggKi87IH07CiAJCTQ5
QTg1Qjc3MTM4RDU4RUUwMEVDQjdCMyAvKiBKU1N0cmVhbUV2ZW50LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QTg1Qjc1MTM4RDU4RUUwMEVDQjdC
MyAvKiBKU1N0cmVhbUV2ZW50LmNwcCAqLzsgfTsKIAkJNDlBODVCNzgxMzhENThFRTAwRUNCN0Iz
IC8qIEpTU3RyZWFtRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5QTg1Qjc2MTM4RDU4RUUwMEVDQjdCMyAvKiBKU1N0cmVhbUV2ZW50LmggKi87
IH07Ci0JCTQ5QjY5RTVFMTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxpbm5DbGFzc2lmaWVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QjY5RTU1
MTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxpbm5DbGFzc2lmaWVyLmNwcCAqLzsgfTsKLQkJNDlC
NjlFNUYxMjU0RkVFRDAwN0Q1N0VCIC8qIExvb3BCbGlubkNsYXNzaWZpZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QjY5RTU2MTI1NEZFRUQwMDdE
NTdFQiAvKiBMb29wQmxpbm5DbGFzc2lmaWVyLmggKi87IH07Ci0JCTQ5QjY5RTYwMTI1NEZFRUQw
MDdENTdFQiAvKiBMb29wQmxpbm5Db25zdGFudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QjY5RTU3MTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxp
bm5Db25zdGFudHMuaCAqLzsgfTsKLQkJNDlCNjlFNjMxMjU0RkVFRDAwN0Q1N0VCIC8qIExvb3BC
bGlubk1hdGhVdGlscy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0OUI2OUU1QTEyNTRGRUVEMDA3RDU3RUIgLyogTG9vcEJsaW5uTWF0aFV0aWxzLmNw
cCAqLzsgfTsKLQkJNDlCNjlFNjQxMjU0RkVFRDAwN0Q1N0VCIC8qIExvb3BCbGlubk1hdGhVdGls
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlCNjlF
NUIxMjU0RkVFRDAwN0Q1N0VCIC8qIExvb3BCbGlubk1hdGhVdGlscy5oICovOyB9OwotCQk0OUI2
OUU2NTEyNTRGRUVEMDA3RDU3RUIgLyogTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUI2OUU1QzEyNTRGRUVE
MDA3RDU3RUIgLyogTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5jcHAgKi87IH07Ci0JCTQ5QjY5RTY2
MTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxpbm5UZXh0dXJlQ29vcmRzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUI2OUU1RDEyNTRGRUVEMDA3RDU3
RUIgLyogTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5oICovOyB9OwogCQk0OUM3Qjk5MzEwNDJEMkQz
MDAwOUQ0NDcgLyogSlNXZWJHTEJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4MDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEJ1
ZmZlci5jcHAgKi87IH07CiAJCTQ5QzdCOTk0MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVm
ZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3
Qjk4MTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEJ1ZmZlci5oICovOyB9OwogCQk0OUM3Qjk5
NTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNJbnQ4QXJyYXkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODIxMDQyRDJEMzAwMDlENDQ3IC8qIEpT
SW50OEFycmF5LmNwcCAqLzsgfTsKQEAgLTc1OTMsMTggKzc1NzYsOCBAQAogCQk0OTgzOTE1NzBG
MUU3NzY5MDBDMjM3ODIgLyogV2ViS2l0Q1NTTWF0cml4LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBXZWJLaXRDU1NNYXRyaXguaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
OTg3NzBDMjEyNDJDNTM1MDAyMjI2QkEgLyogRHJhd2luZ0J1ZmZlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBEcmF3aW5nQnVmZmVyLmNwcDsgcGF0aCA9IGdwdS9E
cmF3aW5nQnVmZmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDk4NzcwQzMx
MjQyQzUzNTAwMjIyNkJBIC8qIERyYXdpbmdCdWZmZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gRHJhd2luZ0J1ZmZlci5oOyBwYXRoID0gZ3B1L0RyYXdpbmdCdWZmZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDk4NzcwQ0IxMjQyQzUzNTAwMjIyNkJBIC8q
IFBPREFyZW5hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFBPREFyZW5hLmg7
IHBhdGggPSBncHUvUE9EQXJlbmEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDk4
NzcwQ0MxMjQyQzUzNTAwMjIyNkJBIC8qIFBPREludGVydmFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFBPREludGVydmFsLmg7IHBhdGggPSBncHUvUE9ESW50ZXJ2YWwuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDk4NzcwQ0QxMjQyQzUzNTAwMjIyNkJBIC8q
IFBPREludGVydmFsVHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQT0RJ
bnRlcnZhbFRyZWUuaDsgcGF0aCA9IGdwdS9QT0RJbnRlcnZhbFRyZWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNDk4NzcwQ0UxMjQyQzUzNTAwMjIyNkJBIC8qIFBPRFJlZEJsYWNr
VHJlZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQT0RSZWRCbGFja1RyZWUu
aDsgcGF0aCA9IGdwdS9QT0RSZWRCbGFja1RyZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDk4NzcwQ0YxMjQyQzUzNTAwMjIyNkJBIC8qIFNoYWRlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTaGFkZXIuY3BwOyBwYXRoID0gZ3B1L1NoYWRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5ODc3MEQwMTI0MkM1MzUwMDIyMjZC
QSAvKiBTaGFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2hhZGVyLmg7
IHBhdGggPSBncHUvU2hhZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5ODc3
MEQxMTI0MkM1MzUwMDIyMjZCQSAvKiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5j
cHA7IHBhdGggPSBncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk0OTg3NzBEMjEyNDJDNTM1MDAyMjI2QkEgLyogU2hhcmVkR3JhcGhp
Y3NDb250ZXh0M0QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0QuaDsgcGF0aCA9IGdwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OTg3NzBEMzEyNDJDNTM1MDAyMjI2QkEgLyog
U29saWRGaWxsU2hhZGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IFNvbGlkRmlsbFNoYWRlci5jcHA7IHBhdGggPSBncHUvU29saWRGaWxsU2hhZGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDk4NzcwRDQxMjQyQzUzNTAwMjIyNkJBIC8qIFNv
bGlkRmlsbFNoYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBTb2xpZEZp
bGxTaGFkZXIuaDsgcGF0aCA9IGdwdS9Tb2xpZEZpbGxTaGFkZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJNDk4NzcwRDUxMjQyQzUzNTAwMjIyNkJBIC8qIFRleFNoYWRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBUZXhTaGFkZXIuY3BwOyBwYXRo
ID0gZ3B1L1RleFNoYWRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5ODc3
MEQ2MTI0MkM1MzUwMDIyMjZCQSAvKiBUZXhTaGFkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gVGV4U2hhZGVyLmg7IHBhdGggPSBncHUvVGV4U2hhZGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5ODc3MEQ3MTI0MkM1MzUwMDIyMjZCQSAvKiBUZXh0dXJl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFRleHR1cmUuY3BwOyBw
YXRoID0gZ3B1L1RleHR1cmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OTg3
NzBEODEyNDJDNTM1MDAyMjI2QkEgLyogVGV4dHVyZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBUZXh0dXJlLmg7IHBhdGggPSBncHUvVGV4dHVyZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0OTg3NzBEOTEyNDJDNTM1MDAyMjI2QkEgLyogVGlsaW5nRGF0YS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBUaWxpbmdEYXRhLmNwcDsg
cGF0aCA9IGdwdS9UaWxpbmdEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTc2MTksMTMgKzc1OTIsNiBAQAogCQk0OUE4NUI2QTEzOEQ1NzNBMDBFQ0I3QjMgLyogU3RyZWFt
RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFN0cmVhbUV2ZW50LmlkbDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlBODVCNzUxMzhENThFRTAwRUNCN0IzIC8qIEpTU3Ry
ZWFtRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTdHJl
YW1FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QTg1Qjc2MTM4RDU4
RUUwMEVDQjdCMyAvKiBKU1N0cmVhbUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEpTU3RyZWFtRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlC
NjlFNTUxMjU0RkVFRDAwN0Q1N0VCIC8qIExvb3BCbGlubkNsYXNzaWZpZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTG9vcEJsaW5uQ2xhc3NpZmllci5jcHA7IHBh
dGggPSBncHUvTG9vcEJsaW5uQ2xhc3NpZmllci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTQ5QjY5RTU2MTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxpbm5DbGFzc2lmaWVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExvb3BCbGlubkNsYXNzaWZpZXIuaDsg
cGF0aCA9IGdwdS9Mb29wQmxpbm5DbGFzc2lmaWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTQ5QjY5RTU3MTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxpbm5Db25zdGFudHMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTG9vcEJsaW5uQ29uc3RhbnRzLmg7IHBh
dGggPSBncHUvTG9vcEJsaW5uQ29uc3RhbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQ5QjY5RTVBMTI1NEZFRUQwMDdENTdFQiAvKiBMb29wQmxpbm5NYXRoVXRpbHMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gTG9vcEJsaW5uTWF0aFV0aWxzLmNw
cDsgcGF0aCA9IGdwdS9Mb29wQmxpbm5NYXRoVXRpbHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQk0OUI2OUU1QjEyNTRGRUVEMDA3RDU3RUIgLyogTG9vcEJsaW5uTWF0aFV0aWxz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExvb3BCbGlubk1hdGhVdGlscy5o
OyBwYXRoID0gZ3B1L0xvb3BCbGlubk1hdGhVdGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQk0OUI2OUU1QzEyNTRGRUVEMDA3RDU3RUIgLyogTG9vcEJsaW5uVGV4dHVyZUNvb3Jk
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBMb29wQmxpbm5UZXh0
dXJlQ29vcmRzLmNwcDsgcGF0aCA9IGdwdS9Mb29wQmxpbm5UZXh0dXJlQ29vcmRzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlCNjlFNUQxMjU0RkVFRDAwN0Q1N0VCIC8qIExv
b3BCbGlublRleHR1cmVDb29yZHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
TG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5oOyBwYXRoID0gZ3B1L0xvb3BCbGlublRleHR1cmVDb29y
ZHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlDN0I5ODAxMDQyRDJEMzAwMDlE
NDQ3IC8qIEpTV2ViR0xCdWZmZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSlNXZWJHTEJ1ZmZlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5
QzdCOTgxMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xCdWZmZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNDlDN0I5ODIxMDQyRDJEMzAwMDlENDQ3IC8qIEpTSW50OEFycmF5LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSW50OEFycmF5LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzODgyLDI1ICsxMzg0OCw4IEBACiAJCQkJNDk4Nzcx
MTYxMjQyQ0Q3RjAwMjIyNkJBIC8qIG1hYyAqLywKIAkJCQk0OTg3NzBDMjEyNDJDNTM1MDAyMjI2
QkEgLyogRHJhd2luZ0J1ZmZlci5jcHAgKi8sCiAJCQkJNDk4NzcwQzMxMjQyQzUzNTAwMjIyNkJB
IC8qIERyYXdpbmdCdWZmZXIuaCAqLywKLQkJCQk0OUI2OUU1NTEyNTRGRUVEMDA3RDU3RUIgLyog
TG9vcEJsaW5uQ2xhc3NpZmllci5jcHAgKi8sCi0JCQkJNDlCNjlFNTYxMjU0RkVFRDAwN0Q1N0VC
IC8qIExvb3BCbGlubkNsYXNzaWZpZXIuaCAqLywKLQkJCQk0OUI2OUU1NzEyNTRGRUVEMDA3RDU3
RUIgLyogTG9vcEJsaW5uQ29uc3RhbnRzLmggKi8sCi0JCQkJNDlCNjlFNUExMjU0RkVFRDAwN0Q1
N0VCIC8qIExvb3BCbGlubk1hdGhVdGlscy5jcHAgKi8sCi0JCQkJNDlCNjlFNUIxMjU0RkVFRDAw
N0Q1N0VCIC8qIExvb3BCbGlubk1hdGhVdGlscy5oICovLAotCQkJCTQ5QjY5RTVDMTI1NEZFRUQw
MDdENTdFQiAvKiBMb29wQmxpbm5UZXh0dXJlQ29vcmRzLmNwcCAqLywKLQkJCQk0OUI2OUU1RDEy
NTRGRUVEMDA3RDU3RUIgLyogTG9vcEJsaW5uVGV4dHVyZUNvb3Jkcy5oICovLAotCQkJCTQ5ODc3
MENCMTI0MkM1MzUwMDIyMjZCQSAvKiBQT0RBcmVuYS5oICovLAotCQkJCTQ5ODc3MENDMTI0MkM1
MzUwMDIyMjZCQSAvKiBQT0RJbnRlcnZhbC5oICovLAotCQkJCTQ5ODc3MENEMTI0MkM1MzUwMDIy
MjZCQSAvKiBQT0RJbnRlcnZhbFRyZWUuaCAqLywKLQkJCQk0OTg3NzBDRTEyNDJDNTM1MDAyMjI2
QkEgLyogUE9EUmVkQmxhY2tUcmVlLmggKi8sCiAJCQkJNDk4NzcwQ0YxMjQyQzUzNTAwMjIyNkJB
IC8qIFNoYWRlci5jcHAgKi8sCiAJCQkJNDk4NzcwRDAxMjQyQzUzNTAwMjIyNkJBIC8qIFNoYWRl
ci5oICovLAotCQkJCTQ5ODc3MEQxMTI0MkM1MzUwMDIyMjZCQSAvKiBTaGFyZWRHcmFwaGljc0Nv
bnRleHQzRC5jcHAgKi8sCi0JCQkJNDk4NzcwRDIxMjQyQzUzNTAwMjIyNkJBIC8qIFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNELmggKi8sCi0JCQkJNDk4NzcwRDMxMjQyQzUzNTAwMjIyNkJBIC8qIFNv
bGlkRmlsbFNoYWRlci5jcHAgKi8sCi0JCQkJNDk4NzcwRDQxMjQyQzUzNTAwMjIyNkJBIC8qIFNv
bGlkRmlsbFNoYWRlci5oICovLAotCQkJCTQ5ODc3MEQ1MTI0MkM1MzUwMDIyMjZCQSAvKiBUZXhT
aGFkZXIuY3BwICovLAotCQkJCTQ5ODc3MEQ2MTI0MkM1MzUwMDIyMjZCQSAvKiBUZXhTaGFkZXIu
aCAqLywKIAkJCQk0OTg3NzBENzEyNDJDNTM1MDAyMjI2QkEgLyogVGV4dHVyZS5jcHAgKi8sCiAJ
CQkJNDk4NzcwRDgxMjQyQzUzNTAwMjIyNkJBIC8qIFRleHR1cmUuaCAqLywKIAkJCQk0OTg3NzBE
OTEyNDJDNTM1MDAyMjI2QkEgLyogVGlsaW5nRGF0YS5jcHAgKi8sCkBAIC0yMjA3NywxMCArMjIw
MjYsNiBAQAogCQkJCTUxMUYyMzFBMERDMTYwREEwMDRGMDAzMiAvKiBMb2NhbFN0b3JhZ2VUaHJl
YWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTFDNDFCMEQ5ODI5ODAwMDNCMDJGMiAvKiBMb2Nh
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgyMzlFMDEwOUIzQ0Y4QTAwQjYwNjQxIC8qIExv
Z2dpbmcuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5QjY5RTVGMTI1NEZFRUQwMDdENTdFQiAvKiBM
b29wQmxpbm5DbGFzc2lmaWVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUI2OUU2MDEyNTRGRUVE
MDA3RDU3RUIgLyogTG9vcEJsaW5uQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUI2
OUU2NDEyNTRGRUVEMDA3RDU3RUIgLyogTG9vcEJsaW5uTWF0aFV0aWxzLmggaW4gSGVhZGVycyAq
LywKLQkJCQk0OUI2OUU2NjEyNTRGRUVEMDA3RDU3RUIgLyogTG9vcEJsaW5uVGV4dHVyZUNvb3Jk
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkQzMTYwMzkxMkIwMjY3NjAwQzFBMzU5IC8qIExvd1Bh
c3MyRmlsdGVyTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU2RDM3NDEwQURCQTVERTAwQTQ1
NTREIC8qIE1haW5SZXNvdXJjZUxvYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMUE4RjZCQzYw
REI1NUNEQzAwMURCNzk0IC8qIE1hbmlmZXN0UGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTIy
MjU1LDEwICsyMjIwMCw2IEBACiAJCQkJMUFEQTE0MTEwRTFBRTVEOTAwMDIzRUU1IC8qIFBsdWdp
bk1haW5UaHJlYWRTY2hlZHVsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBQTg3OTkwMTFDQkU4
NDYwMDNDNjY0RiAvKiBQbHVnaW5TdHJhdGVneS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEFGREFD
M0QxMEY1NDQ4QzAwRTFGM0QyIC8qIFBsdWdpblZpZXdCYXNlLmggaW4gSGVhZGVycyAqLywKLQkJ
CQk0OTg3NzBFNDEyNDJDNTM1MDAyMjI2QkEgLyogUE9EQXJlbmEuaCBpbiBIZWFkZXJzICovLAot
CQkJCTQ5ODc3MEU1MTI0MkM1MzUwMDIyMjZCQSAvKiBQT0RJbnRlcnZhbC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJNDk4NzcwRTYxMjQyQzUzNTAwMjIyNkJBIC8qIFBPREludGVydmFsVHJlZS5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJNDk4NzcwRTcxMjQyQzUzNTAwMjIyNkJBIC8qIFBPRFJlZEJsYWNr
VHJlZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjJCMUY3MTcwRDAwQ0FBODAwNEFFQTY0IC8qIFBv
aW50ZXJFdmVudHNIaXRSdWxlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQ3MzBEOTIxMjQ4RjBC
MzAwRDNBOUM5IC8qIFBvaW50TGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3MDU5
OTc4MTA3RDk3NTIwMEE1MEE3QyAvKiBQb2xpY3lDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCkBA
IC0yMjUyMSw3ICsyMjQ2Miw2IEBACiAJCQkJQTgwRTZDRTgwQTE5ODlDQTAwN0ZCOEM1IC8qIFNo
YWRvd1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMkFGRkM5NDBEMDBBNURGMDAzMDA3NEQg
LyogU2hhcGVBcmFiaWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBNEE5NTRFMEI0RURDQ0IwMDJE
OEMzQyAvKiBTaGFyZWRCdWZmZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5ODc3MEVCMTI0MkM1
MzUwMDIyMjZCQSAvKiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTMzMDlFQTMwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRpbWVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk0MUUxQjFENDBGRjU5ODY5MDA1NzZCM0IgLyogU2hhcmVkV29ya2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk0MUQxNjhFODEwMjI2RTg5MDA5QkM4MjcgLyogU2hhcmVkV29ya2VyQ29u
dGV4dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjU0MCw3ICsyMjQ4MCw2IEBACiAJCQkJNTEwRDRB
MzcxMDMxNjVFRTAwNDlFQTU0IC8qIFNvY2tldFN0cmVhbUhhbmRsZUJhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTUxMEQ0QTM4MTAzMTY1RUUwMDQ5RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVD
bGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBBNDg0NDk5MENBNDRDQjIwMEI3QkQ0OCAvKiBT
b2Z0TGlua2luZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDk4NzcwRUQxMjQyQzUzNTAwMjIyNkJB
IC8qIFNvbGlkRmlsbFNoYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNEIzMDQzQzcwQUUwMzcw
MzAwQTgyNjQ3IC8qIFNvdW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NEE4MUYzRTBGQzdERkYw
MDA5NTUzMDAgLyogU291cmNlQWxwaGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTg0QTgxRjQyMEZD
N0UwMjcwMDk1NTMwMCAvKiBTb3VyY2VHcmFwaGljLmggaW4gSGVhZGVycyAqLywKQEAgLTIyODYx
LDcgKzIyODAwLDYgQEAKIAkJCQlBOENGRjA1MTBBMTU0RjA5MDAwQTQyMzQgLyogVGFibGVMYXlv
dXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTNCRUMzMEQyMjJCMUQwMDdFMDZFNCAvKiBUYWdO
b2RlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRjU1QjNERDYxMjUxRjEyRDAwM0VGMjY5IC8q
IFRlbGVwaG9uZUlucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDk4NzcwRUYxMjQyQzUz
NTAwMjIyNkJBIC8qIFRleFNoYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU1MEI2QTYwOTlE
RjAyNzAwOTBENzgxIC8qIFRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA5RTE3MDk5RTY0
OTIwMDU2RTU4MSAvKiBUZXh0QWZmaW5pdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyQzNEQTM0
MEQwMDZDMUQwMEVGNkYyNiAvKiBUZXh0Qm91bmRhcmllcy5oIGluIEhlYWRlcnMgKi8sCkBAIC0y
NTA2Niw5ICsyNTAwNCw2IEBACiAJCQkJQkNFMUM0MUMwRDk4Mjk4MTAwM0IwMkYyIC8qIExvY2F0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4MjM5RTAwMDlCM0NGOEEwMEI2MDY0MSAvKiBM
b2dnaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MDI2NDVFMEFGREMxOUIwMDU5MTlFMiAv
KiBMb2dnaW5nTWFjLm1tIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlCNjlFNUUxMjU0RkVFRDAwN0Q1
N0VCIC8qIExvb3BCbGlubkNsYXNzaWZpZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJNDlCNjlF
NjMxMjU0RkVFRDAwN0Q1N0VCIC8qIExvb3BCbGlubk1hdGhVdGlscy5jcHAgaW4gU291cmNlcyAq
LywKLQkJCQk0OUI2OUU2NTEyNTRGRUVEMDA3RDU3RUIgLyogTG9vcEJsaW5uVGV4dHVyZUNvb3Jk
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDMxNjAzODEyQjAyNjc2MDBDMUEzNTkgLyogTG93
UGFzczJGaWx0ZXJOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkzRTIyN0UxMEFGNTg5QUQw
MEQ0ODMyNCAvKiBNYWluUmVzb3VyY2VMb2FkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUE4
RjZCQzUwREI1NUNEQzAwMURCNzk0IC8qIE1hbmlmZXN0UGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMjU0MTcsNyArMjUzNTIsNiBAQAogCQkJCTFBNEE5NTREMEI0RURDQ0IwMDJEOEMzQyAv
KiBTaGFyZWRCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTEyREQ4RTMwRDkxRTJCNDAw
MEY4OUVFIC8qIFNoYXJlZEJ1ZmZlckNGLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTFBNEE5NTUy
MEI0RURDRkYwMDJEOEMzQyAvKiBTaGFyZWRCdWZmZXJNYWMubW0gaW4gU291cmNlcyAqLywKLQkJ
CQk0OTg3NzBFQTEyNDJDNTM1MDAyMjI2QkEgLyogU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOTMzMDlFQTIwOTlFQjc4QzAwNTZFNTgxIC8qIFNoYXJlZFRp
bWVyTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNDFFMUIxRDMwRkY1OTg2OTAwNTc2QjNCIC8q
IFNoYXJlZFdvcmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MUQxNjhFNzEwMjI2RTg5MDA5
QkM4MjcgLyogU2hhcmVkV29ya2VyQ29udGV4dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1NDM2
LDcgKzI1MzcwLDYgQEAKIAkJCQk1MTBENEEzMzEwMzE2NUVFMDA0OUVBNTQgLyogU29ja2V0U3Ry
ZWFtRXJyb3JCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUxMEQ0QTM2MTAzMTY1RUUwMDQ5
RUE1NCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUx
QUJBRTFGMTAzQzE5MTMwMDhDNTI2MCAvKiBTb2NrZXRTdHJlYW1IYW5kbGVDRk5ldC5jcHAgaW4g
U291cmNlcyAqLywKLQkJCQk0OTg3NzBFQzEyNDJDNTM1MDAyMjI2QkEgLyogU29saWRGaWxsU2hh
ZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTRCMzA0M0M5MEFFMDM3MUQwMEE4MjY0NyAvKiBT
b3VuZE1hYy5tbSBpbiBTb3VyY2VzICovLAogCQkJCTg0QTgxRjNEMEZDN0RGRjAwMDk1NTMwMCAv
KiBTb3VyY2VBbHBoYS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NEE4MUY0MTBGQzdFMDI3MDA5
NTUzMDAgLyogU291cmNlR3JhcGhpYy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTI1NjY2LDcgKzI1
NTk5LDYgQEAKIAkJCQk2NTgyQTE2MzA5OTk5RDZEMDBCRUVCNkQgLyogU3lzdGVtVGltZU1hYy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0UzQkVDMjBEMjIyQjFEMDA3RTA2RTQgLyogVGFnTm9k
ZUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNERDUxMjUxRjEyRDAwM0VGMjY5IC8q
IFRlbGVwaG9uZUlucHV0VHlwZS5jcHAgaW4gU291cmNlcyAqLywKLQkJCQk0OTg3NzBFRTEyNDJD
NTM1MDAyMjI2QkEgLyogVGV4U2hhZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NTBCNkE1
MDk5REYwMjcwMDkwRDc4MSAvKiBUZXh0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTM3MkMwMEM0
MTI5NjExRjEwMDVDOTU3NSAvKiBUZXh0Qm91bmRhcmllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCMkFGRkM5NzBEMDBBNURGMDAzMDA3NEQgLyogVGV4dEJvdW5kYXJpZXMubW0gaW4gU291cmNl
cyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4IGY0MjM3NzhkNzQzOWY2NGQwZDA0MzM1NTQ4NmY0M2Vh
YjU0ZjY1M2EuLjA4NzE5OTk3OGJlYzZhZDViYzEzNjEzMTRiZTkyY2NkY2QyNzM0ODggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcApAQCAtNjYsOCArNjYsNiBAQAogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgog
I2luY2x1ZGUgIkRyYXdpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4
dDNELmgiCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogI2luY2x1ZGUgIlJlbmRl
ckxheWVyLmgiCiAjZW5kaWYKQEAgLTE0NiwxMiArMTQ0LDEyIEBAIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKEhUTUxDYW52YXNFbGVtZW50KiBjYW52
YXMsIGJvCiAgICAgaWYgKEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCkpIHsK
ICAgICAgICAgbV9jb250ZXh0M0QgPSBwLT5zaGFyZWRHcmFwaGljc0NvbnRleHQzRCgpOwogICAg
ICAgICBpZiAobV9jb250ZXh0M0QpIHsKLSAgICAgICAgICAgIG1fZHJhd2luZ0J1ZmZlciA9IG1f
Y29udGV4dDNELT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVEcmF3aW5nQnVmZmVyKEludFNp
emUoY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpKSk7CisgICAgICAgICAgICBtX2Ry
YXdpbmdCdWZmZXIgPSBtX2NvbnRleHQzRC0+Y3JlYXRlRHJhd2luZ0J1ZmZlcihJbnRTaXplKGNh
bnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSkpOwogICAgICAgICAgICAgaWYgKCFtX2Ry
YXdpbmdCdWZmZXIpIHsKLSAgICAgICAgICAgICAgICBjLT5zZXRTaGFyZWRHcmFwaGljc0NvbnRl
eHQzRCgwLCAwLCBJbnRTaXplKCkpOworICAgICAgICAgICAgICAgIGMtPnNldEdyYXBoaWNzQ29u
dGV4dDNEKDAsIDAsIEludFNpemUoKSk7CiAgICAgICAgICAgICAgICAgbV9jb250ZXh0M0QuY2xl
YXIoKTsKICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGMtPnNldFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEKG1fY29udGV4dDNELmdldCgpLCBtX2RyYXdpbmdCdWZmZXIuZ2V0KCks
IEludFNpemUoY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpKSk7CisgICAgICAgICAg
ICAgICAgYy0+c2V0R3JhcGhpY3NDb250ZXh0M0QobV9jb250ZXh0M0QuZ2V0KCksIG1fZHJhd2lu
Z0J1ZmZlci5nZXQoKSwgSW50U2l6ZShjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCkp
KTsKICAgICAgICAgfQogICAgIH0KICNlbmRpZgpAQCAtMTczLDcgKzE3MSw3IEBAIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6fkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCgpCiAKICNpZiBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQogICAgIGlmIChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQgPSBkcmF3aW5nQ29udGV4dCgpKQotICAgICAgICBjb250ZXh0LT5zZXRTaGFyZWRHcmFwaGlj
c0NvbnRleHQzRCgwLCAwLCBJbnRTaXplKCkpOworICAgICAgICBjb250ZXh0LT5zZXRHcmFwaGlj
c0NvbnRleHQzRCgwLCAwLCBJbnRTaXplKCkpOwogI2VuZGlmCiB9CiAKQEAgLTIwOCw5ICsyMDYs
OSBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cmVzZXQoKQogICAgIGlmIChHcmFw
aGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpKSB7CiAgICAgICAgIGlmIChtX2NvbnRl
eHQzRCAmJiBtX2RyYXdpbmdCdWZmZXIpIHsKICAgICAgICAgICAgIGlmIChtX2RyYXdpbmdCdWZm
ZXItPnJlc2V0KEludFNpemUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSkp
KSB7Ci0gICAgICAgICAgICAgICAgYy0+c2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QobV9jb250
ZXh0M0QuZ2V0KCksIG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgSW50U2l6ZShjYW52YXMoKS0+d2lk
dGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7CisgICAgICAgICAgICAgICAgYy0+c2V0R3JhcGhp
Y3NDb250ZXh0M0QobV9jb250ZXh0M0QuZ2V0KCksIG1fZHJhd2luZ0J1ZmZlci5nZXQoKSwgSW50
U2l6ZShjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7CiAgICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGMtPnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNE
KDAsIDAsIEludFNpemUoKSk7CisgICAgICAgICAgICAgICAgYy0+c2V0R3JhcGhpY3NDb250ZXh0
M0QoMCwgMCwgSW50U2l6ZSgpKTsKICAgICAgICAgICAgICAgICBtX2RyYXdpbmdCdWZmZXIuY2xl
YXIoKTsKICAgICAgICAgICAgICAgICBtX2NvbnRleHQzRC5jbGVhcigpOwogICAgICAgICAgICAg
fQpAQCAtNTcyLDE1ICs1NzAsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKGNvbnN0IFN0cmluZyYgb3BlcmF0aQogICAgIGlmICgh
YykKICAgICAgICAgcmV0dXJuOwogICAgIGMtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7Ci0j
aWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICBpZiAoaXNBY2NlbGVyYXRlZCgp
ICYmICFtX2NvbnRleHQzRC0+c3VwcG9ydHNDb21wb3NpdGVPcChvcCkpIHsKLSAgICAgICAgYy0+
c2V0U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoMCwgMCwgSW50U2l6ZSgpKTsKLSAgICAgICAgbV9k
cmF3aW5nQnVmZmVyLmNsZWFyKCk7Ci0gICAgICAgIG1fY29udGV4dDNELmNsZWFyKCk7Ci0gICAg
ICAgIC8vIE1hcmsgYXMgbmVlZGluZyBhIHN0eWxlIHJlY2FsYyBzbyBvdXIgY29tcG9zaXRpbmcg
bGF5ZXIgY2FuIGJlIHJlbW92ZWQuCi0gICAgICAgIGNhbnZhcygpLT5zZXROZWVkc1N0eWxlUmVj
YWxjKFN5bnRoZXRpY1N0eWxlQ2hhbmdlKTsKLSAgICB9Ci0jZW5kaWYKIH0KIAogdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNjYWxlKGZsb2F0IHN4LCBmbG9hdCBzeSkKQEAgLTE2NDQs
MTAgKzE2MzMsNiBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZGlkRHJhdyhjb25z
dCBGbG9hdFJlY3QmIHIsIHVuc2lnbmVkIG9wdGlvbnMpCiAgICAgICAgIC8vIHdlJ2QgaGF2ZSB0
byBrZWVwIHRoZSBjbGlwIHBhdGggYXJvdW5kLgogICAgIH0KIAotI2lmIEVOQUJMRShBQ0NFTEVS
QVRFRF8yRF9DQU5WQVMpCi0gICAgaWYgKGlzQWNjZWxlcmF0ZWQoKSkKLSAgICAgICAgZHJhd2lu
Z0NvbnRleHQoKS0+bWFya0RpcnR5UmVjdChlbmNsb3NpbmdJbnRSZWN0KGRpcnR5UmVjdCkpOwot
I2VuZGlmCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgJiYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQogICAgIC8vIElmIHdlIGFyZSBkcmF3aW5nIHRvIGhhcmR3YXJlIGFu
ZCB3ZSBoYXZlIGEgY29tcG9zaXRlZCBsYXllciwganVzdCBjYWxsIGNvbnRlbnRDaGFuZ2VkKCku
CiAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7CkBAIC0y
MDM4LDE0ICsyMDIzLDYgQEAgY29uc3QgRm9udCYgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjph
Y2Nlc3NGb250KCkKICAgICByZXR1cm4gc3RhdGUoKS5tX2ZvbnQ7CiB9CiAKLXZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpCi17Ci0j
aWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICBpZiAoR3JhcGhpY3NDb250ZXh0
KiBjID0gZHJhd2luZ0NvbnRleHQoKSkKLSAgICAgICAgYy0+c3luY1NvZnR3YXJlQ2FudmFzKCk7
Ci0jZW5kaWYKLX0KLQogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpICYmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKIFBsYXRmb3JtTGF5ZXIqIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCmluZGV4IDExZjUxZmUz
NmFhYWNlNmI2NmQ4YmQ4ZGY0NTYxOTFjYzE3ZTM3MzkuLjk0YzZkYzg5ZTA4ZjlhYzZkMzE5ZWIy
YTFkMDZlOWZkNWZhNWU5NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCkBAIC01Niw3ICs1Niw3IEBAIGNsYXNzIFRl
eHRNZXRyaWNzOwogCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKIGNsYXNzIERy
YXdpbmdCdWZmZXI7Ci1jbGFzcyBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDsKK2NsYXNzIEdyYXBo
aWNzQ29udGV4dDNEOwogI2VuZGlmCiAKIHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CkBAIC0y
MTksOCArMjE5LDYgQEAgcHVibGljOgogICAgIExpbmVDYXAgZ2V0TGluZUNhcCgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRlKCkubV9saW5lQ2FwOyB9CiAgICAgTGluZUpvaW4gZ2V0TGluZUpvaW4oKSBj
b25zdCB7IHJldHVybiBzdGF0ZSgpLm1fbGluZUpvaW47IH0KIAotICAgIHZpcnR1YWwgdm9pZCBw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOwotCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVE
XzJEX0NBTlZBUykgJiYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZpcnR1YWwg
UGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllcigpIGNvbnN0OwogI2VuZGlmCkBAIC0zMDUsNyAr
MzAzLDcgQEAgcHJpdmF0ZToKIAogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAg
ICAgUmVmUHRyPERyYXdpbmdCdWZmZXI+IG1fZHJhd2luZ0J1ZmZlcjsKLSAgICBSZWZQdHI8U2hh
cmVkR3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDNEOworICAgIFJlZlB0cjxHcmFwaGljc0Nv
bnRleHQzRD4gbV9jb250ZXh0M0Q7CiAjZW5kaWYKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2xvYWRlci9FbXB0eUNsaWVudHMuaCBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9FbXB0
eUNsaWVudHMuaAppbmRleCAzZmYyNThiZmFmMzM0NDlmZTQwM2M5MjlhOWQxMmE5Njk4YjU0Y2Uz
Li44ZjM1Mjc2NWY5YWVhNTgxYzY0NGY2NTYzMzlhZjQxMTc1YjM1ZTcwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvRW1wdHlDbGllbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
bG9hZGVyL0VtcHR5Q2xpZW50cy5oCkBAIC02Miw3ICs2Miw3IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q7CitjbGFzcyBHcmFwaGljc0Nv
bnRleHQzRDsKIAogY2xhc3MgRW1wdHlQb3B1cE1lbnUgOiBwdWJsaWMgUG9wdXBNZW51IHsKIHB1
YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0Nocm9tZUNsaWVudC5oCmluZGV4IGEyN2M3NjZlNjA0MWFjNDU5
MDcxNWVjYzFiZDY0YTdiMmEyZDJiMjIuLjRiOGE5NDlmNWNiNDEzNzE1YTY1YzM5NjU1MDVlOGNh
N2E2MDNjNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvQ2hyb21lQ2xpZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9DaHJvbWVDbGllbnQuaApAQCAtNjAsNyArNjAsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgUGFnZTsKICAgICBjbGFzcyBQb3B1cE1l
bnVDbGllbnQ7CiAgICAgY2xhc3MgU2VjdXJpdHlPcmlnaW47Ci0gICAgY2xhc3MgU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0Q7CisgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7CiAgICAgY2xhc3Mg
V2lkZ2V0OwogCiAgICAgc3RydWN0IEZyYW1lTG9hZFJlcXVlc3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcApp
bmRleCAyNGJkMzI1NmRkN2EwMjYyYzkxMTU5MzA1YjVlOWEyOWFhNGQyZWFkLi4zMjQxOWEwYmY1
Yjc1MjNmMmU1ODk3M2Q2Y2Q1ZmQyMDg4MmIwMjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTc2
LDcgKzc2LDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAKICNpZiBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotI2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4
dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNlbmRpZgogCiAjaWYgRU5B
QkxFKERPTV9TVE9SQUdFKQpAQCAtNzUyLDE2ICs3NTIsMTcgQEAgdm9pZCBQYWdlOjpzZXREZWJ1
Z2dlcihKU0M6OkRlYnVnZ2VyKiBkZWJ1Z2dlcikKICAgICAgICAgZnJhbWUtPnNjcmlwdCgpLT5h
dHRhY2hEZWJ1Z2dlcihtX2RlYnVnZ2VyKTsKIH0KIAotU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Qq
IFBhZ2U6OnNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKCkKK0dyYXBoaWNzQ29udGV4dDNEKiBQYWdl
OjpzaGFyZWRHcmFwaGljc0NvbnRleHQzRCgpCiB7CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJE
X0NBTlZBUykKLSAgICBpZiAoIW1fc2hhcmVkR3JhcGhpY3NDb250ZXh0M0QpCi0jaWYgVVNFKFNL
SUEpCi0gICAgICAgIC8vIFRlbXBvcmFyeSBjb2RlIHRvIHBvc3Rwb25lIG1hc3NpdmUgdGVzdCBy
ZWJhc2VsaW5pbmcKLSAgICAgICAgbV9zaGFyZWRHcmFwaGljc0NvbnRleHQzRCA9IFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoY2hyb21lKCksIHNldHRpbmdzKCktPmxlZ2FjeUFjY2Vs
ZXJhdGVkMmRDYW52YXNFbmFibGVkKCkgPyAwIDogU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OlVz
ZVNraWFHUFUpOwotI2Vsc2UKLSAgICAgICAgbV9zaGFyZWRHcmFwaGljc0NvbnRleHQzRCA9IFNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoY2hyb21lKCksIDApOwotI2VuZGlmCisgICAg
aWYgKCFtX3NoYXJlZEdyYXBoaWNzQ29udGV4dDNEKSB7CisgICAgICAgIEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzIGF0dHI7CisgICAgICAgIGF0dHIuZGVwdGggPSBmYWxzZTsKKyAgICAg
ICAgYXR0ci5zdGVuY2lsID0gdHJ1ZTsKKyAgICAgICAgYXR0ci5hbnRpYWxpYXMgPSBmYWxzZTsK
KyAgICAgICAgYXR0ci5jYW5SZWNvdmVyRnJvbUNvbnRleHRMb3NzID0gZmFsc2U7IC8vIENhbnZh
cyBjb250ZXh0cyBjYW4gbm90IGhhbmRsZSBsb3N0IGNvbnRleHRzLgorICAgICAgICBtX3NoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEID0gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShhdHRyLCBjaHJv
bWUoKSk7CisgICAgfQogICAgIHJldHVybiBtX3NoYXJlZEdyYXBoaWNzQ29udGV4dDNELmdldCgp
OwogI2Vsc2UgLy8gIUVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCiAgICAgcmV0dXJuIDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUGFnZS5oCmluZGV4IGM5NDJjODAyNTljYWVlYTg5NzA1ZGFkZjBmNWM2ZGNkOTk2ZDMw
NzMuLjFlMDNhYWRkZGZjMzdiMWYxYmNjMmI3MzBmZmRiNzNiM2VkZjBlNTEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5oCkBAIC04MSw3ICs4MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBWaXNp
YmxlU2VsZWN0aW9uOwogICAgIGNsYXNzIFNjcm9sbGFibGVBcmVhOwogICAgIGNsYXNzIFNldHRp
bmdzOwotICAgIGNsYXNzIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOworICAgIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDNEOwogICAgIGNsYXNzIFNwZWVjaElucHV0OwogICAgIGNsYXNzIFNwZWVjaElu
cHV0Q2xpZW50OwogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKQEAgLTI2Niw3ICsyNjYsNyBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRpYyB2b2lkIGFsbFZpc2l0ZWRTdGF0ZUNo
YW5nZWQoUGFnZUdyb3VwKik7CiAgICAgICAgIHN0YXRpYyB2b2lkIHZpc2l0ZWRTdGF0ZUNoYW5n
ZWQoUGFnZUdyb3VwKiwgTGlua0hhc2ggdmlzaXRlZEhhc2gpOwogCi0gICAgICAgIFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEKiBzaGFyZWRHcmFwaGljc0NvbnRleHQzRCgpOworICAgICAgICBHcmFw
aGljc0NvbnRleHQzRCogc2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoKTsKIAogI2lmIEVOQUJMRShE
T01fU1RPUkFHRSkKICAgICAgICAgU3RvcmFnZU5hbWVzcGFjZSogc2Vzc2lvblN0b3JhZ2UoYm9v
bCBvcHRpb25hbENyZWF0ZSA9IHRydWUpOwpAQCAtMzI1LDcgKzMyNSw3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgT3duUHRyPERyYWdDYXJldENvbnRyb2xsZXI+IG1fZHJhZ0NhcmV0
Q29udHJvbGxlcjsKIAogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgICAg
IFJlZlB0cjxTaGFyZWRHcmFwaGljc0NvbnRleHQzRD4gbV9zaGFyZWRHcmFwaGljc0NvbnRleHQz
RDsKKyAgICAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBtX3NoYXJlZEdyYXBoaWNzQ29u
dGV4dDNEOwogI2VuZGlmCiAgICAgICAgIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNw
cAppbmRleCBmM2Y5OWU0NzViMjI4ZWQxMzE0ZjlhZTdlOTFjY2MwNDNkNWU1ZGE2Li42YTczMTA2
NWM3ZjZlMTAzNmJkNTc1ZTQ5NmI3Nzg2OTcyNDU2ODlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTcwNywxNSAr
NzA3LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9u
dHMoYm9vbCkKICNlbmRpZgogCiAjaWYgIVVTRShTS0lBKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiwgRHJh
d2luZ0J1ZmZlciosIGNvbnN0IEludFNpemUmKQotewotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4
dDo6c3luY1NvZnR3YXJlQ2FudmFzKCkKLXsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6Om1h
cmtEaXJ0eVJlY3QoY29uc3QgSW50UmVjdCYpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0R3Jh
cGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0QqLCBEcmF3aW5nQnVmZmVyKiwgY29uc3Qg
SW50U2l6ZSYpCiB7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKaW5kZXggNmUzYjZhYjA0YjhhNjk1NGM4NDU1ZjYz
YjYxZGZiNzhjNDA0OTJlMS4uZjdkMDUyYzYzZDU2ZDRmYjU4ZWMzZjEyNzc5ODQxNTExODUxY2M3
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgKQEAgLTEyOCw3ICsxMjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xh
c3MgSW50UmVjdDsKICAgICBjbGFzcyBSb3VuZGVkSW50UmVjdDsKICAgICBjbGFzcyBLVVJMOwot
ICAgIGNsYXNzIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOworICAgIGNsYXNzIEdyYXBoaWNzQ29u
dGV4dDNEOwogICAgIGNsYXNzIFRleHRSdW47CiAKICAgICBlbnVtIFRleHREcmF3aW5nTW9kZSB7
CkBAIC01MTIsOSArNTEyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBwYXR0ZXJu
IGdldEhhaWt1U3Ryb2tlU3R5bGUoKTsKICNlbmRpZgogCi0gICAgICAgIHZvaWQgc2V0U2hhcmVk
R3JhcGhpY3NDb250ZXh0M0QoU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqLCBEcmF3aW5nQnVmZmVy
KiwgY29uc3QgSW50U2l6ZSYpOwotICAgICAgICB2b2lkIHN5bmNTb2Z0d2FyZUNhbnZhcygpOwot
ICAgICAgICB2b2lkIG1hcmtEaXJ0eVJlY3QoY29uc3QgSW50UmVjdCYpOyAvLyBIaW50cyB0aGF0
IGEgcG9ydGlvbiBvZiB0aGUgYmFja2luZyBzdG9yZSBpcyBkaXJ0eS4KKyAgICAgICAgdm9pZCBz
ZXRHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQzRCosIERyYXdpbmdCdWZmZXIqLCBj
b25zdCBJbnRTaXplJik7CiAKICAgICAgICAgc3RhdGljIHZvaWQgYWRqdXN0TGluZVRvUGl4ZWxC
b3VuZGFyaWVzKEZsb2F0UG9pbnQmIHAxLCBGbG9hdFBvaW50JiBwMiwgZmxvYXQgc3Ryb2tlV2lk
dGgsIFN0cm9rZVN0eWxlKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKaW5kZXggMGNiZTdlMzQwYjE5OGJmNGMyNmNmYjg4
NjYyYjA3ZDY5MzgwZGZmMi4uMWQwZjJmODMxMjQ5MzU2ZmRmY2I5ZGQxODZlMmVkNTM3OWU4ZTgx
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0NvbnRleHQzRC5oCkBAIC03Miw2ICs3MiwxMCBAQCB0eXBlZGVmIENHTENvbnRleHRPYmogUGxh
dGZvcm1HcmFwaGljc0NvbnRleHQzRDsKIHR5cGVkZWYgdm9pZCogUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ0hST01JVU0pICYmIFVTRShTS0lBKQor
Y2xhc3MgR3JDb250ZXh0OworI2VuZGlmCisKIC8vIFRoZXNlIGFyZSBjdXJyZW50bHkgdGhlIHNh
bWUgYW1vbmcgYWxsIGltcGxlbWVudGF0aW9ucy4KIGNvbnN0IFBsYXRmb3JtR3JhcGhpY3NDb250
ZXh0M0QgTnVsbFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgPSAwOwogY29uc3QgUGxhdGZvcm0z
RE9iamVjdCBOdWxsUGxhdGZvcm0zRE9iamVjdCA9IDA7CkBAIC00NjQsNiArNDY4LDkgQEAgcHVi
bGljOgogI2VsaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7CiAgICAgUGxhdGZvcm0zRE9i
amVjdCBwbGF0Zm9ybVRleHR1cmUoKSBjb25zdDsKKyNpZiBVU0UoU0tJQSkKKyAgICBHckNvbnRl
eHQqIGdyQ29udGV4dCgpOworI2VuZGlmCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQogICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRHJhd2lu
Z0J1ZmZlckNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0RyYXdpbmdCdWZmZXJDaHJvbWl1bS5jcHAKaW5kZXggNWQ5MGFkNjg0MmZiY2I5MmRl
ZmY3MDZjOWQ5NmM2NTM0YTQ2ZTllMS4uZTQxNGFkM2FhYmQyMTE2NzlhZTEwYjVjOWViNDMxMmZj
ZjlhZDBmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRHJhd2luZ0J1ZmZlckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9EcmF3aW5nQnVmZmVyQ2hyb21pdW0uY3BwCkBAIC0zNCw3
ICszNCw2IEBACiAKICNpbmNsdWRlICJFeHRlbnNpb25zM0RDaHJvbWl1bS5oIgogI2luY2x1ZGUg
IkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Qu
aCIKIAogI2lmIFVTRShTS0lBKQogI2luY2x1ZGUgIkdyQ29udGV4dC5oIgpAQCAtMTYxLDcgKzE2
MCw3IEBAIFBsYXRmb3JtM0RPYmplY3QgRHJhd2luZ0J1ZmZlcjo6cGxhdGZvcm1Db2xvckJ1ZmZl
cigpIGNvbnN0CiB2b2lkIERyYXdpbmdCdWZmZXI6OnNldEdyQ29udGV4dChHckNvbnRleHQqIGNv
bnRleHQpCiB7CiAgICAgLy8gV2UganVzdCB0YWtlIGEgcHRyIHdpdGhvdXQgcmVmZXJlbmNpbmcg
aXQsIGFzIHdlIHJlcXVpcmUgdGhhdCB3ZSBuZXZlciBvdXRsaXZlCi0gICAgLy8gdGhlIFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEIG9iamVjdCB0aGF0IGlzIGdpdmluZyB1cyB0aGUgY29udGV4dC4K
KyAgICAvLyB0aGUgR3JhcGhpY3NDb250ZXh0M0Qgb2JqZWN0IHRoYXQgaXMgZ2l2aW5nIHVzIHRo
ZSBjb250ZXh0LgogICAgIG1fZ3JDb250ZXh0ID0gY29udGV4dDsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udExpbnV4LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRMaW51eC5jcHAK
aW5kZXggZTc1ODA4NjgzYTAyODNlN2I0NDhhNDMwNDA5NWVkM2E2MTc5YjBlNS4uOWQ1NjllNGMw
ODcwMGM3MGRiNmFjNDMzYzA2NzJlZTYzM2JhZTA3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udExpbnV4LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250TGludXguY3BwCkBAIC0xMTAs
NyArMTEwLDcgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ2MsIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBmb250LAogICAgICAgICB5ICs9IFNrRmxvYXRUb1NjYWxhcihh
ZHZbaV0uaGVpZ2h0KCkpOwogICAgIH0KIAotICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+cHJl
cGFyZUZvclNvZnR3YXJlRHJhdygpOworICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+bWFrZUdy
Q29udGV4dEN1cnJlbnQoKTsKIAogICAgIFNrQ2FudmFzKiBjYW52YXMgPSBnYy0+cGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpOwogICAgIFRleHREcmF3aW5nTW9kZUZsYWdzIHRleHRNb2RlID0g
Z2MtPnBsYXRmb3JtQ29udGV4dCgpLT5nZXRUZXh0RHJhd2luZ01vZGUoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL2NjL0NDTGF5ZXJTb3J0
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NM
YXllclNvcnRlci5jcHAKaW5kZXggOGU1ZjkwOTA0NTVhZmIwY2JlMTlhMzg2ZjNmYzNjNmY4ZGQx
MzkzMi4uYjJjNTU3NDJmNzlmOGQzYjU3NDFiZWM3ZTU4OGU3ZDhiMWNhMjdkMyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vY2MvQ0NMYXllclNv
cnRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Y2MvQ0NMYXllclNvcnRlci5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgImNjL0ND
TGF5ZXJTb3J0ZXIuaCIKIAotI2luY2x1ZGUgIkxvb3BCbGlubk1hdGhVdGlscy5oIgogI2luY2x1
ZGUgIlJlbmRlclN1cmZhY2VDaHJvbWl1bS5oIgogI2luY2x1ZGUgIlRyYW5zZm9ybWF0aW9uTWF0
cml4LmgiCiAjaW5jbHVkZSA8bGltaXRzLmg+CkBAIC00Niw3ICs0NSwzNSBAQCBzdGF0aWMgV1RG
TG9nQ2hhbm5lbCBMb2dDQ0xheWVyU29ydGVyID0geyAweDAwMDAwMDAwLCAiIiwgV1RGTG9nQ2hh
bm5lbE9mZiB9OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIExvb3BCbGlubk1hdGhV
dGlsczo6cG9pbnRJblRyaWFuZ2xlOworc3RhdGljIGJvb2wgcG9pbnRJblRyaWFuZ2xlKGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZs
b2F0UG9pbnQmIGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2lu
dCYgYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBjKQor
eworICAgIC8vIEFsZ29yaXRobSBmcm9tIGh0dHA6Ly93d3cuYmxhY2twYXduLmNvbS90ZXh0cy9w
b2ludGlucG9seS9kZWZhdWx0Lmh0bWwKKyAgICBmbG9hdCB4MCA9IGMueCgpIC0gYS54KCk7Cisg
ICAgZmxvYXQgeTAgPSBjLnkoKSAtIGEueSgpOworICAgIGZsb2F0IHgxID0gYi54KCkgLSBhLngo
KTsKKyAgICBmbG9hdCB5MSA9IGIueSgpIC0gYS55KCk7CisgICAgZmxvYXQgeDIgPSBwb2ludC54
KCkgLSBhLngoKTsKKyAgICBmbG9hdCB5MiA9IHBvaW50LnkoKSAtIGEueSgpOworCisgICAgZmxv
YXQgZG90MDAgPSB4MCAqIHgwICsgeTAgKiB5MDsKKyAgICBmbG9hdCBkb3QwMSA9IHgwICogeDEg
KyB5MCAqIHkxOworICAgIGZsb2F0IGRvdDAyID0geDAgKiB4MiArIHkwICogeTI7CisgICAgZmxv
YXQgZG90MTEgPSB4MSAqIHgxICsgeTEgKiB5MTsKKyAgICBmbG9hdCBkb3QxMiA9IHgxICogeDIg
KyB5MSAqIHkyOworICAgIGZsb2F0IGRlbm9taW5hdG9yID0gZG90MDAgKiBkb3QxMSAtIGRvdDAx
ICogZG90MDE7CisgICAgaWYgKCFkZW5vbWluYXRvcikKKyAgICAgICAgLy8gVHJpYW5nbGUgaXMg
emVyby1hcmVhLiBUcmVhdCBxdWVyeSBwb2ludCBhcyBub3QgYmVpbmcgaW5zaWRlLgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgLy8gQ29tcHV0ZQorICAgIGZsb2F0IGludmVyc2VEZW5vbWlu
YXRvciA9IDEuMGYgLyBkZW5vbWluYXRvcjsKKyAgICBmbG9hdCB1ID0gKGRvdDExICogZG90MDIg
LSBkb3QwMSAqIGRvdDEyKSAqIGludmVyc2VEZW5vbWluYXRvcjsKKyAgICBmbG9hdCB2ID0gKGRv
dDAwICogZG90MTIgLSBkb3QwMSAqIGRvdDAyKSAqIGludmVyc2VEZW5vbWluYXRvcjsKKworICAg
IHJldHVybiAodSA+IDAuMGYpICYmICh2ID4gMC4wZikgJiYgKHUgKyB2IDwgMS4wZik7Cit9CiAK
IGlubGluZSBzdGF0aWMgZmxvYXQgcGVycFByb2R1Y3QoY29uc3QgRmxvYXRTaXplJiB1LCBjb25z
dCBGbG9hdFNpemUmIHYpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvQmljdWJpY1NoYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvQmljdWJpY1NoYWRlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGI5YzQzNDIxNzc4ODQ1MjczY2EzZmFkNDkxMDU3MTRlZDc2ZWU1YmMuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0JpY3ViaWNTaGFkZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKQotCi0jaW5jbHVkZSAiQmljdWJpY1NoYWRlci5oIgotCi0jaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0M0QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1CaWN1YmljU2hhZGVyOjpC
aWN1YmljU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCB1bnNpZ25lZCBwcm9ncmFt
KQotICAgIDogU2hhZGVyKGNvbnRleHQsIHByb2dyYW0pCi0gICAgLCBtX21hdHJpeExvY2F0aW9u
KGNvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAibWF0cml4IikpCi0gICAgLCBt
X3RleE1hdHJpeExvY2F0aW9uKGNvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAi
dGV4TWF0cml4IikpCi0gICAgLCBtX2NvZWZmaWNpZW50c0xvY2F0aW9uKGNvbnRleHQtPmdldFVu
aWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAiY29lZmZpY2llbnRzIikpCi0gICAgLCBtX2ltYWdlSW5j
cmVtZW50TG9jYXRpb24oY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJpbWFn
ZUluY3JlbWVudCIpKQotICAgICwgbV9pbWFnZUxvY2F0aW9uKGNvbnRleHQtPmdldFVuaWZvcm1M
b2NhdGlvbihwcm9ncmFtLCAiaW1hZ2UiKSkKLSAgICAsIG1fYWxwaGFMb2NhdGlvbihjb250ZXh0
LT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgImFscGhhIikpCi0gICAgLCBtX3Bvc2l0aW9u
TG9jYXRpb24oY29udGV4dC0+Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgInBvc2l0aW9uIikp
Ci17Ci19Ci0KLVBhc3NPd25QdHI8QmljdWJpY1NoYWRlcj4gQmljdWJpY1NoYWRlcjo6Y3JlYXRl
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiB2
ZXJ0ZXhTaGFkZXJTb3VyY2UgPQotICAgICAgICAidW5pZm9ybSBtYXQzIG1hdHJpeDtcbiIKLSAg
ICAgICAgInVuaWZvcm0gbWF0MyB0ZXhNYXRyaXg7XG4iCi0gICAgICAgICJhdHRyaWJ1dGUgdmVj
MiBwb3NpdGlvbjtcbiIKLSAgICAgICAgInZhcnlpbmcgdmVjMiB0ZXhDb29yZDtcbiIKLSAgICAg
ICAgInZvaWQgbWFpbigpIHtcbiIKLSAgICAgICAgIiAgICB2ZWMzIHBvcyA9IHZlYzMocG9zaXRp
b24sIDEuMCk7XG4iCi0gICAgICAgICIgICAgdGV4Q29vcmQgPSAodGV4TWF0cml4ICogcG9zKS54
eTtcbiIKLSAgICAgICAgIiAgICBnbF9Qb3NpdGlvbiA9IHZlYzQobWF0cml4ICogcG9zLCAxLjAp
O1xuIgotICAgICAgICAifVxuIjsKLSAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFk
ZXJTb3VyY2UgPQotICAgICAgICAiI2lmZGVmIEdMX0VTXG4iCi0gICAgICAgICJwcmVjaXNpb24g
bWVkaXVtcCBmbG9hdDtcbiIKLSAgICAgICAgIiNlbmRpZlxuIgotICAgICAgICAidW5pZm9ybSBz
YW1wbGVyMkQgaW1hZ2U7XG4iCi0gICAgICAgICJ1bmlmb3JtIHZlYzIgaW1hZ2VJbmNyZW1lbnQ7
XG4iCi0gICAgICAgICJ1bmlmb3JtIG1hdDQgY29lZmZpY2llbnRzO1xuIgotICAgICAgICAidW5p
Zm9ybSBmbG9hdCBhbHBoYTtcbiIKLSAgICAgICAgInZhcnlpbmcgdmVjMiB0ZXhDb29yZDtcbiIK
LSAgICAgICAgInZlYzQgY3ViaWNCbGVuZChmbG9hdCB0LCB2ZWM0IGMwLCB2ZWM0IGMxLCB2ZWM0
IGMyLCB2ZWM0IGMzKSB7XG4iCi0gICAgICAgICIgICAgdmVjNCB0cyA9IHZlYzQoMS4wLCB0LCB0
ICogdCwgdCAqIHQgKiB0KTtcbiIKLSAgICAgICAgIiAgICB2ZWM0IHJlc3VsdCA9IGNvZWZmaWNp
ZW50cyAqIHRzO1xuIgotICAgICAgICAiICAgIHJldHVybiByZXN1bHQudyAqIGMwICsgcmVzdWx0
LnogKiBjMSArIHJlc3VsdC55ICogYzIgKyByZXN1bHQueCAqIGMzO1xuIgotICAgICAgICAifVxu
IgotICAgICAgICAidm9pZCBtYWluKCkge1xuIgotICAgICAgICAiICAgIHZlYzIgaW1hZ2VDb29y
ZCA9IHRleENvb3JkO1xuIgotICAgICAgICAiICAgIHZlYzIgZiA9IGZyYWN0KGltYWdlQ29vcmQg
LyBpbWFnZUluY3JlbWVudCkgLSB2ZWMyKDAuNSwgMC41KTtcbiIKLSAgICAgICAgIiAgICB2ZWM0
IHQwMCA9IHRleHR1cmUyRChpbWFnZSwgaW1hZ2VDb29yZCArIGltYWdlSW5jcmVtZW50ICogdmVj
MigtMSwgLTEpKTtcbiIKLSAgICAgICAgIiAgICB2ZWM0IHQxMCA9IHRleHR1cmUyRChpbWFnZSwg
aW1hZ2VDb29yZCArIGltYWdlSW5jcmVtZW50ICogdmVjMiggMCwgLTEpKTtcbiIKLSAgICAgICAg
IiAgICB2ZWM0IHQyMCA9IHRleHR1cmUyRChpbWFnZSwgaW1hZ2VDb29yZCArIGltYWdlSW5jcmVt
ZW50ICogdmVjMiggMSwgLTEpKTtcbiIKLSAgICAgICAgIiAgICB2ZWM0IHQzMCA9IHRleHR1cmUy
RChpbWFnZSwgaW1hZ2VDb29yZCArIGltYWdlSW5jcmVtZW50ICogdmVjMiggMiwgLTEpKTtcbiIK
LSAgICAgICAgIiAgICB2ZWM0IHQwID0gY3ViaWNCbGVuZChmLngsIHQwMCwgdDEwLCB0MjAsIHQz
MCk7XG4iCi0gICAgICAgICIgICAgdmVjNCB0MDEgPSB0ZXh0dXJlMkQoaW1hZ2UsIGltYWdlQ29v
cmQgKyBpbWFnZUluY3JlbWVudCAqIHZlYzIoLTEsIDApKTtcbiIKLSAgICAgICAgIiAgICB2ZWM0
IHQxMSA9IHRleHR1cmUyRChpbWFnZSwgaW1hZ2VDb29yZCArIGltYWdlSW5jcmVtZW50ICogdmVj
MiggMCwgMCkpO1xuIgotICAgICAgICAiICAgIHZlYzQgdDIxID0gdGV4dHVyZTJEKGltYWdlLCBp
bWFnZUNvb3JkICsgaW1hZ2VJbmNyZW1lbnQgKiB2ZWMyKCAxLCAwKSk7XG4iCi0gICAgICAgICIg
ICAgdmVjNCB0MzEgPSB0ZXh0dXJlMkQoaW1hZ2UsIGltYWdlQ29vcmQgKyBpbWFnZUluY3JlbWVu
dCAqIHZlYzIoIDIsIDApKTtcbiIKLSAgICAgICAgIiAgICB2ZWM0IHQxID0gY3ViaWNCbGVuZChm
LngsIHQwMSwgdDExLCB0MjEsIHQzMSk7XG4iCi0gICAgICAgICIgICAgdmVjNCB0MDIgPSB0ZXh0
dXJlMkQoaW1hZ2UsIGltYWdlQ29vcmQgKyBpbWFnZUluY3JlbWVudCAqIHZlYzIoLTEsIDEpKTtc
biIKLSAgICAgICAgIiAgICB2ZWM0IHQxMiA9IHRleHR1cmUyRChpbWFnZSwgaW1hZ2VDb29yZCAr
IGltYWdlSW5jcmVtZW50ICogdmVjMiggMCwgMSkpO1xuIgotICAgICAgICAiICAgIHZlYzQgdDIy
ID0gdGV4dHVyZTJEKGltYWdlLCBpbWFnZUNvb3JkICsgaW1hZ2VJbmNyZW1lbnQgKiB2ZWMyKCAx
LCAxKSk7XG4iCi0gICAgICAgICIgICAgdmVjNCB0MzIgPSB0ZXh0dXJlMkQoaW1hZ2UsIGltYWdl
Q29vcmQgKyBpbWFnZUluY3JlbWVudCAqIHZlYzIoIDIsIDEpKTtcbiIKLSAgICAgICAgIiAgICB2
ZWM0IHQyID0gY3ViaWNCbGVuZChmLngsIHQwMiwgdDEyLCB0MjIsIHQzMik7XG4iCi0gICAgICAg
ICIgICAgdmVjNCB0MDMgPSB0ZXh0dXJlMkQoaW1hZ2UsIGltYWdlQ29vcmQgKyBpbWFnZUluY3Jl
bWVudCAqIHZlYzIoLTEsIDIpKTtcbiIKLSAgICAgICAgIiAgICB2ZWM0IHQxMyA9IHRleHR1cmUy
RChpbWFnZSwgaW1hZ2VDb29yZCArIGltYWdlSW5jcmVtZW50ICogdmVjMiggMCwgMikpO1xuIgot
ICAgICAgICAiICAgIHZlYzQgdDIzID0gdGV4dHVyZTJEKGltYWdlLCBpbWFnZUNvb3JkICsgaW1h
Z2VJbmNyZW1lbnQgKiB2ZWMyKCAxLCAyKSk7XG4iCi0gICAgICAgICIgICAgdmVjNCB0MzMgPSB0
ZXh0dXJlMkQoaW1hZ2UsIGltYWdlQ29vcmQgKyBpbWFnZUluY3JlbWVudCAqIHZlYzIoIDIsIDIp
KTtcbiIKLSAgICAgICAgIiAgICB2ZWM0IHQzID0gY3ViaWNCbGVuZChmLngsIHQwMywgdDEzLCB0
MjMsIHQzMyk7XG4iCi0gICAgICAgICIgICAgZ2xfRnJhZ0NvbG9yID0gY3ViaWNCbGVuZChmLnks
IHQwLCB0MSwgdDIsIHQzKTtcbiIKLSAgICAgICAgIn1cbiI7Ci0KLSAgICB1bnNpZ25lZCBwcm9n
cmFtID0gbG9hZFByb2dyYW0oY29udGV4dCwgdmVydGV4U2hhZGVyU291cmNlLCBmcmFnbWVudFNo
YWRlclNvdXJjZSk7Ci0gICAgaWYgKCFwcm9ncmFtKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LQotICAgIHJldHVybiBhZG9wdFB0cihuZXcgQmljdWJpY1NoYWRlcihjb250ZXh0LCBwcm9ncmFt
KSk7Ci19Ci0KLXZvaWQgQmljdWJpY1NoYWRlcjo6dXNlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRleFRyYW5zZm9ybSwgY29uc3QgZmxv
YXQgY29lZmZpY2llbnRzWzE2XSwgY29uc3QgZmxvYXQgaW1hZ2VJbmNyZW1lbnRbMl0sIGZsb2F0
IGFscGhhKQotewotICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbShtX3Byb2dyYW0pOwotICAgIGZs
b2F0IG1hdHJpeFs5XTsKLSAgICBhZmZpbmVUbzN4Myh0cmFuc2Zvcm0sIG1hdHJpeCk7Ci0gICAg
bV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KG1fbWF0cml4TG9jYXRpb24sIGZhbHNlIC8qdHJh
bnNwb3NlKi8sIG1hdHJpeCwgMSAvKmNvdW50Ki8pOwotCi0gICAgZmxvYXQgdGV4TWF0cml4Wzld
OwotICAgIGFmZmluZVRvM3gzKHRleFRyYW5zZm9ybSwgdGV4TWF0cml4KTsKLSAgICBtX2NvbnRl
eHQtPnVuaWZvcm1NYXRyaXgzZnYobV90ZXhNYXRyaXhMb2NhdGlvbiwgZmFsc2UgLyp0cmFuc3Bv
c2UqLywgdGV4TWF0cml4LCAxIC8qY291bnQqLyk7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0
cml4NGZ2KG1fY29lZmZpY2llbnRzTG9jYXRpb24sIGZhbHNlIC8qdHJhbnNwb3NlKi8sIGNvbnN0
X2Nhc3Q8ZmxvYXQgKj4oY29lZmZpY2llbnRzKSwgMSAvKmNvdW50Ki8pOwotCi0gICAgbV9jb250
ZXh0LT51bmlmb3JtMmYobV9pbWFnZUluY3JlbWVudExvY2F0aW9uLCBpbWFnZUluY3JlbWVudFsw
XSwgaW1hZ2VJbmNyZW1lbnRbMV0pOwotCi0gICAgLy8gRm9yIG5vdywgd2UgYWx3YXlzIHVzZSB0
ZXh0dXJlIHVuaXQgMC4gSWYgdGhhdCBldmVyIGNoYW5nZXMsIHdlIHNob3VsZAotICAgIC8vIGV4
cG9zZSB0aGlzIHBhcmFtZXRlciB0byB0aGUgY2FsbGVyLgotICAgIG1fY29udGV4dC0+dW5pZm9y
bTFpKG1faW1hZ2VMb2NhdGlvbiwgMCk7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtMWYobV9hbHBo
YUxvY2F0aW9uLCBhbHBoYSk7Ci0KLSAgICBtX2NvbnRleHQtPnZlcnRleEF0dHJpYlBvaW50ZXIo
bV9wb3NpdGlvbkxvY2F0aW9uLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAw
LCAwKTsKLQotICAgIG1fY29udGV4dC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV9wb3NpdGlv
bkxvY2F0aW9uKTsKLX0KLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9CaWN1YmljU2hhZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvQmljdWJpY1NoYWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBmNzUyMmY0NDU3ZDNmYWM3ZmNjMTBlMWE0ZDhiOGJhMzM3MmZkNjUxLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9CaWN1YmljU2hhZGVyLmgKKysrIC9kZXYvbnVsbApAQCAt
MSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmbmRlZiBCaWN1YmljU2hhZGVyX2gKLSNkZWZpbmUgQmljdWJpY1NoYWRl
cl9oCi0KLSNpbmNsdWRlICJTaGFkZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFz
cyBCaWN1YmljU2hhZGVyIDogcHVibGljIFNoYWRlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBh
c3NPd25QdHI8QmljdWJpY1NoYWRlcj4gY3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEKik7Ci0KLSAg
ICB2b2lkIHVzZShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
IHRleFRyYW5zZm9ybSwgY29uc3QgZmxvYXQgY29lZmZpY2llbnRzWzE2XSwgY29uc3QgZmxvYXQg
aW1hZ2VJbmNyZW1lbnRbMl0sIGZsb2F0IGFscGhhKTsKLQotcHJpdmF0ZToKLSAgICBCaWN1Ymlj
U2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEKiwgdW5zaWduZWQgcHJvZ3JhbSk7Ci0KLSAgICBpbnQg
bV9tYXRyaXhMb2NhdGlvbjsKLSAgICBpbnQgbV90ZXhNYXRyaXhMb2NhdGlvbjsKLSAgICBpbnQg
bV9jb2VmZmljaWVudHNMb2NhdGlvbjsKLSAgICBpbnQgbV9pbWFnZUluY3JlbWVudExvY2F0aW9u
OwotICAgIGludCBtX2ltYWdlTG9jYXRpb247Ci0gICAgaW50IG1fYWxwaGFMb2NhdGlvbjsKLSAg
ICBpbnQgbV9wb3NpdGlvbkxvY2F0aW9uOwotfTsKLQotfQotCi0jZW5kaWYgLy8gQmljdWJpY1No
YWRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
Q29udm9sdXRpb25TaGFkZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0NvbnZvbHV0aW9uU2hhZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
ZTA4MDAyNzRmYTU4YmMzOGRlZWI4NWMxNzY5OTk5NWE1YzllNTM2NC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvQ29udm9sdXRpb25TaGFkZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTI2
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoK
LSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgot
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRf
Q0FOVkFTKQotCi0jaW5jbHVkZSAiQ29udm9sdXRpb25TaGFkZXIuaCIKLQotI2luY2x1ZGUgIkdy
YXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiU3RyaW5nRXh0cmFzLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotQ29udm9sdXRpb25TaGFkZXI6OkNvbnZvbHV0aW9uU2hhZGVyKEdyYXBo
aWNzQ29udGV4dDNEKiBjb250ZXh0LCB1bnNpZ25lZCBwcm9ncmFtLCBpbnQga2VybmVsV2lkdGgp
Ci0gICAgOiBTaGFkZXIoY29udGV4dCwgcHJvZ3JhbSkKLSAgICAsIG1fa2VybmVsV2lkdGgoa2Vy
bmVsV2lkdGgpCi0gICAgLCBtX21hdHJpeExvY2F0aW9uKGNvbnRleHQtPmdldFVuaWZvcm1Mb2Nh
dGlvbihwcm9ncmFtLCAibWF0cml4IikpCi0gICAgLCBtX3RleE1hdHJpeExvY2F0aW9uKGNvbnRl
eHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAidGV4TWF0cml4IikpCi0gICAgLCBtX2tl
cm5lbExvY2F0aW9uKGNvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAia2VybmVs
IikpCi0gICAgLCBtX2ltYWdlTG9jYXRpb24oY29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHBy
b2dyYW0sICJpbWFnZSIpKQotICAgICwgbV9pbWFnZUluY3JlbWVudExvY2F0aW9uKGNvbnRleHQt
PmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAiaW1hZ2VJbmNyZW1lbnQiKSkKLSAgICAsIG1f
cG9zaXRpb25Mb2NhdGlvbihjb250ZXh0LT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAicG9z
aXRpb24iKSkKLXsKLX0KLQotUGFzc093blB0cjxDb252b2x1dGlvblNoYWRlcj4gQ29udm9sdXRp
b25TaGFkZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgaW50IGtlcm5lbFdp
ZHRoKQotewotICAgIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJSYXcgPQotICAgICAg
ICAiI2RlZmluZSBLRVJORUxfV0lEVEggJWRcbiIKLSAgICAgICAgInVuaWZvcm0gbWF0MyBtYXRy
aXg7XG4iCi0gICAgICAgICJ1bmlmb3JtIG1hdDMgdGV4TWF0cml4O1xuIgotICAgICAgICAidW5p
Zm9ybSB2ZWMyIGltYWdlSW5jcmVtZW50O1xuIgotICAgICAgICAiYXR0cmlidXRlIHZlYzIgcG9z
aXRpb247XG4iCi0gICAgICAgICJ2YXJ5aW5nIHZlYzIgaW1hZ2VDb29yZDtcbiIKLSAgICAgICAg
InZvaWQgbWFpbigpIHtcbiIKLSAgICAgICAgIiAgICB2ZWMzIHBvcyA9IHZlYzMocG9zaXRpb24s
IDEuMCk7XG4iCi0gICAgICAgICIgICAgLy8gT2Zmc2V0IGltYWdlIGNvb3JkcyBieSBoYWxmIG9m
IGtlcm5lbCB3aWR0aCwgaW4gaW1hZ2UgdGV4ZWxzXG4iCi0gICAgICAgICIgICAgZ2xfUG9zaXRp
b24gPSB2ZWM0KG1hdHJpeCAqIHBvcywgMS4wKTtcbiIKLSAgICAgICAgIiAgICBmbG9hdCBzY2Fs
ZSA9IChmbG9hdChLRVJORUxfV0lEVEgpIC0gMS4wKSAvIDIuMDtcbiIKLSAgICAgICAgIiAgICBp
bWFnZUNvb3JkID0gKHRleE1hdHJpeCAqIHBvcykueHkgLSB2ZWMyKHNjYWxlLCBzY2FsZSkgKiBp
bWFnZUluY3JlbWVudDtcbiIKLSAgICAgICAgIn1cbiI7Ci0gICAgY2hhciB2ZXJ0ZXhTaGFkZXJT
b3VyY2VbMTAyNF07Ci0gICAgc25wcmludGYodmVydGV4U2hhZGVyU291cmNlLCBzaXplb2YodmVy
dGV4U2hhZGVyU291cmNlKSwgdmVydGV4U2hhZGVyUmF3LCBrZXJuZWxXaWR0aCk7Ci0gICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZGVyUmF3ID0KLSAgICAgICAgIiNpZmRlZiBHTF9F
U1xuIgotICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iCi0gICAgICAgICIjZW5k
aWZcbiIKLSAgICAgICAgIiNkZWZpbmUgS0VSTkVMX1dJRFRIICVkXG4iCi0gICAgICAgICJ1bmlm
b3JtIHNhbXBsZXIyRCBpbWFnZTtcbiIKLSAgICAgICAgInVuaWZvcm0gZmxvYXQga2VybmVsW0tF
Uk5FTF9XSURUSF07XG4iCi0gICAgICAgICJ1bmlmb3JtIHZlYzIgaW1hZ2VJbmNyZW1lbnQ7XG4i
Ci0gICAgICAgICJ2YXJ5aW5nIHZlYzIgaW1hZ2VDb29yZDtcbiIKLSAgICAgICAgInZvaWQgbWFp
bigpIHtcbiIKLSAgICAgICAgIiAgICB2ZWMyIGNvb3JkID0gaW1hZ2VDb29yZDtcbiIKLSAgICAg
ICAgIiAgICB2ZWM0IHN1bSA9IHZlYzQoMCwgMCwgMCwgMCk7XG4iCi0gICAgICAgICIgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBLRVJORUxfV0lEVEg7IGkrKykge1xuIgotICAgICAgICAiICAgICAg
c3VtICs9IHRleHR1cmUyRChpbWFnZSwgY29vcmQpICoga2VybmVsW2ldO1xuIgotICAgICAgICAi
ICAgICAgY29vcmQgKz0gaW1hZ2VJbmNyZW1lbnQ7XG4iCi0gICAgICAgICIgICAgfVxuIgotICAg
ICAgICAiICAgIGdsX0ZyYWdDb2xvciA9IHN1bTtcbiIKLSAgICAgICAgIn1cbiI7Ci0gICAgY2hh
ciBmcmFnbWVudFNoYWRlclNvdXJjZVsxMDI0XTsKLSAgICBzbnByaW50ZihmcmFnbWVudFNoYWRl
clNvdXJjZSwgc2l6ZW9mKGZyYWdtZW50U2hhZGVyU291cmNlKSwgZnJhZ21lbnRTaGFkZXJSYXcs
IGtlcm5lbFdpZHRoKTsKLQotICAgIHVuc2lnbmVkIHByb2dyYW0gPSBsb2FkUHJvZ3JhbShjb250
ZXh0LCB2ZXJ0ZXhTaGFkZXJTb3VyY2UsIGZyYWdtZW50U2hhZGVyU291cmNlKTsKLSAgICBpZiAo
IXByb2dyYW0pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBhZG9wdFB0cihu
ZXcgQ29udm9sdXRpb25TaGFkZXIoY29udGV4dCwgcHJvZ3JhbSwga2VybmVsV2lkdGgpKTsKLX0K
LQotdm9pZCBDb252b2x1dGlvblNoYWRlcjo6dXNlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJh
bnNmb3JtLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRleFRyYW5zZm9ybSwgY29uc3QgZmxvYXQq
IGtlcm5lbCwgaW50IGtlcm5lbFdpZHRoLCBmbG9hdCBpbWFnZUluY3JlbWVudFsyXSkKLXsKLSAg
ICBtX2NvbnRleHQtPnVzZVByb2dyYW0obV9wcm9ncmFtKTsKLSAgICBmbG9hdCBtYXRyaXhbOV07
Ci0gICAgYWZmaW5lVG8zeDModHJhbnNmb3JtLCBtYXRyaXgpOwotICAgIG1fY29udGV4dC0+dW5p
Zm9ybU1hdHJpeDNmdihtX21hdHJpeExvY2F0aW9uLCBmYWxzZSAvKnRyYW5zcG9zZSovLCBtYXRy
aXgsIDEgLypjb3VudCovKTsKLQotICAgIGZsb2F0IHRleE1hdHJpeFs5XTsKLSAgICBhZmZpbmVU
bzN4Myh0ZXhUcmFuc2Zvcm0sIHRleE1hdHJpeCk7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0
cml4M2Z2KG1fdGV4TWF0cml4TG9jYXRpb24sIGZhbHNlIC8qdHJhbnNwb3NlKi8sIHRleE1hdHJp
eCwgMSAvKmNvdW50Ki8pOwotCi0gICAgbV9jb250ZXh0LT51bmlmb3JtMmYobV9pbWFnZUluY3Jl
bWVudExvY2F0aW9uLCBpbWFnZUluY3JlbWVudFswXSwgaW1hZ2VJbmNyZW1lbnRbMV0pOwotCi0g
ICAgLy8gRm9yIG5vdywgd2UgYWx3YXlzIHVzZSB0ZXh0dXJlIHVuaXQgMC4gSWYgdGhhdCBldmVy
IGNoYW5nZXMsIHdlIHNob3VsZAotICAgIC8vIGV4cG9zZSB0aGlzIHBhcmFtZXRlciB0byB0aGUg
Y2FsbGVyLgotICAgIG1fY29udGV4dC0+dW5pZm9ybTFpKG1faW1hZ2VMb2NhdGlvbiwgMCk7Ci0g
ICAgaWYgKGtlcm5lbFdpZHRoID4gbV9rZXJuZWxXaWR0aCkKLSAgICAgICAga2VybmVsV2lkdGgg
PSBtX2tlcm5lbFdpZHRoOwotICAgIG1fY29udGV4dC0+dW5pZm9ybTFmdihtX2tlcm5lbExvY2F0
aW9uLCBjb25zdF9jYXN0PGZsb2F0Kj4oa2VybmVsKSwga2VybmVsV2lkdGgpOwotCi0gICAgbV9j
b250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKG1fcG9zaXRpb25Mb2NhdGlvbiwgMiwgR3JhcGhp
Y3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgMCk7Ci0KLSAgICBtX2NvbnRleHQtPmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KG1fcG9zaXRpb25Mb2NhdGlvbik7Ci19Ci0KLX0KLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvQ29udm9s
dXRpb25TaGFkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9Db252
b2x1dGlvblNoYWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzNlMGY1ZTJh
MjkxMGM3NzZjMWRhODJiYTQ4MTQ4OGRhYjRlOGQ2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9Db252b2x1dGlvblNoYWRlci5oCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBk
aXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgQ29udm9sdXRpb25TaGFkZXJfaAotI2RlZmluZSBDb252b2x1dGlvblNoYWRlcl9oCi0KLSNp
bmNsdWRlICJTaGFkZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDb252b2x1
dGlvblNoYWRlciA6IHB1YmxpYyBTaGFkZXIgewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzT3du
UHRyPENvbnZvbHV0aW9uU2hhZGVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqLCBpbnQga2Vy
bmVsV2lkdGgpOwotCi0gICAgdm9pZCB1c2UoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3Qg
QWZmaW5lVHJhbnNmb3JtJiB0ZXhUcmFuc2Zvcm0sIGNvbnN0IGZsb2F0KiBrZXJuZWwsIGludCBr
ZXJuZWxXaWR0aCwgZmxvYXQgaW1hZ2VJbmNyZW1lbnRbMl0pOwotCi1wcml2YXRlOgotICAgIENv
bnZvbHV0aW9uU2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEKiwgdW5zaWduZWQgcHJvZ3JhbSwgaW50
IGtlcm5lbFdpZHRoKTsKLQotICAgIGludCBtX2tlcm5lbFdpZHRoOwotICAgIGludCBtX21hdHJp
eExvY2F0aW9uOwotICAgIGludCBtX3RleE1hdHJpeExvY2F0aW9uOwotICAgIGludCBtX2tlcm5l
bExvY2F0aW9uOwotICAgIGludCBtX2ltYWdlTG9jYXRpb247Ci0gICAgaW50IG1faW1hZ2VJbmNy
ZW1lbnRMb2NhdGlvbjsKLSAgICBpbnQgbV9wb3NpdGlvbkxvY2F0aW9uOwotfTsKLQotfQotCi0j
ZW5kaWYgLy8gQ29udm9sdXRpb25TaGFkZXJfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dyYXBoaWNzQ29udGV4dEdQVS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR3JhcGhpY3NDb250ZXh0R1BVLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQzZTlhYTBlMzk5ZTBiOWQ2MmQzOWQyZTFkZGEwM2Iw
Yzk0ZDU5My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR3JhcGhpY3NDb250ZXh0R1BVLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDkzMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAy
MDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
Ci0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
Ci0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLQot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdQVS5oIgotCi0jaW5jbHVkZSAiRHJhd2luZ0J1ZmZl
ci5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiaW50ZXJuYWxfZ2x1LmgiCi0j
aW5jbHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIkxvb3BCbGlubk1hdGhVdGlscy5oIgotI2lu
Y2x1ZGUgIkxvb3BCbGlublBhdGhQcm9jZXNzb3IuaCIKLSNpbmNsdWRlICJMb29wQmxpbm5Tb2xp
ZEZpbGxTaGFkZXIuaCIKLSNpbmNsdWRlICJQYXRoLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKLSNpbmNsdWRlICJTaGFyZWRHcmFwaGljc0NvbnRleHQzRC5oIgotI2lmIFVTRShTS0lB
KQotI2luY2x1ZGUgIlNrUGF0aC5oIgotI2VuZGlmCi0jaW5jbHVkZSAiVGV4dHVyZS5oIgotCi0j
ZGVmaW5lIF9VU0VfTUFUSF9ERUZJTkVTCi0jaW5jbHVkZSA8bWF0aC5oPgotCi0jaW5jbHVkZSA8
d3RmL093bkFycmF5UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLS8vIE51bWJlciBvZiBsaW5lIHNlZ21lbnRzIHVzZWQgdG8gYXBw
cm94aW1hdGUgYmV6aWVyIGN1cnZlcy4KLWNvbnN0IGludCBwYXRoVGVzc2VsYXRpb24gPSAzMDsK
LXR5cGVkZWYgdm9pZCAoR0xBUElFTlRSWSAqVEVTU0NCKSgpOwotdHlwZWRlZiBXVEY6OlZlY3Rv
cjxmbG9hdD4gRmxvYXRWZWN0b3I7Ci10eXBlZGVmIFdURjo6VmVjdG9yPEZsb2F0UG9pbnQ+IEZs
b2F0UG9pbnRWZWN0b3I7Ci0KLXN0cnVjdCBQYXRoQW5kVHJhbnNmb3JtIHsKLSAgICBQYXRoQW5k
VHJhbnNmb3JtKGNvbnN0IFBhdGgmIHAsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdCkKLSAgICAg
ICAgOiBwYXRoKHApCi0gICAgICAgICwgdHJhbnNmb3JtKHQpCi0gICAgewotICAgIH0KLSAgICBQ
YXRoIHBhdGg7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybTsKLX07Ci0KLXN0cnVjdCBH
cmFwaGljc0NvbnRleHRHUFU6OlN0YXRlIHsKLSAgICBTdGF0ZSgpCi0gICAgICAgIDogbV9maWxs
Q29sb3IoMCwgMCwgMCwgMjU1KQotICAgICAgICAsIG1fc2hhZG93Q29sb3IoMCwgMCwgMCwgMCkK
LSAgICAgICAgLCBtX2FscGhhKDEuMGYpCi0gICAgICAgICwgbV9jb21wb3NpdGVPcChDb21wb3Np
dGVTb3VyY2VPdmVyKQotICAgICAgICAsIG1fbnVtQ2xpcHBpbmdQYXRocygwKQotICAgICAgICAs
IG1fc2hhZG93T2Zmc2V0KDAsIDApCi0gICAgICAgICwgbV9zaGFkb3dCbHVyKDApCi0gICAgICAg
ICwgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtcyhmYWxzZSkKLSAgICB7Ci0gICAgfQotICAgIFN0
YXRlKGNvbnN0IFN0YXRlJiBvdGhlcikKLSAgICAgICAgOiBtX2ZpbGxDb2xvcihvdGhlci5tX2Zp
bGxDb2xvcikKLSAgICAgICAgLCBtX3NoYWRvd0NvbG9yKG90aGVyLm1fc2hhZG93Q29sb3IpCi0g
ICAgICAgICwgbV9hbHBoYShvdGhlci5tX2FscGhhKQotICAgICAgICAsIG1fY29tcG9zaXRlT3Ao
b3RoZXIubV9jb21wb3NpdGVPcCkKLSAgICAgICAgLCBtX2N0bShvdGhlci5tX2N0bSkKLSAgICAg
ICAgLCBtX2NsaXBwaW5nUGF0aHMoKSAvLyBEb24ndCBjb3B5OyBjbGlwcGluZyBwYXRocyBhcmUg
dHJhY2tlZCBwZXItc3RhdGUuCi0gICAgICAgICwgbV9udW1DbGlwcGluZ1BhdGhzKG90aGVyLm1f
bnVtQ2xpcHBpbmdQYXRocykKLSAgICAgICAgLCBtX3NoYWRvd09mZnNldChvdGhlci5tX3NoYWRv
d09mZnNldCkKLSAgICAgICAgLCBtX3NoYWRvd0JsdXIob3RoZXIubV9zaGFkb3dCbHVyKQotICAg
ICAgICAsIG1fc2hhZG93c0lnbm9yZVRyYW5zZm9ybXMob3RoZXIubV9zaGFkb3dzSWdub3JlVHJh
bnNmb3JtcykKLSAgICB7Ci0gICAgfQotICAgIENvbG9yIG1fZmlsbENvbG9yOwotICAgIENvbG9y
IG1fc2hhZG93Q29sb3I7Ci0gICAgZmxvYXQgbV9hbHBoYTsKLSAgICBDb21wb3NpdGVPcGVyYXRv
ciBtX2NvbXBvc2l0ZU9wOwotICAgIEFmZmluZVRyYW5zZm9ybSBtX2N0bTsKLSAgICBXVEY6OlZl
Y3RvcjxQYXRoQW5kVHJhbnNmb3JtPiBtX2NsaXBwaW5nUGF0aHM7Ci0gICAgaW50IG1fbnVtQ2xp
cHBpbmdQYXRoczsKLSAgICBGbG9hdFNpemUgbV9zaGFkb3dPZmZzZXQ7Ci0gICAgZmxvYXQgbV9z
aGFkb3dCbHVyOwotICAgIGJvb2wgbV9zaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKLQotICAgIC8v
IEhlbHBlciBmdW5jdGlvbiBmb3IgYXBwbHlpbmcgdGhlIHN0YXRlJ3MgYWxwaGEgdmFsdWUgdG8g
dGhlIGdpdmVuIGlucHV0Ci0gICAgLy8gY29sb3IgdG8gcHJvZHVjZSBhIG5ldyBvdXRwdXQgY29s
b3IuIFRoZSBsb2dpYyBpcyB0aGUgc2FtZSBhcwotICAgIC8vIFBsYXRmb3JtQ29udGV4dFNraWE6
OlN0YXRlOjphcHBseUFscGhhKCksIGJ1dCB0aGUgdHlwZSBpcyBkaWZmZXJlbnQuCi0gICAgQ29s
b3IgYXBwbHlBbHBoYShjb25zdCBDb2xvciYgYykKLSAgICB7Ci0gICAgICAgIGludCBzID0gcm91
bmRmKG1fYWxwaGEgKiAyNTYpOwotICAgICAgICBpZiAocyA+PSAyNTYpCi0gICAgICAgICAgICBy
ZXR1cm4gYzsKLSAgICAgICAgaWYgKHMgPCAwKQotICAgICAgICAgICAgcmV0dXJuIENvbG9yKCk7
Ci0KLSAgICAgICAgaW50IGEgPSAoYy5hbHBoYSgpICogcykgPj4gODsKLSAgICAgICAgcmV0dXJu
IENvbG9yKGMucmVkKCksIGMuZ3JlZW4oKSwgYy5ibHVlKCksIGEpOwotICAgIH0KLSAgICBib29s
IHNoYWRvd0FjdGl2ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zaGFkb3dDb2xv
ci5hbHBoYSgpID4gMCAmJiAobV9zaGFkb3dCbHVyIHx8IG1fc2hhZG93T2Zmc2V0LndpZHRoKCkg
fHwgbV9zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOwotICAgIH0KLSAgICBib29sIGNsaXBwaW5nRW5h
YmxlZCgpIHsgcmV0dXJuIG1fbnVtQ2xpcHBpbmdQYXRocyA+IDA7IH0KLX07Ci0KLXN0YXRpYyBp
bmxpbmUgRmxvYXRQb2ludCBvcGVyYXRvciooY29uc3QgRmxvYXRQb2ludCYgZiwgZmxvYXQgc2Nh
bGUpCi17Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQoZi54KCkgKiBzY2FsZSwgZi55KCkgKiBzY2Fs
ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRmxvYXRQb2ludCBvcGVyYXRvciooZmxvYXQgc2NhbGUs
IGNvbnN0IEZsb2F0UG9pbnQmIGYpCi17Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQoZi54KCkgKiBz
Y2FsZSwgZi55KCkgKiBzY2FsZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRmxvYXRTaXplIG9wZXJh
dG9yKihjb25zdCBGbG9hdFNpemUmIGYsIGZsb2F0IHNjYWxlKQotewotICAgIHJldHVybiBGbG9h
dFNpemUoZi53aWR0aCgpICogc2NhbGUsIGYuaGVpZ2h0KCkgKiBzY2FsZSk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgRmxvYXRTaXplIG9wZXJhdG9yKihmbG9hdCBzY2FsZSwgY29uc3QgRmxvYXRTaXpl
JiBmKQotewotICAgIHJldHVybiBGbG9hdFNpemUoZi53aWR0aCgpICogc2NhbGUsIGYuaGVpZ2h0
KCkgKiBzY2FsZSk7Ci19Ci0KLWNsYXNzIFF1YWRyYXRpYyB7Ci0gIHB1YmxpYzoKLSAgICBRdWFk
cmF0aWMoRmxvYXRQb2ludCBhLCBGbG9hdFBvaW50IGIsIEZsb2F0UG9pbnQgYykgOgotICAgICAg
ICBtX2EoYSksIG1fYihiKSwgbV9jKGMpCi0gICAgewotICAgIH0KLSAgICBzdGF0aWMgUXVhZHJh
dGljIGZyb21CZXppZXIoRmxvYXRQb2ludCBwMCwgRmxvYXRQb2ludCBwMSwgRmxvYXRQb2ludCBw
MikKLSAgICB7Ci0gICAgICAgIEZsb2F0U2l6ZSBwMXMocDEueCgpLCBwMS55KCkpOwotICAgICAg
ICBGbG9hdFNpemUgcDJzKHAyLngoKSwgcDIueSgpKTsKLSAgICAgICAgRmxvYXRQb2ludCBiID0g
LTIuMGYgKiBwMCArIDIuMGYgKiBwMXM7Ci0gICAgICAgIEZsb2F0UG9pbnQgYyA9ICAgICAgICAg
cDAgLSAyLjBmICogcDFzICsgcDJzOwotICAgICAgICByZXR1cm4gUXVhZHJhdGljKHAwLCBiLCBj
KTsKLSAgICB9Ci0gICAgaW5saW5lIEZsb2F0UG9pbnQgZXZhbHVhdGUoZmxvYXQgdCkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBtX2EgKyB0ICogKG1fYiArIHQgKiBtX2MpOwotICAgIH0KLSAgICBG
bG9hdFBvaW50IG1fYSwgbV9iLCBtX2MsIG1fZDsKLX07Ci0KLWNsYXNzIEN1YmljIHsKLSAgcHVi
bGljOgotICAgIEN1YmljKEZsb2F0UG9pbnQgYSwgRmxvYXRQb2ludCBiLCBGbG9hdFBvaW50IGMs
IEZsb2F0UG9pbnQgZCkgOgotICAgICAgICBtX2EoYSksIG1fYihiKSwgbV9jKGMpLCBtX2QoZCkg
Ci0gICAgewotICAgIH0KLSAgICBzdGF0aWMgQ3ViaWMgZnJvbUJlemllcihGbG9hdFBvaW50IHAw
LCBGbG9hdFBvaW50IHAxLCBGbG9hdFBvaW50IHAyLCBGbG9hdFBvaW50IHAzKQotICAgIHsKLSAg
ICAgICAgRmxvYXRTaXplIHAxcyhwMS54KCksIHAxLnkoKSk7Ci0gICAgICAgIEZsb2F0U2l6ZSBw
MnMocDIueCgpLCBwMi55KCkpOwotICAgICAgICBGbG9hdFNpemUgcDNzKHAzLngoKSwgcDMueSgp
KTsKLSAgICAgICAgRmxvYXRQb2ludCBiID0gLTMuMGYgKiBwMCArIDMuMGYgKiBwMXM7Ci0gICAg
ICAgIEZsb2F0UG9pbnQgYyA9ICAzLjBmICogcDAgLSA2LjBmICogcDFzICsgMy4wZiAqIHAyczsK
LSAgICAgICAgRmxvYXRQb2ludCBkID0gLTEuMGYgKiBwMCArIDMuMGYgKiBwMXMgLSAzLjBmICog
cDJzICsgcDNzOwotICAgICAgICByZXR1cm4gQ3ViaWMocDAsIGIsIGMsIGQpOwotICAgIH0KLSAg
ICBpbmxpbmUgRmxvYXRQb2ludCBldmFsdWF0ZShmbG9hdCB0KQotICAgIHsKLSAgICAgICAgcmV0
dXJuIG1fYSArIHQgKiAobV9iICsgdCAqIChtX2MgKyB0ICogbV9kKSk7Ci0gICAgfQotICAgIEZs
b2F0UG9pbnQgbV9hLCBtX2IsIG1fYywgbV9kOwotfTsKLQotR3JhcGhpY3NDb250ZXh0R1BVOjpH
cmFwaGljc0NvbnRleHRHUFUoU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIERyYXdp
bmdCdWZmZXIqIGRyYXdpbmdCdWZmZXIsIGNvbnN0IEludFNpemUmIHNpemUpCi0gICAgOiBtX3Np
emUoc2l6ZSkKLSAgICAsIG1fY29udGV4dChjb250ZXh0KQotICAgICwgbV9kcmF3aW5nQnVmZmVy
KGRyYXdpbmdCdWZmZXIpCi0gICAgLCBtX3N0YXRlKDApCi0gICAgLCBtX3BhdGhJbmRleEJ1ZmZl
cigwKQotICAgICwgbV9wYXRoVmVydGV4QnVmZmVyKDApCi17Ci0gICAgbV9mbGlwTWF0cml4LnRy
YW5zbGF0ZSgtMS4wZiwgMS4wZik7Ci0gICAgbV9mbGlwTWF0cml4LnNjYWxlKDIuMGYgLyBzaXpl
LndpZHRoKCksIC0yLjBmIC8gc2l6ZS5oZWlnaHQoKSk7Ci0KLSAgICBtX3N0YXRlU3RhY2suYXBw
ZW5kKFN0YXRlKCkpOwotICAgIG1fc3RhdGUgPSAmbV9zdGF0ZVN0YWNrLmxhc3QoKTsKLX0KLQot
R3JhcGhpY3NDb250ZXh0R1BVOjp+R3JhcGhpY3NDb250ZXh0R1BVKCkKLXsKLSAgICBpZiAobV9w
YXRoSW5kZXhCdWZmZXIpCi0gICAgICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+
ZGVsZXRlQnVmZmVyKG1fcGF0aEluZGV4QnVmZmVyKTsKLSAgICBpZiAobV9wYXRoVmVydGV4QnVm
ZmVyKQotICAgICAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmRlbGV0ZUJ1ZmZl
cihtX3BhdGhWZXJ0ZXhCdWZmZXIpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6Ymlu
ZEZyYW1lYnVmZmVyKCkKLXsKLSAgICBtX2RyYXdpbmdCdWZmZXItPmJpbmQoKTsKLX0KLQotdm9p
ZCBHcmFwaGljc0NvbnRleHRHUFU6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17
Ci0gICAgYmluZEZyYW1lYnVmZmVyKCk7Ci0gICAgaWYgKG1fc3RhdGUtPm1fY3RtLmlzSWRlbnRp
dHkoKSAmJiAhbV9zdGF0ZS0+Y2xpcHBpbmdFbmFibGVkKCkpIHsKLSAgICAgICAgc2Npc3NvckNs
ZWFyKHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAg
ICB9IGVsc2UgewotICAgICAgICBzYXZlKCk7Ci0gICAgICAgIHNldENvbXBvc2l0ZU9wZXJhdGlv
bihDb21wb3NpdGVDbGVhcik7Ci0gICAgICAgIGZpbGxSZWN0KHJlY3QsIENvbG9yKFJHQkEzMigw
KSksIENvbG9yU3BhY2VEZXZpY2VSR0IpOwotICAgICAgICByZXN0b3JlKCk7Ci0gICAgfQotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6YXBwbHlTdGF0ZSgpCi17Ci0gICAgYmluZEZyYW1l
YnVmZmVyKCk7Ci0gICAgbV9jb250ZXh0LT5hcHBseUNvbXBvc2l0ZU9wZXJhdG9yKG1fc3RhdGUt
Pm1fY29tcG9zaXRlT3ApOwotICAgIGFwcGx5Q2xpcHBpbmcobV9zdGF0ZS0+Y2xpcHBpbmdFbmFi
bGVkKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6c2Npc3NvckNsZWFyKGZsb2F0
IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpCi17Ci0gICAgaW50IGludFgg
PSBzdGF0aWNfY2FzdDxpbnQ+KHggKyAwLjVmKTsKLSAgICBpbnQgaW50WSA9IHN0YXRpY19jYXN0
PGludD4oeSArIDAuNWYpOwotICAgIGludCBpbnRXaWR0aCA9IHN0YXRpY19jYXN0PGludD4oeCAr
IHdpZHRoICsgMC41ZikgLSBpbnRYOwotICAgIGludCBpbnRIZWlnaHQgPSBzdGF0aWNfY2FzdDxp
bnQ+KHkgKyBoZWlnaHQgKyAwLjVmKSAtIGludFk7Ci0gICAgbV9jb250ZXh0LT5zY2lzc29yKGlu
dFgsIG1fc2l6ZS5oZWlnaHQoKSAtIGludEhlaWdodCAtIGludFksIGludFdpZHRoLCBpbnRIZWln
aHQpOwotICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTQ0lTU09SX1RF
U1QpOwotICAgIG1fY29udGV4dC0+Y2xlYXJDb2xvcihDb2xvcihSR0JBMzIoMCkpKTsKLSAgICBt
X2NvbnRleHQtPmNsZWFyKEdyYXBoaWNzQ29udGV4dDNEOjpDT0xPUl9CVUZGRVJfQklUKTsKLSAg
ICBtX2NvbnRleHQtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OlNDSVNTT1JfVEVTVCk7Ci19
Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R1BVOjpmaWxsUGF0aChjb25zdCBQYXRoJiBwYXRoKQot
ewotICAgIGlmIChtX3N0YXRlLT5zaGFkb3dBY3RpdmUoKSkgewotICAgICAgICBiZWdpblNoYWRv
d0RyYXcoKTsKLSAgICAgICAgZmlsbFBhdGhJbnRlcm5hbChwYXRoLCBtX3N0YXRlLT5tX3NoYWRv
d0NvbG9yKTsKLSAgICAgICAgZW5kU2hhZG93RHJhdyhwYXRoLmJvdW5kaW5nUmVjdCgpKTsKLSAg
ICB9Ci0KLSAgICBhcHBseVN0YXRlKCk7Ci0gICAgZmlsbFBhdGhJbnRlcm5hbChwYXRoLCBtX3N0
YXRlLT5hcHBseUFscGhhKG1fc3RhdGUtPm1fZmlsbENvbG9yKSk7Ci19Ci0KLXZvaWQgR3JhcGhp
Y3NDb250ZXh0R1BVOjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9y
JiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotewotICAgIGlmIChtX3N0YXRlLT5zaGFk
b3dBY3RpdmUoKSkgewotICAgICAgICBiZWdpblNoYWRvd0RyYXcoKTsKLSAgICAgICAgZmlsbFJl
Y3RJbnRlcm5hbChyZWN0LCBtX3N0YXRlLT5tX3NoYWRvd0NvbG9yKTsKLSAgICAgICAgZW5kU2hh
ZG93RHJhdyhyZWN0KTsKLSAgICB9Ci0KLSAgICBhcHBseVN0YXRlKCk7Ci0gICAgZmlsbFJlY3RJ
bnRlcm5hbChyZWN0LCBjb2xvcik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R1BVOjpmaWxs
UmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCi17Ci0gICAgZmlsbFJlY3QocmVjdCwgbV9zdGF0
ZS0+YXBwbHlBbHBoYShtX3N0YXRlLT5tX2ZpbGxDb2xvciksIENvbG9yU3BhY2VEZXZpY2VSR0Ip
OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6ZmlsbFJlY3RJbnRlcm5hbChjb25zdCBG
bG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBBZmZpbmVUcmFuc2Zv
cm0gbWF0cml4KG1fZmxpcE1hdHJpeCk7Ci0gICAgbWF0cml4ICo9IG1fc3RhdGUtPm1fY3RtOwot
ICAgIG1hdHJpeC50cmFuc2xhdGUocmVjdC54KCksIHJlY3QueSgpKTsKLSAgICBtYXRyaXguc2Nh
bGUocmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLQotICAgIG1fY29udGV4dC0+dXNlUXVh
ZFZlcnRpY2VzKCk7Ci0gICAgbV9jb250ZXh0LT51c2VGaWxsU29saWRQcm9ncmFtKG1hdHJpeCwg
Y29sb3IpOwotICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJ
QU5HTEVfU1RSSVAsIDAsIDQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6c2V0Rmls
bENvbG9yKGNvbnN0IENvbG9yJiBjb2xvciwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotewotICAg
IG1fc3RhdGUtPm1fZmlsbENvbG9yID0gY29sb3I7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0
R1BVOjpzZXRBbHBoYShmbG9hdCBhbHBoYSkKLXsKLSAgICBtX3N0YXRlLT5tX2FscGhhID0gYWxw
aGE7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R1BVOjpzZXRTaGFkb3dDb2xvcihjb25zdCBD
b2xvciYgY29sb3IsIENvbG9yU3BhY2UpCi17Ci0gICAgbV9zdGF0ZS0+bV9zaGFkb3dDb2xvciA9
IGNvbG9yOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6c2V0U2hhZG93T2Zmc2V0KGNv
bnN0IEZsb2F0U2l6ZSYgb2Zmc2V0KQotewotICAgIG1fc3RhdGUtPm1fc2hhZG93T2Zmc2V0ID0g
b2Zmc2V0OwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6c2V0U2hhZG93Qmx1cihmbG9h
dCBzaGFkb3dCbHVyKQotewotICAgIG1fc3RhdGUtPm1fc2hhZG93Qmx1ciA9IHNoYWRvd0JsdXI7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R1BVOjpzZXRTaGFkb3dzSWdub3JlVHJhbnNmb3Jt
cyhib29sIHNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKQotewotICAgIG1fc3RhdGUtPm1fc2hhZG93
c0lnbm9yZVRyYW5zZm9ybXMgPSBzaGFkb3dzSWdub3JlVHJhbnNmb3JtczsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHRHUFU6OnRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KQotewotICAgIG1f
c3RhdGUtPm1fY3RtLnRyYW5zbGF0ZSh4LCB5KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRH
UFU6OnJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucykKLXsKLSAgICBtX3N0YXRlLT5tX2N0bS5y
b3RhdGUoYW5nbGVJblJhZGlhbnMgKiAoMTgwLjBmIC8gTV9QSSkpOwotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdQVTo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQotewotICAgIG1fc3Rh
dGUtPm1fY3RtLnNjYWxlKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7Ci19Ci0KLXZvaWQg
R3JhcGhpY3NDb250ZXh0R1BVOjpjb25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBhZmZp
bmUpCi17Ci0gICAgbV9zdGF0ZS0+bV9jdG0gKj0gYWZmaW5lOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dEdQVTo6c2V0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lKQotewotICAg
IG1fc3RhdGUtPm1fY3RtID0gYWZmaW5lOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6
Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKLXsKLSAgICBiaW5kRnJhbWVidWZmZXIoKTsKLSAg
ICBjaGVja0dMRXJyb3IoImJpbmRGcmFtZWJ1ZmZlciIpOwotICAgIGJlZ2luU3RlbmNpbERyYXco
R3JhcGhpY3NDb250ZXh0M0Q6OklOQ1IpOwotICAgIC8vIFJlZCBpcyB1c2VkIHNvIHdlIGNhbiBz
ZWUgaXQgaWYgaXQgZW5kcyB1cCBpbiB0aGUgY29sb3IgYnVmZmVyLgotICAgIENvbG9yIHJlZCgy
NTUsIDAsIDAsIDI1NSk7Ci0gICAgZmlsbFBhdGhJbnRlcm5hbChwYXRoLCByZWQpOwotICAgIG1f
c3RhdGUtPm1fY2xpcHBpbmdQYXRocy5hcHBlbmQoUGF0aEFuZFRyYW5zZm9ybShwYXRoLCBtX3N0
YXRlLT5tX2N0bSkpOwotICAgIG1fc3RhdGUtPm1fbnVtQ2xpcHBpbmdQYXRocysrOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6Y2xpcE91dChjb25zdCBQYXRoJiBwYXRoKQotewotICAg
IEFTU0VSVCghImNsaXBPdXQgaXMgdW5zdXBwb3J0ZWQgaW4gR3JhcGhpY3NDb250ZXh0R1BVLlxu
Iik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R1BVOjpzYXZlKCkKLXsKLSAgICBtX3N0YXRl
U3RhY2suYXBwZW5kKFN0YXRlKG1fc3RhdGVTdGFjay5sYXN0KCkpKTsKLSAgICBtX3N0YXRlID0g
Jm1fc3RhdGVTdGFjay5sYXN0KCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R1BVOjpyZXN0
b3JlKCkKLXsKLSAgICBBU1NFUlQoIW1fc3RhdGVTdGFjay5pc0VtcHR5KCkpOwotICAgIGNvbnN0
IFZlY3RvcjxQYXRoQW5kVHJhbnNmb3JtPiYgY2xpcHBpbmdQYXRocyA9IG1fc3RhdGUtPm1fY2xp
cHBpbmdQYXRoczsKLSAgICBpZiAoIWNsaXBwaW5nUGF0aHMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IGJlZ2luU3RlbmNpbERyYXcoR3JhcGhpY3NDb250ZXh0M0Q6OkRFQ1IpOwotICAgICAgICBXVEY6
OlZlY3RvcjxQYXRoQW5kVHJhbnNmb3JtPjo6Y29uc3RfaXRlcmF0b3IgcGF0aEl0ZXI7Ci0gICAg
ICAgIGZvciAocGF0aEl0ZXIgPSBjbGlwcGluZ1BhdGhzLmJlZ2luKCk7IHBhdGhJdGVyIDwgY2xp
cHBpbmdQYXRocy5lbmQoKTsgKytwYXRoSXRlcikgewotICAgICAgICAgICAgbV9zdGF0ZS0+bV9j
dG0gPSBwYXRoSXRlci0+dHJhbnNmb3JtOwotICAgICAgICAgICAgLy8gUmVkIGlzIHVzZWQgc28g
d2UgY2FuIHNlZSBpdCBpZiBpdCBlbmRzIHVwIGluIHRoZSBjb2xvciBidWZmZXIuCi0gICAgICAg
ICAgICBDb2xvciByZWQoMjU1LCAwLCAwLCAyNTUpOwotICAgICAgICAgICAgZmlsbFBhdGhJbnRl
cm5hbChwYXRoSXRlci0+cGF0aCwgcmVkKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBtX3N0YXRl
U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgIG1fc3RhdGUgPSAmbV9zdGF0ZVN0YWNrLmxhc3QoKTsK
LX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHUFU6OmRyYXdUZXh0dXJlZFJlY3QodW5zaWduZWQg
dGV4dHVyZSwgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UsIENv
bXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQotewotICAgIGJpbmRGcmFtZWJ1ZmZlcigpOwot
ICAgIG1fY29udGV4dC0+YXBwbHlDb21wb3NpdGVPcGVyYXRvcihjb21wb3NpdGVPcCk7Ci0gICAg
YXBwbHlDbGlwcGluZyhmYWxzZSk7Ci0KLSAgICBtX2NvbnRleHQtPnNldEFjdGl2ZVRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKLQotICAgIG1fY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1cmUpOwotCi0gICAgZHJhd1Rl
eHR1cmVkUXVhZCh0ZXh0dXJlU2l6ZSwgc3JjUmVjdCwgZHN0UmVjdCwgbV9zdGF0ZS0+bV9jdG0s
IG1fc3RhdGUtPm1fYWxwaGEpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6ZHJhd1Rl
eHR1cmVkUmVjdChUZXh0dXJlKiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNv
bnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgQ29sb3JTcGFjZSBjb2xvclNwYWNlLCBDb21wb3NpdGVP
cGVyYXRvciBjb21wb3NpdGVPcCkKLXsKLSAgICBkcmF3VGV4dHVyZWRSZWN0KHRleHR1cmUsIHNy
Y1JlY3QsIGRzdFJlY3QsIG1fc3RhdGUtPm1fY3RtLCBtX3N0YXRlLT5tX2FscGhhLCBjb2xvclNw
YWNlLCBjb21wb3NpdGVPcCwgbV9zdGF0ZS0+Y2xpcHBpbmdFbmFibGVkKCkpOwotfQotCi0KLXZv
aWQgR3JhcGhpY3NDb250ZXh0R1BVOjpkcmF3VGV4dHVyZWRSZWN0KFRleHR1cmUqIHRleHR1cmUs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25z
dCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgZmxvYXQgYWxwaGEsIENvbG9yU3BhY2UgY29s
b3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIGJvb2wgY2xpcCkKLXsKLSAg
ICBiaW5kRnJhbWVidWZmZXIoKTsKLSAgICBtX2NvbnRleHQtPmFwcGx5Q29tcG9zaXRlT3BlcmF0
b3IoY29tcG9zaXRlT3ApOwotICAgIGFwcGx5Q2xpcHBpbmcoY2xpcCk7Ci0gICAgY29uc3QgVGls
aW5nRGF0YSYgdGlsZXMgPSB0ZXh0dXJlLT50aWxlcygpOwotICAgIEludFJlY3QgdGlsZUlkeFJl
Y3QgPSB0aWxlcy5vdmVybGFwcGVkVGlsZUluZGljZXMoc3JjUmVjdCk7Ci0KLSAgICBtX2NvbnRl
eHQtPnNldEFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKLQotICAg
IGZvciAoaW50IHkgPSB0aWxlSWR4UmVjdC55KCk7IHkgPD0gdGlsZUlkeFJlY3QubWF4WSgpOyB5
KyspIHsKLSAgICAgICAgZm9yIChpbnQgeCA9IHRpbGVJZHhSZWN0LngoKTsgeCA8PSB0aWxlSWR4
UmVjdC5tYXhYKCk7IHgrKykKLSAgICAgICAgICAgIGRyYXdUZXh0dXJlZFJlY3RUaWxlKHRleHR1
cmUsIHRpbGVzLnRpbGVJbmRleCh4LCB5KSwgc3JjUmVjdCwgZHN0UmVjdCwgdHJhbnNmb3JtLCBh
bHBoYSk7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6ZHJhd1RleHR1cmVk
UmVjdFRpbGUoVGV4dHVyZSogdGV4dHVyZSwgaW50IHRpbGUsIGNvbnN0IEZsb2F0UmVjdCYgc3Jj
UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRy
YW5zZm9ybSwgZmxvYXQgYWxwaGEpCi17Ci0gICAgaWYgKGRzdFJlY3QuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBjb25zdCBUaWxpbmdEYXRhJiB0aWxlcyA9IHRleHR1cmUtPnRp
bGVzKCk7Ci0KLSAgICB0ZXh0dXJlLT5iaW5kVGlsZSh0aWxlKTsKLQotICAgIEZsb2F0UmVjdCBz
cmNSZWN0Q2xpcHBlZEluVGlsZVNwYWNlOwotICAgIEZsb2F0UmVjdCBkc3RSZWN0SW50ZXJzZWN0
ZWQ7Ci0gICAgdGlsZXMuaW50ZXJzZWN0RHJhd1F1YWQoc3JjUmVjdCwgZHN0UmVjdCwgdGlsZSwg
JnNyY1JlY3RDbGlwcGVkSW5UaWxlU3BhY2UsICZkc3RSZWN0SW50ZXJzZWN0ZWQpOwotCi0gICAg
SW50UmVjdCB0aWxlQm91bmRzV2l0aEJvcmRlciA9IHRpbGVzLnRpbGVCb3VuZHNXaXRoQm9yZGVy
KHRpbGUpOwotCi0gICAgZHJhd1RleHR1cmVkUXVhZCh0aWxlQm91bmRzV2l0aEJvcmRlci5zaXpl
KCksIHNyY1JlY3RDbGlwcGVkSW5UaWxlU3BhY2UsIGRzdFJlY3RJbnRlcnNlY3RlZCwgdHJhbnNm
b3JtLCBhbHBoYSk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R1BVOjpjb252b2x2ZVJlY3Qo
dW5zaWduZWQgdGV4dHVyZSwgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0
UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBmbG9hdCBpbWFnZUluY3Jl
bWVudFsyXSwgY29uc3QgZmxvYXQqIGtlcm5lbCwgaW50IGtlcm5lbFdpZHRoKQotewotICAgIG1f
Y29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHRleHR1
cmUpOwotICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVY
VFVSRV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfV1JBUF9TLCBHcmFwaGljc0NvbnRl
eHQzRDo6Q0xBTVBfVE9fRURHRSk7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9XUkFQ
X1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBtX2NvbnRleHQtPnRl
eFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpORUFSRVNUKTsKLSAg
ICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQs
IEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNE
OjpORUFSRVNUKTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXgobV9mbGlwTWF0cml4KTsK
LSAgICBtYXRyaXgudHJhbnNsYXRlKGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7Ci0gICAgbWF0
cml4LnNjYWxlKGRzdFJlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBBZmZp
bmVUcmFuc2Zvcm0gdGV4TWF0cml4OwotICAgIHRleE1hdHJpeC5zY2FsZSgxLjBmIC8gdGV4dHVy
ZVNpemUud2lkdGgoKSwgMS4wZiAvIHRleHR1cmVTaXplLmhlaWdodCgpKTsKLSAgICB0ZXhNYXRy
aXgudHJhbnNsYXRlKHNyY1JlY3QueCgpLCBzcmNSZWN0LnkoKSk7Ci0gICAgdGV4TWF0cml4LnNj
YWxlKHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSk7Ci0KLSAgICBtX2NvbnRleHQt
PnVzZVF1YWRWZXJ0aWNlcygpOwotICAgIG1fY29udGV4dC0+dXNlQ29udm9sdXRpb25Qcm9ncmFt
KG1hdHJpeCwgdGV4TWF0cml4LCBrZXJuZWwsIGtlcm5lbFdpZHRoLCBpbWFnZUluY3JlbWVudCk7
Ci0gICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklBTkdMRV9T
VFJJUCwgMCwgNCk7Ci0gICAgY2hlY2tHTEVycm9yKCJnbERyYXdBcnJheXMiKTsKLX0KLQotc3Rh
dGljIGZsb2F0IGdhdXNzKGZsb2F0IHgsIGZsb2F0IHNpZ21hKQotewotICAgIHJldHVybiBleHAo
LSAoeCAqIHgpIC8gKDIuMGYgKiBzaWdtYSAqIHNpZ21hKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGJ1
aWxkS2VybmVsKGZsb2F0IHNpZ21hLCBmbG9hdCoga2VybmVsLCBpbnQga2VybmVsV2lkdGgpCi17
Ci0gICAgZmxvYXQgaGFsZldpZHRoID0gKGtlcm5lbFdpZHRoIC0gMS4wZikgLyAyLjBmOwotICAg
IGZsb2F0IHN1bSA9IDAuMGY7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBrZXJuZWxXaWR0aDsg
KytpKSB7Ci0gICAgICAgIGtlcm5lbFtpXSA9IGdhdXNzKGkgLSBoYWxmV2lkdGgsIHNpZ21hKTsK
LSAgICAgICAgc3VtICs9IGtlcm5lbFtpXTsKLSAgICB9Ci0gICAgLy8gTm9ybWFsaXplIHRoZSBr
ZXJuZWwKLSAgICBmbG9hdCBzY2FsZSA9IDEuMGYgLyBzdW07Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBrZXJuZWxXaWR0aDsgKytpKQotICAgICAgICBrZXJuZWxbaV0gKj0gc2NhbGU7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R1BVOjpkcmF3VGV4dHVyZWRRdWFkKGNvbnN0IEludFNpemUm
IHRleHR1cmVTaXplLCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYg
ZHN0UmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFuc2Zvcm0sIGZsb2F0IGFscGhhKQot
ewotICAgIEFmZmluZVRyYW5zZm9ybSBtYXRyaXgobV9mbGlwTWF0cml4KTsKLSAgICBtYXRyaXgg
Kj0gdHJhbnNmb3JtOwotICAgIG1hdHJpeC50cmFuc2xhdGUoZHN0UmVjdC54KCksIGRzdFJlY3Qu
eSgpKTsKLSAgICBtYXRyaXguc2NhbGUoZHN0UmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgp
KTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSB0ZXhNYXRyaXg7Ci0gICAgdGV4TWF0cml4LnNjYWxl
KDEuMGYgLyB0ZXh0dXJlU2l6ZS53aWR0aCgpLCAxLjBmIC8gdGV4dHVyZVNpemUuaGVpZ2h0KCkp
OwotICAgIHRleE1hdHJpeC50cmFuc2xhdGUoc3JjUmVjdC54KCksIHNyY1JlY3QueSgpKTsKLSAg
ICB0ZXhNYXRyaXguc2NhbGUoc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpKTsKLQot
ICAgIG1fY29udGV4dC0+dXNlUXVhZFZlcnRpY2VzKCk7Ci0gICAgbV9jb250ZXh0LT51c2VUZXh0
dXJlUHJvZ3JhbShtYXRyaXgsIHRleE1hdHJpeCwgYWxwaGEpOwotICAgIG1fY29udGV4dC0+ZHJh
d0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfU1RSSVAsIDAsIDQpOwotICAgIGNo
ZWNrR0xFcnJvcigiZ2xEcmF3QXJyYXlzIik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0R1BV
OjpkcmF3VGV4dHVyZWRRdWFkTWl0Y2hlbGwoY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNv
bnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgZmxvYXQgYWxwaGEpCi17Ci0gICAgc3RhdGljIGNv
bnN0IGZsb2F0IG1pdGNoZWxsQ29lZmZpY2llbnRzWzE2XSA9IHsKLSAgICAgICAgIDAuMGYgLyAx
OC4wZiwgICAxLjBmIC8gMTguMGYsICAxNi4wZiAvIDE4LjBmLCAgIDEuMGYgLyAxOC4wZiwKLSAg
ICAgICAgIDAuMGYgLyAxOC4wZiwgICA5LjBmIC8gMTguMGYsICAgMC4wZiAvIDE4LjBmLCAgLTku
MGYgLyAxOC4wZiwKLSAgICAgICAgLTYuMGYgLyAxOC4wZiwgIDI3LjBmIC8gMTguMGYsIC0zNi4w
ZiAvIDE4LjBmLCAgMTUuMGYgLyAxOC4wZiwKLSAgICAgICAgIDcuMGYgLyAxOC4wZiwgLTIxLjBm
IC8gMTguMGYsICAyMS4wZiAvIDE4LjBmLCAgLTcuMGYgLyAxOC4wZiwKLSAgICB9OwotCi0gICAg
QWZmaW5lVHJhbnNmb3JtIG1hdHJpeChtX2ZsaXBNYXRyaXgpOwotICAgIG1hdHJpeCAqPSB0cmFu
c2Zvcm07Ci0gICAgbWF0cml4LnRyYW5zbGF0ZShkc3RSZWN0LngoKSwgZHN0UmVjdC55KCkpOwot
ICAgIG1hdHJpeC5zY2FsZShkc3RSZWN0LndpZHRoKCksIGRzdFJlY3QuaGVpZ2h0KCkpOwotCi0g
ICAgZmxvYXQgaW1hZ2VJbmNyZW1lbnRbMl0gPSB7IDEuMGYgLyB0ZXh0dXJlU2l6ZS53aWR0aCgp
LCAxLjBmIC8gdGV4dHVyZVNpemUuaGVpZ2h0KCkgfTsKLQotICAgIEFmZmluZVRyYW5zZm9ybSB0
ZXhNYXRyaXg7Ci0gICAgdGV4TWF0cml4LnNjYWxlKGltYWdlSW5jcmVtZW50WzBdLCBpbWFnZUlu
Y3JlbWVudFsxXSk7Ci0gICAgdGV4TWF0cml4LnRyYW5zbGF0ZShzcmNSZWN0LngoKSwgc3JjUmVj
dC55KCkpOwotICAgIHRleE1hdHJpeC5zY2FsZShzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVp
Z2h0KCkpOwotCi0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNE
OjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBHcmFw
aGljc0NvbnRleHQzRDo6TkVBUkVTVCk7Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9N
QUdfRklMVEVSLCBHcmFwaGljc0NvbnRleHQzRDo6TkVBUkVTVCk7Ci0KLSAgICBtX2NvbnRleHQt
PnVzZVF1YWRWZXJ0aWNlcygpOwotICAgIG1fY29udGV4dC0+dXNlQmljdWJpY1Byb2dyYW0obWF0
cml4LCB0ZXhNYXRyaXgsIG1pdGNoZWxsQ29lZmZpY2llbnRzLCBpbWFnZUluY3JlbWVudCwgYWxw
aGEpOwotICAgIG1fY29udGV4dC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5H
TEVfU1RSSVAsIDAsIDQpOwotICAgIGNoZWNrR0xFcnJvcigiZ2xEcmF3QXJyYXlzIik7Ci19Ci0K
LXZvaWQgR3JhcGhpY3NDb250ZXh0R1BVOjpzZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRl
T3BlcmF0b3Igb3ApCi17Ci0gICAgbV9zdGF0ZS0+bV9jb21wb3NpdGVPcCA9IG9wOwotfQotCi1U
ZXh0dXJlKiBHcmFwaGljc0NvbnRleHRHUFU6OmNyZWF0ZVRleHR1cmUoTmF0aXZlSW1hZ2VQdHIg
cHRyLCBUZXh0dXJlOjpGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0g
ICAgcmV0dXJuIG1fY29udGV4dC0+Y3JlYXRlVGV4dHVyZShwdHIsIGZvcm1hdCwgd2lkdGgsIGhl
aWdodCk7Ci19Ci0KLVRleHR1cmUqIEdyYXBoaWNzQ29udGV4dEdQVTo6Z2V0VGV4dHVyZShOYXRp
dmVJbWFnZVB0ciBwdHIpCi17Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+Z2V0VGV4dHVyZShwdHIp
OwotfQotCi0jaWYgVVNFKFNLSUEpCi0vLyBUaGlzIGlzIGFjdHVhbGx5IGNyb3NzLXBsYXRmb3Jt
IGNvZGUsIGJ1dCBzaW5jZSBpdHMgb25seSBjYWxsZXIgaXMgaW5zaWRlIGEKLS8vIFVTRShTS0lB
KSwgaXQgd2lsbCBjYXVzZSBhIHdhcm5pbmctYXMtZXJyb3Igb24gQ2hyb21lL01hYy4KLXN0YXRp
YyB2b2lkIGludGVycG9sYXRlUXVhZHJhdGljKEZsb2F0UG9pbnRWZWN0b3IqIHZlcnRpY2VzLCBj
b25zdCBGbG9hdFBvaW50JiBwMCwgY29uc3QgRmxvYXRQb2ludCYgcDEsIGNvbnN0IEZsb2F0UG9p
bnQmIHAyKQotewotICAgIGZsb2F0IHRJbmNyZW1lbnQgPSAxLjBmIC8gcGF0aFRlc3NlbGF0aW9u
LCB0ID0gdEluY3JlbWVudDsKLSAgICBRdWFkcmF0aWMgYyA9IFF1YWRyYXRpYzo6ZnJvbUJlemll
cihwMCwgcDEsIHAyKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhdGhUZXNzZWxhdGlvbjsg
KytpLCB0ICs9IHRJbmNyZW1lbnQpCi0gICAgICAgIHZlcnRpY2VzLT5hcHBlbmQoYy5ldmFsdWF0
ZSh0KSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGludGVycG9sYXRlQ3ViaWMoRmxvYXRQb2ludFZlY3Rv
ciogdmVydGljZXMsIGNvbnN0IEZsb2F0UG9pbnQmIHAwLCBjb25zdCBGbG9hdFBvaW50JiBwMSwg
Y29uc3QgRmxvYXRQb2ludCYgcDIsIGNvbnN0IEZsb2F0UG9pbnQmIHAzKQotewotICAgIGZsb2F0
IHRJbmNyZW1lbnQgPSAxLjBmIC8gcGF0aFRlc3NlbGF0aW9uLCB0ID0gdEluY3JlbWVudDsKLSAg
ICBDdWJpYyBjID0gQ3ViaWM6OmZyb21CZXppZXIocDAsIHAxLCBwMiwgcDMpOwotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgcGF0aFRlc3NlbGF0aW9uOyArK2ksIHQgKz0gdEluY3JlbWVudCkKLSAg
ICAgICAgdmVydGljZXMtPmFwcGVuZChjLmV2YWx1YXRlKHQpKTsKLX0KLSNlbmRpZgotCi1zdHJ1
Y3QgUG9seWdvbkRhdGEgewotICAgIFBvbHlnb25EYXRhKEZsb2F0UG9pbnRWZWN0b3IqIHZlcnRp
Y2VzLCBXVEY6OlZlY3RvcjxzaG9ydD4qIGluZGljZXMpCi0gICAgICA6IG1fdmVydGljZXModmVy
dGljZXMpCi0gICAgICAsIG1faW5kaWNlcyhpbmRpY2VzKQotICAgIHsKLSAgICB9Ci0gICAgRmxv
YXRQb2ludFZlY3RvciogbV92ZXJ0aWNlczsKLSAgICBXVEY6OlZlY3RvcjxzaG9ydD4qIG1faW5k
aWNlczsKLX07Ci0KLXN0YXRpYyB2b2lkIGJlZ2luRGF0YShHTGVudW0gdHlwZSwgdm9pZCogZGF0
YSkKLXsKLSAgICBBU1NFUlQodHlwZSA9PSBHTF9UUklBTkdMRVMpOwotfQotCi1zdGF0aWMgdm9p
ZCBlZGdlRmxhZ0RhdGEoR0xib29sZWFuIGZsYWcsIHZvaWQqIGRhdGEpCi17Ci19Ci0KLXN0YXRp
YyB2b2lkIHZlcnRleERhdGEodm9pZCogdmVydGV4RGF0YSwgdm9pZCogZGF0YSkKLXsKLSAgICBz
dGF0aWNfY2FzdDxQb2x5Z29uRGF0YSo+KGRhdGEpLT5tX2luZGljZXMtPmFwcGVuZChyZWludGVy
cHJldF9jYXN0PGxvbmc+KHZlcnRleERhdGEpKTsKLX0KLQotc3RhdGljIHZvaWQgZW5kRGF0YSh2
b2lkKiBkYXRhKQotewotfQotCi1zdGF0aWMgdm9pZCBjb21iaW5lRGF0YShHTGRvdWJsZSBjb29y
ZHNbM10sIHZvaWQqIHZlcnRleERhdGFbNF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBHTGZsb2F0IHdlaWdodFs0XSwgdm9pZCAqKm91dERhdGEsIHZvaWQqIGRhdGEpCi17Ci0g
ICAgUG9seWdvbkRhdGEqIHBvbHlnb25EYXRhID0gc3RhdGljX2Nhc3Q8UG9seWdvbkRhdGEqPihk
YXRhKTsKLSAgICBpbnQgaW5kZXggPSBwb2x5Z29uRGF0YS0+bV92ZXJ0aWNlcy0+c2l6ZSgpOwot
ICAgIHBvbHlnb25EYXRhLT5tX3ZlcnRpY2VzLT5hcHBlbmQoRmxvYXRQb2ludChzdGF0aWNfY2Fz
dDxmbG9hdD4oY29vcmRzWzBdKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGNvb3Jkc1sxXSkpKTsKLSAg
ICAqb3V0RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGluZGV4KTsKLX0KLQotdHlwZWRl
ZiB2b2lkICgqVEVTU0NCKSgpOwotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6dGVzc2VsYXRl
QW5kRmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aCwgY29uc3QgQ29sb3ImIGNvbG9yKQotewotICAg
IGlmICghbV9wYXRoVmVydGV4QnVmZmVyKQotICAgICAgICBtX3BhdGhWZXJ0ZXhCdWZmZXIgPSBt
X2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmNyZWF0ZUJ1ZmZlcigpOwotICAgIGlmICgh
bV9wYXRoSW5kZXhCdWZmZXIpCi0gICAgICAgIG1fcGF0aEluZGV4QnVmZmVyID0gbV9jb250ZXh0
LT5ncmFwaGljc0NvbnRleHQzRCgpLT5jcmVhdGVCdWZmZXIoKTsKLQotICAgIEFmZmluZVRyYW5z
Zm9ybSBtYXRyaXgobV9mbGlwTWF0cml4KTsKLSAgICBtYXRyaXggKj0gbV9zdGF0ZS0+bV9jdG07
Ci0KLSAgICBGbG9hdFBvaW50VmVjdG9yIGluVmVydGljZXM7Ci0gICAgV1RGOjpWZWN0b3I8c2l6
ZV90PiBjb250b3VyczsKLSNpZiBVU0UoU0tJQSkKLSAgICBjb25zdCBTa1BhdGgqIHNrUGF0aCA9
IHBhdGgucGxhdGZvcm1QYXRoKCk7Ci0gICAgU2tQb2ludCBwdHNbNF07Ci0gICAgU2tQYXRoOjpJ
dGVyIGl0ZXIoKnNrUGF0aCwgdHJ1ZSk7Ci0gICAgU2tQYXRoOjpWZXJiIHZlcmI7Ci0gICAgd2hp
bGUgKCh2ZXJiID0gaXRlci5uZXh0KHB0cykpICE9IFNrUGF0aDo6a0RvbmVfVmVyYikgewotICAg
ICAgICBzd2l0Y2ggKHZlcmIpIHsKLSAgICAgICAgY2FzZSBTa1BhdGg6OmtNb3ZlX1ZlcmI6Ci0g
ICAgICAgICAgICBpblZlcnRpY2VzLmFwcGVuZChwdHNbMF0pOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgU2tQYXRoOjprTGluZV9WZXJiOgotICAgICAgICAgICAgaW5WZXJ0aWNl
cy5hcHBlbmQocHRzWzFdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNrUGF0
aDo6a1F1YWRfVmVyYjoKLSAgICAgICAgICAgIGludGVycG9sYXRlUXVhZHJhdGljKCZpblZlcnRp
Y2VzLCBwdHNbMF0sIHB0c1sxXSwgcHRzWzJdKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFNrUGF0aDo6a0N1YmljX1ZlcmI6Ci0gICAgICAgICAgICBpbnRlcnBvbGF0ZUN1Ymlj
KCZpblZlcnRpY2VzLCBwdHNbMF0sIHB0c1sxXSwgcHRzWzJdLCBwdHNbM10pOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2tQYXRoOjprQ2xvc2VfVmVyYjoKLSAgICAgICAgICAg
IGNvbnRvdXJzLmFwcGVuZChpblZlcnRpY2VzLnNpemUoKSk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBTa1BhdGg6OmtEb25lX1ZlcmI6Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotICAgIH0KLSNlbHNlCi0gICAgQVNTRVJUKCEiUGF0aCBleHRyYWN0aW9uIG5vdCBp
bXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIpOwotI2VuZGlmCi0KLSAgICBpZiAoY29udG91
cnMuc2l6ZSgpID09IDEgJiYgTG9vcEJsaW5uTWF0aFV0aWxzOjppc0NvbnZleChpblZlcnRpY2Vz
LmJlZ2luKCksIGluVmVydGljZXMuc2l6ZSgpKSkgewotICAgICAgICBtX2NvbnRleHQtPmdyYXBo
aWNzQ29udGV4dDNEKCktPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZF
UiwgbV9wYXRoVmVydGV4QnVmZmVyKTsKLSAgICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRl
eHQzRCgpLT5idWZmZXJEYXRhKEdyYXBoaWNzQ29udGV4dDNEOjpBUlJBWV9CVUZGRVIsIGluVmVy
dGljZXMuc2l6ZSgpICogMiAqIHNpemVvZihmbG9hdCksIGluVmVydGljZXMuZGF0YSgpLCBHcmFw
aGljc0NvbnRleHQzRDo6U1RSRUFNX0RSQVcpOwotICAgICAgICBtX2NvbnRleHQtPnVzZUZpbGxT
b2xpZFByb2dyYW0obWF0cml4LCBjb2xvcik7Ci0gICAgICAgIG1fY29udGV4dC0+Z3JhcGhpY3ND
b250ZXh0M0QoKS0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAw
LCBpblZlcnRpY2VzLnNpemUoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBPd25B
cnJheVB0cjxkb3VibGU+IGluVmVydGljZXNEb3VibGUgPSBhZG9wdEFycmF5UHRyKG5ldyBkb3Vi
bGVbaW5WZXJ0aWNlcy5zaXplKCkgKiAzXSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
blZlcnRpY2VzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGluVmVydGljZXNEb3VibGVbaSAqIDMg
ICAgXSA9IGluVmVydGljZXNbaV0ueCgpOwotICAgICAgICBpblZlcnRpY2VzRG91YmxlW2kgKiAz
ICsgMV0gPSBpblZlcnRpY2VzW2ldLnkoKTsKLSAgICAgICAgaW5WZXJ0aWNlc0RvdWJsZVtpICog
MyArIDJdID0gMS4wOwotICAgIH0KLQotICAgIEdMVXRlc3NlbGF0b3IqIHRlc3MgPSBpbnRlcm5h
bF9nbHVOZXdUZXNzKCk7Ci0gICAgaW50ZXJuYWxfZ2x1VGVzc1Byb3BlcnR5KHRlc3MsIEdMVV9U
RVNTX1dJTkRJTkdfUlVMRSwgR0xVX1RFU1NfV0lORElOR19OT05aRVJPKTsKLSAgICBpbnRlcm5h
bF9nbHVUZXNzQ2FsbGJhY2sodGVzcywgR0xVX1RFU1NfQkVHSU5fREFUQSwgKFRFU1NDQikgJmJl
Z2luRGF0YSk7Ci0gICAgaW50ZXJuYWxfZ2x1VGVzc0NhbGxiYWNrKHRlc3MsIEdMVV9URVNTX1ZF
UlRFWF9EQVRBLCAoVEVTU0NCKSAmdmVydGV4RGF0YSk7Ci0gICAgaW50ZXJuYWxfZ2x1VGVzc0Nh
bGxiYWNrKHRlc3MsIEdMVV9URVNTX0VORF9EQVRBLCAoVEVTU0NCKSAmZW5kRGF0YSk7Ci0gICAg
aW50ZXJuYWxfZ2x1VGVzc0NhbGxiYWNrKHRlc3MsIEdMVV9URVNTX0VER0VfRkxBR19EQVRBLCAo
VEVTU0NCKSAmZWRnZUZsYWdEYXRhKTsKLSAgICBpbnRlcm5hbF9nbHVUZXNzQ2FsbGJhY2sodGVz
cywgR0xVX1RFU1NfQ09NQklORV9EQVRBLCAoVEVTU0NCKSAmY29tYmluZURhdGEpOwotICAgIFdU
Rjo6VmVjdG9yPHNob3J0PiBpbmRpY2VzOwotICAgIEZsb2F0UG9pbnRWZWN0b3IgdmVydGljZXM7
Ci0gICAgdmVydGljZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShpblZlcnRpY2VzLnNpemUoKSk7
Ci0gICAgUG9seWdvbkRhdGEgZGF0YSgmdmVydGljZXMsICZpbmRpY2VzKTsKLSAgICBpbnRlcm5h
bF9nbHVUZXNzQmVnaW5Qb2x5Z29uKHRlc3MsICZkYXRhKTsKLSAgICBXVEY6OlZlY3RvcjxzaXpl
X3Q+Ojpjb25zdF9pdGVyYXRvciBjb250b3VyOwotICAgIHNpemVfdCBpID0gMDsKLSAgICBmb3Ig
KGNvbnRvdXIgPSBjb250b3Vycy5iZWdpbigpOyBjb250b3VyICE9IGNvbnRvdXJzLmVuZCgpOyAr
K2NvbnRvdXIpIHsKLSAgICAgICAgaW50ZXJuYWxfZ2x1VGVzc0JlZ2luQ29udG91cih0ZXNzKTsK
LSAgICAgICAgZm9yICg7IGkgPCAqY29udG91cjsgKytpKSB7Ci0gICAgICAgICAgICBkb3VibGUq
IGluVmVydGV4ID0gJmluVmVydGljZXNEb3VibGVbaSAqIDNdOwotICAgICAgICAgICAgdmVydGlj
ZXMuYXBwZW5kKEZsb2F0UG9pbnQoaW5WZXJ0ZXhbMF0sIGluVmVydGV4WzFdKSk7Ci0gICAgICAg
ICAgICBpbnRlcm5hbF9nbHVUZXNzVmVydGV4KHRlc3MsIGluVmVydGV4LCByZWludGVycHJldF9j
YXN0PHZvaWQqPihpKSk7Ci0gICAgICAgIH0KLSAgICAgICAgaW50ZXJuYWxfZ2x1VGVzc0VuZENv
bnRvdXIodGVzcyk7Ci0gICAgfQotICAgIGludGVybmFsX2dsdVRlc3NFbmRQb2x5Z29uKHRlc3Mp
OwotICAgIGludGVybmFsX2dsdURlbGV0ZVRlc3ModGVzcyk7Ci0KLSAgICBtX2NvbnRleHQtPmdy
YXBoaWNzQ29udGV4dDNEKCktPmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JV
RkZFUiwgbV9wYXRoVmVydGV4QnVmZmVyKTsKLSAgICBjaGVja0dMRXJyb3IoImNyZWF0ZVZlcnRl
eEJ1ZmZlckZyb21QYXRoLCBiaW5kQnVmZmVyIEFSUkFZX0JVRkZFUiIpOwotICAgIG1fY29udGV4
dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+YnVmZmVyRGF0YShHcmFwaGljc0NvbnRleHQzRDo6QVJS
QVlfQlVGRkVSLCB2ZXJ0aWNlcy5zaXplKCkgKiAyICogc2l6ZW9mKGZsb2F0KSwgdmVydGljZXMu
ZGF0YSgpLCBHcmFwaGljc0NvbnRleHQzRDo6U1RSRUFNX0RSQVcpOwotICAgIGNoZWNrR0xFcnJv
cigiY3JlYXRlVmVydGV4QnVmZmVyRnJvbVBhdGgsIGJ1ZmZlckRhdGEgQVJSQVlfQlVGRkVSIik7
Ci0KLSAgICBtX2NvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPmJpbmRCdWZmZXIoR3JhcGhp
Y3NDb250ZXh0M0Q6OkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBtX3BhdGhJbmRleEJ1ZmZlcik7Ci0g
ICAgY2hlY2tHTEVycm9yKCJjcmVhdGVWZXJ0ZXhCdWZmZXJGcm9tUGF0aCwgYmluZEJ1ZmZlciBF
TEVNRU5UX0FSUkFZX0JVRkZFUiIpOwotICAgIG1fY29udGV4dC0+Z3JhcGhpY3NDb250ZXh0M0Qo
KS0+YnVmZmVyRGF0YShHcmFwaGljc0NvbnRleHQzRDo6RUxFTUVOVF9BUlJBWV9CVUZGRVIsIGlu
ZGljZXMuc2l6ZSgpICogc2l6ZW9mKHNob3J0KSwgaW5kaWNlcy5kYXRhKCksIEdyYXBoaWNzQ29u
dGV4dDNEOjpTVFJFQU1fRFJBVyk7Ci0gICAgY2hlY2tHTEVycm9yKCJjcmVhdGVWZXJ0ZXhCdWZm
ZXJGcm9tUGF0aCwgYnVmZmVyRGF0YSBFTEVNRU5UX0FSUkFZX0JVRkZFUiIpOwotCi0gICAgbV9j
b250ZXh0LT51c2VGaWxsU29saWRQcm9ncmFtKG1hdHJpeCwgY29sb3IpOwotICAgIG1fY29udGV4
dC0+Z3JhcGhpY3NDb250ZXh0M0QoKS0+ZHJhd0VsZW1lbnRzKEdyYXBoaWNzQ29udGV4dDNEOjpU
UklBTkdMRVMsIGluZGljZXMuc2l6ZSgpLCBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURfU0hP
UlQsIDApOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6ZmlsbFBhdGhJbnRlcm5hbChj
b25zdCBQYXRoJiBwYXRoLCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEOjp1c2VMb29wQmxpbm5Gb3JQYXRoUmVuZGVyaW5nKCkpIHsKLSAgICAg
ICAgbV9wYXRoQ2FjaGUuY2xlYXIoKTsKLSAgICAgICAgTG9vcEJsaW5uUGF0aFByb2Nlc3NvciBw
cm9jZXNzb3I7Ci0gICAgICAgIHByb2Nlc3Nvci5wcm9jZXNzKHBhdGgsIG1fcGF0aENhY2hlKTsK
LSAgICAgICAgaWYgKCFtX3BhdGhWZXJ0ZXhCdWZmZXIpCi0gICAgICAgICAgICBtX3BhdGhWZXJ0
ZXhCdWZmZXIgPSBtX2NvbnRleHQtPmNyZWF0ZUJ1ZmZlcigpOwotICAgICAgICBtX2NvbnRleHQt
PmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV9wYXRoVmVydGV4
QnVmZmVyKTsKLSAgICAgICAgaW50IGJ5dGVTaXplT2ZWZXJ0aWNlcyA9IDIgKiBtX3BhdGhDYWNo
ZS5udW1iZXJPZlZlcnRpY2VzKCkgKiBzaXplb2YoZmxvYXQpOwotICAgICAgICBpbnQgYnl0ZVNp
emVPZlRleENvb3JkcyA9IDMgKiBtX3BhdGhDYWNoZS5udW1iZXJPZlZlcnRpY2VzKCkgKiBzaXpl
b2YoZmxvYXQpOwotICAgICAgICBpbnQgYnl0ZVNpemVPZkludGVyaW9yVmVydGljZXMgPSAyICog
bV9wYXRoQ2FjaGUubnVtYmVyT2ZJbnRlcmlvclZlcnRpY2VzKCkgKiBzaXplb2YoZmxvYXQpOwot
ICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JV
RkZFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVTaXplT2ZWZXJ0aWNlcyAr
IGJ5dGVTaXplT2ZUZXhDb29yZHMgKyBieXRlU2l6ZU9mSW50ZXJpb3JWZXJ0aWNlcywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpTVEFUSUNfRFJBVyk7
Ci0gICAgICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YShHcmFwaGljc0NvbnRleHQzRDo6QVJS
QVlfQlVGRkVSLCAwLCBieXRlU2l6ZU9mVmVydGljZXMsIG1fcGF0aENhY2hlLnZlcnRpY2VzKCkp
OwotICAgICAgICBtX2NvbnRleHQtPmJ1ZmZlclN1YkRhdGEoR3JhcGhpY3NDb250ZXh0M0Q6OkFS
UkFZX0JVRkZFUiwgYnl0ZVNpemVPZlZlcnRpY2VzLCBieXRlU2l6ZU9mVGV4Q29vcmRzLCBtX3Bh
dGhDYWNoZS50ZXhjb29yZHMoKSk7Ci0gICAgICAgIG1fY29udGV4dC0+YnVmZmVyU3ViRGF0YShH
cmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBieXRlU2l6ZU9mVmVydGljZXMgKyBieXRl
U2l6ZU9mVGV4Q29vcmRzLCBieXRlU2l6ZU9mSW50ZXJpb3JWZXJ0aWNlcywgbV9wYXRoQ2FjaGUu
aW50ZXJpb3JWZXJ0aWNlcygpKTsKLQotICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gbWF0cml4KG1f
ZmxpcE1hdHJpeCk7Ci0gICAgICAgIG1hdHJpeCAqPSBtX3N0YXRlLT5tX2N0bTsKLQotICAgICAg
ICAvLyBEcmF3IHRoZSBleHRlcmlvcgotICAgICAgICBtX2NvbnRleHQtPnVzZUxvb3BCbGlubkV4
dGVyaW9yUHJvZ3JhbSgwLCBieXRlU2l6ZU9mVmVydGljZXMsIG1hdHJpeCwgY29sb3IpOwotICAg
ICAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFUywg
MCwgbV9wYXRoQ2FjaGUubnVtYmVyT2ZWZXJ0aWNlcygpKTsKLQotICAgICAgICAvLyBEcmF3IHRo
ZSBpbnRlcmlvcgotICAgICAgICBtX2NvbnRleHQtPnVzZUxvb3BCbGlubkludGVyaW9yUHJvZ3Jh
bShieXRlU2l6ZU9mVmVydGljZXMgKyBieXRlU2l6ZU9mVGV4Q29vcmRzLCBtYXRyaXgsIGNvbG9y
KTsKLSAgICAgICAgbV9jb250ZXh0LT5kcmF3QXJyYXlzKEdyYXBoaWNzQ29udGV4dDNEOjpUUklB
TkdMRVMsIDAsIG1fcGF0aENhY2hlLm51bWJlck9mSW50ZXJpb3JWZXJ0aWNlcygpKTsKLSAgICB9
IGVsc2UgewotICAgICAgICB0ZXNzZWxhdGVBbmRGaWxsUGF0aChwYXRoLCBjb2xvcik7Ci0gICAg
fQotfQotCi1GbG9hdFJlY3QgR3JhcGhpY3NDb250ZXh0R1BVOjpmbGlwUmVjdChjb25zdCBGbG9h
dFJlY3QmIHJlY3QpCi17Ci0gICAgRmxvYXRSZWN0IGZsaXBwZWRSZWN0KHJlY3QpOwotICAgIGZs
aXBwZWRSZWN0LnNldFkobV9zaXplLmhlaWdodCgpIC0gcmVjdC55KCkpOwotICAgIGZsaXBwZWRS
ZWN0LnNldEhlaWdodCgtcmVjdC5oZWlnaHQoKSk7Ci0gICAgcmV0dXJuIGZsaXBwZWRSZWN0Owot
fQotCi12b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6Y2xlYXJCb3JkZXJzKGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCwgaW50IHdpZHRoKQotewotICAgIHNjaXNzb3JDbGVhcihyZWN0LngoKSwgcmVjdC55
KCkgLSB3aWR0aCwgcmVjdC53aWR0aCgpICsgd2lkdGgsIHdpZHRoKTsKLSAgICBzY2lzc29yQ2xl
YXIocmVjdC5tYXhYKCksIHJlY3QueSgpLCB3aWR0aCwgcmVjdC5oZWlnaHQoKSArIHdpZHRoKTsK
LSAgICBzY2lzc29yQ2xlYXIocmVjdC54KCkgLSB3aWR0aCwgcmVjdC5tYXhZKCksIHJlY3Qud2lk
dGgoKSArIHdpZHRoLCB3aWR0aCk7Ci0gICAgc2Npc3NvckNsZWFyKHJlY3QueCgpIC0gd2lkdGgs
IHJlY3QueSgpIC0gd2lkdGgsIHdpZHRoLCByZWN0LmhlaWdodCgpICsgd2lkdGgpOwotfQotCi12
b2lkIEdyYXBoaWNzQ29udGV4dEdQVTo6YmVnaW5TaGFkb3dEcmF3KCkKLXsKLSAgICBmbG9hdCBv
ZmZzZXRYID0gbV9zdGF0ZS0+bV9zaGFkb3dPZmZzZXQud2lkdGgoKTsKLSAgICBmbG9hdCBvZmZz
ZXRZID0gbV9zdGF0ZS0+bV9zaGFkb3dPZmZzZXQuaGVpZ2h0KCk7Ci0gICAgc2F2ZSgpOwotICAg
IGlmIChtX3N0YXRlLT5tX3NoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKSB7Ci0gICAgICAgIEFmZmlu
ZVRyYW5zZm9ybSBuZXdDVE07Ci0gICAgICAgIG5ld0NUTS50cmFuc2xhdGUob2Zmc2V0WCwgLW9m
ZnNldFkpOwotICAgICAgICBuZXdDVE0gKj0gbV9zdGF0ZS0+bV9jdG07Ci0gICAgICAgIG1fc3Rh
dGUtPm1fY3RtID0gbmV3Q1RNOwotICAgIH0gZWxzZQotICAgICAgICBtX3N0YXRlLT5tX2N0bS50
cmFuc2xhdGUob2Zmc2V0WCwgb2Zmc2V0WSk7Ci0KLSAgICBpZiAobV9zdGF0ZS0+bV9zaGFkb3dC
bHVyID4gMCkgewotICAgICAgICAvLyBEcmF3IGhhcmQgc2hhZG93IHRvIG9mZnNjcmVlbiBidWZm
ZXIgMC4KLSAgICAgICAgRHJhd2luZ0J1ZmZlciogZHN0QnVmZmVyID0gbV9jb250ZXh0LT5nZXRP
ZmZzY3JlZW5CdWZmZXIoMCwgbV9zaXplKTsKLSAgICAgICAgZHN0QnVmZmVyLT5iaW5kKCk7Ci0g
ICAgICAgIG1fY29udGV4dC0+YXBwbHlDb21wb3NpdGVPcGVyYXRvcihDb21wb3NpdGVDb3B5KTsK
LSAgICAgICAgYXBwbHlDbGlwcGluZyhmYWxzZSk7Ci0gICAgICAgIG1fY29udGV4dC0+Y2xlYXJD
b2xvcihDb2xvcihSR0JBMzIoMCkpKTsKLSAgICAgICAgbV9jb250ZXh0LT5jbGVhcihHcmFwaGlj
c0NvbnRleHQzRDo6Q09MT1JfQlVGRkVSX0JJVCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgYXBw
bHlTdGF0ZSgpOwotICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHUFU6OmVuZFNoYWRv
d0RyYXcoY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCkKLXsKLSAgICBpZiAobV9zdGF0ZS0+
bV9zaGFkb3dCbHVyID4gMCkgewotICAgICAgICAvLyBCdWZmZXIgMCBjb250YWlucyB0aGUgcHJp
bWl0aXZlIGRyYXduIHdpdGggYSBoYXJkIHNoYWRvdy4KLSAgICAgICAgRHJhd2luZ0J1ZmZlciog
c3JjQnVmZmVyID0gbV9jb250ZXh0LT5nZXRPZmZzY3JlZW5CdWZmZXIoMCwgbV9zaXplKTsKLSAg
ICAgICAgRHJhd2luZ0J1ZmZlciogZHN0QnVmZmVyID0gbV9jb250ZXh0LT5nZXRPZmZzY3JlZW5C
dWZmZXIoMSwgbV9zaXplKTsKLQotICAgICAgICBmbG9hdCBzaWdtYSA9IG1fc3RhdGUtPm1fc2hh
ZG93Qmx1ciAqIDAuMzMzMzMzZjsKLSAgICAgICAgRmxvYXRSZWN0IHNoYWRvd0JvdW5kaW5nQm94
KG1fc3RhdGUtPm1fY3RtLm1hcFJlY3QoYm91bmRpbmdCb3gpKTsKLSAgICAgICAgRmxvYXRSZWN0
IHJlY3QoRmxvYXRQb2ludCgwLCAwKSwgbV9zaXplKTsKLSAgICAgICAgRmxvYXRSZWN0IHNyY1Jl
Y3Qoc2hhZG93Qm91bmRpbmdCb3gpOwotCi0gICAgICAgIGludCBzY2FsZUZhY3RvciA9IDE7Ci0g
ICAgICAgIHdoaWxlIChzaWdtYSA+IGNNYXhTaWdtYSkgewotICAgICAgICAgICAgc3JjUmVjdC5z
Y2FsZSgwLjVmKTsKLSAgICAgICAgICAgIHNjYWxlRmFjdG9yICo9IDI7Ci0gICAgICAgICAgICBz
aWdtYSAqPSAwLjVmOwotICAgICAgICB9Ci0gICAgICAgIHNyY1JlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KHNyY1JlY3QpOwotICAgICAgICBzcmNSZWN0LnNjYWxlKHNjYWxlRmFjdG9yKTsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDE7IGkgPCBzY2FsZUZhY3RvcjsgaSAqPSAyKSB7Ci0gICAgICAgICAg
ICBkc3RCdWZmZXItPmJpbmQoKTsKLSAgICAgICAgICAgIG1fY29udGV4dC0+YmluZFRleHR1cmUo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHNyY0J1ZmZlci0+Y29sb3JCdWZmZXIoKSk7
Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3ND
b250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgICAgICAgICAgbV9jb250ZXh0LT50ZXhQYXJh
bWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6
VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICAg
ICAgICAgIG1fY29udGV4dC0+dGV4UGFyYW1ldGVyaShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfTUlOX0ZJTFRFUiwgR3JhcGhpY3NDb250
ZXh0M0Q6OkxJTkVBUik7Ci0gICAgICAgICAgICBtX2NvbnRleHQtPnRleFBhcmFtZXRlcmkoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01B
R19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgICAgICAgICAgRmxvYXRS
ZWN0IGRzdFJlY3Qoc3JjUmVjdCk7Ci0gICAgICAgICAgICBkc3RSZWN0LnNjYWxlKDAuNWYpOwot
ICAgICAgICAgICAgLy8gQ2xlYXIgb3V0IDEgcGl4ZWwgYm9yZGVyIGZvciBsaW5lYXIgZmlsdGVy
aW5nLgotICAgICAgICAgICAgY2xlYXJCb3JkZXJzKGRzdFJlY3QsIDEpOwotICAgICAgICAgICAg
ZHJhd1RleHR1cmVkUXVhZChzcmNCdWZmZXItPnNpemUoKSwgZmxpcFJlY3Qoc3JjUmVjdCksIGRz
dFJlY3QsIEFmZmluZVRyYW5zZm9ybSgpLCAxLjApOwotICAgICAgICAgICAgc3JjUmVjdCA9IGRz
dFJlY3Q7Ci0gICAgICAgICAgICBzdGQ6OnN3YXAoc3JjQnVmZmVyLCBkc3RCdWZmZXIpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgaW50IGhhbGZXaWR0aCA9IHN0YXRpY19jYXN0PGludD4oc2lnbWEg
KiAzLjBmKTsKLSAgICAgICAgaW50IGtlcm5lbFdpZHRoID0gaGFsZldpZHRoICogMiArIDE7Ci0g
ICAgICAgIE93bkFycmF5UHRyPGZsb2F0PiBrZXJuZWwgPSBhZG9wdEFycmF5UHRyKG5ldyBmbG9h
dFtrZXJuZWxXaWR0aF0pOwotICAgICAgICBidWlsZEtlcm5lbChzaWdtYSwga2VybmVsLmdldCgp
LCBrZXJuZWxXaWR0aCk7Ci0KLSAgICAgICAgaWYgKHNjYWxlRmFjdG9yID4gMSkgewotICAgICAg
ICAgICAgc2Npc3NvckNsZWFyKHNyY1JlY3QubWF4WCgpLCBzcmNSZWN0LnkoKSwga2VybmVsV2lk
dGgsIHNyY1JlY3QuaGVpZ2h0KCkpOwotICAgICAgICAgICAgc2Npc3NvckNsZWFyKHNyY1JlY3Qu
eCgpIC0ga2VybmVsV2lkdGgsIHNyY1JlY3QueSgpLCBrZXJuZWxXaWR0aCwgc3JjUmVjdC5oZWln
aHQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBCbHVyIGluIFggb2Zmc2NyZWVuLgotICAg
ICAgICBkc3RCdWZmZXItPmJpbmQoKTsKLSAgICAgICAgc3JjUmVjdC5pbmZsYXRlWChoYWxmV2lk
dGgpOwotICAgICAgICBzcmNSZWN0LmludGVyc2VjdChyZWN0KTsKLSAgICAgICAgZmxvYXQgaW1h
Z2VJbmNyZW1lbnRYWzJdID0gezEuMGYgLyBzcmNCdWZmZXItPnNpemUoKS53aWR0aCgpLCAwLjBm
fTsKLSAgICAgICAgY29udm9sdmVSZWN0KHNyY0J1ZmZlci0+Y29sb3JCdWZmZXIoKSwgc3JjQnVm
ZmVyLT5zaXplKCksIGZsaXBSZWN0KHNyY1JlY3QpLCBzcmNSZWN0LCBpbWFnZUluY3JlbWVudFgs
IGtlcm5lbC5nZXQoKSwga2VybmVsV2lkdGgpOwotCi0gICAgICAgIGlmIChzY2FsZUZhY3RvciA+
IDEpIHsKLSAgICAgICAgICAgIHNjaXNzb3JDbGVhcihzcmNSZWN0LngoKSwgc3JjUmVjdC5tYXhZ
KCksIHNyY1JlY3Qud2lkdGgoKSwga2VybmVsV2lkdGgpOwotICAgICAgICAgICAgc2Npc3NvckNs
ZWFyKHNyY1JlY3QueCgpLCBzcmNSZWN0LnkoKSAtIGtlcm5lbFdpZHRoLCBzcmNSZWN0LndpZHRo
KCksIGtlcm5lbFdpZHRoKTsKLSAgICAgICAgfQotICAgICAgICBzcmNSZWN0LmluZmxhdGVZKGhh
bGZXaWR0aCk7Ci0gICAgICAgIHNyY1JlY3QuaW50ZXJzZWN0KHJlY3QpOwotICAgICAgICBzdGQ6
OnN3YXAoc3JjQnVmZmVyLCBkc3RCdWZmZXIpOwotCi0gICAgICAgIGZsb2F0IGltYWdlSW5jcmVt
ZW50WVsyXSA9IHswLjBmLCAxLjBmIC8gc3JjQnVmZmVyLT5zaXplKCkuaGVpZ2h0KCl9OwotICAg
ICAgICBpZiAoc2NhbGVGYWN0b3IgPiAxKSB7Ci0gICAgICAgICAgICAvLyBCbHVyIGluIFkgb2Zm
c2NyZWVuLgotICAgICAgICAgICAgZHN0QnVmZmVyLT5iaW5kKCk7Ci0gICAgICAgICAgICBjb252
b2x2ZVJlY3Qoc3JjQnVmZmVyLT5jb2xvckJ1ZmZlcigpLCBzcmNCdWZmZXItPnNpemUoKSwgZmxp
cFJlY3Qoc3JjUmVjdCksIHNyY1JlY3QsIGltYWdlSW5jcmVtZW50WSwga2VybmVsLmdldCgpLCBr
ZXJuZWxXaWR0aCk7Ci0gICAgICAgICAgICAvLyBDbGVhciBvdXQgMiBwaXhlbCBib3JkZXIgZm9y
IGJpY3ViaWMgZmlsdGVyaW5nLgotICAgICAgICAgICAgY2xlYXJCb3JkZXJzKHNyY1JlY3QsIDIp
OwotICAgICAgICAgICAgc3RkOjpzd2FwKHNyY0J1ZmZlciwgZHN0QnVmZmVyKTsKLQotICAgICAg
ICAgICAgLy8gVXBzYW1wbGUgc3JjQnVmZmVyIC0+IG1haW4gZnJhbWVidWZmZXIgdXNpbmcgYmlj
dWJpYyBmaWx0ZXJpbmcuCi0gICAgICAgICAgICBhcHBseVN0YXRlKCk7Ci0gICAgICAgICAgICBt
X2NvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBzcmNC
dWZmZXItPmNvbG9yQnVmZmVyKCkpOwotICAgICAgICAgICAgRmxvYXRSZWN0IGRzdFJlY3QgPSBz
cmNSZWN0OwotICAgICAgICAgICAgZHN0UmVjdC5zY2FsZShzY2FsZUZhY3Rvcik7Ci0gICAgICAg
ICAgICBkcmF3VGV4dHVyZWRRdWFkTWl0Y2hlbGwoc3JjQnVmZmVyLT5zaXplKCksIGZsaXBSZWN0
KHNyY1JlY3QpLCBkc3RSZWN0LCBBZmZpbmVUcmFuc2Zvcm0oKSwgMS4wKTsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIC8vIEJsdXIgaW4gWSBkaXJlY3RseSB0byBmcmFtZWJ1ZmZlci4K
LSAgICAgICAgICAgIGFwcGx5U3RhdGUoKTsKLSAgICAgICAgICAgIGNvbnZvbHZlUmVjdChzcmNC
dWZmZXItPmNvbG9yQnVmZmVyKCksIHNyY0J1ZmZlci0+c2l6ZSgpLCBmbGlwUmVjdChzcmNSZWN0
KSwgc3JjUmVjdCwgaW1hZ2VJbmNyZW1lbnRZLCBrZXJuZWwuZ2V0KCksIGtlcm5lbFdpZHRoKTsK
LSAgICAgICAgfQotICAgIH0KLSAgICByZXN0b3JlKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250
ZXh0R1BVOjpiZWdpblN0ZW5jaWxEcmF3KHVuc2lnbmVkIG9wKQotewotICAgIC8vIFR1cm4gb24g
c3RlbmNpbCB0ZXN0LgotICAgIG1fY29udGV4dC0+ZW5hYmxlU3RlbmNpbCh0cnVlKTsKLSAgICBj
aGVja0dMRXJyb3IoImVuYWJsZSBTVEVOQ0lMX1RFU1QiKTsKLQotICAgIC8vIFN0ZW5jaWwgdGVz
dCBuZXZlciBwYXNzZXMsIHNvIGNvbG9yYnVmZmVyIGlzIG5vdCBkcmF3bi4KLSAgICBtX2NvbnRl
eHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPnN0ZW5jaWxGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpO
RVZFUiwgMSwgMSk7Ci0gICAgY2hlY2tHTEVycm9yKCJzdGVuY2lsRnVuYyIpOwotCi0gICAgLy8g
QWxsIHdyaXRlcyBpbmNyZW1lbWVudCB0aGUgc3RlbmNpbCBidWZmZXIuCi0gICAgbV9jb250ZXh0
LT5ncmFwaGljc0NvbnRleHQzRCgpLT5zdGVuY2lsT3Aob3AsIG9wLCBvcCk7Ci0gICAgY2hlY2tH
TEVycm9yKCJzdGVuY2lsT3AiKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHRHUFU6OmFwcGx5
Q2xpcHBpbmcoYm9vbCBlbmFibGUpCi17Ci0gICAgbV9jb250ZXh0LT5lbmFibGVTdGVuY2lsKGVu
YWJsZSk7Ci0gICAgaWYgKGVuYWJsZSkgewotICAgICAgICAvLyBFbmFibGUgZHJhd2luZyBvbmx5
IHdoZXJlIHN0ZW5jaWwgaXMgbm9uLXplcm8uCi0gICAgICAgIG1fY29udGV4dC0+Z3JhcGhpY3ND
b250ZXh0M0QoKS0+c3RlbmNpbEZ1bmMoR3JhcGhpY3NDb250ZXh0M0Q6OkVRVUFMLCBtX3N0YXRl
LT5tX251bUNsaXBwaW5nUGF0aHMsIC0xKTsKLSAgICAgICAgY2hlY2tHTEVycm9yKCJzdGVuY2ls
RnVuYyIpOwotICAgICAgICAvLyBLZWVwIGFsbCBzdGVuY2lsIHZhbHVlcyB0aGUgc2FtZS4KLSAg
ICAgICAgbV9jb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5zdGVuY2lsT3AoR3JhcGhpY3ND
b250ZXh0M0Q6OktFRVAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEOjpLRUVQLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQzRDo6S0VFUCk7Ci0g
ICAgICAgIGNoZWNrR0xFcnJvcigic3RlbmNpbE9wIik7Ci0gICAgfQotfQotCi12b2lkIEdyYXBo
aWNzQ29udGV4dEdQVTo6Y2hlY2tHTEVycm9yKGNvbnN0IGNoYXIqIGhlYWRlcikKLXsKLSNpZm5k
ZWYgTkRFQlVHCi0gICAgdW5zaWduZWQgZXJyOwotICAgIHdoaWxlICgoZXJyID0gbV9jb250ZXh0
LT5nZXRFcnJvcigpKSAhPSBHcmFwaGljc0NvbnRleHQzRDo6Tk9fRVJST1IpIHsKLSAgICAgICAg
Y29uc3QgY2hhciogZXJyb3JTdHIgPSAiKioqIFVOS05PV04gRVJST1IgKioqIjsKLSAgICAgICAg
c3dpdGNoIChlcnIpIHsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9F
TlVNOgotICAgICAgICAgICAgZXJyb3JTdHIgPSAiR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURf
RU5VTSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQz
RDo6SU5WQUxJRF9WQUxVRToKLSAgICAgICAgICAgIGVycm9yU3RyID0gIkdyYXBoaWNzQ29udGV4
dDNEOjpJTlZBTElEX1ZBTFVFIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEdy
YXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTjoKLSAgICAgICAgICAgIGVycm9yU3Ry
ID0gIkdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX09QRVJBVElPTiI7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9GUkFNRUJVRkZF
Ul9PUEVSQVRJT046Ci0gICAgICAgICAgICBlcnJvclN0ciA9ICJHcmFwaGljc0NvbnRleHQzRDo6
SU5WQUxJRF9GUkFNRUJVRkZFUl9PUEVSQVRJT04iOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1PUlk6Ci0gICAgICAgICAgICBl
cnJvclN0ciA9ICJHcmFwaGljc0NvbnRleHQzRDo6T1VUX09GX01FTU9SWSI7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoaGVhZGVyKQotICAgICAgICAgICAgTE9H
X0VSUk9SKCIlczogICVzIiwgaGVhZGVyLCBlcnJvclN0cik7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIExPR19FUlJPUigiJXMiLCBlcnJvclN0cik7Ci0gICAgfQotI2VuZGlmCi19Ci0KLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HcmFwaGlj
c0NvbnRleHRHUFUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HcmFw
aGljc0NvbnRleHRHUFUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQyMzI1NTgy
NmM3MzcyZmNhNGM0ZjAwMjg5OWEyZjJmNjgzOTY1OC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvR3JhcGhpY3NDb250ZXh0R1BVLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxNDAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZuZGVmIEdyYXBoaWNzQ29udGV4dEdQVV9oCi0jZGVmaW5lIEdyYXBoaWNzQ29udGV4dEdQVV9o
Ci0KLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJDb2xvci5oIgotI2lu
Y2x1ZGUgIkNvbG9yU3BhY2UuaCIKLSNpbmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCi0jaW5jbHVk
ZSAiSW1hZ2VTb3VyY2UuaCIKLSNpbmNsdWRlICJMb29wQmxpbm5QYXRoQ2FjaGUuaCIKLSNpbmNs
dWRlICJUZXh0dXJlLmgiCi0KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBDb2xvcjsKLWNsYXNzIERyYXdpbmdCdWZmZXI7Ci1jbGFzcyBGbG9h
dFJlY3Q7Ci1jbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKLWNsYXNzIFBhdGg7Ci1jbGFzcyBTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRDsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0R1BVIHsKLSAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShHcmFwaGljc0NvbnRleHRHUFUpOwotcHVibGljOgotICAgIEdy
YXBoaWNzQ29udGV4dEdQVShTaGFyZWRHcmFwaGljc0NvbnRleHQzRCosIERyYXdpbmdCdWZmZXIq
LCBjb25zdCBJbnRTaXplJik7Ci0gICAgfkdyYXBoaWNzQ29udGV4dEdQVSgpOwotCi0gICAgdm9p
ZCBmaWxsUGF0aChjb25zdCBQYXRoJik7Ci0gICAgdm9pZCBmaWxsUmVjdChjb25zdCBGbG9hdFJl
Y3QmLCBjb25zdCBDb2xvciYsIENvbG9yU3BhY2UpOwotICAgIHZvaWQgZmlsbFJlY3QoY29uc3Qg
RmxvYXRSZWN0Jik7Ci0gICAgdm9pZCBjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0Jik7Ci0gICAg
dm9pZCBzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImLCBDb2xvclNwYWNlKTsKLSAgICB2b2lkIHNl
dEFscGhhKGZsb2F0IGFscGhhKTsKLSAgICB2b2lkIHNldFNoYWRvd0NvbG9yKGNvbnN0IENvbG9y
JiwgQ29sb3JTcGFjZSk7Ci0gICAgdm9pZCBzZXRTaGFkb3dPZmZzZXQoY29uc3QgRmxvYXRTaXpl
Jik7Ci0gICAgdm9pZCBzZXRTaGFkb3dCbHVyKGZsb2F0KTsKLSAgICB2b2lkIHNldFNoYWRvd3NJ
Z25vcmVUcmFuc2Zvcm1zKGJvb2wpOwotICAgIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENv
bXBvc2l0ZU9wZXJhdG9yKTsKLSAgICB2b2lkIHRyYW5zbGF0ZShmbG9hdCB4LCBmbG9hdCB5KTsK
LSAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFkaWFucyk7Ci0gICAgdm9pZCBzY2FsZShj
b25zdCBGbG9hdFNpemUmKTsKLSAgICB2b2lkIGNvbmNhdENUTShjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mKTsKLSAgICB2b2lkIHNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mKTsKLSAgICB2b2lk
IGNsaXBQYXRoKGNvbnN0IFBhdGgmKTsKLSAgICB2b2lkIGNsaXBPdXQoY29uc3QgUGF0aCYpOwot
Ci0gICAgdm9pZCBzYXZlKCk7Ci0gICAgdm9pZCByZXN0b3JlKCk7Ci0KLSAgICAvLyBub24tc3Rh
bmRhcmQgZnVuY3Rpb25zCi0gICAgLy8gVGhlc2UgYXJlIG5vdCBzdGFuZGFyZCBHcmFwaGljc0Nv
bnRleHQgZnVuY3Rpb25zLCBhbmQgc2hvdWxkIGJlIHB1c2hlZAotICAgIC8vIGRvd24gaW50byBh
IFBsYXRmb3JtQ29udGV4dEdMRVMyIGF0IHNvbWUgcG9pbnQuCi0KLSAgICAvLyBUaGlzIHZlcnNp
b24gaXMgY2FsbGVkIGJ5IHRoZSBjYW52YXMtPmNhbnZhcyBkcmF3cy4KLSAgICB2b2lkIGRyYXdU
ZXh0dXJlZFJlY3QodW5zaWduZWQgdGV4dHVyZSwgY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUs
IGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvcik7Ci0gICAgLy8gVGhpcyB2ZXJzaW9uIGlzIGNhbGxl
ZCBieSBCaXRtYXBJbWFnZTo6ZHJhdygpLgotICAgIHZvaWQgZHJhd1RleHR1cmVkUmVjdChUZXh0
dXJlKiwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3Qs
IENvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yKTsKLSAgICAvLyBUaGlzIHZlcnNpb24gaXMg
Y2FsbGVkIGJ5IHRoZSBhYm92ZSwgYW5kIGJ5IHRoZSBzb2Z0d2FyZS0+aGFyZHdhcmUgdXBsb2Fk
cy4KLSAgICB2b2lkIGRyYXdUZXh0dXJlZFJlY3QoVGV4dHVyZSosIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
LCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3IsIGJvb2wgY2xpcCk7
Ci0gICAgVGV4dHVyZSogY3JlYXRlVGV4dHVyZShOYXRpdmVJbWFnZVB0ciwgVGV4dHVyZTo6Rm9y
bWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotICAgIFRleHR1cmUqIGdldFRleHR1cmUoTmF0
aXZlSW1hZ2VQdHIpOwotCi0gICAgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQoKSBj
b25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KLQotICAgIHZvaWQgYmluZEZyYW1lYnVmZmVyKCk7
Ci0KLSAgICBEcmF3aW5nQnVmZmVyKiBkcmF3aW5nQnVmZmVyKCkgY29uc3QgeyByZXR1cm4gbV9k
cmF3aW5nQnVmZmVyOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBhcHBseVN0YXRlKCk7Ci0gICAg
dm9pZCBzY2lzc29yQ2xlYXIoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhl
aWdodCk7Ci0gICAgdm9pZCBkcmF3VGV4dHVyZWRSZWN0VGlsZShUZXh0dXJlKiB0ZXh0dXJlLCBp
bnQgdGlsZSwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJl
Y3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYsIGZsb2F0IGFscGhhKTsKLSAgICB2b2lkIGRyYXdU
ZXh0dXJlZFF1YWQoY29uc3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYg
c3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0m
LCBmbG9hdCBhbHBoYSk7Ci0gICAgdm9pZCBkcmF3VGV4dHVyZWRRdWFkTWl0Y2hlbGwoY29uc3Qg
SW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxv
YXRSZWN0JiBkc3RSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBmbG9hdCBhbHBoYSk7Ci0g
ICAgdm9pZCBjb252b2x2ZVJlY3QodW5zaWduZWQgdGV4dHVyZSwgY29uc3QgSW50U2l6ZSYgdGV4
dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgRmxvYXRSZWN0JiBkc3RS
ZWN0LCBmbG9hdCBpbWFnZUluY3JlbWVudFsyXSwgY29uc3QgZmxvYXQqIGtlcm5lbCwgaW50IGtl
cm5lbFdpZHRoKTsKLQotICAgIHZvaWQgdGVzc2VsYXRlQW5kRmlsbFBhdGgoY29uc3QgUGF0aCYs
IGNvbnN0IENvbG9yJik7Ci0gICAgdm9pZCBmaWxsUGF0aEludGVybmFsKGNvbnN0IFBhdGgmLCBj
b25zdCBDb2xvciYpOwotICAgIHZvaWQgZmlsbFJlY3RJbnRlcm5hbChjb25zdCBGbG9hdFJlY3Qm
LCBjb25zdCBDb2xvciYpOwotICAgIEZsb2F0UmVjdCBmbGlwUmVjdChjb25zdCBGbG9hdFJlY3Qm
KTsKLSAgICB2b2lkIGNsZWFyQm9yZGVycyhjb25zdCBGbG9hdFJlY3QmLCBpbnQgd2lkdGgpOwot
ICAgIHZvaWQgYmVnaW5TaGFkb3dEcmF3KCk7Ci0gICAgdm9pZCBlbmRTaGFkb3dEcmF3KGNvbnN0
IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gpOwotICAgIHZvaWQgYmVnaW5TdGVuY2lsRHJhdyh1bnNp
Z25lZCBvcCk7Ci0gICAgdm9pZCBhcHBseUNsaXBwaW5nKGJvb2wgZW5hYmxlKTsKLSAgICB2b2lk
IGNoZWNrR0xFcnJvcihjb25zdCBjaGFyKiBoZWFkZXIpOwotCi0gICAgSW50U2l6ZSBtX3NpemU7
Ci0KLSAgICBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCogbV9jb250ZXh0OwotICAgIERyYXdpbmdC
dWZmZXIqIG1fZHJhd2luZ0J1ZmZlcjsKLQotICAgIHN0cnVjdCBTdGF0ZTsKLSAgICB0eXBlZGVm
IFdURjo6VmVjdG9yPFN0YXRlPiBTdGF0ZVZlY3RvcjsKLSAgICBTdGF0ZVZlY3RvciBtX3N0YXRl
U3RhY2s7Ci0gICAgU3RhdGUqIG1fc3RhdGU7Ci0gICAgQWZmaW5lVHJhbnNmb3JtIG1fZmxpcE1h
dHJpeDsKLQotICAgIC8vIE1lbWJlcnMgZm9yIEdQVS1hY2NlbGVyYXRlZCBwYXRoIHJlbmRlcmlu
Zy4KLSAgICBMb29wQmxpbm5QYXRoQ2FjaGUgbV9wYXRoQ2FjaGU7Ci0gICAgdW5zaWduZWQgbV9w
YXRoSW5kZXhCdWZmZXI7Ci0gICAgdW5zaWduZWQgbV9wYXRoVmVydGV4QnVmZmVyOwotfTsKLQot
fQotCi0jZW5kaWYgLy8gR3JhcGhpY3NDb250ZXh0R1BVX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250
ZXh0M0QuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhOTQ4NzhiOGZkMjZmZDgw
NTE0NTk3ODU2YTVhMTZkNjEwODhiMzNkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFy
ZWRHcmFwaGljc0NvbnRleHQzRC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw0OTkgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQot
ICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
LSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQot
I2luY2x1ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCi0KLSNpbmNsdWRlICJBZmZpbmVU
cmFuc2Zvcm0uaCIKLSNpbmNsdWRlICJCaWN1YmljU2hhZGVyLmgiCi0jaW5jbHVkZSAiQ29sb3Iu
aCIKLSNpbmNsdWRlICJDb252b2x1dGlvblNoYWRlci5oIgotI2luY2x1ZGUgIkRyYXdpbmdCdWZm
ZXIuaCIKLSNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
LSNpbmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiTG9vcEJsaW5uU29saWRGaWxsU2hhZGVy
LmgiCi0jaW5jbHVkZSAiU29saWRGaWxsU2hhZGVyLmgiCi0jaW5jbHVkZSAiVGV4U2hhZGVyLmgi
Ci0KLSNpZiBVU0UoU0tJQSkKLSNpbmNsdWRlICJHckNvbnRleHQuaCIKLSNlbmRpZgotCi0vLyBM
aW1pdCB0aGUgbnVtYmVyIG9mIHRleHR1cmVzIHdlIGhvbGQgaW4gdGhlIGJpdG1hcC0+dGV4dHVy
ZSBjYWNoZS4KLXN0YXRpYyBjb25zdCBpbnQgbWF4VGV4dHVyZUNhY2hlQ291bnQgPSA1MTI7Ci0v
LyBMaW1pdCB0aGUgYnl0ZXMgYWxsb2NhdGVkIHRvd2FyZCB0ZXh0dXJlcyBpbiB0aGUgYml0bWFw
LT50ZXh0dXJlIGNhY2hlLgotc3RhdGljIGNvbnN0IHNpemVfdCBtYXhUZXh0dXJlQ2FjaGVCeXRl
cyA9IDUwICogMTAyNCAqIDEwMjQ7Ci0KLSNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5n
Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gc3RhdGljCi1QYXNzUmVmUHRyPFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEPiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEhvc3RX
aW5kb3cqIGhvc3RXaW5kb3csIENyZWF0aW9uRmxhZ3MgZmxhZ3MpCi17Ci0gICAgR3JhcGhpY3ND
b250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cjsKLSAgICBhdHRyLmRlcHRoID0gZmFsc2U7Ci0gICAg
YXR0ci5zdGVuY2lsID0gdHJ1ZTsKLSAgICBhdHRyLmFudGlhbGlhcyA9IHVzZUxvb3BCbGlubkZv
clBhdGhSZW5kZXJpbmcoKTsKLSAgICBhdHRyLmNhblJlY292ZXJGcm9tQ29udGV4dExvc3MgPSBm
YWxzZTsgLy8gQ2FudmFzIGNvbnRleHRzIGNhbiBub3QgaGFuZGxlIGxvc3QgY29udGV4dHMuCi0g
ICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZShhdHRyLCBob3N0V2luZG93KTsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIGlmIChmbGFncyAmIFVzZVNraWFHUFUpCi0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoY29udGV4dC5yZWxlYXNlKCksIFBhc3NP
d25QdHI8U29saWRGaWxsU2hhZGVyPigpLCBQYXNzT3duUHRyPFRleFNoYWRlcj4oKSwgUGFzc093
blB0cjxCaWN1YmljU2hhZGVyPigpLCBQYXNzT3duQXJyYXlQdHI8T3duUHRyPENvbnZvbHV0aW9u
U2hhZGVyPiA+KCksIGZsYWdzKSk7Ci0gICAgT3duUHRyPFNvbGlkRmlsbFNoYWRlcj4gc29saWRG
aWxsU2hhZGVyID0gU29saWRGaWxsU2hhZGVyOjpjcmVhdGUoY29udGV4dC5nZXQoKSk7Ci0gICAg
aWYgKCFzb2xpZEZpbGxTaGFkZXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIE93blB0cjxUZXhT
aGFkZXI+IHRleFNoYWRlciA9IFRleFNoYWRlcjo6Y3JlYXRlKGNvbnRleHQuZ2V0KCkpOwotICAg
IGlmICghdGV4U2hhZGVyKQotICAgICAgICByZXR1cm4gMDsKLSAgICBPd25QdHI8QmljdWJpY1No
YWRlcj4gYmljdWJpY1NoYWRlciA9IEJpY3ViaWNTaGFkZXI6OmNyZWF0ZShjb250ZXh0LmdldCgp
KTsKLSAgICBpZiAoIWJpY3ViaWNTaGFkZXIpCi0gICAgICAgIHJldHVybiAwOwotICAgIE93bkFy
cmF5UHRyPE93blB0cjxDb252b2x1dGlvblNoYWRlcj4gPiBjb252b2x1dGlvblNoYWRlcnMgPSBh
ZG9wdEFycmF5UHRyKG5ldyBPd25QdHI8Q29udm9sdXRpb25TaGFkZXI+W2NNYXhLZXJuZWxXaWR0
aF0pOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY01heEtlcm5lbFdpZHRoOyArK2kpIHsKLSAg
ICAgICAgY29udm9sdXRpb25TaGFkZXJzW2ldID0gQ29udm9sdXRpb25TaGFkZXI6OmNyZWF0ZShj
b250ZXh0LmdldCgpLCBpICsgMSk7Ci0gICAgICAgIGlmICghY29udm9sdXRpb25TaGFkZXJzW2ld
KQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoY29udGV4dC5yZWxlYXNlKCksIHNvbGlkRmlsbFNoYWRl
ci5yZWxlYXNlKCksIHRleFNoYWRlci5yZWxlYXNlKCksIGJpY3ViaWNTaGFkZXIucmVsZWFzZSgp
LCBjb252b2x1dGlvblNoYWRlcnMucmVsZWFzZSgpLCBmbGFncykpOwotfQotCi0KLVNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEOjpTaGFyZWRHcmFwaGljc0NvbnRleHQzRChQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBjb250ZXh0LCBQYXNzT3duUHRyPFNvbGlkRmlsbFNoYWRlcj4gc29saWRG
aWxsU2hhZGVyLCBQYXNzT3duUHRyPFRleFNoYWRlcj4gdGV4U2hhZGVyLCBQYXNzT3duUHRyPEJp
Y3ViaWNTaGFkZXI+IGJpY3ViaWNTaGFkZXIsIFBhc3NPd25BcnJheVB0cjxPd25QdHI8Q29udm9s
dXRpb25TaGFkZXI+ID4gY29udm9sdXRpb25TaGFkZXJzLCBDcmVhdGlvbkZsYWdzIGZsYWdzKQot
ICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBtX2JncmFTdXBwb3J0ZWQoZmFsc2UpCi0g
ICAgLCBtX3F1YWRWZXJ0aWNlcygwKQotICAgICwgbV9zb2xpZEZpbGxTaGFkZXIoc29saWRGaWxs
U2hhZGVyKQotICAgICwgbV90ZXhTaGFkZXIodGV4U2hhZGVyKQotICAgICwgbV9iaWN1YmljU2hh
ZGVyKGJpY3ViaWNTaGFkZXIpCi0gICAgLCBtX2NvbnZvbHV0aW9uU2hhZGVycyhjb252b2x1dGlv
blNoYWRlcnMpCi0gICAgLCBtX29lc1N0YW5kYXJkRGVyaXZhdGl2ZXNTdXBwb3J0ZWQoZmFsc2Up
Ci0gICAgLCBtX2ZsYWdzKGZsYWdzKQotI2lmIFVTRShTS0lBKQotICAgICwgbV9nckNvbnRleHQo
MCkKLSNlbmRpZgotewotICAgIGFsbENvbnRleHRzKCktPmFkZCh0aGlzKTsKLSAgICBFeHRlbnNp
b25zM0QqIGV4dGVuc2lvbnMgPSBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKTsKLSAgICBtX2Jn
cmFTdXBwb3J0ZWQgPSBleHRlbnNpb25zLT5zdXBwb3J0cygiR0xfRVhUX3RleHR1cmVfZm9ybWF0
X0JHUkE4ODg4IikgJiYgZXh0ZW5zaW9ucy0+c3VwcG9ydHMoIkdMX0VYVF9yZWFkX2Zvcm1hdF9i
Z3JhIik7Ci0gICAgaWYgKG1fYmdyYVN1cHBvcnRlZCkgewotICAgICAgICBleHRlbnNpb25zLT5l
bnN1cmVFbmFibGVkKCJHTF9FWFRfdGV4dHVyZV9mb3JtYXRfQkdSQTg4ODgiKTsKLSAgICAgICAg
ZXh0ZW5zaW9ucy0+ZW5zdXJlRW5hYmxlZCgiR0xfRVhUX3JlYWRfZm9ybWF0X2JncmEiKTsKLSAg
ICB9Ci0gICAgbV9vZXNTdGFuZGFyZERlcml2YXRpdmVzU3VwcG9ydGVkID0gZXh0ZW5zaW9ucy0+
c3VwcG9ydHMoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOwotICAgIGlmIChtX29lc1N0
YW5kYXJkRGVyaXZhdGl2ZXNTdXBwb3J0ZWQpCi0gICAgICAgIGV4dGVuc2lvbnMtPmVuc3VyZUVu
YWJsZWQoIkdMX09FU19zdGFuZGFyZF9kZXJpdmF0aXZlcyIpOwotfQotCi1TaGFyZWRHcmFwaGlj
c0NvbnRleHQzRDo6flNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKCkKLXsKLSAgICBtX2NvbnRleHQt
PmRlbGV0ZUJ1ZmZlcihtX3F1YWRWZXJ0aWNlcyk7Ci0gICAgYWxsQ29udGV4dHMoKS0+cmVtb3Zl
KHRoaXMpOwotI2lmIFVTRShTS0lBKQotICAgIGlmIChtX2dyQ29udGV4dCkgewotICAgICAgICBt
X2dyQ29udGV4dC0+Y29udGV4dERlc3Ryb3llZCgpOwotICAgICAgICBHclNhZmVVbnJlZihtX2dy
Q29udGV4dCk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0
M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCi17Ci0gICAgbV9jb250ZXh0LT5tYWtlQ29udGV4dEN1
cnJlbnQoKTsKLX0KLQotdm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6c2Npc3NvcihHQzNE
aW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQotewot
ICAgIG1fY29udGV4dC0+c2Npc3Nvcih4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLX0KLQotdm9pZCBT
aGFyZWRHcmFwaGljc0NvbnRleHQzRDo6ZW5hYmxlKEdDM0RlbnVtIGNhcGFjaXR5KQotewotICAg
IG1fY29udGV4dC0+ZW5hYmxlKGNhcGFjaXR5KTsKLX0KLQotdm9pZCBTaGFyZWRHcmFwaGljc0Nv
bnRleHQzRDo6ZGlzYWJsZShHQzNEZW51bSBjYXBhY2l0eSkKLXsKLSAgICBtX2NvbnRleHQtPmRp
c2FibGUoY2FwYWNpdHkpOwotfQotCi12b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjbGVh
ckNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBmbG9hdCByZ2JhWzRdOwotICAgIGNv
bG9yLmdldFJHQkEocmdiYVswXSwgcmdiYVsxXSwgcmdiYVsyXSwgcmdiYVszXSk7Ci0gICAgbV9j
b250ZXh0LT5jbGVhckNvbG9yKHJnYmFbMF0sIHJnYmFbMV0sIHJnYmFbMl0sIHJnYmFbM10pOwot
fQotCi12b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjbGVhcihHQzNEYml0ZmllbGQgbWFz
aykKLXsKLSAgICBtX2NvbnRleHQtPmNsZWFyKG1hc2spOwotfQotCi12b2lkIFNoYXJlZEdyYXBo
aWNzQ29udGV4dDNEOjpkcmF3QXJyYXlzKEdDM0RlbnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdD
M0RzaXplaSBjb3VudCkKLXsKLSAgICBtX2NvbnRleHQtPmRyYXdBcnJheXMobW9kZSwgZmlyc3Qs
IGNvdW50KTsKLX0KLQotR0MzRGVudW0gU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmdldEVycm9y
KCkKLXsKLSAgICByZXR1cm4gbV9jb250ZXh0LT5nZXRFcnJvcigpOwotfQotCi12b2lkIFNoYXJl
ZEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbnRlZ2VydihHQzNEZW51bSBwbmFtZSwgR0MzRGludCog
dmFsdWUpCi17Ci0gICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOwotfQot
Ci12b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpmbHVzaCgpCi17Ci0gICAgbV9jb250ZXh0
LT5mbHVzaCgpOwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVCdWZmZXIoKQotewotICAgIHJldHVybiBtX2NvbnRleHQtPmNyZWF0ZUJ1ZmZlcigp
OwotfQotCi1QbGF0Zm9ybTNET2JqZWN0IFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVG
cmFtZWJ1ZmZlcigpCi17Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIo
KTsKLX0KLQotUGxhdGZvcm0zRE9iamVjdCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRl
VGV4dHVyZSgpCi17Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOwotfQot
Ci12b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcihQbGF0Zm9y
bTNET2JqZWN0IGZyYW1lYnVmZmVyKQotewotICAgIG1fY29udGV4dC0+ZGVsZXRlRnJhbWVidWZm
ZXIoZnJhbWVidWZmZXIpOwotfQotCi12b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpkZWxl
dGVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKLXsKLSAgICBtX2NvbnRleHQtPmRl
bGV0ZVRleHR1cmUodGV4dHVyZSk7Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6
OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVu
dCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEdDM0RpbnQg
bGV2ZWwpCi17Ci0gICAgbV9jb250ZXh0LT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0
dGFjaG1lbnQsIHRleHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwotfQotCi12b2lkIFNoYXJlZEdy
YXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJpKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
cG5hbWUsIEdDM0RpbnQgcGFyYW0pCi17Ci0gICAgbV9jb250ZXh0LT50ZXhQYXJhbWV0ZXJpKHRh
cmdldCwgcG5hbWUsIHBhcmFtKTsKLX0KLQotYm9vbCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6
dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVy
bmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9y
ZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykK
LXsKLSAgICBpZiAoIXBpeGVscykKLSAgICAgICAgcmV0dXJuIG1fY29udGV4dC0+dGV4SW1hZ2Uy
RFJlc291cmNlU2FmZSh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUpOwotICAgIHJldHVybiBtX2NvbnRleHQtPnRleEltYWdl
MkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwg
Zm9ybWF0LCB0eXBlLCBwaXhlbHMpOwotfQotCi12b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNE
Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4
b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCi17
Ci0gICAgbV9jb250ZXh0LT50ZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlv
ZmZzZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKLX0KLQotdm9pZCBT
aGFyZWRHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0Rl
bnVtIHR5cGUsIHZvaWQqIGRhdGEpCi17Ci0gICAgbV9jb250ZXh0LT5yZWFkUGl4ZWxzKHgsIHks
IHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgZGF0YSk7Ci19Ci0KLWJvb2wgU2hhcmVkR3Jh
cGhpY3NDb250ZXh0M0Q6OnN1cHBvcnRzQkdSQSgpCi17Ci0gICAgcmV0dXJuIG1fYmdyYVN1cHBv
cnRlZDsKLX0KLQotYm9vbCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6c3VwcG9ydHNDb21wb3Np
dGVPcChDb21wb3NpdGVPcGVyYXRvciBvcCkgY29uc3QKLXsgICAKLSNpZiBVU0UoU0tJQSkKLSAg
ICByZXR1cm4gbV9mbGFncyAmIFVzZVNraWFHUFUgfHwgb3AgPT0gQ29tcG9zaXRlU291cmNlT3Zl
cjsKLSNlbHNlCi0gICAgcmV0dXJuIG9wID09IENvbXBvc2l0ZVNvdXJjZU92ZXI7Ci0jZW5kaWYK
LX0KLQotVGV4dHVyZSogU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoTmF0
aXZlSW1hZ2VQdHIgcHRyLCBUZXh0dXJlOjpGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCi17Ci0gICAgUmVmUHRyPFRleHR1cmU+IHRleHR1cmUgPSBtX3RleHR1cmVzLmdldChw
dHIpOwotICAgIGlmICh0ZXh0dXJlKQotICAgICAgICByZXR1cm4gdGV4dHVyZS5nZXQoKTsKLQot
ICAgIHRleHR1cmUgPSBUZXh0dXJlOjpjcmVhdGUobV9jb250ZXh0LmdldCgpLCBmb3JtYXQsIHdp
ZHRoLCBoZWlnaHQpOwotICAgIFRleHR1cmUqIHQgPSB0ZXh0dXJlLmdldCgpOwotICAgIG1fdGV4
dHVyZXMuc2V0KHB0ciwgdGV4dHVyZSk7Ci0gICAgcmV0dXJuIHQ7Ci19Ci0KLVRleHR1cmUqIFNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXh0dXJlKE5hdGl2ZUltYWdlUHRyIHB0cikKLXsK
LSAgICBSZWZQdHI8VGV4dHVyZT4gdGV4dHVyZSA9IG1fdGV4dHVyZXMuZ2V0KHB0cik7Ci0gICAg
cmV0dXJuIHRleHR1cmUgPyB0ZXh0dXJlLmdldCgpIDogMDsKLX0KLQotdm9pZCBTaGFyZWRHcmFw
aGljc0NvbnRleHQzRDo6cmVtb3ZlVGV4dHVyZUZvcihOYXRpdmVJbWFnZVB0ciBwdHIpCi17Ci0g
ICAgVGV4dHVyZUhhc2hNYXA6Oml0ZXJhdG9yIGl0ID0gbV90ZXh0dXJlcy5maW5kKHB0cik7Ci0g
ICAgaWYgKGl0ICE9IG1fdGV4dHVyZXMuZW5kKCkpCi0gICAgICAgIG1fdGV4dHVyZXMucmVtb3Zl
KGl0KTsKLX0KLQotLy8gc3RhdGljCi12b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpyZW1v
dmVUZXh0dXJlc0ZvcihOYXRpdmVJbWFnZVB0ciBwdHIpCi17Ci0gICAgZm9yIChIYXNoU2V0PFNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEKj46Oml0ZXJhdG9yIGl0ID0gYWxsQ29udGV4dHMoKS0+YmVn
aW4oKTsgaXQgIT0gYWxsQ29udGV4dHMoKS0+ZW5kKCk7ICsraXQpCi0gICAgICAgICgqaXQpLT5y
ZW1vdmVUZXh0dXJlRm9yKHB0cik7Ci19Ci0KLS8vIHN0YXRpYwotSGFzaFNldDxTaGFyZWRHcmFw
aGljc0NvbnRleHQzRCo+KiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6YWxsQ29udGV4dHMoKQot
ewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxTaGFyZWRHcmFwaGljc0NvbnRleHQz
RCo+LCBhbGxDb250ZXh0c1NldCwgKCkpOwotICAgIHJldHVybiAmYWxsQ29udGV4dHNTZXQ7Ci19
Ci0KLQotUGFzc1JlZlB0cjxUZXh0dXJlPiBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRl
VGV4dHVyZShUZXh0dXJlOjpGb3JtYXQgZm9ybWF0LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17
Ci0gICAgcmV0dXJuIFRleHR1cmU6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCksIGZvcm1hdCwgd2lk
dGgsIGhlaWdodCk7Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmFwcGx5Q29t
cG9zaXRlT3BlcmF0b3IoQ29tcG9zaXRlT3BlcmF0b3Igb3ApCi17Ci0gICAgc3dpdGNoIChvcCkg
ewotICAgIGNhc2UgQ29tcG9zaXRlQ2xlYXI6Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdy
YXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGljc0NvbnRleHQzRDo6WkVSTyk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ29tcG9zaXRlQ29weToKLSAgICAgICAgbV9jb250ZXh0LT5kaXNh
YmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q29tcG9zaXRlU291cmNlT3ZlcjoKLSAgICAgICAgbV9jb250ZXh0LT5lbmFibGUoR3JhcGhpY3ND
b250ZXh0M0Q6OkJMRU5EKTsKLSAgICAgICAgbV9jb250ZXh0LT5ibGVuZEZ1bmMoR3JhcGhpY3ND
b250ZXh0M0Q6Ok9ORSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZUluOgotICAgICAgICBtX2Nv
bnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRl
eHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6RFNUX0FMUEhBLCBHcmFwaGljc0NvbnRl
eHQzRDo6WkVSTyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29tcG9zaXRlU291cmNlT3V0
OgotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwot
ICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVT
X0RTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6OlpFUk8pOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIENvbXBvc2l0ZVNvdXJjZUF0b3A6Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdy
YXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdy
YXBoaWNzQ29udGV4dDNEOjpEU1RfQUxQSEEsIEdyYXBoaWNzQ29udGV4dDNEOjpPTkVfTUlOVVNf
U1JDX0FMUEhBKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlv
bk92ZXI6Ci0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVO
RCk7Ci0gICAgICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpPTkVf
TUlOVVNfRFNUX0FMUEhBLCBHcmFwaGljc0NvbnRleHQzRDo6T05FKTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgY2FzZSBDb21wb3NpdGVEZXN0aW5hdGlvbkluOgotICAgICAgICBtX2NvbnRleHQtPmVu
YWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRleHQtPmJsZW5k
RnVuYyhHcmFwaGljc0NvbnRleHQzRDo6WkVSTywgR3JhcGhpY3NDb250ZXh0M0Q6OlNSQ19BTFBI
QSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29tcG9zaXRlRGVzdGluYXRpb25PdXQ6Ci0g
ICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAg
ICAgIG1fY29udGV4dC0+YmxlbmRGdW5jKEdyYXBoaWNzQ29udGV4dDNEOjpaRVJPLCBHcmFwaGlj
c0NvbnRleHQzRDo6T05FX01JTlVTX1NSQ19BTFBIQSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ29tcG9zaXRlRGVzdGluYXRpb25BdG9wOgotICAgICAgICBtX2NvbnRleHQtPmVuYWJsZShH
cmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBtX2NvbnRleHQtPmJsZW5kRnVuYyhH
cmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0RTVF9BTFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6
OlNSQ19BTFBIQSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ29tcG9zaXRlWE9SOgotICAg
ICAgICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAg
ICBtX2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FX01JTlVTX0RTVF9B
TFBIQSwgR3JhcGhpY3NDb250ZXh0M0Q6Ok9ORV9NSU5VU19TUkNfQUxQSEEpOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZVBsdXNEYXJrZXI6Ci0gICAgICAgIC8vIHVuc3VwcG9y
dGVkCi0gICAgICAgIG1fY29udGV4dC0+ZGlzYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENvbXBvc2l0ZVBsdXNMaWdodGVyOgotICAgICAg
ICBtX2NvbnRleHQtPmVuYWJsZShHcmFwaGljc0NvbnRleHQzRDo6QkxFTkQpOwotICAgICAgICBt
X2NvbnRleHQtPmJsZW5kRnVuYyhHcmFwaGljc0NvbnRleHQzRDo6T05FLCBHcmFwaGljc0NvbnRl
eHQzRDo6T05FKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIFNoYXJlZEdyYXBo
aWNzQ29udGV4dDNEOjplbmFibGVTdGVuY2lsKGJvb2wgZW5hYmxlKQotewotICAgIGlmIChlbmFi
bGUpCi0gICAgICAgIG1fY29udGV4dC0+ZW5hYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpTVEVOQ0lM
X1RFU1QpOwotICAgIGVsc2UKLSAgICAgICAgbV9jb250ZXh0LT5kaXNhYmxlKEdyYXBoaWNzQ29u
dGV4dDNEOjpTVEVOQ0lMX1RFU1QpOwotfQotCi12b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNE
Ojp1c2VRdWFkVmVydGljZXMoKQotewotICAgIGlmICghbV9xdWFkVmVydGljZXMpIHsKLSAgICAg
ICAgZmxvYXQgdmVydGljZXNbXSA9IHsgMC4wZiwgMC4wZiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMS4wZiwgMC4wZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wZiwg
MS4wZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wZiwgMS4wZiB9OwotICAgICAg
ICBtX3F1YWRWZXJ0aWNlcyA9IG1fY29udGV4dC0+Y3JlYXRlQnVmZmVyKCk7Ci0gICAgICAgIG1f
Y29udGV4dC0+YmluZEJ1ZmZlcihHcmFwaGljc0NvbnRleHQzRDo6QVJSQVlfQlVGRkVSLCBtX3F1
YWRWZXJ0aWNlcyk7Ci0gICAgICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YShHcmFwaGljc0NvbnRl
eHQzRDo6QVJSQVlfQlVGRkVSLCBzaXplb2YodmVydGljZXMpLCB2ZXJ0aWNlcywgR3JhcGhpY3ND
b250ZXh0M0Q6OlNUQVRJQ19EUkFXKTsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2NvbnRleHQt
PmJpbmRCdWZmZXIoR3JhcGhpY3NDb250ZXh0M0Q6OkFSUkFZX0JVRkZFUiwgbV9xdWFkVmVydGlj
ZXMpOwotICAgIH0KLX0KLQotdm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6c2V0QWN0aXZl
VGV4dHVyZShHQzNEZW51bSB0ZXh0dXJlVW5pdCkKLXsKLSAgICBtX2NvbnRleHQtPmFjdGl2ZVRl
eHR1cmUodGV4dHVyZVVuaXQpOwotfQotCi12b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpi
aW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCi17Ci0g
ICAgbV9jb250ZXh0LT5iaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKLX0KLQotdm9pZCBTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9y
bTNET2JqZWN0IHRleHR1cmUpCi17Ci0gICAgbV9jb250ZXh0LT5iaW5kVGV4dHVyZSh0YXJnZXQs
IHRleHR1cmUpOwotfQotCi12b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRh
KEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIEdDM0RlbnVtIHVzYWdlKQotewot
ICAgIG1fY29udGV4dC0+YnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIHVzYWdlKTsKLX0KLQotdm9p
ZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdD
M0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSkKLXsKLSAg
ICBtX2NvbnRleHQtPmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCBkYXRhLCB1c2FnZSk7Ci19Ci0K
LXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRh
dGEpCi17Ci0gICAgbV9jb250ZXh0LT5idWZmZXJTdWJEYXRhKHRhcmdldCwgb2Zmc2V0LCBzaXpl
LCBkYXRhKTsKLX0KLQotdm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dXNlRmlsbFNvbGlk
UHJvZ3JhbShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgQ29sb3ImIGNv
bG9yKQotewotICAgIG1fc29saWRGaWxsU2hhZGVyLT51c2UodHJhbnNmb3JtLCBjb2xvcik7Ci19
Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnVzZVRleHR1cmVQcm9ncmFtKGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRleFRy
YW5zZm9ybSwgZmxvYXQgYWxwaGEpCi17Ci0gICAgbV90ZXhTaGFkZXItPnVzZSh0cmFuc2Zvcm0s
IHRleFRyYW5zZm9ybSwgMCwgYWxwaGEpOwotfQotCi12b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4
dDNEOjp1c2VCaWN1YmljUHJvZ3JhbShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwg
Y29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0ZXhUcmFuc2Zvcm0sIGNvbnN0IGZsb2F0IGNvZWZmaWNp
ZW50c1sxNl0sIGNvbnN0IGZsb2F0IGltYWdlSW5jcmVtZW50WzJdLCBmbG9hdCBhbHBoYSkKLXsK
LSAgICBtX2JpY3ViaWNTaGFkZXItPnVzZSh0cmFuc2Zvcm0sIHRleFRyYW5zZm9ybSwgY29lZmZp
Y2llbnRzLCBpbWFnZUluY3JlbWVudCwgYWxwaGEpOwotfQotCi12b2lkIFNoYXJlZEdyYXBoaWNz
Q29udGV4dDNEOjp1c2VDb252b2x1dGlvblByb2dyYW0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0
cmFuc2Zvcm0sIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdGV4VHJhbnNmb3JtLCBjb25zdCBmbG9h
dCoga2VybmVsLCBpbnQga2VybmVsV2lkdGgsIGZsb2F0IGltYWdlSW5jcmVtZW50WzJdKQotewot
ICAgIEFTU0VSVChrZXJuZWxXaWR0aCA+PSAxICYmIGtlcm5lbFdpZHRoIDw9IGNNYXhLZXJuZWxX
aWR0aCk7Ci0gICAgbV9jb252b2x1dGlvblNoYWRlcnNba2VybmVsV2lkdGggLSAxXS0+dXNlKHRy
YW5zZm9ybSwgdGV4VHJhbnNmb3JtLCBrZXJuZWwsIGtlcm5lbFdpZHRoLCBpbWFnZUluY3JlbWVu
dCk7Ci19Ci0KLXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcihQ
bGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQotewotICAgIG1fY29udGV4dC0+YmluZEZyYW1l
YnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEOjpGUkFNRUJVRkZFUiwgZnJhbWVidWZmZXIpOwotfQot
Ci12b2lkIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpzZXRWaWV3cG9ydChjb25zdCBJbnRTaXpl
JiBzaXplKQotewotICAgIG1fY29udGV4dC0+dmlld3BvcnQoMCwgMCwgc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpKTsKLX0KLQotYm9vbCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRz
SW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29udGV4dC0+cGFpbnRz
SW50b0NhbnZhc0J1ZmZlcigpOwotfQotCi1ib29sIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjp1
c2VMb29wQmxpbm5Gb3JQYXRoUmVuZGVyaW5nKCkKLXsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LXZvaWQgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnVzZUxvb3BCbGlubkludGVyaW9yUHJvZ3Jh
bSh1bnNpZ25lZCB2ZXJ0ZXhPZmZzZXQsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3Jt
LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKCFtX2xvb3BCbGlubkludGVyaW9yU2hh
ZGVyKSB7Ci0gICAgICAgIG1fbG9vcEJsaW5uSW50ZXJpb3JTaGFkZXIgPSBMb29wQmxpbm5Tb2xp
ZEZpbGxTaGFkZXI6OmNyZWF0ZShtX2NvbnRleHQuZ2V0KCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb29wQmxp
bm5TaGFkZXI6OkludGVyaW9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2hhZGVyOjpOb3RBbnRpYWxpYXNlZCk7
Ci0gICAgfQotICAgIEFTU0VSVChtX2xvb3BCbGlubkludGVyaW9yU2hhZGVyKTsKLSAgICBtX2xv
b3BCbGlubkludGVyaW9yU2hhZGVyLT51c2UodmVydGV4T2Zmc2V0LCAwLCB0cmFuc2Zvcm0sIGNv
bG9yKTsKLX0KLQotdm9pZCBTaGFyZWRHcmFwaGljc0NvbnRleHQzRDo6dXNlTG9vcEJsaW5uRXh0
ZXJpb3JQcm9ncmFtKHVuc2lnbmVkIHZlcnRleE9mZnNldCwgdW5zaWduZWQga2xtT2Zmc2V0LCBj
b25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRyYW5zZm9ybSwgY29uc3QgQ29sb3ImIGNvbG9yKQotewot
ICAgIGlmICghbV9sb29wQmxpbm5FeHRlcmlvclNoYWRlcikgewotICAgICAgICBtX2xvb3BCbGlu
bkV4dGVyaW9yU2hhZGVyID0gTG9vcEJsaW5uU29saWRGaWxsU2hhZGVyOjpjcmVhdGUobV9jb250
ZXh0LmdldCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgTG9vcEJsaW5uU2hhZGVyOjpFeHRlcmlvciwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fb2VzU3RhbmRhcmREZXJpdmF0aXZlc1N1cHBvcnRlZCA/IFNoYWRlcjo6QW50aWFs
aWFzZWQgOiBTaGFkZXI6Ok5vdEFudGlhbGlhc2VkKTsKLSAgICB9Ci0gICAgQVNTRVJUKG1fbG9v
cEJsaW5uRXh0ZXJpb3JTaGFkZXIpOwotICAgIG1fbG9vcEJsaW5uRXh0ZXJpb3JTaGFkZXItPnVz
ZSh2ZXJ0ZXhPZmZzZXQsIGtsbU9mZnNldCwgdHJhbnNmb3JtLCBjb2xvcik7Ci19Ci0KLURyYXdp
bmdCdWZmZXIqIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnZXRPZmZzY3JlZW5CdWZmZXIodW5z
aWduZWQgaW5kZXgsIGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgaWYgKGluZGV4ID49IG1f
b2Zmc2NyZWVuQnVmZmVycy5zaXplKCkpCi0gICAgICAgIG1fb2Zmc2NyZWVuQnVmZmVycy5yZXNp
emUoaW5kZXggKyAxKTsKLQotICAgIGlmICghbV9vZmZzY3JlZW5CdWZmZXJzW2luZGV4XSkKLSAg
ICAgICAgbV9vZmZzY3JlZW5CdWZmZXJzW2luZGV4XSA9IG1fY29udGV4dC0+Y3JlYXRlRHJhd2lu
Z0J1ZmZlcihzaXplKTsKLQotICAgIGlmIChzaXplLndpZHRoKCkgIT0gbV9vZmZzY3JlZW5CdWZm
ZXJzW2luZGV4XS0+c2l6ZSgpLndpZHRoKCkKLSAgICAgICAgfHwgc2l6ZS5oZWlnaHQoKSAhPSBt
X29mZnNjcmVlbkJ1ZmZlcnNbaW5kZXhdLT5zaXplKCkuaGVpZ2h0KCkpCi0gICAgICAgIG1fb2Zm
c2NyZWVuQnVmZmVyc1tpbmRleF0tPnJlc2V0KHNpemUpOwotICAgIHJldHVybiBtX29mZnNjcmVl
bkJ1ZmZlcnNbaW5kZXhdLmdldCgpOwotfQotCi0jaWYgVVNFKFNLSUEpCi1HckNvbnRleHQqIFNo
YXJlZEdyYXBoaWNzQ29udGV4dDNEOjpnckNvbnRleHQoKQotewotICAgIGlmICghKG1fZmxhZ3Mg
JiBVc2VTa2lhR1BVKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKCFtX2dyQ29udGV4dCkg
ewotICAgICAgICBtX2dyQ29udGV4dCA9IEdyQ29udGV4dDo6Q3JlYXRlR0xTaGFkZXJDb250ZXh0
KCk7Ci0gICAgICAgIGlmIChtX2dyQ29udGV4dCkKLSAgICAgICAgICAgIG1fZ3JDb250ZXh0LT5z
ZXRUZXh0dXJlQ2FjaGVMaW1pdHMobWF4VGV4dHVyZUNhY2hlQ291bnQsIG1heFRleHR1cmVDYWNo
ZUJ5dGVzKTsKLSAgICB9Ci0gICAgcmV0dXJuIG1fZ3JDb250ZXh0OwotfQotI2VuZGlmCi0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGljc0NvbnRleHQzRC5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWUyODIxMmZmZTYzYjI2MGI0MTJhMGM2
ZDAxOTNmMmYwYjljMDhiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9TaGFyZWRHcmFwaGlj
c0NvbnRleHQzRC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTkxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1
dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
LSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRF9oCi0jZGVmaW5lIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEX2gK
LQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NUeXBl
cy5oIgotI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCi0jaW5jbHVkZSAiVGV4dHVyZS5oIgotCi0j
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1
ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLQotI2lmIFVTRShT
S0lBKQotY2xhc3MgR3JDb250ZXh0OwotI2VuZGlmCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgQWZmaW5lVHJhbnNmb3JtOwotY2xhc3MgQmljdWJpY1NoYWRlcjsKLWNsYXNzIENvbG9y
OwotY2xhc3MgQ29udm9sdXRpb25TaGFkZXI7Ci1jbGFzcyBEcmF3aW5nQnVmZmVyOwotY2xhc3Mg
RmxvYXRSZWN0OwotY2xhc3MgSG9zdFdpbmRvdzsKLWNsYXNzIEludFNpemU7Ci1jbGFzcyBMb29w
Qmxpbm5Tb2xpZEZpbGxTaGFkZXI7Ci1jbGFzcyBTb2xpZEZpbGxTaGFkZXI7Ci1jbGFzcyBUZXhT
aGFkZXI7Ci0KLXR5cGVkZWYgSGFzaE1hcDxOYXRpdmVJbWFnZVB0ciwgUmVmUHRyPFRleHR1cmU+
ID4gVGV4dHVyZUhhc2hNYXA7Ci0KLWNsYXNzIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEIDogcHVi
bGljIFJlZkNvdW50ZWQ8U2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q+IHsKLXB1YmxpYzoKLQotICAg
IGVudW0gQ3JlYXRpb25GbGFnQml0cyB7Ci0gICAgICAgIFVzZVNraWFHUFUgPSAxCi0gICAgfTsK
LSAgICB0eXBlZGVmIHVuc2lnbmVkIENyZWF0aW9uRmxhZ3M7Ci0KLSAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxTaGFyZWRHcmFwaGljc0NvbnRleHQzRD4gY3JlYXRlKEhvc3RXaW5kb3cqLCBDcmVhdGlv
bkZsYWdzKTsKLSAgICB+U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QoKTsKLQotICAgIC8vIEZ1bmN0
aW9ucyB0aGF0IGRlbGVnYXRlIGRpcmVjdGx5IHRvIEdyYXBoaWNzQ29udGV4dDNELCB3aXRoIGNh
Y2hpbmcKLSAgICB2b2lkIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIHZvaWQgYmluZEJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOwotICAgIHZvaWQgYmluZEZyYW1l
YnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpOwotICAgIHZvaWQgYnVmZmVyRGF0
YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciwgR0MzRGVudW0gdXNhZ2UpOwotICAgIHZv
aWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciwgY29uc3Qgdm9pZCog
ZGF0YSwgR0MzRGVudW0gdXNhZ2UpOwotICAgIHZvaWQgYnVmZmVyU3ViRGF0YShHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIsIGNvbnN0IHZvaWQqIGRhdGEp
OwotICAgIHZvaWQgc2V0Vmlld3BvcnQoY29uc3QgSW50U2l6ZSYpOwotICAgIHZvaWQgc2Npc3Nv
cihHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
KTsKLSAgICB2b2lkIGVuYWJsZShHQzNEZW51bSBjYXBhY2l0eSk7Ci0gICAgdm9pZCBkaXNhYmxl
KEdDM0RlbnVtIGNhcGFjaXR5KTsKLSAgICB2b2lkIGNsZWFyQ29sb3IoY29uc3QgQ29sb3ImKTsK
LSAgICB2b2lkIGNsZWFyKEdDM0RiaXRmaWVsZCBtYXNrKTsKLSAgICB2b2lkIGRyYXdBcnJheXMo
R0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50KTsKLSAgICBHQzNE
ZW51bSBnZXRFcnJvcigpOwotICAgIHZvaWQgZ2V0SW50ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdD
M0RpbnQqIHZhbHVlKTsKLSAgICB2b2lkIGZsdXNoKCk7Ci0KLSAgICBQbGF0Zm9ybTNET2JqZWN0
IGNyZWF0ZUJ1ZmZlcigpOwotICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlRnJhbWVidWZmZXIo
KTsKLSAgICBQbGF0Zm9ybTNET2JqZWN0IGNyZWF0ZVRleHR1cmUoKTsKLQotICAgIHZvaWQgZGVs
ZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcik7Ci0gICAgdm9pZCBk
ZWxldGVUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSk7Ci0KLSAgICB2b2lkIGZyYW1l
YnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0Mz
RGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0LCBHQzNEaW50IGxldmVsKTsKLSAgICB2
b2lkIHRleFBhcmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCBwYXJhbSk7Ci0gICAgYm9vbCB0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBs
ZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwg
Y29uc3Qgdm9pZCogcGl4ZWxzKTsKLSAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFy
Z2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0Mz
RHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVt
IHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscyk7Ci0KLSAgICB2b2lkIHJlYWRQaXhlbHMoR0MzRGlu
dCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVu
dW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKTsKLQotICAgIGJvb2wgcGFpbnRz
SW50b0NhbnZhc0J1ZmZlcigpIGNvbnN0OwotCi0gICAgLy8gU2hhcmVkIGxvZ2ljIGZvciBjYW52
YXMgMmQKLSAgICB2b2lkIGFwcGx5Q29tcG9zaXRlT3BlcmF0b3IoQ29tcG9zaXRlT3BlcmF0b3Ip
OwotICAgIHZvaWQgZW5hYmxlU3RlbmNpbChib29sIGVuYWJsZSk7Ci0gICAgdm9pZCB1c2VRdWFk
VmVydGljZXMoKTsKLQotICAgIHZvaWQgdXNlRmlsbFNvbGlkUHJvZ3JhbShjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mLCBjb25zdCBDb2xvciYpOwotICAgIHZvaWQgdXNlVGV4dHVyZVByb2dyYW0oY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgZmxvYXQgYWxwaGEp
OwotICAgIHZvaWQgdXNlQmljdWJpY1Byb2dyYW0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29u
c3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgZmxvYXQgY29lZmZpY2llbnRzWzE2XSwgY29uc3Qg
ZmxvYXQgaW1hZ2VJbmNyZW1lbnRbMl0sIGZsb2F0IGFscGhhKTsKLSAgICB2b2lkIHVzZUNvbnZv
bHV0aW9uUHJvZ3JhbShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBBZmZpbmVUcmFuc2Zv
cm0mIHRleFRyYW5zZm9ybSwgY29uc3QgZmxvYXQqIGtlcm5lbCwgaW50IGtlcm5lbFdpZHRoLCBm
bG9hdCBpbWFnZUluY3JlbWVudFsyXSk7Ci0KLSAgICB2b2lkIHNldEFjdGl2ZVRleHR1cmUoR0Mz
RGVudW0gdGV4dHVyZVVuaXQpOwotICAgIHZvaWQgYmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpOwotCi0gICAgYm9vbCBzdXBwb3J0c0JHUkEoKTsK
LSAgICBib29sIHN1cHBvcnRzQ29tcG9zaXRlT3AoQ29tcG9zaXRlT3BlcmF0b3IpIGNvbnN0Owot
Ci0gICAgLy8gQ3JlYXRlcyBhIHRleHR1cmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBnaXZlbiBpbWFn
ZS4gIElzIG93bmVkIGJ5IHRoaXMgY29udGV4dCdzCi0gICAgLy8gVGV4dHVyZUhhc2hNYXAuCi0g
ICAgVGV4dHVyZSogY3JlYXRlVGV4dHVyZShOYXRpdmVJbWFnZVB0ciwgVGV4dHVyZTo6Rm9ybWF0
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotICAgIFRleHR1cmUqIGdldFRleHR1cmUoTmF0aXZl
SW1hZ2VQdHIpOwotCi0gICAgLy8gTXVsdGlwbGUgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QgY2Fu
IGV4aXN0IGluIGEgc2luZ2xlIHByb2Nlc3MgKG9uZSBwZXIgY29tcG9zaXRpbmcgY29udGV4dCkg
YW5kIHRoZSBzYW1lCi0gICAgLy8gTmF0aXZlSW1hZ2VQdHIgbWF5IGJlIHVwbG9hZGVkIGFzIGEg
dGV4dHVyZSBpbnRvIGFsbCBvZiB0aGVtLiAgVGhpcyBmdW5jdGlvbiByZW1vdmVzIHVwbG9hZGVk
IHRleHR1cmVzCi0gICAgLy8gZm9yIGEgZ2l2ZW4gTmF0aXZlSW1hZ2VQdHIgaW4gYWxsIGNvbnRl
eHRzLgotICAgIHN0YXRpYyB2b2lkIHJlbW92ZVRleHR1cmVzRm9yKE5hdGl2ZUltYWdlUHRyKTsK
LQotICAgIC8vIENyZWF0ZXMgYSB0ZXh0dXJlIHRoYXQgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBh
bnkgaW1hZ2UuICBUaGUgY2FsbGVyIHRha2VzIG93bmVyc2hpcCBvZgotICAgIC8vIHRoZSB0ZXh0
dXJlLgotICAgIFBhc3NSZWZQdHI8VGV4dHVyZT4gY3JlYXRlVGV4dHVyZShUZXh0dXJlOjpGb3Jt
YXQsIGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQzRCogZ3Jh
cGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQuZ2V0KCk7IH0KLQotICAg
IC8vIE1lbWJlcnMgZm9yIEdQVS1hY2NlbGVyYXRlZCBwYXRoIHJlbmRlcmluZy4KLSAgICBzdGF0
aWMgYm9vbCB1c2VMb29wQmxpbm5Gb3JQYXRoUmVuZGVyaW5nKCk7Ci0gICAgdm9pZCB1c2VMb29w
Qmxpbm5JbnRlcmlvclByb2dyYW0odW5zaWduZWQgdmVydGV4T2Zmc2V0LCBjb25zdCBBZmZpbmVU
cmFuc2Zvcm0mLCBjb25zdCBDb2xvciYpOwotICAgIHZvaWQgdXNlTG9vcEJsaW5uRXh0ZXJpb3JQ
cm9ncmFtKHVuc2lnbmVkIHZlcnRleE9mZnNldCwgdW5zaWduZWQga2xtT2Zmc2V0LCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBDb2xvciYpOwotICAgIERyYXdpbmdCdWZmZXIqIGdldE9m
ZnNjcmVlbkJ1ZmZlcih1bnNpZ25lZCBpbmRleCwgY29uc3QgSW50U2l6ZSYpOwotCi0jaWYgVVNF
KFNLSUEpCi0gICAgR3JDb250ZXh0KiBnckNvbnRleHQoKTsKLSNlbmRpZgotCi1wcml2YXRlOgot
ICAgIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKFBhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+
LCBQYXNzT3duUHRyPFNvbGlkRmlsbFNoYWRlcj4sIFBhc3NPd25QdHI8VGV4U2hhZGVyPiwgUGFz
c093blB0cjxCaWN1YmljU2hhZGVyPiwgUGFzc093bkFycmF5UHRyPE93blB0cjxDb252b2x1dGlv
blNoYWRlcj4gPiwgQ3JlYXRpb25GbGFncyk7Ci0KLSAgICAvLyBVc2VkIHRvIGltcGxlbWVudCBy
ZW1vdmVUZXh0dXJlc0ZvcigpLCBzZWUgdGhlIGNvbW1lbnQgYWJvdmUuCi0gICAgc3RhdGljIEhh
c2hTZXQ8U2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqPiogYWxsQ29udGV4dHMoKTsKLSAgICB2b2lk
IHJlbW92ZVRleHR1cmVGb3IoTmF0aXZlSW1hZ2VQdHIpOwotCi0gICAgUmVmUHRyPEdyYXBoaWNz
Q29udGV4dDNEPiBtX2NvbnRleHQ7Ci0gICAgYm9vbCBtX2JncmFTdXBwb3J0ZWQ7Ci0KLSAgICB1
bnNpZ25lZCBtX3F1YWRWZXJ0aWNlczsKLQotICAgIE93blB0cjxTb2xpZEZpbGxTaGFkZXI+IG1f
c29saWRGaWxsU2hhZGVyOwotICAgIE93blB0cjxUZXhTaGFkZXI+IG1fdGV4U2hhZGVyOwotICAg
IE93blB0cjxCaWN1YmljU2hhZGVyPiBtX2JpY3ViaWNTaGFkZXI7Ci0gICAgT3duQXJyYXlQdHI8
T3duUHRyPENvbnZvbHV0aW9uU2hhZGVyPiA+IG1fY29udm9sdXRpb25TaGFkZXJzOwotCi0gICAg
VGV4dHVyZUhhc2hNYXAgbV90ZXh0dXJlczsKLQotICAgIC8vIE1lbWJlcnMgZm9yIEdQVS1hY2Nl
bGVyYXRlZCBwYXRoIHJlbmRlcmluZy4KLSAgICAvLyBGSVhNRTogc3VwcG9ydCBtb3JlIGtpbmRz
IG9mIGZpbGwgdHlwZXMgZm9yIHBhdGhzLgotICAgIE93blB0cjxMb29wQmxpbm5Tb2xpZEZpbGxT
aGFkZXI+IG1fbG9vcEJsaW5uSW50ZXJpb3JTaGFkZXI7Ci0gICAgT3duUHRyPExvb3BCbGlublNv
bGlkRmlsbFNoYWRlcj4gbV9sb29wQmxpbm5FeHRlcmlvclNoYWRlcjsKLSAgICBib29sIG1fb2Vz
U3RhbmRhcmREZXJpdmF0aXZlc1N1cHBvcnRlZDsKLQotICAgIFdURjo6VmVjdG9yPFJlZlB0cjxE
cmF3aW5nQnVmZmVyPiA+IG1fb2Zmc2NyZWVuQnVmZmVyczsKLQotICAgIHVuc2lnbmVkIG1fZmxh
Z3M7Ci0jaWYgVVNFKFNLSUEpCi0gICAgR3JDb250ZXh0KiBtX2dyQ29udGV4dDsKLSNlbmRpZgot
fTsKLQotY29uc3QgZmxvYXQgY01heFNpZ21hID0gNC4wZjsKLWNvbnN0IGludCBjTWF4S2VybmVs
V2lkdGggPSAyNTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gU2hhcmVk
R3JhcGhpY3NDb250ZXh0M0RfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L1NvbGlkRmlsbFNoYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvU29saWRGaWxsU2hhZGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggYmRkNTg5NjBjNGFmMmI1YTVjZjcwZGE5YWI5NWJkNTc1ZDY4ZWIzYi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvU29saWRGaWxsU2hhZGVyLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDc5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0g
KiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdo
dCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5h
bWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
KiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAot
ICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJB
VEVEXzJEX0NBTlZBUykKLQotI2luY2x1ZGUgIlNvbGlkRmlsbFNoYWRlci5oIgotCi0jaW5jbHVk
ZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLVNvbGlkRmlsbFNoYWRlcjo6U29saWRGaWxsU2hhZGVyKEdyYXBoaWNzQ29u
dGV4dDNEKiBjb250ZXh0LCB1bnNpZ25lZCBwcm9ncmFtKQotICAgIDogU2hhZGVyKGNvbnRleHQs
IHByb2dyYW0pCi17Ci0gICAgbV9tYXRyaXhMb2NhdGlvbiA9IGNvbnRleHQtPmdldFVuaWZvcm1M
b2NhdGlvbihwcm9ncmFtLCAibWF0cml4Iik7Ci0gICAgbV9jb2xvckxvY2F0aW9uID0gY29udGV4
dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJjb2xvciIpOwotICAgIG1fcG9zaXRpb25M
b2NhdGlvbiA9IGNvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sICJwb3NpdGlvbiIp
OwotfQotCi1QYXNzT3duUHRyPFNvbGlkRmlsbFNoYWRlcj4gU29saWRGaWxsU2hhZGVyOjpjcmVh
dGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCi17Ci0gICAgdW5zaWduZWQgcHJvZ3JhbSA9
IGxvYWRQcm9ncmFtKGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdlbmVyYXRlVmVydGV4KFNoYWRlcjo6VHdvRGltZW5zaW9uYWwsIFNoYWRlcjo6U29saWRGaWxs
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVGcmFnbWVudChT
aGFkZXI6OlR3b0RpbWVuc2lvbmFsLCBTaGFkZXI6OlNvbGlkRmlsbCwgU2hhZGVyOjpOb3RBbnRp
YWxpYXNlZCkpOwotICAgIGlmICghcHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTb2xpZEZpbGxTaGFkZXIoY29udGV4dCwgcHJvZ3JhbSkp
OwotfQotCi12b2lkIFNvbGlkRmlsbFNoYWRlcjo6dXNlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYg
dHJhbnNmb3JtLCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgbV9jb250ZXh0LT51c2VQcm9n
cmFtKG1fcHJvZ3JhbSk7Ci0KLSAgICBmbG9hdCByZ2JhWzRdOwotICAgIGNvbG9yLmdldFJHQkEo
cmdiYVswXSwgcmdiYVsxXSwgcmdiYVsyXSwgcmdiYVszXSk7Ci0gICAgbV9jb250ZXh0LT51bmlm
b3JtNGYobV9jb2xvckxvY2F0aW9uLCByZ2JhWzBdICogcmdiYVszXSwgcmdiYVsxXSAqIHJnYmFb
M10sIHJnYmFbMl0gKiByZ2JhWzNdLCByZ2JhWzNdKTsKLQotICAgIGZsb2F0IG1hdHJpeFs5XTsK
LSAgICBhZmZpbmVUbzN4Myh0cmFuc2Zvcm0sIG1hdHJpeCk7Ci0gICAgbV9jb250ZXh0LT51bmlm
b3JtTWF0cml4M2Z2KG1fbWF0cml4TG9jYXRpb24sIGZhbHNlIC8qdHJhbnNwb3NlKi8sIG1hdHJp
eCwgMSAvKmNvdW50Ki8pOwotCi0gICAgbV9jb250ZXh0LT52ZXJ0ZXhBdHRyaWJQb2ludGVyKG1f
cG9zaXRpb25Mb2NhdGlvbiwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwg
MCk7Ci0KLSAgICBtX2NvbnRleHQtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fcG9zaXRpb25M
b2NhdGlvbik7Ci19Ci0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvU29saWRGaWxsU2hhZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvU29saWRGaWxsU2hhZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDEwNzFlNzM5MjVmZWE0YTExNjExNTBhYTdiOTI5ODkzNDRhZjI0NWMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1NvbGlkRmlsbFNoYWRlci5oCisrKyAvZGV2L251bGwK
QEAgLTEsNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
LSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
LSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
Ci0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFNvbGlkRmlsbFNoYWRlcl9oCi0jZGVmaW5lIFNvbGlk
RmlsbFNoYWRlcl9oCi0KLSNpbmNsdWRlICJTaGFkZXIuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBTb2xpZEZpbGxTaGFkZXIgOiBwdWJsaWMgU2hhZGVyIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc093blB0cjxTb2xpZEZpbGxTaGFkZXI+IGNyZWF0ZShHcmFwaGljc0NvbnRl
eHQzRCogY29udGV4dCk7Ci0gICAgdm9pZCB1c2UoY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB0cmFu
c2Zvcm0sIGNvbnN0IENvbG9yJiBjb2xvcik7Ci0KLXByaXZhdGU6Ci0gICAgU29saWRGaWxsU2hh
ZGVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCB1bnNpZ25lZCBwcm9ncmFtKTsKLQotICAg
IGludCBtX21hdHJpeExvY2F0aW9uOwotICAgIGludCBtX2NvbG9yTG9jYXRpb247Ci0gICAgaW50
IG1fcG9zaXRpb25Mb2NhdGlvbjsKLX07Ci0KLX0KLQotI2VuZGlmIC8vIFNvbGlkRmlsbFNoYWRl
cl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvVGV4
U2hhZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXhTaGFk
ZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmM2Q2YWUyNzBiNDY5MTA4MGFj
Mjc1NDhmNGY3N2I3MTQxNjcxZTY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXhTaGFk
ZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
YykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0KLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotCi0jaW5jbHVkZSAiVGV4U2hh
ZGVyLmgiCi0KLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLVRleFNoYWRlcjo6VGV4U2hhZGVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0
LCB1bnNpZ25lZCBwcm9ncmFtKQotICAgIDogU2hhZGVyKGNvbnRleHQsIHByb2dyYW0pCi17Ci0g
ICAgbV9tYXRyaXhMb2NhdGlvbiA9IGNvbnRleHQtPmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFt
LCAibWF0cml4Iik7Ci0gICAgbV90ZXhNYXRyaXhMb2NhdGlvbiA9IGNvbnRleHQtPmdldFVuaWZv
cm1Mb2NhdGlvbihwcm9ncmFtLCAidGV4TWF0cml4Iik7Ci0gICAgbV9hbHBoYUxvY2F0aW9uID0g
Y29udGV4dC0+Z2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJnbG9iYWxBbHBoYSIpOwotICAg
IG1fcG9zaXRpb25Mb2NhdGlvbiA9IGNvbnRleHQtPmdldEF0dHJpYkxvY2F0aW9uKHByb2dyYW0s
ICJwb3NpdGlvbiIpOwotICAgIG1fc2FtcGxlckxvY2F0aW9uID0gY29udGV4dC0+Z2V0VW5pZm9y
bUxvY2F0aW9uKHByb2dyYW0sICJzYW1wbGVyIik7Ci19Ci0KLVBhc3NPd25QdHI8VGV4U2hhZGVy
PiBUZXhTaGFkZXI6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLXsKLSAgICB1
bnNpZ25lZCBwcm9ncmFtID0gbG9hZFByb2dyYW0oY29udGV4dCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVWZXJ0ZXgoU2hhZGVyOjpUd29EaW1lbnNpb25hbCwg
U2hhZGVyOjpUZXh0dXJlRmlsbCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGdlbmVyYXRlRnJhZ21lbnQoU2hhZGVyOjpUd29EaW1lbnNpb25hbCwgU2hhZGVyOjpUZXh0dXJl
RmlsbCwgU2hhZGVyOjpOb3RBbnRpYWxpYXNlZCkpOwotICAgIGlmICghcHJvZ3JhbSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBUZXhTaGFkZXIoY29u
dGV4dCwgcHJvZ3JhbSkpOwotfQotCi12b2lkIFRleFNoYWRlcjo6dXNlKGNvbnN0IEFmZmluZVRy
YW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHRleFRyYW5zZm9ybSwg
aW50IHNhbXBsZXIsIGZsb2F0IGFscGhhKQotewotICAgIG1fY29udGV4dC0+dXNlUHJvZ3JhbSht
X3Byb2dyYW0pOwotICAgIGZsb2F0IG1hdHJpeFs5XTsKLSAgICBhZmZpbmVUbzN4Myh0cmFuc2Zv
cm0sIG1hdHJpeCk7Ci0gICAgbV9jb250ZXh0LT51bmlmb3JtTWF0cml4M2Z2KG1fbWF0cml4TG9j
YXRpb24sIGZhbHNlIC8qdHJhbnNwb3NlKi8sIG1hdHJpeCwgMSAvKmNvdW50Ki8pOwotCi0gICAg
ZmxvYXQgdGV4TWF0cml4WzldOwotICAgIGFmZmluZVRvM3gzKHRleFRyYW5zZm9ybSwgdGV4TWF0
cml4KTsKLSAgICBtX2NvbnRleHQtPnVuaWZvcm1NYXRyaXgzZnYobV90ZXhNYXRyaXhMb2NhdGlv
biwgZmFsc2UgLyp0cmFuc3Bvc2UqLywgdGV4TWF0cml4LCAxIC8qY291bnQqLyk7Ci0KLSAgICBt
X2NvbnRleHQtPnVuaWZvcm0xaShtX3NhbXBsZXJMb2NhdGlvbiwgc2FtcGxlcik7Ci0gICAgbV9j
b250ZXh0LT51bmlmb3JtMWYobV9hbHBoYUxvY2F0aW9uLCBhbHBoYSk7Ci0KLSAgICBtX2NvbnRl
eHQtPnZlcnRleEF0dHJpYlBvaW50ZXIobV9wb3NpdGlvbkxvY2F0aW9uLCAyLCBHcmFwaGljc0Nv
bnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKLQotICAgIG1fY29udGV4dC0+ZW5hYmxlVmVy
dGV4QXR0cmliQXJyYXkobV9wb3NpdGlvbkxvY2F0aW9uKTsKLQotfQotCi19Ci0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleFNoYWRl
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L1RleFNoYWRlci5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzU5OTdkNTVlOTYwNjE2ZmYxNTZlY2VkMDFi
ZTVkNWRlOWNhMDdmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9UZXhTaGFkZXIuaAorKysg
L2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
LSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBUZXhTaGFkZXJfaAotI2RlZmluZSBU
ZXhTaGFkZXJfaAotCi0jaW5jbHVkZSAiU2hhZGVyLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgVGV4U2hhZGVyIDogcHVibGljIFNoYWRlciB7Ci1wdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NPd25QdHI8VGV4U2hhZGVyPiBjcmVhdGUoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQp
OwotICAgIHZvaWQgdXNlKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgdHJhbnNmb3JtLCBjb25zdCBB
ZmZpbmVUcmFuc2Zvcm0mIHRleFRyYW5zZm9ybSwgaW50IHNhbXBsZXIsIGZsb2F0IGFscGhhKTsK
LQotcHJpdmF0ZToKLSAgICBUZXhTaGFkZXIoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQsIHVu
c2lnbmVkIHByb2dyYW0pOwotCi0gICAgaW50IG1fbWF0cml4TG9jYXRpb247Ci0gICAgaW50IG1f
dGV4TWF0cml4TG9jYXRpb247Ci0gICAgaW50IG1fc2FtcGxlckxvY2F0aW9uOwotICAgIGludCBt
X2FscGhhTG9jYXRpb247Ci0gICAgaW50IG1fcG9zaXRpb25Mb2NhdGlvbjsKLX07Ci0KLX0KLQot
I2VuZGlmIC8vIFRleFNoYWRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HcmFwaGljc0NvbnRleHRTa2lhLmNwcAppbmRleCA1ZWU1
YjI3ZWQ4ODc1Y2E0ODEyYWZkMGIyMzBkY2U3Y2Y5ODgwNzBlLi5lYzRlNjMzNzMzZWU1YzNjOGVj
ZWE2MjU0ODQxYWMzYTI1NmU2YTZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0dyYXBoaWNzQ29udGV4dFNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR3JhcGhpY3NDb250ZXh0U2tpYS5jcHAKQEAgLTM1
LDcgKzM1LDYgQEAKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgog
I2luY2x1ZGUgIkdyYWRpZW50LmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0R1BVLmgiCiAj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAi
TmF0aXZlSW1hZ2VTa2lhLmgiCkBAIC0yNDcsOSArMjQ2LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgpKQotICAg
ICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCktPnNhdmUoKTsKLQogICAgIC8vIFNh
dmUgb3VyIHByaXZhdGUgU3RhdGUuCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNhdmUoKTsKIH0K
QEAgLTI1OSw5ICsyNTUsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3Jt
U3RhdGUoKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpCi0gICAgICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5ncHVDYW52YXMoKS0+cmVzdG9yZSgpOwotCiAgICAgLy8gUmVzdG9yZSBvdXIgcHJp
dmF0ZSBTdGF0ZS4KICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cmVzdG9yZSgpOwogfQpAQCAtMzAw
LDcgKzI5Myw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xp
cChjb25zdCBJbnRSZWN0JiByZWN0LCBpbnQgdGhpY2tuZXNzCiAgICAgaWYgKCFpc1JlY3RTa2lh
U2FmZShnZXRDVE0oKSwgcikpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPm1h
a2VHckNvbnRleHRDdXJyZW50KCk7CiAgICAgU2tQYXRoIHBhdGg7CiAgICAgcGF0aC5hZGRPdmFs
KHIsIFNrUGF0aDo6a0NXX0RpcmVjdGlvbik7CiAgICAgLy8gb25seSBwZXJmb3JtIHRoZSBpbnNl
dCBpZiB3ZSB3b24ndCBpbnZlcnQgcgpAQCAtMzI2LDE2ICszMTksNiBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6Y2xlYXJSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCkKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0
KCktPnVzZUdQVSgpICYmICFwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzQ2xpcEFwcGxpZWQoKSkg
ewotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvckhhcmR3YXJlRHJhdygpOwot
ICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCktPmNsZWFyUmVjdChyZWN0KTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZvcmNlIGEgcmVhZGJhY2sgaGVyZSAo
aWYgd2UncmUgdXNpbmcgdGhlIEdQVSksIHNpbmNlIGNsZWFyUmVjdCgpIGlzCi0gICAgLy8gaW5j
b21wYXRpYmxlIHdpdGggbWl4ZWQtbW9kZSByZW5kZXJpbmcuCi0gICAgcGxhdGZvcm1Db250ZXh0
KCktPnN5bmNTb2Z0d2FyZUNhbnZhcygpOwotCiAgICAgU2tSZWN0IHIgPSByZWN0OwogICAgIGlm
ICghaXNSZWN0U2tpYVNhZmUoZ2V0Q1RNKCksIHIpKQogICAgICAgICBDbGlwUmVjdFRvQ2FudmFz
KCpwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHIsICZyKTsKQEAgLTM1NSw3ICszMzgsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAgICAg
aWYgKCFpc1JlY3RTa2lhU2FmZShnZXRDVE0oKSwgcikpCiAgICAgICAgIHJldHVybjsKIAotICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CisgICAgcGxhdGZv
cm1Db250ZXh0KCktPm1ha2VHckNvbnRleHRDdXJyZW50KCk7CiAgICAgcGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLT5jbGlwUmVjdChyKTsKIH0KIApAQCAtMzY4LDcgKzM1MSw3IEBAIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBhdGgpCiAgICAgaWYgKCFpc1BhdGhT
a2lhU2FmZShnZXRDVE0oKSwgcCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCkt
Pm1ha2VHckNvbnRleHRDdXJyZW50KCk7CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNsaXBQYXRo
QW50aUFsaWFzZWQocCk7CiB9CiAKQEAgLTM3Nyw5ICszNjAsNiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2FudmFzQ2xpcChjb25zdCBQYXRoJiBwYXRoKQogICAgIGlmIChwYWludGluZ0Rpc2Fi
bGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNl
R1BVKCkpCi0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMoKS0+Y2xpcFBhdGgo
cGF0aCk7Ci0KICAgICBjb25zdCBTa1BhdGgmIHAgPSAqcGF0aC5wbGF0Zm9ybVBhdGgoKTsKICAg
ICBpZiAoIWlzUGF0aFNraWFTYWZlKGdldENUTSgpLCBwKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
NDA0LDkgKzM4NCw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwT3V0KGNvbnN0IFBhdGgm
IHApCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSkKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0
KCktPmdwdUNhbnZhcygpLT5jbGlwT3V0KHApOwotCiAgICAgY29uc3QgU2tQYXRoJiBwYXRoID0g
KnAucGxhdGZvcm1QYXRoKCk7CiAgICAgaWYgKCFpc1BhdGhTa2lhU2FmZShnZXRDVE0oKSwgcGF0
aCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQxOSw5ICszOTYsNiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6Y2xpcFBhdGgoY29uc3QgUGF0aCYgcGF0aFRvQ2xpcCwgV2luZFJ1bGUgY2xpcFJ1bGUp
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KHBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSkKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCkt
PmdwdUNhbnZhcygpLT5jbGlwUGF0aChwYXRoVG9DbGlwKTsKLQogICAgIFNrUGF0aCBwYXRoID0g
KnBhdGhUb0NsaXAucGxhdGZvcm1QYXRoKCk7CiAgICAgaWYgKCFpc1BhdGhTa2lhU2FmZShnZXRD
VE0oKSwgcGF0aCkpCiAgICAgICAgIHJldHVybjsKQEAgLTQzNSw5ICs0MDksNiBAQCB2b2lkIEdy
YXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgYWZmaW5lKQog
ICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChw
bGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpCi0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5n
cHVDYW52YXMoKS0+Y29uY2F0Q1RNKGFmZmluZSk7Ci0KICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
Y2FudmFzKCktPmNvbmNhdChhZmZpbmUpOwogfQogCkBAIC00NDYsOSArNDE3LDYgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldENUTShjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIGFmZmluZSkKICAg
ICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocGxh
dGZvcm1Db250ZXh0KCktPnVzZUdQVSgpKQotICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Z3B1
Q2FudmFzKCktPnNldENUTShhZmZpbmUpOwotCiAgICAgcGxhdGZvcm1Db250ZXh0KCktPmNhbnZh
cygpLT5zZXRNYXRyaXgoYWZmaW5lKTsKIH0KIApAQCAtNDc0LDcgKzQ0Miw3IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpkcmF3Q29udmV4UG9seWdvbihzaXplX3QgbnVtUG9pbnRzLAogICAgIGlm
IChudW1Qb2ludHMgPD0gMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1Db250ZXh0
KCktPnByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bWFr
ZUdyQ29udGV4dEN1cnJlbnQoKTsKIAogICAgIFNrUGF0aCBwYXRoOwogICAgIHNldFBhdGhGcm9t
Q29udmV4UG9pbnRzKCZwYXRoLCBudW1Qb2ludHMsIHBvaW50cyk7CkBAIC01MTYsNyArNDg0LDcg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKGNvbnN0IEludFJlY3QmIGVsaXBz
ZVJlY3QpCiAgICAgaWYgKCFpc1JlY3RTa2lhU2FmZShnZXRDVE0oKSwgcmVjdCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3
KCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPm1ha2VHckNvbnRleHRDdXJyZW50KCk7CiAgICAg
U2tQYWludCBwYWludDsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvckZpbGxp
bmcoJnBhaW50KTsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmRyYXdPdmFsKHJl
Y3QsIHBhaW50KTsKQEAgLTU3Myw3ICs1NDEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0ZvY3VzUmluZyhjb25zdCBWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgd2lkdGgsIGludAog
ICAgIGlmICghcmVjdENvdW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5t
YWtlR3JDb250ZXh0Q3VycmVudCgpOwogICAgIFNrUmVnaW9uIGZvY3VzUmluZ1JlZ2lvbjsKICAg
ICBjb25zdCBTa1NjYWxhciBmb2N1c1JpbmdPdXRzZXQgPSBnZXRGb2N1c1JpbmdPdXRzZXQod2lk
dGgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWN0Q291bnQ7IGkrKykgewpAQCAt
NjA4LDcgKzU3Niw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBJbnRQ
b2ludCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYgcG9pbnQyKQogICAgIGlmICghaXNQb2ludFNr
aWFTYWZlKGdldENUTSgpLCBwb2ludDEpIHx8ICFpc1BvaW50U2tpYVNhZmUoZ2V0Q1RNKCksIHBv
aW50MikpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJl
Rm9yU29mdHdhcmVEcmF3KCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPm1ha2VHckNvbnRleHRD
dXJyZW50KCk7CiAKICAgICBGbG9hdFBvaW50IHAxID0gcG9pbnQxOwogICAgIEZsb2F0UG9pbnQg
cDIgPSBwb2ludDI7CkBAIC02NTQsNyArNjIyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdMaW5lRm9yVGV4dENoZWNraW5nKGNvbnN0IEZsb2F0UG9pbnQmIHB0LCBmbG9hdCB3aWR0aCwK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOworICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgpOwogCiAgICAgLy8gQ3JlYXRlIHRoZSBwYXR0
ZXJuIHdlJ2xsIHVzZSB0byBkcmF3IHRoZSB1bmRlcmxpbmUuCiAgICAgc3RhdGljIFNrQml0bWFw
KiBtaXNzcGVsbEJpdG1hcCA9IDA7CkBAIC03MzYsNyArNzA0LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdMaW5lRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiBwdCwKICAgICBpZiAod2lk
dGggPD0gMCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBh
cmVGb3JTb2Z0d2FyZURyYXcoKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bWFrZUdyQ29udGV4
dEN1cnJlbnQoKTsKIAogICAgIGludCB0aGlja25lc3MgPSBTa01heDMyKHN0YXRpY19jYXN0PGlu
dD4oc3Ryb2tlVGhpY2tuZXNzKCkpLCAxKTsKICAgICBTa1JlY3QgcjsKQEAgLTc1OCw3ICs3MjYs
NyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBwbGF0
Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOworICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgpOwogCiAgICAgU2tSZWN0IHIgPSByZWN0Owog
ICAgIGlmICghaXNSZWN0U2tpYVNhZmUoZ2V0Q1RNKCksIHIpKSB7CkBAIC03NzQsMTggKzc0Miwx
MSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFBhdGgoY29uc3QgUGF0aCYgcGF0aFRvRmls
bCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICAv
LyBGSVhNRTogYWRkIHN1cHBvcnQgdG8gR3JhcGhpY3NDb250ZXh0R1BVIGZvciBtb3JlIHRoYW4g
anVzdCBzb2xpZCBmaWxscy4KLSAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgpICYm
IHBsYXRmb3JtQ29udGV4dCgpLT5jYW5BY2NlbGVyYXRlKCkpIHsKLSAgICAgICAgcGxhdGZvcm1D
b250ZXh0KCktPnByZXBhcmVGb3JIYXJkd2FyZURyYXcoKTsKLSAgICAgICAgcGxhdGZvcm1Db250
ZXh0KCktPmdwdUNhbnZhcygpLT5maWxsUGF0aChwYXRoVG9GaWxsKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQogICAgIFNrUGF0aCBwYXRoID0gKnBhdGhUb0ZpbGwucGxhdGZvcm1QYXRoKCk7
CiAgICAgaWYgKCFpc1BhdGhTa2lhU2FmZShnZXRDVE0oKSwgcGF0aCkpCiAgICAgICByZXR1cm47
CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOworICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgpOwogCiAgICAgY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKICAgICBwYXRoLnNldEZpbGxU
eXBlKHN0YXRlLmZpbGxSdWxlID09IFJVTEVfRVZFTk9ERCA/CkBAIC04MDgsMTUgKzc2OSw5IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBGbG9hdFJlY3QmIHJlY3QpCiAg
ICAgICAgIENsaXBSZWN0VG9DYW52YXMoKnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgciwg
JnIpOwogICAgIH0KIAotICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkgJiYgcGxh
dGZvcm1Db250ZXh0KCktPmNhbkFjY2VsZXJhdGUoKSkgewotICAgICAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+cHJlcGFyZUZvckhhcmR3YXJlRHJhdygpOwotICAgICAgICBwbGF0Zm9ybUNvbnRleHQo
KS0+Z3B1Q2FudmFzKCktPmZpbGxSZWN0KHJlY3QpOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNhdmUoKTsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPm1ha2VH
ckNvbnRleHRDdXJyZW50KCk7CiAKICAgICBTa1BhaW50IHBhaW50OwogICAgIHBsYXRmb3JtQ29u
dGV4dCgpLT5zZXR1cFBhaW50Rm9yRmlsbGluZygmcGFpbnQpOwpAQCAtODMwLDEzICs3ODUsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IsIENvbG9yUwogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkgJiYg
cGxhdGZvcm1Db250ZXh0KCktPmNhbkFjY2VsZXJhdGUoKSkgewotICAgICAgICBwbGF0Zm9ybUNv
bnRleHQoKS0+cHJlcGFyZUZvckhhcmR3YXJlRHJhdygpOwotICAgICAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+Z3B1Q2FudmFzKCktPmZpbGxSZWN0KHJlY3QsIGNvbG9yLCBjb2xvclNwYWNlKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9y
U29mdHdhcmVEcmF3KCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPm1ha2VHckNvbnRleHRDdXJy
ZW50KCk7CiAKICAgICBTa1JlY3QgciA9IHJlY3Q7CiAgICAgaWYgKCFpc1JlY3RTa2lhU2FmZShn
ZXRDVE0oKSwgcikpIHsKQEAgLTg3MCw3ICs4MTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
ZmlsbFJvdW5kZWRSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QsCiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGxhdGZvcm1Db250ZXh0KCktPnByZXBh
cmVGb3JTb2Z0d2FyZURyYXcoKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQoKS0+bWFrZUdyQ29udGV4
dEN1cnJlbnQoKTsKIAogICAgIFNrUmVjdCByID0gcmVjdDsKICAgICBpZiAoIWlzUmVjdFNraWFT
YWZlKGdldENUTSgpLCByKSkKQEAgLTkyMSw5ICs4NzAsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2NhbGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BV
KCkpCi0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMoKS0+c2NhbGUoc2l6ZSk7
Ci0KICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPnNjYWxlKFdlYkNvcmVGbG9hdFRv
U2tTY2FsYXIoc2l6ZS53aWR0aCgpKSwKICAgICAgICAgV2ViQ29yZUZsb2F0VG9Ta1NjYWxhcihz
aXplLmhlaWdodCgpKSk7CiB9CkBAIC05MzMsOSArODc5LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldEFscGhhKGZsb2F0IGFscGhhKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpCi0g
ICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMoKS0+c2V0QWxwaGEoYWxwaGEpOwot
CiAgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldEFscGhhKGFscGhhKTsKIH0KIApAQCAtOTQ0LDkg
Kzg4Nyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybUNvbXBvc2l0ZU9wZXJh
dGlvbihDb21wb3NpdGVPcGVyYXRvciBvcCkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgpKQot
ICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Z3B1Q2FudmFzKCktPnNldENvbXBvc2l0ZU9wZXJh
dGlvbihvcCk7Ci0KICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0WGZlcm1vZGVNb2RlKFdlYkNv
cmVDb21wb3NpdGVUb1NraWFDb21wb3NpdGUob3ApKTsKIH0KIApAQCAtMTAzOSw5ICs5NzksNiBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1GaWxsQ29sb3IoY29uc3QgQ29sb3Im
IGNvbG9yLCBDb2xvclNwYWNlIGNvbG9yUwogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkpCi0g
ICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMoKS0+c2V0RmlsbENvbG9yKGNvbG9y
LCBjb2xvclNwYWNlKTsKLQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXRGaWxsQ29sb3IoY29s
b3IucmdiKCkpOwogfQogCkBAIC0xMDY5LDE0ICsxMDA2LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OnNldFBsYXRmb3JtU2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgc2l6ZSwKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocGxhdGZvcm1Db250
ZXh0KCktPnVzZUdQVSgpKSB7Ci0gICAgICAgIEdyYXBoaWNzQ29udGV4dEdQVSogY2FudmFzID0g
cGxhdGZvcm1Db250ZXh0KCktPmdwdUNhbnZhcygpOwotICAgICAgICBjYW52YXMtPnNldFNoYWRv
d09mZnNldChzaXplKTsKLSAgICAgICAgY2FudmFzLT5zZXRTaGFkb3dCbHVyKGJsdXJGbG9hdCk7
Ci0gICAgICAgIGNhbnZhcy0+c2V0U2hhZG93Q29sb3IoY29sb3IsIGNvbG9yU3BhY2UpOwotICAg
ICAgICBjYW52YXMtPnNldFNoYWRvd3NJZ25vcmVUcmFuc2Zvcm1zKG1fc3RhdGUuc2hhZG93c0ln
bm9yZVRyYW5zZm9ybXMpOwotICAgIH0KLQogICAgIC8vIERldGVjdCB3aGVuIHRoZXJlJ3Mgbm8g
ZWZmZWN0aXZlIHNoYWRvdyBhbmQgY2xlYXIgdGhlIGxvb3Blci4KICAgICBpZiAoIXNpemUud2lk
dGgoKSAmJiAhc2l6ZS5oZWlnaHQoKSAmJiAhYmx1ckZsb2F0KSB7CiAgICAgICAgIHBsYXRmb3Jt
Q29udGV4dCgpLT5zZXREcmF3TG9vcGVyKDApOwpAQCAtMTIxMSw3ICsxMTQwLDcgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnN0cm9rZUFyYyhjb25zdCBJbnRSZWN0JiByLCBpbnQgc3RhcnRBbmds
ZSwgaW50IGFuZ2xlU3BhbikKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygp
OworICAgIHBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgpOwogCiAgICAg
U2tQYWludCBwYWludDsKICAgICBTa1JlY3Qgb3ZhbCA9IHI7CkBAIC0xMjQ0LDcgKzExNzMsNyBA
QCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlUGF0aChjb25zdCBQYXRoJiBwYXRoVG9TdHJv
a2UpCiAgICAgaWYgKCFpc1BhdGhTa2lhU2FmZShnZXRDVE0oKSwgcGF0aCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIHBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7
CisgICAgcGxhdGZvcm1Db250ZXh0KCktPm1ha2VHckNvbnRleHRDdXJyZW50KCk7CiAKICAgICBT
a1BhaW50IHBhaW50OwogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5zZXR1cFBhaW50Rm9yU3Ryb2tp
bmcoJnBhaW50LCAwLCAwKTsKQEAgLTEyNTksNyArMTE4OCw3IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzdHJva2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgZmxvYXQgbGluZVdpZHRoKQog
ICAgIGlmICghaXNSZWN0U2tpYVNhZmUoZ2V0Q1RNKCksIHJlY3QpKQogICAgICAgICByZXR1cm47
CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOworICAg
IHBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgpOwogCiAgICAgU2tQYWlu
dCBwYWludDsKICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+c2V0dXBQYWludEZvclN0cm9raW5nKCZw
YWludCwgMCwgMCk7CkBAIC0xMjg5LDkgKzEyMTgsNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
cm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKQogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwbGF0Zm9ybUNvbnRleHQoKS0+dXNlR1BVKCkp
Ci0gICAgICAgIHBsYXRmb3JtQ29udGV4dCgpLT5ncHVDYW52YXMoKS0+cm90YXRlKGFuZ2xlSW5S
YWRpYW5zKTsKLQogICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+cm90YXRlKFdlYkNv
cmVGbG9hdFRvU2tTY2FsYXIoCiAgICAgICAgIGFuZ2xlSW5SYWRpYW5zICogKDE4MC4wZiAvIDMu
MTQxNTkyNjVmKSkpOwogfQpAQCAtMTMwMSwyNiArMTIyNywxMyBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6dHJhbnNsYXRlKGZsb2F0IHcsIGZsb2F0IGgpCiAgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHBsYXRmb3JtQ29udGV4dCgpLT51c2VH
UFUoKSkKLSAgICAgICAgcGxhdGZvcm1Db250ZXh0KCktPmdwdUNhbnZhcygpLT50cmFuc2xhdGUo
dywgaCk7Ci0KICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPnRyYW5zbGF0ZShXZWJD
b3JlRmxvYXRUb1NrU2NhbGFyKHcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYkNvcmVGbG9hdFRvU2tTY2FsYXIoaCkpOwogfQogCi12b2lkIEdyYXBoaWNz
Q29udGV4dDo6c3luY1NvZnR3YXJlQ2FudmFzKCkKLXsKLSAgICBwbGF0Zm9ybUNvbnRleHQoKS0+
c3luY1NvZnR3YXJlQ2FudmFzKCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRTaGFy
ZWRHcmFwaGljc0NvbnRleHQzRChTaGFyZWRHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRHJh
d2luZ0J1ZmZlciogZnJhbWVidWZmZXIsIGNvbnN0IEludFNpemUmIHNpemUpCi17Ci0gICAgcGxh
dGZvcm1Db250ZXh0KCktPnNldFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKGNvbnRleHQsIGZyYW1l
YnVmZmVyLCBzaXplKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6Om1hcmtEaXJ0eVJlY3Qo
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRHcmFwaGljc0Nv
bnRleHQzRChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZnJhbWVi
dWZmZXIsIGNvbnN0IEludFNpemUmIHNpemUpCiB7Ci0gICAgcGxhdGZvcm1Db250ZXh0KCktPm1h
cmtEaXJ0eVJlY3QocmVjdCk7CisgICAgcGxhdGZvcm1Db250ZXh0KCktPnNldEdyYXBoaWNzQ29u
dGV4dDNEKGNvbnRleHQsIGZyYW1lYnVmZmVyLCBzaXplKTsKIH0KIAogI2lmIFBMQVRGT1JNKENI
Uk9NSVVNKSAmJiBPUyhEQVJXSU4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKaW5kZXggM2JmNzU1OGY3M2Y5
OTYxNWE3NDRlOWQ3NWRkMWZiNzc1ZjAwMzVmZi4uZmViMDM1NjFiZjJkMjc1YTljYWNlYzY2ZDZm
ZDdmMDFiNjMwNDVlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcApAQCAtMzgsNyArMzgsNiBAQAogI2lu
Y2x1ZGUgIkJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0J1
ZmZlci5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dEdQVS5oIgogI2luY2x1ZGUgIkltYWdlRGF0YS5oIgogI2luY2x1ZGUgIkpQRUdJbWFn
ZUVuY29kZXIuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCkBAIC0xMDUsNyArMTA0
LDcgQEAgYm9vbCBJbWFnZUJ1ZmZlcjo6ZHJhd3NVc2luZ0NvcHkoKSBjb25zdAogCiBQYXNzUmVm
UHRyPEltYWdlPiBJbWFnZUJ1ZmZlcjo6Y29weUltYWdlKCkgY29uc3QKIHsKLSAgICBtX2NvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5zeW5jU29mdHdhcmVDYW52YXMoKTsKKyAgICBtX2NvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgpOwogICAgIHJldHVy
biBCaXRtYXBJbWFnZVNpbmdsZUZyYW1lU2tpYTo6Y3JlYXRlKCptX2RhdGEubV9wbGF0Zm9ybUNv
bnRleHQuYml0bWFwKCksIHRydWUpOwogfQogCkBAIC0xMTcsMjIgKzExNiw3IEBAIHZvaWQgSW1h
Z2VCdWZmZXI6OmNsaXAoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHJlY3QpIGNvbnN0CiB2b2lkIEltYWdlQnVmZmVyOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJl
Y3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgQ29t
cG9zaXRlT3BlcmF0b3Igb3AsIGJvb2wgdXNlTG93UXVhbGl0eVNjYWxlKQogewotICAgIGlmICht
X2RhdGEubV9wbGF0Zm9ybUNvbnRleHQudXNlR1BVKCkgJiYgY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCktPnVzZUdQVSgpKSB7Ci0gICAgICAgIGlmIChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+Y2FuQWNjZWxlcmF0ZSgpKSB7Ci0gICAgICAgICAgICBtX2RhdGEubV9wbGF0Zm9ybUNvbnRl
eHQucHJlcGFyZUZvckhhcmR3YXJlRHJhdygpOwotICAgICAgICAgICAgRHJhd2luZ0J1ZmZlciog
c291cmNlRHJhd2luZ0J1ZmZlciA9IG1fZGF0YS5tX3BsYXRmb3JtQ29udGV4dC5ncHVDYW52YXMo
KS0+ZHJhd2luZ0J1ZmZlcigpOwotICAgICAgICAgICAgdW5zaWduZWQgc291cmNlVGV4dHVyZSA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzb3VyY2VEcmF3aW5nQnVmZmVyLT5wbGF0Zm9ybUNvbG9y
QnVmZmVyKCkpOwotICAgICAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0Tm9ybWFsaXplZChub3Jt
YWxpemVSZWN0KGRlc3RSZWN0KSk7Ci0gICAgICAgICAgICBGbG9hdFJlY3Qgc3JjUmVjdEZsaXBw
ZWQobm9ybWFsaXplUmVjdChzcmNSZWN0KSk7Ci0gICAgICAgICAgICBzcmNSZWN0RmxpcHBlZC5z
ZXRZKG1fc2l6ZS5oZWlnaHQoKSAtIHNyY1JlY3QueSgpKTsKLSAgICAgICAgICAgIHNyY1JlY3RG
bGlwcGVkLnNldEhlaWdodCgtc3JjUmVjdC5oZWlnaHQoKSk7Ci0gICAgICAgICAgICBjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvckhhcmR3YXJlRHJhdygpOwotICAgICAgICAg
ICAgY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmdwdUNhbnZhcygpLT5kcmF3VGV4dHVyZWRS
ZWN0KHNvdXJjZVRleHR1cmUsIG1fc2l6ZSwgc3JjUmVjdEZsaXBwZWQsIGRlc3RSZWN0Tm9ybWFs
aXplZCwgc3R5bGVDb2xvclNwYWNlLCBvcCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LnN5bmNTb2Z0d2FyZUNhbnZhcygp
OwotICAgIH0KLQorICAgIGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0
Q3VycmVudCgpOwogICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBCaXRtYXBJbWFnZVNpbmdsZUZy
YW1lU2tpYTo6Y3JlYXRlKCptX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuYml0bWFwKCksIGNvbnRl
eHQgPT0gbV9jb250ZXh0KTsKICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2UuZ2V0KCksIHN0
eWxlQ29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIG9wLCB1c2VMb3dRdWFsaXR5U2NhbGUp
OwogfQpAQCAtMTQwLDYgKzEyNCw3IEBAIHZvaWQgSW1hZ2VCdWZmZXI6OmRyYXcoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgY29uCiB2b2lkIElt
YWdlQnVmZmVyOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3Jt
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2Us
IENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKKyAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
bWFrZUdyQ29udGV4dEN1cnJlbnQoKTsKICAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gQml0bWFw
SW1hZ2VTaW5nbGVGcmFtZVNraWE6OmNyZWF0ZSgqbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LmJp
dG1hcCgpLCBjb250ZXh0ID09IG1fY29udGV4dCk7CiAgICAgaW1hZ2UtPmRyYXdQYXR0ZXJuKGNv
bnRleHQsIHNyY1JlY3QsIHBhdHRlcm5UcmFuc2Zvcm0sIHBoYXNlLCBzdHlsZUNvbG9yU3BhY2Us
IG9wLCBkZXN0UmVjdCk7CiB9CkBAIC0yNTYsMTMgKzI0MSwxMyBAQCBQYXNzUmVmUHRyPEJ5dGVB
cnJheT4gZ2V0SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QsIFNrRGV2aWNlJiBzcmNEZXZp
Y2UsCiAKIFBhc3NSZWZQdHI8Qnl0ZUFycmF5PiBJbWFnZUJ1ZmZlcjo6Z2V0VW5tdWx0aXBsaWVk
SW1hZ2VEYXRhKGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0CiB7Ci0gICAgY29udGV4dCgpLT5w
bGF0Zm9ybUNvbnRleHQoKS0+c3luY1NvZnR3YXJlQ2FudmFzKCk7CisgICAgbV9jb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+bWFrZUdyQ29udGV4dEN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2V0
SW1hZ2VEYXRhPFVubXVsdGlwbGllZD4ocmVjdCwgKmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLT5nZXREZXZpY2UoKSwgbV9zaXplKTsKIH0KIAogUGFzc1JlZlB0cjxCeXRl
QXJyYXk+IEltYWdlQnVmZmVyOjpnZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKGNvbnN0IEludFJl
Y3QmIHJlY3QpIGNvbnN0CiB7Ci0gICAgY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+c3lu
Y1NvZnR3YXJlQ2FudmFzKCk7CisgICAgbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+bWFr
ZUdyQ29udGV4dEN1cnJlbnQoKTsKICAgICByZXR1cm4gZ2V0SW1hZ2VEYXRhPFByZW11bHRpcGxp
ZWQ+KHJlY3QsICpjb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0RGV2
aWNlKCksIG1fc2l6ZSk7CiB9CiAKQEAgLTMzNywxMyArMzIyLDEzIEBAIHZvaWQgcHV0SW1hZ2VE
YXRhKEJ5dGVBcnJheSomIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3Qg
SW50UmVjdCYKIAogdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEJ5
dGVBcnJheSogc291cmNlLCBjb25zdCBJbnRTaXplJiBzb3VyY2VTaXplLCBjb25zdCBJbnRSZWN0
JiBzb3VyY2VSZWN0LCBjb25zdCBJbnRQb2ludCYgZGVzdFBvaW50KQogewotICAgIGNvbnRleHQo
KS0+cGxhdGZvcm1Db250ZXh0KCktPnN5bmNTb2Z0d2FyZUNhbnZhcygpOworICAgIG1fY29udGV4
dC0+cGxhdGZvcm1Db250ZXh0KCktPm1ha2VHckNvbnRleHRDdXJyZW50KCk7CiAgICAgcHV0SW1h
Z2VEYXRhPFVubXVsdGlwbGllZD4oc291cmNlLCBzb3VyY2VTaXplLCBzb3VyY2VSZWN0LCBkZXN0
UG9pbnQsIGNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXREZXZpY2Uo
KSwgbV9zaXplKTsKIH0KIAogdm9pZCBJbWFnZUJ1ZmZlcjo6cHV0UHJlbXVsdGlwbGllZEltYWdl
RGF0YShCeXRlQXJyYXkqIHNvdXJjZSwgY29uc3QgSW50U2l6ZSYgc291cmNlU2l6ZSwgY29uc3Qg
SW50UmVjdCYgc291cmNlUmVjdCwgY29uc3QgSW50UG9pbnQmIGRlc3RQb2ludCkKIHsKLSAgICBj
b250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5zeW5jU29mdHdhcmVDYW52YXMoKTsKKyAgICBt
X2NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgpOwogICAg
IHB1dEltYWdlRGF0YTxQcmVtdWx0aXBsaWVkPihzb3VyY2UsIHNvdXJjZVNpemUsIHNvdXJjZVJl
Y3QsIGRlc3RQb2ludCwgY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdl
dERldmljZSgpLCBtX3NpemUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAKaW5kZXggYWRmMjkxOTdiMDhiM2UyYWZmYWY5
Y2M1NjllNzcxNjQ3OGU0MTMxMi4uNTM4ODhjOWIzYzNkZjI3MDgyODJlMWRmOTY1YzgxOWQwNTMx
NWZjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9J
bWFnZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEv
SW1hZ2VTa2lhLmNwcApAQCAtMzYsNyArMzYsNiBAQAogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lv
bi5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdQVS5oIgogI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRT
a2lhLmgiCkBAIC00MjMsMjIgKzQyMiw2IEBAIHZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwKICAgICBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cGFp
bnRTa1BhaW50KGRlc3RSZWN0LCBwYWludCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRyYXdCaXRtYXBH
TEVTMihHcmFwaGljc0NvbnRleHQqIGN0eHQsIE5hdGl2ZUltYWdlU2tpYSogYml0bWFwLCBjb25z
dCBGbG9hdFJlY3QmIHNyY1JlY3QsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgQ29sb3JTcGFj
ZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wKQotewotICAg
IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wcmVwYXJlRm9ySGFyZHdhcmVEcmF3KCk7Ci0gICAg
R3JhcGhpY3NDb250ZXh0R1BVKiBncHVDYW52YXMgPSBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
Z3B1Q2FudmFzKCk7Ci0gICAgVGV4dHVyZSogdGV4dHVyZSA9IGdwdUNhbnZhcy0+Z2V0VGV4dHVy
ZShiaXRtYXApOwotICAgIGlmICghdGV4dHVyZSkgewotICAgICAgICBBU1NFUlQoYml0bWFwLT5j
b25maWcoKSA9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcpOwotICAgICAgICBBU1NFUlQo
Yml0bWFwLT5yb3dCeXRlcygpID09IGJpdG1hcC0+d2lkdGgoKSAqIDQpOwotICAgICAgICB0ZXh0
dXJlID0gZ3B1Q2FudmFzLT5jcmVhdGVUZXh0dXJlKGJpdG1hcCwgVGV4dHVyZTo6QkdSQTgsIGJp
dG1hcC0+d2lkdGgoKSwgYml0bWFwLT5oZWlnaHQoKSk7Ci0gICAgICAgIFNrQXV0b0xvY2tQaXhl
bHMgbG9jaygqYml0bWFwKTsKLSAgICAgICAgQVNTRVJUKGJpdG1hcC0+Z2V0UGl4ZWxzKCkpOwot
ICAgICAgICB0ZXh0dXJlLT5sb2FkKGJpdG1hcC0+Z2V0UGl4ZWxzKCkpOwotICAgIH0KLSAgICBn
cHVDYW52YXMtPmRyYXdUZXh0dXJlZFJlY3QodGV4dHVyZSwgc3JjUmVjdCwgZHN0UmVjdCwgc3R5
bGVDb2xvclNwYWNlLCBjb21wb3NpdGVPcCk7Ci19Ci0KIC8vID09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLy8gQml0bWFwSW1hZ2UgQ2xhc3MKIC8vID09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNDk5LDEy
ICs0ODIsNyBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LAogICAgIGlmIChub3JtU3JjUmVjdC5pc0VtcHR5KCkg
fHwgbm9ybURzdFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47ICAvLyBOb3RoaW5nIHRv
IGRyYXcuCiAKLSAgICBpZiAoY3R4dC0+cGxhdGZvcm1Db250ZXh0KCktPnVzZUdQVSgpICYmIGN0
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW5BY2NlbGVyYXRlKCkpIHsKLSAgICAgICAgZHJhd0Jp
dG1hcEdMRVMyKGN0eHQsIGJtLCBub3JtU3JjUmVjdCwgbm9ybURzdFJlY3QsIGNvbG9yU3BhY2Us
IGNvbXBvc2l0ZU9wKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGN0eHQtPnBsYXRm
b3JtQ29udGV4dCgpLT5wcmVwYXJlRm9yU29mdHdhcmVEcmF3KCk7CisgICAgY3R4dC0+cGxhdGZv
cm1Db250ZXh0KCktPm1ha2VHckNvbnRleHRDdXJyZW50KCk7CiAKICAgICBwYWludFNrQml0bWFw
KGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLAogICAgICAgICAgICAgICAgICAgKmJtLApAQCAtNTI3
LDEyICs1MDUsNyBAQCB2b2lkIEJpdG1hcEltYWdlU2luZ2xlRnJhbWVTa2lhOjpkcmF3KEdyYXBo
aWNzQ29udGV4dCogY3R4dCwKICAgICBpZiAobm9ybVNyY1JlY3QuaXNFbXB0eSgpIHx8IG5vcm1E
c3RSZWN0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOyAgLy8gTm90aGluZyB0byBkcmF3Lgog
Ci0gICAgaWYgKGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpLT51c2VHUFUoKSAmJiBjdHh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+Y2FuQWNjZWxlcmF0ZSgpKSB7Ci0gICAgICAgIGRyYXdCaXRtYXBHTEVT
MihjdHh0LCAmbV9uYXRpdmVJbWFnZSwgc3JjUmVjdCwgZHN0UmVjdCwgc3R5bGVDb2xvclNwYWNl
LCBjb21wb3NpdGVPcCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBjdHh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpOworICAgIGN0eHQtPnBsYXRm
b3JtQ29udGV4dCgpLT5tYWtlR3JDb250ZXh0Q3VycmVudCgpOwogCiAgICAgcGFpbnRTa0JpdG1h
cChjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKSwKICAgICAgICAgICAgICAgICAgIG1fbmF0aXZlSW1h
Z2UsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL05h
dGl2ZUltYWdlU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L05hdGl2ZUltYWdlU2tpYS5jcHAKaW5kZXggODEwY2IzOGQyNDIyYjU2MDI2ZDY3ZjYyNjMyMTE5
YmM4YjQ5ZTYxNy4uZjBmNGFhMjE1NzBjMDVkZTdkNDQ1MTMxYWYxOGEzMjVlOTQ5YjMwZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9OYXRpdmVJbWFn
ZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvTmF0
aXZlSW1hZ2VTa2lhLmNwcApAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgInNraWEvZXh0L2lt
YWdlX29wZXJhdGlvbnMuaCIKIAogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgotI2luY2x1
ZGUgIlNoYXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
M0QuaCIKICNpbmNsdWRlICJTa2lhVXRpbHMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
NTYsNyArNTYsNiBAQCBOYXRpdmVJbWFnZVNraWE6Ok5hdGl2ZUltYWdlU2tpYShjb25zdCBTa0Jp
dG1hcCYgb3RoZXIpCiAKIE5hdGl2ZUltYWdlU2tpYTo6fk5hdGl2ZUltYWdlU2tpYSgpCiB7Ci0g
ICAgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0Q6OnJlbW92ZVRleHR1cmVzRm9yKHRoaXMpOwogfQog
CiBpbnQgTmF0aXZlSW1hZ2VTa2lhOjpkZWNvZGVkU2l6ZSgpIGNvbnN0CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRl
eHRTa2lhLmNwcAppbmRleCAxNTE1MDI3YWQ2YzlkMjE5MWY5ZTE2NjE3ODMyYzk5ZGNkYjkxMjVk
Li45MWRiYmY3OTM2MzhmYWRjYWYwNzI1OWU5MDNhYTM0NTBiNTA3OTUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5jcHAKQEAgLTU3LDExICs1Nyw2IEBACiAjaW5jbHVkZSA8d3RmL01hdGhFeHRy
YXMuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURf
MkRfQ0FOVkFTKQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dEdQVS5oIgotI2luY2x1ZGUgIlNo
YXJlZEdyYXBoaWNzQ29udGV4dDNELmgiCi0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBleHRlcm4gYm9vbCBpc1BhdGhTa2lhU2FmZShjb25zdCBTa01hdHJpeCYgdHJhbnNmb3JtLCBj
b25zdCBTa1BhdGgmIHBhdGgpOwpAQCAtMjE0LDcgKzIwOSw3IEBAIFBsYXRmb3JtQ29udGV4dFNr
aWE6OlBsYXRmb3JtQ29udGV4dFNraWEoU2tDYW52YXMqIGNhbnZhcykKICAgICAsIG1fcHJpbnRp
bmcoZmFsc2UpCiAgICAgLCBtX2RyYXdpbmdUb0ltYWdlQnVmZmVyKGZhbHNlKQogICAgICwgbV9h
Y2NlbGVyYXRpb25Nb2RlKE5vQWNjZWxlcmF0aW9uKQotICAgICwgbV9iYWNraW5nU3RvcmVTdGF0
ZShOb25lKQorICAgICwgbV9ncHVDb250ZXh0KDApCiB7CiAgICAgbV9zdGF0ZVN0YWNrLmFwcGVu
ZChTdGF0ZSgpKTsKICAgICBtX3N0YXRlID0gJm1fc3RhdGVTdGFjay5sYXN0KCk7CkBAIC0yMjIs
MTcgKzIxNyw2IEBAIFBsYXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEoU2tD
YW52YXMqIGNhbnZhcykKIAogUGxhdGZvcm1Db250ZXh0U2tpYTo6flBsYXRmb3JtQ29udGV4dFNr
aWEoKQogewotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCi0gICAgaWYgKG1fZ3B1
Q2FudmFzKSB7Ci0gICAgICAgIC8vIG1ha2Ugc3VyZSBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gdGhp
cyBwbGF0Zm9ybSBjb250ZXh0IGhhcyBiZWVuIGZsdXNoZWQKLSAgICAgICAgaWYgKHVzZVNraWFH
UFUoKSkgewotICAgICAgICAgICAgU2hhcmVkR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQgPSBt
X2dwdUNhbnZhcy0+Y29udGV4dCgpOwotICAgICAgICAgICAgY29udGV4dC0+bWFrZUNvbnRleHRD
dXJyZW50KCk7Ci0gICAgICAgICAgICBjb250ZXh0LT5nckNvbnRleHQoKS0+Zmx1c2goMCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgbV9ncHVDYW52YXMtPmRyYXdpbmdCdWZmZXIoKS0+c2V0V2lsbFB1
Ymxpc2hDYWxsYmFjayhudWxscHRyKTsKLSAgICB9Ci0jZW5kaWYKIH0KIAogdm9pZCBQbGF0Zm9y
bUNvbnRleHRTa2lhOjpzZXRDYW52YXMoU2tDYW52YXMqIGNhbnZhcykKQEAgLTcwNCw0MyArNjg4
LDE5IEBAIGJvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6Y2FudmFzQ2xpcEFwcGxpZWQoKSBjb25z
dAogICAgIHJldHVybiBtX3N0YXRlLT5tX2NhbnZhc0NsaXBBcHBsaWVkOwogfQogCi1jbGFzcyBX
aWxsUHVibGlzaENhbGxiYWNrSW1wbCA6IHB1YmxpYyBEcmF3aW5nQnVmZmVyOjpXaWxsUHVibGlz
aENhbGxiYWNrIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxXaWxsUHVibGlzaENh
bGxiYWNrPiBjcmVhdGUoUGxhdGZvcm1Db250ZXh0U2tpYSogcGNzKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UHRyKG5ldyBXaWxsUHVibGlzaENhbGxiYWNrSW1wbChwY3MpKTsKLSAgICB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgd2lsbFB1Ymxpc2goKQotICAgIHsKLSAgICAgICAgbV9wY3Mt
PnByZXBhcmVGb3JIYXJkd2FyZURyYXcoKTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGlj
aXQgV2lsbFB1Ymxpc2hDYWxsYmFja0ltcGwoUGxhdGZvcm1Db250ZXh0U2tpYSogcGNzKQotICAg
ICAgICA6IG1fcGNzKHBjcykKLSAgICB7Ci0gICAgfQotCi0gICAgUGxhdGZvcm1Db250ZXh0U2tp
YSogbV9wY3M7Ci19OwotCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldFNoYXJlZEdyYXBo
aWNzQ29udGV4dDNEKFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LCBEcmF3aW5nQnVm
ZmVyKiBkcmF3aW5nQnVmZmVyLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBzaXplKQordm9pZCBQ
bGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgRHJhd2luZ0J1ZmZlciogZHJhd2luZ0J1ZmZlciwgY29uc3QgV2ViQ29yZTo6
SW50U2l6ZSYgc2l6ZSkKIHsKICAgICBtX2FjY2VsZXJhdGlvbk1vZGUgPSBOb0FjY2VsZXJhdGlv
bjsKKyAgICBtX2dwdUNvbnRleHQgPSBjb250ZXh0OwogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpCiAgICAgaWYgKGNvbnRleHQgJiYgZHJhd2luZ0J1ZmZlcikgewotICAgICAgICBt
X2dwdUNhbnZhcyA9IGFkb3B0UHRyKG5ldyBHcmFwaGljc0NvbnRleHRHUFUoY29udGV4dCwgZHJh
d2luZ0J1ZmZlciwgc2l6ZSkpOwotICAgICAgICBtX3VwbG9hZFRleHR1cmUuY2xlYXIoKTsKLSAg
ICAgICAgZHJhd2luZ0J1ZmZlci0+c2V0V2lsbFB1Ymxpc2hDYWxsYmFjayhXaWxsUHVibGlzaENh
bGxiYWNrSW1wbDo6Y3JlYXRlKHRoaXMpKTsKLQogICAgICAgICAvLyB1c2Ugc2tpYSBncHUgcmVu
ZGVyaW5nIGlmIGF2YWlsYWJsZQogICAgICAgICBHckNvbnRleHQqIGdyID0gY29udGV4dC0+Z3JD
b250ZXh0KCk7CiAgICAgICAgIGlmIChncikgewogICAgICAgICAgICAgbV9hY2NlbGVyYXRpb25N
b2RlID0gU2tpYUdQVTsKIAogICAgICAgICAgICAgY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50
KCk7Ci0gICAgICAgICAgICBtX2dwdUNhbnZhcy0+YmluZEZyYW1lYnVmZmVyKCk7CisgICAgICAg
ICAgICBkcmF3aW5nQnVmZmVyLT5iaW5kKCk7CiAKICAgICAgICAgICAgIGdyLT5yZXNldENvbnRl
eHQoKTsKICAgICAgICAgICAgIGRyYXdpbmdCdWZmZXItPnNldEdyQ29udGV4dChncik7CkBAIC03
NTAsMTYwICs3MTAsMTUgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRTaGFyZWRHcmFw
aGljc0NvbnRleHQzRChTaGFyZWRHcmFwaGljc0NvbnRleHQzRCogY28KICAgICAgICAgICAgIFNr
QXV0b1RVbnJlZjxHclRleHR1cmU+IGRyYXdCdWZUZXgoc3RhdGljX2Nhc3Q8R3JUZXh0dXJlKj4o
Z3ItPmNyZWF0ZVBsYXRmb3JtU3VyZmFjZShkcmF3QnVmRGVzYykpKTsKICAgICAgICAgICAgIG1f
Y2FudmFzLT5zZXREZXZpY2UobmV3IFNrR3B1RGV2aWNlKGdyLCBkcmF3QnVmVGV4LmdldCgpKSkt
PnVucmVmKCk7CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9hY2NlbGVyYXRpb25Nb2Rl
ID0gR1BVOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHN5bmNTb2Z0d2FyZUNhbnZhcygpOwotICAg
ICAgICBtX3VwbG9hZFRleHR1cmUuY2xlYXIoKTsKLSAgICAgICAgbV9ncHVDYW52YXMuY2xlYXIo
KTsKKyAgICAgICAgICAgIG1fZ3B1Q29udGV4dCA9IDA7CiAgICAgfQogI2VuZGlmCiB9CiAKLXZv
aWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6cHJlcGFyZUZvclNvZnR3YXJlRHJhdygpIGNvbnN0Cit2
b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6Om1ha2VHckNvbnRleHRDdXJyZW50KCkKIHsKLSAgICBp
ZiAobV9hY2NlbGVyYXRpb25Nb2RlID09IFNraWFHUFUpIHsKLSNpZiBFTkFCTEUoQUNDRUxFUkFU
RURfMkRfQ0FOVkFTKQotICAgICAgICBpZiAobV9ncHVDYW52YXMpCi0gICAgICAgICAgICBtX2dw
dUNhbnZhcy0+Y29udGV4dCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbmRpZgotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fYmFja2luZ1N0b3JlU3RhdGUgPT0gSGFyZHdh
cmUpIHsKLSAgICAgICAgLy8gRGVwZW5kaW5nIG9uIHRoZSBibGVuZCBtb2RlIHdlIG5lZWQgdG8g
ZG8gb25lIG9mIGEgZmV3IHRoaW5nczoKLQotICAgICAgICAvLyAqIEZvciBhc3NvY2lhdGl2ZSBi
bGVuZCBtb2Rlcywgd2UgY2FuIGRyYXcgaW50byBhbiBpbml0aWFsbHkgZW1wdHkKLSAgICAgICAg
Ly8gY2FudmFzIGFuZCB0aGVuIGNvbXBvc2l0ZSB0aGUgcmVzdWx0cyBvbiB0b3Agb2YgdGhlIGhh
cmR3YXJlIGRyYXduCi0gICAgICAgIC8vIHJlc3VsdHMgYmVmb3JlIHRoZSBuZXh0IGhhcmR3YXJl
IGRyYXcgb3Igc3dhcEJ1ZmZlcnMoKS4KLQotICAgICAgICAvLyAqIEZvciBub24tYXNzb2NpYXRp
dmUgYmxlbmQgbW9kZXMgd2UgaGF2ZSB0byBkbyBhIHJlYWRiYWNrIGFuZCB0aGVuCi0gICAgICAg
IC8vIHNvZnR3YXJlIGRyYXcuICBXaGVuIHdlIHJlLXVwbG9hZCBpbiB0aGlzIG1vZGUgd2UgaGF2
ZSB0byBibG93Ci0gICAgICAgIC8vIGF3YXkgd2hhdGV2ZXIgaXMgaW4gdGhlIGhhcmR3YXJlIGJh
Y2tpbmcgc3RvcmUgKGRvIGEgY29weSBpbnN0ZWFkCi0gICAgICAgIC8vIG9mIGEgY29tcG9zaXRp
bmcgb3BlcmF0aW9uKS4KLQotICAgICAgICBpZiAobV9zdGF0ZS0+bV94ZmVyTW9kZSA9PSBTa1hm
ZXJtb2RlOjprU3JjT3Zlcl9Nb2RlKSB7Ci0gICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgaGF2
ZSByZW5kZXJpbmcgcmVzdWx0cyBpbiBib3RoIHRoZSBoYXJkd2FyZSBhbmQgc29mdHdhcmUgYmFj
a2luZyBzdG9yZXMuCi0gICAgICAgICAgICBtX2JhY2tpbmdTdG9yZVN0YXRlID0gTWl4ZWQ7Ci0g
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZWFkYmFja0hhcmR3YXJlVG9Tb2Z0d2FyZSgp
OwotICAgICAgICAgICAgLy8gV2hlbiB3ZSBzd2l0Y2ggYmFjayB0byBoYXJkd2FyZSBjb3B5IHRo
ZSByZXN1bHRzLCBkb24ndCBjb21wb3NpdGUuCi0gICAgICAgICAgICBtX2JhY2tpbmdTdG9yZVN0
YXRlID0gU29mdHdhcmU7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG1fYmFja2luZ1N0b3Jl
U3RhdGUgPT0gTWl4ZWQpIHsKLSAgICAgICAgaWYgKG1fc3RhdGUtPm1feGZlck1vZGUgIT0gU2tY
ZmVybW9kZTo6a1NyY092ZXJfTW9kZSkgewotICAgICAgICAgICAgLy8gSGF2ZSB0byBjb21wb3Np
dGUgb3VyIGN1cnJlbnRseSBzb2Z0d2FyZSBkcmF3biBkYXRhLi4uCi0gICAgICAgICAgICB1cGxv
YWRTb2Z0d2FyZVRvSGFyZHdhcmUoQ29tcG9zaXRlU291cmNlT3Zlcik7Ci0gICAgICAgICAgICAv
LyB0aGVuIGRvIGEgcmVhZGJhY2sgc28gd2UgY2FuIGhhcmR3YXJlIGRyYXcgc3R1ZmYuCi0gICAg
ICAgICAgICByZWFkYmFja0hhcmR3YXJlVG9Tb2Z0d2FyZSgpOwotICAgICAgICAgICAgbV9iYWNr
aW5nU3RvcmVTdGF0ZSA9IFNvZnR3YXJlOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChtX2Jh
Y2tpbmdTdG9yZVN0YXRlID09IE5vbmUpIHsKLSAgICAgICAgbV9iYWNraW5nU3RvcmVTdGF0ZSA9
IFNvZnR3YXJlOwotICAgIH0KLX0KLQotdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpwcmVwYXJl
Rm9ySGFyZHdhcmVEcmF3KCkgY29uc3QKLXsKLSAgICBpZiAoIShtX2FjY2VsZXJhdGlvbk1vZGUg
PT0gR1BVKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fYmFja2luZ1N0b3JlU3RhdGUg
PT0gU29mdHdhcmUpIHsKLSAgICAgICAgLy8gTGFzdCBkcmF3biBpbiBzb2Z0d2FyZTsgdXBsb2Fk
IGV2ZXJ5dGhpbmcgd2UndmUgZHJhd24uCi0gICAgICAgIHVwbG9hZFNvZnR3YXJlVG9IYXJkd2Fy
ZShDb21wb3NpdGVDb3B5KTsKLSAgICB9IGVsc2UgaWYgKG1fYmFja2luZ1N0b3JlU3RhdGUgPT0g
TWl4ZWQpIHsKLSAgICAgICAgLy8gU3R1ZmYgaW4gc29mdHdhcmUvaGFyZHdhcmUsIGNvbXBvc2l0
ZSB0aGUgc29mdHdhcmUgc3R1ZmYgb24gdG9wIG9mCi0gICAgICAgIC8vIHRoZSBoYXJkd2FyZSBz
dHVmZi4KLSAgICAgICAgdXBsb2FkU29mdHdhcmVUb0hhcmR3YXJlKENvbXBvc2l0ZVNvdXJjZU92
ZXIpOwotICAgIH0KLSAgICBtX2JhY2tpbmdTdG9yZVN0YXRlID0gSGFyZHdhcmU7Ci19Ci0KLXZv
aWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c3luY1NvZnR3YXJlQ2FudmFzKCkgY29uc3QKLXsKLSAg
ICBpZiAobV9hY2NlbGVyYXRpb25Nb2RlID09IFNraWFHUFUpIHsKLSNpZiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKQotICAgICAgICBpZiAobV9ncHVDYW52YXMpCi0gICAgICAgICAgICBt
X2dwdUNhbnZhcy0+Y29udGV4dCgpLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKLSNlbmRpZgotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKG1fYmFja2luZ1N0b3JlU3RhdGUgPT0gSGFy
ZHdhcmUpCi0gICAgICAgIHJlYWRiYWNrSGFyZHdhcmVUb1NvZnR3YXJlKCk7Ci0gICAgZWxzZSBp
ZiAobV9iYWNraW5nU3RvcmVTdGF0ZSA9PSBNaXhlZCkgewotICAgICAgICAvLyBIYXZlIHRvIGNv
bXBvc2l0ZSBvdXIgY3VycmVudGx5IHNvZnR3YXJlIGRyYXduIGRhdGEuLgotICAgICAgICB1cGxv
YWRTb2Z0d2FyZVRvSGFyZHdhcmUoQ29tcG9zaXRlU291cmNlT3Zlcik7Ci0gICAgICAgIC8vIHRo
ZW4gZG8gYSByZWFkYmFjay4KLSAgICAgICAgcmVhZGJhY2tIYXJkd2FyZVRvU29mdHdhcmUoKTsK
LSAgICAgICAgbV9iYWNraW5nU3RvcmVTdGF0ZSA9IFNvZnR3YXJlOwotICAgIH0KLSAgICBtX2Jh
Y2tpbmdTdG9yZVN0YXRlID0gU29mdHdhcmU7Ci19Ci0KLXZvaWQgUGxhdGZvcm1Db250ZXh0U2tp
YTo6bWFya0RpcnR5UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChtX2FjY2Vs
ZXJhdGlvbk1vZGUgIT0gR1BVKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzd2l0Y2ggKG1fYmFj
a2luZ1N0b3JlU3RhdGUpIHsKLSAgICBjYXNlIFNvZnR3YXJlOgotICAgIGNhc2UgTWl4ZWQ6Ci0g
ICAgICAgIG1fc29mdHdhcmVEaXJ0eVJlY3QudW5pdGUocmVjdCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICBjYXNlIEhhcmR3YXJlOgotICAgICAgICByZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4
dFNraWE6OnVwbG9hZFNvZnR3YXJlVG9IYXJkd2FyZShDb21wb3NpdGVPcGVyYXRvciBvcCkgY29u
c3QKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQotICAgIGNvbnN0IFNrQml0
bWFwJiBiaXRtYXAgPSBtX2NhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7
Ci0gICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKGJpdG1hcCk7Ci0gICAgU2hhcmVkR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQgPSBtX2dwdUNhbnZhcy0+Y29udGV4dCgpOwotICAgIGlmICghbV91
cGxvYWRUZXh0dXJlIHx8IG1fdXBsb2FkVGV4dHVyZS0+dGlsZXMoKS50b3RhbFNpemVYKCkgPCBi
aXRtYXAud2lkdGgoKSB8fCBtX3VwbG9hZFRleHR1cmUtPnRpbGVzKCkudG90YWxTaXplWSgpIDwg
Yml0bWFwLmhlaWdodCgpKQotICAgICAgICBtX3VwbG9hZFRleHR1cmUgPSBjb250ZXh0LT5jcmVh
dGVUZXh0dXJlKFRleHR1cmU6OkJHUkE4LCBiaXRtYXAud2lkdGgoKSwgYml0bWFwLmhlaWdodCgp
KTsKLQotICAgIG1fdXBsb2FkVGV4dHVyZS0+dXBkYXRlU3ViUmVjdChiaXRtYXAuZ2V0UGl4ZWxz
KCksIG1fc29mdHdhcmVEaXJ0eVJlY3QpOwotICAgIEFmZmluZVRyYW5zZm9ybSBpZGVudGl0eTsK
LSAgICBncHVDYW52YXMoKS0+ZHJhd1RleHR1cmVkUmVjdChtX3VwbG9hZFRleHR1cmUuZ2V0KCks
IG1fc29mdHdhcmVEaXJ0eVJlY3QsIG1fc29mdHdhcmVEaXJ0eVJlY3QsIGlkZW50aXR5LCAxLjAs
IENvbG9yU3BhY2VEZXZpY2VSR0IsIG9wLCBmYWxzZSk7Ci0gICAgLy8gQ2xlYXIgb3V0IHRoZSBy
ZWdpb24gb2YgdGhlIHNvZnR3YXJlIGNhbnZhcyB3ZSBqdXN0IHVwbG9hZGVkLgotICAgIG1fY2Fu
dmFzLT5zYXZlKCk7Ci0gICAgbV9jYW52YXMtPnJlc2V0TWF0cml4KCk7Ci0gICAgU2tSZWN0IGJv
dW5kcyA9IG1fc29mdHdhcmVEaXJ0eVJlY3Q7Ci0gICAgbV9jYW52YXMtPmNsaXBSZWN0KGJvdW5k
cywgU2tSZWdpb246OmtSZXBsYWNlX09wKTsKLSAgICBtX2NhbnZhcy0+ZHJhd0FSR0IoMCwgMCwg
MCwgMCwgU2tYZmVybW9kZTo6a0NsZWFyX01vZGUpOwotICAgIG1fY2FudmFzLT5yZXN0b3JlKCk7
Ci0gICAgbV9zb2Z0d2FyZURpcnR5UmVjdC5zZXRXaWR0aCgwKTsgLy8gQ2xlYXIgZGlydHkgcmVj
dC4KLSNlbmRpZgotfQotCi12b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnJlYWRiYWNrSGFyZHdh
cmVUb1NvZnR3YXJlKCkgY29uc3QKLXsKLSNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFT
KQotICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX2NhbnZhcy0+Z2V0RGV2aWNlKCktPmFj
Y2Vzc0JpdG1hcCh0cnVlKTsKLSAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soYml0bWFwKTsKLSAg
ICBpbnQgd2lkdGggPSBiaXRtYXAud2lkdGgoKSwgaGVpZ2h0ID0gYml0bWFwLmhlaWdodCgpOwot
ICAgIFNoYXJlZEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0ID0gbV9ncHVDYW52YXMtPmNvbnRl
eHQoKTsKLSAgICBtX2dwdUNhbnZhcy0+YmluZEZyYW1lYnVmZmVyKCk7Ci0gICAgLy8gRmxpcHMg
dGhlIGltYWdlIHZlcnRpY2FsbHkuCi0gICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7ICsr
eSkgewotICAgICAgICB1aW50MzJfdCogcGl4ZWxzID0gYml0bWFwLmdldEFkZHIzMigwLCB5KTsK
LSAgICAgICAgaWYgKGNvbnRleHQtPnN1cHBvcnRzQkdSQSgpKQotICAgICAgICAgICAgY29udGV4
dC0+cmVhZFBpeGVscygwLCBoZWlnaHQgLSAxIC0geSwgd2lkdGgsIDEsIEV4dGVuc2lvbnMzRDo6
QkdSQV9FWFQsIEdyYXBoaWNzQ29udGV4dDNEOjpVTlNJR05FRF9CWVRFLCBwaXhlbHMpOwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIGNvbnRleHQtPnJlYWRQaXhlbHMoMCwgaGVpZ2h0IC0g
MSAtIHksIHdpZHRoLCAxLCBHcmFwaGljc0NvbnRleHQzRDo6UkdCQSwgR3JhcGhpY3NDb250ZXh0
M0Q6OlVOU0lHTkVEX0JZVEUsIHBpeGVscyk7Ci0gICAgICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IHdpZHRoOyArK2kpIHsKLSAgICAgICAgICAgICAgICB1aW50MzJfdCBwaXhlbCA9IHBpeGVs
c1tpXTsKLSAgICAgICAgICAgICAgICAvLyBTd2l6emxlcyBmcm9tIFJHQkEgLT4gQkdSQS4KLSAg
ICAgICAgICAgICAgICBwaXhlbHNbaV0gPSAocGl4ZWwgJiAweEZGMDBGRjAwKSB8ICgocGl4ZWwg
JiAweDAwRkYwMDAwKSA+PiAxNikgfCAoKHBpeGVsICYgMHgwMDAwMDBGRikgPDwgMTYpOwotICAg
ICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIG1fc29mdHdhcmVEaXJ0eVJlY3QudW5p
dGUoSW50UmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KSk7IC8vIE1hcmsgZXZlcnl0aGluZyBhcyBk
aXJ0eS4KLSNlbmRpZgorICAgIGlmIChtX2dwdUNvbnRleHQpCisgICAgICAgIG1fZ3B1Q29udGV4
dC0+bWFrZUNvbnRleHRDdXJyZW50KCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0
Zm9ybUNvbnRleHRTa2lhLmgKaW5kZXggY2E0NTE5YTljMTVhZjc0MzNmZDMwZTY4ZDg2NDBhOGQx
MzY5NGM1Yi4uNGIxNzNkZWY0NzVhYWQ3ODQ5MTg3Yjg0YWMyMTEwNTIxMzU5NTY0OSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRl
eHRTa2lhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0
Zm9ybUNvbnRleHRTa2lhLmgKQEAgLTQ3LDcgKzQ3LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ZW51bSBDb21wb3NpdGVPcGVyYXRvcjsKIGNsYXNzIERyYXdpbmdCdWZmZXI7CiBjbGFzcyBHcmFw
aGljc0NvbnRleHQzRDsKLWNsYXNzIEdyYXBoaWNzQ29udGV4dEdQVTsKIGNsYXNzIFRleHR1cmU7
CiAKIC8vIFRoaXMgY2xhc3MgaG9sZHMgdGhlIHBsYXRmb3JtLXNwZWNpZmljIHN0YXRlIGZvciBH
cmFwaGljc0NvbnRleHQuIFdlIHB1dApAQCAtNzIsNyArNzEsNiBAQCBjbGFzcyBQbGF0Zm9ybUNv
bnRleHRTa2lhIHsKIHB1YmxpYzoKICAgICBlbnVtIEFjY2VsZXJhdGlvbk1vZGUgewogICAgICAg
ICBOb0FjY2VsZXJhdGlvbiwKLSAgICAgICAgR1BVLAogICAgICAgICBTa2lhR1BVCiAgICAgfTsK
IApAQCAtMTg1LDIxICsxODMsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBjYW5BY2NlbGVyYXRlKCkg
Y29uc3Q7CiAgICAgYm9vbCBjYW52YXNDbGlwQXBwbGllZCgpIGNvbnN0OwogICAgIEFjY2VsZXJh
dGlvbk1vZGUgYWNjZWxlcmF0aW9uTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZWxlcmF0aW9u
TW9kZTsgfQotICAgIGJvb2wgdXNlR1BVKCkgY29uc3QgeyByZXR1cm4gbV9hY2NlbGVyYXRpb25N
b2RlID09IEdQVTsgfQogICAgIGJvb2wgdXNlU2tpYUdQVSgpIGNvbnN0IHsgcmV0dXJuIG1fYWNj
ZWxlcmF0aW9uTW9kZSA9PSBTa2lhR1BVOyB9Ci0gICAgdm9pZCBzZXRTaGFyZWRHcmFwaGljc0Nv
bnRleHQzRChTaGFyZWRHcmFwaGljc0NvbnRleHQzRCosIERyYXdpbmdCdWZmZXIqLCBjb25zdCBJ
bnRTaXplJik7Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICBHcmFwaGlj
c0NvbnRleHRHUFUqIGdwdUNhbnZhcygpIGNvbnN0IHsgcmV0dXJuIG1fZ3B1Q2FudmFzLmdldCgp
OyB9Ci0jZWxzZQotICAgIEdyYXBoaWNzQ29udGV4dEdQVSogZ3B1Q2FudmFzKCkgY29uc3QgeyBy
ZXR1cm4gMDsgfQotI2VuZGlmCi0gICAgLy8gQ2FsbCB0aGVzZSBiZWZvcmUgbWFraW5nIGEgY2Fs
bCB0aGF0IG1hbmlwdWxhdGVzIHRoZSB1bmRlcmx5aW5nCi0gICAgLy8gU2tDYW52YXMgb3IgV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0R1BVCi0gICAgdm9pZCBwcmVwYXJlRm9yU29mdHdhcmVEcmF3
KCkgY29uc3Q7Ci0gICAgdm9pZCBwcmVwYXJlRm9ySGFyZHdhcmVEcmF3KCkgY29uc3Q7Ci0gICAg
Ly8gQ2FsbCB0byBmb3JjZSB0aGUgU2tDYW52YXMgdG8gY29udGFpbiBhbGwgcmVuZGVyaW5nIHJl
c3VsdHMuCi0gICAgdm9pZCBzeW5jU29mdHdhcmVDYW52YXMoKSBjb25zdDsKLSAgICB2b2lkIG1h
cmtEaXJ0eVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCk7CisgICAgdm9pZCBzZXRHcmFwaGljc0Nv
bnRleHQzRChHcmFwaGljc0NvbnRleHQzRCosIERyYXdpbmdCdWZmZXIqLCBjb25zdCBJbnRTaXpl
Jik7CisgICAgdm9pZCBtYWtlR3JDb250ZXh0Q3VycmVudCgpOwogCiBwcml2YXRlOgogICAgIC8v
IFVzZWQgd2hlbiByZXN0b3JpbmcgYW5kIHRoZSBzdGF0ZSBoYXMgYW4gaW1hZ2UgY2xpcC4gT25s
eSBzaG93cyB0aGUgcGl4ZWxzIGluCkBAIC0yMDcsOSArMTkzLDYgQEAgcHJpdmF0ZToKICAgICB2
b2lkIGFwcGx5Q2xpcEZyb21JbWFnZShjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBTa0JpdG1hcCYp
OwogICAgIHZvaWQgYXBwbHlBbnRpQWxpYXNlZENsaXBQYXRocyhXVEY6OlZlY3RvcjxTa1BhdGg+
JiBwYXRocyk7CiAKLSAgICB2b2lkIHVwbG9hZFNvZnR3YXJlVG9IYXJkd2FyZShDb21wb3NpdGVP
cGVyYXRvcikgY29uc3Q7Ci0gICAgdm9pZCByZWFkYmFja0hhcmR3YXJlVG9Tb2Z0d2FyZSgpIGNv
bnN0OwotCiAgICAgLy8gRGVmaW5lcyBkcmF3aW5nIHN0eWxlLgogICAgIHN0cnVjdCBTdGF0ZTsK
IApAQCAtMjMwLDEyICsyMTMsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9wcmludGluZzsKICAg
ICBib29sIG1fZHJhd2luZ1RvSW1hZ2VCdWZmZXI7CiAgICAgQWNjZWxlcmF0aW9uTW9kZSBtX2Fj
Y2VsZXJhdGlvbk1vZGU7Ci0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKLSAgICBP
d25QdHI8R3JhcGhpY3NDb250ZXh0R1BVPiBtX2dwdUNhbnZhczsKLSAgICBtdXRhYmxlIFJlZlB0
cjxUZXh0dXJlPiBtX3VwbG9hZFRleHR1cmU7Ci0jZW5kaWYKLSAgICBtdXRhYmxlIGVudW0geyBO
b25lLCBTb2Z0d2FyZSwgTWl4ZWQsIEhhcmR3YXJlIH0gbV9iYWNraW5nU3RvcmVTdGF0ZTsKLSAg
ICBtdXRhYmxlIEludFJlY3QgbV9zb2Z0d2FyZURpcnR5UmVjdDsKKyAgICBHcmFwaGljc0NvbnRl
eHQzRCogbV9ncHVDb250ZXh0OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCA5MDgxMDNhNGQ4M2Y2MDI1NjhlNjU3MGRjNDY5ZmIyOTE4YWNlZjFkLi4xNTRmM2U5M2EwMjg4
NmI4NDY3NzE4ODkzMmI3YWEwZWFkOGUzNWU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDIyIEBACisyMDExLTA3LTA4ICBKYW1lcyBSb2JpbnNvbiAgPGphbWVzckBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgW2Nocm9taXVtXSBEZWxldGUgdGhlIHVudXNlZCBsZWdhY3kg
YWNjZWxlcmF0ZWQgY2FudmFzIDJkIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTY0MjE0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkcyBhIHdheSB0byBzdGFzaCBhIEdyQ29udGV4dCogb24gYSBH
cmFwaGljc0NvbnRleHQzRC4gUHJldmlvdXNseSwgdGhpcyB3YXMgaGFuZGxlZCBieQorICAgICAg
ICBTaGFyZWRHcmFwaGljc0NvbnRleHQzRCwgYnV0IHdlIGRvbid0IG5lZWQgdGhhdCBjbGFzcyBh
bnkgbW9yZS4gIFRoaXMgaXMgdXNlZCBvbmx5IGZvciB0aGUgc2hhcmVkCisgICAgICAgIEdyYXBo
aWNzQ29udGV4dDNEIHN0YXNoZWQgb24gdGhlIFBhZ2UgYW5kIHNoYXJlZCBieSBhbGwgYWNjZWxl
cmF0ZWQgY2FudmFzZXMgd2l0aGluIHRoZSBQYWdlLCBmb3IgV2ViR0wgYW5kCisgICAgICAgIGNv
bXBvc2l0b3IgY29udGV4dHMgdGhlIEdyQ29udGV4dCBpcyBuZXZlciBzZXQuCisKKyAgICAgICAg
KiBzcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6On5HcmFwaGljc0NvbnRl
eHQzREludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OmdyQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z3JD
b250ZXh0KToKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oOgorCiAy
MDExLTA3LTA4ICBOYXRlIENoYXBpbiAgPGphcGhldEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAg
Q2hlY2sgYWN0aXZlRG9jdW1lbnRMb2FkZXIoKSBpbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0RDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAppbmRleCBmMTJj
ZmFmZDU5MzNmYjRlN2M1ZTAyYjc4ODBjZGM3MDkwZTdmMmYxLi40MWE0MjgwMGVkMmIzNDljMGZl
OWQ4YWY1NDRkMjc5OWM5ZGQyZmUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRENocm9taXVtLmNwcApAQCAtNjEsNiArNjEsMTAg
QEAKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dJbWFnZS5oPgogI2VuZGlmCiAKKyNpZiBVU0Uo
U0tJQSkKKyNpbmNsdWRlICJHckNvbnRleHQuaCIKKyNlbmRpZgorCiAvLyBUaGVyZSBhcmUgdHdv
IGxldmVscyBvZiBkZWxlZ2F0aW9uIGluIHRoaXMgZmlsZToKIC8vCiAvLyAgIDEuIEdyYXBoaWNz
Q29udGV4dDNEIGRlbGVnYXRlcyB0byBHcmFwaGljc0NvbnRleHQzREludGVybmFsLiBUaGlzIGlz
IGRvbmUKQEAgLTg0LDYgKzg4LDcgQEAgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbCgpCiAgICAgLCBtX2luaXRpYWxpemVkQXZhaWxhYmxlRXh0ZW5z
aW9ucyhmYWxzZSkKICAgICAsIG1fbGF5ZXJDb21wb3NpdGVkKGZhbHNlKQogI2lmIFVTRShTS0lB
KQorICAgICwgbV9nckNvbnRleHQoMCkKICNlbGlmIFVTRShDRykKICAgICAsIG1fcmVuZGVyT3V0
cHV0KDApCiAjZWxzZQpAQCAtOTgsNiArMTAzLDEyIEBAIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6On5HcmFwaGljc0NvbnRleHQzREludGVybmFsKCkKICAgICBpZiAobV9yZW5kZXJPdXRwdXQp
CiAgICAgICAgIGRlbGV0ZVtdIG1fcmVuZGVyT3V0cHV0OwogI2VuZGlmCisjaWYgVVNFKFNLSUEp
CisgICAgaWYgKG1fZ3JDb250ZXh0KSB7CisgICAgICAgIG1fZ3JDb250ZXh0LT5jb250ZXh0RGVz
dHJveWVkKCk7CisgICAgICAgIEdyU2FmZVVucmVmKG1fZ3JDb250ZXh0KTsKKyAgICB9CisjZW5k
aWYKIH0KIAogYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppbml0aWFsaXplKEdyYXBo
aWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBi
b29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQpAQCAtMTQ2LDYgKzE1NywyMyBAQCBQbGF0
Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBsYXRmb3JtVGV4dHVyZSgp
IGNvbnN0CiAgICAgcmV0dXJuIG1faW1wbC0+Z2V0UGxhdGZvcm1UZXh0dXJlSWQoKTsKIH0KIAor
I2lmIFVTRShTS0lBKQorR3JDb250ZXh0KiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnckNv
bnRleHQoKQoreworICAgIC8vIExpbWl0IHRoZSBudW1iZXIgb2YgdGV4dHVyZXMgd2UgaG9sZCBp
biB0aGUgYml0bWFwLT50ZXh0dXJlIGNhY2hlLgorICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4VGV4
dHVyZUNhY2hlQ291bnQgPSA1MTI7CisgICAgLy8gTGltaXQgdGhlIGJ5dGVzIGFsbG9jYXRlZCB0
b3dhcmQgdGV4dHVyZXMgaW4gdGhlIGJpdG1hcC0+dGV4dHVyZSBjYWNoZS4KKyAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IG1heFRleHR1cmVDYWNoZUJ5dGVzID0gNTAgKiAxMDI0ICogMTAyNDsKKwor
ICAgIGlmICghbV9nckNvbnRleHQpIHsKKyAgICAgICAgbV9nckNvbnRleHQgPSBHckNvbnRleHQ6
OkNyZWF0ZUdMU2hhZGVyQ29udGV4dCgpOworICAgICAgICBpZiAobV9nckNvbnRleHQpCisgICAg
ICAgICAgICBtX2dyQ29udGV4dC0+c2V0VGV4dHVyZUNhY2hlTGltaXRzKG1heFRleHR1cmVDYWNo
ZUNvdW50LCBtYXhUZXh0dXJlQ2FjaGVCeXRlcyk7CisgICAgfQorICAgIHJldHVybiBtX2dyQ29u
dGV4dDsKK30KKyNlbmRpZgorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnByZXBh
cmVUZXh0dXJlKCkKIHsKICAgICBtX2ltcGwtPnByZXBhcmVUZXh0dXJlKCk7CkBAIC05NjIsNiAr
OTkwLDEzIEBAIFBsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtVGV4
dHVyZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faW50ZXJuYWwtPnBsYXRmb3JtVGV4dHVyZSgpOwog
fQogCisjaWYgVVNFKFNLSUEpCitHckNvbnRleHQqIEdyYXBoaWNzQ29udGV4dDNEOjpnckNvbnRl
eHQoKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5nckNvbnRleHQoKTsKK30KKyNlbmRpZgor
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwcmVwYXJlVGV4dHVyZSgpCiB7CiAgICAgcmV0dXJu
IG1faW50ZXJuYWwtPnByZXBhcmVUZXh0dXJlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmggYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmgKaW5kZXggODE0ZGY0ZmJh
YzZkOTJiNDEwMmEwYWI0MDU2YTkxZjllZGMwNDE3Ni4uY2Y2YWIwM2Y5NjAwMTk3MDgxNDkzMTlm
ZTgyMGIxM2RjZjU2ODhkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaApAQCAtMzQsNiArMzQsMTAgQEAKICNpbmNs
dWRlICJTa0JpdG1hcC5oIgogI2VuZGlmCiAKKyNpZiBVU0UoU0tJQSkKK2NsYXNzIEdyQ29udGV4
dDsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYkdyYXBoaWNzQ29udGV4
dDNEOwogY2xhc3MgV2ViVmlld0ltcGw7CkBAIC02Miw2ICs2Niw5IEBAIHB1YmxpYzoKIAogICAg
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNv
bnN0OwogICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Q7CisjaWYg
VVNFKFNLSUEpCisgICAgR3JDb250ZXh0KiBnckNvbnRleHQoKTsKKyNlbmRpZgogCiAgICAgYm9v
bCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKIApAQCAtMzA1LDYgKzMxMiw4IEBAIHByaXZhdGU6CiAg
ICAgLy8gZnJhbWUgYnVmZmVyIGludG8uIFRoaXMgc2VlbXMgdG8gaGFwcGVuIHdoZW4gQ1NTIHN0
eWxlcyBhcmUKICAgICAvLyB1c2VkIHRvIHJlc2l6ZSB0aGUgQ2FudmFzLgogICAgIFNrQml0bWFw
IG1fcmVzaXppbmdCaXRtYXA7CisKKyAgICBHckNvbnRleHQqIG1fZ3JDb250ZXh0OwogI2VuZGlm
CiAKICNpZiBVU0UoQ0cpCg==
</data>
<flag name="review"
          id="94841"
          type_id="1"
          status="+"
          setter="senorblanco"
    />
          </attachment>
      

    </bug>

</bugzilla>